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' +