mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-18 12:15:44 +01:00
Added var declaration in Netscript 1.0. Loops and conditionals no longer incur RAM cost, but base RAM cost increased from 1.4 to 1.6 GB
This commit is contained in:
parent
24cd1bb498
commit
aa17b02da7
12168
dist/engine.bundle.js
vendored
12168
dist/engine.bundle.js
vendored
File diff suppressed because one or more lines are too long
@ -42,11 +42,11 @@ let CONSTANTS = {
|
|||||||
|
|
||||||
/* Netscript Constants */
|
/* Netscript Constants */
|
||||||
//RAM Costs for different commands
|
//RAM Costs for different commands
|
||||||
ScriptBaseRamCost: 1.4,
|
ScriptBaseRamCost: 1.6,
|
||||||
ScriptDomRamCost: 100,
|
ScriptDomRamCost: 100,
|
||||||
ScriptWhileRamCost: 0.2,
|
ScriptWhileRamCost: 0,
|
||||||
ScriptForRamCost: 0.2,
|
ScriptForRamCost: 0,
|
||||||
ScriptIfRamCost: 0.15,
|
ScriptIfRamCost: 0,
|
||||||
ScriptHackRamCost: 0.1,
|
ScriptHackRamCost: 0.1,
|
||||||
ScriptGrowRamCost: 0.15,
|
ScriptGrowRamCost: 0.15,
|
||||||
ScriptWeakenRamCost: 0.15,
|
ScriptWeakenRamCost: 0.15,
|
||||||
@ -490,17 +490,15 @@ let CONSTANTS = {
|
|||||||
|
|
||||||
LatestUpdate:
|
LatestUpdate:
|
||||||
"v0.38.1<br>" +
|
"v0.38.1<br>" +
|
||||||
"* Bug Fix: Using 'Object.prototype' functions like toLocaleString() or toString() should no longer cause errors in NetscriptJS<br>" +
|
"* Added 'var' declarations in Netscript 1.0 (only works with 'var', not 'let' or 'const')<br>" +
|
||||||
"* Implemented by Github user hydroflame:<br>" +
|
"* Script base RAM cost is now 1.6 GB (increased from 1.4 GB)<br>" +
|
||||||
"*** Accessing the 'window' and 'document' objects in Netscript JS now requires a large amount of RAM (100 GB)<br>" +
|
"* While/for loops and if statements no longer cost RAM in scripts<br>" +
|
||||||
"*** Added game option to suppress travel confirmation<br>" +
|
"* Made short-circuit evaluation logic more consistent in Netscript 1.0 (see https://github.com/danielyxie/bitburner/issues/308)<br>" +
|
||||||
"*** Text on buttons can no longer be highlighted<br>" +
|
"* Changelog button in the Options menu now links to the new Changelog URL (by Github user thePalindrome)<br>" +
|
||||||
"*** Bug Fix: Fixed an issue that caused NaN values when exporting Real Estate in Corporations<br>" +
|
"* Skill level calculation is now 'smoother' (by Github user hydroflame)<br>" +
|
||||||
"*** Bug Fix: Competition and Demand displays in Corporation are now correct (were reversed before)<br>" +
|
"* Added a button to 'beautify' scripts in the text editor (by Github user hydroflame)<br>" +
|
||||||
"*** Added ps() Netscript function<br>" +
|
"* Added favicon (by Github user kopelli)"
|
||||||
"*** Bug Fix: grow() should no longer return/log a negative value when it runs on a server that's already at max money<br>" +
|
|
||||||
"*** Bug Fix: serverExists() Netscript function should now properly return false for non-existent hostname/ips<br>" +
|
|
||||||
"*** Bug Fix: Sever's security level should now properly increase when its money is grown to max value"
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,6 +224,9 @@ function evaluate(exp, workerScript) {
|
|||||||
case "AssignmentExpression":
|
case "AssignmentExpression":
|
||||||
return evalAssignment(exp, workerScript);
|
return evalAssignment(exp, workerScript);
|
||||||
break;
|
break;
|
||||||
|
case "VariableDeclaration":
|
||||||
|
return evalVariableDeclaration(exp, workerScript);
|
||||||
|
break;
|
||||||
case "UpdateExpression":
|
case "UpdateExpression":
|
||||||
if (exp.argument.type==="Identifier"){
|
if (exp.argument.type==="Identifier"){
|
||||||
if (exp.argument.name in env.vars){
|
if (exp.argument.name in env.vars){
|
||||||
@ -333,11 +336,11 @@ function evaluate(exp, workerScript) {
|
|||||||
function evalBinary(exp, workerScript){
|
function evalBinary(exp, workerScript){
|
||||||
return evaluate(exp.left, workerScript).then(function(expLeft) {
|
return evaluate(exp.left, workerScript).then(function(expLeft) {
|
||||||
//Short circuiting
|
//Short circuiting
|
||||||
if (expLeft == true && exp.operator === "||") {
|
if (expLeft && exp.operator === "||") {
|
||||||
return Promise.resolve(true);
|
return Promise.resolve(expLeft);
|
||||||
}
|
}
|
||||||
if (expLeft == false && exp.operator === "&&") {
|
if (!expLeft && exp.operator === "&&") {
|
||||||
return Promise.resolve(false);
|
return Promise.resolve(expLeft);
|
||||||
}
|
}
|
||||||
return evaluate(exp.right, workerScript).then(function(expRight) {
|
return evaluate(exp.right, workerScript).then(function(expRight) {
|
||||||
switch (exp.operator){
|
switch (exp.operator){
|
||||||
@ -511,6 +514,41 @@ function evalAssignment(exp, workerScript) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function evalVariableDeclaration(exp, workerScript) {
|
||||||
|
var env = workerScript.env;
|
||||||
|
if (env.stopFlag) {return Promise.reject(workerScript);}
|
||||||
|
|
||||||
|
if (!(exp.declarations instanceof Array)) {
|
||||||
|
return Promise.reject(makeRuntimeRejectMsg(workerScript, "Variable declarations parsed incorrectly. This may be a syntax error"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exp.kind !== "var") {
|
||||||
|
return Promise.reject(makeRuntimeRejectMsg(workerScript, "Only 'var' declarations are currently allowed (let, const, etc. are not allowed)"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.all(exp.declarations.map((decl)=>{
|
||||||
|
evalVariableDeclarator(decl, workerScript);
|
||||||
|
})).then(function(res) {
|
||||||
|
return Promise.resolve(res);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//A Variable Declaration contains an array of Variable Declarators
|
||||||
|
function evalVariableDeclarator(exp, workerScript) {
|
||||||
|
var env = workerScript.env;
|
||||||
|
if (exp.type !== "VariableDeclarator") {
|
||||||
|
return Promise.reject(makeRuntimeRejectMsg(workerScript, "Invalid AST Node passed into evalVariableDeclarator: " + exp.type));
|
||||||
|
}
|
||||||
|
if (exp.init == null) {
|
||||||
|
env.set(exp.id.name, null);
|
||||||
|
return Promise.resolve(null);
|
||||||
|
} else {
|
||||||
|
return evaluate(exp.init, workerScript).then(function(initValue) {
|
||||||
|
env.set(exp.id.name, initValue);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function evaluateIf(exp, workerScript, i) {
|
function evaluateIf(exp, workerScript, i) {
|
||||||
var env = workerScript.env;
|
var env = workerScript.env;
|
||||||
return evaluate(exp.test, workerScript).then(function(condRes) {
|
return evaluate(exp.test, workerScript).then(function(condRes) {
|
||||||
|
@ -194,7 +194,7 @@ function runScriptsLoop() {
|
|||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
var ast = parse(workerScripts[i].code, {sourceType:"module"});
|
var ast = parse(workerScripts[i].code, {sourceType:"module"});
|
||||||
//console.log(ast);
|
console.log(ast);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("Error parsing script: " + workerScripts[i].name);
|
console.log("Error parsing script: " + workerScripts[i].name);
|
||||||
dialogBoxCreate("Syntax ERROR in " + workerScripts[i].name + ":<br>" + e);
|
dialogBoxCreate("Syntax ERROR in " + workerScripts[i].name + ":<br>" + e);
|
||||||
|
@ -60,7 +60,7 @@ function scriptEditorInit() {
|
|||||||
}
|
}
|
||||||
var beautifyButton = createElement("a", {
|
var beautifyButton = createElement("a", {
|
||||||
class:"a-link-button", display:"inline-block",
|
class:"a-link-button", display:"inline-block",
|
||||||
innerText:"beautify",
|
innerText:"Beautify",
|
||||||
clickListener:()=>{
|
clickListener:()=>{
|
||||||
beautifyScript();
|
beautifyScript();
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user