efront 4.34.1 → 4.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/coms/basic/Matrix.js +3 -1
  2. package/coms/basic/color.js +258 -78
  3. package/coms/basic/color_test.js +23 -2
  4. package/coms/basic/crc.js +6 -2
  5. package/coms/basic/data.js +3 -3
  6. package/coms/basic/decodeASN1.js +2 -2
  7. package/coms/basic/math.js +321 -0
  8. package/coms/basic/math.md +265 -0
  9. package/coms/basic/math_test.xht +56 -0
  10. package/coms/basic/pinyin.js +40 -0
  11. package/coms/basic/pinyin_test.js +40 -0
  12. package/coms/basic/wait.js +1 -1
  13. package/coms/basic_/JSON.js +24 -4
  14. package/coms/compile/Html.js +1 -0
  15. package/coms/compile/Javascript.js +14 -0
  16. package/coms/compile/Javascript_test.js +4 -3
  17. package/coms/compile/Program.js +82 -45
  18. package/coms/compile/autoenum.js +498 -138
  19. package/coms/compile/autoenum_test.js +70 -4
  20. package/coms/compile/autoeval.js +616 -18
  21. package/coms/compile/autoeval_test.js +55 -2
  22. package/coms/compile/common.js +27 -15
  23. package/coms/compile/common_test.js +12 -2
  24. package/coms/compile/downLevel.js +60 -7
  25. package/coms/compile/downLevel_test.js +22 -8
  26. package/coms/compile/powermap.js +2 -2
  27. package/coms/compile/rescan.js +2 -2
  28. package/coms/compile/scanner2.js +25 -1
  29. package/coms/compile/translate.js +18 -7
  30. package/coms/compile/unstruct.js +44 -2
  31. package/coms/compile/unstruct_test.js +14 -9
  32. package/coms/compile//347/256/227/345/274/217.js +276 -0
  33. package/coms/compile//347/256/227/345/274/217_test.js +26 -0
  34. package/coms/compile//347/264/240/351/246/250.js +60 -23
  35. package/coms/compile//347/264/240/351/246/250_test.js +8 -3
  36. package/coms/docs/markdown.js +4 -0
  37. package/coms/frame/ChatRTC.js +60 -18
  38. package/coms/frame/chat-rtc.xht +20 -18
  39. package/coms/frame/chat.js +38 -21
  40. package/coms/frame/chat.less +8 -3
  41. package/coms/reptile/colors.js +1 -0
  42. package/coms/zimoli/prompt.js +12 -2
  43. package/coms/zimoli/render.js +0 -1
  44. package/coms//350/214/250/350/217/260//344/270/212/350/211/262.xht +4 -0
  45. package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +14 -4
  46. package/package.json +1 -1
  47. package/public/efront.js +1 -1
  48. package/public//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +2 -2
@@ -1,14 +1,472 @@
1
1
  var { skipAssignment, createString, QUOTED, STAMP, SCOPED, VALUE, SPACE, COMMENT, EXPRESS, relink } = require("./common");
