efront 3.36.6 → 3.36.9
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/coms/basic/refilm_decode.js +25 -13
- package/coms/basic_/Symbol.js +11 -0
- package/coms/basic_/aster_.js +35 -0
- package/coms/basic_/asyncAster_.js +50 -0
- package/coms/basic_/async_.js +2 -60
- package/coms/basic_/exec_.js +62 -0
- package/coms/compile/Javascript.js +3 -3
- package/coms/compile/common.js +7 -1
- package/coms/compile/createExpressList_test.js +2 -1
- package/coms/compile/downLevel.js +13 -17
- package/coms/compile/unstruct.js +131 -54
- package/coms/compile/unstruct_test.js +16 -13
- package/coms/kugou/buildScroll.js +0 -1
- package/coms/zimoli/zimoli.js +5 -16
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/compile/unstruct.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
var { SPACE, COMMENT, EXPRESS, STRAP, STAMP, SCOPED, VALUE, LABEL, createString, skipAssignment, relink } = require("./common");
|
|
1
|
+
var { SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL, createString, skipAssignment, relink } = require("./common");
|
|
2
2
|
var scanner2 = require("./scanner2");
|
|
3
3
|
var RE = { type: STRAP, text: "@re" };// if (_) return
|
|
4
4
|
var RZ = { type: STRAP, text: "@rz" };// if (!_) return
|
|
5
5
|
var RD = { type: STRAP, text: "@rd" };// if (_) return
|
|
6
6
|
var RETURN = { type: STRAP, text: "@ret" };// return;
|
|
7
|
+
var YIELD = { type: STRAP, text: "@yield" };// return;
|
|
7
8
|
var NEXT = { type: STRAP, text: "@next" };// return;
|
|
8
|
-
var _break = function (body, cx, result) {
|
|
9
|
+
var _break = function (body, cx, result, iscontinue) {
|
|
9
10
|
var label;
|
|
10
11
|
do {
|
|
11
12
|
var o = body[++cx];
|
|
@@ -14,15 +15,20 @@ var _break = function (body, cx, result) {
|
|
|
14
15
|
} while (true);
|
|
15
16
|
var bx = cx;
|
|
16
17
|
if (label) {
|
|
18
|
+
var s;
|
|
17
19
|
for (var cx = labels.length - 1; cx >= 0; cx--) {
|
|
18
20
|
var b = labels[cx];
|
|
19
21
|
if (b.type === LABEL && b.text === label) {
|
|
20
22
|
if (!b.breaks) b.breaks = [];
|
|
21
23
|
var _b = scanner2(`return[]`);
|
|
24
|
+
if (iscontinue) _b.continue = s, s.continue = true;
|
|
22
25
|
addresult(result, _b);
|
|
23
26
|
b.breaks.push(_b);
|
|
24
27
|
break;
|
|
25
28
|
}
|
|
29
|
+
else {
|
|
30
|
+
s = b;
|
|
31
|
+
}
|
|
26
32
|
}
|
|
27
33
|
}
|
|
28
34
|
else {
|
|
@@ -31,6 +37,7 @@ var _break = function (body, cx, result) {
|
|
|
31
37
|
if (b.type !== LABEL) {
|
|
32
38
|
if (!b.breaks) b.breaks = [];
|
|
33
39
|
var _b = scanner2(`return[]`);
|
|
40
|
+
if (iscontinue) _b.continue = b, b.continue = true;
|
|
34
41
|
addresult(result, _b);
|
|
35
42
|
b.breaks.push(_b);
|
|
36
43
|
break;
|
|
@@ -154,11 +161,21 @@ var _switch = function (body, cx, unblock, result, getname) {
|
|
|
154
161
|
};
|
|
155
162
|
var _for = function (body, cx, unblock, result, tmpname) {
|
|
156
163
|
var o = body[cx];
|
|
164
|
+
var label = o;
|
|
157
165
|
o = o.next;
|
|
158
166
|
var m = o.first;
|
|
159
167
|
if (m.type === STRAP && /^(let|const|var)$/.test(m.text)) {
|
|
160
168
|
m = m.next;
|
|
161
169
|
}
|
|
170
|
+
var mn = m.next;
|
|
171
|
+
if (mn.type === STRAP && mn.text === 'in') {
|
|
172
|
+
// 含有高级语法的 for in 语句在 ./downLevel.js 中预处理
|
|
173
|
+
var dx = cx;
|
|
174
|
+
var n = o.next;
|
|
175
|
+
while (body[dx] !== n) dx++;
|
|
176
|
+
addresult(result, body.slice(cx, dx));
|
|
177
|
+
return dx;
|
|
178
|
+
}
|
|
162
179
|
var cy = 0;
|
|
163
180
|
while (o[cy] !== m) cy++;
|
|
164
181
|
var block = getblock(o, cy);// init
|
|
@@ -177,19 +194,44 @@ var _for = function (body, cx, unblock, result, tmpname) {
|
|
|
177
194
|
relink(result[result.length - 1]);
|
|
178
195
|
var i = result.length;
|
|
179
196
|
unblock(block_);
|
|
197
|
+
if (label.continue) label.continue = result.length, result[result.length - 1].cont = true, label.contat = result.length;
|
|
180
198
|
unblock(block2);
|
|
181
199
|
result[result.length - 1].push(...scanner2(`;return [${i - result.length},0]`));
|
|
182
200
|
b[b.length - 1].push(...scanner2(`${result.length - i + 1},0`));
|
|
183
201
|
relink(result[result.length - 1]);
|
|
184
202
|
return cx;
|
|
185
203
|
};
|
|
204
|
+
var getCondition = function (o, unblock, not_) {
|
|
205
|
+
var n = '';
|
|
206
|
+
var f = o.first;
|
|
207
|
+
var not = f.type === STAMP && f.text === "!";
|
|
208
|
+
if (not) f = f.next;
|
|
209
|
+
if (not_) not = !not;
|
|
210
|
+
if (f && f === o.last) {
|
|
211
|
+
if (f.type & (EXPRESS | VALUE)) {
|
|
212
|
+
n = f.text;
|
|
213
|
+
}
|
|
214
|
+
if (not && n) {
|
|
215
|
+
if (f.type === VALUE) {
|
|
216
|
+
n = String(eval("!" + f.text));
|
|
217
|
+
}
|
|
218
|
+
else n = "!" + n;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (!n) {
|
|
222
|
+
n = unblock(o);
|
|
223
|
+
n = n.await ? ret_ : n.name;
|
|
224
|
+
if (not) n = "!" + n;
|
|
225
|
+
}
|
|
226
|
+
return n;
|
|
227
|
+
}
|
|
186
228
|
var _while = function (body, cx, unblock, result, tmpname) {
|
|
187
229
|
var o = body[cx];
|
|
230
|
+
o.contat = result.length;
|
|
188
231
|
o = o.next;
|
|
189
232
|
while (body[cx] !== o) cx++;
|
|
190
|
-
var b = scanner2(
|
|
191
|
-
|
|
192
|
-
result[result.length - 1].push(...b);
|
|
233
|
+
var b = scanner2(`if(${getCondition(o, unblock, true)})return []`)
|
|
234
|
+
result.push(b);
|
|
193
235
|
relink(result[result.length - 1]);
|
|
194
236
|
var block = getblock(body, ++cx);
|
|
195
237
|
var i = result.length;
|
|
@@ -211,7 +253,7 @@ var pushstep = function (result, step) {
|
|
|
211
253
|
relink(step);
|
|
212
254
|
result.push(step);
|
|
213
255
|
}
|
|
214
|
-
else if (q.ifrt) {
|
|
256
|
+
else if (q.ifrt || q.cont) {
|
|
215
257
|
result.push(step);
|
|
216
258
|
}
|
|
217
259
|
else {
|
|
@@ -277,19 +319,20 @@ var addresult = function (result, step) {
|
|
|
277
319
|
};
|
|
278
320
|
var _do = function (body, cx, unblock, result, tmpname) {
|
|
279
321
|
var o = body[cx];
|
|
322
|
+
var label = o;
|
|
280
323
|
o = o.next;
|
|
281
324
|
var i = result.length;
|
|
282
325
|
unblock(o);
|
|
283
326
|
o = o.next.next;
|
|
284
|
-
|
|
285
|
-
var b = scanner2(`return [${
|
|
327
|
+
if (label.continue) result[result.length - 1].cont = true, label.contat = result.length;
|
|
328
|
+
var b = scanner2(`if(${getCondition(o, unblock)})return [${i - result.length},0];return [1,0]`);
|
|
286
329
|
addresult(result, b);
|
|
287
330
|
while (body[cx] !== o) cx++;
|
|
288
331
|
return cx;
|
|
289
332
|
};
|
|
290
333
|
|
|
291
334
|
var needbreak = function (o) {
|
|
292
|
-
return o === RE || o === RZ || o === RETURN || o === NEXT || o ===
|
|
335
|
+
return o === RE || o === RZ || o === RD || o === RETURN || o === NEXT || o === YIELD;
|
|
293
336
|
};
|
|
294
337
|
var _return = function (r, nextindex) {
|
|
295
338
|
var name = r.name;
|
|
@@ -301,9 +344,11 @@ var _return = function (r, nextindex) {
|
|
|
301
344
|
semicolon = semicolon && semicolon.type === STAMP && /^[,;]$/.test(semicolon.text);
|
|
302
345
|
var x;
|
|
303
346
|
if (e === RETURN) {
|
|
304
|
-
if (nextindex === 1) r._return = true;
|
|
305
347
|
x = scanner2(`return [${name},2]`);
|
|
306
348
|
}
|
|
349
|
+
else if (e === YIELD) {
|
|
350
|
+
x = scanner2(`return [${name},3]`);
|
|
351
|
+
}
|
|
307
352
|
else if (e === NEXT) {
|
|
308
353
|
x = scanner2(`return [${name},1]`);
|
|
309
354
|
r.await = true;
|
|
@@ -354,7 +399,7 @@ var _invoke = function (t, getname) {
|
|
|
354
399
|
cy = skipAssignment(o, cy);
|
|
355
400
|
if (by === cy) continue;
|
|
356
401
|
var m = o.slice(by, cy);
|
|
357
|
-
if (m.length === 1 && (m[0].type === EXPRESS &&
|
|
402
|
+
if (m.length === 1 && (m[0].type === EXPRESS && !/\./.test(m[0].text) || m[0].type === VALUE || m[0].type === QUOTED)) {
|
|
358
403
|
continue;
|
|
359
404
|
}
|
|
360
405
|
var q = toqueue(m, getdeepname, true);
|
|
@@ -410,12 +455,14 @@ var ternary = function (body, getname, ret) {
|
|
|
410
455
|
var bx = question.pop();
|
|
411
456
|
if (!question.length) {
|
|
412
457
|
var b = body.slice(0, bx);
|
|
413
|
-
|
|
458
|
+
relink(b);
|
|
414
459
|
var c = ternary(body.slice(bx + 1, cx), getname, true);
|
|
415
460
|
var d = ternary(body.slice(cx + 1), getname, true);
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
461
|
+
addresult(c, scanner2(`return [${d.length + 1},0]`));
|
|
462
|
+
addresult(res, scanner2(`if(${getCondition(b, function (b) {
|
|
463
|
+
addresult(res, _express(b));
|
|
464
|
+
return res[res.length - 1];
|
|
465
|
+
})})return [1,0]`));
|
|
419
466
|
res.push(...c);
|
|
420
467
|
res.push(...d);
|
|
421
468
|
}
|
|
@@ -441,6 +488,10 @@ var _express = function (body, getname, ret) {
|
|
|
441
488
|
for (var cx = 0, dx = body.length; cx < dx; cx++) {
|
|
442
489
|
var o = body[cx];
|
|
443
490
|
if (o.type & (COMMENT | SPACE)) continue;
|
|
491
|
+
if (o.type === STRAP && /^(var|let|const)/.test(o.text)) {
|
|
492
|
+
bx = cx + 1;
|
|
493
|
+
continue;
|
|
494
|
+
}
|
|
444
495
|
if (o.type & (STRAP | STAMP)) {
|
|
445
496
|
var p = 0;
|
|
446
497
|
if (o.text === '=') {
|
|
@@ -470,7 +521,7 @@ var _express = function (body, getname, ret) {
|
|
|
470
521
|
var p0 = cache.pop();
|
|
471
522
|
var t = cache.pop();
|
|
472
523
|
var isawait = _await(t);
|
|
473
|
-
if (p0 > powermap["="]) q.push(...scanner2(`${getname(t.index)}=`));
|
|
524
|
+
if (p0 > powermap["="] || isawait) q.push(...scanner2(`${getname(t.index)}=`));
|
|
474
525
|
q.push.apply(q, t);
|
|
475
526
|
q.push.apply(q, b);
|
|
476
527
|
if (isawait) q.push(NEXT);
|
|
@@ -500,41 +551,44 @@ var _express = function (body, getname, ret) {
|
|
|
500
551
|
}
|
|
501
552
|
}
|
|
502
553
|
var b = body.slice(bx, cx);
|
|
554
|
+
var needname = false;
|
|
503
555
|
if (cache.length) while (cache.length) {
|
|
504
556
|
var p = cache.pop();
|
|
505
557
|
if (needcomma(q)) q.push({ type: STAMP, text: ',' });
|
|
506
558
|
nameindex = cache[cache.length - 1].index;
|
|
507
559
|
var t = cache.pop();
|
|
508
560
|
var isawait = _await(t, nameindex);
|
|
509
|
-
if (p > powermap["="] && (ret || cache.length > 0)) q.push(...scanner2(`${getname(nameindex)}=`));
|
|
561
|
+
if (p > powermap["="] && (ret || ax >= 1 || cache.length > 0 || isawait)) q.push(...scanner2(`${getname(nameindex)}=`));
|
|
510
562
|
q.push.apply(q, t);
|
|
511
563
|
q.push.apply(q, b);
|
|
512
564
|
if (isawait) q.push(NEXT);
|
|
565
|
+
needname = true;
|
|
513
566
|
b = [{ type: EXPRESS, text: getname(nameindex) }];
|
|
514
567
|
}
|
|
515
568
|
else if (ax !== 1) {
|
|
516
569
|
if (ret && b.length || ax > 1) {
|
|
517
570
|
q.push(...scanner2(`${getname(nameindex)}=`));
|
|
518
571
|
q.push(...b);
|
|
572
|
+
needname = true;
|
|
519
573
|
}
|
|
520
574
|
else {
|
|
521
575
|
q.push(...b);
|
|
522
576
|
}
|
|
523
577
|
}
|
|
524
|
-
q.name = getname(nameindex);
|
|
578
|
+
if (needname) q.name = getname(nameindex);
|
|
525
579
|
if (ax === 1) {
|
|
526
580
|
if (q.length) q.push({ type: STAMP, text: ';' });
|
|
527
581
|
q.push(exps[0], { type: STAMP, text: "=" });
|
|
528
582
|
q.push(...b);
|
|
529
583
|
q.name = exps[0].text;
|
|
530
|
-
exps[0].set = getname(nameindex);
|
|
584
|
+
if (evals.length) exps[0].set = getname(nameindex);
|
|
531
585
|
exps.shift();
|
|
532
586
|
}
|
|
533
587
|
if (ax > 1) {
|
|
534
588
|
while (ax > 0) {
|
|
535
589
|
q.push({ type: STAMP, text: ';' });
|
|
536
590
|
var [e] = exps.splice(ax - 1, 1);
|
|
537
|
-
e.set = getname(nameindex + 1);
|
|
591
|
+
if (evals.length) e.set = getname(nameindex + 1);
|
|
538
592
|
q.push(e);
|
|
539
593
|
q.push(...scanner2(`=${getname(nameindex)}`))
|
|
540
594
|
ax--;
|
|
@@ -568,6 +622,10 @@ var getblock = function (body, cx) {
|
|
|
568
622
|
return body.slice(ax, cx);
|
|
569
623
|
};
|
|
570
624
|
var labels = [];
|
|
625
|
+
var scopes = [];
|
|
626
|
+
var isbreak = function (o) {
|
|
627
|
+
return o.type === STRAP && /^(break|return|continue|yield)$/.test(o.text);
|
|
628
|
+
};
|
|
571
629
|
|
|
572
630
|
function toqueue(body, getname, ret = false) {
|
|
573
631
|
var retn = false;
|
|
@@ -577,19 +635,28 @@ function toqueue(body, getname, ret = false) {
|
|
|
577
635
|
addresult(result, re);
|
|
578
636
|
}
|
|
579
637
|
var uniftop = function () {
|
|
580
|
-
for (var cx =
|
|
638
|
+
for (var cx = 3, dx = iftop.length; cx < dx; cx += 3) {
|
|
581
639
|
var findex = iftop[cx];
|
|
640
|
+
var r = iftop[cx + 1];
|
|
582
641
|
var p = result[findex - 1];
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
642
|
+
if (!r) {
|
|
643
|
+
p.pop();
|
|
644
|
+
p.push(...scanner2(`[${result.length + 1 - findex},0]`));
|
|
645
|
+
relink(p);
|
|
646
|
+
}
|
|
586
647
|
}
|
|
587
|
-
for (var cx = 0, dx = iftop.length -
|
|
648
|
+
for (var cx = 0, dx = iftop.length - 2; cx < dx;) {
|
|
588
649
|
var findex = iftop[cx++];
|
|
589
650
|
var f = result[findex];
|
|
651
|
+
var r = iftop[cx++];
|
|
590
652
|
var n = iftop[cx++];
|
|
591
|
-
if (
|
|
592
|
-
var c = scanner2(`if(
|
|
653
|
+
if (r) {
|
|
654
|
+
var c = scanner2(`if(${n})`);
|
|
655
|
+
f.unshift.apply(f, c);
|
|
656
|
+
relink(f);
|
|
657
|
+
}
|
|
658
|
+
else if (f) {
|
|
659
|
+
var c = scanner2(`if(${n})return [${iftop.length > cx ? iftop[cx] - findex : result.length - findex},0];`);
|
|
593
660
|
f.unshift.apply(f, c);
|
|
594
661
|
relink(f);
|
|
595
662
|
}
|
|
@@ -608,6 +675,7 @@ function toqueue(body, getname, ret = false) {
|
|
|
608
675
|
relink(q);
|
|
609
676
|
}
|
|
610
677
|
}
|
|
678
|
+
return result[result.length - 1];
|
|
611
679
|
};
|
|
612
680
|
var poplabel = function () {
|
|
613
681
|
var e = labels.pop();
|
|
@@ -619,7 +687,7 @@ function toqueue(body, getname, ret = false) {
|
|
|
619
687
|
var r = result[cx];
|
|
620
688
|
if (r[r.length - 1] === end) { break }
|
|
621
689
|
}
|
|
622
|
-
end.push({ type: VALUE, text: result.length - cx }, { type: STAMP, text: "," }, { type: VALUE, text: "0" });
|
|
690
|
+
end.push({ type: VALUE, text: b.contat - cx ? b.continue : result.length - cx }, { type: STAMP, text: "," }, { type: VALUE, text: "0" });
|
|
623
691
|
relink(end);
|
|
624
692
|
}
|
|
625
693
|
}
|
|
@@ -634,23 +702,20 @@ function toqueue(body, getname, ret = false) {
|
|
|
634
702
|
if (!o) break;
|
|
635
703
|
while (labels.length) {
|
|
636
704
|
var e = labels[labels.length - 1];
|
|
637
|
-
if (e.type !== LABEL)
|
|
638
|
-
|
|
639
|
-
}
|
|
640
|
-
if (e.keep) {
|
|
641
|
-
e.keep = false;
|
|
642
|
-
break;
|
|
643
|
-
}
|
|
705
|
+
if (e.type !== LABEL && !iftop) break;
|
|
706
|
+
if (scopes.lastIndexOf(e.scope) >= 0) break;
|
|
644
707
|
poplabel();
|
|
645
708
|
}
|
|
646
709
|
|
|
647
710
|
if (o.type === LABEL) {
|
|
648
|
-
o.
|
|
711
|
+
o.scope = scopes[scopes.length - 1];
|
|
649
712
|
labels.push(o);
|
|
650
713
|
continue;
|
|
651
714
|
}
|
|
652
715
|
if (o.type === SCOPED && o.entry === '{' && !o.isExpress) {
|
|
716
|
+
scopes.push(o);
|
|
653
717
|
var b = toqueue(o, getname, false);
|
|
718
|
+
scopes.pop();
|
|
654
719
|
// addresult(result, b);
|
|
655
720
|
result.push.apply(result, b);
|
|
656
721
|
cx++;
|
|
@@ -658,7 +723,14 @@ function toqueue(body, getname, ret = false) {
|
|
|
658
723
|
continue;
|
|
659
724
|
}
|
|
660
725
|
a: if (o.type === STRAP) {
|
|
661
|
-
if (/^(new|typeof|
|
|
726
|
+
if (/^(new|typeof|await)$/.test(o.text)) {
|
|
727
|
+
break a;
|
|
728
|
+
}
|
|
729
|
+
if (o.text === 'yield') {
|
|
730
|
+
retn = [YIELD];
|
|
731
|
+
ret = true;
|
|
732
|
+
bx = cx + 1;
|
|
733
|
+
cx++;
|
|
662
734
|
break a;
|
|
663
735
|
}
|
|
664
736
|
if (o.text === 'return') {
|
|
@@ -668,8 +740,14 @@ function toqueue(body, getname, ret = false) {
|
|
|
668
740
|
cx++;
|
|
669
741
|
break a;
|
|
670
742
|
}
|
|
671
|
-
if (o.text
|
|
672
|
-
cx =
|
|
743
|
+
if (/^(async|function)$/.test(o.text)) {
|
|
744
|
+
cx = skipAssignment(body, cx);
|
|
745
|
+
addresult(result, body.slice(bx, cx));
|
|
746
|
+
bx = cx + 1;
|
|
747
|
+
break a;
|
|
748
|
+
}
|
|
749
|
+
if (/^(break|continue)$/.test(o.text)) {
|
|
750
|
+
cx = _break(body, cx, result, o.text === 'continue');
|
|
673
751
|
bx = cx + 1;
|
|
674
752
|
continue;
|
|
675
753
|
};
|
|
@@ -714,32 +792,25 @@ function toqueue(body, getname, ret = false) {
|
|
|
714
792
|
var elseif = false;
|
|
715
793
|
if (o.text === 'else') {
|
|
716
794
|
ifpatch();
|
|
717
|
-
iftop.push(result.length);
|
|
718
795
|
while (body[cx] !== o.next) cx++;
|
|
719
796
|
o = o.next;
|
|
797
|
+
var isbr = isbreak(o);
|
|
798
|
+
iftop.push(result.length, isbr);
|
|
720
799
|
elseif = true;
|
|
721
800
|
}
|
|
722
801
|
if (o.text === 'if') {
|
|
723
802
|
while (body[cx] !== o.next) cx++;
|
|
724
803
|
o = o.next;
|
|
725
|
-
var
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
n = o.first.text;
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
if (!n) {
|
|
732
|
-
unblock(o);
|
|
733
|
-
n = getname(0);
|
|
734
|
-
}
|
|
804
|
+
var isbr = isbreak(o.next);
|
|
805
|
+
var n = getCondition(o, unblock, !isbr);
|
|
806
|
+
o = o.next;
|
|
735
807
|
if (!elseif) {
|
|
736
808
|
if (iftop) uniftop();
|
|
737
|
-
iftop = [result.length, n];
|
|
809
|
+
iftop = [result.length, isbr, n];
|
|
738
810
|
}
|
|
739
811
|
else {
|
|
740
812
|
iftop.push(n);
|
|
741
813
|
}
|
|
742
|
-
o = o.next;
|
|
743
814
|
elseif = true;
|
|
744
815
|
}
|
|
745
816
|
if (elseif) {
|
|
@@ -778,7 +849,13 @@ var ret_ = '';
|
|
|
778
849
|
module.exports = function (body, newname, ret) {
|
|
779
850
|
if (ret) ret = isString(ret) ? ret : newname();
|
|
780
851
|
var ret0 = ret_;
|
|
781
|
-
|
|
852
|
+
var ret1 = null;
|
|
853
|
+
if (ret) ret_ = isString(ret) ? ret : {
|
|
854
|
+
toString() {
|
|
855
|
+
if (ret1) return ret1;
|
|
856
|
+
return newname();
|
|
857
|
+
}
|
|
858
|
+
};
|
|
782
859
|
var tmpnames = [];
|
|
783
860
|
var p = 0;
|
|
784
861
|
var getname = function (i) {
|
|
@@ -786,7 +863,7 @@ module.exports = function (body, newname, ret) {
|
|
|
786
863
|
if (!tmpnames[i]) tmpnames[i] = newname();
|
|
787
864
|
return tmpnames[i];
|
|
788
865
|
};
|
|
789
|
-
var res = toqueue(body, getname,
|
|
866
|
+
var res = toqueue(body, getname, false);
|
|
790
867
|
ret_ = ret0;
|
|
791
868
|
return res;
|
|
792
869
|
};
|
|
@@ -16,7 +16,7 @@ test('a * a + b * c', "_ = a * a, _0 = b * c, _ + _0");
|
|
|
16
16
|
test('a * a + b * c * c ** d', "_ = a * a, _0 = b * c, _1 = c ** d, _0 = _0 * _1, _ + _0");
|
|
17
17
|
test('a * a || b * c * c ** d', "_ = a * a @re _ = b * c, _0 = c ** d, _ * _0");
|
|
18
18
|
test('a * a || b * c || c * d', "_ = a * a @re _ = b * c @re c * d");
|
|
19
|
-
test('a?b:c', "
|
|
19
|
+
test('a?b:c', "if (a) return [1, 0]; _ = b; return [2, 0]; _ = c");
|
|
20
20
|
test('a * a && b * c * c ** d', "_ = a * a @rz _ = b * c, _0 = c ** d, _ * _0");
|
|
21
21
|
test('a = 1 + 2', "_ = 1 + 2, a = _", true);
|
|
22
22
|
test('a = b', "a = b", true);
|
|
@@ -24,32 +24,35 @@ test('a = b = c', "_ = c, b = _, a = _", true);
|
|
|
24
24
|
test('a = b = c + d', "_ = c + d, b = _, a = _", true);
|
|
25
25
|
test('a = b = c + d * 1', "_ = d * 1, _ = c + _, b = _, a = _", true);
|
|
26
26
|
test('return a = b', "a = b; return [a, 2]", true);
|
|
27
|
-
test('a*a', "
|
|
28
|
-
test('a * a && b * c * c ** d', "_ = a * a; if (!_) return [1, 0]; _ = b * c, _0 = c ** d, _
|
|
29
|
-
test('a * a || b * c * c ** d', "_ = a * a; if (_) return [1, 0]; _ = b * c, _0 = c ** d, _
|
|
30
|
-
test('a * a ?? b * c * c ** d', "_ = a * a; if (_ !== null && _ !== undefined) return [1, 0]; _ = b * c, _0 = c ** d, _
|
|
31
|
-
test('a * a && await b*c', "_ = a * a; if (!_) return [2, 0]; _ = b; return [_, 1]; _ = @; _
|
|
27
|
+
test('a*a', "a * a", true);
|
|
28
|
+
test('a * a && b * c * c ** d', "_ = a * a; if (!_) return [1, 0]; _ = b * c, _0 = c ** d, _ * _0", true);
|
|
29
|
+
test('a * a || b * c * c ** d', "_ = a * a; if (_) return [1, 0]; _ = b * c, _0 = c ** d, _ * _0", true);
|
|
30
|
+
test('a * a ?? b * c * c ** d', "_ = a * a; if (_ !== null && _ !== undefined) return [1, 0]; _ = b * c, _0 = c ** d, _ * _0", true);
|
|
31
|
+
test('a * a && await b*c', "_ = a * a; if (!_) return [2, 0]; _ = b; return [_, 1]; _ = @; _ * c", true);
|
|
32
32
|
|
|
33
33
|
test("await a", "_ = a; return [_, 1]", true);
|
|
34
|
+
test("yield a", "_ = a; return [_, 3]", true);
|
|
34
35
|
test("await a()", "_ = a(); return [_, 1]", true);
|
|
35
|
-
test("(
|
|
36
|
+
test("yield a()", "_ = a(); return [_, 3]", true);
|
|
37
|
+
test("(1+ +1)", "_ = +1, _ = 1 + _; (_)", true);
|
|
36
38
|
test("await a(await b)", "_ = b; return [_, 1]; _ = @; _ = a(_); return [_, 1]", true);
|
|
37
39
|
test("await a(await b).s(await c)", "_ = b; return [_, 1]; _ = @; _ = a(_); _0 = c; return [_0, 1]; _0 = @; _ = _.s(_0); return [_, 1]", true);
|
|
38
|
-
test("a*a + await a(await b).s(await c)", "_ = a * a; _0 = b; return [_0, 1]; _0 = @; _0 = a(_0); _1 = c; return [_1, 1]; _1 = @; _0 = _0.s(_1); return [_0, 1]; _0 = @; _
|
|
39
|
-
test("a*a + await a(await b(await c)).s(await c)", "_ = a * a; _0 = c; return [_0, 1]; _0 = @; _0 = b(_0); return [_0, 1]; _0 = @; _0 = a(_0); _1 = c; return [_1, 1]; _1 = @; _0 = _0.s(_1); return [_0, 1]; _0 = @; _
|
|
40
|
+
test("a*a + await a(await b).s(await c)", "_ = a * a; _0 = b; return [_0, 1]; _0 = @; _0 = a(_0); _1 = c; return [_1, 1]; _1 = @; _0 = _0.s(_1); return [_0, 1]; _0 = @; _ + _0", true);
|
|
41
|
+
test("a*a + await a(await b(await c)).s(await c)", "_ = a * a; _0 = c; return [_0, 1]; _0 = @; _0 = b(_0); return [_0, 1]; _0 = @; _0 = a(_0); _1 = c; return [_1, 1]; _1 = @; _0 = _0.s(_1); return [_0, 1]; _0 = @; _ + _0", true);
|
|
40
42
|
test("await a, await b", "_ = a; return [_, 1]; _ = b; return [_, 1]", true);
|
|
41
|
-
test("await a * b, await b", "_ = a; return [_, 1]; _ = @; _
|
|
43
|
+
test("await a * b, await b", "_ = a; return [_, 1]; _ = @; _ * b; _ = b; return [_, 1]", true);
|
|
42
44
|
test("if(a);", "", true);
|
|
43
45
|
test("if(a) await b", "if (!a) return [1, 0]; _ = b; return [_, 1]", true);
|
|
44
46
|
test("if(a) await b; else await c", "if (!a) return [2, 0]; _ = b; return [_, 1]; return [2, 0]; _ = c; return [_, 1]", true);
|
|
45
47
|
test("if(a) b; else await c", "if (!a) return [1, 0]; _ = b; return [2, 0]; _ = c; return [_, 1]", true);
|
|
46
48
|
test("if(a) await b; else if(e) await c", "if (!a) return [2, 0]; _ = b; return [_, 1]; return [2, 0]; if (!e) return [1, 0]; _ = c; return [_, 1]", true);
|
|
47
49
|
test("if(a) await b; else if(e) await c else await d", "if (!a) return [2, 0]; _ = b; return [_, 1]; return [4, 0]; if (!e) return [2, 0]; _ = c; return [_, 1]; return [2, 0]; _ = d; return [_, 1]", true);
|
|
48
|
-
test("if(await a) await b", "_ = a; return [_, 1]; if (
|
|
50
|
+
test("if(await a) await b", "_ = a; return [_, 1]; if (!@) return [1, 0]; _ = b; return [_, 1]", true);
|
|
49
51
|
test("for(a=0;a<10;a++) await a", "a = 0; return [1, 0]; _ = a < 10; if (!_) return [3, 0]; _ = a; return [_, 1]; _ = a++; return [-2, 0]", true);
|
|
50
52
|
test("for(a=0;a<10;a++) await a, await b", "a = 0; return [1, 0]; _ = a < 10; if (!_) return [4, 0]; _ = a; return [_, 1]; _ = b; return [_, 1]; _ = a++; return [-3, 0]", true);
|
|
51
|
-
test("
|
|
52
|
-
test("
|
|
53
|
+
test("for(a=0;b=2,a<10;a++) await a, await b", "a = 0; return [1, 0]; b = 2; _ = a < 10; if (!_) return [4, 0]; _ = a; return [_, 1]; _ = b; return [_, 1]; _ = a++; return [-3, 0]", true);
|
|
54
|
+
test("while(a) await b", "if (!a) return [3, 0]; _ = b; return [_, 1]; return [-2, 0]", true);
|
|
55
|
+
test("do{await b}while(a)", "_ = b; return [_, 1]; _ = @; if (a) return [-1, 0]; return [1, 0]", true);
|
|
53
56
|
test("switch(a){case 1:}", "_ = a; _0 = 1; if (_ === _0) return [1, 0]", true);
|
|
54
57
|
test("switch(a){case 1:break;}", "_ = a; _0 = 1; if (_ === _0) return [1, 0]; return [1, 0]", true);
|
|
55
58
|
test("switch(a){case 1:break;case 2:break;}", "_ = a; _0 = 1; if (_ === _0) return [1, 0]; _0 = 2; if (_ === _0) return [2, 0]; return [2, 0]; return [1, 0]", true);
|
package/coms/zimoli/zimoli.js
CHANGED
|
@@ -280,10 +280,6 @@ function prepare(pgpath, ok) {
|
|
|
280
280
|
var state = createState(pgpath);
|
|
281
281
|
state.state = state;
|
|
282
282
|
var _with_elements = [];
|
|
283
|
-
state.with = function (element) {
|
|
284
|
-
if (element) _with_elements.push(element);
|
|
285
|
-
return _with_elements;
|
|
286
|
-
};
|
|
287
283
|
state.path = function (url) {
|
|
288
284
|
if (/^\.+\//.test(url)) {
|
|
289
285
|
url = pgpath.replace(/[^\/]*$/, url);
|
|
@@ -304,10 +300,6 @@ function prepare(pgpath, ok) {
|
|
|
304
300
|
}
|
|
305
301
|
return url;
|
|
306
302
|
};
|
|
307
|
-
state.popup = function (a) {
|
|
308
|
-
a = state.path(a);
|
|
309
|
-
return popup.apply(this, [a].concat([].slice.call(arguments, 1)));
|
|
310
|
-
};
|
|
311
303
|
state.init = function (a) {
|
|
312
304
|
a = state.path(a);
|
|
313
305
|
return init.apply(this, [a].concat([].slice.call(arguments, 1)));
|
|
@@ -347,7 +339,7 @@ function prepare(pgpath, ok) {
|
|
|
347
339
|
};
|
|
348
340
|
state.titlebar = function () {
|
|
349
341
|
var realTitleBar = titlebar.apply(null, arguments);
|
|
350
|
-
if (!realTitleBar.parentNode)
|
|
342
|
+
if (!realTitleBar.parentNode) _with_elements.push(realTitleBar);
|
|
351
343
|
return realTitleBar;
|
|
352
344
|
};
|
|
353
345
|
var roles = res || null;
|
|
@@ -405,7 +397,7 @@ function create(pagepath, args, from, needroles) {
|
|
|
405
397
|
}
|
|
406
398
|
else if (isFunction(pagepath)) {
|
|
407
399
|
var pg = pagepath;
|
|
408
|
-
var { with: _with_elements, state = {}, onback: _pageback_listener, roles } = pg;
|
|
400
|
+
var { with: _with_elements = [], state = {}, onback: _pageback_listener, roles } = pg;
|
|
409
401
|
}
|
|
410
402
|
if (!checkroles(user.roles, roles) || !checkroles(user.roles, needroles)) {
|
|
411
403
|
// 检查权限
|
|
@@ -414,18 +406,15 @@ function create(pagepath, args, from, needroles) {
|
|
|
414
406
|
}
|
|
415
407
|
return alert(i18n`没有权限!`, 0);
|
|
416
408
|
}
|
|
417
|
-
|
|
418
|
-
state.with = function (element) {
|
|
419
|
-
if (element) _with_elements.push(element);
|
|
420
|
-
return _with_elements;
|
|
421
|
-
};
|
|
409
|
+
var _with_length = _with_elements.length;
|
|
422
410
|
state.onback = function (handler) {
|
|
423
411
|
_pageback_listener = handler;
|
|
424
412
|
};
|
|
425
413
|
var _page = pg.call(state, args, from);
|
|
426
414
|
if (undefined === args || null === args) args = {};
|
|
427
415
|
if (_page) {
|
|
428
|
-
if (
|
|
416
|
+
if (_with_length) _page.with = _with_elements.concat(_page.with || []);
|
|
417
|
+
_with_elements.splice(_with_length, _with_elements.length - _with_length);
|
|
429
418
|
if (args.initialStyle) _page.initialStyle = args.initialStyle;
|
|
430
419
|
if (args.holdupStyle) _page.holdupStyle = args.holdupStyle;
|
|
431
420
|
if (_page.initialStyle && !_page.holdupStyle) {
|