Mercurial > repos > tabletprog
comparison 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 |
comparison
equal
deleted
inserted
replaced
103:182c311a9fed | 104:648659961e0e |
---|---|
1 var mainModule; | 1 var mainModule; |
2 var modules = {}; | 2 var modules = {}; |
3 | 3 |
4 function toobj(val) | 4 function toobj(val) |
5 { | 5 { |
6 switch(typeof val) | 6 return (typeof val == "boolean") ? (val ? module_true : module_false) : val; |
7 { | |
8 case 'boolean': | |
9 if(val) { | |
10 return mainModule.strue; | |
11 } else { | |
12 return mainModule.sfalse; | |
13 } | |
14 case 'number': | |
15 return mainModule.snumber(val); | |
16 } | |
17 throw new Error("can't make val into object"); | |
18 } | 7 } |
19 | 8 |
20 function importSym(obj, src, key) | 9 function importSym(obj, src, key) |
21 { | 10 { |
22 if(!(key in src)) { | 11 if(!(key in src)) { |
255 { | 244 { |
256 var alwaysused = ['true', 'false']; | 245 var alwaysused = ['true', 'false']; |
257 var ret = ''; | 246 var ret = ''; |
258 var modulenum = 0; | 247 var modulenum = 0; |
259 var visited = {}; | 248 var visited = {}; |
260 for (var i in alwaysused) { | 249 for (var i = 0; i < alwaysused.length; i++) { |
261 toplevel.used[alwaysused[i]] = true; | 250 toplevel.used[alwaysused[i]] = true; |
262 } | 251 } |
263 var newused = Object.keys(toplevel.used); | 252 var newused = Object.keys(toplevel.used); |
264 var allused = newused; | 253 var allused = newused; |
265 while (newused.length) { | 254 while (newused.length) { |
266 for (var i in newused) { | 255 for (var i = 0; i < newused.length; i++) { |
256 console.log(i, newused[i]); | |
267 toplevel.names[newused[i]].populateSymbols(toplevel); | 257 toplevel.names[newused[i]].populateSymbols(toplevel); |
268 visited[newused[i]] = true; | 258 visited[newused[i]] = true; |
269 } | 259 } |
270 newused = []; | 260 newused = []; |
271 for (var symbol in toplevel.used) { | 261 for (var symbol in toplevel.used) { |
281 ret += 'var ' + toplevel.moduleVar(symbol) + ' = ' + toplevel.names[symbol].toJSModule() + '\n'; | 271 ret += 'var ' + toplevel.moduleVar(symbol) + ' = ' + toplevel.names[symbol].toJSModule() + '\n'; |
282 } | 272 } |
283 return ret; | 273 return ret; |
284 } | 274 } |
285 | 275 |
276 function asyncProcessTopLevelJS(toplevel, whenDone) | |
277 { | |
278 var alwaysused = ['true', 'false']; | |
279 var ret = ''; | |
280 var modulenum = 0; | |
281 var visited = {}; | |
282 for (var i = 0; i < alwaysused.length; i++) { | |
283 toplevel.used[alwaysused[i]] = true; | |
284 } | |
285 var newused = Object.keys(toplevel.used); | |
286 var allused = newused; | |
287 var i = -1; | |
288 var handler = function() { | |
289 i++; | |
290 while(newused.length) | |
291 { | |
292 if (i < newused.length) { | |
293 visited[newused[i]] = true; | |
294 toplevel.names[newused[i]].popuplateSymbolsAsync(toplevel, handler); | |
295 return; | |
296 } else { | |
297 newused = []; | |
298 for (var symbol in toplevel.used) { | |
299 if (!(symbol in visited)) { | |
300 newused.push(symbol); | |
301 allused.push(symbol); | |
302 } | |
303 } | |
304 i = 0; | |
305 } | |
306 } | |
307 whenDone(); | |
308 }; | |
309 handler(); | |
310 } | |
311 | |
286 function makeJSProg(mainmodule) | 312 function makeJSProg(mainmodule) |
287 { | 313 { |
288 return processUsedToplevelJS(toplevel) + 'main_module = ' + mainmodule.toJSModule() + '\n' + | 314 return processUsedToplevelJS(toplevel) + 'main_module = ' + mainmodule.toJSModule() + '\n' + |
289 'Number.prototype.__defineGetter__("string", function() { return "" + this; });\n' + | 315 'Number.prototype.__defineGetter__("string", function() { return "" + this; });\n' + |
290 'String.prototype.__defineGetter__("string", function() { return this; });\n' + | 316 'String.prototype.__defineGetter__("string", function() { return this; });\n' + |
291 'String.prototype.__defineGetter__("print", function() { write(this); });\n' + | 317 'String.prototype.__defineGetter__("print", function() { write(this); });\n' + |
292 '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' + | 318 'Array.prototype = function(action) { var ret = module_false; for (var i = 0; i < this.length; i++) { ret = action(i, this[i]) }; return ret; };\n' + |
293 'Function.prototype.whileCN_do = function(action) { var ret = module_false; while(toobj(this()) == module_true) { ret = action(); } return ret; };\n' + | 319 'Function.prototype.whileCN_do = function(action) { var ret = module_false; while(toobj(this()) == module_true) { ret = action(); } return ret; };\n' + |
294 'function toobj(val) {\n' + | 320 'function toobj(val) {\n' + |
295 ' return (typeof val == "boolean") ? (val ? module_true : module_false) : val;\n' + | 321 ' return (typeof val == "boolean") ? (val ? module_true : module_false) : val;\n' + |
296 '}\n' + | 322 '}\n' + |
297 'var m = main_module.main;\n' + | 323 'var m = main_module.main;\n' + |