Adding script editor options and some bug fixes

This commit is contained in:
danielyxie
2017-09-04 20:03:29 -05:00
parent 0f5d2a7c6a
commit 3296a817fd
8 changed files with 12544 additions and 5042 deletions
+18 -8
View File
@@ -13,11 +13,10 @@ import {isValidIPAddress} from "../utils/IPAddress.js";
import {isString} from "../utils/StringHelperFunctions.js";
/* Evaluator
* Evaluates the Abstract Syntax Tree for Netscript
* generated by the Parser class
* Evaluates/Interprets the Abstract Syntax Tree generated by Acorns parser
*
* Returns a promise
*/
// Evaluator should return a Promise, so that any call to evaluate() can just
//wait for that promise to finish before continuing
function evaluate(exp, workerScript) {
return new Promise(function(resolve, reject) {
var env = workerScript.env;
@@ -196,11 +195,11 @@ function evaluate(exp, workerScript) {
resolve(false);
break;
case "ReturnStatement":
reject(makeRuntimeRejectMsg(workerScript, "Not implemented ReturnStatement"));
var lineNum = getErrorLineNumber(exp, workerScript);
reject(makeRuntimeRejectMsg(workerScript, "Return statements are not yet implemented in Netscript (line " + (lineNum+1) + ")"));
break;
case "BreakStatement":
reject("BREAKSTATEMENT");
//reject(makeRuntimeRejectMsg(workerScript, "Not implemented BreakStatement"));
break;
case "IfStatement":
evaluateIf(exp, workerScript).then(function(forLoopRes) {
@@ -210,7 +209,8 @@ function evaluate(exp, workerScript) {
});
break;
case "SwitchStatement":
reject(makeRuntimeRejectMsg(workerScript, "Not implemented SwitchStatement"));
var lineNum = getErrorLineNumber(exp, workerScript);
reject(makeRuntimeRejectMsg(workerScript, "Switch statements are not yet implemented in Netscript (line " + (lineNum+1) + ")"));
break;e
case "WhileStatement":
evaluateWhile(exp, workerScript).then(function(forLoopRes) {
@@ -239,7 +239,8 @@ function evaluate(exp, workerScript) {
});
break;
default:
reject(makeRuntimeRejectMsg(workerScript, "Unrecognized token: " + exp.type + ". This is currently unsupported in Netscript"));
var lineNum = getErrorLineNumber(exp, workerScript);
reject(makeRuntimeRejectMsg(workerScript, "Unrecognized token: " + exp.type + " (line " + (lineNum+1) + "). This is currently unsupported in Netscript"));
break;
} //End switch
}, Settings.CodeInstructionRunTime); //End setTimeout, the Netscript operation run time
@@ -644,6 +645,15 @@ function runScriptFromScript(server, scriptname, args, workerScript, threads=1)
return Promise.resolve(false);
}
//Takes in a
function getErrorLineNumber(exp, workerScript) {
var code = workerScript.scriptRef.scriptRef.code;
//Split code up to the start of the node
code = code.substring(0, exp.start);
return (code.match(/\n/g) || []).length;
}
function isScriptErrorMessage(msg) {
if (!isString(msg)) {return false;}
let splitMsg = msg.split("|");