efront 3.38.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coms/basic_/JSON.js +4 -4
- package/coms/basic_/JSON_test.js +80 -2
- package/coms/basic_/readme.md +1 -1
- package/coms/compile/breakcode.js +6 -8
- package/coms/compile/downLevel.js +45 -51
- package/coms/compile/downLevel_test.js +66 -62
- package/coms/compile/scanner2.js +18 -0
- package/coms/compile/unstruct.js +45 -4
- package/coms/compile/unstruct_test.js +1 -1
- package/coms/reptile/colored_console.js +2 -2
- package/coms/zimoli/deepEqual_test.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_/JSON.js
CHANGED
|
@@ -199,11 +199,11 @@ var getString = function (object, filter, space) {
|
|
|
199
199
|
while (cx < dx) {
|
|
200
200
|
key = ks ? ks[cx] : cx;
|
|
201
201
|
var backlength = str.length;
|
|
202
|
-
if (
|
|
202
|
+
if (cx > 0) str += ',';
|
|
203
203
|
if (space) str += '\n' + new Array(objects.length + 1).join(space);
|
|
204
204
|
if (ks) {
|
|
205
|
-
str +=
|
|
206
|
-
if (space) str +=
|
|
205
|
+
str += toString(key) + ":";
|
|
206
|
+
if (space) str += " ";
|
|
207
207
|
};
|
|
208
208
|
var v = get(object[key]);
|
|
209
209
|
if (isObject(v)) {
|
|
@@ -221,7 +221,7 @@ var getString = function (object, filter, space) {
|
|
|
221
221
|
}
|
|
222
222
|
if (cx === dx) {
|
|
223
223
|
if (dx > 0) {
|
|
224
|
-
if (space) str +=
|
|
224
|
+
if (space) str += '\n' + new Array(objects.length).join(space)
|
|
225
225
|
}
|
|
226
226
|
str += ks ? '}' : ']';
|
|
227
227
|
pop();
|
package/coms/basic_/JSON_test.js
CHANGED
|
@@ -64,7 +64,7 @@ var test = function (JSON) {
|
|
|
64
64
|
var start = new Date();
|
|
65
65
|
try {
|
|
66
66
|
var res = call(arg, null, space);
|
|
67
|
-
} catch{
|
|
67
|
+
} catch {
|
|
68
68
|
res = "error";
|
|
69
69
|
}
|
|
70
70
|
var delta = new Date - start;
|
|
@@ -79,10 +79,88 @@ var test = function (JSON) {
|
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
};
|
|
82
|
+
var test2 = function (JSON) {
|
|
83
|
+
var data = [{
|
|
84
|
+
"name": i18n(`\u4ee3\u7406\u8def\u5f84`, `Proxy Path`),
|
|
85
|
+
"type": "input",
|
|
86
|
+
"key": "url",
|
|
87
|
+
"comment": "",
|
|
88
|
+
"size": "120",
|
|
89
|
+
"unit": "bit",
|
|
90
|
+
"ratio": 0.125,
|
|
91
|
+
"required": true
|
|
92
|
+
}, {
|
|
93
|
+
"name": i18n(`\u4e8c\u7ef4\u7801`, `QR code`),
|
|
94
|
+
"type": "1byte",
|
|
95
|
+
"key": "url",
|
|
96
|
+
"comment": "",
|
|
97
|
+
"size": "1",
|
|
98
|
+
"unit": "byte",
|
|
99
|
+
"ratio": 1,
|
|
100
|
+
"readonly": true
|
|
101
|
+
}, {
|
|
102
|
+
"name": i18n(`\u771f\u5b9e\u8def\u5f84`, `Real path`),
|
|
103
|
+
"type": "url",
|
|
104
|
+
"key": "realpath",
|
|
105
|
+
"comment": "",
|
|
106
|
+
"size": "300",
|
|
107
|
+
"unit": "bit",
|
|
108
|
+
"ratio": 0.125
|
|
109
|
+
}, {
|
|
110
|
+
"name": i18n(`\u52a8\u4f5c`, `action`),
|
|
111
|
+
"type": "select",
|
|
112
|
+
"key": "action",
|
|
113
|
+
"comment": "",
|
|
114
|
+
"options": [{
|
|
115
|
+
"name": "跳转",
|
|
116
|
+
"value": 0
|
|
117
|
+
}, {
|
|
118
|
+
"name": "转发",
|
|
119
|
+
"value": 1
|
|
120
|
+
}],
|
|
121
|
+
"size": "100",
|
|
122
|
+
"unit": "bit",
|
|
123
|
+
"ratio": 0.125
|
|
124
|
+
}, {
|
|
125
|
+
"name": i18n(`\u72b6\u6001`, `state`),
|
|
126
|
+
"type": "select",
|
|
127
|
+
"key": "status",
|
|
128
|
+
"comment": "",
|
|
129
|
+
"options": [{
|
|
130
|
+
"name": "启用",
|
|
131
|
+
"value": 0
|
|
132
|
+
}, {
|
|
133
|
+
"name": "禁用",
|
|
134
|
+
"value": 1
|
|
135
|
+
}],
|
|
136
|
+
"size": "100",
|
|
137
|
+
"unit": "bit",
|
|
138
|
+
"ratio": 0.125
|
|
139
|
+
}, {
|
|
140
|
+
"name": i18n(``, ``),
|
|
141
|
+
"type": "byte",
|
|
142
|
+
"key": "",
|
|
143
|
+
"comment": "",
|
|
144
|
+
"options": {
|
|
145
|
+
name: "访问",
|
|
146
|
+
do(o) {
|
|
147
|
+
var url = o.url;
|
|
148
|
+
if (!/^\//.test(url))
|
|
149
|
+
url = "/" + url;
|
|
150
|
+
window.open(url, null);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"size": 1,
|
|
154
|
+
"unit": "byte",
|
|
155
|
+
"ratio": 1,
|
|
156
|
+
"readonly": true
|
|
157
|
+
}];
|
|
158
|
+
assert(JSON.stringify(data, null, 4), JSON0.stringify(data, null, 4))
|
|
159
|
+
}
|
|
82
160
|
function JSON_test() {
|
|
83
161
|
window.JSON0 = JSON0;
|
|
84
162
|
window.JSON = void 0;
|
|
85
163
|
delete modules.JSON;
|
|
86
|
-
modules.init("JSON",
|
|
164
|
+
modules.init("JSON", test2);
|
|
87
165
|
window.JSON = JSON0;
|
|
88
166
|
}
|
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 {...}
|
|
@@ -63,19 +63,17 @@ var trimStringLiteral = function (block) {
|
|
|
63
63
|
}
|
|
64
64
|
return block_string;
|
|
65
65
|
};
|
|
66
|
-
var paramsMap =
|
|
66
|
+
var paramsMap = null;
|
|
67
67
|
var module_string = '';
|
|
68
|
-
function breakcode(data,
|
|
69
|
-
if (!
|
|
68
|
+
function breakcode(data, occurs) {
|
|
69
|
+
if (!occurs) return [data];
|
|
70
70
|
module_string = data;
|
|
71
|
-
Object.
|
|
72
|
-
paramsMap[key] = true;
|
|
73
|
-
});
|
|
71
|
+
paramsMap = Object.assign(Object.create(null), occurs);
|
|
74
72
|
var code_blocks = scanner(module_string);
|
|
75
73
|
module_string = code_blocks.map(trimStringLiteral).join("");
|
|
76
|
-
var res = Object.keys(paramsMap).filter(k => !hasOwnProperty.call(
|
|
74
|
+
var res = Object.keys(paramsMap).filter(k => !hasOwnProperty.call(occurs, k));
|
|
77
75
|
var val = res.map(k => paramsMap[k]);
|
|
78
|
-
paramsMap =
|
|
76
|
+
paramsMap = null;
|
|
79
77
|
data = module_string;
|
|
80
78
|
module_string = '';
|
|
81
79
|
return [data, res, val];
|
|
@@ -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) {
|
|
@@ -798,7 +805,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
|
|
|
798
805
|
i = killdec(body, i, _getdeepname, '', deepkill);
|
|
799
806
|
}
|
|
800
807
|
else {
|
|
801
|
-
i = killspr(body, i, _getobjname,
|
|
808
|
+
i = killspr(body, i, _getobjname, deepkill);
|
|
802
809
|
}
|
|
803
810
|
continue;
|
|
804
811
|
}
|
|
@@ -808,11 +815,11 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
|
|
|
808
815
|
var p = o.prev;
|
|
809
816
|
if (p.transive || /^(if|else|while|with|switch)$/.test(p.text)) deepkill(o);
|
|
810
817
|
}
|
|
811
|
-
else if (!o.prev || o.prev.type
|
|
818
|
+
else if (!o.prev || o.prev.type & (STAMP | STRAP)) {
|
|
812
819
|
deepkill(o);
|
|
813
820
|
}
|
|
814
821
|
else {
|
|
815
|
-
i = killspr(body, i, _getobjname,
|
|
822
|
+
i = killspr(body, i, _getobjname, deepkill);
|
|
816
823
|
continue;
|
|
817
824
|
}
|
|
818
825
|
}
|
|
@@ -971,8 +978,8 @@ var unforof = function (o, getnewname, used) {
|
|
|
971
978
|
o.push(...mo);
|
|
972
979
|
o.push({ type: STAMP, text: ',' });
|
|
973
980
|
}
|
|
974
|
-
if (useSimpleLoop) o.push(...scanner2(`${iname}=0,${gname}=${oname}
|
|
975
|
-
else rootenvs.Symbol = true, o.push(...scanner2(`${gname}=${hasawait ? `${oname}[Symbol
|
|
981
|
+
if (useSimpleLoop) o.push(...scanner2(`${iname}=0,${gname}=${oname}["length"];${iname}<${gname}&&(${createString([p])}=${oname}[${iname}],true);${iname}++`));
|
|
982
|
+
else rootenvs.Symbol = true, o.push(...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
983
|
relink(o);
|
|
977
984
|
};
|
|
978
985
|
var unarrow = function (body, i, killobj, letname_) {
|
|
@@ -993,7 +1000,7 @@ var unarrow = function (body, i, killobj, letname_) {
|
|
|
993
1000
|
if (n.type !== SCOPED || n.entry !== "{") {
|
|
994
1001
|
var nni = skipAssignment(body, ni);
|
|
995
1002
|
b = scanner2('{}')[0];
|
|
996
|
-
b
|
|
1003
|
+
splice(b, 0, 0, { type: STRAP, transive: true, text: "return" }, ...splice(body, ni, nni - ni, b));
|
|
997
1004
|
killarg(h, b, letname_);
|
|
998
1005
|
killobj(b);
|
|
999
1006
|
ni = nni;
|
|
@@ -1056,10 +1063,10 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1056
1063
|
argcodes.unshift.apply(argcodes, anames.map((a, i) => {
|
|
1057
1064
|
if (a === cname) cname = '';
|
|
1058
1065
|
var n = anames.length - i;
|
|
1059
|
-
return `${a}=arguments
|
|
1066
|
+
return `${a}=arguments["length"]>${collect + n - 1}?arguments[arguments["length"] - ${n}]:undefined`;
|
|
1060
1067
|
}));
|
|
1061
1068
|
|
|
1062
|
-
if (cname) argcodes.unshift(`var ${cname}=
|
|
1069
|
+
if (cname) argcodes.unshift(`var ${cname}=slice_["call"](arguments,${collect}${index > collect ? `,${collect - index}` : ""})`), rootenvs.slice_ = true;
|
|
1063
1070
|
}
|
|
1064
1071
|
if (argcodes.length && setarg) {
|
|
1065
1072
|
if (!body) {
|
|
@@ -1315,25 +1322,6 @@ var down = function (scoped) {
|
|
|
1315
1322
|
scoped.body.unshift.apply(scoped.body, codelist);
|
|
1316
1323
|
};
|
|
1317
1324
|
|
|
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
1325
|
var markcodes = [];
|
|
1338
1326
|
if (scoped.isfunc && scoped.used.this && (funcMark || scoped.insett)) {
|
|
1339
1327
|
let tn = _getname("this_");
|
|
@@ -1349,9 +1337,9 @@ var down = function (scoped) {
|
|
|
1349
1337
|
}
|
|
1350
1338
|
var fordeep = 0;
|
|
1351
1339
|
var _killobj = function (_getlocal, o) {
|
|
1352
|
-
return killobj(o, gettmpname, getletname, _getlocal, _letname
|
|
1340
|
+
return killobj(o, gettmpname, getletname, _getlocal, _letname);
|
|
1353
1341
|
};
|
|
1354
|
-
var kill = function (scoped, _,
|
|
1342
|
+
var kill = function (scoped, _, parentScope) {
|
|
1355
1343
|
if (scoped.isfunc) return down(scoped);
|
|
1356
1344
|
killlet(scoped);
|
|
1357
1345
|
var saveddeep = fordeep;
|
|
@@ -1380,6 +1368,7 @@ var down = function (scoped) {
|
|
|
1380
1368
|
fordeep = saveddeep;
|
|
1381
1369
|
};
|
|
1382
1370
|
if (scoped.isfunc) {
|
|
1371
|
+
if (!scoped.body && scoped.head) scoped.body = scoped.head.next;
|
|
1383
1372
|
if (scoped.head) var [argsmap, argcodes] = killarg(scoped.head, scoped.body, _letname, false);
|
|
1384
1373
|
else argcodes = [];
|
|
1385
1374
|
if ((markcodes.length || argcodes.length) && !funcMark) precode(markcodes.concat(argcodes).join(";") + ";");
|
|
@@ -1412,6 +1401,7 @@ var down = function (scoped) {
|
|
|
1412
1401
|
scoped.yield = false;
|
|
1413
1402
|
}
|
|
1414
1403
|
var vars1 = Object.keys(vars).filter(k => !(k in scoped.vars));
|
|
1404
|
+
scoped.vars = vars;
|
|
1415
1405
|
if (argsmap) vars1 = vars1.filter(k => !(k in argsmap));
|
|
1416
1406
|
if (vars1.length && scoped.body) scoped.body.push(...scanner2(`\r\nvar ${vars1}`));
|
|
1417
1407
|
if (scoped.body) relink(scoped.body);
|
|
@@ -1433,6 +1423,10 @@ var downcode = downLevel.code = function (code) {
|
|
|
1433
1423
|
rootHyper = rootenvs.Symbol || code.yield || code.async;
|
|
1434
1424
|
down(code.scoped);
|
|
1435
1425
|
code.keepcolor = false;
|
|
1426
|
+
if (rootenvs.slice_) {
|
|
1427
|
+
delete rootenvs.slice_;
|
|
1428
|
+
if (!code.vars.slice_) splice(code.scoped.body, 0, 0, ...scanner2('var slice_ = Array["prototype"]["slice"];\r\n'));
|
|
1429
|
+
}
|
|
1436
1430
|
rootenvs = null;
|
|
1437
1431
|
return code;
|
|
1438
1432
|
};
|