efront 3.38.2 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coms/basic_/readme.md +1 -1
- package/coms/compile/common.js +16 -3
- package/coms/compile/downLevel.js +57 -58
- package/coms/compile/downLevel_test.js +112 -62
- package/coms/compile/unstruct.js +56 -13
- package/coms/compile/unstruct_test.js +1 -1
- package/coms/reptile/colored_console.js +2 -2
- package/docs//347/211/210/346/234/254/350/257/264/346/230/216.md +2 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/readme.md +1 -1
package/coms/basic_/readme.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# efront 兼容性说明
|
|
2
2
|
* `coms/basic_`目录的代码均为非标准实现,如果你要兼容低版本的运行环境,尽量避免使用高级的功能
|
|
3
|
-
*
|
|
3
|
+
* 3.x及以前版本的`efront`进行代码降级时用到了`typescript`,所以下文有些问题的描述会误伤`typescript`,不用觉得奇怪。
|
|
4
4
|
* 已知在转换成低版本代码后与高级版本有区别的语法如下:
|
|
5
5
|
1. ```javascript
|
|
6
6
|
class ... extends Array {...}
|
package/coms/compile/common.js
CHANGED
|
@@ -248,21 +248,30 @@ function snapSentenceHead(o) {
|
|
|
248
248
|
}
|
|
249
249
|
return o;
|
|
250
250
|
}
|
|
251
|
-
|
|
251
|
+
var getStrapHead = function (o) {
|
|
252
|
+
var p = o.prev;
|
|
253
|
+
if (p && p.type === STRAP && !p.transive) return p;
|
|
254
|
+
if (p && p.type === STRAP && p.text === 'await') p = p.prev;
|
|
255
|
+
if (p && p.type === STRAP && p.text === 'for') return p;
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
252
258
|
var snapExpressHead = function (o) {
|
|
253
259
|
if (!o || o.type & ~(EXPRESS | SCOPED | QUOTED)) return o;
|
|
254
260
|
var a = o;
|
|
255
261
|
while (o && o.prev) {
|
|
256
262
|
var p = o.prev;
|
|
257
263
|
if (p && p.type === STRAP && p.text === 'new') return p;
|
|
264
|
+
if (o.type === SCOPED && o.entry === '(') {
|
|
265
|
+
var h = getStrapHead(o);
|
|
266
|
+
if (h) return h;
|
|
267
|
+
}
|
|
258
268
|
if (o.type === SCOPED && o.entry !== '{'
|
|
259
269
|
|| o.type === EXPRESS && /^(\??\.[^\.]|\[)/.test(o.text)
|
|
260
270
|
|| /\.$/.test(p.text) && !p.isdigit
|
|
261
271
|
|| o.type === QUOTED && (o.length || /^\`/.test(o.text))
|
|
262
272
|
) {
|
|
263
273
|
if (p.type === SCOPED && p.entry === '(') {
|
|
264
|
-
|
|
265
|
-
if (pp && pp.type === STRAP && !p.transive) return o;
|
|
274
|
+
if (getStrapHead(p)) return o;
|
|
266
275
|
}
|
|
267
276
|
if (p.type & (EXPRESS | VALUE | QUOTED | SCOPED)) {
|
|
268
277
|
a = o;
|
|
@@ -526,6 +535,10 @@ var createScoped = function (parsed, wash) {
|
|
|
526
535
|
break;
|
|
527
536
|
case "for":
|
|
528
537
|
o = o.next;
|
|
538
|
+
if (o.type === STRAP && o.text === 'await') {
|
|
539
|
+
funcbody.async = funcbody.await = true;
|
|
540
|
+
o = o.next;
|
|
541
|
+
}
|
|
529
542
|
isScope = true;
|
|
530
543
|
break;
|
|
531
544
|
|
|
@@ -24,7 +24,7 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj) {
|
|
|
24
24
|
var dp = 0;
|
|
25
25
|
if (typeof k === 'number' && k < 0) {
|
|
26
26
|
dp = 1;
|
|
27
|
-
k = `${tmpname}
|
|
27
|
+
k = `${tmpname}["length"]>${doged - k - 1}?${tmpname}[${tmpname}["length"] - ${-k}]:undefined`;
|
|
28
28
|
} else {
|
|
29
29
|
k = tmpname + k;
|
|
30
30
|
}
|
|
@@ -123,12 +123,12 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj) {
|
|
|
123
123
|
map[a] = a;
|
|
124
124
|
});
|
|
125
125
|
d.attributes.forEach(dec);
|
|
126
|
-
write(name, `rest_(${tmpname},[${Object.keys(map)}])`, false);
|
|
126
|
+
write(name, `rest_(${tmpname},[${Object.keys(map)}])`, false), rootenvs.rest_ = true;
|
|
127
127
|
}
|
|
128
128
|
else {
|
|
129
129
|
doged = at + 1;
|
|
130
130
|
head.forEach(dec);
|
|
131
|
-
write(name, `
|
|
131
|
+
write(name, `slice_["call"](${tmpname},${at}${a > at ? `,${at - a}` : ''})`, rest.length > 0), rootenvs.slice_ = true;
|
|
132
132
|
doged = at + 1;
|
|
133
133
|
total = rest.length;
|
|
134
134
|
rest.forEach(dec);
|
|
@@ -245,7 +245,7 @@ var killmap = function (body, i, _getobjname, killobj) {
|
|
|
245
245
|
s = m, p = m.prev;
|
|
246
246
|
if (m.type === EXPRESS) break;
|
|
247
247
|
while (m && (m.type === STRAP || m.type === STAMP)) m = m.next;
|
|
248
|
-
if (!m || m.
|
|
248
|
+
if (!m || m.type & (PROPERTY | QUOTED | EXPRESS) && /^\[/.test(m.text) || m.isprop && (m.type === SCOPED || m.short || m.next && m.next.type === SCOPED)) {
|
|
249
249
|
break;
|
|
250
250
|
}
|
|
251
251
|
m = m.next;
|
|
@@ -425,10 +425,12 @@ var setprop = function (prop, k, d, q) {
|
|
|
425
425
|
else pe = null;
|
|
426
426
|
}
|
|
427
427
|
if (!d[prop.name]) {
|
|
428
|
-
let tmp = scanner2(`\r\nObject
|
|
428
|
+
let tmp = scanner2(`\r\nObject["defineProperty"](${k},${prop.name},{})`);
|
|
429
429
|
insert1(q, null, ...tmp);
|
|
430
430
|
if (pe) insert1(q, null, pe);
|
|
431
|
-
|
|
431
|
+
tmp = tmp[tmp.length - 1];
|
|
432
|
+
tmp = tmp[tmp.length - 1];
|
|
433
|
+
d[prop.name] = tmp;
|
|
432
434
|
}
|
|
433
435
|
if (d[prop.name].length) insert1(d[prop.name], null, { type: STAMP, text: ',' });
|
|
434
436
|
insert1(d[prop.name], null, { type: PROPERTY, text: prop.get ? "get" : "set" });
|
|
@@ -489,7 +491,7 @@ var killcls = function (body, i, getname_) {
|
|
|
489
491
|
while (m) {
|
|
490
492
|
var [prop, m] = getprop(o, m);
|
|
491
493
|
if (!prop.value.length) prop.value = scanner2('undefined;');
|
|
492
|
-
var k = prop.static ? clz.name : `${clz.name}
|
|
494
|
+
var k = prop.static ? clz.name : `${clz.name}["prototype"]`;
|
|
493
495
|
var d = prop.static ? static_ : define_;
|
|
494
496
|
if (prop.get || prop.set || prop.static) {
|
|
495
497
|
setprop(prop, k, d, defines);
|
|
@@ -518,16 +520,16 @@ var killcls = function (body, i, getname_) {
|
|
|
518
520
|
if (cs.used.this) rename(cs.used, 'this', newt);
|
|
519
521
|
var inited = false;
|
|
520
522
|
assign.forEach(o => {
|
|
521
|
-
if (o.type === EXPRESS) o.text = o.text.replace(/^this
|
|
523
|
+
if (o.type === EXPRESS) o.text = o.text.replace(/^this([\[\.]|$)/g, newt + "$1");
|
|
522
524
|
});
|
|
523
525
|
if (cs.used.super) {
|
|
524
526
|
cs.used.super.forEach(o => {
|
|
525
527
|
if (o.text !== 'super') return;
|
|
526
528
|
var n = o.next;
|
|
527
529
|
if (!n || n.type !== SCOPED || n.entry !== "(") return;
|
|
528
|
-
o.text = base + '
|
|
530
|
+
o.text = base + '["call"]';
|
|
529
531
|
if (!inited) {
|
|
530
|
-
insert1(o.queue, o, ...assign);
|
|
532
|
+
insert1(o.queue, skipAssignment(o), ...assign);
|
|
531
533
|
}
|
|
532
534
|
inited = true;
|
|
533
535
|
insert1(o.queue, o, ...scanner2(`var ${newt}=`));
|
|
@@ -539,11 +541,11 @@ var killcls = function (body, i, getname_) {
|
|
|
539
541
|
if (scoped.used.super) {
|
|
540
542
|
scoped.used.super.forEach(o => {
|
|
541
543
|
if (!/^super(\.|\[|$)/.test(o.text)) return;
|
|
542
|
-
o.text = `${base}
|
|
543
|
-
insert1(o.queue, o.next, ...scanner2('
|
|
544
|
+
o.text = `${base}["prototype"]` + o.text.replace(/^super/, '');
|
|
545
|
+
insert1(o.queue, o.next, ...scanner2('["bind"](this)'));
|
|
544
546
|
})
|
|
545
547
|
}
|
|
546
|
-
if (!inited) constructor[1].unshift(...scanner2(`\r\nvar ${newt}=${base}
|
|
548
|
+
if (!inited) constructor[1].unshift(...scanner2(`\r\nvar ${newt}=${base}["apply"](this,arguments)||this;\r\n`), ...assign);
|
|
547
549
|
}
|
|
548
550
|
else {
|
|
549
551
|
constructor[1].unshift(...assign);
|
|
@@ -582,7 +584,7 @@ var indexof = function (list, o, i) {
|
|
|
582
584
|
return i;
|
|
583
585
|
};
|
|
584
586
|
// 数组或参数展开
|
|
585
|
-
var killspr = function (body, i, _getobjname,
|
|
587
|
+
var killspr = function (body, i, _getobjname, killobj) {
|
|
586
588
|
var o = body[i];
|
|
587
589
|
var m = o.first;
|
|
588
590
|
if (!m) return i + 1;
|
|
@@ -592,12 +594,12 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
|
|
|
592
594
|
var s = m;
|
|
593
595
|
s.text = s.text.replace(/^\.\.\./, '');
|
|
594
596
|
m = skipAssignment(m);
|
|
595
|
-
var q = scanner2(`
|
|
597
|
+
var q = scanner2(`slice_["call"]()`);
|
|
598
|
+
rootenvs.slice_ = true;
|
|
596
599
|
var v = splice2(o, s, m);
|
|
597
600
|
if (m) splice2(o, m, m = m.next);
|
|
598
601
|
killobj(v);
|
|
599
|
-
insert1(q[1], null, ...v);
|
|
600
|
-
setsolid(q, q[0]);
|
|
602
|
+
insert1(q[q.length - 1], null, ...v);
|
|
601
603
|
return q;
|
|
602
604
|
};
|
|
603
605
|
var killnext = function (m) {
|
|
@@ -613,11 +615,12 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
|
|
|
613
615
|
index++;
|
|
614
616
|
}
|
|
615
617
|
if (!m) return i + 1;
|
|
616
|
-
var c = scanner2('
|
|
618
|
+
var c = scanner2('["concat"]()');
|
|
617
619
|
var next = o.next;
|
|
618
620
|
if (o.entry === '(') {
|
|
619
621
|
var r = snapExpressHead(o);
|
|
620
622
|
var rt = r.type === EXPRESS && r.text.replace(/^\.\.\./, '');
|
|
623
|
+
var p = o.prev;
|
|
621
624
|
if (r === o);
|
|
622
625
|
else if (
|
|
623
626
|
r === o.prev && r.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
|
|
@@ -625,8 +628,12 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
|
|
|
625
628
|
var n = /\.|\[/.test(rt) ? rt.replace(/\.[^\.]*|\[[^\]]*\]$/, '') : "null";
|
|
626
629
|
splice(o, 0, 0, ...scanner2(n + ","));
|
|
627
630
|
}
|
|
631
|
+
else if (p && r === p.prev && p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
|
|
632
|
+
splice(o, 0, 0, ...scanner2(rt + ","));
|
|
633
|
+
p = r;
|
|
634
|
+
}
|
|
628
635
|
else {
|
|
629
|
-
var
|
|
636
|
+
var n = null, hasdot = false;
|
|
630
637
|
var pt = p.type === EXPRESS && p.text.replace(/^\.\.\./, '');
|
|
631
638
|
if (p.type === EXPRESS && (n = /^(?:[\s\S]*[^\.])?(\.[^\.]*|\[[^\]]*\])$/.exec(pt))) {
|
|
632
639
|
hasdot = p.text.length !== pt.length;
|
|
@@ -652,7 +659,7 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
|
|
|
652
659
|
if (cx >= 0) splice(h1, cx, 1);
|
|
653
660
|
}
|
|
654
661
|
}
|
|
655
|
-
splice(body, i++, 0, ...scanner2('
|
|
662
|
+
splice(body, i++, 0, ...scanner2('["apply"]'));
|
|
656
663
|
var m1 = skipAssignment(m);
|
|
657
664
|
if (index > 0 || m1 && m1.next) {
|
|
658
665
|
var h = splice(o, 2, o.length);
|
|
@@ -696,7 +703,7 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
|
|
|
696
703
|
return indexof(body, next, i);
|
|
697
704
|
};
|
|
698
705
|
|
|
699
|
-
var killobj = function (body, getobjname, getletname, getname_, letname_,
|
|
706
|
+
var killobj = function (body, getobjname, getletname, getname_, letname_, deep = 0) {
|
|
700
707
|
var i = 0;
|
|
701
708
|
var _getdeep = function () {
|
|
702
709
|
deep++;
|
|
@@ -712,7 +719,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
|
|
|
712
719
|
return getobjname(deep + i);
|
|
713
720
|
};
|
|
714
721
|
var deepkill = function (o) {
|
|
715
|
-
killobj(o, getobjname, getletname, getname_, letname_,
|
|
722
|
+
killobj(o, getobjname, getletname, getname_, letname_, deep);
|
|
716
723
|
if (o.await_) body.await_ = true;
|
|
717
724
|
};
|
|
718
725
|
while (i < body.length) {
|
|
@@ -758,9 +765,11 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
|
|
|
758
765
|
case "class":
|
|
759
766
|
i = killcls(body, i, letname_);
|
|
760
767
|
break;
|
|
768
|
+
case "for":
|
|
761
769
|
case "function":
|
|
762
770
|
o = o.next;
|
|
763
|
-
if (o && o.type ===
|
|
771
|
+
if (o && o.type === STRAP) o = o.next;
|
|
772
|
+
else if (o && o.type === STAMP) {
|
|
764
773
|
i++;
|
|
765
774
|
var n = body.indexOf(o, i) + 1;
|
|
766
775
|
o = o.next;
|
|
@@ -798,7 +807,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
|
|
|
798
807
|
i = killdec(body, i, _getdeepname, '', deepkill);
|
|
799
808
|
}
|
|
800
809
|
else {
|
|
801
|
-
i = killspr(body, i, _getobjname,
|
|
810
|
+
i = killspr(body, i, _getobjname, deepkill);
|
|
802
811
|
}
|
|
803
812
|
continue;
|
|
804
813
|
}
|
|
@@ -808,11 +817,11 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
|
|
|
808
817
|
var p = o.prev;
|
|
809
818
|
if (p.transive || /^(if|else|while|with|switch)$/.test(p.text)) deepkill(o);
|
|
810
819
|
}
|
|
811
|
-
else if (!o.prev || o.prev.type
|
|
820
|
+
else if (!o.prev || o.prev.type & (STAMP | STRAP)) {
|
|
812
821
|
deepkill(o);
|
|
813
822
|
}
|
|
814
823
|
else {
|
|
815
|
-
i = killspr(body, i, _getobjname,
|
|
824
|
+
i = killspr(body, i, _getobjname, deepkill);
|
|
816
825
|
continue;
|
|
817
826
|
}
|
|
818
827
|
}
|
|
@@ -936,6 +945,7 @@ var unforof = function (o, getnewname, used) {
|
|
|
936
945
|
var hasawait = false;
|
|
937
946
|
if (o.type === STRAP && o.text === 'await') {
|
|
938
947
|
hasawait = true;
|
|
948
|
+
splice2(o.queue, o, o.next);
|
|
939
949
|
o = o.next;
|
|
940
950
|
}
|
|
941
951
|
var m = o.first;
|
|
@@ -957,7 +967,7 @@ var unforof = function (o, getnewname, used) {
|
|
|
957
967
|
var iname = getnewname();
|
|
958
968
|
var gname = getnewname();
|
|
959
969
|
var oname;
|
|
960
|
-
var useSimpleLoop = !(rootHyper || used.Symbol
|
|
970
|
+
var useSimpleLoop = !(rootHyper || used.Symbol) && !hasawait;
|
|
961
971
|
if (!f.next && f.type === EXPRESS && !/\./.test(f.text) && used[f.origin || f.text.replace(/[\.\[][\s\S]*$/, '')].length === 1) {
|
|
962
972
|
splice2(o, m);
|
|
963
973
|
oname = f.text;
|
|
@@ -966,13 +976,13 @@ var unforof = function (o, getnewname, used) {
|
|
|
966
976
|
oname = getnewname();
|
|
967
977
|
splice2(o, n, f);
|
|
968
978
|
var mo = splice2(o, f);
|
|
969
|
-
if (useSimpleLoop) useSimpleLoop = mo.length === 1 && (mo[0].type === EXPRESS || mo[0].type === SCOPED && mo[0].entry === "[");
|
|
970
|
-
o.
|
|
971
|
-
o.
|
|
972
|
-
o.
|
|
979
|
+
if (useSimpleLoop && !hasawait) useSimpleLoop = mo.length === 1 && (mo[0].type === EXPRESS || mo[0].type === SCOPED && mo[0].entry === "[");
|
|
980
|
+
splice(o, o.length, 0, ...scanner2(`${oname}=`));
|
|
981
|
+
splice(o, o.length, 0, ...mo);
|
|
982
|
+
splice(o, o.length, 0, { type: STAMP, text: ',' });
|
|
973
983
|
}
|
|
974
|
-
if (useSimpleLoop) o.
|
|
975
|
-
else rootenvs.Symbol = true, o.
|
|
984
|
+
if (useSimpleLoop) splice(o, o.length, 0, ...scanner2(`${iname}=0,${gname}=${oname}["length"];${iname}<${gname}&&(${createString([p])}=${oname}[${iname}],true);${iname}++`));
|
|
985
|
+
else rootenvs.Symbol = true, splice(o, o.length, 0, ...scanner2(`${gname}=${hasawait ? `${oname}[Symbol["asyncIterator"]]||${oname}[Symbol["iterator"]]` : `${oname}[Symbol["iterator"]]||${oname}[Symbol["asyncIterator"]]`}||Array["prototype"][Symbol["iterator"]],${gname}=${gname}["call"](${oname}),${iname}=${hasawait ? "await " : ''}${gname}["next"]();!${iname}["done"]&&(${createString([p])}=${iname}["value"],true);${iname}=${gname}["next"]()`));
|
|
976
986
|
relink(o);
|
|
977
987
|
};
|
|
978
988
|
var unarrow = function (body, i, killobj, letname_) {
|
|
@@ -993,7 +1003,7 @@ var unarrow = function (body, i, killobj, letname_) {
|
|
|
993
1003
|
if (n.type !== SCOPED || n.entry !== "{") {
|
|
994
1004
|
var nni = skipAssignment(body, ni);
|
|
995
1005
|
b = scanner2('{}')[0];
|
|
996
|
-
b
|
|
1006
|
+
splice(b, 0, 0, { type: STRAP, transive: true, text: "return" }, ...splice(body, ni, nni - ni, b));
|
|
997
1007
|
killarg(h, b, letname_);
|
|
998
1008
|
killobj(b);
|
|
999
1009
|
ni = nni;
|
|
@@ -1056,10 +1066,10 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1056
1066
|
argcodes.unshift.apply(argcodes, anames.map((a, i) => {
|
|
1057
1067
|
if (a === cname) cname = '';
|
|
1058
1068
|
var n = anames.length - i;
|
|
1059
|
-
return `${a}=arguments
|
|
1069
|
+
return `${a}=arguments["length"]>${collect + n - 1}?arguments[arguments["length"] - ${n}]:undefined`;
|
|
1060
1070
|
}));
|
|
1061
1071
|
|
|
1062
|
-
if (cname) argcodes.unshift(`var ${cname}=
|
|
1072
|
+
if (cname) argcodes.unshift(`var ${cname}=slice_["call"](arguments,${collect}${index > collect ? `,${collect - index}` : ""})`), rootenvs.slice_ = true;
|
|
1063
1073
|
}
|
|
1064
1074
|
if (argcodes.length && setarg) {
|
|
1065
1075
|
if (!body) {
|
|
@@ -1315,25 +1325,6 @@ var down = function (scoped) {
|
|
|
1315
1325
|
scoped.body.unshift.apply(scoped.body, codelist);
|
|
1316
1326
|
};
|
|
1317
1327
|
|
|
1318
|
-
var solidmap = {};
|
|
1319
|
-
var setsolid = function (q, o) {
|
|
1320
|
-
var k = o.text;
|
|
1321
|
-
if (!/\.[\s\S]+\./.test(k)) return;
|
|
1322
|
-
var c = k.replace(/^[\s\S]*?(\.[^\.]*$)/, '$1');
|
|
1323
|
-
k = k.replace(/^([\s\S]*?)\.[^\.]*$/, '$1');
|
|
1324
|
-
if (!solidmap[k]) {
|
|
1325
|
-
solidmap[k] = [q, o];
|
|
1326
|
-
return;
|
|
1327
|
-
}
|
|
1328
|
-
if (typeof solidmap[k] !== 'string') {
|
|
1329
|
-
var n = k.replace(/^[\s\S]*?([^\.]*)$/, "$1");
|
|
1330
|
-
n = _getname(n + "_");
|
|
1331
|
-
var [q, b] = solidmap[k];
|
|
1332
|
-
b.text = `(${n} = ${k})${c}`;
|
|
1333
|
-
solidmap[k] = n;
|
|
1334
|
-
}
|
|
1335
|
-
o.text = solidmap[k] + c;
|
|
1336
|
-
};
|
|
1337
1328
|
var markcodes = [];
|
|
1338
1329
|
if (scoped.isfunc && scoped.used.this && (funcMark || scoped.insett)) {
|
|
1339
1330
|
let tn = _getname("this_");
|
|
@@ -1349,9 +1340,9 @@ var down = function (scoped) {
|
|
|
1349
1340
|
}
|
|
1350
1341
|
var fordeep = 0;
|
|
1351
1342
|
var _killobj = function (_getlocal, o) {
|
|
1352
|
-
return killobj(o, gettmpname, getletname, _getlocal, _letname
|
|
1343
|
+
return killobj(o, gettmpname, getletname, _getlocal, _letname);
|
|
1353
1344
|
};
|
|
1354
|
-
var kill = function (scoped, _,
|
|
1345
|
+
var kill = function (scoped, _, parentScope) {
|
|
1355
1346
|
if (scoped.isfunc) return down(scoped);
|
|
1356
1347
|
killlet(scoped);
|
|
1357
1348
|
var saveddeep = fordeep;
|
|
@@ -1363,8 +1354,10 @@ var down = function (scoped) {
|
|
|
1363
1354
|
a: if (scoped.head) {
|
|
1364
1355
|
var hp = scoped.head.prev;
|
|
1365
1356
|
if (hp && hp.type === STRAP) {
|
|
1357
|
+
if (hp && hp.type === STRAP && hp.text === 'await') hp = hp.prev;
|
|
1358
|
+
if (!hp) break a;
|
|
1366
1359
|
if (hp.text === 'for') {
|
|
1367
|
-
unforof(
|
|
1360
|
+
unforof(hp.next, getdeepname, scoped.used);
|
|
1368
1361
|
killed = unforin(scoped.head, getdeepname, _killobj.bind(null, _getlocal)) !== false;
|
|
1369
1362
|
// unforcx(scoped.head, getdeepname);
|
|
1370
1363
|
}
|
|
@@ -1380,6 +1373,7 @@ var down = function (scoped) {
|
|
|
1380
1373
|
fordeep = saveddeep;
|
|
1381
1374
|
};
|
|
1382
1375
|
if (scoped.isfunc) {
|
|
1376
|
+
if (!scoped.body && scoped.head) scoped.body = scoped.head.next;
|
|
1383
1377
|
if (scoped.head) var [argsmap, argcodes] = killarg(scoped.head, scoped.body, _letname, false);
|
|
1384
1378
|
else argcodes = [];
|
|
1385
1379
|
if ((markcodes.length || argcodes.length) && !funcMark) precode(markcodes.concat(argcodes).join(";") + ";");
|
|
@@ -1412,6 +1406,7 @@ var down = function (scoped) {
|
|
|
1412
1406
|
scoped.yield = false;
|
|
1413
1407
|
}
|
|
1414
1408
|
var vars1 = Object.keys(vars).filter(k => !(k in scoped.vars));
|
|
1409
|
+
scoped.vars = vars;
|
|
1415
1410
|
if (argsmap) vars1 = vars1.filter(k => !(k in argsmap));
|
|
1416
1411
|
if (vars1.length && scoped.body) scoped.body.push(...scanner2(`\r\nvar ${vars1}`));
|
|
1417
1412
|
if (scoped.body) relink(scoped.body);
|
|
@@ -1433,6 +1428,10 @@ var downcode = downLevel.code = function (code) {
|
|
|
1433
1428
|
rootHyper = rootenvs.Symbol || code.yield || code.async;
|
|
1434
1429
|
down(code.scoped);
|
|
1435
1430
|
code.keepcolor = false;
|
|
1431
|
+
if (rootenvs.slice_) {
|
|
1432
|
+
delete rootenvs.slice_;
|
|
1433
|
+
if (!code.vars.slice_) splice(code.scoped.body, 0, 0, ...scanner2('var slice_ = Array["prototype"]["slice"];\r\n'));
|
|
1434
|
+
}
|
|
1436
1435
|
rootenvs = null;
|
|
1437
1436
|
return code;
|
|
1438
1437
|
};
|