Changeset 2210817
- Timestamp:
- 12/12/2019 01:44:34 PM (6 years ago)
- Location:
- easycoder/trunk
- Files:
-
- 4 edited
-
easycoder-min.js (modified) (4 diffs)
-
easycoder.js (modified) (14 diffs)
-
easycoder.php (modified) (2 diffs)
-
readme.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
easycoder/trunk/easycoder-min.js
r2209140 r2210817 28 28 keyword:"append",lino:b,value:c,select:d.name}),!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.select);try{var d=a.getValue(b.value),e=["{","["].includes(d[0])?JSON.parse(d):d,f=c.value[c.index],g=f.content;g=g?JSON.parse(g):[];g.push(e);f.content=JSON.stringify(g);return b.pc+1}catch(k){return a.runtimeError(b.lino,"JSON: Unable to parse value"),!1}}},Begin:{compile:function(a){a.next();a.compileFromHere(["end"]);return!0},run:function(a){return a[a.pc].pc+1}},Callback:{compile:function(a){a.compileVariable("core", 29 29 "callback");return!0},run:function(a){return a[a.pc].pc+1}},Clear:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord();if(c.isValueHolder)return c=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"clear",lino:b,symbol:c}),!0;a.warning("'Variable '"+c.name+"' does not hold a value")}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);c.isValueHolder?(a.domain[c.domain].value.put(c,{type:"boolean",content:!1}),b.numeric=!1):a.variableDoesNotHoldAValueError(b.lino, 30 c.name);return b.pc+1}},Close:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if("module"===c.keyword)return a.next(),a.addCommand({domain:"core",keyword:"close",lino:b,module:c.name}),!0}return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.module) .program;a.run(a.onClose);return b.pc+1}},Debug:{compile:function(a){var b=a.getLino();if(a.nextTokenIs("program")){a.next();if(["item","pc"].includes(a.getToken())){var c=a.getNextValue();a.addCommand({domain:"core",31 keyword:"debug",lino:b,item:c});return!0}a.addCommand({domain:"core",keyword:"debug",lino:b,item:"program"});return!0}return a.tokenIs("symbols")?(a.next(),a.addCommand({domain:"core",keyword:"debug",lino:b,item:"symbols"}),!0):a.tokenIs("symbol")?(c=a.nextToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:b,item:"symbol",name:c}),!0):a.tokenIs("step")?(a.next(),a.addCommand({domain:"core",keyword:"debug",lino:b,item:"step"}),!0):!1},run:function(a){var b=a[a.pc],c=b.item;switch(c){case "symbols":console.log("Symbols: "+ 32 JSON.stringify(a.symbols,null,2));break;case "symbol":a=a.getSymbolRecord(b.name);c=a.exporter.script;delete a.exporter;console.log("Symbol: "+JSON.stringify(a,null,2));a.exporter.script=c;break;case "step":a.debugStep=!0;break;case "program":console.log("Debug program: "+JSON.stringify(a,null,2));break;default:0<=c.content&&console.log("Debug item "+c.content+": "+JSON.stringify(a[c.content],null,2))}return b.pc+1}},Decode:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getToken(); 33 a. next();a.addCommand({domain:"core",keyword:"decode",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);if(c.isValueHolder){var d=a.getValue(c.value[c.index]);c.value[c.index]={type:"constant",numeric:!1,content:a.decode(d)};b.numeric=!1}else a.variableDoesNotHoldAValueError(b.lino,c.name);return b.pc+1}},Divide:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbol();var d=a.getCommandAt(c.pc).name}c=a.getValue();a.tokenIs("by")&&34 a. next();var e=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"divide",lino:b,value1:c,value2:e,target:d}),!0;a.warning("core 'divide'': Expected value holder")}else return"undefined"===typeof d&&a.warning("core 'divide': No target variable given"),a.addCommand({domain:"core",keyword:"divide",lino:b,value2:e,target:d}),!0;return!1},run:function(a){var b=a[a.pc],c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);35 if(e.isValueHolder){var f=e.value[e.index];c?(a=a.getValue(c)/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b,lino),a=parseInt(f.content)/parseInt(a.getValue(d)),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.variableDoesNotHoldAValueError(b.lino,e.name);return b.pc+1}},Dummy:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"core",keyword:"dummy",lino:b});return!0},36 run:function(a){return a[a.pc].pc+1}},Encode:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"encode",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);if(c.isValueHolder){var d=a.getValue(c.value[c.index]);c.value[c.index]={type:"constant",numeric:!1,content:a.encode(d)};b.numeric=!1}else a.variableDoesNotHoldAValueError(b.lino,c.name);return b.pc+1}},End:{compile:function(a){a.next();37 return !0},run:function(){return 0}},Exit:{compile:function(a){a.next();a.addCommand({domain:"core",keyword:"exit"});return!0},run:function(a){if(a.parent){var b=EasyCoder.scripts[a.parent];b.run(b.nextPc);b.nextPc=0}a.exit();return 0}},Filter:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(a.nextTokenIs("with")){var d=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"filter",lino:b,array:c.name,func:d});return!0}}return!1},run:function(a){var b=a[a.pc],38 c=a.getSymbolRecord(b.array),d=c.value[c.index].content,e=a.getSymbolRecord(b.func).pc;try{var f=JSON.parse(d).filter(function(b){c.a=b;a.run(e);return c.v});c.value[c.index].content=JSON.stringify(f)}catch(g){a.runtimeError(b.lino,"Can't parse this array")}return b.pc+1}},Fork:{compile:function(a){var b=a.getLino();a.next();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];try{a.run(a.symbols[b.label].pc)}catch(c){console.log(c.message),30 c.name);return b.pc+1}},Close:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if("module"===c.keyword)return a.next(),a.addCommand({domain:"core",keyword:"close",lino:b,module:c.name}),!0}return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.module);a=EasyCoder.scripts[a.program];a.run(a.onClose);return b.pc+1}},Debug:{compile:function(a){var b=a.getLino();if(a.nextTokenIs("program")){a.next();if(["item","pc"].includes(a.getToken())){var c=a.getNextValue(); 31 a.addCommand({domain:"core",keyword:"debug",lino:b,item:c});return!0}a.addCommand({domain:"core",keyword:"debug",lino:b,item:"program"});return!0}return a.tokenIs("symbols")?(a.next(),a.addCommand({domain:"core",keyword:"debug",lino:b,item:"symbols"}),!0):a.tokenIs("symbol")?(c=a.nextToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:b,item:"symbol",name:c}),!0):a.tokenIs("step")?(a.next(),a.addCommand({domain:"core",keyword:"debug",lino:b,item:"step"}),!0):!1},run:function(a){var b= 32 a[a.pc],c=b.item;switch(c){case "symbols":console.log("Symbols: "+JSON.stringify(a.symbols,null,2));break;case "symbol":a=a.getSymbolRecord(b.name);c=a.exporter.script;delete a.exporter;console.log("Symbol: "+JSON.stringify(a,null,2));a.exporter.script=c;break;case "step":a.debugStep=!0;break;case "program":console.log("Debug program: "+JSON.stringify(a,null,2));break;default:0<=c.content&&console.log("Debug item "+c.content+": "+JSON.stringify(a[c.content],null,2))}return b.pc+1}},Decode:{compile:function(a){var b= 33 a.getLino();if(a.nextIsSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"decode",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);if(c.isValueHolder){var d=a.getValue(c.value[c.index]);c.value[c.index]={type:"constant",numeric:!1,content:a.decode(d)};b.numeric=!1}else a.variableDoesNotHoldAValueError(b.lino,c.name);return b.pc+1}},Divide:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbol();var d=a.getCommandAt(c.pc).name}c= 34 a.getValue();a.tokenIs("by")&&a.next();var e=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"divide",lino:b,value1:c,value2:e,target:d}),!0;a.warning("core 'divide'': Expected value holder")}else return"undefined"===typeof d&&a.warning("core 'divide': No target variable given"),a.addCommand({domain:"core",keyword:"divide",lino:b,value2:e,target:d}),!0;return!1},run:function(a){var b=a[a.pc], 35 c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var f=e.value[e.index];c?(a=a.getValue(c)/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b,lino),a=parseInt(f.content)/parseInt(a.getValue(d)),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.variableDoesNotHoldAValueError(b.lino,e.name);return b.pc+1}},Dummy:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"core", 36 keyword:"dummy",lino:b});return!0},run:function(a){return a[a.pc].pc+1}},Encode:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"encode",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);if(c.isValueHolder){var d=a.getValue(c.value[c.index]);c.value[c.index]={type:"constant",numeric:!1,content:a.encode(d)};b.numeric=!1}else a.variableDoesNotHoldAValueError(b.lino,c.name); 37 return b.pc+1}},End:{compile:function(a){a.next();return!0},run:function(){return 0}},Exit:{compile:function(a){a.next();a.addCommand({domain:"core",keyword:"exit"});return!0},run:function(a){a.exit();return 0}},Filter:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(a.nextTokenIs("with")){var d=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"filter",lino:b,array:c.name,func:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.array), 38 d=c.value[c.index].content,e=a.getSymbolRecord(b.func).pc;try{var f=JSON.parse(d).filter(function(b){c.a=b;a.run(e);return c.v});c.value[c.index].content=JSON.stringify(f)}catch(g){a.runtimeError(b.lino,"Can't parse this array")}return b.pc+1}},Fork:{compile:function(a){var b=a.getLino();a.next();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];try{a.run(a.symbols[b.label].pc)}catch(c){console.log(c.message), 39 39 alert(c.message)}return b.pc+1}},Go:{compile:function(a){var b=a.getLino();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"go",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];if(b.label){if(a.verifySymbol(b.label)){var c=a.symbols[b.label];if(c)return c.pc}a.runtimeError(b.lino,"Unknown symbol '"+b.label+"'");return 0}return b.goto}},Gosub:{compile:function(a){var b=a.getLino();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core", 40 40 keyword:"gosub",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];if(a.verifySymbol(b.label))return a.stack.push(a.pc+1),a.symbols[b.label].pc;a.runtimeError(b.lino,"Unknown symbol '"+b.label+"'");return 0}},If:{compile:function(a){var b=a.getLino();a.next();var c=a.condition.compile(a),d=a.getPc();a.addCommand({domain:"core",keyword:"if",lino:b,condition:c});a.compileOne();if(!a.getToken())return a.getCommandAt(d).else=a.getPc(),!0;a.tokenIs("else")?(c=a.getPc(),a.addCommand({domain:"core", 41 41 keyword:"goto",lino:b,goto:0}),a.getCommandAt(d).else=a.getPc(),a.next(),a.compileOne(!0),a.getCommandAt(c).goto=a.getPc()):a.getCommandAt(d).else=a.getPc();return!0},run:function(a){var b=a[a.pc];return a.condition.test(a,b.condition)?b.pc+1:b.else}},Import:{compile:function(a){var b=a.imports,c=EasyCoder.scripts[b.caller],d=a.getProgram();if(b.length){b=$jscomp.makeIterator(b);for(var e=b.next();!e.done;e=b.next()){e=c.getSymbolRecord(e.value);var f=a.nextToken(),g=e.keyword;if(f===g){if(f=a.compileVariable(e.domain, 42 g,!0),f=d[a.getSymbols()[f.name].pc],f.element=e.element,f.exporter=e.exporter?e.exporter:c.script,f.exportedName=e.name,f.extra=e.extra,f.isValueHolder=e.isValueHolder,e.program&&(f.program=e.program ),f.imported=!0,!a.tokenIs("and"))break}else throw Error("Mismatched import variable type for '"+e.name+"'");}if(a.tokenIs("and"))throw Error("Imports do not match exports");}else a.next();return!0},run:function(a){return a[a.pc].pc+1}},Index:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol(!0)){var c=42 g,!0),f=d[a.getSymbols()[f.name].pc],f.element=e.element,f.exporter=e.exporter?e.exporter:c.script,f.exportedName=e.name,f.extra=e.extra,f.isValueHolder=e.isValueHolder,e.program&&(f.program=e.program.script),f.imported=!0,!a.tokenIs("and"))break}else throw Error("Mismatched import variable type for '"+e.name+"'");}if(a.tokenIs("and"))throw Error("Imports do not match exports");}else a.next();return!0},run:function(a){return a[a.pc].pc+1}},Index:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol(!0)){var c= 43 43 a.getToken();if(a.nextTokenIs("to")){var d=a.getNextValue();a.addCommand({domain:"core",keyword:"index",lino:b,symbol:c,value:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol),d=a.getValue(b.value);d>=c.elements&&a.runtimeError(b.lino,"Array index "+d+" is out of range for '"+c.name+"'");c.index=d;c.imported&&(EasyCoder.symbols[c.exporter].getSymbolRecord(c.exportedName).index=d);return b.pc+1}},Load:{compile:function(a){var b=a.getLino();switch(a.nextToken()){case "plugin":var c= 44 44 a.getNextValue();a.addCommand({domain:"core",keyword:"load",lino:b,name:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.name);switch(b.keyword){case "load":if(a.checkPlugin(c))return b.pc+1;EasyCoder_Plugins.getLocalPlugin(a.getPluginsPath,c,a.getPlugin,a.addLocalPlugin,function(){a.run(b.pc+1)});return 0}}},Module:{compile:function(a){a.compileVariable("core","module");return!0},run:function(a){return a[a.pc].pc+1}},Multiply:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c= … … 50 50 "'")}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.target);c.isValueHolder||a.variableDoesNotHoldAValueError(b.lino,c.name);a=a.evaluate(b.value);c.value[c.index]={type:a.type,numeric:a.numeric,content:a.content};c.imported&&(c=EasyCoder.scripts[c.exporter].getSymbolRecord(c.exportedName),c.value[c.index]=a);return b.pc+1}},Replace:{compile:function(a){var b=a.getLino(),c=a.getNextValue();if(a.tokenIs("with")){var d=a.getNextValue();if(a.tokenIs("in")&&a.nextIsSymbol()){var e=a.getSymbolRecord(); 51 51 if(e.isValueHolder)return a.next(),a.addCommand({domain:"core",keyword:"replace",lino:b,original:c,replacement:d,target:e.name}),!0;throw Error("'"+e.name+"' does not hold a value");}}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.original),d=a.getValue(b.replacement),e=a.getSymbolRecord(b.target);a=a.getValue(e.value[e.index]).split(c).join(d);e.value[e.index]={type:"constant",numeric:!1,content:a};return b.pc+1}},Require:{compile:function(a){var b=a.getLino(),c=a.nextToken();if(["css","js"].includes(c)){var d= 52 a.getNextValue();a.addCommand({domain:"core",keyword:"require",lino:b,type:c,url:d});return!0}throw Error("File type must be 'css' or 'js'");},run:function(a){var b=a[a.pc];a.require(b.type,a.getValue(b.url),function(){a.run(b.pc+1)});return 0}},Return:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:b});return!0},run:function(a){return a.stack.pop()}},Run:{compile:function(a){var b=a.getLino(),c=a.getNextValue(),d= a.getProgram(),e=[];if(a.tokenIs("with"))for(;;)if(a.nextIsSymbol(!0)){var f=53 a.getSymbolRecord(); e.push(f.name);a.next();if(!a.tokenIs("and"))break}if(a.tokenIs("as")&&a.nextIsSymbol(!0)){var g=a.getSymbolRecord();g.program=d;a.next();if("module"!==g.keyword)throw Error("'"+g.name+"' is not a module");g=g.name}f=!1;a.tokenIs("nowait")&&(a.next(),f=!0);d=a.getPc();a.addCommand({domain:"core",keyword:"run",lino:b,script:c,imports:e,module:g,nowait:f,then:0});a.tokenIs("then")&&(b=a.getPc(),a.addCommand({domain:"core",keyword:"goto",goto:0}),a.getCommandAt(d).then=a.getPc(),54 a. next(),a.compileOne(!0),a.addCommand({domain:"core",keyword:"stop"}),a.getCommandAt(b).goto=a.getPc());return!0},run:function(a){a.nextPc=a.pc+1;a.runScript(a);return 0}},Sanitize:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"sanitize",lino:b,name:c});return!0}return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.name);a=a.value[a.index];a.content=JSON.stringify(JSON.parse(a.content));return b.pc+1}},Script:{compile:function(a){var b=52 a.getNextValue();a.addCommand({domain:"core",keyword:"require",lino:b,type:c,url:d});return!0}throw Error("File type must be 'css' or 'js'");},run:function(a){var b=a[a.pc];a.require(b.type,a.getValue(b.url),function(){a.run(b.pc+1)});return 0}},Return:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:b});return!0},run:function(a){return a.stack.pop()}},Run:{compile:function(a){var b=a.getLino(),c=a.getNextValue(),d=[];if(a.tokenIs("with"))for(;;)if(a.nextIsSymbol(!0)){var e= 53 a.getSymbolRecord();d.push(e.name);a.next();if(!a.tokenIs("and"))break}if(a.tokenIs("as")&&a.nextIsSymbol(!0)){var f=a.getSymbolRecord();a.next();if("module"!==f.keyword)throw Error("'"+f.name+"' is not a module");f=f.name}var g=!1;a.tokenIs("nowait")&&(a.next(),g=!0);e=a.getPc();a.addCommand({domain:"core",keyword:"run",lino:b,script:c,imports:d,module:f,nowait:g,then:0});a.tokenIs("then")&&(b=a.getPc(),a.addCommand({domain:"core",keyword:"goto",goto:0}),a.getCommandAt(e).then=a.getPc(),a.next(), 54 a.compileOne(!0),a.addCommand({domain:"core",keyword:"stop"}),a.getCommandAt(b).goto=a.getPc());return!0},run:function(a){a.nextPc=a.pc+1;a.runScript(a);return 0}},Sanitize:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"sanitize",lino:b,name:c});return!0}return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.name);a=a.value[a.index];a.content=JSON.stringify(JSON.parse(a.content));return b.pc+1}},Script:{compile:function(a){var b= 55 55 a.getProgram();b.script=a.nextToken();if(EasyCoder.scripts[b.script])throw Error("Script '"+b.script+"' is already running.");EasyCoder.scripts[b.script]=b;a.next();return!0},run:function(a){return a[a.pc].pc+1}},Send:{compile:function(a){var b=a.getLino(),c="";a.nextTokenIs("to")||(c=a.getValue());if(a.tokenIs("to")){if(a.nextTokenIs("parent"))var d="parent";else if(a.isSymbol){d=a.getSymbolRecord();if("module"!==d.keyword)throw Error("'"+d.name+"' is not a module");d=d.name}a.next();a.addCommand({domain:"core", 56 keyword:"send",lino:b,message:c,recipient:d})}return!0},run:function(a){var b=a[a.pc],c=a.getValue(b.message);"parent"===b.recipient?a.parent&&(a=EasyCoder.scripts[a.parent],a.onMessage&&(a.message=c,a.run(a.onMessage))):(a=a.getSymbolRecord(b.recipient),a.program&&(a .program.message=c,a.program.run(a.program.onMessage)));return b.pc+1}},Set:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(!c.isValueHolder)return!1;if(a.nextTokenIs("to")){a.next();for(var d=56 keyword:"send",lino:b,message:c,recipient:d})}return!0},run:function(a){var b=a[a.pc],c=a.getValue(b.message);"parent"===b.recipient?a.parent&&(a=EasyCoder.scripts[a.parent],a.onMessage&&(a.message=c,a.run(a.onMessage))):(a=a.getSymbolRecord(b.recipient),a.program&&(a=EasyCoder.scripts[a.program],a.message=c,a.run(a.onMessage)));return b.pc+1}},Set:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(!c.isValueHolder)return!1;if(a.nextTokenIs("to")){a.next();for(var d= 57 57 [];;){a.mark();try{d.push(a.getValue())}catch(f){a.rewind();break}}a.addCommand({domain:"core",keyword:"set",lino:b,request:"setArray",target:c.name,value:d});return!0}a.addCommand({domain:"core",keyword:"set",lino:b,request:"setBoolean",target:c.name});return!0}switch(a.getToken()){case "ready":return a.next(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setReady"}),!0;case "element":c=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol()&&(d=a.getSymbolRecord(),"variable"===d.keyword&& 58 58 a.nextTokenIs("to"))){var e=a.getNextValue();a.addCommand({domain:"core",keyword:"set",lino:b,request:"setElement",target:d.name,index:c,value:e});return!0}break;case "property":c=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol()&&(d=a.getSymbolRecord(),"variable"===d.keyword&&a.nextTokenIs("to")))return e=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setProperty",target:d.name,name:c,value:e}),!0;break;case "arg":if(c=a.getNextValue(),a.tokenIs("of")&&a.nextIsSymbol()&& … … 64 64 1}},Sort:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(a.nextTokenIs("with")){var d=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"sort",lino:b,array:c.name,func:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.array),d=c.value[c.index].content,e=a.getSymbolRecord(b.func).pc;try{var f=JSON.parse(d);f.sort(function(b,d){c.a=b;c.b=d;a.run(e);return c.v});c.value[c.index].content=JSON.stringify(f)}catch(g){a.runtimeError(b.lino, 65 65 "Can't parse this array")}return b.pc+1}},Split:{compile:function(a){var b=a.getLino();item=a.getNextValue();var c="\n";a.tokenIs("on")&&(c=a.getNextValue());if(["giving","into"].includes(a.getToken())&&a.nextIsSymbol()){var d=a.getSymbolRecord();if("variable"===d.keyword)return a.next(),a.addCommand({domain:"core",keyword:"split",lino:b,item:item,on:c,target:d.name}),!0}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.item),d=a.getValue(b.on);c=c.split(d);d=c.length;targetRecord=a.getSymbolRecord(b.target); 66 targetRecord.elements=d;for(a=0;a<d;a++)targetRecord.value[a]={type:"constant",numeric:!1,content:c[a]};targetRecord.index=0;return b.pc+1}},Stop:{compile:function(a){var b=a.getLino();a.next();if(a.more()&&a.isSymbol()&&!a.getToken().endsWith(":")){var c=a.getSymbolRecord();return"module"===c.keyword?(a.next(),a.addCommand({domain:"core",keyword:"stop",lino:b,name:c.name}),!0):!1}a.addCommand({domain:"core",keyword:"stop",lino:b,next:0});return!0},run:function(a){var b=a[a.pc];if(b.name)a .getSymbolRecord(b.name).program.exit();67 else return 0;return b.pc+1}},Take:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();if(a.tokenIs("from"))if(a.next(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var e=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,value2:d,target:e})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,target:d});return!0}a.warning("core 'take'': Expected value holder")}else{d=66 targetRecord.elements=d;for(a=0;a<d;a++)targetRecord.value[a]={type:"constant",numeric:!1,content:c[a]};targetRecord.index=0;return b.pc+1}},Stop:{compile:function(a){var b=a.getLino();a.next();if(a.more()&&a.isSymbol()&&!a.getToken().endsWith(":")){var c=a.getSymbolRecord();return"module"===c.keyword?(a.next(),a.addCommand({domain:"core",keyword:"stop",lino:b,name:c.name}),!0):!1}a.addCommand({domain:"core",keyword:"stop",lino:b,next:0});return!0},run:function(a){var b=a[a.pc];if(b.name)a=a.getSymbolRecord(b.name), 67 EasyCoder.scripts[a.program].exit();else return 0;return b.pc+1}},Take:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();if(a.tokenIs("from"))if(a.next(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var e=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,value2:d,target:e})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,target:d});return!0}a.warning("core 'take'': Expected value holder")}else{d= 68 68 a.getValue();if(a.tokenIs("giving"))return a.next(),e=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,value2:d,target:e}),!0;a.warning("core 'take'': Expected \"giving\"")}return!1},run:function(a){var b=a[a.pc],c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var f=e.value[e.index];d?(a=a.getValue(d)-a.getValue(c),e.value[e.index]={type:"constant",numeric:!0,content:a}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b.lino),a=parseInt(a.getValue(f))- 69 69 parseInt(a.getValue(c)),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.variableDoesNotHoldAValueError(b.lino,e.name);return b.pc+1}},Toggle:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolPc();a.next();a.addCommand({domain:"core",keyword:"toggle",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a[b.symbol];if(c.isValueHolder){var d=a.domain[c.domain];a=d.value.get(a,c.value[c.index]).content;d.value.put(c,{type:"boolean",content:!a})}else a.variableDoesNotHoldAValueError(b.lino, 70 70 c.name);return b.pc+1}},Variable:{compile:function(a){a.compileVariable("core","variable",!0);return!0},run:function(a){return a[a.pc].pc+1}},Wait:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue(a),d=1E3;switch(a.getToken()){case "milli":case "millis":a.next();d=1;break;case "tick":case "ticks":a.next();d=10;break;case "second":case "seconds":a.next();d=1E3;break;case "minute":case "minutes":a.next(),d=6E4}a.addCommand({domain:"core",keyword:"wait",lino:b,value:c,multiplier:d});return!0}, 71 run:function(a){var b=a[a.pc],c=a.getValue(b.value);setTimeout(function(){a.run (b.pc+1)},c*b.multiplier);return 0}},While:{compile:function(a){var b=a.getLino();a.next();var c=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:b,condition:c});b=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});a.getCommandAt(b).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?71 run:function(a){var b=a[a.pc],c=a.getValue(b.value);setTimeout(function(){a.run&&a.run(b.pc+1)},c*b.multiplier);return 0}},While:{compile:function(a){var b=a.getLino();a.next();var c=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:b,condition:c});b=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});a.getCommandAt(b).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)? 72 72 a.pc+2:a.pc+1}},getHandler:function(a){switch(a){case "add":return EasyCoder_Core.Add;case "alias":return EasyCoder_Core.Alias;case "append":return EasyCoder_Core.Append;case "begin":return EasyCoder_Core.Begin;case "callback":return EasyCoder_Core.Callback;case "clear":return EasyCoder_Core.Clear;case "close":return EasyCoder_Core.Close;case "debug":return EasyCoder_Core.Debug;case "decode":return EasyCoder_Core.Decode;case "divide":return EasyCoder_Core.Divide;case "dummy":return EasyCoder_Core.Dummy; 73 73 case "encode":return EasyCoder_Core.Encode;case "end":return EasyCoder_Core.End;case "exit":return EasyCoder_Core.Exit;case "filter":return EasyCoder_Core.Filter;case "fork":return EasyCoder_Core.Fork;case "go":case "goto":return EasyCoder_Core.Go;case "gosub":return EasyCoder_Core.Gosub;case "if":return EasyCoder_Core.If;case "import":return EasyCoder_Core.Import;case "index":return EasyCoder_Core.Index;case "load":return EasyCoder_Core.Load;case "module":return EasyCoder_Core.Module;case "multiply":return EasyCoder_Core.Multiply; … … 102 102 f.domain=this.domain;f.imports=b;b=EasyCoder_Compiler.compile(e);this.compiling=!1;b.EasyCoder=this;b.value=EasyCoder_Value;b.condition=EasyCoder_Condition;b.compare=EasyCoder_Compare;b.source=a;b.run=this.run;b.exit=this.exit;b.runScript=this.runScript;b.evaluate=this.evaluate;b.getValue=this.getValue;b.getFormattedValue=this.getFormattedValue;b.getSimpleValue=this.getSimpleValue;b.encode=this.encode;b.decode=this.decode;b.domain=this.domain;b.require=this.require;b.isUndefined=this.isUndefined; 103 103 b.checkPlugin=this.checkPlugin;b.getPlugin=this.getPlugin;b.addLocalPlugin=this.addLocalPlugin;b.getPluginsPath=this.getPluginsPath;b.getSymbolRecord=this.getSymbolRecord;b.verifySymbol=this.verifySymbol;b.runtimeError=this.runtimeError;b.nonNumericValueError=this.nonNumericValueError;b.variableDoesNotHoldAValueError=this.variableDoesNotHoldAValueError;b.reportError=this.reportError;b.register=this.register;b.symbols=f.getSymbols();b.encoding="ec";b.popups=[];b.stack=[];b.queue=[0];b.module=c;b.parent= 104 d;c&&(c.program=b);return b},tokeniseFile:function(a){var b=[],c=[],d=0;a.forEach(function(a,f){b.push({lino:f+1,line:a});for(var e=a.length,k="",h=!0,l=0;l<e;l++){var n=a[l];if(0==n.trim().length)h||(c.push({index:d,lino:f+1,token:k}),d++,k="",h=!0);else if(h=!1,"`"===n){for(m=l;++l<a.length&&"`"!==a[l];);k=a.substr(m,l-m+1)}else if("!"==n)break;else k+=n}0<k.length&&c.push({index:d,lino:f+1,token:k})});return{scriptLines:b,tokens:c}},tokeniseAndCompile:function(a,b,c,d,e){var f=null,g=Date.now(); 105 a=this.tokeniseFile(a);try{f=this.compileScript(a,b,c,d);this.scriptIndex++;f.script||(f.script=this.scriptIndex);var k=Date.now();console.log(k-this.timestamp+" ms: Compiled "+(f.script+": "+a.scriptLines.length+" lines ("+a.tokens.length+" tokens) in ")+(k-g+" ms"))}catch(h){"stop"!==h.message&&(this.reportError(h,d,a),d&&d.onError&&d.run(d.onError))}f&&(f.onExit=e,f.running=!0,EasyCoder_Run.run(f,0))},tokenise:function(a){var b=a.split("\n");if(!this.tokenising){try{this.tokeniseAndCompile(b)}catch(c){this.reportError(c, 106 null,a)}this.tokenising=!0}},setPluginCount:function(a){EasyCoder.plugins=[];EasyCoder.pluginCount=a},checkPlugin:function(a){return EasyCoder.domain[a]},getPlugin:function(a,b,c){EasyCoder.domain[a]?c():(a=document.createElement("script"),a.type="text/javascript",a.src=b+"?ver="+EasyCoder.version,a.onload=function(){console.log(Date.now()-EasyCoder.timestamp+" ms: Plugin "+b+" loaded");c()},document.head.appendChild(a))},addGlobalPlugin:function(a,b){EasyCoder.plugins.push({name:a,handler:b});EasyCoder.plugins.length=== 107 EasyCoder.pluginCount&&(EasyCoder.plugins.forEach(function(a){EasyCoder.domain[a.name]=a.handler}),EasyCoder.tokenise(EasyCoder.source))},addLocalPlugin:function(a,b,c){EasyCoder.domain[a]=b;c()},getPluginsPath:function(){return EasyCoder.pluginsPath},loadPluginJs:function(a){var b=this;console.log(Date.now()-this.timestamp+" ms: Load "+a+"/easycoder/plugins.js");var c=document.createElement("script");c.src=""+window.location.origin+a+"/easycoder/plugins.js?ver="+this.version;c.type="text/javascript"; 108 c.onload=function(){EasyCoder_Plugins.getGlobalPlugins(b.timestamp,a,b.setPluginCount,b.getPlugin,b.addGlobalPlugin)};c.onerror=function(){a?b.loadPluginJs(a.slice(0,a.lastIndexOf("/"))):b.reportError({message:"Can't load plugins.js"},b.program,b.source)};document.head.appendChild(c);this.pluginsPath=a},start:function(a){this.source=a;this.scriptIndex=0;a=window.location.pathname;a=a.endsWith("/")?a.slice(0,-1):"";"undefined"===typeof EasyCoder_Plugins?this.loadPluginJs(a):(this.pluginsPath=a,EasyCoder_Plugins.getGlobalPlugins(this.timestamp, 109 a,this.setPluginCount,this.getPlugin,this.addGlobalPlugin))}},EasyCoder_Run={name:"EasyCoder_Run",run:function(a,b){var c=[],d=function(a){var b=9999;a.forEach(function(a){a=a.line;for(var c=0;c<a.length&&" "===a[c];)c++;0<c&&c<b&&(b=c)});return 0};if(c.length)c.push(b);else for(a.register(a),c.push(b);0<c.length;)for(a.pc=c.shift(),a.watchdog=0,b={};a.running;){if(1E6<a.watchdog){a.lino=a[a.pc].lino;a.reportError(Error("Program runaway intercepted.\nHave you forgotten to increment a loop counter?", 110 a),a);break}a.watchdog++;var e=a[a.pc].domain;a.debugStep&&console.log(a.script+": Line "+a[a.pc].lino+": PC: "+a.pc+" "+e+":"+a[a.pc].keyword);var f=a.domain[e];if(!f){a.runtimeError(a[a.pc].lino,"Unknown domain '"+e+"'");break}a.pc=f.run(a);if(!a.pc)break;if(a.stop){a.tracing=!1;break}if(a.tracing){e=a[a.pc];f=a.source.scriptLines;var g=d(f),k=document.getElementById("easycoder-tracer");if(!k){a.runtimeError(e.lino,"Element 'easycoder-tracer' was not found");return}k.style.display="block";k.style.visibility= 111 "visible";var h="";if(a.tracer){if(k=document.getElementById("easycoder-tracer-content")){a.tracer.variables.forEach(function(b,c,d){var e=a.getSymbolRecord(b);if(1<e.elements)for(h+=b+": "+e.index+"/"+e.elements+": ",b=0;b<e.elements;b++){var f=e.value[b];h=f?h+(f.content+" "):h+"undefined "}else h=(e=e.value[e.index])?h+(b+": "+e.content):h+(b+": undefined");switch(a.tracer.alignment){case "horizontal":c<d.length-1&&(h+=", ");break;case "vertical":h+="<br>"}});h+="<hr>";for(var l="",n=5;0<n;n--){if(e.lino){var q= 112 f[e.lino-n].line.substr(g);l+='<input type="text" name="'+n+'"value="'+(e.lino-n+1+": "+q.split("\\s").join(" ")+'"style="width:100%;border:none;enabled:false">')}l+="<br>"}k.innerHTML=h+" "+l;k.style.display="block";b.$jscomp$loop$prop$run$66=document.getElementById("easycoder-run-button");b.$jscomp$loop$prop$step$67=document.getElementById("easycoder-step-button");b.$jscomp$loop$prop$run$66.onclick=function(b){return function(){b.$jscomp$loop$prop$run$66.blur();a.tracing=!1;document.getElementById("easycoder-tracer-content").style.display= 113 "none";try{EasyCoder_Run.run(a,a.resume)}catch(p){var c="Error in run handler: "+p.message;console.log(c);alert(c)}}}(b);b.$jscomp$loop$prop$step$67.onclick=function(b){return function(){console.log("step");b.$jscomp$loop$prop$step$67.blur();a.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{a.run(a.resume)}catch(p){var c="Error in step handler: "+p.message;console.log(c);alert(c)}}}(b)}a.resume=a.pc;a.pc=0}break}b={$jscomp$loop$prop$run$66:b.$jscomp$loop$prop$run$66, 114 $jscomp$loop$prop$step$67:b.$jscomp$loop$prop$step$67}}},exit:function(a){a.onExit&&(a.un(a.onExit),delete EasyCoder.scripts[a.script],a.module.program=null,a.running=!1)}},EasyCoder_Value={name:"EasyCoder_Value",getItem:function(a){var b=a.getToken();if(!b)return null;if("true"===b)return a.next(),{type:"boolean",content:!0};if("false"===b)return a.next(),{type:"boolean",content:!1};if("`"===b.charAt(0))return a.next(),{type:"constant",numeric:!1,content:b.substring(1,b.length-1)};if(b.charAt(0).match(/[0-9-]/)){var c= 115 eval(b);if(Number.isInteger(c))return a.next(),{type:"constant",numeric:!0,content:c};throw Error("'"+b+"' is not an integer");}b=a.getIndex();c=$jscomp.makeIterator(Object.keys(a.domain));for(var d=c.next();!d.done;d=c.next())if(d=d.value,a.rewindTo(b),d=a.domain[d].value.compile(a))return d;return null},compile:function(a){var b=a.getToken(),c=EasyCoder_Value.getItem(a);if(!c)throw Error("Undefined value: '"+b+"'");if("cat"===a.getToken()){for(b={type:"cat",numeric:!1,parts:[c]};a.tokenIs("cat");)a.next(), 116 b.parts.push(a.value.getItem(a));return b}return c},doValue:function(a,b){if("undefined"===typeof b.type)return a.runtimeError(a[a.pc].lino,"Undefined value (variable not initialized?)"),null;switch(b.type){case "cat":return{type:"constant",numeric:!1,content:b.parts.reduce(function(b,c){return b+EasyCoder_Value.doValue(a,c).content},"")};case "boolean":case "constant":return b;case "symbol":var c=a.getSymbolRecord(b.name);if(c.isValueHolder){if(b=c.value[c.index]){c=b.content;if(null===c||"undefined"=== 117 typeof c)b.content=b.numeric?0:"";return b}return null}return a.domain[c.domain].value.get(a,b)}return a.domain[b.domain].value.get(a,b)},constant:function(a,b){return{type:"constant",numeric:b,content:a}},evaluate:function(a,b){if(!b)return{type:"constant",numeric:!1,content:""};var c=EasyCoder_Value.doValue(a,b);if(c)return c;a.runtimeError(a[a.pc].lino,"Can't decode value: "+b)},getValue:function(a,b){return EasyCoder_Value.evaluate(a,b).content},encode:function(a,b){if(a)switch(b){case "ec":return a.replace(/'/g, 118 "~sq~").replace(/"/g,"~dq~").replace(/\n/g,"%0a").replace(/\r/g,"%0d");case "url":return encodeURIComponent(a.replace(/\s/g,"+"));case "sanitize":return a.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}return a},decode:function(a,b){if(a)switch(b){case "ec":return a.replace(/~dq~/g,'"').replace(/~sq~/g,"'").replace(/%0a/g,"\n").replace(/%0d/g,"\r");case "url":return decodeURIComponent(a).replace(/\+/g," ")}return a}};EasyCoder.version="2.5.4";EasyCoder.timestamp=Date.now();console.log("EasyCoder loaded; waiting for page"); 104 d;c&&(c.program=b.script);return b},tokeniseFile:function(a){var b=[],c=[],d=0;a.forEach(function(a,f){b.push({lino:f+1,line:a});for(var e=a.length,k="",h=!0,l=0;l<e;l++){var n=a[l];if(0==n.trim().length)h||(c.push({index:d,lino:f+1,token:k}),d++,k="",h=!0);else if(h=!1,"`"===n){for(m=l;++l<a.length&&"`"!==a[l];);k=a.substr(m,l-m+1)}else if("!"==n)break;else k+=n}0<k.length&&c.push({index:d,lino:f+1,token:k})});return{scriptLines:b,tokens:c}},tokeniseAndCompile:function(a,b,c,d,e){var f=null,g=Date.now(); 105 a=this.tokeniseFile(a);try{f=this.compileScript(a,b,c,d);this.scriptIndex++;f.script||(f.script=this.scriptIndex);var k=Date.now();console.log(k-this.timestamp+" ms: Compiled "+(f.script+": "+a.scriptLines.length+" lines ("+a.tokens.length+" tokens) in ")+(k-g+" ms"))}catch(h){"stop"!==h.message&&(this.reportError(h,d,a),d&&d.onError&&d.run(d.onError))}f&&(EasyCoder.scripts[f.script]=f,c&&(c.program=f.script),f.afterExit=e,f.running=!0,EasyCoder_Run.run(f,0))},tokenise:function(a){var b=a.split("\n"); 106 if(!this.tokenising){try{this.tokeniseAndCompile(b)}catch(c){this.reportError(c,null,a)}this.tokenising=!0}},setPluginCount:function(a){EasyCoder.plugins=[];EasyCoder.pluginCount=a},checkPlugin:function(a){return EasyCoder.domain[a]},getPlugin:function(a,b,c){EasyCoder.domain[a]?c():(a=document.createElement("script"),a.type="text/javascript",a.src=b+"?ver="+EasyCoder.version,a.onload=function(){console.log(Date.now()-EasyCoder.timestamp+" ms: Plugin "+b+" loaded");c()},document.head.appendChild(a))}, 107 addGlobalPlugin:function(a,b){EasyCoder.plugins.push({name:a,handler:b});EasyCoder.plugins.length===EasyCoder.pluginCount&&(EasyCoder.plugins.forEach(function(a){EasyCoder.domain[a.name]=a.handler}),EasyCoder.tokenise(EasyCoder.source))},addLocalPlugin:function(a,b,c){EasyCoder.domain[a]=b;c()},getPluginsPath:function(){return EasyCoder.pluginsPath},loadPluginJs:function(a){var b=this;console.log(Date.now()-this.timestamp+" ms: Load "+a+"/easycoder/plugins.js");var c=document.createElement("script"); 108 c.src=""+window.location.origin+a+"/easycoder/plugins.js?ver="+this.version;c.type="text/javascript";c.onload=function(){EasyCoder_Plugins.getGlobalPlugins(b.timestamp,a,b.setPluginCount,b.getPlugin,b.addGlobalPlugin)};c.onerror=function(){a?b.loadPluginJs(a.slice(0,a.lastIndexOf("/"))):b.reportError({message:"Can't load plugins.js"},b.program,b.source)};document.head.appendChild(c);this.pluginsPath=a},start:function(a){this.source=a;this.scriptIndex=0;a=window.location.pathname;a=a.endsWith("/")? 109 a.slice(0,-1):"";"undefined"===typeof EasyCoder_Plugins?this.loadPluginJs(a):(this.pluginsPath=a,EasyCoder_Plugins.getGlobalPlugins(this.timestamp,a,this.setPluginCount,this.getPlugin,this.addGlobalPlugin))}},EasyCoder_Run={name:"EasyCoder_Run",run:function(a,b){var c=[],d=function(a){var b=9999;a.forEach(function(a){a=a.line;for(var c=0;c<a.length&&" "===a[c];)c++;0<c&&c<b&&(b=c)});return 0};if(c.length)c.push(b);else for(a.register(a),c.push(b);0<c.length;)for(a.pc=c.shift(),a.watchdog=0,b={};a.running;){if(1E6< 110 a.watchdog){a.lino=a[a.pc].lino;a.reportError(Error("Program runaway intercepted.\nHave you forgotten to increment a loop counter?",a),a);break}a.watchdog++;var e=a[a.pc].domain;a.debugStep&&console.log(a.script+": Line "+a[a.pc].lino+": PC: "+a.pc+" "+e+":"+a[a.pc].keyword);var f=a.domain[e];if(!f){a.runtimeError(a[a.pc].lino,"Unknown domain '"+e+"'");break}a.pc=f.run(a);if(!a.pc)break;if(a.stop){a.tracing=!1;break}if(a.tracing){e=a[a.pc];f=a.source.scriptLines;var g=d(f),k=document.getElementById("easycoder-tracer"); 111 if(!k){a.runtimeError(e.lino,"Element 'easycoder-tracer' was not found");return}k.style.display="block";k.style.visibility="visible";var h="";if(a.tracer){if(k=document.getElementById("easycoder-tracer-content")){a.tracer.variables.forEach(function(b,c,d){var e=a.getSymbolRecord(b);if(1<e.elements)for(h+=b+": "+e.index+"/"+e.elements+": ",b=0;b<e.elements;b++){var f=e.value[b];h=f?h+(f.content+" "):h+"undefined "}else h=(e=e.value[e.index])?h+(b+": "+e.content):h+(b+": undefined");switch(a.tracer.alignment){case "horizontal":c< 112 d.length-1&&(h+=", ");break;case "vertical":h+="<br>"}});h+="<hr>";for(var l="",n=5;0<n;n--){if(e.lino){var q=f[e.lino-n].line.substr(g);l+='<input type="text" name="'+n+'"value="'+(e.lino-n+1+": "+q.split("\\s").join(" ")+'"style="width:100%;border:none;enabled:false">')}l+="<br>"}k.innerHTML=h+" "+l;k.style.display="block";b.$jscomp$loop$prop$run$66=document.getElementById("easycoder-run-button");b.$jscomp$loop$prop$step$67=document.getElementById("easycoder-step-button");b.$jscomp$loop$prop$run$66.onclick= 113 function(b){return function(){b.$jscomp$loop$prop$run$66.blur();a.tracing=!1;document.getElementById("easycoder-tracer-content").style.display="none";try{EasyCoder_Run.run(a,a.resume)}catch(p){var c="Error in run handler: "+p.message;console.log(c);alert(c)}}}(b);b.$jscomp$loop$prop$step$67.onclick=function(b){return function(){console.log("step");b.$jscomp$loop$prop$step$67.blur();a.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{a.run(a.resume)}catch(p){var c= 114 "Error in step handler: "+p.message;console.log(c);alert(c)}}}(b)}a.resume=a.pc;a.pc=0}break}b={$jscomp$loop$prop$run$66:b.$jscomp$loop$prop$run$66,$jscomp$loop$prop$step$67:b.$jscomp$loop$prop$step$67}}},exit:function(a){a.onExit&&a.run(a.onExit);var b=a.parent,c=a.afterExit;delete EasyCoder.scripts[a.script];a.module&&delete a.module.program;Object.keys(a).forEach(function(b){delete a[b]});b&&c&&EasyCoder.scripts[b].run(c)}},EasyCoder_Value={name:"EasyCoder_Value",getItem:function(a){var b=a.getToken(); 115 if(!b)return null;if("true"===b)return a.next(),{type:"boolean",content:!0};if("false"===b)return a.next(),{type:"boolean",content:!1};if("`"===b.charAt(0))return a.next(),{type:"constant",numeric:!1,content:b.substring(1,b.length-1)};if(b.charAt(0).match(/[0-9-]/)){var c=eval(b);if(Number.isInteger(c))return a.next(),{type:"constant",numeric:!0,content:c};throw Error("'"+b+"' is not an integer");}b=a.getIndex();c=$jscomp.makeIterator(Object.keys(a.domain));for(var d=c.next();!d.done;d=c.next())if(d= 116 d.value,a.rewindTo(b),d=a.domain[d].value.compile(a))return d;return null},compile:function(a){var b=a.getToken(),c=EasyCoder_Value.getItem(a);if(!c)throw Error("Undefined value: '"+b+"'");if("cat"===a.getToken()){for(b={type:"cat",numeric:!1,parts:[c]};a.tokenIs("cat");)a.next(),b.parts.push(a.value.getItem(a));return b}return c},doValue:function(a,b){if("undefined"===typeof b.type)return a.runtimeError(a[a.pc].lino,"Undefined value (variable not initialized?)"),null;switch(b.type){case "cat":return{type:"constant", 117 numeric:!1,content:b.parts.reduce(function(b,c){return b+EasyCoder_Value.doValue(a,c).content},"")};case "boolean":case "constant":return b;case "symbol":var c=a.getSymbolRecord(b.name);if(c.isValueHolder){if(b=c.value[c.index]){c=b.content;if(null===c||"undefined"===typeof c)b.content=b.numeric?0:"";return b}return null}return a.domain[c.domain].value.get(a,b)}return a.domain[b.domain].value.get(a,b)},constant:function(a,b){return{type:"constant",numeric:b,content:a}},evaluate:function(a,b){if(!b)return{type:"constant", 118 numeric:!1,content:""};var c=EasyCoder_Value.doValue(a,b);if(c)return c;a.runtimeError(a[a.pc].lino,"Can't decode value: "+b)},getValue:function(a,b){return EasyCoder_Value.evaluate(a,b).content},encode:function(a,b){if(a)switch(b){case "ec":return a.replace(/'/g,"~sq~").replace(/"/g,"~dq~").replace(/\n/g,"%0a").replace(/\r/g,"%0d");case "url":return encodeURIComponent(a.replace(/\s/g,"+"));case "sanitize":return a.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}return a},decode:function(a,b){if(a)switch(b){case "ec":return a.replace(/~dq~/g, 119 '"').replace(/~sq~/g,"'").replace(/%0a/g,"\n").replace(/%0d/g,"\r");case "url":return decodeURIComponent(a).replace(/\+/g," ")}return a}};EasyCoder.version="2.5.5";EasyCoder.timestamp=Date.now();console.log("EasyCoder loaded; waiting for page"); 119 120 function EasyCoder_Startup(){console.log(Date.now()-EasyCoder.timestamp+" ms: Page loaded; reset timer & start EasyCoder");EasyCoder.timestamp=Date.now();EasyCoder.scripts={};window.EasyCoder=EasyCoder;var a=document.getElementById("easycoder-script");if(a){a.style.display="none";try{EasyCoder.start(a.innerText)}catch(b){EasyCoder.reportError(b)}}}window.onload=EasyCoder_Startup; -
easycoder/trunk/easycoder.js
r2209140 r2210817 668 668 const command = program[program.pc]; 669 669 const moduleRecord = program.getSymbolRecord(command.module); 670 const p = moduleRecord.program;670 const p = EasyCoder.scripts[moduleRecord.program]; 671 671 p.run(p.onClose); 672 672 return command.pc + 1; … … 960 960 961 961 run: program => { 962 if (program.parent) {963 let parent = EasyCoder.scripts[program.parent];964 parent.run(parent.nextPc);965 parent.nextPc = 0;966 }967 962 program.exit(); 968 963 return 0; … … 1180 1175 newRecord.isValueHolder = symbolRecord.isValueHolder; 1181 1176 if (symbolRecord.program) { 1182 newRecord.program = symbolRecord.program ;1177 newRecord.program = symbolRecord.program.script; 1183 1178 } 1184 1179 newRecord.imported = true; … … 1293 1288 1294 1289 run: program => { 1295 const command = program[program.pc]; 1296 return command.pc + 1; 1290 return program[program.pc].pc + 1; 1297 1291 } 1298 1292 }, … … 1654 1648 const lino = compiler.getLino(); 1655 1649 const script = compiler.getNextValue(); 1656 let program = compiler.getProgram();1657 1650 const imports = []; 1658 1651 if (compiler.tokenIs(`with`)) { … … 1660 1653 if (compiler.nextIsSymbol(true)) { 1661 1654 const symbolRecord = compiler.getSymbolRecord(); 1662 // symbolRecord.exporter = program.script;1663 1655 imports.push(symbolRecord.name); 1664 1656 compiler.next(); … … 1673 1665 if (compiler.nextIsSymbol(true)) { 1674 1666 const moduleRecord = compiler.getSymbolRecord(); 1675 moduleRecord.program = program;1667 // moduleRecord.program = program.script; 1676 1668 compiler.next(); 1677 1669 if (moduleRecord.keyword !== `module`) { … … 1821 1813 const recipient = program.getSymbolRecord(command.recipient); 1822 1814 if (recipient.program) { 1823 recipient.program.message = message; 1824 recipient.program.run(recipient.program.onMessage); 1815 let rprog = EasyCoder.scripts[recipient.program]; 1816 rprog.message = message; 1817 rprog.run(rprog.onMessage); 1825 1818 } 1826 1819 } … … 2242 2235 if (command.name) { 2243 2236 const symbolRecord = program.getSymbolRecord(command.name); 2244 symbolRecord.program.exit();2237 EasyCoder.scripts[symbolRecord.program].exit(); 2245 2238 } else { 2246 2239 return 0; … … 2442 2435 const value = program.getValue(command.value); 2443 2436 setTimeout(function () { 2444 program.run(command.pc + 1); 2437 if (program.run) { 2438 program.run(command.pc + 1); 2439 } 2445 2440 }, value * command.multiplier); 2446 2441 return 0; … … 3673 3668 program.parent = parent; 3674 3669 if (module) { 3675 module.program = program ;3670 module.program = program.script; 3676 3671 } 3677 3672 return program; … … 3756 3751 } 3757 3752 if (program) { 3758 program.onExit = then; 3753 EasyCoder.scripts[program.script] = program; 3754 if (module) { 3755 module.program = program.script; 3756 } 3757 program.afterExit = then; 3759 3758 program.running = true; 3760 3759 EasyCoder_Run.run(program, 0); … … 4035 4034 exit: (program) => { 4036 4035 if (program.onExit) { 4037 program.un(program.onExit); 4038 // let parent = EasyCoder.scripts[program.parent]; 4039 // if (parent) { 4040 // parent.run(parent.onExit); 4041 // } 4042 delete EasyCoder.scripts[program.script]; 4043 program.module.program = null; 4044 program.running = false; 4045 program = null; 4036 program.run(program.onExit); 4037 } 4038 let parent = program.parent; 4039 let afterExit = program.afterExit; 4040 delete EasyCoder.scripts[program.script]; 4041 if (program.module) { 4042 delete program.module.program; 4043 } 4044 Object.keys(program).forEach(function(key) { 4045 delete program[key]; 4046 }); 4047 if (parent && afterExit) { 4048 EasyCoder.scripts[parent].run(afterExit); 4046 4049 } 4047 4050 } … … 4246 4249 } 4247 4250 }; 4248 EasyCoder.version = `2.5. 4`;4251 EasyCoder.version = `2.5.5`; 4249 4252 EasyCoder.timestamp = Date.now(); 4250 4253 console.log(`EasyCoder loaded; waiting for page`); -
easycoder/trunk/easycoder.php
r2209140 r2210817 4 4 * Plugin URI: https://easycoder.software 5 5 * Description: Control the appearance and behavior of your posts and pages by embedding simple English-like scripts, without the need to learn JavaScript. 6 * Version: 2.5. 46 * Version: 2.5.5 7 7 * Author: EasyCoder Software 8 8 * Author URI: https://easycoder.software … … 17 17 function easycoder_enqueue_script() { 18 18 wp_enqueue_script('easycoder_script', plugin_dir_url( __FILE__ ) 19 . 'easycoder-min.js', array(), '2.5. 4');19 . 'easycoder-min.js', array(), '2.5.5'); 20 20 } 21 21 -
easycoder/trunk/readme.txt
r2209140 r2210817 54 54 55 55 == Changelog == 56 57 = 2.5.5 12-dec-2019 = 58 * Fix problems with exit(); replace program with name in objects 56 59 57 60 = 2.5.4 10-dec-2019 =
Note: See TracChangeset
for help on using the changeset viewer.