2
-
3
- var eval2 = function (v) {
4
- v = eval(v);
5
- if (typeof v === 'bigint') return String(v) + "n";
6
- return String(v);
2
+ var nreg = /^([\+\-]*(?:(?:0x[0-9a-f]+|0b[01]+|0o[0-7]+)(?:_[0-9a-f]+)*|(?:(?:(?:\d+_)*\d+|\d*)\.\d+(?:_\d+)*|(?:\d+_)*\d+\.?))(?:e[\+\-]?\d+(?:_\d+)*)?)([^\d]*)$/i;
3
+ var punc_2 = {
4
+ "!"(n, s, arg2) {
5
+ if (!n && /^!/.test(s)) return arg2.slice(1);
6
+ if (arg2 = '""' || arg2 === "''" || arg2 === "``") return 'true';
7
+ return n ? String(!+n) : "!" + arg2;
8
+ },
9
+ "~"(n, s, arg2) {
10
+ if (/^~/.test(arg2)) return arg2.slice(1);
11
+ if (/^['"`]/.test(arg2)) return strings.decode(arg2);
12
+ if (n.length > 15) {
13
+ return "~" + arg2;
14
+ }
15
+ return ~n + s;
16
+ },
17
+ "-"(n, s) {
18
+ return -n + s;
19
+ },
20
+ "+"(n, s) {
21
+ return +n + s;
22
+ },
23
+ "/"(n, s) {
24
+ if (!n) return;
25
+ return 1 / n + s;
26
+ }
27
+ };
28
+ var punc_3 = {
29
+ "+"(n1, n2, s) {
30
+ return +n1 + +n2 + s;
31
+ },
32
+ "-"(n1, n2, s) {
33
+ return n1 - n2 + s;
34
+ },
35
+ "*"(n1, n2, s) {
36
+ return n1 * n2 + s;
37
+ },
38
+ "/"(n1, n2, s) {
39
+ return n1 / n2 + s;
40
+ },
41
+ "%"(n1, n2, s) {
42
+ return n1 % n2 + s;
43
+ },
44
+ "**"(n1, n2, s) {
45
+ return n1 ** n2 + s;
46
+ },
47
+ ">>>"(n1, n2, s) {
48
+ return (n1 >>> n2) + s;
49
+ },
50
+ ">>"(n1, n2, s) {
51
+ return (n1 >> n2) + s;
52
+ },
53
+ "<<"(n1, n2, s) {
54
+ if (s && n1.length + +n2 > 15) {
55
+ return BigInt(n1) << BigInt(n2) + s;
56
+ }
57
+ return (n2 << n1) + s;
58
+ },
59
+ ">"(n1, n2, s) {
60
+ return String(+n1 > +n2);
61
+ },
62
+ "<"(n1, n2, s) {
63
+ return String(+n1 < +n2);
64
+ },
65
+ ">="(n1, n2, s) {
66
+ return String(+n1 >= +n2);
67
+ },
68
+ "<="(n1, n2, s) {
69
+ return String(+n1 <= +n2);
70
+ },
71
+ "=="(n1, n2, s) {
72
+ return String(+n1 == +n2);
73
+ },
74
+ "==="(n1, n2, s) {
75
+ return String(+n1 === +n2);
76
+ },
77
+ "^"(n1, n2, s) {
78
+ return (n1 ^ n2) + s;
79
+ },
80
+ "|"(n1, n2, s) {
81
+ return (n1 | n2) + s;
82
+ },
83
+ "&"(n1, n2, s) {
84
+ return (n1 & n2) + s;
85
+ },
86
+ "||"(n1, n2, s) {
87
+ return (+n2 || +n1) + s;
88
+ },
89
+ "&&"(n1, n2, s) {
90
+ return (+n1 && + n2) + s;
91
+ },
7
92
  };
8
- var canbeunbrace = function () {
93
+ var punc_s;
94
+ function calc_(arg1, punc, arg2) {
95
+ if (!arg2) return;
96
+ if (!arg1) {
97
+ var match = nreg.exec(arg2);
98
+ if (!match) return;
99
+ var [, n, s] = match;
100
+ var f = punc_s && punc in punc_s ? punc_s[punc] : punc_2[punc];
101
+ if (!f) return;
102
+ return f(n, s, arg2);
103
+ }
104
+ var match1 = nreg.exec(arg1);
105
+ var match2 = nreg.exec(arg2);
106
+ if (!match1 || !match2) return;
107
+ var [, n1, s] = match1;
108
+ var [, n2, s2] = match2;
109
+ var f = punc_s && punc in punc_s ? punc_s[punc] : punc_3[punc];
110
+ if (!f) return;
111
+ if (/^[\*·×]$/.test(punc)) {
112
+ if (s && s2) a: {
113
+ if (s === s2) {
114
+ switch (s.toLowerCase()) {
115
+ case "i":
116
+ case "j":
117
+ case "k":
118
+ // 虚数的平方 -1
119
+ n1 = -n1;
120
+ s = s2 = '';
121
+ break a;
122
+ }
123
+ }
124
+ switch ((s + s2).toLowerCase()) {
125
+ case "ji":
126
+ n1 = -n1;
127
+ case "ij":
128
+ s = 'k'; s2 = '';
129
+ break a;
130
+ case "ik":
131
+ n1 = -n1;
132
+ case "ki":
133
+ s = 'j'; s2 = '';
134
+ break a;
135
+ case "kj":
136
+ n1 = -n1;
137
+ case "jk":
138
+ s = 'i'; s2 = '';
139
+ break a;
140
+ }
141
+ if (s === s2) return f(n1, n2, s);
142
+ return;
143
+ }
144
+ return f(n1, n2, s || s2);
145
+ }
146
+ if (/^[\/÷\\]$/.test(punc)) {
147
+ // 除法不考虑虚数
148
+ if (s === s2) {
149
+ if (/^[lmnuf]+$/i.test(s)) {
150
+ return f(n1, n2, s);
151
+ }
152
+ return f(n1, n2, "");
153
+ }
154
+ if (s2) return;
155
+ if (s && s2) return f(n1, n2, '');
156
+ return f(n1, n2, s);
157
+ }
158
+ if (s !== s2) return;
159
+ return f(n1, n2, s);
160
+ }
161
+
162
+ var isNone = a => a == null || a !== a;
9
163
 
164
+ var make = function (body, bx, cx, pt) {
165
+ var p = pt && powermap[pt.text];
166
+ if (p <= powermap[">>>"] && p > powermap['=']) return cx;
167
+ var bd = body.slice(bx, cx);
168
+ var bd = bd.filter(a => a.type & ~(COMMENT | SPACE));
169
+ if (bd.length < 2) return cx;
170
+ if (bd.length === 2) {
171
+ var [p, o] = bd;
172
+ if (p.type === STAMP) {
173
+ if (!p.unary) return cx;
174
+ var v = calc(null, p.text, o.text);
175
+ if (isNone(v)) return cx;
176
+ setvalue(o, v);
177
+ }
178
+ else if (o.type === STAMP) {
179
+ var v = calc(p.text, o.text, null);
180
+ if (isNone(v)) return cx;
181
+ setvalue(o, v);
182
+ }
183
+ else return cx;
184
+ body.splice(bx, 1);
185
+ return cx - 1;
186
+ }
187
+ var o = body[bx];
188
+ var c = bd.pop();
189
+ c = c.text;
190
+ var b = bd.pop();
191
+ while (bd.length >= 3) {
192
+ if (b.unary) {
193
+ c = calc('', b.text, c);
194
+ b = bd.pop();
195
+ continue;
196
+ }
197
+ var a = bd.pop();
198
+ a = a.text;
199
+ c = calc(a, b.text, c);
200
+ b = bd.pop();
201
+ }
202
+ while (b?.unary) {
203
+ c = calc('', b.text, c);
204
+ if (isNone(c)) return cx;
205
+ b = bd.pop();
206
+ }
207
+ if (!bd.length) {
208
+ setvalue(o, c);
209
+ bx = bx + 1;
210
+ body.splice(bx, cx - bx);
211
+ return bx;
212
+ }
213
+ var a = bd.pop();
214
+ a = a.text;
215
+ b = b.text;
216
+
217
+ if (pt) {
218
+ switch (pt.text) {
219
+ case "-":
220
+ a = calc("", "-", a);
221
+ if (isNone(a)) return cx;
222
+ case "+":
223
+ var value = calc(a, b, c);
224
+ if (isNone(value)) return cx;
225
+ if (/^-/.test(value)) {
226
+ pt.text = '-';
227
+ value = value.slice(1);
228
+ }
229
+ else {
230
+ pt.text = '+';
231
+ }
232
+ setvalue(o, value);
233
+ break;
234
+ case "/":
235
+ a = calc('', '/', a);
236
+ if (isNone(a)) return cx;
237
+ case "*":
238
+ var value = calc(a, b, c);
239
+ if (isNone(value)) return cx;
240
+ setvalue(o, value);
241
+ pt.text = "*";
242
+ break;
243
+ default:
244
+ var value = calc(a, b, c);
245
+ if (isNone(value)) return cx;
246
+ setvalue(o, value);
247
+ break;
248
+ }
249
+ }
250
+ else {
251
+ var v = calc(a, b, c);
252
+ if (isNone(v)) return cx;
253
+ setvalue(o, v);
254
+ }
255
+ bx = bx + 1;
256
+ body.splice(bx, cx - bx);
257
+ return bx;
258
+ }
259
+ var mathEnabled = false;
260
+ var numberEnabled = false;
261
+ var outValues = null;
262
+ var outParams = null;
263
+ const _ignore = Symbol('ignore');
264
+ var powermap = require("./powermap");
265
+ function solve(body, ox, dx) {
266
+ var p = 0, bx = ox, pt = null;
267
+ var cache = [bx, null, 0];
268
+ var p0 = 0;
269
+ for (var cx = ox; cx < dx; cx++) {
270
+ var o = body[cx];
271
+ if (o.type & (COMMENT | SPACE)) continue;
272
+ if (o.type === STAMP) {
273
+ p = powermap[o.text] || 0;
274
+ pt = o;
275
+ if (p <= powermap["&&"]) p = 0;
276
+ if (cache.length && p <= cache[cache.length - 1]) {
277
+ var p1 = p;
278
+ var pt1 = pt;
279
+ while (p1 <= cache[cache.length - 1]) {
280
+ p1 = cache.pop();
281
+ pt1 = cache.pop();
282
+ bx = cache.pop();
283
+ }
284
+ if (cx - bx < 3) {
285
+ if (p === p1 && p > powermap[">>>"]) cache.push(bx, pt1, p1);
286
+ continue;
287
+ }
288
+ var cx1 = make(body, bx, cx, p1 === p ? pt1 : null);
289
+ if (cx1 !== cx) {
290
+ dx -= cx - cx1;
291
+ cx = cx1;
292
+ cache.push(bx, pt1, p1);
293
+ }
294
+ continue;
295
+ }
296
+ if (p === 0) {
297
+ cache.splice(0, cache.length);
298
+ }
299
+ continue;
300
+ }
301
+ else if (!o.isdigit || o.type !== VALUE) {
302
+ cache.splice(0, cache.length);
303
+ p0 = p;
304
+ continue;
305
+ }
306
+ else {
307
+ if (!cache.length) {
308
+ if (p < p0) {
309
+ p0 = p;
310
+ continue;
311
+ }
312
+ if (p && p === p0 && p <= powermap[">>>"]) {
313
+ continue;
314
+ }
315
+ cache.push(cx, pt, p);
316
+ bx = cx;
317
+ }
318
+ }
319
+ }
320
+
321
+ if (cache.length) {
322
+ var bx = cache[0];
323
+ var pt = cache[1];
324
+ if (cx - bx >= 2) {
325
+ cx = make(body, bx, cx, cache[1]);
326
+ }
327
+ }
328
+ return cx;
329
+ }
330
+
331
+ var calc = null;
332
+ var number_reg = null;
333
+ var setvalue = function (o, func) {
334
+ if (typeof func === 'function') return func;
335
+ else if (typeof func === 'number') {
336
+ o.type = VALUE;
337
+ o.text = String(func);
338
+ o.isdigit = true;
339
+ }
340
+ else if (typeof func === "bigint") {
341
+ o.type = VALUE;
342
+ o.text = String(func) + 'n';
343
+ o.isdigit = true;
344
+ }
345
+ else if (typeof func === 'boolean') {
346
+ o.type = VALUE;
347
+ o.text = String(func);
348
+ }
349
+ else if (nreg.test(func)) {
350
+ o.type = VALUE;
351
+ o.isdigit = true;
352
+ o.text = String(func);
353
+ }
354
+ else if (func instanceof Array) {
355
+ o.value = func;
356
+ }
357
+ else {
358
+ o.type = VALUE;
359
+ o.text = String(func);
360
+ }
361
+ }
362
+ var pushseek = function (args, start, end, step) {
363
+ if (!start) start = 0;
364
+ if (!step) step = [1];
365
+ if (!end) {
366
+ args.step = step;
367
+ args.start = start;
368
+ }
369
+ else {
370
+ var i = 0;
371
+ for (var cx = +start; cx < +end;) {
372
+ args.push(cx);
373
+ cx += step[i];
374
+ i++;
375
+ if (i >= step.length) i = 0;
376
+ }
377
+ }
378
+ };
379
+ var getelems = function (o, rowlimit, collimit) {
380
+ var args = [];
381
+ var comma = false;
382
+ var rows;
383
+ var maxsize = 0;
384
+ var seekat = null;
385
+ var step = null;
386
+ var seekend = null;
387
+ for (var a of o) {
388
+ if (a.type !== VALUE) {
389
+ if (a.type === STAMP) {
390
+ if (a.text === ',') {
391
+ if (seekat !== null) {
392
+ pushseek(args, seekat, seekend || (rows ? collimit : rowlimit), step);
393
+ comma = false;
394
+ }
395
+ if (!args.length || comma) {
396
+ args.push(undefined);
397
+ }
398
+ seekat = null;
399
+ step = null;
400
+ seekend = null;
401
+ comma = true;
402
+ continue;
403
+ }
404
+ if (a.text === ';') {
405
+ if (comma) args.push(undefined);
406
+ if (!rows) rows = [];
407
+ if (args.length) rows.push(args);
408
+ if (args.length > maxsize) maxsize = args.length;
409
+ args = [];
410
+ seekat = null;
411
+ step = null;
412
+ seekend = null;
413
+ comma = false;
414
+ continue;
415
+ }
416
+ if (a.text === ':') {
417
+ if (comma) args.push(undefined);
418
+ comma = false;
419
+ if (seekat === null) {
420
+ seekat = args.pop();
421
+ }
422
+ else if (seekend === null) {
423
+ seekend = args.pop();
424
+ }
425
+ else {
426
+ if (!step) step = [];
427
+ step.push(+seekend);
428
+ seekend = args.pop();
429
+ }
430
+ continue;
431
+ }
432
+ }
433
+ if (a.type === SCOPED) {
434
+ if (a.entry === '[' && a.value) {
435
+ args.push(a);
436
+ }
437
+ else return;
438
+ }
439
+ // 数据异常不处理
440
+ return;
441
+ }
442
+ comma = false;
443
+ if (args.step) {
444
+ pushseek(r, r.start, +a.text, r.step);
445
+ delete args.step;
446
+ delete r.start;
447
+ }
448
+ args.push(a.text);
449
+ }
450
+ if (rows) {
451
+ if (args.length) rows.push(args);
452
+ if (args.length > maxsize) maxsize = args.length;
453
+ for (var r of rows) {
454
+ if (r.step) {
455
+ var total = 0;
456
+ for (var s of r.step) total += +s;
457
+ pushseek(r, r.start, r.start + (maxsize - r.length) * total, r.step);
458
+ if (r.length > maxsize) r.pop();
459
+ delete r.step;
460
+ }
461
+ r.length = maxsize;
462
+ }
463
+ rows.maxsize = maxsize;
464
+ return rows;
465
+ }
466
+ return args;
10
467
  }
11
468
  var calculate = function (body) {
469
+ var cache = [];
12
470
  for (var cx = 0; cx < body.length; cx) {
13
471
  var o = body[cx];
14
472
  while (o && (o.type & (SPACE | COMMENT) || o.type === STAMP && /^[,;:]$/.test(o.text))) o = body[++cx];
@@ -17,8 +475,15 @@ var calculate = function (body) {
17
475
  var ex = skipAssignment(body, cx++);
18
476
  cx = ex;
19
477
  var ignore = false;
478
+ var hasScoped = false;
479
+ var prefunc = null;
20
480
  for (var cy = ox; cy < ex; cy++) {
21
481
  var o = body[cy];
482
+ if (o.type & (SPACE | COMMENT)) continue;
483
+ if (o.type === STAMP && o.text === '=>') {
484
+ ignore = true;
485
+ continue;
486
+ }
22
487
  if (o.type & (SCOPED | QUOTED) && o.length) {
23
488
  calculate(o);
24
489
  if (o.type === SCOPED && o.entry === '(') {
@@ -31,8 +496,8 @@ var calculate = function (body) {
31
496
  text = last.text;
32
497
  }
33
498
  else if (first.next === last && first.type === STAMP && /^[+-~]+$/.test(first.text)) {
34
- text = eval2(first.text + last.text);
35
- last.text = text;
499
+ setvalue(last, first.text + last.text);
500
+ text = last.text;
36
501
  o.splice(0, o.length);
37
502
  o.push(last);
38
503
  o.first = o.last = last;
@@ -48,24 +513,157 @@ var calculate = function (body) {
48
513
  }
49
514
  }
50
515
  }
516
+ else if (prefunc) {
517
+ if (prefunc === Math.random) {
518
+ ignore = true;
519
+ continue;
520
+ }
521
+ if (!o[_ignore]) {
522
+ var args = getelems(o);
523
+ p.text = String(prefunc.apply(null, args));
524
+ p.isdigit = true;
525
+ p.type = VALUE;
526
+ body.splice(cy, 1);
527
+ cy--;
528
+ ex--;
529
+ prefunc = null;
530
+ continue;
531
+ }
532
+ }
533
+ }
534
+ if (o[_ignore]) {
535
+ prefunc = null;
536
+ ignore = true;
537
+ continue;
538
+ }
539
+ if (o.type === SCOPED && o.entry === '[') {
540
+ var p = o.prev;
541
+ if (!p || p.type === STAMP || p.type === VALUE && p.isdigit) {
542
+ o.value = getelems(o);
543
+ }
544
+ else if (p.type === SCOPED && p.value instanceof Array) {
545
+ var args = getelems(o, p.value.length, p.value.maxsize);
546
+ var value = undefined;
547
+ while (args.length) {
548
+ var seek = args.pop();
549
+ if (seek instanceof Array) {
550
+ if (args.length > 1) {
551
+ ignore = true;
552
+ break;
553
+ }
554
+ if (!args.length) {
555
+ value = p.value;
556
+ value = seek.map(s => value[s]);
557
+ break;
558
+ }
559
+ args = args[0];
560
+ if (args.length === 1 && seek.length === 1) {
561
+ value = p.value[args[0]][seek[0]];
562
+ break;
563
+ }
564
+ value = p.value;
565
+ value = seek.map(a => value[args[0]][a]);
566
+ break;
567
+ }
568
+ else {
569
+ value = p.value[seek];
570
+ break;
571
+ }
572
+ }
573
+ if (value !== undefined) {
574
+ setvalue(o, value);
575
+ var pi = body.lastIndexOf(p, cy);
576
+ body.splice(pi, 1);
577
+ cy--;
578
+ ex--;
579
+ }
580
+ else {
581
+ ignore = true;
582
+ }
583
+
584
+ }
585
+ else {
586
+ ignore = true;
587
+ }
588
+ }
589
+ }
590
+ if (prefunc) ignore = true;
591
+ prefunc = null;
592
+ if (o.type & (EXPRESS)) {
593
+ var func = undefined;
594
+ if (o.fn !== undefined) {
595
+ func = o.fn;
596
+ prefunc = setvalue(o, func);
597
+ continue;
598
+ }
599
+ switch (o.tack) {
600
+ case "Math":
601
+ if (mathEnabled) {
602
+ func = Math[o.text.slice(5)];
603
+ }
604
+ break;
605
+ case "Number":
606
+ if (numberEnabled) {
607
+ func = Number[o.text.slice(7)];
608
+ }
609
+ break;
51
610
  }
611
+ if (func === undefined) ignore = true;
612
+ else prefunc = setvalue(o, func);
52
613
  }
53
- if (!(o.type & (STAMP | VALUE | SPACE | COMMENT))) ignore = true;
54
- else if (o.type === VALUE && !o.isdigit) ignore = true;
614
+ else if (o.type & ~(STAMP | SCOPED | VALUE | SPACE | COMMENT)) ignore = true;
615
+ else if (o.type === VALUE) {
616
+ if (!o.isdigit) ignore = true;
617
+ else {
618
+ var match = nreg.exec(o.text);
619
+ if (match) {
620
+ var [, n, s] = match;
621
+ if (n.length < 16) {
622
+ n = eval(n);
623
+ o.text = n + s;
624
+ }
625
+ }
626
+ }
627
+ }
628
+ if (!hasScoped) hasScoped = o.type === SCOPED;
55
629
  }
56
- if (ignore || ex - ox < 3) continue;
57
- var o = body[ox];
58
- o.text = eval2(createString(body.slice(ox, ex)));
59
- o.type = VALUE;
60
- o.isdigit = true;
61
- cx = ox + 1;
62
- body.splice(cx, ex - cx);
630
+ if (ignore || prefunc) {
631
+ if (!body[_ignore]) body[_ignore] = true;
632
+ cx = solve(body, ox, ex);
633
+ continue;
634
+ }
635
+ if (ex - ox === 1 && hasScoped) continue;
636
+ cx = solve(body, ox, ex);
63
637
  }
64
638
  relink(body);
65
639
  return body;
66
640
  };
67
-
641
+ function presetFunction(os, fn) {
642
+ if (os) for (var o of os) {
643
+ o.fn = fn;
644
+ }
645
+ }
68
646
  module.exports = function autoeval(body) {
647
+ var { used, envs } = body;
648
+ number_reg = body.program.number_reg;
649
+ if (envs.Number) numberEnabled = true;
650
+ if (envs.Math) mathEnabled = true;
651
+ for (var cx = 1, dx = arguments.length; cx < dx; cx++) {
652
+ var arg = arguments[cx];
653
+ if (typeof arg === 'object') {
654
+ for (var k in arg) {
655
+ presetFunction(used[k], arg[k]);
656
+ }
657
+ punc_s = arg;
658
+ }
659
+ else {
660
+ if (typeof arg === 'function') {
661
+ calc = arg;
662
+ presetFunction(used.calc, arg);
663
+ }
664
+ }
665
+ }
666
+ if (!calc) calc = calc_;
69
667
  calculate(body);
70
668
  return body;
71
669
  }