cvm-server 0.9.0 → 0.9.2
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 +165 -53
- package/main.cjs +296 -282
- package/package.json +1 -1
package/main.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const mcp_js = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
3
3
|
const stdio_js = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
4
4
|
const zod = require("zod");
|
|
5
|
-
const
|
|
5
|
+
const i$1 = require("typescript");
|
|
6
6
|
const G$1 = require("fs");
|
|
7
7
|
const c$2 = require("path");
|
|
8
8
|
const mongodb = require("mongodb");
|
|
@@ -26,35 +26,31 @@ function _interopNamespaceDefault(e2) {
|
|
|
26
26
|
n2.default = e2;
|
|
27
27
|
return Object.freeze(n2);
|
|
28
28
|
}
|
|
29
|
-
const
|
|
29
|
+
const i__namespace = /* @__PURE__ */ _interopNamespaceDefault(i$1);
|
|
30
30
|
const G__namespace = /* @__PURE__ */ _interopNamespaceDefault(G$1);
|
|
31
31
|
const c__namespace = /* @__PURE__ */ _interopNamespaceDefault(c$2);
|
|
32
32
|
const dotenv__namespace = /* @__PURE__ */ _interopNamespaceDefault(dotenv);
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
var
|
|
33
|
+
var f$1 = Object.defineProperty;
|
|
34
|
+
var p$2 = (e2, t2, s2) => t2 in e2 ? f$1(e2, t2, { enumerable: true, configurable: true, writable: true, value: s2 }) : e2[t2] = s2;
|
|
35
|
+
var T = (e2, t2, s2) => p$2(e2, typeof t2 != "symbol" ? t2 + "" : t2, s2);
|
|
36
|
+
var n$1 = /* @__PURE__ */ ((e2) => (e2.PUSH = "PUSH", e2.PUSH_UNDEFINED = "PUSH_UNDEFINED", e2.POP = "POP", e2.LOAD = "LOAD", e2.STORE = "STORE", e2.CONCAT = "CONCAT", e2.ARRAY_NEW = "ARRAY_NEW", e2.ARRAY_PUSH = "ARRAY_PUSH", e2.ARRAY_GET = "ARRAY_GET", e2.ARRAY_SET = "ARRAY_SET", e2.ARRAY_LEN = "ARRAY_LEN", e2.STRING_LEN = "STRING_LEN", e2.STRING_SUBSTRING = "STRING_SUBSTRING", e2.STRING_INDEXOF = "STRING_INDEXOF", e2.STRING_SPLIT = "STRING_SPLIT", e2.STRING_SLICE = "STRING_SLICE", e2.STRING_CHARAT = "STRING_CHARAT", e2.STRING_TOUPPERCASE = "STRING_TOUPPERCASE", e2.STRING_TOLOWERCASE = "STRING_TOLOWERCASE", e2.LENGTH = "LENGTH", e2.TO_STRING = "TO_STRING", e2.JSON_PARSE = "JSON_PARSE", e2.TYPEOF = "TYPEOF", e2.ADD = "ADD", e2.SUB = "SUB", e2.MUL = "MUL", e2.DIV = "DIV", e2.MOD = "MOD", e2.UNARY_MINUS = "UNARY_MINUS", e2.UNARY_PLUS = "UNARY_PLUS", e2.INC = "INC", e2.DEC = "DEC", e2.EQ = "EQ", e2.NEQ = "NEQ", e2.LT = "LT", e2.GT = "GT", e2.LTE = "LTE", e2.GTE = "GTE", e2.EQ_STRICT = "EQ_STRICT", e2.NEQ_STRICT = "NEQ_STRICT", e2.JUMP = "JUMP", e2.JUMP_IF = "JUMP_IF", e2.JUMP_IF_FALSE = "JUMP_IF_FALSE", e2.JUMP_IF_TRUE = "JUMP_IF_TRUE", e2.CALL = "CALL", e2.RETURN = "RETURN", e2.AND = "AND", e2.OR = "OR", e2.NOT = "NOT", e2.BREAK = "BREAK", e2.CONTINUE = "CONTINUE", e2.ITER_START = "ITER_START", e2.ITER_NEXT = "ITER_NEXT", e2.ITER_END = "ITER_END", e2.FS_LIST_FILES = "FS_LIST_FILES", e2.OBJECT_CREATE = "OBJECT_CREATE", e2.PROPERTY_GET = "PROPERTY_GET", e2.PROPERTY_SET = "PROPERTY_SET", e2.JSON_STRINGIFY = "JSON_STRINGIFY", e2.CC = "CC", e2.PRINT = "PRINT", e2.HALT = "HALT", e2))(n$1 || {});
|
|
37
37
|
function R(e2) {
|
|
38
38
|
const t2 = [], s2 = [];
|
|
39
|
-
let r2 = false
|
|
40
|
-
const
|
|
39
|
+
let r2 = false;
|
|
40
|
+
const a2 = i__namespace.createSourceFile(
|
|
41
41
|
"program.ts",
|
|
42
42
|
e2,
|
|
43
|
-
|
|
43
|
+
i__namespace.ScriptTarget.Latest,
|
|
44
44
|
true
|
|
45
45
|
);
|
|
46
|
-
function
|
|
47
|
-
if (
|
|
48
|
-
const
|
|
49
|
-
|
|
46
|
+
function S2(c2) {
|
|
47
|
+
if (i__namespace.isFunctionDeclaration(c2) && c2.name && c2.name.text === "main" && (r2 = true, c2.parameters.length > 0 && t2.push("main() must not have parameters")), i__namespace.isCallExpression(c2) && i__namespace.isIdentifier(c2.expression)) {
|
|
48
|
+
const o2 = c2.expression.text;
|
|
49
|
+
["setTimeout", "fetch", "require", "import"].includes(o2) && t2.push(`Unsupported function: ${o2}`);
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
const c2 = o2.expression.text;
|
|
53
|
-
["setTimeout", "fetch", "require", "import"].includes(c2) && t2.push(`Unsupported function: ${c2}`);
|
|
54
|
-
}
|
|
55
|
-
n__namespace.forEachChild(o2, l2);
|
|
51
|
+
i__namespace.forEachChild(c2, S2);
|
|
56
52
|
}
|
|
57
|
-
return
|
|
53
|
+
return S2(a2), r2 || t2.push("Program must have a main() function"), t2.length === 0 && s2.push({ op: n$1.HALT }), {
|
|
58
54
|
bytecode: s2,
|
|
59
55
|
errors: t2,
|
|
60
56
|
hasMain: r2
|
|
@@ -62,8 +58,8 @@ function R(e2) {
|
|
|
62
58
|
}
|
|
63
59
|
let A$1 = class A {
|
|
64
60
|
constructor() {
|
|
65
|
-
|
|
66
|
-
|
|
61
|
+
T(this, "bytecode", []);
|
|
62
|
+
T(this, "contextStack", []);
|
|
67
63
|
}
|
|
68
64
|
/**
|
|
69
65
|
* Emit an instruction and return its index
|
|
@@ -140,64 +136,64 @@ let A$1 = class A {
|
|
|
140
136
|
};
|
|
141
137
|
const P$1 = (e2, t2, { compileExpression: s2, compileStatement: r2 }) => {
|
|
142
138
|
s2(e2.expression);
|
|
143
|
-
const a2 = t2.emit(
|
|
139
|
+
const a2 = t2.emit(n$1.JUMP_IF_FALSE, -1), S2 = {
|
|
144
140
|
type: "if",
|
|
145
141
|
endTargets: []
|
|
146
142
|
};
|
|
147
|
-
if (e2.elseStatement ?
|
|
148
|
-
const o2 = t2.emit(
|
|
149
|
-
|
|
150
|
-
const
|
|
151
|
-
t2.patchJump(a2,
|
|
152
|
-
}
|
|
153
|
-
const
|
|
154
|
-
if (
|
|
143
|
+
if (e2.elseStatement ? S2.elseTarget = a2 : S2.endTargets.push(a2), t2.pushContext(S2), r2(e2.thenStatement), e2.elseStatement) {
|
|
144
|
+
const o2 = t2.emit(n$1.JUMP, -1);
|
|
145
|
+
S2.endTargets.push(o2);
|
|
146
|
+
const m2 = t2.currentAddress();
|
|
147
|
+
t2.patchJump(a2, m2), r2(e2.elseStatement);
|
|
148
|
+
}
|
|
149
|
+
const c2 = t2.popContext();
|
|
150
|
+
if (c2) {
|
|
155
151
|
const o2 = t2.currentAddress();
|
|
156
|
-
t2.patchJumps(
|
|
152
|
+
t2.patchJumps(c2.endTargets, o2);
|
|
157
153
|
}
|
|
158
154
|
}, I = (e2, t2, { compileExpression: s2, compileStatement: r2 }) => {
|
|
159
155
|
const a2 = t2.currentAddress();
|
|
160
156
|
s2(e2.expression);
|
|
161
|
-
const
|
|
157
|
+
const c2 = {
|
|
162
158
|
type: "loop",
|
|
163
|
-
breakTargets: [t2.emit(
|
|
159
|
+
breakTargets: [t2.emit(n$1.JUMP_IF_FALSE, -1)],
|
|
164
160
|
continueTargets: [],
|
|
165
161
|
endTargets: [],
|
|
166
162
|
startAddress: a2
|
|
167
163
|
};
|
|
168
|
-
t2.pushContext(
|
|
164
|
+
t2.pushContext(c2), r2(e2.statement), t2.emit(n$1.JUMP, a2);
|
|
169
165
|
const o2 = t2.popContext();
|
|
170
166
|
if (o2) {
|
|
171
|
-
const
|
|
172
|
-
t2.patchJumps(o2.breakTargets || [],
|
|
167
|
+
const m2 = t2.currentAddress();
|
|
168
|
+
t2.patchJumps(o2.breakTargets || [], m2);
|
|
173
169
|
}
|
|
174
170
|
}, h$2 = (e2, t2, { compileExpression: s2, compileStatement: r2 }) => {
|
|
175
|
-
const a2 = e2.initializer,
|
|
176
|
-
let
|
|
177
|
-
if (
|
|
178
|
-
|
|
179
|
-
else if (
|
|
180
|
-
|
|
171
|
+
const a2 = e2.initializer, S2 = e2.expression;
|
|
172
|
+
let c2;
|
|
173
|
+
if (i__namespace.isVariableDeclarationList(a2))
|
|
174
|
+
c2 = a2.declarations[0].name.getText();
|
|
175
|
+
else if (i__namespace.isIdentifier(a2))
|
|
176
|
+
c2 = a2.text;
|
|
181
177
|
else
|
|
182
178
|
throw new Error("Unsupported for-of variable declaration");
|
|
183
|
-
s2(
|
|
179
|
+
s2(S2), t2.emit(n$1.ITER_START);
|
|
184
180
|
const o2 = t2.currentAddress();
|
|
185
|
-
t2.emit(
|
|
186
|
-
const
|
|
187
|
-
t2.emit(
|
|
188
|
-
const
|
|
181
|
+
t2.emit(n$1.ITER_NEXT);
|
|
182
|
+
const m2 = t2.emit(n$1.JUMP_IF_FALSE, -1);
|
|
183
|
+
t2.emit(n$1.STORE, c2);
|
|
184
|
+
const l2 = {
|
|
189
185
|
type: "foreach",
|
|
190
|
-
breakTargets: [
|
|
186
|
+
breakTargets: [m2],
|
|
191
187
|
continueTargets: [],
|
|
192
188
|
endTargets: [],
|
|
193
189
|
startAddress: o2,
|
|
194
|
-
iterVariable:
|
|
190
|
+
iterVariable: c2
|
|
195
191
|
};
|
|
196
|
-
t2.pushContext(
|
|
192
|
+
t2.pushContext(l2), r2(e2.statement), t2.emit(n$1.JUMP, o2);
|
|
197
193
|
const u2 = t2.popContext();
|
|
198
194
|
if (u2) {
|
|
199
195
|
const E = t2.currentAddress();
|
|
200
|
-
t2.patchJumps(u2.breakTargets || [], E), t2.emit(
|
|
196
|
+
t2.patchJumps(u2.breakTargets || [], E), t2.emit(n$1.ITER_END);
|
|
201
197
|
}
|
|
202
198
|
}, y$1 = (e2, t2, { compileStatement: s2 }) => {
|
|
203
199
|
e2.statements.forEach((r2) => {
|
|
@@ -205,253 +201,255 @@ const P$1 = (e2, t2, { compileExpression: s2, compileStatement: r2 }) => {
|
|
|
205
201
|
});
|
|
206
202
|
}, N$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
207
203
|
const r2 = e2.declarationList.declarations[0];
|
|
208
|
-
r2.initializer && (s2(r2.initializer), t2.emit(
|
|
209
|
-
},
|
|
204
|
+
r2.initializer && (s2(r2.initializer), t2.emit(n$1.STORE, r2.name.getText()));
|
|
205
|
+
}, _ = (e2, t2, { compileExpression: s2 }) => {
|
|
210
206
|
const r2 = e2.expression;
|
|
211
|
-
if (
|
|
207
|
+
if (i__namespace.isBinaryExpression(r2)) {
|
|
212
208
|
const a2 = r2.operatorToken.kind;
|
|
213
|
-
if (a2 ===
|
|
214
|
-
if (
|
|
215
|
-
switch (t2.emit(
|
|
216
|
-
case
|
|
217
|
-
|
|
209
|
+
if (a2 === i__namespace.SyntaxKind.PlusEqualsToken || a2 === i__namespace.SyntaxKind.MinusEqualsToken || a2 === i__namespace.SyntaxKind.AsteriskEqualsToken || a2 === i__namespace.SyntaxKind.SlashEqualsToken || a2 === i__namespace.SyntaxKind.PercentEqualsToken) {
|
|
210
|
+
if (i__namespace.isIdentifier(r2.left)) {
|
|
211
|
+
switch (t2.emit(n$1.LOAD, r2.left.text), s2(r2.right), a2) {
|
|
212
|
+
case i__namespace.SyntaxKind.PlusEqualsToken:
|
|
213
|
+
i__namespace.isStringLiteral(r2.right) ? t2.emit(n$1.CONCAT) : t2.emit(n$1.ADD);
|
|
218
214
|
break;
|
|
219
|
-
case
|
|
220
|
-
t2.emit(
|
|
215
|
+
case i__namespace.SyntaxKind.MinusEqualsToken:
|
|
216
|
+
t2.emit(n$1.SUB);
|
|
221
217
|
break;
|
|
222
|
-
case
|
|
223
|
-
t2.emit(
|
|
218
|
+
case i__namespace.SyntaxKind.AsteriskEqualsToken:
|
|
219
|
+
t2.emit(n$1.MUL);
|
|
224
220
|
break;
|
|
225
|
-
case
|
|
226
|
-
t2.emit(
|
|
221
|
+
case i__namespace.SyntaxKind.SlashEqualsToken:
|
|
222
|
+
t2.emit(n$1.DIV);
|
|
227
223
|
break;
|
|
228
|
-
case
|
|
229
|
-
t2.emit(
|
|
224
|
+
case i__namespace.SyntaxKind.PercentEqualsToken:
|
|
225
|
+
t2.emit(n$1.MOD);
|
|
230
226
|
break;
|
|
231
227
|
}
|
|
232
|
-
t2.emit(
|
|
233
|
-
} else if (
|
|
228
|
+
t2.emit(n$1.STORE, r2.left.text);
|
|
229
|
+
} else if (i__namespace.isElementAccessExpression(r2.left))
|
|
234
230
|
throw new Error("Compound assignment to array elements not yet supported");
|
|
235
231
|
return;
|
|
236
|
-
} else if (a2 ===
|
|
237
|
-
if (s2(r2.right),
|
|
238
|
-
t2.emit(
|
|
239
|
-
else if (
|
|
240
|
-
const
|
|
241
|
-
t2.emit(
|
|
242
|
-
} else if (
|
|
243
|
-
const
|
|
244
|
-
t2.emit(
|
|
232
|
+
} else if (a2 === i__namespace.SyntaxKind.EqualsToken) {
|
|
233
|
+
if (s2(r2.right), i__namespace.isIdentifier(r2.left))
|
|
234
|
+
t2.emit(n$1.STORE, r2.left.text);
|
|
235
|
+
else if (i__namespace.isElementAccessExpression(r2.left)) {
|
|
236
|
+
const S2 = `__temp_${t2.getBytecode().length}`;
|
|
237
|
+
t2.emit(n$1.STORE, S2), s2(r2.left.expression), s2(r2.left.argumentExpression), t2.emit(n$1.LOAD, S2), t2.emit(n$1.ARRAY_SET), t2.emit(n$1.POP);
|
|
238
|
+
} else if (i__namespace.isPropertyAccessExpression(r2.left)) {
|
|
239
|
+
const S2 = `__temp_${t2.getBytecode().length}`;
|
|
240
|
+
t2.emit(n$1.STORE, S2), s2(r2.left.expression), t2.emit(n$1.PUSH, r2.left.name.text), t2.emit(n$1.LOAD, S2), t2.emit(n$1.PROPERTY_SET), t2.emit(n$1.POP);
|
|
245
241
|
}
|
|
246
242
|
return;
|
|
247
243
|
}
|
|
248
244
|
}
|
|
249
|
-
|
|
245
|
+
i__namespace.isCallExpression(r2) && i__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.expression.getText() === "console" && r2.expression.name.getText() === "log" ? (r2.arguments.forEach((a2) => {
|
|
250
246
|
s2(a2);
|
|
251
|
-
}), t2.emit(
|
|
252
|
-
},
|
|
253
|
-
e2.expression ? s2(e2.expression) : t2.emit(
|
|
247
|
+
}), t2.emit(n$1.PRINT)) : i__namespace.isCallExpression(r2) && i__namespace.isIdentifier(r2.expression) && r2.expression.text === "CC" ? (r2.arguments.length > 0 && s2(r2.arguments[0]), t2.emit(n$1.CC), t2.emit(n$1.POP)) : i__namespace.isCallExpression(r2) && i__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.name.getText() === "push" ? (s2(r2.expression.expression), r2.arguments.length > 0 && s2(r2.arguments[0]), t2.emit(n$1.ARRAY_PUSH)) : (i__namespace.isPostfixUnaryExpression(r2) || i__namespace.isPrefixUnaryExpression(r2)) && (s2(r2), t2.emit(n$1.POP));
|
|
248
|
+
}, g$2 = (e2, t2, { compileExpression: s2 }) => {
|
|
249
|
+
e2.expression ? s2(e2.expression) : t2.emit(n$1.PUSH, null), t2.emit(n$1.RETURN);
|
|
254
250
|
}, k = (e2, t2, s2) => {
|
|
255
251
|
const r2 = t2.findLoopContext();
|
|
256
252
|
if (r2) {
|
|
257
|
-
r2.type === "foreach" && t2.emit(
|
|
258
|
-
const a2 = t2.emit(
|
|
253
|
+
r2.type === "foreach" && t2.emit(n$1.ITER_END);
|
|
254
|
+
const a2 = t2.emit(n$1.BREAK, -1);
|
|
259
255
|
r2.breakTargets = r2.breakTargets || [], r2.breakTargets.push(a2);
|
|
260
256
|
} else
|
|
261
257
|
throw new Error("break statement not in loop");
|
|
262
258
|
}, U = (e2, t2, s2) => {
|
|
263
259
|
const r2 = t2.findLoopContext();
|
|
264
260
|
if (r2 && r2.startAddress !== void 0) {
|
|
265
|
-
const a2 = t2.emit(
|
|
261
|
+
const a2 = t2.emit(n$1.CONTINUE, r2.startAddress);
|
|
266
262
|
r2.continueTargets = r2.continueTargets || [], r2.continueTargets.push(a2);
|
|
267
263
|
} else
|
|
268
264
|
throw new Error("continue statement not in loop");
|
|
269
265
|
}, L$1 = {
|
|
270
|
-
[
|
|
271
|
-
[
|
|
272
|
-
[
|
|
273
|
-
[
|
|
274
|
-
[
|
|
275
|
-
[
|
|
276
|
-
[
|
|
277
|
-
[
|
|
278
|
-
[
|
|
279
|
-
}, d$1 = (e2, t2, s2) => {
|
|
280
|
-
t2.emit(i$1.PUSH, e2.text);
|
|
266
|
+
[i__namespace.SyntaxKind.IfStatement]: P$1,
|
|
267
|
+
[i__namespace.SyntaxKind.WhileStatement]: I,
|
|
268
|
+
[i__namespace.SyntaxKind.ForOfStatement]: h$2,
|
|
269
|
+
[i__namespace.SyntaxKind.Block]: y$1,
|
|
270
|
+
[i__namespace.SyntaxKind.VariableStatement]: N$1,
|
|
271
|
+
[i__namespace.SyntaxKind.ExpressionStatement]: _,
|
|
272
|
+
[i__namespace.SyntaxKind.ReturnStatement]: g$2,
|
|
273
|
+
[i__namespace.SyntaxKind.BreakStatement]: k,
|
|
274
|
+
[i__namespace.SyntaxKind.ContinueStatement]: U
|
|
281
275
|
}, K = (e2, t2, s2) => {
|
|
282
|
-
t2.emit(
|
|
276
|
+
t2.emit(n$1.PUSH, e2.text);
|
|
277
|
+
}, d$1 = (e2, t2, s2) => {
|
|
278
|
+
t2.emit(n$1.PUSH, Number(e2.text));
|
|
283
279
|
}, b$2 = (e2, t2, s2) => {
|
|
284
|
-
t2.emit(
|
|
280
|
+
t2.emit(n$1.PUSH, true);
|
|
285
281
|
}, F$1 = (e2, t2, s2) => {
|
|
286
|
-
t2.emit(
|
|
287
|
-
}, D$1 = (e2, t2, s2) => {
|
|
288
|
-
t2.emit(i$1.PUSH, null);
|
|
282
|
+
t2.emit(n$1.PUSH, false);
|
|
289
283
|
}, G = (e2, t2, s2) => {
|
|
290
|
-
|
|
284
|
+
t2.emit(n$1.PUSH, null);
|
|
285
|
+
}, D$1 = (e2, t2, s2) => {
|
|
286
|
+
e2.text === "undefined" ? t2.emit(n$1.PUSH_UNDEFINED) : t2.emit(n$1.LOAD, e2.text);
|
|
291
287
|
}, H$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
292
|
-
t2.emit(
|
|
293
|
-
s2(r2), t2.emit(
|
|
288
|
+
t2.emit(n$1.ARRAY_NEW), e2.elements.forEach((r2) => {
|
|
289
|
+
s2(r2), t2.emit(n$1.ARRAY_PUSH);
|
|
294
290
|
});
|
|
295
291
|
}, M$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
296
292
|
s2(e2.expression);
|
|
297
293
|
}, J$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
298
|
-
e2.name.text === "length" ? (s2(e2.expression), t2.emit(
|
|
299
|
-
},
|
|
300
|
-
s2(e2.expression), e2.argumentExpression ? s2(e2.argumentExpression) : r2(e2, "Element access requires an index expression"), t2.emit(
|
|
301
|
-
},
|
|
294
|
+
e2.name.text === "length" ? (s2(e2.expression), t2.emit(n$1.LENGTH)) : (s2(e2.expression), t2.emit(n$1.PUSH, e2.name.text), t2.emit(n$1.PROPERTY_GET));
|
|
295
|
+
}, Y$1 = (e2, t2, { compileExpression: s2, reportError: r2 }) => {
|
|
296
|
+
s2(e2.expression), e2.argumentExpression ? s2(e2.argumentExpression) : r2(e2, "Element access requires an index expression"), t2.emit(n$1.ARRAY_GET);
|
|
297
|
+
}, C = (e2, t2, { compileExpression: s2 }) => {
|
|
302
298
|
switch (e2.operator) {
|
|
303
|
-
case
|
|
304
|
-
s2(e2.operand), t2.emit(
|
|
299
|
+
case i__namespace.SyntaxKind.ExclamationToken:
|
|
300
|
+
s2(e2.operand), t2.emit(n$1.NOT);
|
|
305
301
|
break;
|
|
306
|
-
case
|
|
307
|
-
s2(e2.operand), t2.emit(
|
|
302
|
+
case i__namespace.SyntaxKind.MinusToken:
|
|
303
|
+
s2(e2.operand), t2.emit(n$1.UNARY_MINUS);
|
|
308
304
|
break;
|
|
309
|
-
case
|
|
310
|
-
s2(e2.operand), t2.emit(
|
|
305
|
+
case i__namespace.SyntaxKind.PlusToken:
|
|
306
|
+
s2(e2.operand), t2.emit(n$1.UNARY_PLUS);
|
|
311
307
|
break;
|
|
312
|
-
case
|
|
313
|
-
|
|
308
|
+
case i__namespace.SyntaxKind.PlusPlusToken:
|
|
309
|
+
i__namespace.isIdentifier(e2.operand) && (t2.emit(n$1.PUSH, e2.operand.text), t2.emit(n$1.INC, false));
|
|
314
310
|
break;
|
|
315
|
-
case
|
|
316
|
-
|
|
311
|
+
case i__namespace.SyntaxKind.MinusMinusToken:
|
|
312
|
+
i__namespace.isIdentifier(e2.operand) && (t2.emit(n$1.PUSH, e2.operand.text), t2.emit(n$1.DEC, false));
|
|
317
313
|
break;
|
|
318
314
|
}
|
|
319
315
|
}, w$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
320
316
|
switch (e2.operator) {
|
|
321
|
-
case
|
|
322
|
-
|
|
317
|
+
case i__namespace.SyntaxKind.PlusPlusToken:
|
|
318
|
+
i__namespace.isIdentifier(e2.operand) && (t2.emit(n$1.PUSH, e2.operand.text), t2.emit(n$1.INC, true));
|
|
323
319
|
break;
|
|
324
|
-
case
|
|
325
|
-
|
|
320
|
+
case i__namespace.SyntaxKind.MinusMinusToken:
|
|
321
|
+
i__namespace.isIdentifier(e2.operand) && (t2.emit(n$1.PUSH, e2.operand.text), t2.emit(n$1.DEC, true));
|
|
326
322
|
break;
|
|
327
323
|
}
|
|
328
324
|
};
|
|
329
|
-
function
|
|
330
|
-
return !!(
|
|
325
|
+
function x$1(e2, t2) {
|
|
326
|
+
return !!(i__namespace.isStringLiteral(e2) || i__namespace.isStringLiteral(t2) || i__namespace.isBinaryExpression(e2) && e2.operatorToken.kind === i__namespace.SyntaxKind.PlusToken && x$1(e2.left, e2.right) || i__namespace.isBinaryExpression(t2) && t2.operatorToken.kind === i__namespace.SyntaxKind.PlusToken && x$1(t2.left, t2.right));
|
|
331
327
|
}
|
|
332
328
|
const B$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
333
329
|
const r2 = e2.operatorToken.kind;
|
|
334
330
|
switch (s2(e2.left), s2(e2.right), r2) {
|
|
335
|
-
case
|
|
336
|
-
|
|
331
|
+
case i__namespace.SyntaxKind.PlusToken:
|
|
332
|
+
x$1(e2.left, e2.right) ? t2.emit(n$1.CONCAT) : t2.emit(n$1.ADD);
|
|
337
333
|
break;
|
|
338
|
-
case
|
|
339
|
-
t2.emit(
|
|
334
|
+
case i__namespace.SyntaxKind.MinusToken:
|
|
335
|
+
t2.emit(n$1.SUB);
|
|
340
336
|
break;
|
|
341
|
-
case
|
|
342
|
-
t2.emit(
|
|
337
|
+
case i__namespace.SyntaxKind.AsteriskToken:
|
|
338
|
+
t2.emit(n$1.MUL);
|
|
343
339
|
break;
|
|
344
|
-
case
|
|
345
|
-
t2.emit(
|
|
340
|
+
case i__namespace.SyntaxKind.SlashToken:
|
|
341
|
+
t2.emit(n$1.DIV);
|
|
346
342
|
break;
|
|
347
|
-
case
|
|
348
|
-
t2.emit(
|
|
343
|
+
case i__namespace.SyntaxKind.PercentToken:
|
|
344
|
+
t2.emit(n$1.MOD);
|
|
349
345
|
break;
|
|
350
|
-
case
|
|
351
|
-
t2.emit(
|
|
346
|
+
case i__namespace.SyntaxKind.EqualsEqualsToken:
|
|
347
|
+
t2.emit(n$1.EQ);
|
|
352
348
|
break;
|
|
353
|
-
case
|
|
354
|
-
t2.emit(
|
|
349
|
+
case i__namespace.SyntaxKind.ExclamationEqualsToken:
|
|
350
|
+
t2.emit(n$1.NEQ);
|
|
355
351
|
break;
|
|
356
|
-
case
|
|
357
|
-
t2.emit(
|
|
352
|
+
case i__namespace.SyntaxKind.LessThanToken:
|
|
353
|
+
t2.emit(n$1.LT);
|
|
358
354
|
break;
|
|
359
|
-
case
|
|
360
|
-
t2.emit(
|
|
355
|
+
case i__namespace.SyntaxKind.GreaterThanToken:
|
|
356
|
+
t2.emit(n$1.GT);
|
|
361
357
|
break;
|
|
362
|
-
case
|
|
363
|
-
t2.emit(
|
|
358
|
+
case i__namespace.SyntaxKind.LessThanEqualsToken:
|
|
359
|
+
t2.emit(n$1.LTE);
|
|
364
360
|
break;
|
|
365
|
-
case
|
|
366
|
-
t2.emit(
|
|
361
|
+
case i__namespace.SyntaxKind.GreaterThanEqualsToken:
|
|
362
|
+
t2.emit(n$1.GTE);
|
|
367
363
|
break;
|
|
368
|
-
case
|
|
369
|
-
t2.emit(
|
|
364
|
+
case i__namespace.SyntaxKind.EqualsEqualsEqualsToken:
|
|
365
|
+
t2.emit(n$1.EQ_STRICT);
|
|
370
366
|
break;
|
|
371
|
-
case
|
|
372
|
-
t2.emit(
|
|
367
|
+
case i__namespace.SyntaxKind.ExclamationEqualsEqualsToken:
|
|
368
|
+
t2.emit(n$1.NEQ_STRICT);
|
|
373
369
|
break;
|
|
374
|
-
case
|
|
375
|
-
t2.emit(
|
|
370
|
+
case i__namespace.SyntaxKind.AmpersandAmpersandToken:
|
|
371
|
+
t2.emit(n$1.AND);
|
|
376
372
|
break;
|
|
377
|
-
case
|
|
378
|
-
t2.emit(
|
|
373
|
+
case i__namespace.SyntaxKind.BarBarToken:
|
|
374
|
+
t2.emit(n$1.OR);
|
|
379
375
|
break;
|
|
380
376
|
}
|
|
381
377
|
}, q$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
382
378
|
s2(e2.condition);
|
|
383
|
-
const r2 = t2.emit(
|
|
379
|
+
const r2 = t2.emit(n$1.JUMP_IF_FALSE, -1);
|
|
384
380
|
s2(e2.whenTrue);
|
|
385
|
-
const a2 = t2.emit(
|
|
386
|
-
t2.patchJump(r2,
|
|
387
|
-
const
|
|
388
|
-
t2.patchJump(a2,
|
|
381
|
+
const a2 = t2.emit(n$1.JUMP, -1), S2 = t2.currentAddress();
|
|
382
|
+
t2.patchJump(r2, S2), s2(e2.whenFalse);
|
|
383
|
+
const c2 = t2.currentAddress();
|
|
384
|
+
t2.patchJump(a2, c2);
|
|
389
385
|
}, O = (e2, t2, { compileExpression: s2 }) => {
|
|
390
|
-
s2(e2.expression), t2.emit(
|
|
386
|
+
s2(e2.expression), t2.emit(n$1.TYPEOF);
|
|
391
387
|
}, V$1 = (e2, t2, { compileExpression: s2 }) => {
|
|
392
|
-
if (
|
|
393
|
-
e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(
|
|
394
|
-
else if (
|
|
395
|
-
e2.arguments.length > 0 && s2(e2.arguments[0]), t2.emit(
|
|
396
|
-
else if (
|
|
397
|
-
e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(
|
|
398
|
-
else if (
|
|
399
|
-
e2.arguments.length > 0 && s2(e2.arguments[0]), t2.emit(
|
|
400
|
-
else if (
|
|
388
|
+
if (i__namespace.isPropertyAccessExpression(e2.expression) && i__namespace.isIdentifier(e2.expression.expression) && e2.expression.expression.text === "fs" && e2.expression.name.text === "listFiles")
|
|
389
|
+
e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(n$1.PUSH, "."), e2.arguments.length > 1 && s2(e2.arguments[1]), t2.emit(n$1.FS_LIST_FILES);
|
|
390
|
+
else if (i__namespace.isPropertyAccessExpression(e2.expression) && i__namespace.isIdentifier(e2.expression.expression) && e2.expression.expression.text === "JSON" && e2.expression.name.text === "parse")
|
|
391
|
+
e2.arguments.length > 0 && s2(e2.arguments[0]), t2.emit(n$1.JSON_PARSE);
|
|
392
|
+
else if (i__namespace.isPropertyAccessExpression(e2.expression) && i__namespace.isIdentifier(e2.expression.expression) && e2.expression.expression.text === "JSON" && e2.expression.name.text === "stringify")
|
|
393
|
+
e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(n$1.PUSH_UNDEFINED), t2.emit(n$1.JSON_STRINGIFY);
|
|
394
|
+
else if (i__namespace.isIdentifier(e2.expression) && e2.expression.text === "CC")
|
|
395
|
+
e2.arguments.length > 0 && s2(e2.arguments[0]), t2.emit(n$1.CC);
|
|
396
|
+
else if (i__namespace.isPropertyAccessExpression(e2.expression)) {
|
|
401
397
|
const r2 = e2.expression.name.text;
|
|
402
398
|
if (r2 === "substring")
|
|
403
|
-
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(
|
|
399
|
+
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(n$1.PUSH, 0), e2.arguments.length > 1 && s2(e2.arguments[1]), t2.emit(n$1.STRING_SUBSTRING);
|
|
404
400
|
else if (r2 === "indexOf")
|
|
405
|
-
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(
|
|
401
|
+
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(n$1.PUSH, ""), t2.emit(n$1.STRING_INDEXOF);
|
|
406
402
|
else if (r2 === "split")
|
|
407
|
-
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(
|
|
403
|
+
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(n$1.PUSH, ""), t2.emit(n$1.STRING_SPLIT);
|
|
408
404
|
else if (r2 === "slice")
|
|
409
|
-
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(
|
|
405
|
+
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(n$1.PUSH, 0), e2.arguments.length > 1 && s2(e2.arguments[1]), t2.emit(n$1.STRING_SLICE);
|
|
410
406
|
else if (r2 === "charAt")
|
|
411
|
-
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(
|
|
407
|
+
s2(e2.expression.expression), e2.arguments.length > 0 ? s2(e2.arguments[0]) : t2.emit(n$1.PUSH, 0), t2.emit(n$1.STRING_CHARAT);
|
|
412
408
|
else if (r2 === "toUpperCase")
|
|
413
|
-
s2(e2.expression.expression), t2.emit(
|
|
409
|
+
s2(e2.expression.expression), t2.emit(n$1.STRING_TOUPPERCASE);
|
|
414
410
|
else if (r2 === "toLowerCase")
|
|
415
|
-
s2(e2.expression.expression), t2.emit(
|
|
411
|
+
s2(e2.expression.expression), t2.emit(n$1.STRING_TOLOWERCASE);
|
|
412
|
+
else if (r2 === "toString")
|
|
413
|
+
s2(e2.expression.expression), t2.emit(n$1.TO_STRING);
|
|
416
414
|
else
|
|
417
415
|
throw new Error(`Method call '${r2}' is not supported`);
|
|
418
416
|
} else
|
|
419
417
|
throw new Error("Unsupported call expression");
|
|
420
418
|
}, Q = (e2, t2, { compileExpression: s2 }) => {
|
|
421
|
-
t2.emit(
|
|
419
|
+
t2.emit(n$1.OBJECT_CREATE);
|
|
422
420
|
for (const r2 of e2.properties)
|
|
423
|
-
if (
|
|
421
|
+
if (i__namespace.isPropertyAssignment(r2)) {
|
|
424
422
|
let a2;
|
|
425
|
-
if (
|
|
423
|
+
if (i__namespace.isIdentifier(r2.name))
|
|
426
424
|
a2 = r2.name.text;
|
|
427
|
-
else if (
|
|
425
|
+
else if (i__namespace.isStringLiteral(r2.name))
|
|
428
426
|
a2 = r2.name.text;
|
|
429
427
|
else
|
|
430
428
|
throw new Error("Computed property names are not supported");
|
|
431
|
-
t2.emit(
|
|
432
|
-
} else if (
|
|
429
|
+
t2.emit(n$1.PUSH, a2), s2(r2.initializer), t2.emit(n$1.PROPERTY_SET);
|
|
430
|
+
} else if (i__namespace.isShorthandPropertyAssignment(r2)) {
|
|
433
431
|
const a2 = r2.name.text;
|
|
434
|
-
t2.emit(
|
|
432
|
+
t2.emit(n$1.PUSH, a2), t2.emit(n$1.LOAD, a2), t2.emit(n$1.PROPERTY_SET);
|
|
435
433
|
} else
|
|
436
434
|
throw new Error("Unsupported property type in object literal");
|
|
437
|
-
},
|
|
438
|
-
[
|
|
439
|
-
[
|
|
440
|
-
[
|
|
441
|
-
[
|
|
442
|
-
[
|
|
443
|
-
[
|
|
444
|
-
[
|
|
445
|
-
[
|
|
446
|
-
[
|
|
447
|
-
[
|
|
448
|
-
[
|
|
449
|
-
[
|
|
450
|
-
[
|
|
451
|
-
[
|
|
452
|
-
[
|
|
453
|
-
[
|
|
454
|
-
[
|
|
435
|
+
}, j$2 = {
|
|
436
|
+
[i__namespace.SyntaxKind.StringLiteral]: K,
|
|
437
|
+
[i__namespace.SyntaxKind.NumericLiteral]: d$1,
|
|
438
|
+
[i__namespace.SyntaxKind.TrueKeyword]: b$2,
|
|
439
|
+
[i__namespace.SyntaxKind.FalseKeyword]: F$1,
|
|
440
|
+
[i__namespace.SyntaxKind.NullKeyword]: G,
|
|
441
|
+
[i__namespace.SyntaxKind.Identifier]: D$1,
|
|
442
|
+
[i__namespace.SyntaxKind.ArrayLiteralExpression]: H$1,
|
|
443
|
+
[i__namespace.SyntaxKind.BinaryExpression]: B$1,
|
|
444
|
+
[i__namespace.SyntaxKind.PrefixUnaryExpression]: C,
|
|
445
|
+
[i__namespace.SyntaxKind.PostfixUnaryExpression]: w$1,
|
|
446
|
+
[i__namespace.SyntaxKind.CallExpression]: V$1,
|
|
447
|
+
[i__namespace.SyntaxKind.PropertyAccessExpression]: J$1,
|
|
448
|
+
[i__namespace.SyntaxKind.ElementAccessExpression]: Y$1,
|
|
449
|
+
[i__namespace.SyntaxKind.ConditionalExpression]: q$1,
|
|
450
|
+
[i__namespace.SyntaxKind.TypeOfExpression]: O,
|
|
451
|
+
[i__namespace.SyntaxKind.ParenthesizedExpression]: M$1,
|
|
452
|
+
[i__namespace.SyntaxKind.ObjectLiteralExpression]: Q
|
|
455
453
|
};
|
|
456
454
|
function W$1(e2) {
|
|
457
455
|
const t2 = R(e2);
|
|
@@ -461,27 +459,27 @@ function W$1(e2) {
|
|
|
461
459
|
bytecode: [],
|
|
462
460
|
errors: t2.errors
|
|
463
461
|
};
|
|
464
|
-
const s2 = new A$1(), r2 =
|
|
465
|
-
compileStatement:
|
|
466
|
-
compileExpression:
|
|
467
|
-
reportError: (o2,
|
|
468
|
-
throw new Error(
|
|
462
|
+
const s2 = new A$1(), r2 = i__namespace.createSourceFile("program.ts", e2, i__namespace.ScriptTarget.Latest, true), a2 = {
|
|
463
|
+
compileStatement: S2,
|
|
464
|
+
compileExpression: c2,
|
|
465
|
+
reportError: (o2, m2) => {
|
|
466
|
+
throw new Error(m2);
|
|
469
467
|
}
|
|
470
468
|
};
|
|
471
|
-
function
|
|
472
|
-
const
|
|
473
|
-
|
|
469
|
+
function S2(o2) {
|
|
470
|
+
const m2 = L$1[o2.kind];
|
|
471
|
+
m2 && m2(o2, s2, a2);
|
|
474
472
|
}
|
|
475
|
-
function
|
|
476
|
-
const
|
|
477
|
-
|
|
473
|
+
function c2(o2) {
|
|
474
|
+
const m2 = j$2[o2.kind];
|
|
475
|
+
m2 && m2(o2, s2, a2);
|
|
478
476
|
}
|
|
479
477
|
return r2.forEachChild((o2) => {
|
|
480
|
-
var
|
|
481
|
-
|
|
482
|
-
|
|
478
|
+
var m2;
|
|
479
|
+
i__namespace.isFunctionDeclaration(o2) && ((m2 = o2.name) == null ? void 0 : m2.text) === "main" && o2.body && o2.body.statements.forEach((l2) => {
|
|
480
|
+
S2(l2);
|
|
483
481
|
});
|
|
484
|
-
}), s2.emit(
|
|
482
|
+
}), s2.emit(n$1.HALT), {
|
|
485
483
|
success: true,
|
|
486
484
|
bytecode: s2.getBytecode(),
|
|
487
485
|
errors: []
|
|
@@ -693,7 +691,7 @@ var b = Object.defineProperty;
|
|
|
693
691
|
var P = (e2, r2, t2) => r2 in e2 ? b(e2, r2, { enumerable: true, configurable: true, writable: true, value: t2 }) : e2[r2] = t2;
|
|
694
692
|
var h2 = (e2, r2, t2) => P(e2, typeof r2 != "symbol" ? r2 + "" : r2, t2);
|
|
695
693
|
const L = {
|
|
696
|
-
[
|
|
694
|
+
[n$1.ADD]: {
|
|
697
695
|
stackIn: 2,
|
|
698
696
|
stackOut: 1,
|
|
699
697
|
execute: (e2) => {
|
|
@@ -701,7 +699,7 @@ const L = {
|
|
|
701
699
|
e2.stack.push(s2 + o2);
|
|
702
700
|
}
|
|
703
701
|
},
|
|
704
|
-
[
|
|
702
|
+
[n$1.SUB]: {
|
|
705
703
|
stackIn: 2,
|
|
706
704
|
stackOut: 1,
|
|
707
705
|
execute: (e2) => {
|
|
@@ -709,7 +707,7 @@ const L = {
|
|
|
709
707
|
e2.stack.push(s2 - o2);
|
|
710
708
|
}
|
|
711
709
|
},
|
|
712
|
-
[
|
|
710
|
+
[n$1.MUL]: {
|
|
713
711
|
stackIn: 2,
|
|
714
712
|
stackOut: 1,
|
|
715
713
|
execute: (e2) => {
|
|
@@ -717,7 +715,7 @@ const L = {
|
|
|
717
715
|
e2.stack.push(s2 * o2);
|
|
718
716
|
}
|
|
719
717
|
},
|
|
720
|
-
[
|
|
718
|
+
[n$1.DIV]: {
|
|
721
719
|
stackIn: 2,
|
|
722
720
|
stackOut: 1,
|
|
723
721
|
execute: (e2, r2) => {
|
|
@@ -732,7 +730,7 @@ const L = {
|
|
|
732
730
|
e2.stack.push(o2 / n2);
|
|
733
731
|
}
|
|
734
732
|
},
|
|
735
|
-
[
|
|
733
|
+
[n$1.MOD]: {
|
|
736
734
|
stackIn: 2,
|
|
737
735
|
stackOut: 1,
|
|
738
736
|
execute: (e2) => {
|
|
@@ -740,7 +738,7 @@ const L = {
|
|
|
740
738
|
e2.stack.push(s2 % o2);
|
|
741
739
|
}
|
|
742
740
|
},
|
|
743
|
-
[
|
|
741
|
+
[n$1.UNARY_MINUS]: {
|
|
744
742
|
stackIn: 1,
|
|
745
743
|
stackOut: 1,
|
|
746
744
|
execute: (e2) => {
|
|
@@ -748,7 +746,7 @@ const L = {
|
|
|
748
746
|
e2.stack.push(-t2);
|
|
749
747
|
}
|
|
750
748
|
},
|
|
751
|
-
[
|
|
749
|
+
[n$1.UNARY_PLUS]: {
|
|
752
750
|
stackIn: 1,
|
|
753
751
|
stackOut: 1,
|
|
754
752
|
execute: (e2) => {
|
|
@@ -757,21 +755,21 @@ const L = {
|
|
|
757
755
|
}
|
|
758
756
|
}
|
|
759
757
|
}, V = {
|
|
760
|
-
[
|
|
758
|
+
[n$1.PUSH]: {
|
|
761
759
|
stackIn: 0,
|
|
762
760
|
stackOut: 1,
|
|
763
761
|
execute: (e2, r2) => {
|
|
764
762
|
e2.stack.push(r2.arg);
|
|
765
763
|
}
|
|
766
764
|
},
|
|
767
|
-
[
|
|
765
|
+
[n$1.PUSH_UNDEFINED]: {
|
|
768
766
|
stackIn: 0,
|
|
769
767
|
stackOut: 1,
|
|
770
768
|
execute: (e2) => {
|
|
771
769
|
e2.stack.push(s$1());
|
|
772
770
|
}
|
|
773
771
|
},
|
|
774
|
-
[
|
|
772
|
+
[n$1.POP]: {
|
|
775
773
|
stackIn: 1,
|
|
776
774
|
stackOut: 0,
|
|
777
775
|
execute: (e2) => {
|
|
@@ -779,7 +777,7 @@ const L = {
|
|
|
779
777
|
}
|
|
780
778
|
}
|
|
781
779
|
}, M = {
|
|
782
|
-
[
|
|
780
|
+
[n$1.PRINT]: {
|
|
783
781
|
stackIn: 1,
|
|
784
782
|
stackOut: 0,
|
|
785
783
|
execute: (e2) => {
|
|
@@ -787,7 +785,7 @@ const L = {
|
|
|
787
785
|
r2 !== void 0 && e2.output.push(y(r2));
|
|
788
786
|
}
|
|
789
787
|
},
|
|
790
|
-
[
|
|
788
|
+
[n$1.CC]: {
|
|
791
789
|
stackIn: 1,
|
|
792
790
|
stackOut: 0,
|
|
793
791
|
controlsPC: true,
|
|
@@ -798,7 +796,7 @@ const L = {
|
|
|
798
796
|
}
|
|
799
797
|
}
|
|
800
798
|
}, j = {
|
|
801
|
-
[
|
|
799
|
+
[n$1.HALT]: {
|
|
802
800
|
stackIn: 0,
|
|
803
801
|
stackOut: 0,
|
|
804
802
|
controlsPC: true,
|
|
@@ -806,7 +804,7 @@ const L = {
|
|
|
806
804
|
e2.status = "complete";
|
|
807
805
|
}
|
|
808
806
|
},
|
|
809
|
-
[
|
|
807
|
+
[n$1.JUMP]: {
|
|
810
808
|
stackIn: 0,
|
|
811
809
|
stackOut: 0,
|
|
812
810
|
controlsPC: true,
|
|
@@ -829,7 +827,7 @@ const L = {
|
|
|
829
827
|
e2.pc = t2;
|
|
830
828
|
}
|
|
831
829
|
},
|
|
832
|
-
[
|
|
830
|
+
[n$1.JUMP_IF_FALSE]: {
|
|
833
831
|
stackIn: 1,
|
|
834
832
|
stackOut: 0,
|
|
835
833
|
controlsPC: true,
|
|
@@ -854,7 +852,7 @@ const L = {
|
|
|
854
852
|
}
|
|
855
853
|
}
|
|
856
854
|
}, F = {
|
|
857
|
-
[
|
|
855
|
+
[n$1.LOAD]: {
|
|
858
856
|
stackIn: 0,
|
|
859
857
|
stackOut: 1,
|
|
860
858
|
execute: (e2, r2) => {
|
|
@@ -862,7 +860,7 @@ const L = {
|
|
|
862
860
|
e2.variables.has(t2) ? e2.stack.push(e2.variables.get(t2)) : e2.stack.push(s$1());
|
|
863
861
|
}
|
|
864
862
|
},
|
|
865
|
-
[
|
|
863
|
+
[n$1.STORE]: {
|
|
866
864
|
stackIn: 1,
|
|
867
865
|
stackOut: 0,
|
|
868
866
|
execute: (e2, r2) => {
|
|
@@ -871,7 +869,7 @@ const L = {
|
|
|
871
869
|
}
|
|
872
870
|
}
|
|
873
871
|
}, D = {
|
|
874
|
-
[
|
|
872
|
+
[n$1.ITER_START]: {
|
|
875
873
|
stackIn: 1,
|
|
876
874
|
stackOut: 0,
|
|
877
875
|
execute: (e2, r2) => {
|
|
@@ -904,7 +902,7 @@ const L = {
|
|
|
904
902
|
});
|
|
905
903
|
}
|
|
906
904
|
},
|
|
907
|
-
[
|
|
905
|
+
[n$1.ITER_NEXT]: {
|
|
908
906
|
stackIn: 0,
|
|
909
907
|
stackOut: 2,
|
|
910
908
|
// Pushes element and hasMore flag
|
|
@@ -920,7 +918,7 @@ const L = {
|
|
|
920
918
|
t2.index < t2.length ? (t2.index < t2.array.elements.length ? e2.stack.push(t2.array.elements[t2.index]) : e2.stack.push(s$1()), e2.stack.push(true), t2.index++) : (e2.stack.push(null), e2.stack.push(false));
|
|
921
919
|
}
|
|
922
920
|
},
|
|
923
|
-
[
|
|
921
|
+
[n$1.ITER_END]: {
|
|
924
922
|
stackIn: 0,
|
|
925
923
|
stackOut: 0,
|
|
926
924
|
execute: (e2, r2) => {
|
|
@@ -940,7 +938,7 @@ function g2(e2, r2, t2) {
|
|
|
940
938
|
e2.stack.push(n2);
|
|
941
939
|
}
|
|
942
940
|
const q = {
|
|
943
|
-
[
|
|
941
|
+
[n$1.EQ]: {
|
|
944
942
|
stackIn: 2,
|
|
945
943
|
stackOut: 1,
|
|
946
944
|
execute: (e$1, r2) => g2(e$1, r2, (t2, s2) => {
|
|
@@ -954,7 +952,7 @@ const q = {
|
|
|
954
952
|
}
|
|
955
953
|
})
|
|
956
954
|
},
|
|
957
|
-
[
|
|
955
|
+
[n$1.NEQ]: {
|
|
958
956
|
stackIn: 2,
|
|
959
957
|
stackOut: 1,
|
|
960
958
|
execute: (e$1, r2) => g2(e$1, r2, (t2, s2) => {
|
|
@@ -968,7 +966,7 @@ const q = {
|
|
|
968
966
|
}
|
|
969
967
|
})
|
|
970
968
|
},
|
|
971
|
-
[
|
|
969
|
+
[n$1.LT]: {
|
|
972
970
|
stackIn: 2,
|
|
973
971
|
stackOut: 1,
|
|
974
972
|
execute: (e2, r2) => g2(e2, r2, (t2, s2) => {
|
|
@@ -976,7 +974,7 @@ const q = {
|
|
|
976
974
|
return o2 < n2;
|
|
977
975
|
})
|
|
978
976
|
},
|
|
979
|
-
[
|
|
977
|
+
[n$1.GT]: {
|
|
980
978
|
stackIn: 2,
|
|
981
979
|
stackOut: 1,
|
|
982
980
|
execute: (e2, r2) => g2(e2, r2, (t2, s2) => {
|
|
@@ -984,7 +982,7 @@ const q = {
|
|
|
984
982
|
return o2 > n2;
|
|
985
983
|
})
|
|
986
984
|
},
|
|
987
|
-
[
|
|
985
|
+
[n$1.LTE]: {
|
|
988
986
|
stackIn: 2,
|
|
989
987
|
stackOut: 1,
|
|
990
988
|
execute: (e2, r2) => g2(e2, r2, (t2, s2) => {
|
|
@@ -992,7 +990,7 @@ const q = {
|
|
|
992
990
|
return o2 <= n2;
|
|
993
991
|
})
|
|
994
992
|
},
|
|
995
|
-
[
|
|
993
|
+
[n$1.GTE]: {
|
|
996
994
|
stackIn: 2,
|
|
997
995
|
stackOut: 1,
|
|
998
996
|
execute: (e2, r2) => g2(e2, r2, (t2, s2) => {
|
|
@@ -1000,18 +998,18 @@ const q = {
|
|
|
1000
998
|
return o2 >= n2;
|
|
1001
999
|
})
|
|
1002
1000
|
},
|
|
1003
|
-
[
|
|
1001
|
+
[n$1.EQ_STRICT]: {
|
|
1004
1002
|
stackIn: 2,
|
|
1005
1003
|
stackOut: 1,
|
|
1006
1004
|
execute: (e2, r2) => g2(e2, r2, (t2, s2) => t2 === s2)
|
|
1007
1005
|
},
|
|
1008
|
-
[
|
|
1006
|
+
[n$1.NEQ_STRICT]: {
|
|
1009
1007
|
stackIn: 2,
|
|
1010
1008
|
stackOut: 1,
|
|
1011
1009
|
execute: (e2, r2) => g2(e2, r2, (t2, s2) => t2 !== s2)
|
|
1012
1010
|
}
|
|
1013
1011
|
}, H = {
|
|
1014
|
-
[
|
|
1012
|
+
[n$1.AND]: {
|
|
1015
1013
|
stackIn: 2,
|
|
1016
1014
|
stackOut: 1,
|
|
1017
1015
|
execute: (e2, r2) => {
|
|
@@ -1019,7 +1017,7 @@ const q = {
|
|
|
1019
1017
|
e2.stack.push(o2);
|
|
1020
1018
|
}
|
|
1021
1019
|
},
|
|
1022
|
-
[
|
|
1020
|
+
[n$1.OR]: {
|
|
1023
1021
|
stackIn: 2,
|
|
1024
1022
|
stackOut: 1,
|
|
1025
1023
|
execute: (e2, r2) => {
|
|
@@ -1027,7 +1025,7 @@ const q = {
|
|
|
1027
1025
|
e2.stack.push(o2);
|
|
1028
1026
|
}
|
|
1029
1027
|
},
|
|
1030
|
-
[
|
|
1028
|
+
[n$1.NOT]: {
|
|
1031
1029
|
stackIn: 1,
|
|
1032
1030
|
stackOut: 1,
|
|
1033
1031
|
execute: (e2, r2) => {
|
|
@@ -1036,14 +1034,14 @@ const q = {
|
|
|
1036
1034
|
}
|
|
1037
1035
|
}
|
|
1038
1036
|
}, Y = {
|
|
1039
|
-
[
|
|
1037
|
+
[n$1.ARRAY_NEW]: {
|
|
1040
1038
|
stackIn: 0,
|
|
1041
1039
|
stackOut: 1,
|
|
1042
1040
|
execute: (e2, r2) => {
|
|
1043
1041
|
e2.stack.push(d());
|
|
1044
1042
|
}
|
|
1045
1043
|
},
|
|
1046
|
-
[
|
|
1044
|
+
[n$1.ARRAY_PUSH]: {
|
|
1047
1045
|
stackIn: 2,
|
|
1048
1046
|
stackOut: 1,
|
|
1049
1047
|
execute: (e2, r2) => {
|
|
@@ -1058,7 +1056,7 @@ const q = {
|
|
|
1058
1056
|
s2.elements.push(t2), e2.stack.push(s2);
|
|
1059
1057
|
}
|
|
1060
1058
|
},
|
|
1061
|
-
[
|
|
1059
|
+
[n$1.ARRAY_GET]: {
|
|
1062
1060
|
stackIn: 2,
|
|
1063
1061
|
stackOut: 1,
|
|
1064
1062
|
execute: (e2, r2) => {
|
|
@@ -1095,7 +1093,7 @@ const q = {
|
|
|
1095
1093
|
};
|
|
1096
1094
|
}
|
|
1097
1095
|
},
|
|
1098
|
-
[
|
|
1096
|
+
[n$1.ARRAY_SET]: {
|
|
1099
1097
|
stackIn: 3,
|
|
1100
1098
|
stackOut: 1,
|
|
1101
1099
|
execute: (e2, r2) => {
|
|
@@ -1138,7 +1136,7 @@ const q = {
|
|
|
1138
1136
|
};
|
|
1139
1137
|
}
|
|
1140
1138
|
},
|
|
1141
|
-
[
|
|
1139
|
+
[n$1.ARRAY_LEN]: {
|
|
1142
1140
|
stackIn: 1,
|
|
1143
1141
|
stackOut: 1,
|
|
1144
1142
|
execute: (e2, r2) => {
|
|
@@ -1175,7 +1173,7 @@ function x(e2) {
|
|
|
1175
1173
|
}
|
|
1176
1174
|
}
|
|
1177
1175
|
const $ = {
|
|
1178
|
-
[
|
|
1176
|
+
[n$1.CONCAT]: {
|
|
1179
1177
|
stackIn: 2,
|
|
1180
1178
|
stackOut: 1,
|
|
1181
1179
|
execute: (e2, r2) => {
|
|
@@ -1183,7 +1181,7 @@ const $ = {
|
|
|
1183
1181
|
e2.stack.push(y(s2) + y(t2));
|
|
1184
1182
|
}
|
|
1185
1183
|
},
|
|
1186
|
-
[
|
|
1184
|
+
[n$1.STRING_LEN]: {
|
|
1187
1185
|
stackIn: 1,
|
|
1188
1186
|
stackOut: 1,
|
|
1189
1187
|
execute: (e2, r2) => {
|
|
@@ -1198,7 +1196,7 @@ const $ = {
|
|
|
1198
1196
|
e2.stack.push(t2.length);
|
|
1199
1197
|
}
|
|
1200
1198
|
},
|
|
1201
|
-
[
|
|
1199
|
+
[n$1.LENGTH]: {
|
|
1202
1200
|
stackIn: 1,
|
|
1203
1201
|
stackOut: 1,
|
|
1204
1202
|
execute: (e2, r2) => {
|
|
@@ -1216,7 +1214,7 @@ const $ = {
|
|
|
1216
1214
|
};
|
|
1217
1215
|
}
|
|
1218
1216
|
},
|
|
1219
|
-
[
|
|
1217
|
+
[n$1.JSON_PARSE]: {
|
|
1220
1218
|
stackIn: 1,
|
|
1221
1219
|
stackOut: 1,
|
|
1222
1220
|
execute: (e2, r2) => {
|
|
@@ -1236,7 +1234,7 @@ const $ = {
|
|
|
1236
1234
|
}
|
|
1237
1235
|
}
|
|
1238
1236
|
},
|
|
1239
|
-
[
|
|
1237
|
+
[n$1.TYPEOF]: {
|
|
1240
1238
|
stackIn: 1,
|
|
1241
1239
|
stackOut: 1,
|
|
1242
1240
|
execute: (e2, r2) => {
|
|
@@ -1245,7 +1243,7 @@ const $ = {
|
|
|
1245
1243
|
}
|
|
1246
1244
|
}
|
|
1247
1245
|
}, B = {
|
|
1248
|
-
[
|
|
1246
|
+
[n$1.INC]: {
|
|
1249
1247
|
stackIn: 1,
|
|
1250
1248
|
stackOut: 1,
|
|
1251
1249
|
execute: (e2, r2) => {
|
|
@@ -1263,7 +1261,7 @@ const $ = {
|
|
|
1263
1261
|
e2.stack.push(n2 ? m(s2) : o2);
|
|
1264
1262
|
}
|
|
1265
1263
|
},
|
|
1266
|
-
[
|
|
1264
|
+
[n$1.DEC]: {
|
|
1267
1265
|
stackIn: 1,
|
|
1268
1266
|
stackOut: 1,
|
|
1269
1267
|
execute: (e2, r2) => {
|
|
@@ -1282,7 +1280,7 @@ const $ = {
|
|
|
1282
1280
|
}
|
|
1283
1281
|
}
|
|
1284
1282
|
}, J = {
|
|
1285
|
-
[
|
|
1283
|
+
[n$1.RETURN]: {
|
|
1286
1284
|
stackIn: 0,
|
|
1287
1285
|
stackOut: 0,
|
|
1288
1286
|
controlsPC: true,
|
|
@@ -1291,7 +1289,7 @@ const $ = {
|
|
|
1291
1289
|
e2.returnValue = t2, e2.status = "complete";
|
|
1292
1290
|
}
|
|
1293
1291
|
},
|
|
1294
|
-
[
|
|
1292
|
+
[n$1.BREAK]: {
|
|
1295
1293
|
stackIn: 0,
|
|
1296
1294
|
stackOut: 0,
|
|
1297
1295
|
controlsPC: true,
|
|
@@ -1314,7 +1312,7 @@ const $ = {
|
|
|
1314
1312
|
e2.pc = t2;
|
|
1315
1313
|
}
|
|
1316
1314
|
},
|
|
1317
|
-
[
|
|
1315
|
+
[n$1.CONTINUE]: {
|
|
1318
1316
|
stackIn: 0,
|
|
1319
1317
|
stackOut: 0,
|
|
1320
1318
|
controlsPC: true,
|
|
@@ -1337,7 +1335,7 @@ const $ = {
|
|
|
1337
1335
|
e2.pc = t2;
|
|
1338
1336
|
}
|
|
1339
1337
|
},
|
|
1340
|
-
[
|
|
1338
|
+
[n$1.FS_LIST_FILES]: {
|
|
1341
1339
|
stackIn: 1,
|
|
1342
1340
|
// Minimum 1 argument (path), optionally 2 (path + options)
|
|
1343
1341
|
stackOut: 0,
|
|
@@ -1367,7 +1365,7 @@ const $ = {
|
|
|
1367
1365
|
}
|
|
1368
1366
|
},
|
|
1369
1367
|
// String method handlers
|
|
1370
|
-
[
|
|
1368
|
+
[n$1.STRING_SUBSTRING]: {
|
|
1371
1369
|
stackIn: 2,
|
|
1372
1370
|
// Minimum 2 (string, start), optionally 3 (string, start, end)
|
|
1373
1371
|
stackOut: 1,
|
|
@@ -1402,7 +1400,7 @@ const $ = {
|
|
|
1402
1400
|
e2.stack.push(I2);
|
|
1403
1401
|
}
|
|
1404
1402
|
},
|
|
1405
|
-
[
|
|
1403
|
+
[n$1.STRING_INDEXOF]: {
|
|
1406
1404
|
stackIn: 2,
|
|
1407
1405
|
stackOut: 1,
|
|
1408
1406
|
execute: (e2, r2) => {
|
|
@@ -1417,7 +1415,7 @@ const $ = {
|
|
|
1417
1415
|
e2.stack.push(s2.indexOf(t2));
|
|
1418
1416
|
}
|
|
1419
1417
|
},
|
|
1420
|
-
[
|
|
1418
|
+
[n$1.STRING_SPLIT]: {
|
|
1421
1419
|
stackIn: 2,
|
|
1422
1420
|
stackOut: 1,
|
|
1423
1421
|
execute: (e2, r2) => {
|
|
@@ -1433,7 +1431,7 @@ const $ = {
|
|
|
1433
1431
|
t2 === "" ? o2 = s2.split("") : o2 = s2.split(t2), e2.stack.push(d(o2));
|
|
1434
1432
|
}
|
|
1435
1433
|
},
|
|
1436
|
-
[
|
|
1434
|
+
[n$1.STRING_SLICE]: {
|
|
1437
1435
|
stackIn: 2,
|
|
1438
1436
|
// Minimum 2 (string, start), optionally 3 (string, start, end)
|
|
1439
1437
|
stackOut: 1,
|
|
@@ -1466,7 +1464,7 @@ const $ = {
|
|
|
1466
1464
|
e2.stack.push(u2);
|
|
1467
1465
|
}
|
|
1468
1466
|
},
|
|
1469
|
-
[
|
|
1467
|
+
[n$1.STRING_CHARAT]: {
|
|
1470
1468
|
stackIn: 2,
|
|
1471
1469
|
stackOut: 1,
|
|
1472
1470
|
execute: (e2, r2) => {
|
|
@@ -1489,7 +1487,7 @@ const $ = {
|
|
|
1489
1487
|
e2.stack.push(o2);
|
|
1490
1488
|
}
|
|
1491
1489
|
},
|
|
1492
|
-
[
|
|
1490
|
+
[n$1.STRING_TOUPPERCASE]: {
|
|
1493
1491
|
stackIn: 1,
|
|
1494
1492
|
stackOut: 1,
|
|
1495
1493
|
execute: (e2, r2) => {
|
|
@@ -1504,7 +1502,7 @@ const $ = {
|
|
|
1504
1502
|
e2.stack.push(t2.toUpperCase());
|
|
1505
1503
|
}
|
|
1506
1504
|
},
|
|
1507
|
-
[
|
|
1505
|
+
[n$1.STRING_TOLOWERCASE]: {
|
|
1508
1506
|
stackIn: 1,
|
|
1509
1507
|
stackOut: 1,
|
|
1510
1508
|
execute: (e2, r2) => {
|
|
@@ -1518,29 +1516,45 @@ const $ = {
|
|
|
1518
1516
|
};
|
|
1519
1517
|
e2.stack.push(t2.toLowerCase());
|
|
1520
1518
|
}
|
|
1519
|
+
},
|
|
1520
|
+
[n$1.TO_STRING]: {
|
|
1521
|
+
stackIn: 1,
|
|
1522
|
+
stackOut: 1,
|
|
1523
|
+
execute: (e2, r2) => {
|
|
1524
|
+
const t2 = e2.stack.pop();
|
|
1525
|
+
if (t2 === void 0)
|
|
1526
|
+
return {
|
|
1527
|
+
type: "StackUnderflow",
|
|
1528
|
+
message: "TO_STRING: Stack underflow",
|
|
1529
|
+
pc: e2.pc,
|
|
1530
|
+
opcode: r2.op
|
|
1531
|
+
};
|
|
1532
|
+
const s2 = y(t2);
|
|
1533
|
+
e2.stack.push(s2);
|
|
1534
|
+
}
|
|
1521
1535
|
}
|
|
1522
1536
|
};
|
|
1523
|
-
function
|
|
1537
|
+
function S(e2) {
|
|
1524
1538
|
if (f(e2))
|
|
1525
|
-
return e2.elements.map(
|
|
1539
|
+
return e2.elements.map(S);
|
|
1526
1540
|
if (c$1(e2)) {
|
|
1527
1541
|
const r2 = {};
|
|
1528
1542
|
for (const [t2, s2] of Object.entries(e2.properties))
|
|
1529
|
-
r2[t2] =
|
|
1543
|
+
r2[t2] = S(s2);
|
|
1530
1544
|
return r2;
|
|
1531
1545
|
}
|
|
1532
1546
|
if (!o(e2))
|
|
1533
1547
|
return e2;
|
|
1534
1548
|
}
|
|
1535
1549
|
const W = {
|
|
1536
|
-
[
|
|
1550
|
+
[n$1.OBJECT_CREATE]: {
|
|
1537
1551
|
stackIn: 0,
|
|
1538
1552
|
stackOut: 1,
|
|
1539
1553
|
execute: (e2) => {
|
|
1540
1554
|
e2.stack.push(j$1());
|
|
1541
1555
|
}
|
|
1542
1556
|
},
|
|
1543
|
-
[
|
|
1557
|
+
[n$1.PROPERTY_SET]: {
|
|
1544
1558
|
stackIn: 3,
|
|
1545
1559
|
stackOut: 1,
|
|
1546
1560
|
execute: (e2, r2) => {
|
|
@@ -1562,7 +1576,7 @@ const W = {
|
|
|
1562
1576
|
o2.properties[s2] = t2, e2.stack.push(o2);
|
|
1563
1577
|
}
|
|
1564
1578
|
},
|
|
1565
|
-
[
|
|
1579
|
+
[n$1.PROPERTY_GET]: {
|
|
1566
1580
|
stackIn: 2,
|
|
1567
1581
|
stackOut: 1,
|
|
1568
1582
|
execute: (e$1, r2) => {
|
|
@@ -1582,11 +1596,11 @@ const W = {
|
|
|
1582
1596
|
e$1.stack.push(o$1 ?? s$1());
|
|
1583
1597
|
}
|
|
1584
1598
|
},
|
|
1585
|
-
[
|
|
1599
|
+
[n$1.JSON_STRINGIFY]: {
|
|
1586
1600
|
stackIn: 1,
|
|
1587
1601
|
stackOut: 1,
|
|
1588
1602
|
execute: (e2) => {
|
|
1589
|
-
const r2 = e2.stack.pop(), t2 =
|
|
1603
|
+
const r2 = e2.stack.pop(), t2 = S(r2);
|
|
1590
1604
|
e2.stack.push(JSON.stringify(t2));
|
|
1591
1605
|
}
|
|
1592
1606
|
}
|
|
@@ -1610,7 +1624,7 @@ class N {
|
|
|
1610
1624
|
if (s2.stack.length < r2.stackIn)
|
|
1611
1625
|
return {
|
|
1612
1626
|
type: "StackUnderflow",
|
|
1613
|
-
message: `${
|
|
1627
|
+
message: `${n$1[t2.op]}: Stack underflow`,
|
|
1614
1628
|
pc: s2.pc,
|
|
1615
1629
|
opcode: t2.op
|
|
1616
1630
|
};
|
|
@@ -1633,9 +1647,9 @@ class N {
|
|
|
1633
1647
|
s2.status = "error", s2.error = a2.message;
|
|
1634
1648
|
break;
|
|
1635
1649
|
}
|
|
1636
|
-
if ((o2.op ===
|
|
1650
|
+
if ((o2.op === n$1.JUMP || o2.op === n$1.JUMP_IF_FALSE || o2.op === n$1.BREAK || o2.op === n$1.CONTINUE) && o2.arg !== void 0 && o2.arg >= r2.length) {
|
|
1637
1651
|
s2.status = "error";
|
|
1638
|
-
const u2 = o2.op ===
|
|
1652
|
+
const u2 = o2.op === n$1.JUMP || o2.op === n$1.JUMP_IF_FALSE ? "jump" : o2.op === n$1.BREAK ? "break" : "continue";
|
|
1639
1653
|
s2.error = `Invalid ${u2} target: ${o2.arg}`;
|
|
1640
1654
|
break;
|
|
1641
1655
|
}
|
|
@@ -1647,7 +1661,7 @@ class N {
|
|
|
1647
1661
|
n2.controlsPC || s2.pc++;
|
|
1648
1662
|
continue;
|
|
1649
1663
|
}
|
|
1650
|
-
s2.status = "error", s2.error = `Unknown opcode: ${
|
|
1664
|
+
s2.status = "error", s2.error = `Unknown opcode: ${n$1[o2.op]}`;
|
|
1651
1665
|
break;
|
|
1652
1666
|
}
|
|
1653
1667
|
return s2;
|