efront 4.25.1 → 4.25.3
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/i18n-supports.js +3 -1
- package/coms/basic/i18n.js +3 -2
- package/coms/compile/common.js +243 -204
- package/coms/compile/downLevel.js +18 -10
- package/coms/compile/downLevel_test.js +12 -8
- package/coms/compile/translate.js +2 -1
- package/coms/compile/unstruct.js +32 -8
- package/coms/compile/unstruct_test.js +6 -5
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var scanner2 = require("./scanner2");
|
|
2
2
|
var strings = require("../basic/strings");
|
|
3
3
|
var Program = scanner2.Program;
|
|
4
|
-
var { STAMP, SCOPED, STRAP, EXPRESS, pickAssignment, COMMENT, SPACE, PROPERTY, VALUE, LABEL, QUOTED, snapExpressFoot, isEval, canbeTemp, rename, isHalfSentence, skipFunction, getDeclared, skipAssignment, skipSentenceQueue, createScoped, createString, splice, relink, pickSentence, snapExpressHead, needBreakBetween } = require("./common");
|
|
4
|
+
var { STAMP, SCOPED, STRAP, EXPRESS, pickAssignment, COMMENT, SPACE, PROPERTY, VALUE, LABEL, QUOTED, snapExpressFoot, isEval, canbeTemp, rename, isHalfSentence, skipFunction, getDeclared, skipAssignment, skipSentenceQueue, createScoped, createString, splice, relink, rolink, pickSentence, snapExpressHead, needBreakBetween } = require("./common");
|
|
5
5
|
var splice2 = function (q, from, to, ...a) {
|
|
6
6
|
var cx = q.indexOf(from);
|
|
7
7
|
if (cx < 0) throw console.log(splice2.caller, console.format(`\r\n<red2>${i18n`自`}</red2>`), from && createString([from]), console.format(`\r\n<yellow>${i18n`至`}</yellow>`), to && createString([to]), console.format(`\r\n<cyan>${i18n`码列`}</cyan>`), createString(pickSentence(from))), i18n`结构异常`;
|
|
@@ -1009,6 +1009,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
1009
1009
|
break;
|
|
1010
1010
|
case "async":
|
|
1011
1011
|
splice(body, i, 1);
|
|
1012
|
+
if (o.next) o.next.async = true;
|
|
1012
1013
|
break;
|
|
1013
1014
|
case "new":
|
|
1014
1015
|
if (o.next?.needle) {
|
|
@@ -1068,7 +1069,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
1068
1069
|
}
|
|
1069
1070
|
else if (o.type === STAMP) {
|
|
1070
1071
|
if (o.text === "=>") {
|
|
1071
|
-
i = unarrow(body, i
|
|
1072
|
+
i = unarrow(body, i);
|
|
1072
1073
|
continue;
|
|
1073
1074
|
}
|
|
1074
1075
|
else i = newpunc(body, i, _getnewname);
|
|
@@ -1255,7 +1256,7 @@ var unforof = function (o, getnewname, used, killobj) {
|
|
|
1255
1256
|
splice(tf[1], 0, 0, ...splice2(r.queue, r, n, ...tf));
|
|
1256
1257
|
}
|
|
1257
1258
|
};
|
|
1258
|
-
var unarrow = function (body, i
|
|
1259
|
+
var unarrow = function (body, i) {
|
|
1259
1260
|
var o = body[i];
|
|
1260
1261
|
var p = o.prev;
|
|
1261
1262
|
var n = o.next;
|
|
@@ -1273,12 +1274,19 @@ var unarrow = function (body, i, killobj, letname_) {
|
|
|
1273
1274
|
if (n.type !== SCOPED || !n.brace) {
|
|
1274
1275
|
var nni = skipAssignment(body, ni);
|
|
1275
1276
|
b = scanner2('{}')[0];
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1277
|
+
var q = splice(body, ni, nni - ni, b);
|
|
1278
|
+
if (q.length === 1 && q.entry === '(') {
|
|
1279
|
+
q = q[0];
|
|
1280
|
+
}
|
|
1281
|
+
splice(b, 0, 0, { type: STRAP, transive: true, text: "return" }, ...q);
|
|
1282
|
+
relink(b);
|
|
1279
1283
|
nni = indexof(body, b, ni) + 1;
|
|
1280
1284
|
}
|
|
1281
1285
|
else nni = ni + 1;
|
|
1286
|
+
var bd = body.slice(pi, nni);
|
|
1287
|
+
if (p?.async) bd.unshift({ type: STRAP, text: 'async' });
|
|
1288
|
+
relink(bd);
|
|
1289
|
+
down(createScoped(bd));
|
|
1282
1290
|
return nni;
|
|
1283
1291
|
};
|
|
1284
1292
|
var getname = function (vars, envs, k) {
|
|
@@ -1653,8 +1661,8 @@ var newpunc = function (body, i, newname) {
|
|
|
1653
1661
|
}
|
|
1654
1662
|
return hi;
|
|
1655
1663
|
}
|
|
1656
|
-
|
|
1657
1664
|
var down = function (scoped) {
|
|
1665
|
+
if (scoped.isArraw) return;
|
|
1658
1666
|
var inAsync = scoped.async;
|
|
1659
1667
|
var inAster = scoped.yield;
|
|
1660
1668
|
var funcMark = [, "aster", "async", "asyncAster"][inAsync << 1 | inAster];
|
|
@@ -1787,13 +1795,13 @@ var down = function (scoped) {
|
|
|
1787
1795
|
};
|
|
1788
1796
|
|
|
1789
1797
|
var markcodes = [];
|
|
1790
|
-
if (scoped.isfunc && scoped.caps.this && (funcMark
|
|
1798
|
+
if (scoped.isfunc && scoped.caps.this && (funcMark || scoped.insett)) {
|
|
1791
1799
|
let tn = _getname("this_");
|
|
1792
1800
|
rename(scoped.caps, "this", tn);
|
|
1793
1801
|
scoped.caps.this.forEach(o => o.origin = 'this');
|
|
1794
1802
|
markcodes.push(`${tn}=this`);
|
|
1795
1803
|
}
|
|
1796
|
-
if (scoped.isfunc && scoped.caps.arguments && (funcMark
|
|
1804
|
+
if (scoped.isfunc && scoped.caps.arguments && (funcMark || scoped.inseta)) {
|
|
1797
1805
|
let an = _getname("arguments_");
|
|
1798
1806
|
scoped.caps.arguments.forEach(o => o.origin = 'arguments');
|
|
1799
1807
|
rename(scoped.caps, "arguments", an);
|
|
@@ -1803,7 +1811,7 @@ var down = function (scoped) {
|
|
|
1803
1811
|
var _killobj = function (_getlocal, o) {
|
|
1804
1812
|
return killobj(o, gettmpname, getletname, _getlocal, _letname);
|
|
1805
1813
|
};
|
|
1806
|
-
var kill = function (scoped
|
|
1814
|
+
var kill = function (scoped) {
|
|
1807
1815
|
if (scoped.isfunc) return down(scoped);
|
|
1808
1816
|
killlet(scoped);
|
|
1809
1817
|
var saveddeep = fordeep;
|
|
@@ -160,16 +160,15 @@ textSpan: highlightSpan.textSpan,
|
|
|
160
160
|
isWriteAccess: highlightSpan.kind === "writtenReference" /* writtenReference */ }, highlightSpan.isInString && { isInString: true }, highlightSpan.contextSpan && { contextSpan: highlightSpan.contextSpan })) }`);
|
|
161
161
|
assert(downLevel(`async()=>({ [argitem.sort ? argitem.sort : 'date']: "desc" })`), `function () { return &async(
|
|
162
162
|
function () {
|
|
163
|
-
_ = {}; if (!argitem.sort) return [1, 0];
|
|
163
|
+
_ = {}; if (!argitem.sort) return [1, 0]; _2 = argitem.sort; return [2, 0]
|
|
164
164
|
},
|
|
165
165
|
function () {
|
|
166
|
-
|
|
166
|
+
_2 = 'date'; return [1, 0]
|
|
167
167
|
},
|
|
168
168
|
function () {
|
|
169
|
-
_[
|
|
169
|
+
_[_2] = "desc"; _1 = _; return [_1, 2]
|
|
170
170
|
})
|
|
171
|
-
var
|
|
172
|
-
var _`);
|
|
171
|
+
var _, _1, _2 }`);
|
|
173
172
|
assert(downLevel(`={...{a:1}}`), `= &extend({}, { a: 1 })`);
|
|
174
173
|
assert(downLevel(`={...a,...c}`), `= &extend({}, a, c)`);
|
|
175
174
|
assert(downLevel(`={a:a,...b,c}`), `= (_ = &extend({ a: a }, b),\r\n_.c = c, _)\r\nvar _`);
|
|
@@ -451,11 +450,14 @@ function (_) {
|
|
|
451
450
|
_0 = _; _0 = _0.a; a = _0
|
|
452
451
|
})
|
|
453
452
|
var a, _0`)
|
|
454
|
-
assert(downLevel(`async a=>await a`), `function (a) { return
|
|
453
|
+
assert(downLevel(`async a=>await a`), `function (a) { return &async(
|
|
455
454
|
function () {
|
|
456
455
|
_0 = a; return [_0, 1]
|
|
456
|
+
},
|
|
457
|
+
function (_) {
|
|
458
|
+
_0 = _; return [_0, 2]
|
|
457
459
|
})
|
|
458
|
-
var
|
|
460
|
+
var _0 }`)
|
|
459
461
|
assert(downLevel(`function(a=b=>b,c){c}`), 'function (a, c) { if (a === undefined) a = function (b) { return b }; c }')
|
|
460
462
|
assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `Object.defineProperty(dis, f.key, (_ = {},
|
|
461
463
|
_.get = function () {},
|
|
@@ -533,4 +535,6 @@ return cls0 }(function () {})`);
|
|
|
533
535
|
assert(downLevel(`a=class{ static{[...a]}}`), `var &slice = Array["prototype"]["slice"];
|
|
534
536
|
a = function (cls0) { (function () { &slice["call"](a) }())
|
|
535
537
|
return cls0 }(function () {})`);
|
|
536
|
-
|
|
538
|
+
assert(downLevel(`geta=()=>({[a]:1})`), `geta = function () { return ((_ = {},
|
|
539
|
+
_[a] = 1, _))
|
|
540
|
+
var _ }`);
|
|
@@ -163,6 +163,7 @@ function translate([imap, supports], code) {
|
|
|
163
163
|
var a = scanner2(`[]`);
|
|
164
164
|
v.map(function (o) {
|
|
165
165
|
var name = o.name;
|
|
166
|
+
if (!name) return o;
|
|
166
167
|
if (!name) return scanner2(`(${JSON.stringify(o)})`)[0];
|
|
167
168
|
delete o.name;
|
|
168
169
|
name = ctn('i18n' + getm(name, t.nodup, t.warn), t);
|
|
@@ -181,7 +182,7 @@ function translate([imap, supports], code) {
|
|
|
181
182
|
v = a;
|
|
182
183
|
}
|
|
183
184
|
}
|
|
184
|
-
else if (/^(name|holder|comment)$/.test(k)) v = ctn('i18n' + getm(v, t.nodup, t.warn), t);
|
|
185
|
+
else if (/^(name|holder|comment)$/.test(k)) v = v ? ctn('i18n' + getm(v, t.nodup, t.warn), t) : [{ type: QUOTED, text: `""` }];
|
|
185
186
|
else v = scanner2(`(${JSON.stringify(v)})`)[0];
|
|
186
187
|
o.push({
|
|
187
188
|
type: PROPERTY,
|
package/coms/compile/unstruct.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
var {
|
|
1
|
+
var {
|
|
2
|
+
SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL,
|
|
3
|
+
canbeTemp: _canbeTemp, isEval,
|
|
4
|
+
createString, createScoped,
|
|
5
|
+
skipAssignment,
|
|
6
|
+
pickSentence,
|
|
7
|
+
skipSentenceQueue,
|
|
8
|
+
splice, relink,
|
|
9
|
+
createExpressList,
|
|
10
|
+
snapExpressHead, snapExpressFoot
|
|
11
|
+
} = require("./common");
|
|
2
12
|
var scanner2 = require("./scanner2");
|
|
3
13
|
var returnText = function () { return this.text };
|
|
4
14
|
var NodeNotClone = o => Object.assign(Object.create(null), o, { toString: returnText });
|
|
@@ -560,6 +570,7 @@ var _invoke = function (t, getname) {
|
|
|
560
570
|
remove_end_comma(o);
|
|
561
571
|
var iseval = o.iseval = isEval(o);
|
|
562
572
|
var constStart = 0;
|
|
573
|
+
var constNames = Object.create(null);
|
|
563
574
|
if (!iseval) {
|
|
564
575
|
for (var cy = 0; cy < o.length; cy++) {
|
|
565
576
|
while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
|
|
@@ -567,10 +578,19 @@ var _invoke = function (t, getname) {
|
|
|
567
578
|
cy = skipAssignment(o, cy);
|
|
568
579
|
if (cy === ay || ay >= o.length) continue;
|
|
569
580
|
var m = o[ay];
|
|
570
|
-
|
|
581
|
+
var isexp = m.type === EXPRESS && (strip || !/[\.\[]/.test(m.text));
|
|
582
|
+
if (cy === ay + 1 && (isexp || m.type === VALUE || m.type === QUOTED && !m.length)) {
|
|
583
|
+
if (isexp) constNames[m.text] = true;
|
|
571
584
|
continue;
|
|
572
585
|
}
|
|
573
|
-
|
|
586
|
+
var s = createScoped(cloneNode(o.slice(ay, cy)));
|
|
587
|
+
for (var k in s.used) {
|
|
588
|
+
if (k in constNames) {
|
|
589
|
+
constStart = cy + 1;
|
|
590
|
+
break;
|
|
591
|
+
}
|
|
592
|
+
constNames[k] = true;
|
|
593
|
+
}
|
|
574
594
|
}
|
|
575
595
|
}
|
|
576
596
|
for (var cy = 0; cy < o.length; cy++) {
|
|
@@ -581,9 +601,13 @@ var _invoke = function (t, getname) {
|
|
|
581
601
|
var ey = cy;
|
|
582
602
|
if (ay === ey || ay >= o.length) continue;
|
|
583
603
|
var m = o.slice(ay, ey);
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
604
|
+
var isexp = m.length === 1 && (
|
|
605
|
+
m[0].type === EXPRESS && !/[\.\[]/.test(m[0].text)
|
|
606
|
+
&& ay >= constStart// 防止变量的值被后文修改
|
|
607
|
+
|| m[0].type === QUOTED && !m[0].length
|
|
608
|
+
|| m[0].type === VALUE
|
|
609
|
+
);
|
|
610
|
+
if (isexp) continue;
|
|
587
611
|
if (!iseval || m[m.length - 1] === o.last) {
|
|
588
612
|
var q = toqueue(m, getdeepname, 1);
|
|
589
613
|
if (q.length > 1 && queue.length) {
|
|
@@ -820,7 +844,7 @@ var ternary = function (body, getname, ret) {
|
|
|
820
844
|
else if (ret === 1 && !equcount && canbeOnce(bd)) {
|
|
821
845
|
var name = getnextname(0);
|
|
822
846
|
var r = [{ type: EXPRESS, text: name }, { type: STAMP, text: '=' }, ...bd]
|
|
823
|
-
r.name =
|
|
847
|
+
r.name = [r[0]];
|
|
824
848
|
explist = [r];
|
|
825
849
|
}
|
|
826
850
|
else {
|
|
@@ -863,7 +887,7 @@ var ternary = function (body, getname, ret) {
|
|
|
863
887
|
var punc = eq.text.slice(0, eq.text.length - 1);
|
|
864
888
|
var bdtmp = [...ass.map(cloneNode), { type: STAMP, text: punc }, ...asn];
|
|
865
889
|
relink(bdtmp);
|
|
866
|
-
eqused++;
|
|
890
|
+
if (eqused) eqused++;
|
|
867
891
|
var explist2 = _express(bdtmp, getnextname, true);
|
|
868
892
|
if (isSimpleAssign) {
|
|
869
893
|
[asn, an = cloneNode(ass)] = popexp(explist2);
|
|
@@ -165,9 +165,10 @@ test(`while (a && b);`, '_ = a; if (!_) return [1, 0]; _ = b;\r\n if (!_) return
|
|
|
165
165
|
test(`while (a < b);`, '_ = a < b; if (!_) return [1, 0]; return [0, 0]', true);
|
|
166
166
|
test(`if (a() > a+b);`, '_ = a(), _0 = a + b, _ = _ > _0; if (!_) return [1, 0]; return [1, 0]', true);
|
|
167
167
|
test(`index > start && result.length < pageSize`, '_ = index > start; if (!_) return [1, 0]; _ = result.length, _ < pageSize', true);
|
|
168
|
-
test(`menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 =
|
|
169
|
-
test(`a.b.c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 =
|
|
170
|
-
test(`menus[0].c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = menus[0]; _1 =
|
|
171
|
-
unstruct.debug = true; r++;
|
|
168
|
+
test(`menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = version[0]; _0 = [str__v_, _0, str__v_1]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1`);
|
|
169
|
+
test(`a.b.c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = version[0]; _0 = [str__v_, _0, str__v_1]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1; _2 = a.b.c, _2 = _2 + _1; a.b.c = _2`);
|
|
170
|
+
test(`menus[0].c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = menus[0]; _1 = version[0]; _1 = [str__v_, _1, str__v_1]; _1 = _1[str_join](""); _2 = _0[str_name], _2 = _2 + _1; _0[str_name] = _2; _3 = _.c, _3 = _3 + _2; _.c = _3`);
|
|
172
171
|
test(`new Array(2).join("") + 1`, `_0 = new Array(2); _ = _0.join(""), _ + 1`);
|
|
173
|
-
test(`new window.Array(2).join("") + 1`, `_0 = new window.Array(2); _ = _0.join(""), _ + 1`);
|
|
172
|
+
test(`new window.Array(2).join("") + 1`, `_0 = new window.Array(2); _ = _0.join(""), _ + 1`);
|
|
173
|
+
unstruct.debug = true; r++;
|
|
174
|
+
test(`readbuff(h, offset += 2, length)`, `_ = offset + 2; offset = _; readbuff(h, _, length)`);
|