Mercurial > repos > tabletprog
diff cbackend.js @ 182:ab7c142090a0
Make method names available at runtime so they can be included in method not implemented error messages
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 24 Aug 2013 19:02:59 -0700 |
parents | 76e3d4ae1746 |
children | 53cd9c3bcf96 |
line wrap: on
line diff
--- a/cbackend.js Sat Aug 24 16:21:42 2013 -0700 +++ b/cbackend.js Sat Aug 24 19:02:59 2013 -0700 @@ -1,14 +1,14 @@ var mainModule; var modules = {}; -var nextmethodId = 0; var methodIds = {}; +var methodNames = []; var assignNames; function getMethodId(methodName) { if (!(methodName in methodIds)) { - methodIds[methodName] = nextmethodId++; - + methodIds[methodName] = methodNames.length; + methodNames.push(methodName); } return methodIds[methodName]; } @@ -1019,11 +1019,16 @@ var moduleinit = processUsedToplevel(toplevel); debugprint('//------COMPILING AST-----'); var rest = 'object * mainModule() {\n' + moduleinit + '\tmain_module = ' + obj.toCModuleInstance() + ';\n\treturn main_module;\n}\n'; + var mnames = 'char * methodNames[] = {\n'; + for (var i = 0; i < methodNames.length; i++) { + mnames += '\t"' + methodNames[i].replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n") + '",\n'; + } + mnames += '};\n'; return '#include "runtime/proghead.inc"\n' + '#define METHOD_ID_MAIN ' + getMethodId('main') + '\n' + '#define METHOD_ID_EMPTY ' + getMethodId('empty') + '\n' + '#define METHOD_ID_CONS ' + getMethodId(getOpMethodName('|')) + '\n' + - forwarddec + toplevelcode + rest + '#include "runtime/progfoot.inc"\n'; + mnames + forwarddec + toplevelcode + rest + '#include "runtime/progfoot.inc"\n'; } object.prototype.toCModule = function() {