greybel-interpreter 2.3.0 → 2.3.1

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/dist/cps.js CHANGED
@@ -12,7 +12,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.CPS = exports.CPSContext = void 0;
13
13
  const greybel_core_1 = require("greybel-core");
14
14
  const greyscript_core_1 = require("greyscript-core");
15
- const assign_1 = require("./operations/assign");
16
15
  const break_1 = require("./operations/break");
17
16
  const call_1 = require("./operations/call");
18
17
  const chunk_1 = require("./operations/chunk");
@@ -37,15 +36,8 @@ const resolve_1 = require("./operations/resolve");
37
36
  const return_1 = require("./operations/return");
38
37
  const while_1 = require("./operations/while");
39
38
  const error_1 = require("./utils/error");
40
- const assign_self_1 = require("./operations/assign-self");
41
- const assign_globals_1 = require("./operations/assign-globals");
42
- const assign_locals_1 = require("./operations/assign-locals");
43
- const assign_outer_1 = require("./operations/assign-outer");
44
- const reference_self_1 = require("./operations/reference-self");
45
- const reference_globals_1 = require("./operations/reference-globals");
46
- const reference_locals_1 = require("./operations/reference-locals");
47
- const reference_outer_1 = require("./operations/reference-outer");
48
39
  const create_resolve_1 = require("./utils/create-resolve");
