Plugin Directory

Changeset 1963561


Ignore:
Timestamp:
10/26/2018 12:26:40 PM (7 years ago)
Author:
gtanyware
Message:

Version 2.1.2: Revised error handling

Location:
easycoder/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • easycoder/trunk/easycoder-template.js

    r1963126 r1963561  
    88$jscomp.polyfill("String.prototype.endsWith",function(d){return d?d:function(d,g){var e=$jscomp.checkStringArgs(this,d,"endsWith");d+="";void 0===g&&(g=e.length);g=Math.max(0,Math.min(g|0,e.length));for(var b=d.length;0<b&&0<g;)if(e[--g]!=d[--b])return!1;return 0>=b}},"es6","es3");$jscomp.polyfill("Math.trunc",function(d){return d?d:function(d){d=Number(d);if(isNaN(d)||Infinity===d||-Infinity===d||0===d)return d;var f=Math.floor(Math.abs(d));return 0>d?-f:f}},"es6","es3");
    99$jscomp.polyfill("Number.isFinite",function(d){return d?d:function(d){return"number"!==typeof d?!1:!isNaN(d)&&Infinity!==d&&-Infinity!==d}},"es6","es3");$jscomp.polyfill("Number.isInteger",function(d){return d?d:function(d){return Number.isFinite(d)?d===Math.floor(d):!1}},"es6","es3");
    10 (function(){function d(f,g,e){function b(c,k){if(!g[c]){if(!f[c]){var h="function"==typeof require&&require;if(!k&&h)return h(c,!0);if(a)return a(c,!0);k=Error("Cannot find module '"+c+"'");throw k.code="MODULE_NOT_FOUND",k;}k=g[c]={exports:{}};f[c][0].call(k.exports,function(a){return b(f[c][1][a]||a)},k,k.exports,d,f,g,e)}return g[c].exports}for(var a="function"==typeof require&&require,c=0;c<e.length;c++)b(e[c]);return b}return d})()({1:[function(d,f,g){var e=d("./easycoder/Main");console.log("Starting up EasyCoder...");
     10(function(){function d(f,g,e){function b(c,h){if(!g[c]){if(!f[c]){var k="function"==typeof require&&require;if(!h&&k)return k(c,!0);if(a)return a(c,!0);h=Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h;}h=g[c]={exports:{}};f[c][0].call(h.exports,function(a){return b(f[c][1][a]||a)},h,h.exports,d,f,g,e)}return g[c].exports}for(var a="function"==typeof require&&require,c=0;c<e.length;c++)b(e[c]);return b}return d})()({1:[function(d,f,g){var e=d("./easycoder/Main");console.log("Starting up EasyCoder...");
    1111window.onload=function(){"undefined"!=typeof EasyCoder_Plugins&&EasyCoder_Plugins.add(e.domain);var b=document.getElementById("easycoder-script");if(b){b.style.display="none";try{e.start(b.innerText)}catch(a){e.reportError(a)}}}},{"./easycoder/Main":6}],2:[function(d,f,g){f.exports=function(d,b,a){b=d.value.evaluate(d,b);a=d.value.evaluate(d,a);b.numeric!==a.numeric&&d.error.runtimeError(d[d.pc].lino,"Data type mismatch");d=b.content;a=a.content;return d>a?1:d<a?-1:0}},{}],3:[function(d,f,g){var e=
    1212Object.assign||function(a){for(var c=1;c<arguments.length;c++){var b=arguments[c],d;for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d])}return a},b=this,a={getTokens:function(){return b.tokens},addWarning:function(a){b.warnings.push(a)},warning:function(c){a.addWarning(c);throw Error();},unrecognisedSymbol:function(c){a.addWarning("Unrecognised symbol '"+c+"'")},getWarnings:function(){return b.warnings},getIndex:function(){return b.index},next:function(a){b.index+=void 0===a?1:a},peek:function(){return b.tokens[b.index+
    13131].token},getToken:function(){return b.index>=b.tokens.length?null:b.tokens[b.index]?b.tokens[b.index].token:null},nextToken:function(){a.next();return a.getToken()},skip:function(c){if(b.index>=b.tokens.length)return null;a.next();a.tokenIs(c)&&a.next()},prev:function(){b.index--},getLino:function(){return b.index>=b.tokens.length?0:b.tokens[b.index].lino},tokenIs:function(a){return b.index>=b.tokens.length?!1:a===b.tokens[b.index].token},getTarget:function(a){a=void 0===a?b.index:a;return b.tokens[a].token},
    1414getTargetPc:function(c){c=void 0===c?b.index:c;return b.symbols[a.getTarget(c)].pc},getCommandAt:function(a){return b.program[a]},isSymbol:function(){return a.getTarget()in b.symbols},getSymbol:function(){return b.symbols[a.getToken()]},getSymbolPc:function(){return a.getSymbol().pc},getSymbolRecord:function(){return b.program[a.getSymbolPc()]},getSymbols:function(){return b.symbols},getProgram:function(){return b.program},getPc:function(){return b.program.length},getValue:function(){return a.value.compile(a)},
    15 getCondition:function(){return a.condition.compile(a)},constant:function(c){return a.value.constant(c)},addCommand:function(a){b.program.push(e({pc:b.program.length},a))},addSymbol:function(a,h){b.symbols[a]={pc:h}},mark:function(){b.savedMark=b.index},rewind:function(){b.index=b.savedMark},compileVariable:function(c,h,k,d){k=void 0===k?!1:k;d=void 0===d?null:d;a.next();var m=a.getLino(),n=a.getTokens()[a.getIndex()];b.symbols[n.token]&&a.error.duplicateSymbolError(n.token);var e=a.getPc();a.next();
    16 a.addSymbol(n.token,e);a.addCommand({domain:c,keyword:h,lino:m,isSymbol:!0,isValueHolder:k,name:n.token,elements:1,index:0,value:[{}],extra:d})},compileToken:function(){var c=a.getToken();if(c){var b=a.getIndex();a.mark();for(var k=$jscomp.makeIterator(Object.keys(a.domain)),d=k.next();!d.done;d=k.next()){if((d=a.domain[d.value])&&(d=d.getHandler(c))&&d.compile(a))return;a.rewind()}console.log("No handler found");a.error.dontUnderstandError(c,b)}},compileOne:function(){var c=a.getToken();if(c){b.warnings=
    17 [];var h=b.program.length;c.endsWith(":")?(b.symbols[c.substring(0,c.length-1)]={pc:h},b.index++):a.compileToken()}},compileFromHere:function(c){for(;b.index<b.tokens.length;){var h=b.tokens[b.index].token;if("else"===h)return b.program;a.compileOne();if(-1<c.indexOf(h))break}},compile:function(c){b.tokens=c;b.index=0;b.program=[];b.symbols={};b.warnings=[];a.compileFromHere([]);a.addCommand({domain:"core",keyword:"stop",lino:a.getLino(),next:0});return b.program}};f.exports=a},{}],4:[function(d,
    18 f,g){var e=Object.assign||function(b){for(var a=1;a<arguments.length;a++){var c=arguments[a],h;for(h in c)Object.prototype.hasOwnProperty.call(c,h)&&(b[h]=c[h])}return b};f.exports={compile:function(b){b.mark();for(var a=$jscomp.makeIterator(Object.keys(b.domain)),c=a.next();!c.done;c=a.next()){if(c=b.domain[c.value].condition.compile(b))return e({domain:name},c);b.rewind()}},test:function(b,a){return b.domain[a.domain].condition.test(b,a)}}},{}],5:[function(d,f,g){var e=this,b={Add:{compile:function(a){var c=
    19 a.getLino();a.next();var b=a.getValue();if(a.tokenIs("to"))if(a.next(),a.getToken(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var m=a.getToken();a.next();a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:d,target:m})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,target:d});return!0}a.warning("core "+e.name+"': Expected value holder")}else{d=a.getValue();if(a.tokenIs("giving"))return a.next(),
    20 m=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:d,target:m}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,m=a.getSymbolRecord(c.target);if(m.isValueHolder){var e=m.value[m.index];d?(a=a.getValue(d)+a.getValue(b),m.value[m.index]={type:"constant",numeric:!0,content:a}):(e.numeric||a.error.nonNumericValueError(c.lino),a=e.content+a.getValue(b),m.value[m.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,
    21 m.name);return c.pc+1}},Alias:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"alias",lino:c,alias:b,symbol:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.symbols[c.alias].pc,d=a[b],e=a.getSymbolRecord(c.symbol);a[b]={pc:d.pc,domain:e.domain,keyword:e.keyword,lino:d.lino,name:d.name,alias:c.symbol};return c.pc+1}},Begin:{compile:function(a){a.next();
    22 a.compileFromHere(["end"]);return!0},run:function(a){return a[a.pc].pc+1}},Clear:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"clear",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?(a.domain[b.domain].value.put(b,{type:"boolean",content:!1}),c.numeric=!1):a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Debug:{compile:function(a){var c=
    23 a.getLino();a.next();if(a.tokenIs("program")){a.next();if(a.tokenIs("item")||a.tokenIs("pc")){a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"debug",lino:c,item:b});return!0}a.addCommand({domain:"core",keyword:"debug",lino:c,item:-1});return!0}if(a.tokenIs("symbols"))return a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbols"}),!0;if(a.tokenIs("symbol"))return a.next(),b=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbol",name:b}),
    24 !0;a.error.NoSuchVariableError(a.getToken())},run:function(a){var c=a[a.pc],b=c.item;switch(b){case "symbols":console.log("Symbols: "+JSON.stringify(a.symbols,null,2));break;case "symbol":console.log("Symbol: "+JSON.stringify(a.getSymbolRecord(c.name),null,2));break;default:0<=b.content?console.log("Debug item "+b.content+": "+JSON.stringify(a[b.content],null,2)):console.log("Debug program: "+JSON.stringify(a,null,2))}return c.pc+1}},Decode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=
    25 a.getToken();a.next();a.addCommand({domain:"core",keyword:"decode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.decode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Divide:{compile:function(a){var c=a.getLino();a.next();a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b=
    26 a.getValue();a.tokenIs("by")&&a.next();var m=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:c,value1:b,value2:m,target:d}),!0;a.warning("core "+e.name+"': Expected value holder")}else return void 0===d&&a.warning("core "+e.name+"': No target variable given"),a.addCommand({domain:"core",keyword:"divide",lino:c,value2:m,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=
    27 c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Encode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();
    28 a.next();a.addCommand({domain:"core",keyword:"encode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.encode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},End:{compile:function(a){a.next();return!0},run:function(){return 0}},Fork:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();
    29 var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];try{a.run(a.symbols[c.label].pc)}catch(h){console.log(h.message),alert(h.message)}return c.pc+1}},Go:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){return a[a.pc].pc+1}},Gosub:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&
    30 a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"gosub",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];a.stack.push(a.pc+1);return a.symbols[c.label].pc}},Goto:{compile:function(a){var c=a.getLino();a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];return c.label?a.symbols[c.label].pc:c.goto}},If:{compile:function(a){var c=a.getLino();a.next();var b=a.condition.compile(a),d=a.getPc();
    31 a.addCommand({domain:"core",keyword:"if",lino:c,condition:b});a.compileOne();if(!a.getToken())return a.getCommandAt(d).else=a.getPc(),!0;a.tokenIs("else")?(c=a.getPc(),a.addCommand({domain:"core",keyword:"goto",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 c=a[a.pc];return a.condition.test(a,c.condition)?c.pc+1:c.else}},Index:{compile:function(a){var c=a.getLino();a.getTokens();a.next();
    32 if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"core",keyword:"index",lino:c,symbol:b,value:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.index=a.getValue(c.value);b.index>=b.elements&&a.error.runtimeError(c.lino,"Array index out of range for "+b.name);return c.pc+1}},Multiply:{compile:function(a){var c=a.getLino();a.next();a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b=
    33 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:"multiply",lino:c,value1:b,value2:e,target:d}),!0;a.warning("core multiply': Expected value holder")}else return void 0===d&&a.warning("core multiply': No target variable given"),a.addCommand({domain:"core",keyword:"multiply",lino:c,value2:e,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=
    34 c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Negate:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b=a.getToken();a.next();
    35 a.addCommand({domain:"core",keyword:"negate",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?b.value[b.index]={type:"constant",numeric:!0,content:-b.value[b.index].content}:a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Print:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"print",lino:c,value:b});return!0},run:function(a){var c=a[a.pc];a=a.getValue(c.value);
    36 console.log("-> "+a);return c.pc+1}},Put:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("into")){a.next();if(a.isSymbol()){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"put",lino:c,value:b,target:d});return!0}a.error.noSuchVariableError(a.getToken())}return!1},run:function(a){var c=a[a.pc],b=c.value,d=a.getSymbolRecord(c.target);d.isValueHolder||a.error.variableDoesNotHoldAValueError(c.lino,d.name);d.value[d.index]=a.evaluate(b);return c.pc+1}},
    37 Replace:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("with")){a.next();var d=a.getValue();if(a.tokenIs("in")&&(a.next(),a.isSymbol())){var e=a.getSymbolRecord();a.next();if(e.isValueHolder)return a.addCommand({domain:"core",keyword:"replace",lino:c,original:b,replacement:d,target:e.name}),!0}}return!1},run:function(a){var c=a[a.pc],b=a.getValue(c.original),d=a.getValue(c.replacement),e=a.getSymbolRecord(c.target);a=a.getValue(e.value[e.index]).split(b).join(d);e.value[e.index]=
    38 {type:"constant",numeric:!1,content:a};return c.pc+1}},Return:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:c});return!0},run:function(a){return a.stack.pop()}},Set:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getSymbolRecord();if(!b.isValueHolder)return!1;a.next();if(a.tokenIs("to")){a.next();for(var d=[];;){a.mark();try{d.push(a.getValue())}catch(m){a.rewind();break}}a.addCommand({domain:"core",keyword:"set",lino:c,
    39 type:"setArray",target:b.name,value:d});return!0}a.addCommand({domain:"core",keyword:"set",lino:c,type:"setBoolean",target:b.name});return!0}a.tokenIs("the")&&a.next();if(a.tokenIs("elements")&&(a.next(),a.tokenIs("of")&&(a.next(),a.getTarget(),a.isSymbol()||a.error.unknownVariableError(a.getToken()),b=a.getToken(),a.next(),a.tokenIs("to"))))return a.next(),d=a.getValue(),a.addCommand({domain:"core",keyword:"set",lino:c,type:"setElements",symbol:b,value:d}),!0;if(a.tokenIs("encoding")){a.next();if(a.tokenIs("to"))return a.next(),
    40 b=a.getValue(),a.addCommand({domain:"core",keyword:"set",type:"encoding",lino:c,encoding:b}),!0;a.addWarning("Unknown encoding option")}return!1},run:function(a){var c=a[a.pc];switch(c.type){case "setBoolean":var b=a.getSymbolRecord(c.target);b.isValueHolder?(b.value[b.index]={type:"boolean",content:!0},c.numeric=!1):a.error.VariableDoesNotHoldAValueError(tcommand.lino,arget.name);break;case "setElements":b=a.getSymbolRecord(c.symbol);b.elements=a.getValue(c.value);b.index=0;b.value=[];for(a=0;a<
    41 b.elements;a++)b.value.push({});break;case "setArray":a=a.getSymbolRecord(c.target);a.elements=c.value.length;a.value=c.value;break;case "encoding":a.encoding=a.getValue(c.encoding)}return c.pc+1}},Stop:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"stop",lino:c,next:0});return!0},run:function(){return 0}},Take:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("from"))if(a.next(),a.getToken(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===
    42 a.peek()){d=a.getValue();a.next();var f=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,target:d});return!0}a.warning("core "+e.name+"': Expected value holder")}else{d=a.getValue();if(a.tokenIs("giving"))return a.next(),f=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1},
    43 run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];d?(a=a.getValue(d)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=a.getValue(f)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Toggle:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b=
    44 a.getSymbolPc();a.next();a.addCommand({domain:"core",keyword:"toggle",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a[c.symbol];if(b.isValueHolder){var d=a.domain[b.domain];a=d.value.get(a,b.value[b.index]).content;d.value.put(b,{type:"boolean",content:!a})}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.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 c=
    45 a.getLino();a.next();var b=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:c,value:b,multiplier:d});return!0},run:function(a){var c=a[a.pc],b=a.getValue(c.value);setTimeout(function(){a.run(c.pc+1)},b*c.multiplier);return 0}},While:{compile:function(a){var c=a.getLino();a.next();
    46 var b=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:c,condition:b});c=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});a.getCommandAt(c).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?a.pc+2:a.pc+1}},getHandler:function(a){switch(a){case "add":return b.Add;case "alias":return b.Alias;case "begin":return b.Begin;case "clear":return b.Clear;case "debug":return b.Debug;
    47 case "decode":return b.Decode;case "divide":return b.Divide;case "encode":return b.Encode;case "end":return b.End;case "fork":return b.Fork;case "go":return b.Go;case "gosub":return b.Gosub;case "goto":return b.Goto;case "if":return b.If;case "index":return b.Index;case "multiply":return b.Multiply;case "negate":return b.Negate;case "print":return b.Print;case "put":return b.Put;case "replace":return b.Replace;case "return":return b.Return;case "set":return b.Set;case "stop":return b.Stop;case "take":return b.Take;
    48 case "toggle":return b.Toggle;case "variable":return b.Variable;case "wait":return b.Wait;case "while":return b.While;default:return!1}},run:function(a){var c=a[a.pc],d=b.getHandler(c.keyword);d||a.error.runtimeError(c.lino,"Unknown keyword '"+c.keyword+"' in 'core' package");return d.run(a)},isNegate:function(a){return"not"===a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var c=a.getToken();a.next();return a.tokenIs("modulo")?(a.next(),a=a.getValue(),{domain:"core",type:"modulo",
    49 name:c,value:a}):{domain:"core",type:"symbol",name:c}}c=a.getToken();if("true"===c)return a.next(),{domain:"core",type:"boolean",content:!0};if("false"===c)return a.next(),{domain:"core",type:"boolean",content:!1};if("random"===c)return a.next(),{domain:"core",type:"random",range:a.getValue()};if("cos"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"cos",angle_c:c,radius_c:a};if("sin"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",
    50 type:"sin",angle_s:c,radius_s:a};if("tan"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"tan",angle_t:c,radius_t:a};if("empty"===c)return a.next(),{domain:"core",type:"empty"};if("encode"===c)return a.next(),{domain:"core",type:"encode",value:a.getValue()};if("decode"===c)return a.next(),{domain:"core",type:"decode",value:a.getValue()};if("element"===c){a.next();c=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var b=a.getSymbolRecord();a.next();
    51 if("variable"===b.keyword)return{domain:"core",type:"element",element:c,symbol:b.name}}return null}if("property"===c)return a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(b=a.getSymbolRecord(),a.next(),"variable"===b.keyword))?{domain:"core",type:"property",property:c,symbol:b.name}:null;a.tokenIs("the")&&a.next();switch(a.getToken()){case "index":a.next();if(a.tokenIs("of")&&(a.next(),a.isSymbol()))return c=a.getToken(),a.next(),{domain:"core",type:"index",name:c};break;case "value":a.next();
    52 if(a.tokenIs("of"))return a.next(),{domain:"core",type:"valueOf",value:a.getValue()};break;case "length":a.next();if(a.tokenIs("of"))return a.next(),{domain:"core",type:"lengthOf",value:a.getValue()};break;case "left":a.next();c=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"left",count:c,value:a};break;case "right":if(a.next(),c=a.getValue(),a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"right",count:c,value:a}}return null},get:function(a,
    53 b){switch(b.type){case "boolean":return{type:"boolean",numeric:!1,content:b.content};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).index};case "random":return a=a.evaluate(b.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var c=a.getValue(b.angle_c);a=a.getValue(b.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329*parseFloat(c))*a,10)};case "sin":return c=a.getValue(b.angle_s),a=a.getValue(b.radius_s),
    54 {type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329*parseFloat(c))*a,10)};case "tan":return c=a.getValue(b.angle_t),a=a.getValue(b.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*parseFloat(c))*a,10)};case "valueOf":return{type:"constant",numeric:!0,content:parseInt(a.getValue(b.value))};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(b.value).length};case "left":return a.getValue(b.value),{type:"constant",numeric:!1,content:a.getValue(b.value).substr(0,
    55 a.getValue(b.count))};case "modulo":return c=a.getSymbolRecord(b.name),a=a.evaluate(b.value),{type:"constant",numeric:!0,content:c.value[c.index].content%a.content};case "empty":return{type:"constant",numeric:!1,content:""};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(b.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(b.value))};case "element":return c=a.getValue(b.element),b=a.getSymbolRecord(b.symbol),a=JSON.parse(a.getValue(b.value[b.index]))[c],
    56 {type:"constant",numeric:!1,content:"object"===typeof a?JSON.stringify(a):a};case "property":return c=a.getValue(b.property),b=a.getSymbolRecord(b.symbol),a=a.getValue(b.value[b.index]),{type:"constant",numeric:!1,content:"object"===typeof a?a[c]:JSON.parse(a)[c]}}return null},put:function(a,b){a.value[a.index]=b}},condition:{compile:function(a){if(a.tokenIs("not"))return a.next(),{domain:"core",type:"not",value:a.getValue()};try{var c=a.getValue();if("is"===a.getToken()){a.next();var d=b.isNegate(a);
    57 if(a.tokenIs("greater")){a.next();if(a.tokenIs("than")){a.next();var e=a.getValue();return{domain:"core",type:"greater",value1:c,value2:e,negate:d}}return null}if(a.tokenIs("less")){a.next();if(a.tokenIs("than")){a.next();var f=a.getValue();return{domain:"core",type:"less",value1:c,value2:f,negate:d}}return null}var g=a.getValue();return{domain:"core",type:"is",value1:c,value2:g,negate:d}}if(c)return{domain:"core",type:"boolean",value:c}}catch(n){console.log(n)}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value);
    58 case "is":return a=a.compare(a,b.value1,b.value2),b.negate?0!==a:0===a;case "greater":return a=a.compare(a,b.value1,b.value2),b.negate?0>=a:0<a;case "less":return a=a.compare(a,b.value1,b.value2),b.negate?0<=a:0>a;case "not":return!a.getValue(b.value)}}}};f.exports=b},{}],6:[function(d,f,g){var e=this,b=d("./Tokenise"),a=d("./Compile"),c=d("./Run"),h=d("./Value"),k=d("./Condition"),m=d("./Compare"),l={domain:{core:d("./Core")},compileError:{dontUnderstandError:function(a){throw Error("I don't understand '"+
    59 a+"'");},duplicateSymbolError:function(a){throw Error("Symbol '"+a+"' is a duplicate");},inappropriateTypeError:function(a){throw Error("Inappropriate type '"+a+"'");},inappropriateVariableTypeError:function(a){throw Error("Inappropriate variable type '"+a+"'");},missingInputTypeError:function(){throw Error("Missing input type");},noSuchVariableError:function(a){throw Error("No such variable: "+a);},notAnIntegerError:function(a){throw Error("Value is not an integer: "+a);},undefinedValueError:function(a){throw Error("Undefined value: "+
    60 a);},unknownTypeError:function(a){throw Error("Unknown type: "+a);},unknownVariableError:function(a){throw Error("Unknown variable: "+a);},unrecognisedValueError:function(a){throw Error("I don't understand this value: "+a);},variableDoesNotHoldAValueError:function(a){throw Error("Variable '"+a+"' does not hold a value");},expectedError:function(a,b){throw Error("Expected '"+a+"' but saw '"+b+"'");},symbolExpectedError:function(a){throw Error("Symbol expected: got "+a);}},runtimeError:{runtimeError:function(a,
    61 b){throw Error("Line "+(0<=a)?a+1+": ":""+b);},nonNumericValueError:function(a){runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){runtimeError(a,"Variable '"+b+"' does not hold a value")}},setupTracer:function(){var a=document.getElementById("easycoder-tracer");a&&(a.innerHTML='<div><input id="easycoder-run-button" type="button" value="Run" /><input id="easycoder-step-button" type="button" value="Step" /><div id="easycoder-tracer-content" style="border:1px solid black;padding:4px";width:100%></div>',
    62 a.style.display="none")},reportError:function(b,c){if(c){var d=a.getProgram(),f=c.tokens;c=c.scriptLines;f=e.compiling?f[a.getIndex()].lino:d.pc.lino;d="";var k=f-5;for(k=0>k?0:k;k<f;k++){for(var h=""+k;4>h.length;)h=" "+h;d+=h+" "+c[k].line.split("\\s").join(" ")+"\n"}d+=b.message+"\n";b=a.getWarnings();if(b.length)for(d+="Warnings:\n",b=$jscomp.makeIterator(b),c=b.next();!c.done;c=b.next())d+=c.value+"\n";console.log(d);alert(d)}else console.log(b),alert(b)},getSymbolRecord:function(a){a=e.program[e.program.symbols[a].pc];
    63 return a.alias?e.program[e.program.symbols[a.alias].pc]:a},evaluate:function(a){return h.evaluate(e.program,a)},encode:function(a){return h.encode(a,e.program.encoding)},decode:function(a){return h.decode(a,e.program.encoding)},getValue:function(a){return h.getValue(e.program,a)},run:function(a){c(e.program,a)},compileScript:function(b){var c=b.tokens;e.compiling=!0;var d=Date.now();a.value=h;a.condition=k;a.domain=l.domain;a.error=l.compileError;var f=a.compile(c);e.program=f;var g=Date.now();console.log("Compiled "+
    64 c.length+" tokens in "+(g-d)+"ms");e.compiling=!1;f.source=b;f.run=l.run;f.value=h;f.evaluate=l.evaluate;f.getValue=l.getValue;f.encode=l.encode;f.decode=l.decode;f.condition=k;f.compare=m;f.domain=l.domain;f.getSymbolRecord=l.getSymbolRecord;f.error=l.runtimeError;f.reportError=l.reportError;f.symbols=a.getSymbols();f.encoding="none";f.popups=[];f.stack=[];f.queue=[0];l.setupTracer();console.log("Run the script");f.run(0)},tokeniseScript:function(a){var c=Date.now();a=b.tokenise(a);var d=Date.now();
    65 console.log("Tokenised "+a.scriptLines.length+" lines in "+(d-c)+"ms");l.compileScript(a)},getPlugins:function(a,b,c){var d=l.domain,e=document.head,f=document.createElement("script");f.onload=function(){b.forEach(function(a,b){var c=a;if("http"!==a&&0===a.indexOf("http")){c=a.indexOf("plugin-")+7;var e=a.indexOf(".js");c=a.substring(c,e)}switch(b){case 0:d[c]=EasyCoder_0;break;case 1:d[c]=EasyCoder_1;break;case 2:d[c]=EasyCoder_2;break;case 3:d[c]=EasyCoder_3;break;case 4:d[c]=EasyCoder_4;break;
    66 case 5:d[c]=EasyCoder_5;break;case 6:d[c]=EasyCoder_6;break;case 7:d[c]=EasyCoder_7;break;case 8:d[c]=EasyCoder_8;break;case 9:d[c]=EasyCoder_9}});try{l.tokeniseScript(a)}catch(t){l.reportError(t)}};f.src=c?"plugins.js":"/rest//plugins/"+b.join();e.appendChild(f)},start:function(a){var b=!1,c=[],d=[];a.split("\n").forEach(function(a){var e=a.trim().split(" ");"*debug*"===e[0]?(c.length=0,b=!0):2===e.length?"plugin"===e[0]?(a=e[1].trim().split("/").join("~"),c.push(a)):d.push(a):d.push(a)});0===c.length&&
    67 (c.push("browser"),c.push("json"),c.push("svg"),b&&c.push("ckeditor"));l.getPlugins(d,c,b)}};f.exports=l},{"./Compare":2,"./Compile":3,"./Condition":4,"./Core":5,"./Run":7,"./Tokenise":8,"./Value":9}],7:[function(d,f,g){var e=function(b,a){var c=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},d=[];if(d.length)d.push(a);else for(d.push(a);0<d.length;)for(b.pc=d.shift(),a={};;){b.pc=b.domain[b[b.pc].domain].run(b);if(!b.pc)break;
    68 if(b.stop){b.tracing=!1;return}if(b.tracing){var f=b[b.pc],g=b.source.scriptLines,l=c(g),n=document.getElementById("easycoder-tracer");if(n){n.style.display="block";n.style.visibility="visible";var p="";if(b.tracer){b.tracer.variables.forEach(function(a,c,d){var e=b.getSymbolRecord(a);p=(e=e.value[e.index])?p+(a+": "+e.content):p+(a+": undefined");switch(b.tracer.alignment){case "horizontal":c<d.length-1&&(p+=", ");break;case "vertical":p+="<br>"}});p+="<hr>";n="";for(var q=5;0<q;q--)f.lino&&(n+=
    69 '<input type="text" name="'+q+'" value="'+g[f.lino-q].line.substr(l)+'"style=width:100%;border:none;enabled="false">'),n+="<br>";f=document.getElementById("easycoder-tracer-content");f.innerHTML=p+n;f.style.display="block";a.run=document.getElementById("easycoder-run-button");a.step=document.getElementById("easycoder-step-button");a.run.onclick=function(a){return function(c){a.run.blur();b.tracing=!1;document.getElementById("easycoder-tracer-content").style.display="none";try{e(b,b.resume)}catch(r){c=
    70 "Error in run handler: "+r.message,console.log(c),alert(c)}}}(a);a.step.onclick=function(a){return function(c){console.log("step");a.step.blur();b.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{e(b,b.resume)}catch(r){c="Error in step handler: "+r.message,console.log(c),alert(c)}}}(a);b.resume=b.pc;b.pc=0}}break}a={run:a.run,step:a.step}}};f.exports=e},{}],8:[function(d,f,g){var e={markComments:function(b){var a=b.list,c=void 0===b.index?0:b.index,d=void 0===
    71 b.inComment?!1:b.inComment,f=void 0===b.newList?[]:b.newList;if(c>=a.length)return f;var g=a[c];b=g.lino;g=g.token;var l={list:a,index:c+1,inComment:!1,newList:f.concat({lino:b,index:c,token:g})};f={list:a,index:c+1,inComment:!0,newList:f.concat({lino:b,index:c,comment:!0,token:g})};return d&&0<c&&b===a[c-1].lino?e.markComments(f):"!"===g.charAt(0)?e.markComments(f):e.markComments(l)},findStrings:function(b){var a=b.original,c=b.line,d=void 0===b.inComment?!1:b.inComment;b=void 0===b.inQuote?!1:b.inQuote;
    72 var f=c.charAt(0),g=b&&" "===f?"\\s":f;if(1===c.length)return g;c=c.substring(1);if("!"===f&&!b)return f+e.findStrings({original:a,line:c,inComment:!0,inQuote:!1});if("`"===f&&!d&&!b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!0});if("`"===f&&b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!1});if(!d&&!b&&!f.match(/[A-z0-9_\-\+\*\/\- ]/)){if("'"==f||'"'==f)throw Error('Bad syntax in "'+a+'":\nStrings in EasyCoder must be enclosed in backticks.');throw Error('Unrecognised character "'+
    73 f+'" in "'+a+'".');}return g+e.findStrings({original:a,line:c,inComment:d,inQuote:b})},tokenise:function(b){b=b.map(function(a){return a.length?e.findStrings({original:a,line:a}):""}).map(function(a,b){return{lino:b+1,line:a}});var a=b.map(function(a){return a.line.trim().split(/\s+/).map(function(b,c){return{lino:a.lino,index:c,token:b}})});a=[].concat.apply([],a).filter(function(a){return a.token}).map(function(a){return{lino:a.lino,index:a.index,token:a.token.split("\\s").join(" ")}});a=e.markComments({list:a}).filter(function(a){return!a.comment});
    74 return{scriptLines:b,tokens:a}}};f.exports=e},{}],9:[function(d,f,g){var e={getItem:function(b){var a=b.getToken();if(!a)return null;if("`"===a.charAt(0))return b.next(),{type:"constant",numeric:!1,content:a.substring(1,a.length-1)};if(a[0].match(/[0-9\-]/)){var c=eval(a);if(Number.isInteger(c))return b.next(),{type:"constant",numeric:!0,content:c};b.error.notAnIntegerError(a)}b.mark();a=$jscomp.makeIterator(Object.keys(b.domain));for(c=a.next();!c.done;c=a.next())if(c=b.domain[c.value].value.compile(b))return c;
    75 return null},compile:function(b){var a=b.getToken(),c=b.value.getItem(b);c||b.error.undefinedValueError(a);if("cat"===b.getToken()){for(a={type:"cat",numeric:!1,parts:[c]};b.tokenIs("cat");)b.next(),a.parts.push(b.value.getItem(b));return a}return c},doValue:function(b,a){if("cat"===a.type)return{type:"constant",numeric:!1,content:a.parts.reduce(function(a,c){return a+e.doValue(b,c).content},"")};switch(a.type){case "constant":return a;case "symbol":var c=b.getSymbolRecord(a.name);return c.isValueHolder?
    76 c.value[c.index]?c.value[c.index]:null:b.domain[c.domain].value.get(b,a);case "boolean":return a}return b.domain[a.domain].value.get(b,a)},constant:function(b){return{type:"constant",numeric:"false",content:b}},evaluate:function(b,a){if(!a)return{type:"constant",numeric:!1,content:""};var c=e.doValue(b,a);if(c)return c;b.error.runtimeError(b[b.pc].lino,"Can't decode value: "+a)},getValue:function(b,a){return e.evaluate(b,a).content},encode:function(b,a){switch(a){case "url":return encodeURIComponent(b.replace(/\s/g,
    77 "+"));default:return b}},decode:function(b,a){switch(a){case "url":return decodeURIComponent(b).replace(/\+/g," ");default:return b}}};f.exports=e},{}]},{},[1]);
     15getCondition:function(){return a.condition.compile(a)},constant:function(c){return a.value.constant(c)},addCommand:function(a){b.program.push(e({pc:b.program.length},a))},addSymbol:function(a,k){b.symbols[a]={pc:k}},mark:function(){b.savedMark=b.index},rewind:function(){b.index=b.savedMark},compileVariable:function(c,k,h,d){h=void 0===h?!1:h;d=void 0===d?null:d;a.next();var n=a.getLino(),e=a.getTokens()[a.getIndex()];if(b.symbols[e.token])throw Error("Duplicate variable name '"+e.token+"'");var f=
     16a.getPc();a.next();a.addSymbol(e.token,f);a.addCommand({domain:c,keyword:k,lino:n,isSymbol:!0,isValueHolder:h,name:e.token,elements:1,index:0,value:[{}],extra:d})},compileToken:function(){var c=a.getToken();if(c){a.getIndex();a.mark();for(var b=$jscomp.makeIterator(Object.keys(a.domain)),h=b.next();!h.done;h=b.next()){if((h=a.domain[h.value])&&(h=h.getHandler(c))&&h.compile(a))return;a.rewind()}console.log("No handler found");throw Error("I don't understand '"+c+"'");}},compileOne:function(){var c=
     17a.getToken();if(c){b.warnings=[];var k=b.program.length;c.endsWith(":")?(b.symbols[c.substring(0,c.length-1)]={pc:k},b.index++):a.compileToken()}},compileFromHere:function(c){for(;b.index<b.tokens.length;){var k=b.tokens[b.index].token;if("else"===k)return b.program;a.compileOne();if(-1<c.indexOf(k))break}},compile:function(c){b.tokens=c;b.index=0;b.program=[];b.symbols={};b.warnings=[];a.compileFromHere([]);a.addCommand({domain:"core",keyword:"stop",lino:a.getLino(),next:0});return b.program}};f.exports=
     18a},{}],4:[function(d,f,g){var e=Object.assign||function(b){for(var a=1;a<arguments.length;a++){var c=arguments[a],k;for(k in c)Object.prototype.hasOwnProperty.call(c,k)&&(b[k]=c[k])}return b};f.exports={compile:function(b){b.mark();for(var a=$jscomp.makeIterator(Object.keys(b.domain)),c=a.next();!c.done;c=a.next()){if(c=b.domain[c.value].condition.compile(b))return e({domain:name},c);b.rewind()}},test:function(b,a){return b.domain[a.domain].condition.test(b,a)}}},{}],5:[function(d,f,g){var e=this,
     19b={Add:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("to"))if(a.next(),a.getToken(),a.isSymbol()){var h=a.getSymbol();if(a.getCommandAt(h.pc).isValueHolder){if("giving"===a.peek()){h=a.getValue();a.next();var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:h,target:d})}else h=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,target:h});return!0}a.warning("core "+e.name+"': Expected value holder")}else{h=
     20a.getValue();if(a.tokenIs("giving"))return a.next(),d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:h,target:d}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1},run:function(a){var c=a[a.pc],b=c.value1,h=c.value2,d=a.getSymbolRecord(c.target);if(d.isValueHolder){var e=d.value[d.index];h?(a=a.getValue(h)+a.getValue(b),d.value[d.index]={type:"constant",numeric:!0,content:a}):(e.numeric||a.error.nonNumericValueError(c.lino),a=e.content+a.getValue(b),
     21d.value[d.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,d.name);return c.pc+1}},Alias:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"alias",lino:c,alias:b,symbol:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.symbols[c.alias].pc,d=a[b],e=a.getSymbolRecord(c.symbol);a[b]={pc:d.pc,domain:e.domain,
     22keyword:e.keyword,lino:d.lino,name:d.name,alias:c.symbol};return c.pc+1}},Begin:{compile:function(a){a.next();a.compileFromHere(["end"]);return!0},run:function(a){return a[a.pc].pc+1}},Clear:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"clear",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?(a.domain[b.domain].value.put(b,{type:"boolean",content:!1}),
     23c.numeric=!1):a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Debug:{compile:function(a){var c=a.getLino();a.next();if(a.tokenIs("program")){a.next();if(a.tokenIs("item")||a.tokenIs("pc")){a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"debug",lino:c,item:b});return!0}a.addCommand({domain:"core",keyword:"debug",lino:c,item:-1});return!0}if(a.tokenIs("symbols"))return a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbols"}),!0;if(a.tokenIs("symbol"))return a.next(),
     24b=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbol",name:b}),!0;throw Error("No such variable: '"+a.getToken()+"'");},run:function(a){var c=a[a.pc],b=c.item;switch(b){case "symbols":console.log("Symbols: "+JSON.stringify(a.symbols,null,2));break;case "symbol":console.log("Symbol: "+JSON.stringify(a.getSymbolRecord(c.name),null,2));break;default:0<=b.content?console.log("Debug item "+b.content+": "+JSON.stringify(a[b.content],null,2)):console.log("Debug program: "+
     25JSON.stringify(a,null,2))}return c.pc+1}},Decode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"decode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.decode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Divide:{compile:function(a){var c=
     26a.getLino();a.next();a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b=a.getValue();a.tokenIs("by")&&a.next();var n=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:c,value1:b,value2:n,target:d}),!0;a.warning("core "+e.name+"': Expected value holder")}else return void 0===d&&a.warning("core "+e.name+"': No target variable given"),a.addCommand({domain:"core",
     27keyword:"divide",lino:c,value2:n,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},
     28Encode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"encode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.encode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},End:{compile:function(a){a.next();return!0},run:function(){return 0}},
     29Fork:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];try{a.run(a.symbols[c.label].pc)}catch(k){console.log(k.message),alert(k.message)}return c.pc+1}},Go:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){return a[a.pc].pc+
     301}},Gosub:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"gosub",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];a.stack.push(a.pc+1);return a.symbols[c.label].pc}},Goto:{compile:function(a){var c=a.getLino();a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];return c.label?a.symbols[c.label].pc:c.goto}},If:{compile:function(a){var c=
     31a.getLino();a.next();var b=a.condition.compile(a),d=a.getPc();a.addCommand({domain:"core",keyword:"if",lino:c,condition:b});a.compileOne();if(!a.getToken())return a.getCommandAt(d).else=a.getPc(),!0;a.tokenIs("else")?(c=a.getPc(),a.addCommand({domain:"core",keyword:"goto",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 c=a[a.pc];return a.condition.test(a,c.condition)?c.pc+1:c.else}},
     32Index:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"core",keyword:"index",lino:c,symbol:b,value:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.index=a.getValue(c.value);b.index>=b.elements&&a.error.runtimeError(c.lino,"Array index out of range for "+b.name);return c.pc+1}},Multiply:{compile:function(a){var c=a.getLino();a.next();
     33a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b=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:"multiply",lino:c,value1:b,value2:e,target:d}),!0;a.warning("core multiply': Expected value holder")}else return void 0===d&&a.warning("core multiply': No target variable given"),a.addCommand({domain:"core",keyword:"multiply",
     34lino:c,value2:e,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Negate:{compile:function(a){var c=a.getLino();
     35a.getTokens();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"negate",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?b.value[b.index]={type:"constant",numeric:!0,content:-b.value[b.index].content}:a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Print:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"print",lino:c,value:b});
     36return!0},run:function(a){var c=a[a.pc];a=a.getValue(c.value);console.log("-> "+a);return c.pc+1}},Put:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("into")){a.next();if(a.isSymbol()){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"put",lino:c,value:b,target:d});return!0}throw Error("No such variable: '"+a.getToken()+"'");}return!1},run:function(a){var c=a[a.pc],b=c.value,d=a.getSymbolRecord(c.target);d.isValueHolder||a.error.variableDoesNotHoldAValueError(c.lino,
     37d.name);d.value[d.index]=a.evaluate(b);return c.pc+1}},Replace:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("with")){a.next();var d=a.getValue();if(a.tokenIs("in")&&(a.next(),a.isSymbol())){var e=a.getSymbolRecord();a.next();if(e.isValueHolder)return a.addCommand({domain:"core",keyword:"replace",lino:c,original:b,replacement:d,target:e.name}),!0}}return!1},run:function(a){var c=a[a.pc],b=a.getValue(c.original),d=a.getValue(c.replacement),e=a.getSymbolRecord(c.target);
     38a=a.getValue(e.value[e.index]).split(b).join(d);e.value[e.index]={type:"constant",numeric:!1,content:a};return c.pc+1}},Return:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:c});return!0},run:function(a){return a.stack.pop()}},Set:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getSymbolRecord();if(!b.isValueHolder)return!1;a.next();if(a.tokenIs("to")){a.next();for(var d=[];;){a.mark();try{d.push(a.getValue())}catch(n){a.rewind();
     39break}}a.addCommand({domain:"core",keyword:"set",lino:c,type:"setArray",target:b.name,value:d});return!0}a.addCommand({domain:"core",keyword:"set",lino:c,type:"setBoolean",target:b.name});return!0}a.tokenIs("the")&&a.next();if(a.tokenIs("elements")&&(a.next(),a.tokenIs("of"))){a.next();a.getTarget();if(!a.isSymbol())throw Error("Unknown variable '"+a.getToken()+"'");b=a.getToken();a.next();if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"core",keyword:"set",lino:c,type:"setElements",
     40symbol:b,value:d}),!0}if(a.tokenIs("encoding")){a.next();if(a.tokenIs("to"))return a.next(),b=a.getValue(),a.addCommand({domain:"core",keyword:"set",type:"encoding",lino:c,encoding:b}),!0;a.addWarning("Unknown encoding option")}return!1},run:function(a){var c=a[a.pc];switch(c.type){case "setBoolean":var b=a.getSymbolRecord(c.target);b.isValueHolder?(b.value[b.index]={type:"boolean",content:!0},c.numeric=!1):a.error.VariableDoesNotHoldAValueError(tcommand.lino,arget.name);break;case "setElements":b=
     41a.getSymbolRecord(c.symbol);b.elements=a.getValue(c.value);b.index=0;b.value=[];for(a=0;a<b.elements;a++)b.value.push({});break;case "setArray":a=a.getSymbolRecord(c.target);a.elements=c.value.length;a.value=c.value;break;case "encoding":a.encoding=a.getValue(c.encoding)}return c.pc+1}},Stop:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"stop",lino:c,next:0});return!0},run:function(){return 0}},Take:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();
     42if(a.tokenIs("from"))if(a.next(),a.getToken(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var f=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,target:d});return!0}a.warning("core "+e.name+"': Expected value holder")}else{d=a.getValue();if(a.tokenIs("giving"))return a.next(),f=a.getToken(),
     43a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];d?(a=a.getValue(d)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=a.getValue(f)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,
     44e.name);return c.pc+1}},Toggle:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b=a.getSymbolPc();a.next();a.addCommand({domain:"core",keyword:"toggle",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a[c.symbol];if(b.isValueHolder){var d=a.domain[b.domain];a=d.value.get(a,b.value[b.index]).content;d.value.put(b,{type:"boolean",content:!a})}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Variable:{compile:function(a){a.compileVariable("core",
     45"variable",!0);return!0},run:function(a){return a[a.pc].pc+1}},Wait:{compile:function(a){var c=a.getLino();a.next();var b=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:c,value:b,multiplier:d});return!0},run:function(a){var c=a[a.pc],b=a.getValue(c.value);setTimeout(function(){a.run(c.pc+
     461)},b*c.multiplier);return 0}},While:{compile:function(a){var c=a.getLino();a.next();var b=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:c,condition:b});c=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});a.getCommandAt(c).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?a.pc+2:a.pc+1}},getHandler:function(a){switch(a){case "add":return b.Add;case "alias":return b.Alias;
     47case "begin":return b.Begin;case "clear":return b.Clear;case "debug":return b.Debug;case "decode":return b.Decode;case "divide":return b.Divide;case "encode":return b.Encode;case "end":return b.End;case "fork":return b.Fork;case "go":return b.Go;case "gosub":return b.Gosub;case "goto":return b.Goto;case "if":return b.If;case "index":return b.Index;case "multiply":return b.Multiply;case "negate":return b.Negate;case "print":return b.Print;case "put":return b.Put;case "replace":return b.Replace;case "return":return b.Return;
     48case "set":return b.Set;case "stop":return b.Stop;case "take":return b.Take;case "toggle":return b.Toggle;case "variable":return b.Variable;case "wait":return b.Wait;case "while":return b.While;default:return!1}},run:function(a){var c=a[a.pc],d=b.getHandler(c.keyword);d||a.error.runtimeError(c.lino,"Unknown keyword '"+c.keyword+"' in 'core' package");return d.run(a)},isNegate:function(a){return"not"===a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var c=a.getToken();a.next();
     49return a.tokenIs("modulo")?(a.next(),a=a.getValue(),{domain:"core",type:"modulo",name:c,value:a}):{domain:"core",type:"symbol",name:c}}c=a.getToken();if("true"===c)return a.next(),{domain:"core",type:"boolean",content:!0};if("false"===c)return a.next(),{domain:"core",type:"boolean",content:!1};if("random"===c)return a.next(),{domain:"core",type:"random",range:a.getValue()};if("cos"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"cos",angle_c:c,radius_c:a};if("sin"===
     50c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"sin",angle_s:c,radius_s:a};if("tan"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"tan",angle_t:c,radius_t:a};if("empty"===c)return a.next(),{domain:"core",type:"empty"};if("encode"===c)return a.next(),{domain:"core",type:"encode",value:a.getValue()};if("decode"===c)return a.next(),{domain:"core",type:"decode",value:a.getValue()};if("element"===c){a.next();c=a.getValue();
     51if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var b=a.getSymbolRecord();a.next();if("variable"===b.keyword)return{domain:"core",type:"element",element:c,symbol:b.name}}return null}if("property"===c)return a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(b=a.getSymbolRecord(),a.next(),"variable"===b.keyword))?{domain:"core",type:"property",property:c,symbol:b.name}:null;a.tokenIs("the")&&a.next();switch(a.getToken()){case "index":a.next();if(a.tokenIs("of")&&(a.next(),a.isSymbol()))return c=
     52a.getToken(),a.next(),{domain:"core",type:"index",name:c};break;case "value":a.next();if(a.tokenIs("of"))return a.next(),{domain:"core",type:"valueOf",value:a.getValue()};break;case "length":a.next();if(a.tokenIs("of"))return a.next(),{domain:"core",type:"lengthOf",value:a.getValue()};break;case "left":a.next();c=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"left",count:c,value:a};break;case "right":if(a.next(),c=a.getValue(),a.tokenIs("of"))return a.next(),a=
     53a.getValue(),{domain:"core",type:"right",count:c,value:a}}return null},get:function(a,b){switch(b.type){case "boolean":return{type:"boolean",numeric:!1,content:b.content};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).index};case "random":return a=a.evaluate(b.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var c=a.getValue(b.angle_c);a=a.getValue(b.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329*
     54parseFloat(c))*a,10)};case "sin":return c=a.getValue(b.angle_s),a=a.getValue(b.radius_s),{type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329*parseFloat(c))*a,10)};case "tan":return c=a.getValue(b.angle_t),a=a.getValue(b.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*parseFloat(c))*a,10)};case "valueOf":return{type:"constant",numeric:!0,content:parseInt(a.getValue(b.value))};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(b.value).length};
     55case "left":return a.getValue(b.value),{type:"constant",numeric:!1,content:a.getValue(b.value).substr(0,a.getValue(b.count))};case "modulo":return c=a.getSymbolRecord(b.name),a=a.evaluate(b.value),{type:"constant",numeric:!0,content:c.value[c.index].content%a.content};case "empty":return{type:"constant",numeric:!1,content:""};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(b.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(b.value))};
     56case "element":return c=a.getValue(b.element),b=a.getSymbolRecord(b.symbol),a=JSON.parse(a.getValue(b.value[b.index]))[c],{type:"constant",numeric:!1,content:"object"===typeof a?JSON.stringify(a):a};case "property":return c=a.getValue(b.property),b=a.getSymbolRecord(b.symbol),a=a.getValue(b.value[b.index]),{type:"constant",numeric:!1,content:"object"===typeof a?a[c]:JSON.parse(a)[c]}}return null},put:function(a,b){a.value[a.index]=b}},condition:{compile:function(a){if(a.tokenIs("not"))return a.next(),
     57{domain:"core",type:"not",value:a.getValue()};try{var c=a.getValue();if("is"===a.getToken()){a.next();var d=b.isNegate(a);if(a.tokenIs("greater")){a.next();if(a.tokenIs("than")){a.next();var e=a.getValue();return{domain:"core",type:"greater",value1:c,value2:e,negate:d}}return null}if(a.tokenIs("less")){a.next();if(a.tokenIs("than")){a.next();var f=a.getValue();return{domain:"core",type:"less",value1:c,value2:f,negate:d}}return null}var g=a.getValue();return{domain:"core",type:"is",value1:c,value2:g,
     58negate:d}}if(c)return{domain:"core",type:"boolean",value:c}}catch(m){console.log(m)}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value);case "is":return a=a.compare(a,b.value1,b.value2),b.negate?0!==a:0===a;case "greater":return a=a.compare(a,b.value1,b.value2),b.negate?0>=a:0<a;case "less":return a=a.compare(a,b.value1,b.value2),b.negate?0<=a:0>a;case "not":return!a.getValue(b.value)}}}};f.exports=b},{}],6:[function(d,f,g){var e=this,b=d("./Tokenise"),a=d("./Compile"),
     59c=d("./Run"),k=d("./Value"),h=d("./Condition"),n=d("./Compare"),l={domain:{core:d("./Core")},runtimeError:{runtimeError:function(a,b){e.program.lino=a;throw Error("Line "+(0<=a?a:"")+": "+b);},nonNumericValueError:function(a){runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){runtimeError(a,"Variable '"+b+"' does not hold a value")}},setupTracer:function(){var a=document.getElementById("easycoder-tracer");a&&(a.innerHTML='<div><input id="easycoder-run-button" type="button" value="Run" /><input id="easycoder-step-button" type="button" value="Step" /><div id="easycoder-tracer-content" style="border:1px solid black;padding:4px";width:100%></div>',
     60a.style.display="none")},reportError:function(b,c){if(c){var d=e.program,f=c.tokens;c=c.scriptLines;f=e.compiling?f[a.getIndex()].lino:d.lino;d="";var h=f-5;for(h=0>h?0:h;h<f;h++){for(var k=""+(h+1);4>k.length;)k=" "+k;d+=k+" "+c[h].line.split("\\s").join(" ")+"\n"}d+=b.message+"\n";b=a.getWarnings();if(b.length)for(d+="Warnings:\n",b=$jscomp.makeIterator(b),c=b.next();!c.done;c=b.next())d+=c.value+"\n";console.log(d);alert(d)}else console.log(b.message),alert(b.message)},getSymbolRecord:function(a){a=
     61e.program[e.program.symbols[a].pc];return a.alias?e.program[e.program.symbols[a.alias].pc]:a},evaluate:function(a){return k.evaluate(e.program,a)},encode:function(a){return k.encode(a,e.program.encoding)},decode:function(a){return k.decode(a,e.program.encoding)},getValue:function(a){return k.getValue(e.program,a)},run:function(a){c(e.program,a)},compileScript:function(b){var c=b.tokens;e.compiling=!0;var d=Date.now();a.value=k;a.condition=h;a.domain=l.domain;var f=a.compile(c);e.program=f;var g=Date.now();
     62console.log("Compiled "+c.length+" tokens in "+(g-d)+"ms");e.compiling=!1;f.source=b;f.run=l.run;f.value=k;f.evaluate=l.evaluate;f.getValue=l.getValue;f.encode=l.encode;f.decode=l.decode;f.condition=h;f.compare=n;f.domain=l.domain;f.getSymbolRecord=l.getSymbolRecord;f.error=l.runtimeError;f.reportError=l.reportError;f.symbols=a.getSymbols();f.encoding="none";f.popups=[];f.stack=[];f.queue=[0];l.setupTracer();console.log("Run the script");f.run(0)},tokeniseScript:function(a){var c=Date.now();a=b.tokenise(a);
     63var d=Date.now();console.log("Tokenised "+a.scriptLines.length+" lines in "+(d-c)+"ms");try{l.compileScript(a)}catch(t){l.reportError(t,a)}},getPlugins:function(a,b,c){var d=l.domain,e=document.head,f=document.createElement("script");f.onload=function(){b.forEach(function(a,b){var c=a;if("http"!==a&&0===a.indexOf("http")){c=a.indexOf("plugin-")+7;var e=a.indexOf(".js");c=a.substring(c,e)}switch(b){case 0:d[c]=EasyCoder_0;break;case 1:d[c]=EasyCoder_1;break;case 2:d[c]=EasyCoder_2;break;case 3:d[c]=
     64EasyCoder_3;break;case 4:d[c]=EasyCoder_4;break;case 5:d[c]=EasyCoder_5;break;case 6:d[c]=EasyCoder_6;break;case 7:d[c]=EasyCoder_7;break;case 8:d[c]=EasyCoder_8;break;case 9:d[c]=EasyCoder_9}});try{l.tokeniseScript(a)}catch(u){l.reportError(u)}};f.src=c?"plugins.js":"/rest//plugins/"+b.join();e.appendChild(f)},start:function(a){var b=!1,c=[],d=[];a.split("\n").forEach(function(a){var e=a.trim().split(" ");"*debug*"===e[0]?(c.length=0,b=!0):2===e.length?"plugin"===e[0]?(a=e[1].trim().split("/").join("~"),
     65c.push(a)):d.push(a):d.push(a)});0===c.length&&(c.push("browser"),c.push("json"),c.push("svg"),b&&c.push("ckeditor"));l.getPlugins(d,c,b)}};f.exports=l},{"./Compare":2,"./Compile":3,"./Condition":4,"./Core":5,"./Run":7,"./Tokenise":8,"./Value":9}],7:[function(d,f,g){var e=function(b,a){var c=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},d=[];if(d.length)d.push(a);else for(d.push(a);0<d.length;)for(b.pc=d.shift(),a={};;){b.pc=
     66b.domain[b[b.pc].domain].run(b);if(!b.pc)break;if(b.stop){b.tracing=!1;return}if(b.tracing){var f=b[b.pc],g=b.source.scriptLines,l=c(g),m=document.getElementById("easycoder-tracer");if(m){m.style.display="block";m.style.visibility="visible";var p="";if(b.tracer){b.tracer.variables.forEach(function(a,c,d){var e=b.getSymbolRecord(a);p=(e=e.value[e.index])?p+(a+": "+e.content):p+(a+": undefined");switch(b.tracer.alignment){case "horizontal":c<d.length-1&&(p+=", ");break;case "vertical":p+="<br>"}});
     67p+="<hr>";m="";for(var q=5;0<q;q--)f.lino&&(m+='<input type="text" name="'+q+'" value="'+g[f.lino-q].line.substr(l)+'"style=width:100%;border:none;enabled="false">'),m+="<br>";f=document.getElementById("easycoder-tracer-content");f.innerHTML=p+m;f.style.display="block";a.run=document.getElementById("easycoder-run-button");a.step=document.getElementById("easycoder-step-button");a.run.onclick=function(a){return function(c){a.run.blur();b.tracing=!1;document.getElementById("easycoder-tracer-content").style.display=
     68"none";try{e(b,b.resume)}catch(r){c="Error in run handler: "+r.message,console.log(c),alert(c)}}}(a);a.step.onclick=function(a){return function(c){console.log("step");a.step.blur();b.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{e(b,b.resume)}catch(r){c="Error in step handler: "+r.message,console.log(c),alert(c)}}}(a);b.resume=b.pc;b.pc=0}}break}a={run:a.run,step:a.step}}};f.exports=e},{}],8:[function(d,f,g){var e={markComments:function(b){var a=b.list,c=
     69void 0===b.index?0:b.index,d=void 0===b.inComment?!1:b.inComment,f=void 0===b.newList?[]:b.newList;if(c>=a.length)return f;var g=a[c];b=g.lino;g=g.token;var l={list:a,index:c+1,inComment:!1,newList:f.concat({lino:b,index:c,token:g})};f={list:a,index:c+1,inComment:!0,newList:f.concat({lino:b,index:c,comment:!0,token:g})};return d&&0<c&&b===a[c-1].lino?e.markComments(f):"!"===g.charAt(0)?e.markComments(f):e.markComments(l)},findStrings:function(b){var a=b.original,c=b.line,d=void 0===b.inComment?!1:
     70b.inComment;b=void 0===b.inQuote?!1:b.inQuote;var f=c.charAt(0),g=b&&" "===f?"\\s":f;if(1===c.length)return g;c=c.substring(1);if("!"===f&&!b)return f+e.findStrings({original:a,line:c,inComment:!0,inQuote:!1});if("`"===f&&!d&&!b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!0});if("`"===f&&b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!1});if(!d&&!b&&!f.match(/[A-z0-9_\-\+\*\/\- ]/)){if("'"==f||'"'==f)throw Error('Bad syntax in "'+a+'":\nStrings in EasyCoder must be enclosed in backticks.');
     71throw Error('Unrecognised character "'+f+'" in "'+a+'".');}return g+e.findStrings({original:a,line:c,inComment:d,inQuote:b})},tokenise:function(b){b=b.map(function(a){return a.length?e.findStrings({original:a,line:a}):""}).map(function(a,b){return{lino:b+1,line:a}});var a=b.map(function(a){return a.line.trim().split(/\s+/).map(function(b,c){return{lino:a.lino,index:c,token:b}})});a=[].concat.apply([],a).filter(function(a){return a.token}).map(function(a){return{lino:a.lino,index:a.index,token:a.token.split("\\s").join(" ")}});
     72a=e.markComments({list:a}).filter(function(a){return!a.comment});return{scriptLines:b,tokens:a}}};f.exports=e},{}],9:[function(d,f,g){var e={getItem:function(b){var a=b.getToken();if(!a)return null;if("`"===a.charAt(0))return b.next(),{type:"constant",numeric:!1,content:a.substring(1,a.length-1)};if(a[0].match(/[0-9\-]/)){var c=eval(a);if(Number.isInteger(c))return b.next(),{type:"constant",numeric:!0,content:c};throw Error("'"+a+"' is not an integer");}b.mark();a=$jscomp.makeIterator(Object.keys(b.domain));
     73for(c=a.next();!c.done;c=a.next())if(c=b.domain[c.value].value.compile(b))return c;return null},compile:function(b){var a=b.getToken(),c=b.value.getItem(b);if(!c)throw Error("Undefined value: '"+a+"'");if("cat"===b.getToken()){for(a={type:"cat",numeric:!1,parts:[c]};b.tokenIs("cat");)b.next(),a.parts.push(b.value.getItem(b));return a}return c},doValue:function(b,a){if("cat"===a.type)return{type:"constant",numeric:!1,content:a.parts.reduce(function(a,c){return a+e.doValue(b,c).content},"")};switch(a.type){case "constant":return a;
     74case "symbol":var c=b.getSymbolRecord(a.name);return c.isValueHolder?c.value[c.index]?c.value[c.index]:null:b.domain[c.domain].value.get(b,a);case "boolean":return a}return b.domain[a.domain].value.get(b,a)},constant:function(b){return{type:"constant",numeric:"false",content:b}},evaluate:function(b,a){if(!a)return{type:"constant",numeric:!1,content:""};var c=e.doValue(b,a);if(c)return c;b.error.runtimeError(b[b.pc].lino,"Can't decode value: "+a)},getValue:function(b,a){return e.evaluate(b,a).content},
     75encode:function(b,a){switch(a){case "url":return encodeURIComponent(b.replace(/\s/g,"+"));default:return b}},decode:function(b,a){switch(a){case "url":return decodeURIComponent(b).replace(/\+/g," ");default:return b}}};f.exports=e},{}]},{},[1]);
  • easycoder/trunk/easycoder.js

    r1963126 r1963561  
    204204    const item = EasyCoder_Compiler.getTokens()[EasyCoder_Compiler.getIndex()];
    205205    if (_this.symbols[item.token]) {
    206       EasyCoder_Compiler.error.duplicateSymbolError(item.token);
     206      throw new Error(`Duplicate variable name '${item.token}'`);
    207207    }
    208208    const pc = EasyCoder_Compiler.getPc();
     
    246246    }
    247247    console.log('No handler found');
    248     EasyCoder_Compiler.error.dontUnderstandError(token, index);
     248    throw new Error(`I don't understand '${token}'`);
    249249  },
    250250
     
    575575        return true;
    576576      }
    577       compiler.error.NoSuchVariableError(compiler.getToken());
     577      throw new Error(`No such variable: '${compiler.getToken()}'`);
    578578    },
    579579
     
    11421142          return true;
    11431143        }
    1144         compiler.error.noSuchVariableError(compiler.getToken());
     1144        throw new Error(`No such variable: '${compiler.getToken()}'`);
    11451145      }
    11461146      return false;
     
    12821282          const target = compiler.getTarget();
    12831283          if (!compiler.isSymbol()) {
    1284             compiler.error.unknownVariableError(compiler.getToken());
     1284            throw new Error(`Unknown variable '${compiler.getToken()}'`);
    12851285          }
    12861286          const symbol = compiler.getToken();
     
    21572157  },
    21582158
    2159   compileError: {
    2160     dontUnderstandError: name => {
    2161       throw Error('I don\'t understand \'' + name + '\'');
    2162     },
    2163     duplicateSymbolError: name => {
    2164       throw Error('Symbol \'' + name + '\' is a duplicate');
    2165     },
    2166     inappropriateTypeError: name => {
    2167       throw Error('Inappropriate type \'' + name + '\'');
    2168     },
    2169     inappropriateVariableTypeError: name => {
    2170       throw Error('Inappropriate variable type \'' + name + '\'');
    2171     },
    2172     missingInputTypeError: () => {
    2173       throw Error('Missing input type');
    2174     },
    2175     noSuchVariableError: name => {
    2176       throw Error('No such variable: ' + name);
    2177     },
    2178     notAnIntegerError: name => {
    2179       throw Error('Value is not an integer: ' + name);
    2180     },
    2181     undefinedValueError: name => {
    2182       throw Error('Undefined value: ' + name);
    2183     },
    2184     unknownTypeError: name => {
    2185       throw Error('Unknown type: ' + name);
    2186     },
    2187     unknownVariableError: name => {
    2188       throw Error('Unknown variable: ' + name);
    2189     },
    2190     unrecognisedValueError: name => {
    2191       throw Error('I don\'t understand this value: ' + name);
    2192     },
    2193     variableDoesNotHoldAValueError: name => {
    2194       throw Error('Variable \'' + name + '\' does not hold a value');
    2195     },
    2196     expectedError: (expected, actual) => {
    2197       throw Error('Expected \'' + expected + '\' but saw \'' + actual + '\'');
    2198     },
    2199     symbolExpectedError: actual => {
    2200       throw Error('Symbol expected: got ' + actual);
    2201     }
    2202   },
    2203 
    22042159  runtimeError: {
    22052160    runtimeError: (lino, message) => {
    2206       throw Error('Line ' + (lino >= 0) ? lino + 1 + ': ' : '' + message);
     2161      _this.program.lino = lino;
     2162      throw Error(`Line ${lino >= 0 ? lino : ''}: ${message}`);
    22072163    },
    22082164    nonNumericValueError: lino => {
     
    22102166    },
    22112167    variableDoesNotHoldAValueError: (lino, name) => {
    2212       runtimeError(lino, 'Variable \'' + name + '\' does not hold a value');
     2168      runtimeError(lino, `Variable '${name}' does not hold a value`);
    22132169    }
    22142170  },
     
    22262182  reportError: (err, source) => {
    22272183    if (!source) {
    2228       console.log(err);
    2229       alert(err);
     2184      console.log(err.message);
     2185      alert(err.message);
    22302186      return;
    22312187    }
    22322188    const compiler = EasyCoder_Compiler;
    2233     const program = compiler.getProgram();
     2189    const program = _this.program;
    22342190    const { tokens, scriptLines } = source;
    2235     const lino = _this.compiling ? tokens[compiler.getIndex()].lino : program.pc.lino;
     2191    const lino = _this.compiling ? tokens[compiler.getIndex()].lino : program.lino;
    22362192    var errString = '';
    22372193    let start = lino - 5;
    22382194    start = start < 0 ? 0 : start;
    22392195    for (var n = start; n < lino; n++) {
    2240       let nn = '' + n;
     2196      let nn = '' + (n + 1);
    22412197      while (nn.length < 4) {
    22422198        nn = ' ' + nn;
     
    22442200      errString += nn + ' ' + scriptLines[n].line.split('\\s').join(' ') + '\n';
    22452201    }
    2246     errString += err.message + '\n';
     2202    errString += `${err.message}\n`;
    22472203    const warnings = EasyCoder_Compiler.getWarnings();
    22482204    if (warnings.length) {
    22492205      errString += 'Warnings:\n';
    22502206      for (const warning of warnings) {
    2251         errString += warning + '\n';
     2207        errString += `${warning}\n`;
    22522208      }
    22532209    }
     
    22932249    compiler.condition = EasyCoder_Condition;
    22942250    compiler.domain = EasyCoder.domain;
    2295     compiler.error = EasyCoder.compileError;
    22962251    const program = EasyCoder_Compiler.compile(tokens);
    22972252    _this.program = program;
     
    23322287    console.log('Tokenised ' + source.scriptLines.length + ' lines in ' + (finishTokenise - startTokenise) + 'ms');
    23332288    //  console.log('Source: ' + JSON.stringify(source, null, 2));
    2334     EasyCoder.compileScript(source);
     2289    try {
     2290      EasyCoder.compileScript(source);
     2291    } catch (err) {
     2292      EasyCoder.reportError(err, source);
     2293    }
    23352294  },
    23362295
     
    27162675        return value;
    27172676      } else {
    2718         compiler.error.notAnIntegerError(token);
     2677        throw new Error(`'${token}' is not an integer`);
    27192678      }
    27202679    }
     
    27362695    const item = compiler.value.getItem(compiler);
    27372696    if (!item) {
    2738       compiler.error.undefinedValueError(token);
     2697      throw new Error(`Undefined value: '${token}'`);
    27392698    }
    27402699
  • easycoder/trunk/easycoder.php

    r1963126 r1963561  
    44    * Plugin URI: https://easycoder.software
    55    * 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.1.1
     6    * Version: 2.1.2
    77    * Author: EasyCoder Software
    88    * Author URI: https://easycoder.software
     
    6262    function easycoder_enqueue_script() {   
    6363        wp_enqueue_script('easycoder_script',
    64                 plugin_dir_url( __FILE__ ) . 'easycoder-min.js', array(), '2.1.1');
     64                plugin_dir_url( __FILE__ ) . 'easycoder-min.js', array(), '2.1.2');
    6565    }
    6666
  • easycoder/trunk/plugin-browser.js

    r1963126 r1963561  
    185185                compiler.next();
    186186              } else {
    187                 compiler.error.missingInputTypeError();
     187                throw new Error('Missing input type');
    188188              }
    189189            }
     
    193193                const parentRecord = compiler.getSymbolRecord();
    194194                if (parentRecord.extra !== 'dom') {
    195                   compiler.error.inappropriateTypeError(parentRecord.keyword);
     195                  throw new Error(`Inappropriate type '${parentRecord.keyword}'`);
    196196                }
    197197                compiler.next();
     
    734734              }
    735735            }
    736             compiler.error.symbolExpectedError(compiler.getToken());
     736            throw new Error(`Expected a symbol at '{compiler.getToken()}'`);
    737737          }
    738738        } else if (token === 'text') {
     
    12191219            };
    12201220          }
    1221           compiler.error.symbolExpectedError(compiler.getToken());
     1221          throw new Error(`Expected a symbol at '{compiler.getToken()}'`);
    12221222        }
    12231223        return null;
  • easycoder/trunk/plugin-json.js

    r1963126 r1963561  
    3838                }
    3939              }
    40             }           
    41             compiler.error.expectedError('of', compiler.getToken());
     40            }
     41            throw new Error(`Expected '${'of'}' but saw '${compiler.getToken()}`);
    4242          } else if (compiler.tokenIs('element')) {
    4343            compiler.next();
     
    6969              }
    7070            }
    71             compiler.error.expectedError('of', compiler.getToken());
     71            throw new Error(`Expected '${'of'}' but saw '${compiler.getToken()}`);
    7272          }
    7373          break;
     
    308308              break;
    309309            }
     310          }
     311          const url = compiler.getValue();
     312          if (compiler.tokenIs('as')) {
     313            compiler.next();
    310314            name = compiler.getValue();
    311             if (compiler.tokenIs('at')) {
    312               compiler.next();
    313             } else {
    314               break;
    315             }
    316           }
    317           const url = compiler.getValue();
    318           compiler.addCommand({
     315          }
     316         compiler.addCommand({
    319317            domain: 'json',
    320318            keyword: 'rest',
     
    355353                break;
    356354              default:
    357                 const lino = command.lino + 1;
    358355                const error = JSON.parse(this.responseText ? this.responseText : '{}');
    359                 alert(`HTTP error ${this.status} at line ${lino}:\n${error.message}`);
     356                try {
     357                  program.error.runtimeError(command.lino, error.message);
     358//                  `HTTP error ${this.status} at line ${command.lino}:\n${error.message}`);
     359                } catch (err) {
     360                  program.reportError(err, program.source);
     361                }
    360362                break;
    361363            }
  • easycoder/trunk/plugin-svg.js

    r1960099 r1963561  
    2828            break;
    2929          default:
    30             compile.error.InappropriateVariableTypeError(symbol.keyword);
     30            throw new Error(`Inappropriate variable type: '${symbol.keyword}'`);
    3131            break;
    3232        }
     
    121121                const parentRecord = compiler.getSymbolRecord();
    122122                if (!['svg', 'group'].includes(parentRecord.keyword)) {
    123                   compiler.error.inappropriateTypeError(parentRecord.keyword);
     123                  throw new Error(`Inappropriate type '${parentRecord.keyword}'`);
    124124                }
    125125                compiler.next();
     
    146146                const parentRecord = compiler.getSymbolRecord();
    147147                if (!['svg', 'group'].includes(parentRecord.keyword)) {
    148                   compiler.error.inappropriateTypeError(parentRecord.keyword);
     148                  throw new Error(`Inappropriate type '${parentRecord.keyword}'`);
    149149                }
    150150                compiler.next();
     
    478478                        program.run(event.target.targetPc);
    479479                      } catch (err) {
    480                         program.reportError(program.source, err);
     480                        program.reportError(err, program.source);
    481481                      }
    482482                      return false;
  • easycoder/trunk/readme.txt

    r1963126 r1963561  
    4747== Changelog ==
    4848
     49= 2.1.2 26-oct-2018 =
     50* Better error handling and reporting.
     51
    4952= 2.1.1 25-oct-2018 =
    5053* Added some more REST functions and a REST server.
Note: See TracChangeset for help on using the changeset viewer.