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
|
-
|
|
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
|
-
|
|
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,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
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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);
|