EDITOR: Use ramOverride() to set compiled script RAM (#1446)

To use this, add a line like "ns.ramOverride(2);" as the first statement
in main(). Not only will it take effect at runtime, but it will now
*also* be parsed at compile time, changing the script's static RAM
limit. Since ns.ramOverride is a 0-cost function, the call to it on
startup then becomes a no-op.

This is an often-requested feature, and allows for scripts to set their
usage without it needing to be explicitly mentioned via args or options
when being launched. This also reduces pressure on the static RAM
analysis to be perfect all the time. (But certain limits, such as
"functions names must be unique across namespaces," remain.)

This also adds a tooltip to the RAM calculation, to make this slightly
discoverable.
This commit is contained in:
David Walker
2024-07-05 17:32:46 -07:00
committed by GitHub
parent 29c54df543
commit 1f2e69631e
3 changed files with 103 additions and 15 deletions

View File

@@ -169,4 +169,18 @@ describe("Netscript RAM Calculation/Generation Tests", function () {
});
}
});
describe("ramOverride checks", () => {
test.each([
["ns.ramOverride(5)", 5],
["ramOverride(5)", 5],
["ns.ramOverride(5 * 1024)", baseCost], // Constant expressions are not handled yet
])("%s", (code, expected) => {
const fullCode = `export function main(ns) { ${code} }`;
const result = calculateRamUsage(fullCode, "testfile.js", new Map(), "testserver");
expect(result.errorMessage).toBe(undefined);
expect(result.cost).toBe(expected);
});
});
});