Mercurial > repos > tabletprog
comparison 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 |
comparison
equal
deleted
inserted
replaced
181:f188723c15b4 | 182:ab7c142090a0 |
---|---|
1 var mainModule; | 1 var mainModule; |
2 var modules = {}; | 2 var modules = {}; |
3 | 3 |
4 var nextmethodId = 0; | |
5 var methodIds = {}; | 4 var methodIds = {}; |
5 var methodNames = []; | |
6 var assignNames; | 6 var assignNames; |
7 function getMethodId(methodName) | 7 function getMethodId(methodName) |
8 { | 8 { |
9 if (!(methodName in methodIds)) { | 9 if (!(methodName in methodIds)) { |
10 methodIds[methodName] = nextmethodId++; | 10 methodIds[methodName] = methodNames.length; |
11 | 11 methodNames.push(methodName); |
12 } | 12 } |
13 return methodIds[methodName]; | 13 return methodIds[methodName]; |
14 } | 14 } |
15 | 15 |
16 function getOpMethodName(opname) | 16 function getOpMethodName(opname) |
1017 debugprint('//------POPULATING SYMBOLS-----'); | 1017 debugprint('//------POPULATING SYMBOLS-----'); |
1018 obj.populateSymbols(toplevel); | 1018 obj.populateSymbols(toplevel); |
1019 var moduleinit = processUsedToplevel(toplevel); | 1019 var moduleinit = processUsedToplevel(toplevel); |
1020 debugprint('//------COMPILING AST-----'); | 1020 debugprint('//------COMPILING AST-----'); |
1021 var rest = 'object * mainModule() {\n' + moduleinit + '\tmain_module = ' + obj.toCModuleInstance() + ';\n\treturn main_module;\n}\n'; | 1021 var rest = 'object * mainModule() {\n' + moduleinit + '\tmain_module = ' + obj.toCModuleInstance() + ';\n\treturn main_module;\n}\n'; |
1022 var mnames = 'char * methodNames[] = {\n'; | |
1023 for (var i = 0; i < methodNames.length; i++) { | |
1024 mnames += '\t"' + methodNames[i].replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n") + '",\n'; | |
1025 } | |
1026 mnames += '};\n'; | |
1022 return '#include "runtime/proghead.inc"\n' + | 1027 return '#include "runtime/proghead.inc"\n' + |
1023 '#define METHOD_ID_MAIN ' + getMethodId('main') + '\n' + | 1028 '#define METHOD_ID_MAIN ' + getMethodId('main') + '\n' + |
1024 '#define METHOD_ID_EMPTY ' + getMethodId('empty') + '\n' + | 1029 '#define METHOD_ID_EMPTY ' + getMethodId('empty') + '\n' + |
1025 '#define METHOD_ID_CONS ' + getMethodId(getOpMethodName('|')) + '\n' + | 1030 '#define METHOD_ID_CONS ' + getMethodId(getOpMethodName('|')) + '\n' + |
1026 forwarddec + toplevelcode + rest + '#include "runtime/progfoot.inc"\n'; | 1031 mnames + forwarddec + toplevelcode + rest + '#include "runtime/progfoot.inc"\n'; |
1027 } | 1032 } |
1028 | 1033 |
1029 object.prototype.toCModule = function() { | 1034 object.prototype.toCModule = function() { |
1030 return makeCProg(this); | 1035 return makeCProg(this); |
1031 } | 1036 } |