efront 4.0.51 → 4.0.53
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/decodeUTF16.js +1 -1
- package/coms/basic_/Promise.js +3 -1
- package/coms/compile/autoenum.js +94 -47
- package/coms/compile/autoenum_test.js +10 -0
- package/coms/compile/downLevel.js +39 -18
- package/coms/compile/downLevel_test.js +13 -8
- package/coms/compile/unstruct.js +2 -1
- package/coms/compile/unstruct_test.js +3 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -5,7 +5,7 @@ function decodeUTF16(buff, be) {
|
|
|
5
5
|
if (buff[0] === 0xfe && buff[1] === 0xff) {
|
|
6
6
|
be = true;
|
|
7
7
|
}
|
|
8
|
-
else if (buff[0] === 0xff && buff[1] === 0xfe) be =
|
|
8
|
+
else if (buff[0] === 0xff && buff[1] === 0xfe) be = false;
|
|
9
9
|
else if (isEmpty(be)) be = false;
|
|
10
10
|
var dec = be ? BE : LE;
|
|
11
11
|
for (var cx = 0, dx = buff.length; cx < dx; cx += 2) {
|
package/coms/basic_/Promise.js
CHANGED
|
@@ -35,7 +35,9 @@ if (!Promise) {
|
|
|
35
35
|
// <!--
|
|
36
36
|
console.warn("在异步过程中发现未处理的异常:", t.ohed[0], t.ohed[1], t.ohed[2]);
|
|
37
37
|
// -->
|
|
38
|
-
|
|
38
|
+
requestAnimationFrame(function () {
|
|
39
|
+
throw t.ohed[0];
|
|
40
|
+
})
|
|
39
41
|
}
|
|
40
42
|
for (var r of PromiseRejectReactions) {
|
|
41
43
|
r.apply(null, t.ohed);
|
package/coms/compile/autoenum.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var { skipAssignment, snapSentenceHead, EXPRESS, SCOPED, QUOTED, VALUE, STRAP, STAMP, number_reg, createString } = require("./common");
|
|
1
|
+
var { skipAssignment, snapSentenceHead, snapExpressFoot, EXPRESS, SCOPED, QUOTED, VALUE, STRAP, STAMP, number_reg, createString } = require("./common");
|
|
2
2
|
var strings = require("../basic/strings");
|
|
3
3
|
|
|
4
4
|
var createRefId = function (o) {
|
|
@@ -50,6 +50,7 @@ var createRefId = function (o) {
|
|
|
50
50
|
}
|
|
51
51
|
return ids.join('');
|
|
52
52
|
}
|
|
53
|
+
var ignore = Symbol("ignore");
|
|
53
54
|
var maplist = function (u) {
|
|
54
55
|
var map = Object.create(null);
|
|
55
56
|
for (var o of u) {
|
|
@@ -59,9 +60,33 @@ var maplist = function (u) {
|
|
|
59
60
|
map[r].wcount = 0;
|
|
60
61
|
map[r].ccount = 0;
|
|
61
62
|
}
|
|
62
|
-
map[r]
|
|
63
|
-
|
|
64
|
-
if (o.
|
|
63
|
+
var m = map[r];
|
|
64
|
+
m.push(o);
|
|
65
|
+
if (o.equal || o.kind) {
|
|
66
|
+
var typeref = o.typeref;
|
|
67
|
+
if (typeref && typeof typeref === 'object') {
|
|
68
|
+
typeref = typeref.typeref;
|
|
69
|
+
o.typeref = typeref;
|
|
70
|
+
}
|
|
71
|
+
if (typeref && typeref !== m.typeref) {
|
|
72
|
+
m.typeref = typeref;
|
|
73
|
+
m.wcount++;
|
|
74
|
+
}
|
|
75
|
+
else if (m.typeref) {
|
|
76
|
+
var n = o.next;
|
|
77
|
+
o[ignore] = true;
|
|
78
|
+
if (n.type === STAMP && /^(\+\+|\-\-)$/.test(n.text)) continue;
|
|
79
|
+
if (/^[\+\-]\=$/.test(n.text)) {
|
|
80
|
+
var nn = n.next;
|
|
81
|
+
if (nn && snapExpressFoot(nn) == nn && nn.isdigit && (nn.text & 0x1ff) === +nn.text) continue;
|
|
82
|
+
}
|
|
83
|
+
else if (!n || !/=$/.test(n.text)) continue;
|
|
84
|
+
o[ignore] = false;
|
|
85
|
+
m.wcount++;
|
|
86
|
+
}
|
|
87
|
+
else m.wcount++;
|
|
88
|
+
}
|
|
89
|
+
if (o.called) m.ccount++;
|
|
65
90
|
}
|
|
66
91
|
return map;
|
|
67
92
|
}
|
|
@@ -69,7 +94,6 @@ function createRefMap(scoped) {
|
|
|
69
94
|
var { used } = scoped;
|
|
70
95
|
var refs = Object.create(null);
|
|
71
96
|
for (var k in used) refs[k] = maplist(used[k]);
|
|
72
|
-
scoped.forEach(createRefMap);
|
|
73
97
|
return scoped.refs = refs;
|
|
74
98
|
}
|
|
75
99
|
function removeRefs(o) {
|
|
@@ -126,53 +150,70 @@ function inCondition(o) {
|
|
|
126
150
|
}
|
|
127
151
|
|
|
128
152
|
function enumref(scoped) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (o.equal)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
eq = null;
|
|
153
|
+
var { refs } = scoped;
|
|
154
|
+
for (var k in refs) {
|
|
155
|
+
var rs = refs[k];
|
|
156
|
+
for (var rk in rs) {
|
|
157
|
+
var os = rs[rk];
|
|
158
|
+
if (os.wcount !== 1 || os.length < 2) continue;
|
|
159
|
+
var eq = null, em = null, tp = null;
|
|
160
|
+
loop: for (var o of os) {
|
|
161
|
+
if (o.equal && !o[ignore]) {
|
|
162
|
+
if (o.equal.text !== '=') break;
|
|
163
|
+
if (o.queue.kind) break;
|
|
164
|
+
var q = o.queue;
|
|
165
|
+
if (q !== scoped.body) {
|
|
166
|
+
if (q.entry === '(' && q.queue === scoped.body) {
|
|
167
|
+
var qp = q.prev;
|
|
168
|
+
if (qp.type === EXPRESS) qp = qp.prev;
|
|
169
|
+
if (qp && qp.type === STRAP && qp.text === "await") qp = qp.prev;
|
|
170
|
+
if (qp && qp.type === STRAP && qp.text === 'for') {
|
|
171
|
+
var f = q.first;
|
|
172
|
+
var fc = 0;
|
|
173
|
+
while (f && f !== o) {
|
|
174
|
+
if (f.type === STAMP && f.text === ";") {
|
|
175
|
+
fc++;
|
|
176
|
+
if (fc > 1) break loop;
|
|
177
|
+
}
|
|
178
|
+
f = f.next;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
158
181
|
}
|
|
182
|
+
else break;
|
|
159
183
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
removeRefs(o);
|
|
184
|
+
if (inCondition(o)) break;
|
|
185
|
+
if (o.typeref) {
|
|
186
|
+
tp = o.typeref;
|
|
187
|
+
if (isObject(tp)) tp = tp.typeref;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (o.enumref) {
|
|
191
|
+
em = o.enumref;
|
|
192
|
+
continue;
|
|
170
193
|
}
|
|
194
|
+
o = o.equal.next;
|
|
195
|
+
var n = skipAssignment(o);
|
|
196
|
+
if (!o || n !== o.next) break loop;
|
|
197
|
+
if (o.type === VALUE && o.isdigit) eq = o;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
if (tp) {
|
|
201
|
+
o.typeref = tp;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
if (em) {
|
|
205
|
+
o.enumref = em;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (!eq) break;
|
|
209
|
+
o.type = eq.type;
|
|
210
|
+
o.isdigit = true;
|
|
211
|
+
o.text = eq.text;
|
|
212
|
+
removeRefs(o);
|
|
171
213
|
}
|
|
172
214
|
}
|
|
173
215
|
}
|
|
174
216
|
}
|
|
175
|
-
scoped.forEach(enumref)
|
|
176
217
|
}
|
|
177
218
|
|
|
178
219
|
function atuoenum(scoped) {
|
|
@@ -180,8 +221,14 @@ function atuoenum(scoped) {
|
|
|
180
221
|
enumref(scoped);
|
|
181
222
|
}
|
|
182
223
|
var exports = module.exports = function main(code) {
|
|
183
|
-
|
|
224
|
+
var rest = [code.scoped];
|
|
225
|
+
while (rest.length) {
|
|
226
|
+
var s = rest.pop();
|
|
227
|
+
if (s.length) rest.push(...s);
|
|
228
|
+
atuoenum(s);
|
|
229
|
+
}
|
|
184
230
|
return code;
|
|
185
231
|
}
|
|
186
232
|
exports.createRefId = createRefId;
|
|
187
|
-
exports.createRefMap = createRefMap;
|
|
233
|
+
exports.createRefMap = createRefMap;
|
|
234
|
+
exports.enumscoped = atuoenum;
|
|
@@ -16,4 +16,14 @@ t("var {a=1};console.log(a)", "var { a = 1 }; console.log(a)");
|
|
|
16
16
|
t("if(c) a=1;console.log(a)", "if (c) a = 1; console.log(a)");
|
|
17
17
|
t("console.log(a);a=1;", "console.log(a); a = 1;");
|
|
18
18
|
t("console.log(a);var a=1;", "console.log(a); var a = 1;");
|
|
19
|
+
t("var a=1;console.log(a++);", "var a = 1; console.log(a++);");
|
|
20
|
+
t("for(;;){let a =1; console.log(a)}", "for (;;) { let a = 1; console.log(1) }");
|
|
21
|
+
t("for(;;){a =1; console.log(a)}", "for (;;) { a = 1; console.log(1) }");
|
|
22
|
+
t("a=2;for(;;){var a =1; console.log(a)}", "a = 2; for (;;) { var a = 1; console.log(1) }");
|
|
23
|
+
t("for(;;){var a =1; console.log(a)} console.log(a)", "for (;;) { var a = 1; console.log(1) } console.log(a)");
|
|
24
|
+
t("for(;a=1;){ console.log(a)} console.log(a)", "for (; a = 1;) { console.log(1) } console.log(1)");
|
|
25
|
+
t("for(;a=1;){ console.log(a)} console.log(a)", "for (; a = 1;) { console.log(1) } console.log(1)");
|
|
26
|
+
t("for(;;a=1){ console.log(a)} console.log(a)", "for (;; a = 1) { console.log(a) } console.log(a)");
|
|
27
|
+
t("for(var a = 1;;){ console.log(a)} console.log(a)", "for (var a = 1;;) { console.log(1) } console.log(1)");
|
|
28
|
+
t("for(let a = 1;;){ console.log(a)} console.log(a)", "for (let a = 1;;) { console.log(a) } console.log(a)");
|
|
19
29
|
// t(fs.readFileSync(path.join(__dirname,"../zimoli/spacechar_test.js")).toString())
|
|
@@ -358,7 +358,7 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj, islet) {
|
|
|
358
358
|
return i;
|
|
359
359
|
};
|
|
360
360
|
// 键值对重组
|
|
361
|
-
var killmap = function (body, i, _getobjname, killobj) {
|
|
361
|
+
var killmap = function (body, i, _getobjname, _getnewname, killobj) {
|
|
362
362
|
var o = body[i];
|
|
363
363
|
if (!o.length) return indexof(body, o.next, i);
|
|
364
364
|
var m = o.first;
|
|
@@ -432,6 +432,7 @@ var killmap = function (body, i, _getobjname, killobj) {
|
|
|
432
432
|
insert1(q, null, { type: STAMP, text: ',' });
|
|
433
433
|
}
|
|
434
434
|
var define_ = Object.create(null);
|
|
435
|
+
var tempname = null;
|
|
435
436
|
var t;
|
|
436
437
|
while (m) {
|
|
437
438
|
if (m.type === EXPRESS) {
|
|
@@ -479,7 +480,8 @@ var killmap = function (body, i, _getobjname, killobj) {
|
|
|
479
480
|
var [prop, m] = getprop(o, m);
|
|
480
481
|
if (!prop.value.length) insert1(prop.value, null, { type: EXPRESS, text: prop.name })
|
|
481
482
|
else if (prop.sfunc === false) killobj(prop.value);
|
|
482
|
-
|
|
483
|
+
if ((prop.get || prop.set) && !tempname) tempname = _getnewname();
|
|
484
|
+
setprop(prop, _getobjname(), define_, q, tempname);
|
|
483
485
|
}
|
|
484
486
|
|
|
485
487
|
if (q) {
|
|
@@ -538,7 +540,7 @@ var getprop = function (o, m) {
|
|
|
538
540
|
else if (!prop.value) prop.value = [];
|
|
539
541
|
return [prop, m];
|
|
540
542
|
};
|
|
541
|
-
var setprop = function (prop, k, d, q) {
|
|
543
|
+
var setprop = function (prop, k, d, q, tempname) {
|
|
542
544
|
if (prop.sfunc !== false)
|
|
543
545
|
// insert1(prop.value, prop.value[0], ...scanner2(`${prop.async ? "async " : ""}function${prop["*"] ? "*" : ''}`));
|
|
544
546
|
insert1(prop.value, prop.value[0], ...scanner2(`function`));
|
|
@@ -551,17 +553,14 @@ var setprop = function (prop, k, d, q) {
|
|
|
551
553
|
else pe = null;
|
|
552
554
|
}
|
|
553
555
|
if (!d[prop.name]) {
|
|
554
|
-
let tmp = scanner2(`\r\nObject["defineProperty"](${k},${prop.name},{})`);
|
|
556
|
+
let tmp = scanner2(`\r\nObject["defineProperty"](${k},${prop.name},(${tempname}={},${tempname}))`);
|
|
555
557
|
insert1(q, null, ...tmp);
|
|
556
558
|
if (pe) insert1(q, null, pe);
|
|
557
559
|
tmp = tmp[tmp.length - 1];
|
|
558
560
|
tmp = tmp[tmp.length - 1];
|
|
559
561
|
d[prop.name] = tmp;
|
|
560
562
|
}
|
|
561
|
-
|
|
562
|
-
insert1(d[prop.name], null, { type: PROPERTY, text: prop.get ? "get" : "set" });
|
|
563
|
-
insert1(d[prop.name], null, { type: STAMP, text: ":" });
|
|
564
|
-
if (pv && pv.length) insert1(d[prop.name], null, ...pv);
|
|
563
|
+
insert1(d[prop.name], null, ...rescan`[${prop.get ? '"get"' : '"set"'}]=${pv},${tempname}`);
|
|
565
564
|
}
|
|
566
565
|
else {
|
|
567
566
|
insert1(q, null, ...scanner2(`${q && q.length ? "\r\n" : ''}${k}${prop.name}=`));
|
|
@@ -569,7 +568,7 @@ var setprop = function (prop, k, d, q) {
|
|
|
569
568
|
}
|
|
570
569
|
}
|
|
571
570
|
var rootenvs = null, rootHyper;
|
|
572
|
-
var killcls = function (body, i, getname_) {
|
|
571
|
+
var killcls = function (body, i, letname_, getname_) {
|
|
573
572
|
var extends_ = [];
|
|
574
573
|
var o = body[i];
|
|
575
574
|
var ishalf = isHalfSentence(body, i - 1);
|
|
@@ -610,13 +609,14 @@ var killcls = function (body, i, getname_) {
|
|
|
610
609
|
var scoped = o.scoped;
|
|
611
610
|
var m = o.first;
|
|
612
611
|
var name = extends_.pop();
|
|
613
|
-
if (!name && (base || extends_.length)) name =
|
|
612
|
+
if (!name && (base || extends_.length)) name = letname_('cls' + index);
|
|
614
613
|
var assign = [];
|
|
615
614
|
var constructor = scanner2('(){}');
|
|
616
615
|
var define_ = Object.create(null);
|
|
617
616
|
var static_ = Object.create(null);
|
|
618
617
|
var clz = { name };
|
|
619
|
-
if (!clz.name) clz.name =
|
|
618
|
+
if (!clz.name) clz.name = letname_("cls" + index);
|
|
619
|
+
var tempname = null;
|
|
620
620
|
while (m) {
|
|
621
621
|
var [prop, m] = getprop(o, m);
|
|
622
622
|
if (!prop.value.length) prop.value = scanner2('undefined;');
|
|
@@ -624,7 +624,8 @@ var killcls = function (body, i, getname_) {
|
|
|
624
624
|
var d = prop.static ? static_ : define_;
|
|
625
625
|
if (prop.get || prop.set || prop.static) {
|
|
626
626
|
if (prop.name) {
|
|
627
|
-
|
|
627
|
+
if ((prop.get || prop.set) && !tempname) tempname = getname_("tmp");
|
|
628
|
+
setprop(prop, k, d, defines, tempname);
|
|
628
629
|
}
|
|
629
630
|
else if (prop.static) {
|
|
630
631
|
var value = scanner2(`(function(){}())`);
|
|
@@ -931,7 +932,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
931
932
|
i++;
|
|
932
933
|
break;
|
|
933
934
|
case "class":
|
|
934
|
-
i = killcls(body, i, letname_);
|
|
935
|
+
i = killcls(body, i, letname_, getname_);
|
|
935
936
|
break;
|
|
936
937
|
case "for":
|
|
937
938
|
case "function":
|
|
@@ -964,7 +965,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
964
965
|
continue;
|
|
965
966
|
}
|
|
966
967
|
else {
|
|
967
|
-
i = killmap(body, i, _getobjname, deepkill);
|
|
968
|
+
i = killmap(body, i, _getobjname, _getnewname, deepkill);
|
|
968
969
|
// i = indexof(body, o, i);
|
|
969
970
|
continue;
|
|
970
971
|
}
|
|
@@ -1100,7 +1101,7 @@ var unforin = function (o, getnewname_, killobj) {
|
|
|
1100
1101
|
var s = scanner2(`${sname}=`);
|
|
1101
1102
|
insert1(s, null, ...splice2(o, n));
|
|
1102
1103
|
insert1(s, null,
|
|
1103
|
-
...scanner2(`,${tname}=[];for(${hasdeclare ? 'var ' : ''}${hasdeclare ? f.text : kname} in ${sname})${tname}
|
|
1104
|
+
...scanner2(`,${tname}=[];for(${hasdeclare ? 'var ' : ''}${hasdeclare ? f.text : kname} in ${sname})${tname}["push"](${hasdeclare ? f.text : kname});`)
|
|
1104
1105
|
);
|
|
1105
1106
|
insert1(o.queue, o.prev, ...s);
|
|
1106
1107
|
splice(o, 0, o.length, ...scanner2(`${kname}=0;${kname}<${tname}["length"]&&`));
|
|
@@ -1210,11 +1211,31 @@ var unarrow = function (body, i, killobj, letname_) {
|
|
|
1210
1211
|
return nni;
|
|
1211
1212
|
};
|
|
1212
1213
|
var getname = function (vars, envs, k) {
|
|
1213
|
-
|
|
1214
|
+
var extra = this instanceof Array ? this : null;
|
|
1215
|
+
a: if (!(k in vars) && !(k in envs)) {
|
|
1216
|
+
if (extra) for (var e of extra) {
|
|
1217
|
+
if (k in e) break a;
|
|
1218
|
+
}
|
|
1219
|
+
return vars[k] = true, k;
|
|
1220
|
+
}
|
|
1214
1221
|
var inc = /\d+$/.exec(k);
|
|
1215
1222
|
if (inc) k = k.slice(0, k.length - inc[0].length), inc = 1 + +inc[0];
|
|
1216
1223
|
else inc = 0;
|
|
1217
|
-
while (
|
|
1224
|
+
loop: while (true) {
|
|
1225
|
+
var k0 = k + inc;
|
|
1226
|
+
if (k0 in vars || k0 in envs) {
|
|
1227
|
+
inc++;
|
|
1228
|
+
continue;
|
|
1229
|
+
}
|
|
1230
|
+
if (extra) for (var e of extra) {
|
|
1231
|
+
if (k0 in e) {
|
|
1232
|
+
inc++;
|
|
1233
|
+
continue loop;
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
break;
|
|
1238
|
+
}
|
|
1218
1239
|
vars[k + inc] = true;
|
|
1219
1240
|
return k + inc;
|
|
1220
1241
|
};
|
|
@@ -1659,7 +1680,7 @@ var down = function (scoped) {
|
|
|
1659
1680
|
if (scoped.isfunc) return down(scoped);
|
|
1660
1681
|
killlet(scoped);
|
|
1661
1682
|
var saveddeep = fordeep;
|
|
1662
|
-
var _getlocal = getname.bind(
|
|
1683
|
+
var _getlocal = getname.bind([scoped.lets, scoped.envs], vars, envs);
|
|
1663
1684
|
var getdeepname = function () {
|
|
1664
1685
|
return gettmpname(--fordeep);
|
|
1665
1686
|
};
|
|
@@ -102,15 +102,19 @@ assert(downLevel(`class a extends class b{}{}`), `var a = function (b, a) { exte
|
|
|
102
102
|
var this_ = b["apply"](this, arguments) || this;
|
|
103
103
|
return this_ })`);
|
|
104
104
|
assert(downLevel(`class a {get a(){}}`), `function a() {};
|
|
105
|
-
Object["defineProperty"](a["prototype"], "a", { get
|
|
105
|
+
Object["defineProperty"](a["prototype"], "a", (tmp = {}, tmp["get"] = function () {}, tmp))
|
|
106
|
+
var tmp`);
|
|
106
107
|
assert(downLevel(`class a {set a(){}}`), `function a() {};
|
|
107
|
-
Object["defineProperty"](a["prototype"], "a", { set
|
|
108
|
+
Object["defineProperty"](a["prototype"], "a", (tmp = {}, tmp["set"] = function () {}, tmp))
|
|
109
|
+
var tmp`);
|
|
108
110
|
assert(downLevel(`class a {get a(){}; get b(){}; set a(){}}`), `function a() {};
|
|
109
|
-
Object["defineProperty"](a["prototype"], "a", { get
|
|
110
|
-
Object["defineProperty"](a["prototype"], "b", { get
|
|
111
|
+
Object["defineProperty"](a["prototype"], "a", (tmp = {}, tmp["get"] = function () {}, tmp["set"] = function () {}, tmp));
|
|
112
|
+
Object["defineProperty"](a["prototype"], "b", (tmp = {}, tmp["get"] = function () {}, tmp));
|
|
113
|
+
var tmp`);
|
|
111
114
|
assert(downLevel(`class a {set a(){}; get b(){}; set a(){}}`), `function a() {};
|
|
112
|
-
Object["defineProperty"](a["prototype"], "a", { set
|
|
113
|
-
Object["defineProperty"](a["prototype"], "b", { get
|
|
115
|
+
Object["defineProperty"](a["prototype"], "a", (tmp = {}, tmp["set"] = function () {}, tmp["set"] = function () {}, tmp));
|
|
116
|
+
Object["defineProperty"](a["prototype"], "b", (tmp = {}, tmp["get"] = function () {}, tmp));
|
|
117
|
+
var tmp`);
|
|
114
118
|
i++// 属性降级
|
|
115
119
|
assert(downLevel(`return ({b,async a(){}})`), `return ((_ = {},
|
|
116
120
|
_.b = b,
|
|
@@ -180,8 +184,9 @@ assert(downLevel(`={...{},...c,b}`), `= (_ = extend({}, {}, c),
|
|
|
180
184
|
_.b = b, _)\r\nvar _`);
|
|
181
185
|
assert(downLevel(`={a(){},get c(){},b}`), `= (_ = {},
|
|
182
186
|
_.a = function () {},
|
|
183
|
-
Object["defineProperty"](_, "c", { get
|
|
184
|
-
_.b = b, _)\r\nvar _`);
|
|
187
|
+
Object["defineProperty"](_, "c", (_0 = {}, _0["get"] = function () {}, _0)),
|
|
188
|
+
_.b = b, _)\r\nvar _, _0`);
|
|
189
|
+
assert(downLevel(`if(){Promise.reslove({get then() {}})}`), `if () { Promise.reslove((_ = {},\r\nObject["defineProperty"](_, "then", (_0 = {}, _0["get"] = function () {}, _0)), _)) }\r\nvar _, _0`)
|
|
185
190
|
assert(downLevel(`=[...a]`), `var slice_ = Array["prototype"]["slice"];\r\n= slice_["call"](a)`)
|
|
186
191
|
assert(downLevel(`let a = [...a,...a()];`), `var slice_ = Array["prototype"]["slice"];\r\nvar a = slice_["call"](a)["concat"](slice_["call"](a()));`)
|
|
187
192
|
assert(downLevel(`=[...a,...b]`), `var slice_ = Array["prototype"]["slice"];\r\n= slice_["call"](a)["concat"](slice_["call"](b))`)
|
package/coms/compile/unstruct.js
CHANGED
|
@@ -226,12 +226,13 @@ var _for = function (body, cx, unblock, result) {
|
|
|
226
226
|
var o = body[cx];
|
|
227
227
|
var label = o;
|
|
228
228
|
o = o.next;
|
|
229
|
+
if (o.type === STRAP && o.text === 'await') o = o.next;
|
|
229
230
|
var m = o.first;
|
|
230
231
|
if (m.type === STRAP && /^(let|const|var)$/.test(m.text)) {
|
|
231
232
|
m = m.next;
|
|
232
233
|
}
|
|
233
234
|
var mn = m.next;
|
|
234
|
-
if (mn.type === STRAP && mn.text
|
|
235
|
+
if (mn.type === STRAP && /^(of|in)$/.test(mn.text)) {
|
|
235
236
|
// 含有高级语法的 for in 语句在 ./downLevel.js 中预处理
|
|
236
237
|
var dx = cx;
|
|
237
238
|
var n = o.next;
|
|
@@ -65,6 +65,9 @@ test("if(await a) await b", "_ = a; return [_, 1];\r\n if (!@) return [2, 0]; _
|
|
|
65
65
|
test("for(a in b)", "for (a in b)", true);
|
|
66
66
|
test("for(var a in b) a.push()", "for (var a in b) a.push()", true);
|
|
67
67
|
test("for(;;)", "return [0, 0]", true);
|
|
68
|
+
test("for(a in b)", "for (a in b)", true);
|
|
69
|
+
test("for(a of b)", "for (a of b)", true);
|
|
70
|
+
test("for await(a of b)", "for await (a of b)", true);
|
|
68
71
|
test("for(a = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], a = a.call(os), b = a.next(); !b.done && (o = b.value, true); b = a.next())", "_ = Symbol.iterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.asyncIterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.iterator; _ = Array.prototype[_];\r\n a = _; a = a.call(os); b = a.next(); return [1, 0];\r\n _ = !b.done; if (!_) return [1, 0]; o = b.value; _ = (true);\r\n if (!_) return [1, 0]; b = a.next(); return [-1, 0]", true);
|
|
69
72
|
test("for(a=0;a<1;a++)if(a==0)continue\r\n else a=1", `a = 0; return [1, 0];\r\n _ = a < 1; if (!_) return [3, 0]; _ = a == 0; if (_) return [2, 0]; return [1, 0];\r\n a = 1; return [1, 0];\r\n _ = a++; return [-2, 0]`, true);
|
|
70
73
|
test("for(a=0;a<1;a++)if(a==0){continue} else {a=1}", `a = 0; return [1, 0];\r\n _ = a < 1; if (!_) return [3, 0]; _ = a == 0; if (!_) return [1, 0]; return [2, 0];\r\n a = 1; return [1, 0];\r\n _ = a++; return [-2, 0]`, true);
|