efront 4.0.0 → 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/compile/common.js +16 -3
- package/coms/compile/downLevel.js +14 -9
- package/coms/compile/downLevel_test.js +46 -0
- package/coms/compile/unstruct.js +15 -13
- package/package.json +1 -1
- package/public/efront.js +1 -1
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
|
|
|
@@ -765,9 +765,11 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
765
765
|
case "class":
|
|
766
766
|
i = killcls(body, i, letname_);
|
|
767
767
|
break;
|
|
768
|
+
case "for":
|
|
768
769
|
case "function":
|
|
769
770
|
o = o.next;
|
|
770
|
-
if (o && o.type ===
|
|
771
|
+
if (o && o.type === STRAP) o = o.next;
|
|
772
|
+
else if (o && o.type === STAMP) {
|
|
771
773
|
i++;
|
|
772
774
|
var n = body.indexOf(o, i) + 1;
|
|
773
775
|
o = o.next;
|
|
@@ -943,6 +945,7 @@ var unforof = function (o, getnewname, used) {
|
|
|
943
945
|
var hasawait = false;
|
|
944
946
|
if (o.type === STRAP && o.text === 'await') {
|
|
945
947
|
hasawait = true;
|
|
948
|
+
splice2(o.queue, o, o.next);
|
|
946
949
|
o = o.next;
|
|
947
950
|
}
|
|
948
951
|
var m = o.first;
|
|
@@ -964,7 +967,7 @@ var unforof = function (o, getnewname, used) {
|
|
|
964
967
|
var iname = getnewname();
|
|
965
968
|
var gname = getnewname();
|
|
966
969
|
var oname;
|
|
967
|
-
var useSimpleLoop = !(rootHyper || used.Symbol
|
|
970
|
+
var useSimpleLoop = !(rootHyper || used.Symbol) && !hasawait;
|
|
968
971
|
if (!f.next && f.type === EXPRESS && !/\./.test(f.text) && used[f.origin || f.text.replace(/[\.\[][\s\S]*$/, '')].length === 1) {
|
|
969
972
|
splice2(o, m);
|
|
970
973
|
oname = f.text;
|
|
@@ -973,13 +976,13 @@ var unforof = function (o, getnewname, used) {
|
|
|
973
976
|
oname = getnewname();
|
|
974
977
|
splice2(o, n, f);
|
|
975
978
|
var mo = splice2(o, f);
|
|
976
|
-
if (useSimpleLoop) useSimpleLoop = mo.length === 1 && (mo[0].type === EXPRESS || mo[0].type === SCOPED && mo[0].entry === "[");
|
|
977
|
-
o.
|
|
978
|
-
o.
|
|
979
|
-
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: ',' });
|
|
980
983
|
}
|
|
981
|
-
if (useSimpleLoop) o.
|
|
982
|
-
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"]()`));
|
|
983
986
|
relink(o);
|
|
984
987
|
};
|
|
985
988
|
var unarrow = function (body, i, killobj, letname_) {
|
|
@@ -1351,8 +1354,10 @@ var down = function (scoped) {
|
|
|
1351
1354
|
a: if (scoped.head) {
|
|
1352
1355
|
var hp = scoped.head.prev;
|
|
1353
1356
|
if (hp && hp.type === STRAP) {
|
|
1357
|
+
if (hp && hp.type === STRAP && hp.text === 'await') hp = hp.prev;
|
|
1358
|
+
if (!hp) break a;
|
|
1354
1359
|
if (hp.text === 'for') {
|
|
1355
|
-
unforof(
|
|
1360
|
+
unforof(hp.next, getdeepname, scoped.used);
|
|
1356
1361
|
killed = unforin(scoped.head, getdeepname, _killobj.bind(null, _getlocal)) !== false;
|
|
1357
1362
|
// unforcx(scoped.head, getdeepname);
|
|
1358
1363
|
}
|
|
@@ -118,6 +118,18 @@ assert(downLevel(`()=>({\r\nfileName: entry.fileName,\r\ntextSpan: highlightSpan
|
|
|
118
118
|
fileName: entry.fileName,
|
|
119
119
|
textSpan: highlightSpan.textSpan,
|
|
120
120
|
isWriteAccess: highlightSpan.kind === "writtenReference" /* writtenReference */ }, highlightSpan.isInString && { isInString: true }, highlightSpan.contextSpan && { contextSpan: highlightSpan.contextSpan })) }`);
|
|
121
|
+
assert(downLevel(`async()=>({ [argitem.sort ? argitem.sort : 'date']: "desc" })`), `function () { return async_(
|
|
122
|
+
function () {
|
|
123
|
+
_0 = {}; _ = _0; if (!argitem.sort) return [1, 0]; _1 = argitem.sort; return [2, 0]
|
|
124
|
+
},
|
|
125
|
+
function () {
|
|
126
|
+
_1 = 'date'; return [1, 0]
|
|
127
|
+
},
|
|
128
|
+
function () {
|
|
129
|
+
_[_1] = "desc"; _0 = (_); _0 = (_0); return [_0, 2]
|
|
130
|
+
})
|
|
131
|
+
var _0, _1 }
|
|
132
|
+
var _`);
|
|
121
133
|
assert(downLevel(`={...{a:1}}`), `= extend({}, { a: 1 })`);
|
|
122
134
|
assert(downLevel(`={...a,...c}`), `= extend({}, a, c)`);
|
|
123
135
|
assert(downLevel(`={a:a,...b,c}`), `= (_ = extend({ a: a }, b),\r\n_.c = c, _)\r\nvar _`);
|
|
@@ -174,6 +186,40 @@ assert(downLevel(`function (a,...b){}`), `var slice_ = Array["prototype"]["slice
|
|
|
174
186
|
assert(downLevel(`function (a,...b,c){}`), `var slice_ = Array["prototype"]["slice"];\r\nfunction (a, c) { var b = slice_["call"](arguments, 1, -1); c = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
|
|
175
187
|
assert(downLevel(`function (a,...,c){}`), `function (a, c) { c = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
|
|
176
188
|
assert(downLevel(`(...a) => k`), `var slice_ = Array["prototype"]["slice"];\r\nfunction () { var a = slice_["call"](arguments, 0); return k }`)
|
|
189
|
+
assert(downLevel(`for await(o of os) noSymbol`), `return async_(
|
|
190
|
+
function () {
|
|
191
|
+
_3 = Symbol["asyncIterator"]; _2 = os[_3]; if (_2) return [1, 0]; _3 = Symbol["iterator"]; _2 = os[_3]; if (_2) return [1, 0]; _3 = Symbol["iterator"]; _2 = Array["prototype"][_3]
|
|
192
|
+
},
|
|
193
|
+
function () {
|
|
194
|
+
_0 = _2; _2 = _0["call"](os); _0 = _2; _2 = _0["next"](); return [_2, 1]
|
|
195
|
+
},
|
|
196
|
+
function (_1) {
|
|
197
|
+
_2 = _1; _ = _2; return [1, 0]
|
|
198
|
+
},
|
|
199
|
+
function () {
|
|
200
|
+
_2 = !_["done"]; if (!_2) return [1, 0]; _3 = _["value"]; o = _3; _2 = (true)
|
|
201
|
+
},
|
|
202
|
+
function () {
|
|
203
|
+
if (!_2) return [1, 0]; noSymbol; _2 = _0["next"](); _ = _2; return [-1, 0]
|
|
204
|
+
})
|
|
205
|
+
var _, _0, _2, _3`)
|
|
206
|
+
assert(downLevel(`for await(var [o,s] of os) noSymbol`), `return async_(
|
|
207
|
+
function () {
|
|
208
|
+
o; s; _4 = Symbol["asyncIterator"]; _3 = os[_4]; if (_3) return [1, 0]; _4 = Symbol["iterator"]; _3 = os[_4]; if (_3) return [1, 0]; _4 = Symbol["iterator"]; _3 = Array["prototype"][_4]
|
|
209
|
+
},
|
|
210
|
+
function () {
|
|
211
|
+
_0 = _3; _3 = _0["call"](os); _0 = _3; _3 = _0["next"](); return [_3, 1]
|
|
212
|
+
},
|
|
213
|
+
function (_2) {
|
|
214
|
+
_3 = _2; _ = _3; return [1, 0]
|
|
215
|
+
},
|
|
216
|
+
function () {
|
|
217
|
+
_3 = !_["done"]; if (!_3) return [1, 0]; _4 = _["value"]; _1 = _4; _5 = _1[0]; o = _5; _6 = _1[1]; s = _6; _3 = (true)
|
|
218
|
+
},
|
|
219
|
+
function () {
|
|
220
|
+
if (!_3) return [1, 0]; noSymbol; _3 = _0["next"](); _ = _3; return [-1, 0]
|
|
221
|
+
})
|
|
222
|
+
var o, s, _, _0, _1, _3, _4, _5, _6`)
|
|
177
223
|
assert(downLevel(`for(o of os) noSymbol`), `for (_ = 0, _0 = os["length"]; _ < _0 && (o = os[_], true); _++) noSymbol\r\nvar _, _0`)
|
|
178
224
|
assert(downLevel(`for(var o of os) Symbol`), `for (var o, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol\r\nvar _, _0`)
|
|
179
225
|
assert(downLevel(`for(var o of os) Symbol`), `for (var o, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol\r\nvar _, _0`)
|
package/coms/compile/unstruct.js
CHANGED
|
@@ -123,7 +123,7 @@ var _switch = function (body, cx, unblock, result, getname) {
|
|
|
123
123
|
var o = body[cx];
|
|
124
124
|
o = o.next;
|
|
125
125
|
if (!o) return;
|
|
126
|
-
var qt =
|
|
126
|
+
var qt = ternary(o, getname, true);
|
|
127
127
|
for (var q of qt) if (q.length) pushstep(result, q);
|
|
128
128
|
var q = qt[qt.length - 1];
|
|
129
129
|
var qn = q.name;
|
|
@@ -142,7 +142,7 @@ var _switch = function (body, cx, unblock, result, getname) {
|
|
|
142
142
|
var getnextname = function (deep) {
|
|
143
143
|
return getname(deep + 1);
|
|
144
144
|
};
|
|
145
|
-
var q =
|
|
145
|
+
var q = ternary(block, getnextname, true);
|
|
146
146
|
for (var q of q) if (q.length) pushstep(result, q);
|
|
147
147
|
var qe = q;
|
|
148
148
|
if (qe.name) var case_ = scanner2(`if(${qn}===${qe.name})return[]`);
|
|
@@ -435,7 +435,7 @@ var remove_end_comma = function (o) {
|
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
if (m && m.type === STAMP && m.text === ',') {
|
|
438
|
-
|
|
438
|
+
splice(o, cx, o.length - cx);
|
|
439
439
|
}
|
|
440
440
|
};
|
|
441
441
|
var isEvalScope = function (o) {
|
|
@@ -477,26 +477,28 @@ var _invoke = function (t, getname) {
|
|
|
477
477
|
remove_end_comma(o);
|
|
478
478
|
var iseval = isEvalScope(o);
|
|
479
479
|
for (var cy = 0; cy < o.length; cy++) {
|
|
480
|
-
if (o[cy].type & (SPACE | COMMENT)) continue;
|
|
481
480
|
var by = cy;
|
|
482
|
-
|
|
483
|
-
|
|
481
|
+
while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
|
|
482
|
+
var ay = cy;
|
|
484
483
|
cy = skipAssignment(o, cy);
|
|
485
|
-
|
|
486
|
-
|
|
484
|
+
var ey = cy;
|
|
485
|
+
if (ay === ey || ay >= o.length) continue;
|
|
486
|
+
var m = o.slice(ay, ey);
|
|
487
487
|
if (m.length === 1 && (m[0].type === EXPRESS && !/\./.test(m[0].text) || m[0].type === VALUE || m[0].type === QUOTED && !m[0].length)) {
|
|
488
488
|
continue;
|
|
489
489
|
}
|
|
490
490
|
var q = toqueue(m, getdeepname, true);
|
|
491
491
|
var qe = q[q.length - 1];
|
|
492
492
|
if (!iseval || m[m.length - 1] === o.last) {
|
|
493
|
-
splice(o, by,
|
|
493
|
+
splice(o, by, ey - by, { text: qe.name, type: EXPRESS });
|
|
494
494
|
cy = by + 1;
|
|
495
495
|
}
|
|
496
496
|
else {
|
|
497
|
-
while (o[cy].type & (SPACE | COMMENT)) cy++;
|
|
498
|
-
|
|
499
|
-
|
|
497
|
+
while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
|
|
498
|
+
var c = o[cy];
|
|
499
|
+
if (c && c.type & STAMP && /^[,;]$/.test(c.text)) cy++;
|
|
500
|
+
splice(o, 0, cy);
|
|
501
|
+
cy = -1;
|
|
500
502
|
}
|
|
501
503
|
cache.push(...q);
|
|
502
504
|
nameindex++;
|
|
@@ -650,7 +652,7 @@ var ternary = function (body, getname, ret) {
|
|
|
650
652
|
for (var a of ass) {
|
|
651
653
|
if (a.type === SCOPED) {
|
|
652
654
|
if (a.entry === '[') {
|
|
653
|
-
var q =
|
|
655
|
+
var q = ternary(a, getnextname, true);
|
|
654
656
|
for (var q of q) {
|
|
655
657
|
if (q.length) pushstep(explist, q);
|
|
656
658
|
}
|