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.
Files changed (2) hide show
  1. package/main.cjs +603 -356
  2. 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(e) {
12
+ function _interopNamespaceDefault(e2) {
13
13
  const n2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
14
- if (e) {
15
- for (const k2 in e) {
14
+ if (e2) {
15
+ for (const k2 in e2) {
16
16
  if (k2 !== "default") {
17
- const d = Object.getOwnPropertyDescriptor(e, k2);
18
- Object.defineProperty(n2, k2, d.get ? d : {
17
+ const d2 = Object.getOwnPropertyDescriptor(e2, k2);
18
+ Object.defineProperty(n2, k2, d2.get ? d2 : {
19
19
  enumerable: true,
20
- get: () => e[k2]
20
+ get: () => e2[k2]
21
21
  });
22
22
  }
23
23
  }
24
24
  }
25
- n2.default = e;
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 S = Object.defineProperty;
32
- var p$1 = (i2, a2, e) => a2 in i2 ? S(i2, a2, { enumerable: true, configurable: true, writable: true, value: e }) : i2[a2] = e;
33
- var E$1 = (i2, a2, e) => p$1(i2, typeof a2 != "symbol" ? a2 + "" : a2, e);
34
- var n$1 = /* @__PURE__ */ ((i2) => (i2.PUSH = "PUSH", i2.POP = "POP", i2.LOAD = "LOAD", i2.STORE = "STORE", i2.CONCAT = "CONCAT", i2.ARRAY_NEW = "ARRAY_NEW", i2.ARRAY_PUSH = "ARRAY_PUSH", i2.ARRAY_GET = "ARRAY_GET", i2.ARRAY_SET = "ARRAY_SET", i2.ARRAY_LEN = "ARRAY_LEN", i2.STRING_LEN = "STRING_LEN", i2.LENGTH = "LENGTH", i2.JSON_PARSE = "JSON_PARSE", i2.TYPEOF = "TYPEOF", i2.ADD = "ADD", i2.SUB = "SUB", i2.MUL = "MUL", i2.DIV = "DIV", i2.MOD = "MOD", i2.EQ = "EQ", i2.NEQ = "NEQ", i2.LT = "LT", i2.GT = "GT", i2.LTE = "LTE", i2.GTE = "GTE", i2.EQ_STRICT = "EQ_STRICT", i2.NEQ_STRICT = "NEQ_STRICT", i2.JUMP = "JUMP", i2.JUMP_IF = "JUMP_IF", i2.JUMP_IF_FALSE = "JUMP_IF_FALSE", i2.JUMP_IF_TRUE = "JUMP_IF_TRUE", i2.CALL = "CALL", i2.RETURN = "RETURN", i2.AND = "AND", i2.OR = "OR", i2.NOT = "NOT", i2.BREAK = "BREAK", i2.CONTINUE = "CONTINUE", i2.ITER_START = "ITER_START", i2.ITER_NEXT = "ITER_NEXT", i2.ITER_END = "ITER_END", i2.FS_LIST_FILES = "FS_LIST_FILES", i2.CC = "CC", i2.PRINT = "PRINT", i2.HALT = "HALT", i2))(n$1 || {});
35
- function A(i2) {
36
- const a2 = [], e = [];
37
- let x = false, m2 = false;
38
- const c2 = s__namespace.createSourceFile(
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
- i2,
40
+ n2,
41
41
  s__namespace.ScriptTarget.Latest,
42
42
  true
43
43
  );
44
- function t2(r2) {
45
- if (s__namespace.isFunctionDeclaration(r2) && r2.name && r2.name.text === "main" && (x = true, r2.parameters.length > 0 && a2.push("main() must not have parameters")), s__namespace.isExpressionStatement(r2) && r2.parent === c2) {
46
- const l2 = r2.expression;
47
- s__namespace.isCallExpression(l2) && s__namespace.isIdentifier(l2.expression) && l2.expression.text === "main" && (m2 = true);
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(r2) && s__namespace.isIdentifier(r2.expression)) {
50
- const l2 = r2.expression.text;
51
- ["setTimeout", "fetch", "require", "import"].includes(l2) && a2.push(`Unsupported function: ${l2}`);
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(r2, t2);
53
+ s__namespace.forEachChild(i2, t2);
54
54
  }
55
- return t2(c2), x || a2.push("Program must have a main() function"), x && !m2 && a2.push("main() must be called at the top level"), a2.length === 0 && e.push({ op: n$1.HALT }), {
56
- bytecode: e,
57
- errors: a2,
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
- let h$1 = class h {
61
+ class I {
62
62
  constructor() {
63
- E$1(this, "bytecode", []);
64
- E$1(this, "contextStack", []);
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(a2, e) {
69
+ emit(l2, e2) {
70
70
  const x = this.bytecode.length;
71
- return this.bytecode.push({ op: a2, arg: e }), x;
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(a2, e) {
83
- a2 >= 0 && a2 < this.bytecode.length && (this.bytecode[a2].arg = e);
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(a2, e) {
89
- a2.forEach((x) => this.patchJump(x, e));
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(a2) {
95
- this.contextStack.push(a2);
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 a2 = this.contextStack.length - 1; a2 >= 0; a2--)
114
- if (this.contextStack[a2].type === "loop")
115
- return this.contextStack[a2];
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 k(i2) {
138
- const a2 = A(i2);
139
- if (a2.errors.length > 0)
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: a2.errors
143
+ errors: l2.errors
144
144
  };
145
- const e = new h$1(), x = s__namespace.createSourceFile("program.ts", i2, s__namespace.ScriptTarget.Latest, true);
146
- function m2(t2) {
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
- c2(t2.expression);
149
- const r2 = e.emit(n$1.JUMP_IF_FALSE, -1), l2 = {
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 ? l2.elseTarget = r2 : l2.endTargets.push(r2), e.pushContext(l2), m2(t2.thenStatement), t2.elseStatement) {
154
- const o2 = e.emit(n$1.JUMP, -1);
155
- l2.endTargets.push(o2);
156
- const u2 = e.currentAddress();
157
- e.patchJump(r2, u2), m2(t2.elseStatement);
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 T2 = e.popContext();
160
- if (T2) {
161
- const o2 = e.currentAddress();
162
- e.patchJumps(T2.endTargets, o2);
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 r2 = e.currentAddress();
166
- c2(t2.expression);
167
- const T2 = {
165
+ const i2 = e2.currentAddress();
166
+ a2(t2.expression);
167
+ const o2 = {
168
168
  type: "loop",
169
- breakTargets: [e.emit(n$1.JUMP_IF_FALSE, -1)],
169
+ breakTargets: [e2.emit(r$1.JUMP_IF_FALSE, -1)],
170
170
  continueTargets: [],
171
171
  endTargets: [],
172
- startAddress: r2
172
+ startAddress: i2
173
173
  };
174
- e.pushContext(T2), m2(t2.statement), e.emit(n$1.JUMP, r2);
175
- const o2 = e.popContext();
176
- if (o2) {
177
- const u2 = e.currentAddress();
178
- e.patchJumps(o2.breakTargets || [], u2);
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((r2) => {
182
- m2(r2);
210
+ t2.statements.forEach((i2) => {
211
+ u2(i2);
183
212
  });
184
213
  else if (s__namespace.isExpressionStatement(t2)) {
185
- const r2 = t2.expression;
186
- if (s__namespace.isCallExpression(r2) && s__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.expression.getText() === "console" && r2.expression.name.getText() === "log")
187
- r2.arguments.forEach((l2) => {
188
- c2(l2);
189
- }), e.emit(n$1.PRINT);
190
- else if (s__namespace.isCallExpression(r2) && s__namespace.isIdentifier(r2.expression) && r2.expression.text === "CC")
191
- r2.arguments.length > 0 && c2(r2.arguments[0]), e.emit(n$1.CC), e.emit(n$1.POP);
192
- else if (s__namespace.isCallExpression(r2) && s__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.name.getText() === "push")
193
- c2(r2.expression.expression), r2.arguments.length > 0 && c2(r2.arguments[0]), e.emit(n$1.ARRAY_PUSH);
194
- else if (s__namespace.isBinaryExpression(r2) && r2.operatorToken.kind === s__namespace.SyntaxKind.EqualsToken) {
195
- if (c2(r2.right), s__namespace.isIdentifier(r2.left))
196
- e.emit(n$1.STORE, r2.left.text);
197
- else if (s__namespace.isElementAccessExpression(r2.left)) {
198
- const l2 = `__temp_${e.getBytecode().length}`;
199
- e.emit(n$1.STORE, l2), c2(r2.left.expression), c2(r2.left.argumentExpression), e.emit(n$1.LOAD, l2), e.emit(n$1.ARRAY_SET);
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 r2 = t2.declarationList.declarations[0];
204
- r2.initializer && (c2(r2.initializer), e.emit(n$1.STORE, r2.name.getText()));
205
- } else s__namespace.isReturnStatement(t2) && (t2.expression ? c2(t2.expression) : e.emit(n$1.PUSH, null), e.emit(n$1.RETURN));
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 c2(t2) {
275
+ function a2(t2) {
208
276
  if (s__namespace.isStringLiteral(t2))
209
- e.emit(n$1.PUSH, t2.text);
277
+ e2.emit(r$1.PUSH, t2.text);
210
278
  else if (s__namespace.isNumericLiteral(t2))
211
- e.emit(n$1.PUSH, Number(t2.text));
279
+ e2.emit(r$1.PUSH, Number(t2.text));
212
280
  else if (t2.kind === s__namespace.SyntaxKind.TrueKeyword)
213
- e.emit(n$1.PUSH, true);
281
+ e2.emit(r$1.PUSH, true);
214
282
  else if (t2.kind === s__namespace.SyntaxKind.FalseKeyword)
215
- e.emit(n$1.PUSH, false);
283
+ e2.emit(r$1.PUSH, false);
216
284
  else if (t2.kind === s__namespace.SyntaxKind.NullKeyword)
217
- e.emit(n$1.PUSH, null);
285
+ e2.emit(r$1.PUSH, null);
218
286
  else if (s__namespace.isArrayLiteralExpression(t2))
219
- e.emit(n$1.ARRAY_NEW), t2.elements.forEach((r2) => {
220
- c2(r2), e.emit(n$1.ARRAY_PUSH);
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
- c2(t2.expression), t2.argumentExpression && c2(t2.argumentExpression), e.emit(n$1.ARRAY_GET);
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
- c2(t2.expression), e.emit(n$1.LENGTH);
293
+ a2(t2.expression), e2.emit(r$1.LENGTH);
226
294
  else if (s__namespace.isIdentifier(t2))
227
- e.emit(n$1.LOAD, t2.text);
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" ? (t2.arguments.length > 0 && c2(t2.arguments[0]), e.emit(n$1.JSON_PARSE)) : s__namespace.isIdentifier(t2.expression) && t2.expression.text === "CC" && (t2.arguments.length > 0 && c2(t2.arguments[0]), e.emit(n$1.CC));
230
- else if (s__namespace.isParenthesizedExpression(t2))
231
- c2(t2.expression);
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 r2 = t2.operatorToken.kind;
234
- switch (c2(t2.left), c2(t2.right), r2) {
308
+ const i2 = t2.operatorToken.kind;
309
+ switch (a2(t2.left), a2(t2.right), i2) {
235
310
  case s__namespace.SyntaxKind.PlusToken:
236
- f$1(t2.left, t2.right) ? e.emit(n$1.CONCAT) : e.emit(n$1.ADD);
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
- e.emit(n$1.SUB);
314
+ e2.emit(r$1.SUB);
240
315
  break;
241
316
  case s__namespace.SyntaxKind.AsteriskToken:
242
- e.emit(n$1.MUL);
317
+ e2.emit(r$1.MUL);
243
318
  break;
244
319
  case s__namespace.SyntaxKind.SlashToken:
245
- e.emit(n$1.DIV);
320
+ e2.emit(r$1.DIV);
246
321
  break;
247
322
  case s__namespace.SyntaxKind.PercentToken:
248
- e.emit(n$1.MOD);
323
+ e2.emit(r$1.MOD);
249
324
  break;
250
325
  case s__namespace.SyntaxKind.EqualsEqualsToken:
251
- e.emit(n$1.EQ);
326
+ e2.emit(r$1.EQ);
252
327
  break;
253
328
  case s__namespace.SyntaxKind.ExclamationEqualsToken:
254
- e.emit(n$1.NEQ);
329
+ e2.emit(r$1.NEQ);
255
330
  break;
256
331
  case s__namespace.SyntaxKind.LessThanToken:
257
- e.emit(n$1.LT);
332
+ e2.emit(r$1.LT);
258
333
  break;
259
334
  case s__namespace.SyntaxKind.GreaterThanToken:
260
- e.emit(n$1.GT);
335
+ e2.emit(r$1.GT);
261
336
  break;
262
337
  case s__namespace.SyntaxKind.LessThanEqualsToken:
263
- e.emit(n$1.LTE);
338
+ e2.emit(r$1.LTE);
264
339
  break;
265
340
  case s__namespace.SyntaxKind.GreaterThanEqualsToken:
266
- e.emit(n$1.GTE);
341
+ e2.emit(r$1.GTE);
267
342
  break;
268
343
  case s__namespace.SyntaxKind.EqualsEqualsEqualsToken:
269
- e.emit(n$1.EQ_STRICT);
344
+ e2.emit(r$1.EQ_STRICT);
270
345
  break;
271
346
  case s__namespace.SyntaxKind.ExclamationEqualsEqualsToken:
272
- e.emit(n$1.NEQ_STRICT);
347
+ e2.emit(r$1.NEQ_STRICT);
273
348
  break;
274
349
  case s__namespace.SyntaxKind.AmpersandAmpersandToken:
275
- e.emit(n$1.AND);
350
+ e2.emit(r$1.AND);
276
351
  break;
277
352
  case s__namespace.SyntaxKind.BarBarToken:
278
- e.emit(n$1.OR);
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
- c2(t2.operand), e.emit(n$1.NOT);
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) && (c2(t2.expression), e.emit(n$1.TYPEOF));
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 r2;
291
- s__namespace.isFunctionDeclaration(t2) && ((r2 = t2.name) == null ? void 0 : r2.text) === "main" && t2.body && t2.body.statements.forEach((l2) => {
292
- m2(l2);
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
- }), e.emit(n$1.HALT), {
400
+ }), e2.emit(r$1.HALT), {
295
401
  success: true,
296
- bytecode: e.getBytecode(),
402
+ bytecode: e2.getBytecode(),
297
403
  errors: []
298
404
  };
299
405
  }
300
- function f$1(i2, a2) {
301
- return !!(s__namespace.isStringLiteral(i2) || s__namespace.isStringLiteral(a2) || s__namespace.isBinaryExpression(i2) && i2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && f$1(i2.left, i2.right) || s__namespace.isBinaryExpression(a2) && a2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && f$1(a2.left, a2.right));
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 o$1(r2) {
421
+ function e(r2) {
316
422
  return r2 !== null && typeof r2 == "object" && "type" in r2 && r2.type === "array";
317
423
  }
318
- function u$1(r2) {
319
- return n(r2) ? r2 : t(r2) || i$1(r2) ? r2.toString() : f(r2) ? "null" : o$1(r2) ? `[array:${r2.elements.length}]` : String(r2);
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 i$1(r2) ? r2 : f(r2) ? false : t(r2) ? r2 !== 0 : n(r2) ? r2 !== "" : o$1(r2) ? true : !!r2;
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 y(r2) {
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 e = r2.trim();
333
- return e === "" ? NaN : Number(e);
442
+ const u2 = r2.trim();
443
+ return u2 === "" ? 0 : Number(u2);
334
444
  }
335
- return o$1(r2) ? NaN : Number(r2);
445
+ return e(r2) ? NaN : Number(r2);
336
446
  }
337
- function s(r2 = []) {
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 h2 {
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`), e = JSON.stringify(t2, null, 2);
363
- await fs.promises.writeFile(n2, e, "utf-8");
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 e = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e);
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 (e) {
372
- if (e.code === "ENOENT")
484
+ } catch (e2) {
485
+ if (e2.code === "ENOENT")
373
486
  return null;
374
- throw e;
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`), e = JSON.stringify(t2, null, 2);
380
- await fs.promises.writeFile(n2, e, "utf-8");
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 e = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e);
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 (e) {
389
- if (e.code === "ENOENT")
501
+ } catch (e2) {
502
+ if (e2.code === "ENOENT")
390
503
  return null;
391
- throw e;
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 e = c__namespace.join(this.outputsDir, `${t2}.output`), o2 = n2.join(`
509
+ const e2 = c__namespace.join(this.outputsDir, `${t2}.output`), o2 = n2.join(`
397
510
  `) + `
398
511
  `;
399
- await fs.promises.appendFile(e, o2, "utf-8");
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 (e) {
408
- if (e.code === "ENOENT")
520
+ } catch (e2) {
521
+ if (e2.code === "ENOENT")
409
522
  return [];
410
- throw e;
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 e = (await this.db.listCollections().toArray()).map((a2) => a2.name);
427
- e.includes("programs") || await this.db.createCollection("programs"), e.includes("executions") || await this.db.createCollection("executions"), e.includes("outputs") || await this.db.createCollection("outputs");
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 e = this.getCollection("outputs");
465
- await e.findOne({ executionId: t2 }) ? await e.updateOne(
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 e.insertOne({ executionId: t2, lines: n2 });
581
+ ) : await e2.insertOne({ executionId: t2, lines: n2 });
469
582
  }
470
583
  async getOutput(t2) {
471
- const e = await this.getCollection("outputs").findOne({ executionId: t2 });
472
- return (e == null ? void 0 : e.lines) || [];
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 e = (t2 == null ? void 0 : t2.dataDir) || process.env.CVM_DATA_DIR || ".cvm";
481
- return new h2(e);
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 e = (t2 == null ? void 0 : t2.mongoUri) || process.env.MONGODB_URI || "mongodb://localhost:27017/cvm";
485
- return new p(e);
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 R = Object.defineProperty;
493
- var T = (d, a2, s2) => a2 in d ? R(d, a2, { enumerable: true, configurable: true, writable: true, value: s2 }) : d[a2] = s2;
494
- var v$1 = (d, a2, s2) => T(d, typeof a2 != "symbol" ? a2 + "" : a2, s2);
495
- class E {
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 i2 = a2[r2.pc];
508
- switch (i2.op) {
509
- case n$1.HALT:
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 n$1.PUSH:
513
- r2.stack.push(i2.arg), r2.pc++;
625
+ case r$1.PUSH:
626
+ r2.stack.push(n$1.arg), r2.pc++;
514
627
  break;
515
- case n$1.POP:
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 n$1.LOAD: {
519
- const t2 = i2.arg;
520
- if (!r2.variables.has(t2)) {
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 n$1.STORE:
528
- const f2 = r2.stack.pop();
529
- if (f2 === void 0) {
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(i2.arg, f2), r2.pc++;
645
+ r2.variables.set(n$1.arg, f$1), r2.pc++;
534
646
  break;
535
- case n$1.CONCAT:
536
- const u2 = r2.stack.pop(), k2 = r2.stack.pop();
537
- if (k2 === void 0 || u2 === 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(u$1(k2) + u$1(u2)), r2.pc++;
653
+ r2.stack.push(c(k2) + c(p2)), r2.pc++;
542
654
  break;
543
- case n$1.PRINT:
544
- const w = r2.stack.pop();
545
- w !== void 0 && r2.output.push(u$1(w)), r2.pc++;
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 n$1.CC: {
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 = u$1(t2), r2.status = "waiting_cc";
665
+ r2.ccPrompt = c(t2), r2.status = "waiting_cc";
554
666
  break;
555
667
  }
556
668
  // Array operations
557
- case n$1.ARRAY_NEW:
558
- r2.stack.push(s()), r2.pc++;
669
+ case r$1.ARRAY_NEW:
670
+ r2.stack.push(p$1()), r2.pc++;
559
671
  break;
560
- case n$1.ARRAY_PUSH: {
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 (!o$1(e)) {
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 n$1.ARRAY_GET: {
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 (!o$1(e)) {
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 n$1.ARRAY_SET: {
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 (!o$1(c2)) {
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 n2 = Math.floor(e);
606
- if (n2 < 0) {
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[n2] = t$1, r2.pc++;
722
+ c2.elements[i2] = t$1, r2.pc++;
611
723
  break;
612
724
  }
613
- case n$1.ARRAY_LEN: {
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 (!o$1(t2)) {
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 n$1.STRING_LEN: {
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 n$1.LENGTH: {
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 (o$1(t2))
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 n$1.JSON_PARSE: {
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 e = JSON.parse(t2);
668
- Array.isArray(e) ? r2.stack.push(s(e)) : r2.stack.push(s());
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(s());
782
+ r2.stack.push(p$1());
671
783
  }
672
784
  r2.pc++;
673
785
  break;
674
786
  }
675
- case n$1.TYPEOF: {
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 n$1.ADD: {
686
- const t2 = r2.stack.pop(), e = r2.stack.pop();
687
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
692
- r2.stack.push(c2 + n2), r2.pc++;
803
+ const c2 = d(e2), i2 = d(t2);
804
+ r2.stack.push(c2 + i2), r2.pc++;
693
805
  break;
694
806
  }
695
- case n$1.SUB: {
696
- const t2 = r2.stack.pop(), e = r2.stack.pop();
697
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
702
- r2.stack.push(c2 - n2), r2.pc++;
813
+ const c2 = d(e2), i2 = d(t2);
814
+ r2.stack.push(c2 - i2), r2.pc++;
703
815
  break;
704
816
  }
705
- case n$1.MUL: {
706
- const t2 = r2.stack.pop(), e = r2.stack.pop();
707
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
712
- r2.stack.push(c2 * n2), r2.pc++;
823
+ const c2 = d(e2), i2 = d(t2);
824
+ r2.stack.push(c2 * i2), r2.pc++;
713
825
  break;
714
826
  }
715
- case n$1.DIV: {
716
- const t2 = r2.stack.pop(), e = r2.stack.pop();
717
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
722
- if (n2 === 0) {
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 / n2), r2.pc++;
838
+ r2.stack.push(c2 / i2), r2.pc++;
727
839
  break;
728
840
  }
729
- case n$1.MOD: {
730
- const t2 = r2.stack.pop(), e = r2.stack.pop();
731
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
736
- r2.stack.push(c2 % n2), r2.pc++;
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 n$1.EQ: {
741
- const t2 = r2.stack.pop(), e = r2.stack.pop();
742
- if (e === void 0 || t2 === void 0) {
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
- const c2 = y(e), n2 = y(t2);
747
- !isNaN(c2) && !isNaN(n2) ? r2.stack.push(c2 === n2) : r2.stack.push(u$1(e) === u$1(t2)), r2.pc++;
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 n$1.NEQ: {
751
- const t2 = r2.stack.pop(), e = r2.stack.pop();
752
- if (e === void 0 || t2 === void 0) {
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
- const c2 = y(e), n2 = y(t2);
757
- !isNaN(c2) && !isNaN(n2) ? r2.stack.push(c2 !== n2) : r2.stack.push(u$1(e) !== u$1(t2)), r2.pc++;
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 n$1.LT: {
761
- const t2 = r2.stack.pop(), e = r2.stack.pop();
762
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
767
- r2.stack.push(c2 < n2), r2.pc++;
937
+ const c2 = d(e2), i2 = d(t2);
938
+ r2.stack.push(c2 < i2), r2.pc++;
768
939
  break;
769
940
  }
770
- case n$1.GT: {
771
- const t2 = r2.stack.pop(), e = r2.stack.pop();
772
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
777
- r2.stack.push(c2 > n2), r2.pc++;
947
+ const c2 = d(e2), i2 = d(t2);
948
+ r2.stack.push(c2 > i2), r2.pc++;
778
949
  break;
779
950
  }
780
- case n$1.LTE: {
781
- const t2 = r2.stack.pop(), e = r2.stack.pop();
782
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
787
- r2.stack.push(c2 <= n2), r2.pc++;
957
+ const c2 = d(e2), i2 = d(t2);
958
+ r2.stack.push(c2 <= i2), r2.pc++;
788
959
  break;
789
960
  }
790
- case n$1.GTE: {
791
- const t2 = r2.stack.pop(), e = r2.stack.pop();
792
- if (e === void 0 || t2 === void 0) {
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 = y(e), n2 = y(t2);
797
- r2.stack.push(c2 >= n2), r2.pc++;
967
+ const c2 = d(e2), i2 = d(t2);
968
+ r2.stack.push(c2 >= i2), r2.pc++;
798
969
  break;
799
970
  }
800
- case n$1.EQ_STRICT: {
801
- const t2 = r2.stack.pop(), e = r2.stack.pop();
802
- if (e === void 0 || t2 === void 0) {
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(e === t2), r2.pc++;
977
+ r2.stack.push(e2 === t2), r2.pc++;
807
978
  break;
808
979
  }
809
- case n$1.NEQ_STRICT: {
810
- const t2 = r2.stack.pop(), e = r2.stack.pop();
811
- if (e === void 0 || t2 === void 0) {
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(e !== t2), r2.pc++;
986
+ r2.stack.push(e2 !== t2), r2.pc++;
816
987
  break;
817
988
  }
818
989
  // Jump operations
819
- case n$1.JUMP: {
820
- if (i2.arg === void 0) {
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 = i2.arg;
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 n$1.JUMP_IF_FALSE: {
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 (i2.arg === void 0) {
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 e = i2.arg;
843
- if (e < 0 || e >= a2.length) {
844
- r2.status = "error", r2.error = `Invalid jump target: ${e}`;
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
- c(t2) ? r2.pc++ : r2.pc = e;
1018
+ y(t2) ? r2.pc++ : r2.pc = e2;
848
1019
  break;
849
1020
  }
850
- case n$1.ITER_START: {
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 (!o$1(t2)) {
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 = s([...t2.elements]);
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 n$1.ITER_NEXT: {
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 n$1.ITER_END: {
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 n$1.AND: {
894
- const t2 = r2.stack.pop(), e = r2.stack.pop();
895
- if (e === void 0 || t2 === void 0) {
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
- c(e) ? r2.stack.push(t2) : r2.stack.push(e), r2.pc++;
1070
+ y(e2) ? r2.stack.push(t2) : r2.stack.push(e2), r2.pc++;
900
1071
  break;
901
1072
  }
902
- case n$1.OR: {
903
- const t2 = r2.stack.pop(), e = r2.stack.pop();
904
- if (e === void 0 || t2 === void 0) {
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
- c(e) ? r2.stack.push(e) : r2.stack.push(t2), r2.pc++;
1079
+ y(e2) ? r2.stack.push(e2) : r2.stack.push(t2), r2.pc++;
909
1080
  break;
910
1081
  }
911
- case n$1.NOT: {
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(!c(t2)), r2.pc++;
1088
+ r2.stack.push(!y(t2)), r2.pc++;
918
1089
  break;
919
1090
  }
920
- case n$1.RETURN: {
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: ${i2.op} (type: ${typeof i2.op})`;
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 i2 = {
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, i2);
1188
+ return this.execute(r2, n2);
942
1189
  }
943
1190
  }
944
- class L {
1191
+ class D {
945
1192
  constructor(a2) {
946
- v$1(this, "vms", /* @__PURE__ */ new Map());
947
- v$1(this, "storage");
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 = k(s2);
1213
+ const r2 = g$1(s2);
967
1214
  if (!r2.success)
968
1215
  throw new Error(`Compilation failed: ${r2.errors.join(", ")}`);
969
- const i2 = {
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(i2);
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 i2 = {
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(i2);
995
- const f2 = new E();
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 i2 = this.vms.get(a2);
1011
- i2 || (i2 = new E(), this.vms.set(a2, i2));
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
- }, u2 = i2.execute(r2.bytecode, f2);
1018
- if (u2.output.length > 0 && await this.storage.appendOutput(a2, u2.output), s2.pc = u2.pc, s2.stack = u2.stack, s2.variables = Object.fromEntries(u2.variables), u2.status === "complete")
1019
- return s2.state = "COMPLETED", u2.returnValue !== void 0 && (s2.returnValue = u2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
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: u2.returnValue
1269
+ result: p2.returnValue
1023
1270
  };
1024
- if (u2.status === "waiting_cc")
1025
- return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = u2.ccPrompt, await this.storage.saveExecution(s2), {
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: u2.ccPrompt || "Waiting for input"
1274
+ message: p2.ccPrompt || "Waiting for input"
1028
1275
  };
1029
- if (u2.status === "error")
1030
- return s2.state = "ERROR", s2.error = u2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
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: u2.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 i2 = await this.storage.getProgram(r2.programId);
1060
- if (!i2)
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 E(), this.vms.set(a2, f2));
1064
- const u2 = {
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(u2, s2, i2.bytecode);
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 L(), this.server = new mcp_js.McpServer({
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 (e) {
1378
+ } catch (e2) {
1132
1379
  return {
1133
- content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : "Unknown 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 (e) {
1396
+ } catch (e2) {
1150
1397
  return {
1151
- content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : "Unknown 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 (e) {
1440
+ } catch (e2) {
1194
1441
  return {
1195
- content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : "Unknown 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 (e) {
1582
+ } catch (e2) {
1336
1583
  }
1337
1584
  }
1338
1585
  logger2.info("Starting CVM Server...", {