Mercurial > repos > tabletprog
diff jsbackend.js @ 104:648659961e0e
Get editor working again
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 11 Apr 2013 00:12:21 -0700 |
parents | 926b65fe92b4 |
children | d715fb3c39ab |
line wrap: on
line diff
--- a/jsbackend.js Thu Aug 09 19:26:21 2012 -0700 +++ b/jsbackend.js Thu Apr 11 00:12:21 2013 -0700 @@ -3,18 +3,7 @@ function toobj(val) { - switch(typeof val) - { - case 'boolean': - if(val) { - return mainModule.strue; - } else { - return mainModule.sfalse; - } - case 'number': - return mainModule.snumber(val); - } - throw new Error("can't make val into object"); + return (typeof val == "boolean") ? (val ? module_true : module_false) : val; } function importSym(obj, src, key) @@ -257,13 +246,14 @@ var ret = ''; var modulenum = 0; var visited = {}; - for (var i in alwaysused) { + for (var i = 0; i < alwaysused.length; i++) { toplevel.used[alwaysused[i]] = true; } var newused = Object.keys(toplevel.used); var allused = newused; while (newused.length) { - for (var i in newused) { + for (var i = 0; i < newused.length; i++) { + console.log(i, newused[i]); toplevel.names[newused[i]].populateSymbols(toplevel); visited[newused[i]] = true; } @@ -283,13 +273,49 @@ return ret; } +function asyncProcessTopLevelJS(toplevel, whenDone) +{ + var alwaysused = ['true', 'false']; + var ret = ''; + var modulenum = 0; + var visited = {}; + for (var i = 0; i < alwaysused.length; i++) { + toplevel.used[alwaysused[i]] = true; + } + var newused = Object.keys(toplevel.used); + var allused = newused; + var i = -1; + var handler = function() { + i++; + while(newused.length) + { + if (i < newused.length) { + visited[newused[i]] = true; + toplevel.names[newused[i]].popuplateSymbolsAsync(toplevel, handler); + return; + } else { + newused = []; + for (var symbol in toplevel.used) { + if (!(symbol in visited)) { + newused.push(symbol); + allused.push(symbol); + } + } + i = 0; + } + } + whenDone(); + }; + handler(); +} + function makeJSProg(mainmodule) { return processUsedToplevelJS(toplevel) + 'main_module = ' + mainmodule.toJSModule() + '\n' + 'Number.prototype.__defineGetter__("string", function() { return "" + this; });\n' + 'String.prototype.__defineGetter__("string", function() { return this; });\n' + 'String.prototype.__defineGetter__("print", function() { write(this); });\n' + - 'Array.prototype.foreach = function(action) { var ret = module_false; for (var i = 0; i < this.length; i++) { ret = action(i, this[i]) }; return ret; };\n' + + 'Array.prototype = function(action) { var ret = module_false; for (var i = 0; i < this.length; i++) { ret = action(i, this[i]) }; return ret; };\n' + 'Function.prototype.whileCN_do = function(action) { var ret = module_false; while(toobj(this()) == module_true) { ret = action(); } return ret; };\n' + 'function toobj(val) {\n' + ' return (typeof val == "boolean") ? (val ? module_true : module_false) : val;\n' +