greybel-interpreter 1.4.6 → 1.4.7
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/.editorconfig +14 -14
- package/.eslintrc +47 -47
- package/LICENSE +21 -21
- package/README.md +2 -2
- package/dist/context.d.ts +110 -110
- package/dist/context.js +306 -306
- package/dist/cps.d.ts +14 -14
- package/dist/cps.js +160 -160
- package/dist/handler/error.d.ts +6 -6
- package/dist/handler/error.js +12 -12
- package/dist/handler/output.d.ts +18 -18
- package/dist/handler/output.js +29 -29
- package/dist/handler/resource.d.ts +12 -12
- package/dist/handler/resource.js +28 -28
- package/dist/handler-container.d.ts +14 -14
- package/dist/handler-container.js +14 -14
- package/dist/index.d.ts +46 -46
- package/dist/index.js +132 -132
- package/dist/interpreter.d.ts +42 -42
- package/dist/interpreter.js +218 -218
- package/dist/operations/assign.d.ts +13 -13
- package/dist/operations/assign.js +46 -46
- package/dist/operations/block.d.ts +12 -12
- package/dist/operations/block.js +52 -52
- package/dist/operations/break.d.ts +10 -10
- package/dist/operations/break.js +23 -23
- package/dist/operations/call.d.ts +13 -13
- package/dist/operations/call.js +49 -49
- package/dist/operations/chunk.d.ts +12 -12
- package/dist/operations/chunk.js +33 -33
- package/dist/operations/continue.d.ts +10 -10
- package/dist/operations/continue.js +23 -23
- package/dist/operations/debugger-statement.d.ts +10 -10
- package/dist/operations/debugger-statement.js +21 -21
- package/dist/operations/evaluate.d.ts +40 -40
- package/dist/operations/evaluate.js +334 -334
- package/dist/operations/for.d.ts +14 -14
- package/dist/operations/for.js +81 -81
- package/dist/operations/function-reference.d.ts +12 -12
- package/dist/operations/function-reference.js +44 -44
- package/dist/operations/function.d.ts +14 -14
- package/dist/operations/function.js +72 -72
- package/dist/operations/if-statement.d.ts +19 -19
- package/dist/operations/if-statement.js +85 -85
- package/dist/operations/import.d.ts +17 -17
- package/dist/operations/import.js +57 -57
- package/dist/operations/include.d.ts +13 -13
- package/dist/operations/include.js +41 -41
- package/dist/operations/list.d.ts +11 -11
- package/dist/operations/list.js +42 -42
- package/dist/operations/literal.d.ts +11 -11
- package/dist/operations/literal.js +40 -40
- package/dist/operations/map.d.ts +11 -11
- package/dist/operations/map.js +44 -44
- package/dist/operations/negated-binary.d.ts +11 -11
- package/dist/operations/negated-binary.js +42 -42
- package/dist/operations/new-instance.d.ts +11 -11
- package/dist/operations/new-instance.js +39 -39
- package/dist/operations/noop.d.ts +9 -9
- package/dist/operations/noop.js +19 -19
- package/dist/operations/not.d.ts +11 -11
- package/dist/operations/not.js +35 -35
- package/dist/operations/operation.d.ts +13 -13
- package/dist/operations/operation.js +9 -9
- package/dist/operations/reference.d.ts +9 -9
- package/dist/operations/reference.js +19 -19
- package/dist/operations/resolve.d.ts +38 -38
- package/dist/operations/resolve.js +210 -210
- package/dist/operations/return.d.ts +11 -11
- package/dist/operations/return.js +45 -45
- package/dist/operations/while.d.ts +13 -13
- package/dist/operations/while.js +65 -65
- package/dist/types/base.d.ts +9 -9
- package/dist/types/base.js +5 -5
- package/dist/types/boolean.d.ts +13 -13
- package/dist/types/boolean.js +34 -34
- package/dist/types/default.d.ts +8 -8
- package/dist/types/default.js +14 -14
- package/dist/types/function.d.ts +32 -32
- package/dist/types/function.js +104 -104
- package/dist/types/interface.d.ts +24 -24
- package/dist/types/interface.js +83 -83
- package/dist/types/list.d.ts +29 -29
- package/dist/types/list.js +158 -158
- package/dist/types/map.d.ts +33 -33
- package/dist/types/map.js +200 -200
- package/dist/types/nil.d.ts +11 -11
- package/dist/types/nil.js +33 -33
- package/dist/types/number.d.ts +25 -25
- package/dist/types/number.js +69 -69
- package/dist/types/string.d.ts +31 -31
- package/dist/types/string.js +121 -121
- package/dist/types/with-intrinsics.d.ts +15 -15
- package/dist/types/with-intrinsics.js +19 -19
- package/dist/utils/deep-equal.d.ts +1 -1
- package/dist/utils/deep-equal.js +37 -37
- package/dist/utils/object-value.d.ts +7 -7
- package/dist/utils/object-value.js +42 -42
- package/dist/utils/path.d.ts +10 -10
- package/dist/utils/path.js +32 -32
- package/package.json +58 -58
package/dist/cps.js
CHANGED
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.CPSContext = void 0;
|
|
16
|
-
const greybel_core_1 = require("greybel-core");
|
|
17
|
-
const greyscript_core_1 = require("greyscript-core");
|
|
18
|
-
const assign_1 = __importDefault(require("./operations/assign"));
|
|
19
|
-
const break_1 = __importDefault(require("./operations/break"));
|
|
20
|
-
const call_1 = __importDefault(require("./operations/call"));
|
|
21
|
-
const chunk_1 = __importDefault(require("./operations/chunk"));
|
|
22
|
-
const continue_1 = __importDefault(require("./operations/continue"));
|
|
23
|
-
const debugger_statement_1 = __importDefault(require("./operations/debugger-statement"));
|
|
24
|
-
const evaluate_1 = __importDefault(require("./operations/evaluate"));
|
|
25
|
-
const for_1 = __importDefault(require("./operations/for"));
|
|
26
|
-
const function_1 = __importDefault(require("./operations/function"));
|
|
27
|
-
const function_reference_1 = __importDefault(require("./operations/function-reference"));
|
|
28
|
-
const if_statement_1 = __importDefault(require("./operations/if-statement"));
|
|
29
|
-
const import_1 = __importDefault(require("./operations/import"));
|
|
30
|
-
const include_1 = __importDefault(require("./operations/include"));
|
|
31
|
-
const list_1 = __importDefault(require("./operations/list"));
|
|
32
|
-
const literal_1 = __importDefault(require("./operations/literal"));
|
|
33
|
-
const map_1 = __importDefault(require("./operations/map"));
|
|
34
|
-
const negated_binary_1 = __importDefault(require("./operations/negated-binary"));
|
|
35
|
-
const new_instance_1 = __importDefault(require("./operations/new-instance"));
|
|
36
|
-
const noop_1 = __importDefault(require("./operations/noop"));
|
|
37
|
-
const not_1 = __importDefault(require("./operations/not"));
|
|
38
|
-
const resolve_1 = __importDefault(require("./operations/resolve"));
|
|
39
|
-
const return_1 = __importDefault(require("./operations/return"));
|
|
40
|
-
const while_1 = __importDefault(require("./operations/while"));
|
|
41
|
-
class CPSContext {
|
|
42
|
-
constructor(target, handler) {
|
|
43
|
-
this.target = target;
|
|
44
|
-
this.handler = handler;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.CPSContext = CPSContext;
|
|
48
|
-
const visit = (context, currentTarget, item) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
-
const defaultVisit = visit.bind(null, context, currentTarget);
|
|
50
|
-
switch (item.type) {
|
|
51
|
-
case greyscript_core_1.ASTType.MapConstructorExpression:
|
|
52
|
-
return new map_1.default(item, currentTarget).build(defaultVisit);
|
|
53
|
-
case greyscript_core_1.ASTType.ListConstructorExpression:
|
|
54
|
-
return new list_1.default(item, currentTarget).build(defaultVisit);
|
|
55
|
-
case greyscript_core_1.ASTType.AssignmentStatement:
|
|
56
|
-
return new assign_1.default(item, currentTarget).build(defaultVisit);
|
|
57
|
-
case greyscript_core_1.ASTType.MemberExpression:
|
|
58
|
-
case greyscript_core_1.ASTType.Identifier:
|
|
59
|
-
case greyscript_core_1.ASTType.IndexExpression:
|
|
60
|
-
return new resolve_1.default(item, currentTarget).build(defaultVisit);
|
|
61
|
-
case greyscript_core_1.ASTType.FunctionDeclaration:
|
|
62
|
-
return new function_1.default(item, currentTarget).build(defaultVisit);
|
|
63
|
-
case greyscript_core_1.ASTType.InvalidCodeExpression:
|
|
64
|
-
return new noop_1.default(item, currentTarget).build(defaultVisit);
|
|
65
|
-
case greyscript_core_1.ASTType.WhileStatement:
|
|
66
|
-
return new while_1.default(item, currentTarget).build(defaultVisit);
|
|
67
|
-
case greyscript_core_1.ASTType.ForGenericStatement:
|
|
68
|
-
return new for_1.default(item, currentTarget).build(defaultVisit);
|
|
69
|
-
case greyscript_core_1.ASTType.IfStatement:
|
|
70
|
-
case greyscript_core_1.ASTType.IfShortcutStatement:
|
|
71
|
-
return new if_statement_1.default(item, currentTarget).build(defaultVisit);
|
|
72
|
-
case greyscript_core_1.ASTType.ReturnStatement:
|
|
73
|
-
return new return_1.default(item, currentTarget).build(defaultVisit);
|
|
74
|
-
case greyscript_core_1.ASTType.BreakStatement:
|
|
75
|
-
return new break_1.default(item, currentTarget).build(defaultVisit);
|
|
76
|
-
case greyscript_core_1.ASTType.ContinueStatement:
|
|
77
|
-
return new continue_1.default(item, currentTarget).build(defaultVisit);
|
|
78
|
-
case greyscript_core_1.ASTType.CallExpression:
|
|
79
|
-
return new call_1.default(item, currentTarget).build(defaultVisit);
|
|
80
|
-
case greyscript_core_1.ASTType.CallStatement:
|
|
81
|
-
return defaultVisit(item.expression);
|
|
82
|
-
case greybel_core_1.ASTType.FeatureImportExpression: {
|
|
83
|
-
const importExpr = item;
|
|
84
|
-
const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.path);
|
|
85
|
-
const code = yield context.handler.resourceHandler.get(target);
|
|
86
|
-
if (code == null) {
|
|
87
|
-
throw new Error(`Cannot find import ${currentTarget}.`);
|
|
88
|
-
}
|
|
89
|
-
const subVisit = visit.bind(null, context, target);
|
|
90
|
-
const importStatement = yield new import_1.default(importExpr, target, code).build(subVisit);
|
|
91
|
-
return importStatement;
|
|
92
|
-
}
|
|
93
|
-
case greybel_core_1.ASTType.FeatureIncludeExpression: {
|
|
94
|
-
const includeExpr = item;
|
|
95
|
-
const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, includeExpr.path);
|
|
96
|
-
const code = yield context.handler.resourceHandler.get(target);
|
|
97
|
-
if (code == null) {
|
|
98
|
-
throw new Error(`Cannot find include ${currentTarget}.`);
|
|
99
|
-
}
|
|
100
|
-
const subVisit = visit.bind(null, context, target);
|
|
101
|
-
const importStatement = yield new include_1.default(includeExpr, target, code).build(subVisit);
|
|
102
|
-
return importStatement;
|
|
103
|
-
}
|
|
104
|
-
case greyscript_core_1.ASTType.ImportCodeExpression: {
|
|
105
|
-
const importExpr = item;
|
|
106
|
-
const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.fileSystemDirectory);
|
|
107
|
-
const code = yield context.handler.resourceHandler.get(target);
|
|
108
|
-
if (code == null) {
|
|
109
|
-
throw new Error(`Cannot find native import ${currentTarget}.`);
|
|
110
|
-
}
|
|
111
|
-
const subVisit = visit.bind(null, context, target);
|
|
112
|
-
const importStatement = yield new include_1.default(importExpr, target, code).build(subVisit);
|
|
113
|
-
return importStatement;
|
|
114
|
-
}
|
|
115
|
-
case greybel_core_1.ASTType.FeatureDebuggerExpression:
|
|
116
|
-
return new debugger_statement_1.default(item, currentTarget);
|
|
117
|
-
case greyscript_core_1.ASTType.BooleanLiteral:
|
|
118
|
-
case greyscript_core_1.ASTType.StringLiteral:
|
|
119
|
-
case greyscript_core_1.ASTType.NumericLiteral:
|
|
120
|
-
case greyscript_core_1.ASTType.NilLiteral:
|
|
121
|
-
return new literal_1.default(item, currentTarget).build(defaultVisit);
|
|
122
|
-
case greyscript_core_1.ASTType.EmptyExpression:
|
|
123
|
-
return new noop_1.default(item, currentTarget).build(defaultVisit);
|
|
124
|
-
case greyscript_core_1.ASTType.BinaryExpression:
|
|
125
|
-
case greyscript_core_1.ASTType.LogicalExpression:
|
|
126
|
-
return new evaluate_1.default(item, currentTarget).build(defaultVisit);
|
|
127
|
-
case greyscript_core_1.ASTType.NegationExpression:
|
|
128
|
-
return new not_1.default(item, currentTarget).build(defaultVisit);
|
|
129
|
-
case greyscript_core_1.ASTType.BinaryNegatedExpression:
|
|
130
|
-
return new negated_binary_1.default(item, currentTarget).build(defaultVisit);
|
|
131
|
-
case greyscript_core_1.ASTType.UnaryExpression: {
|
|
132
|
-
const unaryExpr = item;
|
|
133
|
-
if (unaryExpr.operator === 'new') {
|
|
134
|
-
return new new_instance_1.default(unaryExpr).build(defaultVisit);
|
|
135
|
-
}
|
|
136
|
-
else if (unaryExpr.operator === '@') {
|
|
137
|
-
return new function_reference_1.default(unaryExpr).build(defaultVisit);
|
|
138
|
-
}
|
|
139
|
-
throw new Error('Unknown unary expression.');
|
|
140
|
-
}
|
|
141
|
-
case greyscript_core_1.ASTType.Chunk:
|
|
142
|
-
return new chunk_1.default(item, currentTarget).build(defaultVisit);
|
|
143
|
-
case greyscript_core_1.ASTType.Comment:
|
|
144
|
-
return new noop_1.default(item, currentTarget);
|
|
145
|
-
case greyscript_core_1.ASTType.ParenthesisExpression:
|
|
146
|
-
return defaultVisit(item.expression);
|
|
147
|
-
default:
|
|
148
|
-
throw new Error(`Unexpected AST type ${item.type}.`);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
class CPS {
|
|
152
|
-
constructor(context) {
|
|
153
|
-
this.context = context;
|
|
154
|
-
this.__visit = visit.bind(null, context, context.target);
|
|
155
|
-
}
|
|
156
|
-
visit(item) {
|
|
157
|
-
return this.__visit(item);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
exports.default = CPS;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.CPSContext = void 0;
|
|
16
|
+
const greybel_core_1 = require("greybel-core");
|
|
17
|
+
const greyscript_core_1 = require("greyscript-core");
|
|
18
|
+
const assign_1 = __importDefault(require("./operations/assign"));
|
|
19
|
+
const break_1 = __importDefault(require("./operations/break"));
|
|
20
|
+
const call_1 = __importDefault(require("./operations/call"));
|
|
21
|
+
const chunk_1 = __importDefault(require("./operations/chunk"));
|
|
22
|
+
const continue_1 = __importDefault(require("./operations/continue"));
|
|
23
|
+
const debugger_statement_1 = __importDefault(require("./operations/debugger-statement"));
|
|
24
|
+
const evaluate_1 = __importDefault(require("./operations/evaluate"));
|
|
25
|
+
const for_1 = __importDefault(require("./operations/for"));
|
|
26
|
+
const function_1 = __importDefault(require("./operations/function"));
|
|
27
|
+
const function_reference_1 = __importDefault(require("./operations/function-reference"));
|
|
28
|
+
const if_statement_1 = __importDefault(require("./operations/if-statement"));
|
|
29
|
+
const import_1 = __importDefault(require("./operations/import"));
|
|
30
|
+
const include_1 = __importDefault(require("./operations/include"));
|
|
31
|
+
const list_1 = __importDefault(require("./operations/list"));
|
|
32
|
+
const literal_1 = __importDefault(require("./operations/literal"));
|
|
33
|
+
const map_1 = __importDefault(require("./operations/map"));
|
|
34
|
+
const negated_binary_1 = __importDefault(require("./operations/negated-binary"));
|
|
35
|
+
const new_instance_1 = __importDefault(require("./operations/new-instance"));
|
|
36
|
+
const noop_1 = __importDefault(require("./operations/noop"));
|
|
37
|
+
const not_1 = __importDefault(require("./operations/not"));
|
|
38
|
+
const resolve_1 = __importDefault(require("./operations/resolve"));
|
|
39
|
+
const return_1 = __importDefault(require("./operations/return"));
|
|
40
|
+
const while_1 = __importDefault(require("./operations/while"));
|
|
41
|
+
class CPSContext {
|
|
42
|
+
constructor(target, handler) {
|
|
43
|
+
this.target = target;
|
|
44
|
+
this.handler = handler;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.CPSContext = CPSContext;
|
|
48
|
+
const visit = (context, currentTarget, item) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
const defaultVisit = visit.bind(null, context, currentTarget);
|
|
50
|
+
switch (item.type) {
|
|
51
|
+
case greyscript_core_1.ASTType.MapConstructorExpression:
|
|
52
|
+
return new map_1.default(item, currentTarget).build(defaultVisit);
|
|
53
|
+
case greyscript_core_1.ASTType.ListConstructorExpression:
|
|
54
|
+
return new list_1.default(item, currentTarget).build(defaultVisit);
|
|
55
|
+
case greyscript_core_1.ASTType.AssignmentStatement:
|
|
56
|
+
return new assign_1.default(item, currentTarget).build(defaultVisit);
|
|
57
|
+
case greyscript_core_1.ASTType.MemberExpression:
|
|
58
|
+
case greyscript_core_1.ASTType.Identifier:
|
|
59
|
+
case greyscript_core_1.ASTType.IndexExpression:
|
|
60
|
+
return new resolve_1.default(item, currentTarget).build(defaultVisit);
|
|
61
|
+
case greyscript_core_1.ASTType.FunctionDeclaration:
|
|
62
|
+
return new function_1.default(item, currentTarget).build(defaultVisit);
|
|
63
|
+
case greyscript_core_1.ASTType.InvalidCodeExpression:
|
|
64
|
+
return new noop_1.default(item, currentTarget).build(defaultVisit);
|
|
65
|
+
case greyscript_core_1.ASTType.WhileStatement:
|
|
66
|
+
return new while_1.default(item, currentTarget).build(defaultVisit);
|
|
67
|
+
case greyscript_core_1.ASTType.ForGenericStatement:
|
|
68
|
+
return new for_1.default(item, currentTarget).build(defaultVisit);
|
|
69
|
+
case greyscript_core_1.ASTType.IfStatement:
|
|
70
|
+
case greyscript_core_1.ASTType.IfShortcutStatement:
|
|
71
|
+
return new if_statement_1.default(item, currentTarget).build(defaultVisit);
|
|
72
|
+
case greyscript_core_1.ASTType.ReturnStatement:
|
|
73
|
+
return new return_1.default(item, currentTarget).build(defaultVisit);
|
|
74
|
+
case greyscript_core_1.ASTType.BreakStatement:
|
|
75
|
+
return new break_1.default(item, currentTarget).build(defaultVisit);
|
|
76
|
+
case greyscript_core_1.ASTType.ContinueStatement:
|
|
77
|
+
return new continue_1.default(item, currentTarget).build(defaultVisit);
|
|
78
|
+
case greyscript_core_1.ASTType.CallExpression:
|
|
79
|
+
return new call_1.default(item, currentTarget).build(defaultVisit);
|
|
80
|
+
case greyscript_core_1.ASTType.CallStatement:
|
|
81
|
+
return defaultVisit(item.expression);
|
|
82
|
+
case greybel_core_1.ASTType.FeatureImportExpression: {
|
|
83
|
+
const importExpr = item;
|
|
84
|
+
const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.path);
|
|
85
|
+
const code = yield context.handler.resourceHandler.get(target);
|
|
86
|
+
if (code == null) {
|
|
87
|
+
throw new Error(`Cannot find import ${currentTarget}.`);
|
|
88
|
+
}
|
|
89
|
+
const subVisit = visit.bind(null, context, target);
|
|
90
|
+
const importStatement = yield new import_1.default(importExpr, target, code).build(subVisit);
|
|
91
|
+
return importStatement;
|
|
92
|
+
}
|
|
93
|
+
case greybel_core_1.ASTType.FeatureIncludeExpression: {
|
|
94
|
+
const includeExpr = item;
|
|
95
|
+
const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, includeExpr.path);
|
|
96
|
+
const code = yield context.handler.resourceHandler.get(target);
|
|
97
|
+
if (code == null) {
|
|
98
|
+
throw new Error(`Cannot find include ${currentTarget}.`);
|
|
99
|
+
}
|
|
100
|
+
const subVisit = visit.bind(null, context, target);
|
|
101
|
+
const importStatement = yield new include_1.default(includeExpr, target, code).build(subVisit);
|
|
102
|
+
return importStatement;
|
|
103
|
+
}
|
|
104
|
+
case greyscript_core_1.ASTType.ImportCodeExpression: {
|
|
105
|
+
const importExpr = item;
|
|
106
|
+
const target = yield context.handler.resourceHandler.getTargetRelativeTo(currentTarget, importExpr.fileSystemDirectory);
|
|
107
|
+
const code = yield context.handler.resourceHandler.get(target);
|
|
108
|
+
if (code == null) {
|
|
109
|
+
throw new Error(`Cannot find native import ${currentTarget}.`);
|
|
110
|
+
}
|
|
111
|
+
const subVisit = visit.bind(null, context, target);
|
|
112
|
+
const importStatement = yield new include_1.default(importExpr, target, code).build(subVisit);
|
|
113
|
+
return importStatement;
|
|
114
|
+
}
|
|
115
|
+
case greybel_core_1.ASTType.FeatureDebuggerExpression:
|
|
116
|
+
return new debugger_statement_1.default(item, currentTarget);
|
|
117
|
+
case greyscript_core_1.ASTType.BooleanLiteral:
|
|
118
|
+
case greyscript_core_1.ASTType.StringLiteral:
|
|
119
|
+
case greyscript_core_1.ASTType.NumericLiteral:
|
|
120
|
+
case greyscript_core_1.ASTType.NilLiteral:
|
|
121
|
+
return new literal_1.default(item, currentTarget).build(defaultVisit);
|
|
122
|
+
case greyscript_core_1.ASTType.EmptyExpression:
|
|
123
|
+
return new noop_1.default(item, currentTarget).build(defaultVisit);
|
|
124
|
+
case greyscript_core_1.ASTType.BinaryExpression:
|
|
125
|
+
case greyscript_core_1.ASTType.LogicalExpression:
|
|
126
|
+
return new evaluate_1.default(item, currentTarget).build(defaultVisit);
|
|
127
|
+
case greyscript_core_1.ASTType.NegationExpression:
|
|
128
|
+
return new not_1.default(item, currentTarget).build(defaultVisit);
|
|
129
|
+
case greyscript_core_1.ASTType.BinaryNegatedExpression:
|
|
130
|
+
return new negated_binary_1.default(item, currentTarget).build(defaultVisit);
|
|
131
|
+
case greyscript_core_1.ASTType.UnaryExpression: {
|
|
132
|
+
const unaryExpr = item;
|
|
133
|
+
if (unaryExpr.operator === 'new') {
|
|
134
|
+
return new new_instance_1.default(unaryExpr).build(defaultVisit);
|
|
135
|
+
}
|
|
136
|
+
else if (unaryExpr.operator === '@') {
|
|
137
|
+
return new function_reference_1.default(unaryExpr).build(defaultVisit);
|
|
138
|
+
}
|
|
139
|
+
throw new Error('Unknown unary expression.');
|
|
140
|
+
}
|
|
141
|
+
case greyscript_core_1.ASTType.Chunk:
|
|
142
|
+
return new chunk_1.default(item, currentTarget).build(defaultVisit);
|
|
143
|
+
case greyscript_core_1.ASTType.Comment:
|
|
144
|
+
return new noop_1.default(item, currentTarget);
|
|
145
|
+
case greyscript_core_1.ASTType.ParenthesisExpression:
|
|
146
|
+
return defaultVisit(item.expression);
|
|
147
|
+
default:
|
|
148
|
+
throw new Error(`Unexpected AST type ${item.type}.`);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
class CPS {
|
|
152
|
+
constructor(context) {
|
|
153
|
+
this.context = context;
|
|
154
|
+
this.__visit = visit.bind(null, context, context.target);
|
|
155
|
+
}
|
|
156
|
+
visit(item) {
|
|
157
|
+
return this.__visit(item);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.default = CPS;
|
package/dist/handler/error.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare abstract class ErrorHandler {
|
|
2
|
-
abstract raise(err: Error): void;
|
|
3
|
-
}
|
|
4
|
-
export declare class DefaultErrorHandler extends ErrorHandler {
|
|
5
|
-
raise(err: Error): void;
|
|
6
|
-
}
|
|
1
|
+
export declare abstract class ErrorHandler {
|
|
2
|
+
abstract raise(err: Error): void;
|
|
3
|
+
}
|
|
4
|
+
export declare class DefaultErrorHandler extends ErrorHandler {
|
|
5
|
+
raise(err: Error): void;
|
|
6
|
+
}
|
package/dist/handler/error.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DefaultErrorHandler = exports.ErrorHandler = void 0;
|
|
4
|
-
class ErrorHandler {
|
|
5
|
-
}
|
|
6
|
-
exports.ErrorHandler = ErrorHandler;
|
|
7
|
-
class DefaultErrorHandler extends ErrorHandler {
|
|
8
|
-
raise(err) {
|
|
9
|
-
throw err;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
exports.DefaultErrorHandler = DefaultErrorHandler;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultErrorHandler = exports.ErrorHandler = void 0;
|
|
4
|
+
class ErrorHandler {
|
|
5
|
+
}
|
|
6
|
+
exports.ErrorHandler = ErrorHandler;
|
|
7
|
+
class DefaultErrorHandler extends ErrorHandler {
|
|
8
|
+
raise(err) {
|
|
9
|
+
throw err;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.DefaultErrorHandler = DefaultErrorHandler;
|
package/dist/handler/output.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
export interface KeyEvent {
|
|
2
|
-
keyCode: number;
|
|
3
|
-
code: string;
|
|
4
|
-
}
|
|
5
|
-
export declare abstract class OutputHandler {
|
|
6
|
-
abstract print(message: string): void;
|
|
7
|
-
abstract progress(timeout: number): Promise<void>;
|
|
8
|
-
abstract waitForInput(isPassword: boolean): Promise<string>;
|
|
9
|
-
abstract waitForKeyPress(): Promise<KeyEvent>;
|
|
10
|
-
abstract clear(): void;
|
|
11
|
-
}
|
|
12
|
-
export declare class DefaultOutputHandler extends OutputHandler {
|
|
13
|
-
print(message: string): void;
|
|
14
|
-
progress(timeout: number): Promise<void>;
|
|
15
|
-
waitForInput(_isPassword: boolean): Promise<string>;
|
|
16
|
-
waitForKeyPress(): Promise<KeyEvent>;
|
|
17
|
-
clear(): void;
|
|
18
|
-
}
|
|
1
|
+
export interface KeyEvent {
|
|
2
|
+
keyCode: number;
|
|
3
|
+
code: string;
|
|
4
|
+
}
|
|
5
|
+
export declare abstract class OutputHandler {
|
|
6
|
+
abstract print(message: string): void;
|
|
7
|
+
abstract progress(timeout: number): Promise<void>;
|
|
8
|
+
abstract waitForInput(isPassword: boolean): Promise<string>;
|
|
9
|
+
abstract waitForKeyPress(): Promise<KeyEvent>;
|
|
10
|
+
abstract clear(): void;
|
|
11
|
+
}
|
|
12
|
+
export declare class DefaultOutputHandler extends OutputHandler {
|
|
13
|
+
print(message: string): void;
|
|
14
|
+
progress(timeout: number): Promise<void>;
|
|
15
|
+
waitForInput(_isPassword: boolean): Promise<string>;
|
|
16
|
+
waitForKeyPress(): Promise<KeyEvent>;
|
|
17
|
+
clear(): void;
|
|
18
|
+
}
|
package/dist/handler/output.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DefaultOutputHandler = exports.OutputHandler = void 0;
|
|
4
|
-
class OutputHandler {
|
|
5
|
-
}
|
|
6
|
-
exports.OutputHandler = OutputHandler;
|
|
7
|
-
class DefaultOutputHandler extends OutputHandler {
|
|
8
|
-
print(message) {
|
|
9
|
-
console.log(message);
|
|
10
|
-
}
|
|
11
|
-
progress(timeout) {
|
|
12
|
-
return new Promise((resolve, _reject) => {
|
|
13
|
-
setTimeout(resolve, timeout);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
waitForInput(_isPassword) {
|
|
17
|
-
return Promise.resolve('test');
|
|
18
|
-
}
|
|
19
|
-
waitForKeyPress() {
|
|
20
|
-
return Promise.resolve({
|
|
21
|
-
keyCode: 13,
|
|
22
|
-
code: 'Enter'
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
clear() {
|
|
26
|
-
console.clear();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
exports.DefaultOutputHandler = DefaultOutputHandler;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultOutputHandler = exports.OutputHandler = void 0;
|
|
4
|
+
class OutputHandler {
|
|
5
|
+
}
|
|
6
|
+
exports.OutputHandler = OutputHandler;
|
|
7
|
+
class DefaultOutputHandler extends OutputHandler {
|
|
8
|
+
print(message) {
|
|
9
|
+
console.log(message);
|
|
10
|
+
}
|
|
11
|
+
progress(timeout) {
|
|
12
|
+
return new Promise((resolve, _reject) => {
|
|
13
|
+
setTimeout(resolve, timeout);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
waitForInput(_isPassword) {
|
|
17
|
+
return Promise.resolve('test');
|
|
18
|
+
}
|
|
19
|
+
waitForKeyPress() {
|
|
20
|
+
return Promise.resolve({
|
|
21
|
+
keyCode: 13,
|
|
22
|
+
code: 'Enter'
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
clear() {
|
|
26
|
+
console.clear();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.DefaultOutputHandler = DefaultOutputHandler;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export declare abstract class ResourceHandler {
|
|
2
|
-
abstract getTargetRelativeTo(source: string, target: string): Promise<string>;
|
|
3
|
-
abstract has(target: string): Promise<boolean>;
|
|
4
|
-
abstract get(target: string): Promise<string>;
|
|
5
|
-
abstract resolve(target: string): Promise<string>;
|
|
6
|
-
}
|
|
7
|
-
export declare class DefaultResourceHandler extends ResourceHandler {
|
|
8
|
-
getTargetRelativeTo(source: string, target: string): Promise<string>;
|
|
9
|
-
has(target: string): Promise<boolean>;
|
|
10
|
-
get(target: string): Promise<string>;
|
|
11
|
-
resolve(target: string): Promise<string>;
|
|
12
|
-
}
|
|
1
|
+
export declare abstract class ResourceHandler {
|
|
2
|
+
abstract getTargetRelativeTo(source: string, target: string): Promise<string>;
|
|
3
|
+
abstract has(target: string): Promise<boolean>;
|
|
4
|
+
abstract get(target: string): Promise<string>;
|
|
5
|
+
abstract resolve(target: string): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
export declare class DefaultResourceHandler extends ResourceHandler {
|
|
8
|
+
getTargetRelativeTo(source: string, target: string): Promise<string>;
|
|
9
|
+
has(target: string): Promise<boolean>;
|
|
10
|
+
get(target: string): Promise<string>;
|
|
11
|
+
resolve(target: string): Promise<string>;
|
|
12
|
+
}
|
package/dist/handler/resource.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DefaultResourceHandler = exports.ResourceHandler = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
class ResourceHandler {
|
|
10
|
-
}
|
|
11
|
-
exports.ResourceHandler = ResourceHandler;
|
|
12
|
-
class DefaultResourceHandler extends ResourceHandler {
|
|
13
|
-
getTargetRelativeTo(source, target) {
|
|
14
|
-
const base = path_1.default.resolve(source, '..');
|
|
15
|
-
const result = path_1.default.resolve(base, target);
|
|
16
|
-
return Promise.resolve(fs_1.default.existsSync(result) ? result : result + '.src');
|
|
17
|
-
}
|
|
18
|
-
has(target) {
|
|
19
|
-
return Promise.resolve(fs_1.default.existsSync(target));
|
|
20
|
-
}
|
|
21
|
-
get(target) {
|
|
22
|
-
return Promise.resolve(fs_1.default.readFileSync(target, 'utf8'));
|
|
23
|
-
}
|
|
24
|
-
resolve(target) {
|
|
25
|
-
return Promise.resolve(path_1.default.resolve(target));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
exports.DefaultResourceHandler = DefaultResourceHandler;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DefaultResourceHandler = exports.ResourceHandler = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
class ResourceHandler {
|
|
10
|
+
}
|
|
11
|
+
exports.ResourceHandler = ResourceHandler;
|
|
12
|
+
class DefaultResourceHandler extends ResourceHandler {
|
|
13
|
+
getTargetRelativeTo(source, target) {
|
|
14
|
+
const base = path_1.default.resolve(source, '..');
|
|
15
|
+
const result = path_1.default.resolve(base, target);
|
|
16
|
+
return Promise.resolve(fs_1.default.existsSync(result) ? result : result + '.src');
|
|
17
|
+
}
|
|
18
|
+
has(target) {
|
|
19
|
+
return Promise.resolve(fs_1.default.existsSync(target));
|
|
20
|
+
}
|
|
21
|
+
get(target) {
|
|
22
|
+
return Promise.resolve(fs_1.default.readFileSync(target, 'utf8'));
|
|
23
|
+
}
|
|
24
|
+
resolve(target) {
|
|
25
|
+
return Promise.resolve(path_1.default.resolve(target));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.DefaultResourceHandler = DefaultResourceHandler;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ErrorHandler } from './handler/error';
|
|
2
|
-
import { OutputHandler } from './handler/output';
|
|
3
|
-
import { ResourceHandler } from './handler/resource';
|
|
4
|
-
export interface HandlerContainerOptions {
|
|
5
|
-
resourceHandler?: ResourceHandler;
|
|
6
|
-
outputHandler?: OutputHandler;
|
|
7
|
-
errorHandler?: ErrorHandler;
|
|
8
|
-
}
|
|
9
|
-
export default class HandlerContainer {
|
|
10
|
-
readonly resourceHandler: ResourceHandler;
|
|
11
|
-
readonly outputHandler: OutputHandler;
|
|
12
|
-
readonly errorHandler: ErrorHandler;
|
|
13
|
-
constructor(options?: HandlerContainerOptions);
|
|
14
|
-
}
|
|
1
|
+
import { ErrorHandler } from './handler/error';
|
|
2
|
+
import { OutputHandler } from './handler/output';
|
|
3
|
+
import { ResourceHandler } from './handler/resource';
|
|
4
|
+
export interface HandlerContainerOptions {
|
|
5
|
+
resourceHandler?: ResourceHandler;
|
|
6
|
+
outputHandler?: OutputHandler;
|
|
7
|
+
errorHandler?: ErrorHandler;
|
|
8
|
+
}
|
|
9
|
+
export default class HandlerContainer {
|
|
10
|
+
readonly resourceHandler: ResourceHandler;
|
|
11
|
+
readonly outputHandler: OutputHandler;
|
|
12
|
+
readonly errorHandler: ErrorHandler;
|
|
13
|
+
constructor(options?: HandlerContainerOptions);
|
|
14
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const error_1 = require("./handler/error");
|
|
4
|
-
const output_1 = require("./handler/output");
|
|
5
|
-
const resource_1 = require("./handler/resource");
|
|
6
|
-
class HandlerContainer {
|
|
7
|
-
constructor(options = {}) {
|
|
8
|
-
this.resourceHandler =
|
|
9
|
-
(options === null || options === void 0 ? void 0 : options.resourceHandler) || new resource_1.DefaultResourceHandler();
|
|
10
|
-
this.outputHandler = (options === null || options === void 0 ? void 0 : options.outputHandler) || new output_1.DefaultOutputHandler();
|
|
11
|
-
this.errorHandler = (options === null || options === void 0 ? void 0 : options.errorHandler) || new error_1.DefaultErrorHandler();
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.default = HandlerContainer;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const error_1 = require("./handler/error");
|
|
4
|
+
const output_1 = require("./handler/output");
|
|
5
|
+
const resource_1 = require("./handler/resource");
|
|
6
|
+
class HandlerContainer {
|
|
7
|
+
constructor(options = {}) {
|
|
8
|
+
this.resourceHandler =
|
|
9
|
+
(options === null || options === void 0 ? void 0 : options.resourceHandler) || new resource_1.DefaultResourceHandler();
|
|
10
|
+
this.outputHandler = (options === null || options === void 0 ? void 0 : options.outputHandler) || new output_1.DefaultOutputHandler();
|
|
11
|
+
this.errorHandler = (options === null || options === void 0 ? void 0 : options.errorHandler) || new error_1.DefaultErrorHandler();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.default = HandlerContainer;
|