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 }