40
+ const create_assign_1 = require("./utils/create-assign");
49
41
  class CPSContext {
50
42
  constructor(target, handler) {
51
43
  this.target = target;
@@ -62,35 +54,11 @@ const visit = (context, stack, item) => __awaiter(void 0, void 0, void 0, functi
62
54
  case greyscript_core_1.ASTType.ListConstructorExpression:
63
55
  return new list_1.List(item, currentTarget).build(defaultVisit);
64
56
  case greyscript_core_1.ASTType.AssignmentStatement:
65
- const assignStatement = item;
66
- if (assignStatement.variable instanceof greyscript_core_1.ASTIdentifier) {
67
- switch (assignStatement.variable.name) {
68
- case 'self':
69
- return new assign_self_1.AssignSelf(assignStatement, currentTarget).build(defaultVisit);
70
- case 'globals':
71
- return new assign_globals_1.AssignGlobals(assignStatement, currentTarget).build(defaultVisit);
72
- case 'locals':
73
- return new assign_locals_1.AssignLocals(assignStatement, currentTarget).build(defaultVisit);
74
- case 'outer':
75
- return new assign_outer_1.AssignOuter(assignStatement, currentTarget).build(defaultVisit);
76
- }
77
- }
78
- return new assign_1.Assign(assignStatement, currentTarget).build(defaultVisit);
57
+ return (0, create_assign_1.createAssign)(item, currentTarget).build(defaultVisit);
79
58
  case greyscript_core_1.ASTType.MemberExpression:
80
59
  return (0, create_resolve_1.createResolve)(item, currentTarget).build(defaultVisit);
81
60
  case greyscript_core_1.ASTType.Identifier:
82
- const identifier = item;
83
- switch (identifier.name) {
84
- case 'self':
85
- return new reference_self_1.ReferenceSelf(item, currentTarget).build(defaultVisit);
86
- case 'globals':
87
- return new reference_globals_1.ReferenceGlobals(item, currentTarget).build(defaultVisit);
88
- case 'locals':
89
- return new reference_locals_1.ReferenceLocals(item, currentTarget).build(defaultVisit);
90
- case 'outer':
91
- return new reference_outer_1.ReferenceOuter(item, currentTarget).build(defaultVisit);
92
- }
93
- return new resolve_1.Resolve(identifier, currentTarget).build(defaultVisit);
61
+ return (0, create_resolve_1.createIdentifierResolve)(item, currentTarget).build(defaultVisit);
94
62
  case greyscript_core_1.ASTType.IndexExpression:
95
63
  case greyscript_core_1.ASTType.SliceExpression:
96
64
  return new resolve_1.Resolve(item, currentTarget).build(defaultVisit);
@@ -0,0 +1,3 @@
1
+ import { ASTAssignmentStatement } from 'greyscript-core';
2
+ import { Operation } from '../operations/operation';
3
+ export declare function createAssign(item: ASTAssignmentStatement, target?: string): Operation;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAssign = void 0;
4
+ const greyscript_core_1 = require("greyscript-core");
5
+ const assign_1 = require("../operations/assign");
6
+ const assign_globals_1 = require("../operations/assign-globals");
7
+ const assign_locals_1 = require("../operations/assign-locals");
8
+ const assign_outer_1 = require("../operations/assign-outer");
9
+ const assign_self_1 = require("../operations/assign-self");
10
+ const hasOwnProperty = Object.prototype.hasOwnProperty;
11
+ const optAssignMap = {
12
+ self: assign_self_1.AssignSelf,
13
+ globals: assign_globals_1.AssignGlobals,
14
+ locals: assign_locals_1.AssignLocals,
15
+ outer: assign_outer_1.AssignOuter
16
+ };
17
+ function createAssign(item, target) {
18
+ if (item.variable instanceof greyscript_core_1.ASTIdentifier &&
19
+ hasOwnProperty.call(optAssignMap, item.variable.name)) {
20
+ const OptAssign = optAssignMap[item.variable.name];
21
+ return new OptAssign(item, target);
22
+ }
23
+ return new assign_1.Assign(item, target);
24
+ }
25
+ exports.createAssign = createAssign;
@@ -1,3 +1,5 @@
1
- import { ASTBase } from 'greyscript-core';
1
+ import { ASTBase, ASTIdentifier } from 'greyscript-core';
2
+ import { Operation } from '../operations/operation';
2
3
  import { Resolve } from '../operations/resolve';
4
+ export declare function createIdentifierResolve(item: ASTIdentifier, target?: string): Operation;
3
5
  export declare function createResolve(item: ASTBase, target?: string): Resolve;
@@ -1,28 +1,53 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createResolve = void 0;
3
+ exports.createResolve = exports.createIdentifierResolve = void 0;
4
4
  const greyscript_core_1 = require("greyscript-core");
5
+ const reference_globals_1 = require("../operations/reference-globals");
6
+ const reference_locals_1 = require("../operations/reference-locals");
7
+ const reference_outer_1 = require("../operations/reference-outer");
8
+ const reference_self_1 = require("../operations/reference-self");
5
9
  const resolve_1 = require("../operations/resolve");
6
10
  const resolve_globals_1 = require("../operations/resolve-globals");
7
11
  const resolve_locals_1 = require("../operations/resolve-locals");
8
12
  const resolve_outer_1 = require("../operations/resolve-outer");
9
13
  const resolve_self_1 = require("../operations/resolve-self");
10
14
  const lookup_path_1 = require("./lookup-path");
15
+ const hasOwnProperty = Object.prototype.hasOwnProperty;
16
+ const optIdentifierResolveMap = {
17
+ self: reference_self_1.ReferenceSelf,
18
+ globals: reference_globals_1.ReferenceGlobals,
19
+ locals: reference_locals_1.ReferenceLocals,
20
+ outer: reference_outer_1.ReferenceOuter
21
+ };
22
+ function createIdentifierResolve(item, target) {
23
+ if (hasOwnProperty.call(optIdentifierResolveMap, item.name)) {
24
+ const OptResolve = optIdentifierResolveMap[item.name];
25
+ return new OptResolve(item, target);
26
+ }
27
+ return new resolve_1.Resolve(item, target);
28
+ }
29
+ exports.createIdentifierResolve = createIdentifierResolve;
30
+ const optResolveMap = {
31
+ self: resolve_self_1.ResolveSelf,
32
+ globals: resolve_globals_1.ResolveGlobals,
33
+ locals: resolve_locals_1.ResolveLocals,
34
+ outer: resolve_outer_1.ResolveOuter
35
+ };
11
36
  function createResolve(item, target) {
12
37
  if (item instanceof greyscript_core_1.ASTMemberExpression) {
13
38
  const memberExpr = item;
14
39
  const path = (0, lookup_path_1.lookupPath)(memberExpr);
15
- if (path[0].base instanceof greyscript_core_1.ASTIdentifier) {
16
- switch (path[0].base.name) {
17
- case 'self':
18
- return new resolve_self_1.ResolveSelf(path[0].identifier, target);
19
- case 'globals':
20
- return new resolve_globals_1.ResolveGlobals(path[0].identifier, target);
21
- case 'locals':
22
- return new resolve_locals_1.ResolveLocals(path[0].identifier, target);
23
- case 'outer':
24
- return new resolve_outer_1.ResolveOuter(path[0].identifier, target);
40
+ if (path.length > 0 &&
41
+ path[0].base instanceof greyscript_core_1.ASTIdentifier &&
42
+ hasOwnProperty.call(optResolveMap, path[0].base.name)) {
43
+ const OptResolve = optResolveMap[path[0].base.name];
44
+ const right = path[0].identifier;
45
+ if (path.length === 1) {
46
+ return new OptResolve(right, target);
25
47
  }
48
+ const newBase = path[1];
49
+ newBase.base = right;
50
+ return new OptResolve(memberExpr, target);
26
51
  }
27
52
  }
28
53
  return new resolve_1.Resolve(item, target);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greybel-interpreter",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Interpreter",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",