cvm-server 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.cjs +603 -356
- package/package.json +1 -1
package/main.cjs
CHANGED
|
@@ -9,66 +9,66 @@ const mongodb = require("mongodb");
|
|
|
9
9
|
const dotenv = require("dotenv");
|
|
10
10
|
const url = require("url");
|
|
11
11
|
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
12
|
-
function _interopNamespaceDefault(
|
|
12
|
+
function _interopNamespaceDefault(e2) {
|
|
13
13
|
const n2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
14
|
-
if (
|
|
15
|
-
for (const k2 in
|
|
14
|
+
if (e2) {
|
|
15
|
+
for (const k2 in e2) {
|
|
16
16
|
if (k2 !== "default") {
|
|
17
|
-
const
|
|
18
|
-
Object.defineProperty(n2, k2,
|
|
17
|
+
const d2 = Object.getOwnPropertyDescriptor(e2, k2);
|
|
18
|
+
Object.defineProperty(n2, k2, d2.get ? d2 : {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: () =>
|
|
20
|
+
get: () => e2[k2]
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
n2.default =
|
|
25
|
+
n2.default = e2;
|
|
26
26
|
return Object.freeze(n2);
|
|
27
27
|
}
|
|
28
28
|
const s__namespace = /* @__PURE__ */ _interopNamespaceDefault(s$1);
|
|
29
29
|
const c__namespace = /* @__PURE__ */ _interopNamespaceDefault(c$1);
|
|
30
30
|
const dotenv__namespace = /* @__PURE__ */ _interopNamespaceDefault(dotenv);
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
function
|
|
36
|
-
const
|
|
37
|
-
let x = false,
|
|
38
|
-
const
|
|
31
|
+
var A = Object.defineProperty;
|
|
32
|
+
var k = (n2, l2, e2) => l2 in n2 ? A(n2, l2, { enumerable: true, configurable: true, writable: true, value: e2 }) : n2[l2] = e2;
|
|
33
|
+
var S = (n2, l2, e2) => k(n2, typeof l2 != "symbol" ? l2 + "" : l2, e2);
|
|
34
|
+
var r$1 = /* @__PURE__ */ ((n2) => (n2.PUSH = "PUSH", n2.PUSH_UNDEFINED = "PUSH_UNDEFINED", n2.POP = "POP", n2.LOAD = "LOAD", n2.STORE = "STORE", n2.CONCAT = "CONCAT", n2.ARRAY_NEW = "ARRAY_NEW", n2.ARRAY_PUSH = "ARRAY_PUSH", n2.ARRAY_GET = "ARRAY_GET", n2.ARRAY_SET = "ARRAY_SET", n2.ARRAY_LEN = "ARRAY_LEN", n2.STRING_LEN = "STRING_LEN", n2.STRING_SUBSTRING = "STRING_SUBSTRING", n2.STRING_INDEXOF = "STRING_INDEXOF", n2.STRING_SPLIT = "STRING_SPLIT", n2.LENGTH = "LENGTH", n2.JSON_PARSE = "JSON_PARSE", n2.TYPEOF = "TYPEOF", n2.ADD = "ADD", n2.SUB = "SUB", n2.MUL = "MUL", n2.DIV = "DIV", n2.MOD = "MOD", n2.UNARY_MINUS = "UNARY_MINUS", n2.UNARY_PLUS = "UNARY_PLUS", n2.INC = "INC", n2.DEC = "DEC", n2.EQ = "EQ", n2.NEQ = "NEQ", n2.LT = "LT", n2.GT = "GT", n2.LTE = "LTE", n2.GTE = "GTE", n2.EQ_STRICT = "EQ_STRICT", n2.NEQ_STRICT = "NEQ_STRICT", n2.JUMP = "JUMP", n2.JUMP_IF = "JUMP_IF", n2.JUMP_IF_FALSE = "JUMP_IF_FALSE", n2.JUMP_IF_TRUE = "JUMP_IF_TRUE", n2.CALL = "CALL", n2.RETURN = "RETURN", n2.AND = "AND", n2.OR = "OR", n2.NOT = "NOT", n2.BREAK = "BREAK", n2.CONTINUE = "CONTINUE", n2.ITER_START = "ITER_START", n2.ITER_NEXT = "ITER_NEXT", n2.ITER_END = "ITER_END", n2.FS_LIST_FILES = "FS_LIST_FILES", n2.CC = "CC", n2.PRINT = "PRINT", n2.HALT = "HALT", n2))(r$1 || {});
|
|
35
|
+
function R(n2) {
|
|
36
|
+
const l2 = [], e2 = [];
|
|
37
|
+
let x = false, u2 = false;
|
|
38
|
+
const a2 = s__namespace.createSourceFile(
|
|
39
39
|
"program.ts",
|
|
40
|
-
|
|
40
|
+
n2,
|
|
41
41
|
s__namespace.ScriptTarget.Latest,
|
|
42
42
|
true
|
|
43
43
|
);
|
|
44
|
-
function t2(
|
|
45
|
-
if (s__namespace.isFunctionDeclaration(
|
|
46
|
-
const
|
|
47
|
-
s__namespace.isCallExpression(
|
|
44
|
+
function t2(i2) {
|
|
45
|
+
if (s__namespace.isFunctionDeclaration(i2) && i2.name && i2.name.text === "main" && (x = true, i2.parameters.length > 0 && l2.push("main() must not have parameters")), s__namespace.isExpressionStatement(i2) && i2.parent === a2) {
|
|
46
|
+
const c2 = i2.expression;
|
|
47
|
+
s__namespace.isCallExpression(c2) && s__namespace.isIdentifier(c2.expression) && c2.expression.text === "main" && (u2 = true);
|
|
48
48
|
}
|
|
49
|
-
if (s__namespace.isCallExpression(
|
|
50
|
-
const
|
|
51
|
-
["setTimeout", "fetch", "require", "import"].includes(
|
|
49
|
+
if (s__namespace.isCallExpression(i2) && s__namespace.isIdentifier(i2.expression)) {
|
|
50
|
+
const c2 = i2.expression.text;
|
|
51
|
+
["setTimeout", "fetch", "require", "import"].includes(c2) && l2.push(`Unsupported function: ${c2}`);
|
|
52
52
|
}
|
|
53
|
-
s__namespace.forEachChild(
|
|
53
|
+
s__namespace.forEachChild(i2, t2);
|
|
54
54
|
}
|
|
55
|
-
return t2(
|
|
56
|
-
bytecode:
|
|
57
|
-
errors:
|
|
55
|
+
return t2(a2), x || l2.push("Program must have a main() function"), x && !u2 && l2.push("main() must be called at the top level"), l2.length === 0 && e2.push({ op: r$1.HALT }), {
|
|
56
|
+
bytecode: e2,
|
|
57
|
+
errors: l2,
|
|
58
58
|
hasMain: x
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
class I {
|
|
62
62
|
constructor() {
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
S(this, "bytecode", []);
|
|
64
|
+
S(this, "contextStack", []);
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Emit an instruction and return its index
|
|
68
68
|
*/
|
|
69
|
-
emit(
|
|
69
|
+
emit(l2, e2) {
|
|
70
70
|
const x = this.bytecode.length;
|
|
71
|
-
return this.bytecode.push({ op:
|
|
71
|
+
return this.bytecode.push({ op: l2, arg: e2 }), x;
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Get the current address (next instruction index)
|
|
@@ -79,20 +79,20 @@ let h$1 = class h {
|
|
|
79
79
|
/**
|
|
80
80
|
* Patch a jump instruction with the target address
|
|
81
81
|
*/
|
|
82
|
-
patchJump(
|
|
83
|
-
|
|
82
|
+
patchJump(l2, e2) {
|
|
83
|
+
l2 >= 0 && l2 < this.bytecode.length && (this.bytecode[l2].arg = e2);
|
|
84
84
|
}
|
|
85
85
|
/**
|
|
86
86
|
* Patch multiple jump instructions with the same target
|
|
87
87
|
*/
|
|
88
|
-
patchJumps(
|
|
89
|
-
|
|
88
|
+
patchJumps(l2, e2) {
|
|
89
|
+
l2.forEach((x) => this.patchJump(x, e2));
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
92
|
* Push a new jump context onto the stack
|
|
93
93
|
*/
|
|
94
|
-
pushContext(
|
|
95
|
-
this.contextStack.push(
|
|
94
|
+
pushContext(l2) {
|
|
95
|
+
this.contextStack.push(l2);
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
98
|
* Pop the current jump context from the stack
|
|
@@ -110,9 +110,9 @@ let h$1 = class h {
|
|
|
110
110
|
* Find the nearest loop context (for break/continue)
|
|
111
111
|
*/
|
|
112
112
|
findLoopContext() {
|
|
113
|
-
for (let
|
|
114
|
-
if (this.contextStack[
|
|
115
|
-
return this.contextStack[
|
|
113
|
+
for (let l2 = this.contextStack.length - 1; l2 >= 0; l2--)
|
|
114
|
+
if (this.contextStack[l2].type === "loop" || this.contextStack[l2].type === "foreach")
|
|
115
|
+
return this.contextStack[l2];
|
|
116
116
|
return null;
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
@@ -133,172 +133,278 @@ let h$1 = class h {
|
|
|
133
133
|
getUnclosedContexts() {
|
|
134
134
|
return [...this.contextStack];
|
|
135
135
|
}
|
|
136
|
-
}
|
|
137
|
-
function
|
|
138
|
-
const
|
|
139
|
-
if (
|
|
136
|
+
}
|
|
137
|
+
function g$1(n2) {
|
|
138
|
+
const l2 = R(n2);
|
|
139
|
+
if (l2.errors.length > 0)
|
|
140
140
|
return {
|
|
141
141
|
success: false,
|
|
142
142
|
bytecode: [],
|
|
143
|
-
errors:
|
|
143
|
+
errors: l2.errors
|
|
144
144
|
};
|
|
145
|
-
const
|
|
146
|
-
function
|
|
145
|
+
const e2 = new I(), x = s__namespace.createSourceFile("program.ts", n2, s__namespace.ScriptTarget.Latest, true);
|
|
146
|
+
function u2(t2) {
|
|
147
147
|
if (s__namespace.isIfStatement(t2)) {
|
|
148
|
-
|
|
149
|
-
const
|
|
148
|
+
a2(t2.expression);
|
|
149
|
+
const i2 = e2.emit(r$1.JUMP_IF_FALSE, -1), c2 = {
|
|
150
150
|
type: "if",
|
|
151
151
|
endTargets: []
|
|
152
152
|
};
|
|
153
|
-
if (t2.elseStatement ?
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
|
|
153
|
+
if (t2.elseStatement ? c2.elseTarget = i2 : c2.endTargets.push(i2), e2.pushContext(c2), u2(t2.thenStatement), t2.elseStatement) {
|
|
154
|
+
const m2 = e2.emit(r$1.JUMP, -1);
|
|
155
|
+
c2.endTargets.push(m2);
|
|
156
|
+
const T = e2.currentAddress();
|
|
157
|
+
e2.patchJump(i2, T), u2(t2.elseStatement);
|
|
158
158
|
}
|
|
159
|
-
const
|
|
160
|
-
if (
|
|
161
|
-
const
|
|
162
|
-
|
|
159
|
+
const o2 = e2.popContext();
|
|
160
|
+
if (o2) {
|
|
161
|
+
const m2 = e2.currentAddress();
|
|
162
|
+
e2.patchJumps(o2.endTargets, m2);
|
|
163
163
|
}
|
|
164
164
|
} else if (s__namespace.isWhileStatement(t2)) {
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
const
|
|
165
|
+
const i2 = e2.currentAddress();
|
|
166
|
+
a2(t2.expression);
|
|
167
|
+
const o2 = {
|
|
168
168
|
type: "loop",
|
|
169
|
-
breakTargets: [
|
|
169
|
+
breakTargets: [e2.emit(r$1.JUMP_IF_FALSE, -1)],
|
|
170
170
|
continueTargets: [],
|
|
171
171
|
endTargets: [],
|
|
172
|
-
startAddress:
|
|
172
|
+
startAddress: i2
|
|
173
173
|
};
|
|
174
|
-
|
|
175
|
-
const
|
|
176
|
-
if (
|
|
177
|
-
const
|
|
178
|
-
|
|
174
|
+
e2.pushContext(o2), u2(t2.statement), e2.emit(r$1.JUMP, i2);
|
|
175
|
+
const m2 = e2.popContext();
|
|
176
|
+
if (m2) {
|
|
177
|
+
const T = e2.currentAddress();
|
|
178
|
+
e2.patchJumps(m2.breakTargets || [], T);
|
|
179
|
+
}
|
|
180
|
+
} else if (s__namespace.isForOfStatement(t2)) {
|
|
181
|
+
const i2 = t2.initializer, c2 = t2.expression;
|
|
182
|
+
let o2;
|
|
183
|
+
if (s__namespace.isVariableDeclarationList(i2))
|
|
184
|
+
o2 = i2.declarations[0].name.getText();
|
|
185
|
+
else if (s__namespace.isIdentifier(i2))
|
|
186
|
+
o2 = i2.text;
|
|
187
|
+
else
|
|
188
|
+
throw new Error("Unsupported for-of variable declaration");
|
|
189
|
+
a2(c2), e2.emit(r$1.ITER_START);
|
|
190
|
+
const m2 = e2.currentAddress();
|
|
191
|
+
e2.emit(r$1.ITER_NEXT);
|
|
192
|
+
const T = e2.emit(r$1.JUMP_IF_FALSE, -1);
|
|
193
|
+
e2.emit(r$1.STORE, o2);
|
|
194
|
+
const h2 = {
|
|
195
|
+
type: "foreach",
|
|
196
|
+
breakTargets: [T],
|
|
197
|
+
continueTargets: [],
|
|
198
|
+
endTargets: [],
|
|
199
|
+
startAddress: m2,
|
|
200
|
+
iterVariable: o2
|
|
201
|
+
};
|
|
202
|
+
e2.pushContext(h2), u2(t2.statement), e2.emit(r$1.JUMP, m2);
|
|
203
|
+
const f2 = e2.popContext();
|
|
204
|
+
if (f2) {
|
|
205
|
+
e2.emit(r$1.ITER_END);
|
|
206
|
+
const p2 = e2.currentAddress();
|
|
207
|
+
e2.patchJumps(f2.breakTargets || [], p2);
|
|
179
208
|
}
|
|
180
209
|
} else if (s__namespace.isBlock(t2))
|
|
181
|
-
t2.statements.forEach((
|
|
182
|
-
|
|
210
|
+
t2.statements.forEach((i2) => {
|
|
211
|
+
u2(i2);
|
|
183
212
|
});
|
|
184
213
|
else if (s__namespace.isExpressionStatement(t2)) {
|
|
185
|
-
const
|
|
186
|
-
if (s__namespace.
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
214
|
+
const i2 = t2.expression;
|
|
215
|
+
if (s__namespace.isBinaryExpression(i2)) {
|
|
216
|
+
const c2 = i2.operatorToken.kind;
|
|
217
|
+
if (c2 === s__namespace.SyntaxKind.PlusEqualsToken || c2 === s__namespace.SyntaxKind.MinusEqualsToken || c2 === s__namespace.SyntaxKind.AsteriskEqualsToken || c2 === s__namespace.SyntaxKind.SlashEqualsToken || c2 === s__namespace.SyntaxKind.PercentEqualsToken) {
|
|
218
|
+
if (s__namespace.isIdentifier(i2.left)) {
|
|
219
|
+
switch (e2.emit(r$1.LOAD, i2.left.text), a2(i2.right), c2) {
|
|
220
|
+
case s__namespace.SyntaxKind.PlusEqualsToken:
|
|
221
|
+
s__namespace.isStringLiteral(i2.right) ? e2.emit(r$1.CONCAT) : e2.emit(r$1.ADD);
|
|
222
|
+
break;
|
|
223
|
+
case s__namespace.SyntaxKind.MinusEqualsToken:
|
|
224
|
+
e2.emit(r$1.SUB);
|
|
225
|
+
break;
|
|
226
|
+
case s__namespace.SyntaxKind.AsteriskEqualsToken:
|
|
227
|
+
e2.emit(r$1.MUL);
|
|
228
|
+
break;
|
|
229
|
+
case s__namespace.SyntaxKind.SlashEqualsToken:
|
|
230
|
+
e2.emit(r$1.DIV);
|
|
231
|
+
break;
|
|
232
|
+
case s__namespace.SyntaxKind.PercentEqualsToken:
|
|
233
|
+
e2.emit(r$1.MOD);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
e2.emit(r$1.STORE, i2.left.text);
|
|
237
|
+
} else if (s__namespace.isElementAccessExpression(i2.left))
|
|
238
|
+
throw new Error("Compound assignment to array elements not yet supported");
|
|
239
|
+
return;
|
|
240
|
+
} else if (c2 === s__namespace.SyntaxKind.EqualsToken) {
|
|
241
|
+
if (a2(i2.right), s__namespace.isIdentifier(i2.left))
|
|
242
|
+
e2.emit(r$1.STORE, i2.left.text);
|
|
243
|
+
else if (s__namespace.isElementAccessExpression(i2.left)) {
|
|
244
|
+
const o2 = `__temp_${e2.getBytecode().length}`;
|
|
245
|
+
e2.emit(r$1.STORE, o2), a2(i2.left.expression), a2(i2.left.argumentExpression), e2.emit(r$1.LOAD, o2), e2.emit(r$1.ARRAY_SET);
|
|
246
|
+
}
|
|
247
|
+
return;
|
|
200
248
|
}
|
|
201
249
|
}
|
|
250
|
+
s__namespace.isCallExpression(i2) && s__namespace.isPropertyAccessExpression(i2.expression) && i2.expression.expression.getText() === "console" && i2.expression.name.getText() === "log" ? (i2.arguments.forEach((c2) => {
|
|
251
|
+
a2(c2);
|
|
252
|
+
}), e2.emit(r$1.PRINT)) : s__namespace.isCallExpression(i2) && s__namespace.isIdentifier(i2.expression) && i2.expression.text === "CC" ? (i2.arguments.length > 0 && a2(i2.arguments[0]), e2.emit(r$1.CC), e2.emit(r$1.POP)) : s__namespace.isCallExpression(i2) && s__namespace.isPropertyAccessExpression(i2.expression) && i2.expression.name.getText() === "push" ? (a2(i2.expression.expression), i2.arguments.length > 0 && a2(i2.arguments[0]), e2.emit(r$1.ARRAY_PUSH)) : (s__namespace.isPostfixUnaryExpression(i2) || s__namespace.isPrefixUnaryExpression(i2)) && (a2(i2), e2.emit(r$1.POP));
|
|
202
253
|
} else if (s__namespace.isVariableStatement(t2)) {
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
} else s__namespace.isReturnStatement(t2)
|
|
254
|
+
const i2 = t2.declarationList.declarations[0];
|
|
255
|
+
i2.initializer && (a2(i2.initializer), e2.emit(r$1.STORE, i2.name.getText()));
|
|
256
|
+
} else if (s__namespace.isReturnStatement(t2))
|
|
257
|
+
t2.expression ? a2(t2.expression) : e2.emit(r$1.PUSH, null), e2.emit(r$1.RETURN);
|
|
258
|
+
else if (s__namespace.isBreakStatement(t2)) {
|
|
259
|
+
const i2 = e2.findLoopContext();
|
|
260
|
+
if (i2) {
|
|
261
|
+
i2.type === "foreach" && e2.emit(r$1.ITER_END);
|
|
262
|
+
const c2 = e2.emit(r$1.BREAK, -1);
|
|
263
|
+
i2.breakTargets = i2.breakTargets || [], i2.breakTargets.push(c2);
|
|
264
|
+
} else
|
|
265
|
+
throw new Error("break statement not in loop");
|
|
266
|
+
} else if (s__namespace.isContinueStatement(t2)) {
|
|
267
|
+
const i2 = e2.findLoopContext();
|
|
268
|
+
if (i2 && i2.startAddress !== void 0) {
|
|
269
|
+
const c2 = e2.emit(r$1.CONTINUE, i2.startAddress);
|
|
270
|
+
i2.continueTargets = i2.continueTargets || [], i2.continueTargets.push(c2);
|
|
271
|
+
} else
|
|
272
|
+
throw new Error("continue statement not in loop");
|
|
273
|
+
}
|
|
206
274
|
}
|
|
207
|
-
function
|
|
275
|
+
function a2(t2) {
|
|
208
276
|
if (s__namespace.isStringLiteral(t2))
|
|
209
|
-
|
|
277
|
+
e2.emit(r$1.PUSH, t2.text);
|
|
210
278
|
else if (s__namespace.isNumericLiteral(t2))
|
|
211
|
-
|
|
279
|
+
e2.emit(r$1.PUSH, Number(t2.text));
|
|
212
280
|
else if (t2.kind === s__namespace.SyntaxKind.TrueKeyword)
|
|
213
|
-
|
|
281
|
+
e2.emit(r$1.PUSH, true);
|
|
214
282
|
else if (t2.kind === s__namespace.SyntaxKind.FalseKeyword)
|
|
215
|
-
|
|
283
|
+
e2.emit(r$1.PUSH, false);
|
|
216
284
|
else if (t2.kind === s__namespace.SyntaxKind.NullKeyword)
|
|
217
|
-
|
|
285
|
+
e2.emit(r$1.PUSH, null);
|
|
218
286
|
else if (s__namespace.isArrayLiteralExpression(t2))
|
|
219
|
-
|
|
220
|
-
|
|
287
|
+
e2.emit(r$1.ARRAY_NEW), t2.elements.forEach((i2) => {
|
|
288
|
+
a2(i2), e2.emit(r$1.ARRAY_PUSH);
|
|
221
289
|
});
|
|
222
290
|
else if (s__namespace.isElementAccessExpression(t2))
|
|
223
|
-
|
|
291
|
+
a2(t2.expression), t2.argumentExpression && a2(t2.argumentExpression), e2.emit(r$1.ARRAY_GET);
|
|
224
292
|
else if (s__namespace.isPropertyAccessExpression(t2) && t2.name.text === "length")
|
|
225
|
-
|
|
293
|
+
a2(t2.expression), e2.emit(r$1.LENGTH);
|
|
226
294
|
else if (s__namespace.isIdentifier(t2))
|
|
227
|
-
|
|
228
|
-
else if (s__namespace.isCallExpression(t2))
|
|
229
|
-
s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "JSON" && t2.expression.name.text === "parse"
|
|
230
|
-
|
|
231
|
-
|
|
295
|
+
t2.text === "undefined" ? e2.emit(r$1.PUSH_UNDEFINED) : e2.emit(r$1.LOAD, t2.text);
|
|
296
|
+
else if (s__namespace.isCallExpression(t2)) {
|
|
297
|
+
if (s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "JSON" && t2.expression.name.text === "parse")
|
|
298
|
+
t2.arguments.length > 0 && a2(t2.arguments[0]), e2.emit(r$1.JSON_PARSE);
|
|
299
|
+
else if (s__namespace.isIdentifier(t2.expression) && t2.expression.text === "CC")
|
|
300
|
+
t2.arguments.length > 0 && a2(t2.arguments[0]), e2.emit(r$1.CC);
|
|
301
|
+
else if (s__namespace.isPropertyAccessExpression(t2.expression)) {
|
|
302
|
+
const i2 = t2.expression.name.text;
|
|
303
|
+
i2 === "substring" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.STRING_SUBSTRING)) : i2 === "indexOf" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_INDEXOF)) : i2 === "split" && (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_SPLIT));
|
|
304
|
+
}
|
|
305
|
+
} else if (s__namespace.isParenthesizedExpression(t2))
|
|
306
|
+
a2(t2.expression);
|
|
232
307
|
else if (s__namespace.isBinaryExpression(t2)) {
|
|
233
|
-
const
|
|
234
|
-
switch (
|
|
308
|
+
const i2 = t2.operatorToken.kind;
|
|
309
|
+
switch (a2(t2.left), a2(t2.right), i2) {
|
|
235
310
|
case s__namespace.SyntaxKind.PlusToken:
|
|
236
|
-
|
|
311
|
+
E$1(t2.left, t2.right) ? e2.emit(r$1.CONCAT) : e2.emit(r$1.ADD);
|
|
237
312
|
break;
|
|
238
313
|
case s__namespace.SyntaxKind.MinusToken:
|
|
239
|
-
|
|
314
|
+
e2.emit(r$1.SUB);
|
|
240
315
|
break;
|
|
241
316
|
case s__namespace.SyntaxKind.AsteriskToken:
|
|
242
|
-
|
|
317
|
+
e2.emit(r$1.MUL);
|
|
243
318
|
break;
|
|
244
319
|
case s__namespace.SyntaxKind.SlashToken:
|
|
245
|
-
|
|
320
|
+
e2.emit(r$1.DIV);
|
|
246
321
|
break;
|
|
247
322
|
case s__namespace.SyntaxKind.PercentToken:
|
|
248
|
-
|
|
323
|
+
e2.emit(r$1.MOD);
|
|
249
324
|
break;
|
|
250
325
|
case s__namespace.SyntaxKind.EqualsEqualsToken:
|
|
251
|
-
|
|
326
|
+
e2.emit(r$1.EQ);
|
|
252
327
|
break;
|
|
253
328
|
case s__namespace.SyntaxKind.ExclamationEqualsToken:
|
|
254
|
-
|
|
329
|
+
e2.emit(r$1.NEQ);
|
|
255
330
|
break;
|
|
256
331
|
case s__namespace.SyntaxKind.LessThanToken:
|
|
257
|
-
|
|
332
|
+
e2.emit(r$1.LT);
|
|
258
333
|
break;
|
|
259
334
|
case s__namespace.SyntaxKind.GreaterThanToken:
|
|
260
|
-
|
|
335
|
+
e2.emit(r$1.GT);
|
|
261
336
|
break;
|
|
262
337
|
case s__namespace.SyntaxKind.LessThanEqualsToken:
|
|
263
|
-
|
|
338
|
+
e2.emit(r$1.LTE);
|
|
264
339
|
break;
|
|
265
340
|
case s__namespace.SyntaxKind.GreaterThanEqualsToken:
|
|
266
|
-
|
|
341
|
+
e2.emit(r$1.GTE);
|
|
267
342
|
break;
|
|
268
343
|
case s__namespace.SyntaxKind.EqualsEqualsEqualsToken:
|
|
269
|
-
|
|
344
|
+
e2.emit(r$1.EQ_STRICT);
|
|
270
345
|
break;
|
|
271
346
|
case s__namespace.SyntaxKind.ExclamationEqualsEqualsToken:
|
|
272
|
-
|
|
347
|
+
e2.emit(r$1.NEQ_STRICT);
|
|
273
348
|
break;
|
|
274
349
|
case s__namespace.SyntaxKind.AmpersandAmpersandToken:
|
|
275
|
-
|
|
350
|
+
e2.emit(r$1.AND);
|
|
276
351
|
break;
|
|
277
352
|
case s__namespace.SyntaxKind.BarBarToken:
|
|
278
|
-
|
|
353
|
+
e2.emit(r$1.OR);
|
|
279
354
|
break;
|
|
280
355
|
}
|
|
281
356
|
} else if (s__namespace.isPrefixUnaryExpression(t2))
|
|
282
357
|
switch (t2.operator) {
|
|
283
358
|
case s__namespace.SyntaxKind.ExclamationToken:
|
|
284
|
-
|
|
359
|
+
a2(t2.operand), e2.emit(r$1.NOT);
|
|
360
|
+
break;
|
|
361
|
+
case s__namespace.SyntaxKind.MinusToken:
|
|
362
|
+
a2(t2.operand), e2.emit(r$1.UNARY_MINUS);
|
|
363
|
+
break;
|
|
364
|
+
case s__namespace.SyntaxKind.PlusToken:
|
|
365
|
+
a2(t2.operand), e2.emit(r$1.UNARY_PLUS);
|
|
366
|
+
break;
|
|
367
|
+
case s__namespace.SyntaxKind.PlusPlusToken:
|
|
368
|
+
s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.INC, false));
|
|
369
|
+
break;
|
|
370
|
+
case s__namespace.SyntaxKind.MinusMinusToken:
|
|
371
|
+
s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.DEC, false));
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
else if (s__namespace.isPostfixUnaryExpression(t2))
|
|
375
|
+
switch (t2.operator) {
|
|
376
|
+
case s__namespace.SyntaxKind.PlusPlusToken:
|
|
377
|
+
s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.INC, true));
|
|
378
|
+
break;
|
|
379
|
+
case s__namespace.SyntaxKind.MinusMinusToken:
|
|
380
|
+
s__namespace.isIdentifier(t2.operand) && (e2.emit(r$1.PUSH, t2.operand.text), e2.emit(r$1.DEC, true));
|
|
285
381
|
break;
|
|
286
382
|
}
|
|
287
|
-
else s__namespace.isTypeOfExpression(t2)
|
|
383
|
+
else if (s__namespace.isTypeOfExpression(t2))
|
|
384
|
+
a2(t2.expression), e2.emit(r$1.TYPEOF);
|
|
385
|
+
else if (s__namespace.isConditionalExpression(t2)) {
|
|
386
|
+
a2(t2.condition);
|
|
387
|
+
const i2 = e2.emit(r$1.JUMP_IF_FALSE, -1);
|
|
388
|
+
a2(t2.whenTrue);
|
|
389
|
+
const c2 = e2.emit(r$1.JUMP, -1), o2 = e2.currentAddress();
|
|
390
|
+
e2.patchJump(i2, o2), a2(t2.whenFalse);
|
|
391
|
+
const m2 = e2.currentAddress();
|
|
392
|
+
e2.patchJump(c2, m2);
|
|
393
|
+
}
|
|
288
394
|
}
|
|
289
395
|
return x.forEachChild((t2) => {
|
|
290
|
-
var
|
|
291
|
-
s__namespace.isFunctionDeclaration(t2) && ((
|
|
292
|
-
|
|
396
|
+
var i2;
|
|
397
|
+
s__namespace.isFunctionDeclaration(t2) && ((i2 = t2.name) == null ? void 0 : i2.text) === "main" && t2.body && t2.body.statements.forEach((c2) => {
|
|
398
|
+
u2(c2);
|
|
293
399
|
});
|
|
294
|
-
}),
|
|
400
|
+
}), e2.emit(r$1.HALT), {
|
|
295
401
|
success: true,
|
|
296
|
-
bytecode:
|
|
402
|
+
bytecode: e2.getBytecode(),
|
|
297
403
|
errors: []
|
|
298
404
|
};
|
|
299
405
|
}
|
|
300
|
-
function
|
|
301
|
-
return !!(s__namespace.isStringLiteral(
|
|
406
|
+
function E$1(n2, l2) {
|
|
407
|
+
return !!(s__namespace.isStringLiteral(n2) || s__namespace.isStringLiteral(l2) || s__namespace.isBinaryExpression(n2) && n2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E$1(n2.left, n2.right) || s__namespace.isBinaryExpression(l2) && l2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E$1(l2.left, l2.right));
|
|
302
408
|
}
|
|
303
409
|
function n(r2) {
|
|
304
410
|
return typeof r2 == "string";
|
|
@@ -312,35 +418,42 @@ function i$1(r2) {
|
|
|
312
418
|
function f(r2) {
|
|
313
419
|
return r2 === null;
|
|
314
420
|
}
|
|
315
|
-
function
|
|
421
|
+
function e(r2) {
|
|
316
422
|
return r2 !== null && typeof r2 == "object" && "type" in r2 && r2.type === "array";
|
|
317
423
|
}
|
|
318
|
-
function
|
|
319
|
-
return
|
|
424
|
+
function o$1(r2) {
|
|
425
|
+
return r2 !== null && typeof r2 == "object" && "type" in r2 && r2.type === "undefined";
|
|
320
426
|
}
|
|
321
427
|
function c(r2) {
|
|
322
|
-
return
|
|
428
|
+
return n(r2) ? r2 : t(r2) || i$1(r2) ? r2.toString() : f(r2) ? "null" : o$1(r2) ? "undefined" : e(r2) ? `[array:${r2.elements.length}]` : String(r2);
|
|
429
|
+
}
|
|
430
|
+
function y(r2) {
|
|
431
|
+
return i$1(r2) ? r2 : f(r2) || o$1(r2) ? false : t(r2) ? r2 !== 0 : n(r2) ? r2 !== "" : e(r2) ? true : !!r2;
|
|
323
432
|
}
|
|
324
433
|
function m(r2) {
|
|
325
|
-
return n(r2) ? "string" : t(r2) ? "number" : i$1(r2) ? "boolean" : f(r2) ? "null" : o$1(r2) ? "array" : "unknown";
|
|
434
|
+
return n(r2) ? "string" : t(r2) ? "number" : i$1(r2) ? "boolean" : f(r2) ? "null" : o$1(r2) ? "undefined" : e(r2) ? "array" : "unknown";
|
|
326
435
|
}
|
|
327
|
-
function
|
|
436
|
+
function d(r2) {
|
|
328
437
|
if (t(r2)) return r2;
|
|
329
438
|
if (i$1(r2)) return r2 ? 1 : 0;
|
|
330
439
|
if (f(r2)) return 0;
|
|
440
|
+
if (o$1(r2)) return NaN;
|
|
331
441
|
if (n(r2)) {
|
|
332
|
-
const
|
|
333
|
-
return
|
|
442
|
+
const u2 = r2.trim();
|
|
443
|
+
return u2 === "" ? 0 : Number(u2);
|
|
334
444
|
}
|
|
335
|
-
return
|
|
445
|
+
return e(r2) ? NaN : Number(r2);
|
|
336
446
|
}
|
|
337
|
-
function
|
|
447
|
+
function p$1(r2 = []) {
|
|
338
448
|
return { type: "array", elements: r2 };
|
|
339
449
|
}
|
|
450
|
+
function s() {
|
|
451
|
+
return { type: "undefined" };
|
|
452
|
+
}
|
|
340
453
|
var l = Object.defineProperty;
|
|
341
454
|
var u = (s2, t2, n2) => t2 in s2 ? l(s2, t2, { enumerable: true, configurable: true, writable: true, value: n2 }) : s2[t2] = n2;
|
|
342
455
|
var r = (s2, t2, n2) => u(s2, typeof t2 != "symbol" ? t2 + "" : t2, n2);
|
|
343
|
-
class
|
|
456
|
+
class h {
|
|
344
457
|
constructor(t2) {
|
|
345
458
|
r(this, "connected", false);
|
|
346
459
|
r(this, "programsDir");
|
|
@@ -359,44 +472,44 @@ class h2 {
|
|
|
359
472
|
}
|
|
360
473
|
async saveProgram(t2) {
|
|
361
474
|
if (!this.connected) throw new Error("Not connected");
|
|
362
|
-
const n2 = c__namespace.join(this.programsDir, `${t2.id}.json`),
|
|
363
|
-
await fs.promises.writeFile(n2,
|
|
475
|
+
const n2 = c__namespace.join(this.programsDir, `${t2.id}.json`), e2 = JSON.stringify(t2, null, 2);
|
|
476
|
+
await fs.promises.writeFile(n2, e2, "utf-8");
|
|
364
477
|
}
|
|
365
478
|
async getProgram(t2) {
|
|
366
479
|
if (!this.connected) throw new Error("Not connected");
|
|
367
480
|
const n2 = c__namespace.join(this.programsDir, `${t2}.json`);
|
|
368
481
|
try {
|
|
369
|
-
const
|
|
482
|
+
const e2 = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
|
|
370
483
|
return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
|
|
371
|
-
} catch (
|
|
372
|
-
if (
|
|
484
|
+
} catch (e2) {
|
|
485
|
+
if (e2.code === "ENOENT")
|
|
373
486
|
return null;
|
|
374
|
-
throw
|
|
487
|
+
throw e2;
|
|
375
488
|
}
|
|
376
489
|
}
|
|
377
490
|
async saveExecution(t2) {
|
|
378
491
|
if (!this.connected) throw new Error("Not connected");
|
|
379
|
-
const n2 = c__namespace.join(this.executionsDir, `${t2.id}.json`),
|
|
380
|
-
await fs.promises.writeFile(n2,
|
|
492
|
+
const n2 = c__namespace.join(this.executionsDir, `${t2.id}.json`), e2 = JSON.stringify(t2, null, 2);
|
|
493
|
+
await fs.promises.writeFile(n2, e2, "utf-8");
|
|
381
494
|
}
|
|
382
495
|
async getExecution(t2) {
|
|
383
496
|
if (!this.connected) throw new Error("Not connected");
|
|
384
497
|
const n2 = c__namespace.join(this.executionsDir, `${t2}.json`);
|
|
385
498
|
try {
|
|
386
|
-
const
|
|
499
|
+
const e2 = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
|
|
387
500
|
return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
|
|
388
|
-
} catch (
|
|
389
|
-
if (
|
|
501
|
+
} catch (e2) {
|
|
502
|
+
if (e2.code === "ENOENT")
|
|
390
503
|
return null;
|
|
391
|
-
throw
|
|
504
|
+
throw e2;
|
|
392
505
|
}
|
|
393
506
|
}
|
|
394
507
|
async appendOutput(t2, n2) {
|
|
395
508
|
if (!this.connected) throw new Error("Not connected");
|
|
396
|
-
const
|
|
509
|
+
const e2 = c__namespace.join(this.outputsDir, `${t2}.output`), o2 = n2.join(`
|
|
397
510
|
`) + `
|
|
398
511
|
`;
|
|
399
|
-
await fs.promises.appendFile(
|
|
512
|
+
await fs.promises.appendFile(e2, o2, "utf-8");
|
|
400
513
|
}
|
|
401
514
|
async getOutput(t2) {
|
|
402
515
|
if (!this.connected) throw new Error("Not connected");
|
|
@@ -404,10 +517,10 @@ class h2 {
|
|
|
404
517
|
try {
|
|
405
518
|
return (await fs.promises.readFile(n2, "utf-8")).split(`
|
|
406
519
|
`).filter((o2) => o2.length > 0);
|
|
407
|
-
} catch (
|
|
408
|
-
if (
|
|
520
|
+
} catch (e2) {
|
|
521
|
+
if (e2.code === "ENOENT")
|
|
409
522
|
return [];
|
|
410
|
-
throw
|
|
523
|
+
throw e2;
|
|
411
524
|
}
|
|
412
525
|
}
|
|
413
526
|
}
|
|
@@ -423,8 +536,8 @@ class p {
|
|
|
423
536
|
await this.client.connect();
|
|
424
537
|
const t2 = ((o2 = this.connectionString.split("/").pop()) == null ? void 0 : o2.split("?")[0]) || "cvm";
|
|
425
538
|
this.db = this.client.db(t2), this.connected = true;
|
|
426
|
-
const
|
|
427
|
-
|
|
539
|
+
const e2 = (await this.db.listCollections().toArray()).map((a2) => a2.name);
|
|
540
|
+
e2.includes("programs") || await this.db.createCollection("programs"), e2.includes("executions") || await this.db.createCollection("executions"), e2.includes("outputs") || await this.db.createCollection("outputs");
|
|
428
541
|
}
|
|
429
542
|
async disconnect() {
|
|
430
543
|
await this.client.close(), this.connected = false, this.db = null;
|
|
@@ -461,15 +574,15 @@ class p {
|
|
|
461
574
|
return await this.getCollection("executions").findOne({ id: t2 });
|
|
462
575
|
}
|
|
463
576
|
async appendOutput(t2, n2) {
|
|
464
|
-
const
|
|
465
|
-
await
|
|
577
|
+
const e2 = this.getCollection("outputs");
|
|
578
|
+
await e2.findOne({ executionId: t2 }) ? await e2.updateOne(
|
|
466
579
|
{ executionId: t2 },
|
|
467
580
|
{ $push: { lines: { $each: n2 } } }
|
|
468
|
-
) : await
|
|
581
|
+
) : await e2.insertOne({ executionId: t2, lines: n2 });
|
|
469
582
|
}
|
|
470
583
|
async getOutput(t2) {
|
|
471
|
-
const
|
|
472
|
-
return (
|
|
584
|
+
const e2 = await this.getCollection("outputs").findOne({ executionId: t2 });
|
|
585
|
+
return (e2 == null ? void 0 : e2.lines) || [];
|
|
473
586
|
}
|
|
474
587
|
}
|
|
475
588
|
class g {
|
|
@@ -477,22 +590,22 @@ class g {
|
|
|
477
590
|
const n2 = (t2 == null ? void 0 : t2.type) || process.env.CVM_STORAGE_TYPE || "file";
|
|
478
591
|
switch (n2) {
|
|
479
592
|
case "file": {
|
|
480
|
-
const
|
|
481
|
-
return new
|
|
593
|
+
const e2 = (t2 == null ? void 0 : t2.dataDir) || process.env.CVM_DATA_DIR || ".cvm";
|
|
594
|
+
return new h(e2);
|
|
482
595
|
}
|
|
483
596
|
case "mongodb": {
|
|
484
|
-
const
|
|
485
|
-
return new p(
|
|
597
|
+
const e2 = (t2 == null ? void 0 : t2.mongoUri) || process.env.MONGODB_URI || "mongodb://localhost:27017/cvm";
|
|
598
|
+
return new p(e2);
|
|
486
599
|
}
|
|
487
600
|
default:
|
|
488
601
|
throw new Error(`Unsupported storage type: ${n2}`);
|
|
489
602
|
}
|
|
490
603
|
}
|
|
491
604
|
}
|
|
492
|
-
var
|
|
493
|
-
var
|
|
494
|
-
var
|
|
495
|
-
class
|
|
605
|
+
var P = Object.defineProperty;
|
|
606
|
+
var O = (h2, a2, s2) => a2 in h2 ? P(h2, a2, { enumerable: true, configurable: true, writable: true, value: s2 }) : h2[a2] = s2;
|
|
607
|
+
var E = (h2, a2, s2) => O(h2, typeof a2 != "symbol" ? a2 + "" : a2, s2);
|
|
608
|
+
class w {
|
|
496
609
|
execute(a2, s$12) {
|
|
497
610
|
const r2 = {
|
|
498
611
|
pc: (s$12 == null ? void 0 : s$12.pc) ?? 0,
|
|
@@ -504,79 +617,78 @@ class E {
|
|
|
504
617
|
...s$12
|
|
505
618
|
};
|
|
506
619
|
for (; r2.status === "running" && r2.pc < a2.length; ) {
|
|
507
|
-
const
|
|
508
|
-
switch (
|
|
509
|
-
case
|
|
620
|
+
const n$1 = a2[r2.pc];
|
|
621
|
+
switch (n$1.op) {
|
|
622
|
+
case r$1.HALT:
|
|
510
623
|
r2.status = "complete";
|
|
511
624
|
break;
|
|
512
|
-
case
|
|
513
|
-
r2.stack.push(
|
|
625
|
+
case r$1.PUSH:
|
|
626
|
+
r2.stack.push(n$1.arg), r2.pc++;
|
|
514
627
|
break;
|
|
515
|
-
case
|
|
628
|
+
case r$1.PUSH_UNDEFINED:
|
|
629
|
+
r2.stack.push(s()), r2.pc++;
|
|
630
|
+
break;
|
|
631
|
+
case r$1.POP:
|
|
516
632
|
r2.stack.pop(), r2.pc++;
|
|
517
633
|
break;
|
|
518
|
-
case
|
|
519
|
-
const t2 =
|
|
520
|
-
|
|
521
|
-
r2.status = "error", r2.error = `LOAD: Variable '${t2}' is not defined`;
|
|
522
|
-
break;
|
|
523
|
-
}
|
|
524
|
-
r2.stack.push(r2.variables.get(t2)), r2.pc++;
|
|
634
|
+
case r$1.LOAD: {
|
|
635
|
+
const t2 = n$1.arg;
|
|
636
|
+
r2.variables.has(t2) ? r2.stack.push(r2.variables.get(t2)) : r2.stack.push(s()), r2.pc++;
|
|
525
637
|
break;
|
|
526
638
|
}
|
|
527
|
-
case
|
|
528
|
-
const
|
|
529
|
-
if (
|
|
639
|
+
case r$1.STORE:
|
|
640
|
+
const f$1 = r2.stack.pop();
|
|
641
|
+
if (f$1 === void 0) {
|
|
530
642
|
r2.status = "error", r2.error = "STORE: Stack underflow";
|
|
531
643
|
break;
|
|
532
644
|
}
|
|
533
|
-
r2.variables.set(
|
|
645
|
+
r2.variables.set(n$1.arg, f$1), r2.pc++;
|
|
534
646
|
break;
|
|
535
|
-
case
|
|
536
|
-
const
|
|
537
|
-
if (k2 === void 0 ||
|
|
647
|
+
case r$1.CONCAT:
|
|
648
|
+
const p2 = r2.stack.pop(), k2 = r2.stack.pop();
|
|
649
|
+
if (k2 === void 0 || p2 === void 0) {
|
|
538
650
|
r2.status = "error", r2.error = "CONCAT: Stack underflow";
|
|
539
651
|
break;
|
|
540
652
|
}
|
|
541
|
-
r2.stack.push(
|
|
653
|
+
r2.stack.push(c(k2) + c(p2)), r2.pc++;
|
|
542
654
|
break;
|
|
543
|
-
case
|
|
544
|
-
const
|
|
545
|
-
|
|
655
|
+
case r$1.PRINT:
|
|
656
|
+
const R2 = r2.stack.pop();
|
|
657
|
+
R2 !== void 0 && r2.output.push(c(R2)), r2.pc++;
|
|
546
658
|
break;
|
|
547
|
-
case
|
|
659
|
+
case r$1.CC: {
|
|
548
660
|
const t2 = r2.stack.pop();
|
|
549
661
|
if (t2 === void 0) {
|
|
550
662
|
r2.status = "error", r2.error = "CC: Stack underflow";
|
|
551
663
|
break;
|
|
552
664
|
}
|
|
553
|
-
r2.ccPrompt =
|
|
665
|
+
r2.ccPrompt = c(t2), r2.status = "waiting_cc";
|
|
554
666
|
break;
|
|
555
667
|
}
|
|
556
668
|
// Array operations
|
|
557
|
-
case
|
|
558
|
-
r2.stack.push(
|
|
669
|
+
case r$1.ARRAY_NEW:
|
|
670
|
+
r2.stack.push(p$1()), r2.pc++;
|
|
559
671
|
break;
|
|
560
|
-
case
|
|
561
|
-
const t2 = r2.stack.pop(), e = r2.stack.pop();
|
|
562
|
-
if (t2 === void 0 || e === void 0) {
|
|
672
|
+
case r$1.ARRAY_PUSH: {
|
|
673
|
+
const t2 = r2.stack.pop(), e$1 = r2.stack.pop();
|
|
674
|
+
if (t2 === void 0 || e$1 === void 0) {
|
|
563
675
|
r2.status = "error", r2.error = "ARRAY_PUSH: Stack underflow";
|
|
564
676
|
break;
|
|
565
677
|
}
|
|
566
|
-
if (!
|
|
678
|
+
if (!e(e$1)) {
|
|
567
679
|
r2.status = "error", r2.error = "ARRAY_PUSH requires an array";
|
|
568
680
|
break;
|
|
569
681
|
}
|
|
570
|
-
e.elements.push(t2), r2.stack.push(e), r2.pc++;
|
|
682
|
+
e$1.elements.push(t2), r2.stack.push(e$1), r2.pc++;
|
|
571
683
|
break;
|
|
572
684
|
}
|
|
573
|
-
case
|
|
574
|
-
const t$1 = r2.stack.pop(), e = r2.stack.pop();
|
|
575
|
-
if (t$1 === void 0 || e === void 0) {
|
|
685
|
+
case r$1.ARRAY_GET: {
|
|
686
|
+
const t$1 = r2.stack.pop(), e$1 = r2.stack.pop();
|
|
687
|
+
if (t$1 === void 0 || e$1 === void 0) {
|
|
576
688
|
r2.status = "error", r2.error = "ARRAY_GET: Stack underflow";
|
|
577
689
|
break;
|
|
578
690
|
}
|
|
579
|
-
if (!
|
|
691
|
+
if (!e(e$1)) {
|
|
580
692
|
r2.status = "error", r2.error = "ARRAY_GET requires an array";
|
|
581
693
|
break;
|
|
582
694
|
}
|
|
@@ -584,46 +696,46 @@ class E {
|
|
|
584
696
|
r2.status = "error", r2.error = "ARRAY_GET requires numeric index";
|
|
585
697
|
break;
|
|
586
698
|
}
|
|
587
|
-
const c2 = e.elements[t$1] ?? null;
|
|
699
|
+
const c2 = e$1.elements[t$1] ?? null;
|
|
588
700
|
r2.stack.push(c2), r2.pc++;
|
|
589
701
|
break;
|
|
590
702
|
}
|
|
591
|
-
case
|
|
592
|
-
const t$1 = r2.stack.pop(), e = r2.stack.pop(), c2 = r2.stack.pop();
|
|
593
|
-
if (t$1 === void 0 || e === void 0 || c2 === void 0) {
|
|
703
|
+
case r$1.ARRAY_SET: {
|
|
704
|
+
const t$1 = r2.stack.pop(), e$1 = r2.stack.pop(), c2 = r2.stack.pop();
|
|
705
|
+
if (t$1 === void 0 || e$1 === void 0 || c2 === void 0) {
|
|
594
706
|
r2.status = "error", r2.error = "ARRAY_SET: Stack underflow";
|
|
595
707
|
break;
|
|
596
708
|
}
|
|
597
|
-
if (!
|
|
709
|
+
if (!e(c2)) {
|
|
598
710
|
r2.status = "error", r2.error = "ARRAY_SET requires an array";
|
|
599
711
|
break;
|
|
600
712
|
}
|
|
601
|
-
if (!t(e)) {
|
|
713
|
+
if (!t(e$1)) {
|
|
602
714
|
r2.status = "error", r2.error = "ARRAY_SET requires numeric index";
|
|
603
715
|
break;
|
|
604
716
|
}
|
|
605
|
-
const
|
|
606
|
-
if (
|
|
717
|
+
const i2 = Math.floor(e$1);
|
|
718
|
+
if (i2 < 0) {
|
|
607
719
|
r2.status = "error", r2.error = "ARRAY_SET: Negative index not allowed";
|
|
608
720
|
break;
|
|
609
721
|
}
|
|
610
|
-
c2.elements[
|
|
722
|
+
c2.elements[i2] = t$1, r2.pc++;
|
|
611
723
|
break;
|
|
612
724
|
}
|
|
613
|
-
case
|
|
725
|
+
case r$1.ARRAY_LEN: {
|
|
614
726
|
const t2 = r2.stack.pop();
|
|
615
727
|
if (t2 === void 0) {
|
|
616
728
|
r2.status = "error", r2.error = "ARRAY_LEN: Stack underflow";
|
|
617
729
|
break;
|
|
618
730
|
}
|
|
619
|
-
if (!
|
|
731
|
+
if (!e(t2)) {
|
|
620
732
|
r2.status = "error", r2.error = "ARRAY_LEN requires an array";
|
|
621
733
|
break;
|
|
622
734
|
}
|
|
623
735
|
r2.stack.push(t2.elements.length), r2.pc++;
|
|
624
736
|
break;
|
|
625
737
|
}
|
|
626
|
-
case
|
|
738
|
+
case r$1.STRING_LEN: {
|
|
627
739
|
const t2 = r2.stack.pop();
|
|
628
740
|
if (t2 === void 0) {
|
|
629
741
|
r2.status = "error", r2.error = "STRING_LEN: Stack underflow";
|
|
@@ -636,7 +748,7 @@ class E {
|
|
|
636
748
|
r2.stack.push(t2.length), r2.pc++;
|
|
637
749
|
break;
|
|
638
750
|
}
|
|
639
|
-
case
|
|
751
|
+
case r$1.LENGTH: {
|
|
640
752
|
const t2 = r2.stack.pop();
|
|
641
753
|
if (t2 === void 0) {
|
|
642
754
|
r2.status = "error", r2.error = "LENGTH: Stack underflow";
|
|
@@ -644,7 +756,7 @@ class E {
|
|
|
644
756
|
}
|
|
645
757
|
if (n(t2))
|
|
646
758
|
r2.stack.push(t2.length);
|
|
647
|
-
else if (
|
|
759
|
+
else if (e(t2))
|
|
648
760
|
r2.stack.push(t2.elements.length);
|
|
649
761
|
else {
|
|
650
762
|
r2.status = "error", r2.error = "LENGTH requires a string or array";
|
|
@@ -653,7 +765,7 @@ class E {
|
|
|
653
765
|
r2.pc++;
|
|
654
766
|
break;
|
|
655
767
|
}
|
|
656
|
-
case
|
|
768
|
+
case r$1.JSON_PARSE: {
|
|
657
769
|
const t2 = r2.stack.pop();
|
|
658
770
|
if (t2 === void 0) {
|
|
659
771
|
r2.status = "error", r2.error = "JSON_PARSE: Stack underflow";
|
|
@@ -664,15 +776,15 @@ class E {
|
|
|
664
776
|
break;
|
|
665
777
|
}
|
|
666
778
|
try {
|
|
667
|
-
const
|
|
668
|
-
Array.isArray(
|
|
779
|
+
const e2 = JSON.parse(t2);
|
|
780
|
+
Array.isArray(e2) ? r2.stack.push(p$1(e2)) : r2.stack.push(p$1());
|
|
669
781
|
} catch {
|
|
670
|
-
r2.stack.push(
|
|
782
|
+
r2.stack.push(p$1());
|
|
671
783
|
}
|
|
672
784
|
r2.pc++;
|
|
673
785
|
break;
|
|
674
786
|
}
|
|
675
|
-
case
|
|
787
|
+
case r$1.TYPEOF: {
|
|
676
788
|
const t2 = r2.stack.pop();
|
|
677
789
|
if (t2 === void 0) {
|
|
678
790
|
r2.status = "error", r2.error = "TYPEOF: Stack underflow";
|
|
@@ -682,146 +794,205 @@ class E {
|
|
|
682
794
|
break;
|
|
683
795
|
}
|
|
684
796
|
// Arithmetic operations
|
|
685
|
-
case
|
|
686
|
-
const t2 = r2.stack.pop(),
|
|
687
|
-
if (
|
|
797
|
+
case r$1.ADD: {
|
|
798
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
799
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
688
800
|
r2.status = "error", r2.error = "ADD: Stack underflow";
|
|
689
801
|
break;
|
|
690
802
|
}
|
|
691
|
-
const c2 =
|
|
692
|
-
r2.stack.push(c2 +
|
|
803
|
+
const c2 = d(e2), i2 = d(t2);
|
|
804
|
+
r2.stack.push(c2 + i2), r2.pc++;
|
|
693
805
|
break;
|
|
694
806
|
}
|
|
695
|
-
case
|
|
696
|
-
const t2 = r2.stack.pop(),
|
|
697
|
-
if (
|
|
807
|
+
case r$1.SUB: {
|
|
808
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
809
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
698
810
|
r2.status = "error", r2.error = "SUB: Stack underflow";
|
|
699
811
|
break;
|
|
700
812
|
}
|
|
701
|
-
const c2 =
|
|
702
|
-
r2.stack.push(c2 -
|
|
813
|
+
const c2 = d(e2), i2 = d(t2);
|
|
814
|
+
r2.stack.push(c2 - i2), r2.pc++;
|
|
703
815
|
break;
|
|
704
816
|
}
|
|
705
|
-
case
|
|
706
|
-
const t2 = r2.stack.pop(),
|
|
707
|
-
if (
|
|
817
|
+
case r$1.MUL: {
|
|
818
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
819
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
708
820
|
r2.status = "error", r2.error = "MUL: Stack underflow";
|
|
709
821
|
break;
|
|
710
822
|
}
|
|
711
|
-
const c2 =
|
|
712
|
-
r2.stack.push(c2 *
|
|
823
|
+
const c2 = d(e2), i2 = d(t2);
|
|
824
|
+
r2.stack.push(c2 * i2), r2.pc++;
|
|
713
825
|
break;
|
|
714
826
|
}
|
|
715
|
-
case
|
|
716
|
-
const t2 = r2.stack.pop(),
|
|
717
|
-
if (
|
|
827
|
+
case r$1.DIV: {
|
|
828
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
829
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
718
830
|
r2.status = "error", r2.error = "DIV: Stack underflow";
|
|
719
831
|
break;
|
|
720
832
|
}
|
|
721
|
-
const c2 =
|
|
722
|
-
if (
|
|
833
|
+
const c2 = d(e2), i2 = d(t2);
|
|
834
|
+
if (i2 === 0) {
|
|
723
835
|
r2.status = "error", r2.error = "Division by zero";
|
|
724
836
|
break;
|
|
725
837
|
}
|
|
726
|
-
r2.stack.push(c2 /
|
|
838
|
+
r2.stack.push(c2 / i2), r2.pc++;
|
|
727
839
|
break;
|
|
728
840
|
}
|
|
729
|
-
case
|
|
730
|
-
const t2 = r2.stack.pop(),
|
|
731
|
-
if (
|
|
841
|
+
case r$1.MOD: {
|
|
842
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
843
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
732
844
|
r2.status = "error", r2.error = "MOD: Stack underflow";
|
|
733
845
|
break;
|
|
734
846
|
}
|
|
735
|
-
const c2 =
|
|
736
|
-
r2.stack.push(c2 %
|
|
847
|
+
const c2 = d(e2), i2 = d(t2);
|
|
848
|
+
r2.stack.push(c2 % i2), r2.pc++;
|
|
849
|
+
break;
|
|
850
|
+
}
|
|
851
|
+
// Unary operations
|
|
852
|
+
case r$1.UNARY_MINUS: {
|
|
853
|
+
const t2 = r2.stack.pop();
|
|
854
|
+
if (t2 === void 0) {
|
|
855
|
+
r2.status = "error", r2.error = "UNARY_MINUS: Stack underflow";
|
|
856
|
+
break;
|
|
857
|
+
}
|
|
858
|
+
const e2 = d(t2);
|
|
859
|
+
r2.stack.push(-e2), r2.pc++;
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
case r$1.UNARY_PLUS: {
|
|
863
|
+
const t2 = r2.stack.pop();
|
|
864
|
+
if (t2 === void 0) {
|
|
865
|
+
r2.status = "error", r2.error = "UNARY_PLUS: Stack underflow";
|
|
866
|
+
break;
|
|
867
|
+
}
|
|
868
|
+
const e2 = d(t2);
|
|
869
|
+
r2.stack.push(e2), r2.pc++;
|
|
870
|
+
break;
|
|
871
|
+
}
|
|
872
|
+
case r$1.INC: {
|
|
873
|
+
const t2 = r2.stack.pop();
|
|
874
|
+
if (t2 === void 0 || typeof t2 != "string") {
|
|
875
|
+
r2.status = "error", r2.error = "INC: Invalid variable name";
|
|
876
|
+
break;
|
|
877
|
+
}
|
|
878
|
+
const e2 = r2.variables.get(t2) ?? 0, c2 = d(e2) + 1;
|
|
879
|
+
r2.variables.set(t2, c2);
|
|
880
|
+
const i2 = n$1.arg === true;
|
|
881
|
+
r2.stack.push(i2 ? d(e2) : c2), r2.pc++;
|
|
882
|
+
break;
|
|
883
|
+
}
|
|
884
|
+
case r$1.DEC: {
|
|
885
|
+
const t2 = r2.stack.pop();
|
|
886
|
+
if (t2 === void 0 || typeof t2 != "string") {
|
|
887
|
+
r2.status = "error", r2.error = "DEC: Invalid variable name";
|
|
888
|
+
break;
|
|
889
|
+
}
|
|
890
|
+
const e2 = r2.variables.get(t2) ?? 0, c2 = d(e2) - 1;
|
|
891
|
+
r2.variables.set(t2, c2);
|
|
892
|
+
const i2 = n$1.arg === true;
|
|
893
|
+
r2.stack.push(i2 ? d(e2) : c2), r2.pc++;
|
|
737
894
|
break;
|
|
738
895
|
}
|
|
739
896
|
// Comparison operations
|
|
740
|
-
case
|
|
741
|
-
const t2 = r2.stack.pop(),
|
|
742
|
-
if (
|
|
897
|
+
case r$1.EQ: {
|
|
898
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
899
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
743
900
|
r2.status = "error", r2.error = "EQ: Stack underflow";
|
|
744
901
|
break;
|
|
745
902
|
}
|
|
746
|
-
|
|
747
|
-
|
|
903
|
+
if (f(e2) && o$1(t2) || o$1(e2) && f(t2))
|
|
904
|
+
r2.stack.push(true);
|
|
905
|
+
else if (o$1(e2) && o$1(t2))
|
|
906
|
+
r2.stack.push(true);
|
|
907
|
+
else {
|
|
908
|
+
const c$12 = d(e2), i2 = d(t2);
|
|
909
|
+
!isNaN(c$12) && !isNaN(i2) ? r2.stack.push(c$12 === i2) : r2.stack.push(c(e2) === c(t2));
|
|
910
|
+
}
|
|
911
|
+
r2.pc++;
|
|
748
912
|
break;
|
|
749
913
|
}
|
|
750
|
-
case
|
|
751
|
-
const t2 = r2.stack.pop(),
|
|
752
|
-
if (
|
|
914
|
+
case r$1.NEQ: {
|
|
915
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
916
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
753
917
|
r2.status = "error", r2.error = "NEQ: Stack underflow";
|
|
754
918
|
break;
|
|
755
919
|
}
|
|
756
|
-
|
|
757
|
-
|
|
920
|
+
if (f(e2) && o$1(t2) || o$1(e2) && f(t2))
|
|
921
|
+
r2.stack.push(false);
|
|
922
|
+
else if (o$1(e2) && o$1(t2))
|
|
923
|
+
r2.stack.push(false);
|
|
924
|
+
else {
|
|
925
|
+
const c$12 = d(e2), i2 = d(t2);
|
|
926
|
+
!isNaN(c$12) && !isNaN(i2) ? r2.stack.push(c$12 !== i2) : r2.stack.push(c(e2) !== c(t2));
|
|
927
|
+
}
|
|
928
|
+
r2.pc++;
|
|
758
929
|
break;
|
|
759
930
|
}
|
|
760
|
-
case
|
|
761
|
-
const t2 = r2.stack.pop(),
|
|
762
|
-
if (
|
|
931
|
+
case r$1.LT: {
|
|
932
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
933
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
763
934
|
r2.status = "error", r2.error = "LT: Stack underflow";
|
|
764
935
|
break;
|
|
765
936
|
}
|
|
766
|
-
const c2 =
|
|
767
|
-
r2.stack.push(c2 <
|
|
937
|
+
const c2 = d(e2), i2 = d(t2);
|
|
938
|
+
r2.stack.push(c2 < i2), r2.pc++;
|
|
768
939
|
break;
|
|
769
940
|
}
|
|
770
|
-
case
|
|
771
|
-
const t2 = r2.stack.pop(),
|
|
772
|
-
if (
|
|
941
|
+
case r$1.GT: {
|
|
942
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
943
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
773
944
|
r2.status = "error", r2.error = "GT: Stack underflow";
|
|
774
945
|
break;
|
|
775
946
|
}
|
|
776
|
-
const c2 =
|
|
777
|
-
r2.stack.push(c2 >
|
|
947
|
+
const c2 = d(e2), i2 = d(t2);
|
|
948
|
+
r2.stack.push(c2 > i2), r2.pc++;
|
|
778
949
|
break;
|
|
779
950
|
}
|
|
780
|
-
case
|
|
781
|
-
const t2 = r2.stack.pop(),
|
|
782
|
-
if (
|
|
951
|
+
case r$1.LTE: {
|
|
952
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
953
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
783
954
|
r2.status = "error", r2.error = "LTE: Stack underflow";
|
|
784
955
|
break;
|
|
785
956
|
}
|
|
786
|
-
const c2 =
|
|
787
|
-
r2.stack.push(c2 <=
|
|
957
|
+
const c2 = d(e2), i2 = d(t2);
|
|
958
|
+
r2.stack.push(c2 <= i2), r2.pc++;
|
|
788
959
|
break;
|
|
789
960
|
}
|
|
790
|
-
case
|
|
791
|
-
const t2 = r2.stack.pop(),
|
|
792
|
-
if (
|
|
961
|
+
case r$1.GTE: {
|
|
962
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
963
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
793
964
|
r2.status = "error", r2.error = "GTE: Stack underflow";
|
|
794
965
|
break;
|
|
795
966
|
}
|
|
796
|
-
const c2 =
|
|
797
|
-
r2.stack.push(c2 >=
|
|
967
|
+
const c2 = d(e2), i2 = d(t2);
|
|
968
|
+
r2.stack.push(c2 >= i2), r2.pc++;
|
|
798
969
|
break;
|
|
799
970
|
}
|
|
800
|
-
case
|
|
801
|
-
const t2 = r2.stack.pop(),
|
|
802
|
-
if (
|
|
971
|
+
case r$1.EQ_STRICT: {
|
|
972
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
973
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
803
974
|
r2.status = "error", r2.error = "EQ_STRICT: Stack underflow";
|
|
804
975
|
break;
|
|
805
976
|
}
|
|
806
|
-
r2.stack.push(
|
|
977
|
+
r2.stack.push(e2 === t2), r2.pc++;
|
|
807
978
|
break;
|
|
808
979
|
}
|
|
809
|
-
case
|
|
810
|
-
const t2 = r2.stack.pop(),
|
|
811
|
-
if (
|
|
980
|
+
case r$1.NEQ_STRICT: {
|
|
981
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
982
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
812
983
|
r2.status = "error", r2.error = "NEQ_STRICT: Stack underflow";
|
|
813
984
|
break;
|
|
814
985
|
}
|
|
815
|
-
r2.stack.push(
|
|
986
|
+
r2.stack.push(e2 !== t2), r2.pc++;
|
|
816
987
|
break;
|
|
817
988
|
}
|
|
818
989
|
// Jump operations
|
|
819
|
-
case
|
|
820
|
-
if (
|
|
990
|
+
case r$1.JUMP: {
|
|
991
|
+
if (n$1.arg === void 0) {
|
|
821
992
|
r2.status = "error", r2.error = "JUMP requires a target address";
|
|
822
993
|
break;
|
|
823
994
|
}
|
|
824
|
-
const t2 =
|
|
995
|
+
const t2 = n$1.arg;
|
|
825
996
|
if (t2 < 0 || t2 >= a2.length) {
|
|
826
997
|
r2.status = "error", r2.error = `Invalid jump target: ${t2}`;
|
|
827
998
|
break;
|
|
@@ -829,25 +1000,25 @@ class E {
|
|
|
829
1000
|
r2.pc = t2;
|
|
830
1001
|
break;
|
|
831
1002
|
}
|
|
832
|
-
case
|
|
1003
|
+
case r$1.JUMP_IF_FALSE: {
|
|
833
1004
|
const t2 = r2.stack.pop();
|
|
834
1005
|
if (t2 === void 0) {
|
|
835
1006
|
r2.status = "error", r2.error = "JUMP_IF_FALSE: Stack underflow";
|
|
836
1007
|
break;
|
|
837
1008
|
}
|
|
838
|
-
if (
|
|
1009
|
+
if (n$1.arg === void 0) {
|
|
839
1010
|
r2.status = "error", r2.error = "JUMP_IF_FALSE requires a target address";
|
|
840
1011
|
break;
|
|
841
1012
|
}
|
|
842
|
-
const
|
|
843
|
-
if (
|
|
844
|
-
r2.status = "error", r2.error = `Invalid jump target: ${
|
|
1013
|
+
const e2 = n$1.arg;
|
|
1014
|
+
if (e2 < 0 || e2 >= a2.length) {
|
|
1015
|
+
r2.status = "error", r2.error = `Invalid jump target: ${e2}`;
|
|
845
1016
|
break;
|
|
846
1017
|
}
|
|
847
|
-
|
|
1018
|
+
y(t2) ? r2.pc++ : r2.pc = e2;
|
|
848
1019
|
break;
|
|
849
1020
|
}
|
|
850
|
-
case
|
|
1021
|
+
case r$1.ITER_START: {
|
|
851
1022
|
if (r2.stack.length === 0) {
|
|
852
1023
|
r2.status = "error", r2.error = "ITER_START: Stack underflow";
|
|
853
1024
|
break;
|
|
@@ -857,7 +1028,7 @@ class E {
|
|
|
857
1028
|
r2.status = "error", r2.error = "TypeError: Cannot iterate over null or undefined";
|
|
858
1029
|
break;
|
|
859
1030
|
}
|
|
860
|
-
if (!
|
|
1031
|
+
if (!e(t2)) {
|
|
861
1032
|
r2.status = "error", r2.error = "TypeError: Cannot iterate over non-array value";
|
|
862
1033
|
break;
|
|
863
1034
|
}
|
|
@@ -865,14 +1036,14 @@ class E {
|
|
|
865
1036
|
r2.status = "error", r2.error = "RuntimeError: Maximum iterator depth exceeded";
|
|
866
1037
|
break;
|
|
867
1038
|
}
|
|
868
|
-
const e =
|
|
1039
|
+
const e$1 = p$1([...t2.elements]);
|
|
869
1040
|
r2.iterators.push({
|
|
870
|
-
array: e,
|
|
1041
|
+
array: e$1,
|
|
871
1042
|
index: 0
|
|
872
1043
|
}), r2.pc++;
|
|
873
1044
|
break;
|
|
874
1045
|
}
|
|
875
|
-
case
|
|
1046
|
+
case r$1.ITER_NEXT: {
|
|
876
1047
|
if (r2.iterators.length === 0) {
|
|
877
1048
|
r2.status = "error", r2.error = "ITER_NEXT: No active iterator";
|
|
878
1049
|
break;
|
|
@@ -881,7 +1052,7 @@ class E {
|
|
|
881
1052
|
t2.index < t2.array.elements.length ? (r2.stack.push(t2.array.elements[t2.index]), r2.stack.push(true), t2.index++) : (r2.stack.push(null), r2.stack.push(false)), r2.pc++;
|
|
882
1053
|
break;
|
|
883
1054
|
}
|
|
884
|
-
case
|
|
1055
|
+
case r$1.ITER_END: {
|
|
885
1056
|
if (r2.iterators.length === 0) {
|
|
886
1057
|
r2.status = "error", r2.error = "ITER_END: No active iterator";
|
|
887
1058
|
break;
|
|
@@ -890,40 +1061,116 @@ class E {
|
|
|
890
1061
|
break;
|
|
891
1062
|
}
|
|
892
1063
|
// Logical operators
|
|
893
|
-
case
|
|
894
|
-
const t2 = r2.stack.pop(),
|
|
895
|
-
if (
|
|
1064
|
+
case r$1.AND: {
|
|
1065
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
1066
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
896
1067
|
r2.status = "error", r2.error = "AND: Stack underflow";
|
|
897
1068
|
break;
|
|
898
1069
|
}
|
|
899
|
-
|
|
1070
|
+
y(e2) ? r2.stack.push(t2) : r2.stack.push(e2), r2.pc++;
|
|
900
1071
|
break;
|
|
901
1072
|
}
|
|
902
|
-
case
|
|
903
|
-
const t2 = r2.stack.pop(),
|
|
904
|
-
if (
|
|
1073
|
+
case r$1.OR: {
|
|
1074
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
1075
|
+
if (e2 === void 0 || t2 === void 0) {
|
|
905
1076
|
r2.status = "error", r2.error = "OR: Stack underflow";
|
|
906
1077
|
break;
|
|
907
1078
|
}
|
|
908
|
-
|
|
1079
|
+
y(e2) ? r2.stack.push(e2) : r2.stack.push(t2), r2.pc++;
|
|
909
1080
|
break;
|
|
910
1081
|
}
|
|
911
|
-
case
|
|
1082
|
+
case r$1.NOT: {
|
|
912
1083
|
const t2 = r2.stack.pop();
|
|
913
1084
|
if (t2 === void 0) {
|
|
914
1085
|
r2.status = "error", r2.error = "NOT: Stack underflow";
|
|
915
1086
|
break;
|
|
916
1087
|
}
|
|
917
|
-
r2.stack.push(!
|
|
1088
|
+
r2.stack.push(!y(t2)), r2.pc++;
|
|
918
1089
|
break;
|
|
919
1090
|
}
|
|
920
|
-
case
|
|
1091
|
+
case r$1.RETURN: {
|
|
921
1092
|
const t2 = r2.stack.pop() ?? null;
|
|
922
1093
|
r2.returnValue = t2, r2.status = "complete";
|
|
923
1094
|
break;
|
|
924
1095
|
}
|
|
1096
|
+
// String methods
|
|
1097
|
+
case r$1.STRING_SUBSTRING: {
|
|
1098
|
+
if (r2.stack.length < 2) {
|
|
1099
|
+
r2.status = "error", r2.error = "STRING_SUBSTRING: Stack underflow";
|
|
1100
|
+
break;
|
|
1101
|
+
}
|
|
1102
|
+
const t2 = r2.stack.length;
|
|
1103
|
+
let e2, c2, i2;
|
|
1104
|
+
const _ = r2.stack[t2 - 1], I2 = r2.stack[t2 - 2];
|
|
1105
|
+
if (t2 >= 3 && typeof _ == "number" && typeof I2 == "number" ? (i2 = r2.stack.pop(), c2 = r2.stack.pop(), e2 = r2.stack.pop()) : (c2 = r2.stack.pop(), e2 = r2.stack.pop(), i2 = void 0), !n(e2)) {
|
|
1106
|
+
r2.status = "error", r2.error = "STRING_SUBSTRING requires a string";
|
|
1107
|
+
break;
|
|
1108
|
+
}
|
|
1109
|
+
if (typeof c2 != "number") {
|
|
1110
|
+
r2.status = "error", r2.error = "STRING_SUBSTRING requires numeric start index";
|
|
1111
|
+
break;
|
|
1112
|
+
}
|
|
1113
|
+
const T = e2.length;
|
|
1114
|
+
c2 < 0 && (c2 = Math.max(0, T + c2)), i2 !== void 0 && i2 < 0 && (i2 = Math.max(0, T + i2));
|
|
1115
|
+
const y2 = i2 !== void 0 ? e2.substring(c2, i2) : e2.substring(c2);
|
|
1116
|
+
r2.stack.push(y2), r2.pc++;
|
|
1117
|
+
break;
|
|
1118
|
+
}
|
|
1119
|
+
case r$1.STRING_INDEXOF: {
|
|
1120
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
1121
|
+
if (t2 === void 0 || e2 === void 0) {
|
|
1122
|
+
r2.status = "error", r2.error = "STRING_INDEXOF: Stack underflow";
|
|
1123
|
+
break;
|
|
1124
|
+
}
|
|
1125
|
+
if (!n(e2) || !n(t2)) {
|
|
1126
|
+
r2.status = "error", r2.error = "STRING_INDEXOF requires string arguments";
|
|
1127
|
+
break;
|
|
1128
|
+
}
|
|
1129
|
+
r2.stack.push(e2.indexOf(t2)), r2.pc++;
|
|
1130
|
+
break;
|
|
1131
|
+
}
|
|
1132
|
+
case r$1.STRING_SPLIT: {
|
|
1133
|
+
const t2 = r2.stack.pop(), e2 = r2.stack.pop();
|
|
1134
|
+
if (t2 === void 0 || e2 === void 0) {
|
|
1135
|
+
r2.status = "error", r2.error = "STRING_SPLIT: Stack underflow";
|
|
1136
|
+
break;
|
|
1137
|
+
}
|
|
1138
|
+
if (!n(e2) || !n(t2)) {
|
|
1139
|
+
r2.status = "error", r2.error = "STRING_SPLIT requires string arguments";
|
|
1140
|
+
break;
|
|
1141
|
+
}
|
|
1142
|
+
let c2;
|
|
1143
|
+
t2 === "" ? c2 = e2.split("") : c2 = e2.split(t2), r2.stack.push(p$1(c2)), r2.pc++;
|
|
1144
|
+
break;
|
|
1145
|
+
}
|
|
1146
|
+
case r$1.BREAK: {
|
|
1147
|
+
if (n$1.arg === void 0) {
|
|
1148
|
+
r2.status = "error", r2.error = "BREAK requires a target address";
|
|
1149
|
+
break;
|
|
1150
|
+
}
|
|
1151
|
+
const t2 = n$1.arg;
|
|
1152
|
+
if (t2 < 0 || t2 >= a2.length) {
|
|
1153
|
+
r2.status = "error", r2.error = `Invalid break target: ${t2}`;
|
|
1154
|
+
break;
|
|
1155
|
+
}
|
|
1156
|
+
r2.pc = t2;
|
|
1157
|
+
break;
|
|
1158
|
+
}
|
|
1159
|
+
case r$1.CONTINUE: {
|
|
1160
|
+
if (n$1.arg === void 0) {
|
|
1161
|
+
r2.status = "error", r2.error = "CONTINUE requires a target address";
|
|
1162
|
+
break;
|
|
1163
|
+
}
|
|
1164
|
+
const t2 = n$1.arg;
|
|
1165
|
+
if (t2 < 0 || t2 >= a2.length) {
|
|
1166
|
+
r2.status = "error", r2.error = `Invalid continue target: ${t2}`;
|
|
1167
|
+
break;
|
|
1168
|
+
}
|
|
1169
|
+
r2.pc = t2;
|
|
1170
|
+
break;
|
|
1171
|
+
}
|
|
925
1172
|
default:
|
|
926
|
-
r2.status = "error", r2.error = `Unknown opcode: ${
|
|
1173
|
+
r2.status = "error", r2.error = `Unknown opcode: ${n$1.op} (type: ${typeof n$1.op})`;
|
|
927
1174
|
}
|
|
928
1175
|
}
|
|
929
1176
|
return r2;
|
|
@@ -931,20 +1178,20 @@ class E {
|
|
|
931
1178
|
resume(a2, s2, r2) {
|
|
932
1179
|
if (a2.status !== "waiting_cc")
|
|
933
1180
|
throw new Error("Cannot resume: VM not waiting for CC");
|
|
934
|
-
const
|
|
1181
|
+
const n2 = {
|
|
935
1182
|
...a2,
|
|
936
1183
|
stack: [...a2.stack, s2],
|
|
937
1184
|
status: "running",
|
|
938
1185
|
ccPrompt: void 0,
|
|
939
1186
|
pc: a2.pc + 1
|
|
940
1187
|
};
|
|
941
|
-
return this.execute(r2,
|
|
1188
|
+
return this.execute(r2, n2);
|
|
942
1189
|
}
|
|
943
1190
|
}
|
|
944
|
-
class
|
|
1191
|
+
class D {
|
|
945
1192
|
constructor(a2) {
|
|
946
|
-
|
|
947
|
-
|
|
1193
|
+
E(this, "vms", /* @__PURE__ */ new Map());
|
|
1194
|
+
E(this, "storage");
|
|
948
1195
|
a2 ? this.storage = a2 : this.storage = g.create();
|
|
949
1196
|
}
|
|
950
1197
|
/**
|
|
@@ -963,10 +1210,10 @@ class L {
|
|
|
963
1210
|
* Load and compile a program from source code
|
|
964
1211
|
*/
|
|
965
1212
|
async loadProgram(a2, s2) {
|
|
966
|
-
const r2 =
|
|
1213
|
+
const r2 = g$1(s2);
|
|
967
1214
|
if (!r2.success)
|
|
968
1215
|
throw new Error(`Compilation failed: ${r2.errors.join(", ")}`);
|
|
969
|
-
const
|
|
1216
|
+
const n2 = {
|
|
970
1217
|
id: a2,
|
|
971
1218
|
name: a2,
|
|
972
1219
|
source: s2,
|
|
@@ -974,7 +1221,7 @@ class L {
|
|
|
974
1221
|
// VM decides internal format
|
|
975
1222
|
created: /* @__PURE__ */ new Date()
|
|
976
1223
|
};
|
|
977
|
-
await this.storage.saveProgram(
|
|
1224
|
+
await this.storage.saveProgram(n2);
|
|
978
1225
|
}
|
|
979
1226
|
/**
|
|
980
1227
|
* Start execution of a loaded program
|
|
@@ -982,7 +1229,7 @@ class L {
|
|
|
982
1229
|
async startExecution(a2, s2) {
|
|
983
1230
|
if (!await this.storage.getProgram(a2))
|
|
984
1231
|
throw new Error(`Program not found: ${a2}`);
|
|
985
|
-
const
|
|
1232
|
+
const n2 = {
|
|
986
1233
|
id: s2,
|
|
987
1234
|
programId: a2,
|
|
988
1235
|
state: "READY",
|
|
@@ -991,8 +1238,8 @@ class L {
|
|
|
991
1238
|
variables: {},
|
|
992
1239
|
created: /* @__PURE__ */ new Date()
|
|
993
1240
|
};
|
|
994
|
-
await this.storage.saveExecution(
|
|
995
|
-
const f2 = new
|
|
1241
|
+
await this.storage.saveExecution(n2);
|
|
1242
|
+
const f2 = new w();
|
|
996
1243
|
this.vms.set(s2, f2);
|
|
997
1244
|
}
|
|
998
1245
|
/**
|
|
@@ -1007,29 +1254,29 @@ class L {
|
|
|
1007
1254
|
const r2 = await this.storage.getProgram(s2.programId);
|
|
1008
1255
|
if (!r2)
|
|
1009
1256
|
throw new Error(`Program not found: ${s2.programId}`);
|
|
1010
|
-
let
|
|
1011
|
-
|
|
1257
|
+
let n2 = this.vms.get(a2);
|
|
1258
|
+
n2 || (n2 = new w(), this.vms.set(a2, n2));
|
|
1012
1259
|
const f2 = {
|
|
1013
1260
|
pc: 0,
|
|
1014
1261
|
stack: [],
|
|
1015
1262
|
variables: /* @__PURE__ */ new Map(),
|
|
1016
1263
|
output: []
|
|
1017
|
-
},
|
|
1018
|
-
if (
|
|
1019
|
-
return s2.state = "COMPLETED",
|
|
1264
|
+
}, p2 = n2.execute(r2.bytecode, f2);
|
|
1265
|
+
if (p2.output.length > 0 && await this.storage.appendOutput(a2, p2.output), s2.pc = p2.pc, s2.stack = p2.stack, s2.variables = Object.fromEntries(p2.variables), p2.status === "complete")
|
|
1266
|
+
return s2.state = "COMPLETED", p2.returnValue !== void 0 && (s2.returnValue = p2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
|
|
1020
1267
|
type: "completed",
|
|
1021
1268
|
message: "Execution completed",
|
|
1022
|
-
result:
|
|
1269
|
+
result: p2.returnValue
|
|
1023
1270
|
};
|
|
1024
|
-
if (
|
|
1025
|
-
return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt =
|
|
1271
|
+
if (p2.status === "waiting_cc")
|
|
1272
|
+
return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = p2.ccPrompt, await this.storage.saveExecution(s2), {
|
|
1026
1273
|
type: "waiting",
|
|
1027
|
-
message:
|
|
1274
|
+
message: p2.ccPrompt || "Waiting for input"
|
|
1028
1275
|
};
|
|
1029
|
-
if (
|
|
1030
|
-
return s2.state = "ERROR", s2.error =
|
|
1276
|
+
if (p2.status === "error")
|
|
1277
|
+
return s2.state = "ERROR", s2.error = p2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
|
|
1031
1278
|
type: "error",
|
|
1032
|
-
error:
|
|
1279
|
+
error: p2.error
|
|
1033
1280
|
};
|
|
1034
1281
|
}
|
|
1035
1282
|
if (s2.state === "COMPLETED")
|
|
@@ -1056,12 +1303,12 @@ class L {
|
|
|
1056
1303
|
const r2 = await this.storage.getExecution(a2);
|
|
1057
1304
|
if (!r2)
|
|
1058
1305
|
throw new Error(`Execution not found: ${a2}`);
|
|
1059
|
-
const
|
|
1060
|
-
if (!
|
|
1306
|
+
const n2 = await this.storage.getProgram(r2.programId);
|
|
1307
|
+
if (!n2)
|
|
1061
1308
|
throw new Error(`Program not found: ${r2.programId}`);
|
|
1062
1309
|
let f2 = this.vms.get(a2);
|
|
1063
|
-
f2 || (f2 = new
|
|
1064
|
-
const
|
|
1310
|
+
f2 || (f2 = new w(), this.vms.set(a2, f2));
|
|
1311
|
+
const p2 = {
|
|
1065
1312
|
pc: r2.pc,
|
|
1066
1313
|
stack: r2.stack,
|
|
1067
1314
|
variables: new Map(Object.entries(r2.variables)),
|
|
@@ -1071,7 +1318,7 @@ class L {
|
|
|
1071
1318
|
ccPrompt: void 0,
|
|
1072
1319
|
iterators: []
|
|
1073
1320
|
// TODO: persist iterators in future
|
|
1074
|
-
}, k2 = f2.resume(
|
|
1321
|
+
}, k2 = f2.resume(p2, s2, n2.bytecode);
|
|
1075
1322
|
k2.output.length > 0 && await this.storage.appendOutput(a2, k2.output), r2.pc = k2.pc, r2.stack = k2.stack, r2.variables = Object.fromEntries(k2.variables), k2.status === "complete" ? (r2.state = "COMPLETED", k2.returnValue !== void 0 && (r2.returnValue = k2.returnValue), this.vms.delete(a2)) : k2.status === "error" ? (r2.state = "ERROR", r2.error = k2.error, this.vms.delete(a2)) : k2.status === "waiting_cc" ? (r2.state = "AWAITING_COGNITIVE_RESULT", r2.ccPrompt = k2.ccPrompt) : r2.state = "RUNNING", await this.storage.saveExecution(r2);
|
|
1076
1323
|
}
|
|
1077
1324
|
/**
|
|
@@ -1105,7 +1352,7 @@ class v {
|
|
|
1105
1352
|
o(this, "transport", null);
|
|
1106
1353
|
o(this, "vmManager");
|
|
1107
1354
|
o(this, "version");
|
|
1108
|
-
this.version = r2, this.vmManager = new
|
|
1355
|
+
this.version = r2, this.vmManager = new D(), this.server = new mcp_js.McpServer({
|
|
1109
1356
|
name: "cvm-server",
|
|
1110
1357
|
version: this.version
|
|
1111
1358
|
}), this.setupTools();
|
|
@@ -1128,9 +1375,9 @@ class v {
|
|
|
1128
1375
|
return await this.vmManager.loadProgram(r2, t2), {
|
|
1129
1376
|
content: [{ type: "text", text: `Program loaded successfully: ${r2}` }]
|
|
1130
1377
|
};
|
|
1131
|
-
} catch (
|
|
1378
|
+
} catch (e2) {
|
|
1132
1379
|
return {
|
|
1133
|
-
content: [{ type: "text", text: `Error: ${
|
|
1380
|
+
content: [{ type: "text", text: `Error: ${e2 instanceof Error ? e2.message : "Unknown error"}` }],
|
|
1134
1381
|
isError: true
|
|
1135
1382
|
};
|
|
1136
1383
|
}
|
|
@@ -1146,9 +1393,9 @@ class v {
|
|
|
1146
1393
|
return await this.vmManager.startExecution(r2, t2), {
|
|
1147
1394
|
content: [{ type: "text", text: `Execution started: ${t2}` }]
|
|
1148
1395
|
};
|
|
1149
|
-
} catch (
|
|
1396
|
+
} catch (e2) {
|
|
1150
1397
|
return {
|
|
1151
|
-
content: [{ type: "text", text: `Error: ${
|
|
1398
|
+
content: [{ type: "text", text: `Error: ${e2 instanceof Error ? e2.message : "Unknown error"}` }],
|
|
1152
1399
|
isError: true
|
|
1153
1400
|
};
|
|
1154
1401
|
}
|
|
@@ -1190,9 +1437,9 @@ class v {
|
|
|
1190
1437
|
return await this.vmManager.reportCCResult(r2, t2), {
|
|
1191
1438
|
content: [{ type: "text", text: "Execution resumed" }]
|
|
1192
1439
|
};
|
|
1193
|
-
} catch (
|
|
1440
|
+
} catch (e2) {
|
|
1194
1441
|
return {
|
|
1195
|
-
content: [{ type: "text", text: `Error: ${
|
|
1442
|
+
content: [{ type: "text", text: `Error: ${e2 instanceof Error ? e2.message : "Unknown error"}` }],
|
|
1196
1443
|
isError: true
|
|
1197
1444
|
};
|
|
1198
1445
|
}
|
|
@@ -1332,7 +1579,7 @@ async function main() {
|
|
|
1332
1579
|
version = packageJson.version;
|
|
1333
1580
|
break;
|
|
1334
1581
|
}
|
|
1335
|
-
} catch (
|
|
1582
|
+
} catch (e2) {
|
|
1336
1583
|
}
|
|
1337
1584
|
}
|
|
1338
1585
|
logger2.info("Starting CVM Server...", {
|