greyscript-interpreter 2.6.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,2 +1,40 @@
1
1
  # greyscript-interpreter
2
- Interpreter for greyscript
2
+
3
+ [![greyscript-interpreter](https://circleci.com/gh/ayecue/greyscript-interpreter.svg?style=svg)](https://circleci.com/gh/ayecue/greyscript-interpreter)
4
+
5
+ A bytecode interpreter for [GreyScript](https://github.com/ayecue/greybel-js) (the [Grey Hack](https://store.steampowered.com/app/605230/Grey_Hack/) flavour of MiniScript) written in TypeScript. It extends [greybel-interpreter](../greybel-interpreter) with GreyScript-specific parsing and bytecode generation via [greyscript-core](../greyscript-core).
6
+
7
+ ## Features
8
+
9
+ * Extends `greybel-interpreter` with GreyScript-aware parsing and compilation
10
+ * Uses the GreyScript parser for bytecode generation and code injection
11
+ * Adds `classID`-based `toString` behaviour for `CustomMap` instances
12
+ * Inherits all greybel-interpreter capabilities: stack-based VM, debugger, pluggable handlers, environment variables, and custom intrinsics
13
+ * Written in TypeScript with type definitions included
14
+
15
+ ## Install
16
+
17
+ ```
18
+ npm install greyscript-interpreter
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ```ts
24
+ import { Interpreter } from 'greyscript-interpreter';
25
+ import { HandlerContainer } from 'greybel-interpreter';
26
+
27
+ const interpreter = new Interpreter({
28
+ target: '/path/to/main.src',
29
+ handler: new HandlerContainer(),
30
+ environmentVariables: new Map([['MY_VAR', '123']])
31
+ });
32
+
33
+ await interpreter.run();
34
+ ```
35
+
36
+ ## Testing
37
+
38
+ ```
39
+ npm test
40
+ ```
@@ -37,14 +37,14 @@ class BytecodeStatementGenerator extends greybel_interpreter_1.BytecodeStatement
37
37
  return;
38
38
  }
39
39
  if (this.context.target.includes(importTarget)) {
40
- console.warn(`Found circular dependency between "${currentTarget}" and "${importTarget}" at line ${node.start.line}. Using noop instead to prevent overflow.`);
40
+ console.warn(`Found circular dependency between "${currentTarget}" and "${importTarget}" at line ${node.startLine}. Using noop instead to prevent overflow.`);
41
41
  return;
42
42
  }
43
43
  const code = yield this.context.handler.resourceHandler.get(importTarget);
44
44
  if (code == null) {
45
45
  throw new greybel_interpreter_1.PrepareError(`Cannot find import "${currentTarget}"`, {
46
46
  target: currentTarget,
47
- range: new miniscript_core_1.ASTRange(node.start, node.end)
47
+ range: new miniscript_core_1.ASTRange([node.startLine, node.startChar], [node.endLine, node.endChar])
48
48
  });
49
49
  }
50
50
  try {
@@ -60,7 +60,7 @@ class BytecodeStatementGenerator extends greybel_interpreter_1.BytecodeStatement
60
60
  }
61
61
  throw new greybel_interpreter_1.PrepareError(err.message, {
62
62
  target: importTarget,
63
- range: new miniscript_core_1.ASTRange(node.start, node.end)
63
+ range: new miniscript_core_1.ASTRange([node.startLine, node.startChar], [node.endLine, node.endChar])
64
64
  }, err);
65
65
  }
66
66
  });
@@ -16,7 +16,10 @@ const greyscript_core_1 = require("greyscript-core");
16
16
  const statement_1 = require("./bytecode-generator/statement");
17
17
  const parse = function (code) {
18
18
  try {
19
- const parser = new greyscript_core_1.Parser(code);
19
+ const parser = new greyscript_core_1.Parser(code, {
20
+ environmentVariables: this.environmentVariables,
21
+ strictMode: this.strictMode
22
+ });
20
23
  return parser.parseChunk();
21
24
  }
22
25
  catch (err) {
@@ -15,14 +15,19 @@ const greyscript_core_1 = require("greyscript-core");
15
15
  const bytecode_generator_1 = require("./bytecode-generator");
16
16
  class Interpreter extends greybel_interpreter_1.Interpreter {
17
17
  parse(code) {
18
- const parser = new greyscript_core_1.Parser(code);
18
+ const parser = new greyscript_core_1.Parser(code, {
19
+ environmentVariables: this.environmentVariables,
20
+ strictMode: this.strictMode
21
+ });
19
22
  return parser.parseChunk();
20
23
  }
21
24
  inject(code, context) {
22
25
  return __awaiter(this, void 0, void 0, function* () {
23
26
  const bytecodeGenerator = new bytecode_generator_1.BytecodeGenerator({
24
27
  target: 'injected',
25
- handler: this.handler
28
+ handler: this.handler,
29
+ environmentVariables: this.environmentVariables,
30
+ strictMode: this.strictMode
26
31
  });
27
32
  const result = yield bytecodeGenerator.compile(code);
28
33
  const vm = new greybel_interpreter_1.VM({
@@ -57,7 +62,9 @@ class Interpreter extends greybel_interpreter_1.Interpreter {
57
62
  const bytecodeConverter = new bytecode_generator_1.BytecodeGenerator({
58
63
  target: this.target,
59
64
  handler: this.handler,
60
- debugMode: this.debugMode
65
+ debugMode: this.debugMode,
66
+ environmentVariables: this.environmentVariables,
67
+ strictMode: this.strictMode
61
68
  });
62
69
  const bytecode = yield bytecodeConverter.compile(code);
63
70
  this.initVM(bytecode, vmOptions);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greyscript-interpreter",
3
- "version": "2.6.2",
3
+ "version": "3.0.0",
4
4
  "description": "Interpreter",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",
@@ -48,8 +48,8 @@
48
48
  "typescript": "^5.0.4"
49
49
  },
50
50
  "dependencies": {
51
- "greyscript-core": "~2.6.0",
52
- "greybel-interpreter": "~5.6.2"
51
+ "greyscript-core": "~3.0.0",
52
+ "greybel-interpreter": "~6.0.0"
53
53
  },
54
54
  "keywords": [
55
55
  "greyscript",