efront 4.10.0 → 4.10.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/shallowClone.js +6 -2
- package/coms/basic/sortRegister.js +16 -0
- package/coms/basic_/nullish_.js +1 -1
- package/coms/compile/Html.js +5 -1
- package/coms/compile/Html_test.js +5 -0
- package/coms/compile/Javascript.js +141 -92
- package/coms/compile/Javascript_test.js +73 -3
- package/coms/compile/Program.js +351 -98
- package/coms/compile/audit.js +1 -1
- package/coms/compile/autoenum.js +6 -1
- package/coms/compile/cloneNode.js +2 -0
- package/coms/compile/common.js +134 -69
- package/coms/compile/downLevel.js +137 -54
- package/coms/compile/downLevel_test.js +12 -2
- package/coms/compile/formatcode.js +1 -1
- package/coms/compile/powermap.js +7 -24
- package/coms/compile/unstruct.js +10 -7
- package/coms/compile/unstruct_test.js +3 -3
- package/coms/docs/codecolor.js +47 -14
- package/coms/docs/codetext.xht +86 -11
- package/coms/frame/route.js +15 -15
- package/coms/maps/gaode.js +1 -1
- package/coms/zimoli/render.js +1 -1
- package/coms/zimoli/tree.js +21 -20
- package/docs//347/273/204/344/273/266.xht +1 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -30,7 +30,7 @@ var unslice = function (arr) {
|
|
|
30
30
|
continue;
|
|
31
31
|
}
|
|
32
32
|
var p = o.prev;
|
|
33
|
-
if (p && p
|
|
33
|
+
if (p && is3dots(p)) {
|
|
34
34
|
var px = arr.lastIndexOf(p, cx);
|
|
35
35
|
splice(arr, px, cx - px + 1, ...o);
|
|
36
36
|
cx += o.length - 1;
|
|
@@ -370,13 +370,13 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj, islet) {
|
|
|
370
370
|
// 键值对重组
|
|
371
371
|
var killmap = function (body, i, _getobjname, _getnewname, killobj) {
|
|
372
372
|
var o = body[i];
|
|
373
|
-
if (!o.length) return
|
|
373
|
+
if (!o.length) return i + 1;
|
|
374
374
|
var m = o.first;
|
|
375
375
|
var s = m, p;
|
|
376
376
|
|
|
377
377
|
loop: while (m) {
|
|
378
378
|
s = m, p = m.prev;
|
|
379
|
-
if (m.type === EXPRESS) break;
|
|
379
|
+
if (m.type === STAMP && m.text === '...' || m.type === EXPRESS) break;
|
|
380
380
|
while (m && (m.type === STRAP || m.type === STAMP)) m = m.next;
|
|
381
381
|
if (!m || m.type & (PROPERTY | QUOTED | EXPRESS) && /^\[/.test(m.text) || m.isprop && (m.type === SCOPED || m.short || m.next && m.next.type === SCOPED)) {
|
|
382
382
|
break;
|
|
@@ -425,7 +425,7 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
|
|
|
425
425
|
}
|
|
426
426
|
if (m && m.type === STAMP && /^[,;]$/.test(m.text)) m = m.next;
|
|
427
427
|
}
|
|
428
|
-
if (!m) return
|
|
428
|
+
if (!m) return i + 1;
|
|
429
429
|
m = s;
|
|
430
430
|
if (p && p.type === STAMP && p.text === ',') {
|
|
431
431
|
var mi = o.indexOf(m);
|
|
@@ -433,7 +433,6 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
|
|
|
433
433
|
if (pi > 0) splice(o, pi, mi - pi);
|
|
434
434
|
}
|
|
435
435
|
var q;
|
|
436
|
-
var next = o.next;
|
|
437
436
|
var l = 1;
|
|
438
437
|
var initq = function () {
|
|
439
438
|
q = scanner2(`(${_getobjname()} =)`)[0];
|
|
@@ -445,7 +444,7 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
|
|
|
445
444
|
var tempname = null;
|
|
446
445
|
var t;
|
|
447
446
|
while (m) {
|
|
448
|
-
if (m.type === EXPRESS) {
|
|
447
|
+
if (m.type === EXPRESS || m.type === STAMP && m.text === '...') {
|
|
449
448
|
var s = m;
|
|
450
449
|
m = skipAssignment(m);
|
|
451
450
|
if (/^\.\.\./.test(s.text)) {
|
|
@@ -501,7 +500,7 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
|
|
|
501
500
|
q.push(...scanner2(_getobjname()));
|
|
502
501
|
relink(q);
|
|
503
502
|
}
|
|
504
|
-
return
|
|
503
|
+
return i + 1;
|
|
505
504
|
};
|
|
506
505
|
var getprop = function (o, m) {
|
|
507
506
|
var prop = {};
|
|
@@ -510,7 +509,7 @@ var getprop = function (o, m) {
|
|
|
510
509
|
prop[m.text] = true;
|
|
511
510
|
m = m.next;
|
|
512
511
|
}
|
|
513
|
-
if (m && (m.
|
|
512
|
+
if (m && (m.isprop)) {
|
|
514
513
|
prop.name = createString([m]);
|
|
515
514
|
if (m.short) {
|
|
516
515
|
prop.short = true;
|
|
@@ -539,7 +538,7 @@ var getprop = function (o, m) {
|
|
|
539
538
|
var s = m;
|
|
540
539
|
if (m && prop.sfunc !== false && m.type === SCOPED && m.entry === '(') {
|
|
541
540
|
m = m.next;
|
|
542
|
-
if (m && m.type === SCOPED && m.
|
|
541
|
+
if (m && m.type === SCOPED && m.brace) m = m.next;
|
|
543
542
|
}
|
|
544
543
|
else m = skipAssignment(m);
|
|
545
544
|
if (m && !m.isprop) m = m.next;
|
|
@@ -733,6 +732,9 @@ var indexof = function (list, o, i) {
|
|
|
733
732
|
else i = list.length;
|
|
734
733
|
return i;
|
|
735
734
|
};
|
|
735
|
+
var is3dots = function (m) {
|
|
736
|
+
return m.type === STAMP && m.text === '...' || m.type === EXPRESS && /^\.\.\./.test(m.text);
|
|
737
|
+
};
|
|
736
738
|
// 数组或参数展开
|
|
737
739
|
var killspr = function (body, i, _getobjname, killobj) {
|
|
738
740
|
var o = body[i];
|
|
@@ -747,6 +749,7 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
747
749
|
m = skipAssignment(m);
|
|
748
750
|
s.text = s.text.replace(/^\.\.\./, '');
|
|
749
751
|
var v = splice2(o, s, m);
|
|
752
|
+
if (!s.text) v.shift();
|
|
750
753
|
if (m) splice2(o, m, m = m.next);
|
|
751
754
|
killobj(v);
|
|
752
755
|
var q = scanner2(`slice_["call"]()`);
|
|
@@ -761,14 +764,13 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
761
764
|
return m;
|
|
762
765
|
}
|
|
763
766
|
while (m) {
|
|
764
|
-
if (
|
|
767
|
+
if (is3dots(m)) break;
|
|
765
768
|
m = killnext(m);
|
|
766
769
|
if (m) m = m.next;
|
|
767
770
|
index++;
|
|
768
771
|
}
|
|
769
772
|
if (!m) return i + 1;
|
|
770
773
|
var c = scanner2('["concat"]()');
|
|
771
|
-
var next = o.next;
|
|
772
774
|
if (o.entry === '(') {
|
|
773
775
|
var r = snapExpressHead(o);
|
|
774
776
|
if (r.type === STRAP && r.text === "new") {
|
|
@@ -788,20 +790,37 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
788
790
|
relink(qt)
|
|
789
791
|
return b;
|
|
790
792
|
}
|
|
791
|
-
var rt = r.type
|
|
793
|
+
var rt = (r.type & (EXPRESS | STAMP)) && r.text.replace(/^\.\.\./, '');
|
|
792
794
|
var p = o.prev;
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
795
|
+
var pp = p?.prev;
|
|
796
|
+
var done = false;
|
|
797
|
+
var hasdot = false;
|
|
798
|
+
if (r === o) done = true;
|
|
799
|
+
else if (r === p) {
|
|
800
|
+
if (r.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
|
|
801
|
+
var p = r;
|
|
802
|
+
hasdot = r.text.length !== rt.length;
|
|
803
|
+
var n = /\.|\[/.test(rt) ? rt.replace(/\.[^\.]*|\[[^\]]*\]$/, '') : "null";
|
|
804
|
+
splice(o, 0, 0, ...scanner2(n + ","));
|
|
805
|
+
done = true;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
else if (r === pp) {
|
|
809
|
+
if (p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
|
|
810
|
+
splice(o, 0, 0, ...scanner2(rt + ","));
|
|
811
|
+
p = r;
|
|
812
|
+
done = true;
|
|
813
|
+
}
|
|
799
814
|
}
|
|
800
|
-
else if (
|
|
801
|
-
|
|
802
|
-
p
|
|
815
|
+
else if (r === pp.prev) {
|
|
816
|
+
var ppp = pp.prev;
|
|
817
|
+
if (pp.text === '.' && p.type === EXPRESS && !/[\.\[]/.test(p.text) && ppp.type === EXPRESS && !/[\.\[]]/.test(ppp.text)) {
|
|
818
|
+
splice(o, 0, 0, ...scanner2(ppp.text + ','));
|
|
819
|
+
p = pp.prev;
|
|
820
|
+
done = true;
|
|
821
|
+
}
|
|
803
822
|
}
|
|
804
|
-
|
|
823
|
+
if (!done) {
|
|
805
824
|
var n = null, hasdot = false;
|
|
806
825
|
var pt = p.type === EXPRESS && p.text.replace(/^\.\.\./, '');
|
|
807
826
|
if (p.type === EXPRESS && (n = /^(?:[\s\S]*[^\.])?(\.[^\.]*|\[[^\]]*\])$/.exec(pt))) {
|
|
@@ -810,6 +829,9 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
810
829
|
p.text = pt.slice(0, pt.length - n.length);
|
|
811
830
|
splice(body, i++, 0, { type: EXPRESS, text: n });
|
|
812
831
|
}
|
|
832
|
+
else if (pp && /\.$/.test(pp.text) && !/[\.\[]/.test(p.text)) {
|
|
833
|
+
p = pp.prev;
|
|
834
|
+
}
|
|
813
835
|
else if (p.type === SCOPED && p.entry === '[') {
|
|
814
836
|
p = p.prev;
|
|
815
837
|
}
|
|
@@ -827,7 +849,7 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
827
849
|
}
|
|
828
850
|
splice(h1, h1.length, 0, ...splice(body, cx, dx - cx, ...h));
|
|
829
851
|
i += cx - dx + h.length;
|
|
830
|
-
if (p.type
|
|
852
|
+
if (p.type & (EXPRESS | STAMP) && !p.text) {
|
|
831
853
|
var cx = h0.lastIndexOf(p);
|
|
832
854
|
if (cx >= 0) splice(h1, cx, 1);
|
|
833
855
|
}
|
|
@@ -840,11 +862,11 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
840
862
|
splice(c[0], 0, 0, ...h);
|
|
841
863
|
killobj(c);
|
|
842
864
|
splice(o, o.length, 0, ...c);
|
|
843
|
-
return
|
|
865
|
+
return i + 1;
|
|
844
866
|
};
|
|
845
|
-
killnext(m);
|
|
846
867
|
m.text = m.text.replace(/^\.\.\./, '');
|
|
847
|
-
|
|
868
|
+
if (!m.text) splice2(o, m, m.next);
|
|
869
|
+
return i + 1;
|
|
848
870
|
}
|
|
849
871
|
if (index > 0) {
|
|
850
872
|
if (m) splice2(o, m.prev, m);
|
|
@@ -856,7 +878,7 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
856
878
|
}
|
|
857
879
|
var d;
|
|
858
880
|
while (m) {
|
|
859
|
-
if (
|
|
881
|
+
if (is3dots(m)) {
|
|
860
882
|
if (c[1].length) insert1(c[1], null, { type: STAMP, text: "," });
|
|
861
883
|
insert1(c[1], null, ...spr());
|
|
862
884
|
d = null;
|
|
@@ -873,7 +895,7 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
873
895
|
insert1(d[0], null, ...splice2(o, s, m));
|
|
874
896
|
if (m) splice2(o, m, m = m.next);
|
|
875
897
|
}
|
|
876
|
-
return
|
|
898
|
+
return i + 1;
|
|
877
899
|
};
|
|
878
900
|
|
|
879
901
|
var killobj = function (body, getobjname, getletname, getname_, letname_, deep = 0) {
|
|
@@ -963,6 +985,14 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
963
985
|
case "async":
|
|
964
986
|
splice(body, i, 1);
|
|
965
987
|
break;
|
|
988
|
+
case "new":
|
|
989
|
+
if (o.next?.needle) {
|
|
990
|
+
o.text = 'undefined';
|
|
991
|
+
o = o.next;
|
|
992
|
+
var e = snapExpressFoot(o).next;
|
|
993
|
+
splice2(o.queue, o, e);
|
|
994
|
+
break;
|
|
995
|
+
}
|
|
966
996
|
default:
|
|
967
997
|
i++;
|
|
968
998
|
}
|
|
@@ -982,6 +1012,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
982
1012
|
}
|
|
983
1013
|
else if (o.entry === '[') {
|
|
984
1014
|
var a = snapExpressHead(o);
|
|
1015
|
+
|
|
985
1016
|
if (a === o && o.next && o.next.type === STAMP && o.next.text === '=' || o.next && o.next.type === STRAP && /^(in|of)$/.test(o.next.type) && body.entry === '(' && body.prev && body.prev.type === STRAP && body.prev.text === 'for') {
|
|
986
1017
|
i = killdec(body, i, _getdeepname, '', deepkill);
|
|
987
1018
|
}
|
|
@@ -1058,7 +1089,7 @@ var hasbreak = function (body) {
|
|
|
1058
1089
|
return false;
|
|
1059
1090
|
};
|
|
1060
1091
|
var ises3 = function (o, killobj) {
|
|
1061
|
-
if (o && o.type === SCOPED && o.
|
|
1092
|
+
if (o && o.type === SCOPED && o.brace) {
|
|
1062
1093
|
killobj(o);
|
|
1063
1094
|
if (o.await_) return false;
|
|
1064
1095
|
if (hasbreak(o)) return false;
|
|
@@ -1210,7 +1241,7 @@ var unarrow = function (body, i, killobj, letname_) {
|
|
|
1210
1241
|
h = scanner2("()")[0];
|
|
1211
1242
|
splice(h, 0, 0, ...splice(body, i, 1, h));
|
|
1212
1243
|
}
|
|
1213
|
-
if (n.type !== SCOPED || n.
|
|
1244
|
+
if (n.type !== SCOPED || !n.brace) {
|
|
1214
1245
|
var nni = skipAssignment(body, ni);
|
|
1215
1246
|
b = scanner2('{}')[0];
|
|
1216
1247
|
splice(b, 0, 0, { type: STRAP, transive: true, text: "return" }, ...splice(body, ni, nni - ni, b));
|
|
@@ -1258,6 +1289,12 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1258
1289
|
var namemap = Object.create(null);
|
|
1259
1290
|
while (o) {
|
|
1260
1291
|
var aname = null;
|
|
1292
|
+
var is3darg = false;
|
|
1293
|
+
var a = o;
|
|
1294
|
+
if (o.type === STAMP && o.text === '...') {
|
|
1295
|
+
o = o.next;
|
|
1296
|
+
is3darg = true;
|
|
1297
|
+
}
|
|
1261
1298
|
if (o.type === SCOPED) {
|
|
1262
1299
|
aname = _getname(head.length > 1 ? 'arg' + index : 'arg');
|
|
1263
1300
|
var dec = splice2(head, o, o = o.next, { type: EXPRESS, text: aname });
|
|
@@ -1266,10 +1303,11 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1266
1303
|
else argcodes.push(`var ` + dec);
|
|
1267
1304
|
}
|
|
1268
1305
|
else if (o.type & (EXPRESS | VALUE)) {
|
|
1306
|
+
if (!is3darg) is3darg = is3dots(o);
|
|
1269
1307
|
aname = o.text;
|
|
1270
|
-
if (
|
|
1308
|
+
if (is3darg) {
|
|
1271
1309
|
cname = aname.replace(/^\.\.\./, '');
|
|
1272
|
-
splice2(head,
|
|
1310
|
+
splice2(head, a.prev || a, o = skipAssignment(o));
|
|
1273
1311
|
collect = index + 1;
|
|
1274
1312
|
}
|
|
1275
1313
|
else {
|
|
@@ -1280,7 +1318,13 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1280
1318
|
index++;
|
|
1281
1319
|
}
|
|
1282
1320
|
}
|
|
1283
|
-
else
|
|
1321
|
+
else if (is3darg) {
|
|
1322
|
+
splice2(head, a.prev || a, o = skipAssignment(o));
|
|
1323
|
+
aname = '...';
|
|
1324
|
+
cname = '';
|
|
1325
|
+
collect = index + 1;
|
|
1326
|
+
}
|
|
1327
|
+
else throw i18n`参数声明异常!`;
|
|
1284
1328
|
if (o && o.type === STAMP) {
|
|
1285
1329
|
if (o.text === ',') {
|
|
1286
1330
|
o = o.next; continue;
|
|
@@ -1376,7 +1420,7 @@ var killret = function (body, labels = Object.create(null), gettmpname) {
|
|
|
1376
1420
|
lbls.push(lbl);
|
|
1377
1421
|
}
|
|
1378
1422
|
}
|
|
1379
|
-
else if (o.type === SCOPED && o.
|
|
1423
|
+
else if (o.type === SCOPED && o.brace) {
|
|
1380
1424
|
if (o.isClass || o.isObject);
|
|
1381
1425
|
else killret(o, labels, gettmpname);
|
|
1382
1426
|
unlabel = true;
|
|
@@ -1443,6 +1487,27 @@ var killret = function (body, labels = Object.create(null), gettmpname) {
|
|
|
1443
1487
|
}
|
|
1444
1488
|
return breakmap;
|
|
1445
1489
|
}
|
|
1490
|
+
var puncLeft = function (o) {
|
|
1491
|
+
var s = snapExpressHead(o.prev);
|
|
1492
|
+
var p = Infinity;
|
|
1493
|
+
while (o && o.prev) {
|
|
1494
|
+
if (o.type !== STAMP || !(o.text in powermap) || powermap[o.text] < p) return s;
|
|
1495
|
+
s = snapExpressHead(o.prev);
|
|
1496
|
+
o = s.prev;
|
|
1497
|
+
}
|
|
1498
|
+
return s;
|
|
1499
|
+
}
|
|
1500
|
+
var puncRight = function (o) {
|
|
1501
|
+
var s = snapExpressFoot(o.next);
|
|
1502
|
+
var p = 0;
|
|
1503
|
+
while (o && o.next) {
|
|
1504
|
+
if (o.type !== STAMP || !(o.text in powermap) || powermap[o.text] <= p) return s;
|
|
1505
|
+
s = snapExpressFoot(o.next);
|
|
1506
|
+
o = s.next;
|
|
1507
|
+
}
|
|
1508
|
+
return s;
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1446
1511
|
|
|
1447
1512
|
var newpunc = function (body, i, newname) {
|
|
1448
1513
|
var o = body[i];
|
|
@@ -1465,29 +1530,44 @@ var newpunc = function (body, i, newname) {
|
|
|
1465
1530
|
if (!h) return;
|
|
1466
1531
|
var rt = h.type === EXPRESS && h.text;
|
|
1467
1532
|
var p = o.prev;
|
|
1533
|
+
var done = false;
|
|
1468
1534
|
var hi = body.lastIndexOf(h, i);
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
if (canbeTemp(p)) {
|
|
1476
|
-
var name = p.first.text;
|
|
1535
|
+
var pp = p?.prev;
|
|
1536
|
+
if (h === p) {
|
|
1537
|
+
if (h.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
|
|
1538
|
+
splice(sentence, 0, 0, ...scanner2(rt + punc));
|
|
1539
|
+
hi = i;
|
|
1540
|
+
done = true;
|
|
1477
1541
|
}
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1542
|
+
}
|
|
1543
|
+
else if (h === pp) {
|
|
1544
|
+
if (p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
|
|
1545
|
+
if (canbeTemp(p)) {
|
|
1546
|
+
var name = p.first.text;
|
|
1547
|
+
}
|
|
1548
|
+
else {
|
|
1549
|
+
var name = newname();
|
|
1550
|
+
splice(p, 0, 0, ...scanner2(`${name}=`));
|
|
1551
|
+
}
|
|
1552
|
+
splice(sentence, 0, 0, ...scanner2(`${rt}[${name}]` + punc));
|
|
1553
|
+
hi = i;
|
|
1554
|
+
done = true;
|
|
1481
1555
|
}
|
|
1482
|
-
splice(sentence, 0, 0, ...scanner2(`${rt}[${name}]` + punc));
|
|
1483
|
-
hi = i;
|
|
1484
1556
|
}
|
|
1485
|
-
else {
|
|
1557
|
+
else if (h === pp.prev) {
|
|
1558
|
+
var ppp = pp.prev;
|
|
1559
|
+
if (pp.text === '.' && p.type === EXPRESS && ppp.type === EXPRESS && !/[\.\[]/.test(p.text) && !/[\.\[]/.test(ppp.text)) {
|
|
1560
|
+
splice(sentence, 0, 0, ...scanner2(`${ppp.text}.${pp.text}+${punc}`));
|
|
1561
|
+
hi = i;
|
|
1562
|
+
done = true;
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
if (!done) {
|
|
1486
1566
|
var n = null;
|
|
1487
1567
|
var name = newname();
|
|
1488
1568
|
var pt = p.type === EXPRESS && p.text;
|
|
1489
1569
|
var hp = h.prev;
|
|
1490
|
-
splice(body, i
|
|
1570
|
+
splice(body, i -= 1, 1);
|
|
1491
1571
|
if (p.type === EXPRESS && (n = /^(?:[\s\S]*[^\.])?(\.[^\.]*|\[[^\]]*\])$/.exec(pt))) {
|
|
1492
1572
|
var n = n[1];
|
|
1493
1573
|
p.text = pt.slice(0, pt.length - n.length);
|
|
@@ -1501,14 +1581,17 @@ var newpunc = function (body, i, newname) {
|
|
|
1501
1581
|
var name2 = newname();
|
|
1502
1582
|
splice(p, 0, 0, ...scanner2(`${name2}=`));
|
|
1503
1583
|
}
|
|
1504
|
-
splice(body, i
|
|
1584
|
+
splice(body, i -= 1, 1);
|
|
1505
1585
|
splice(sentence, 0, 0, ...scanner2(`,${name}`), p, ...scanner2(`=${name}[${name2}]${punc}`));
|
|
1506
1586
|
p = p.prev;
|
|
1507
1587
|
}
|
|
1508
1588
|
else {
|
|
1509
1589
|
var n = p.text.replace(/^\./, '');
|
|
1510
1590
|
var pp = p.prev;
|
|
1511
|
-
if (
|
|
1591
|
+
if (n === p.text) {
|
|
1592
|
+
if (pp.text === '.') pp = pp.prev, splice(body, i -= 2, 2);
|
|
1593
|
+
else if (pp.type & EXPRESS) pp.text = pp.text.replace(/\.$/, ''), splice(body, i -= 1, 1);
|
|
1594
|
+
}
|
|
1512
1595
|
splice(sentence, 0, 0, ...scanner2(`,${name}.${n}=${name}.${n}${punc}`));
|
|
1513
1596
|
}
|
|
1514
1597
|
splice(sentence, 0, 0, ...scanner2(`${name}=`), ...splice(body, hi, i));
|
|
@@ -1524,8 +1607,8 @@ var newpunc = function (body, i, newname) {
|
|
|
1524
1607
|
else {
|
|
1525
1608
|
hi = i;
|
|
1526
1609
|
if (/^(\?\?|\*\*)$/.test(t)) {
|
|
1527
|
-
var l =
|
|
1528
|
-
var r =
|
|
1610
|
+
var l = puncLeft(o);
|
|
1611
|
+
var r = puncRight(o);
|
|
1529
1612
|
var li = body.lastIndexOf(l, i);
|
|
1530
1613
|
var ri = body.indexOf(r, i);
|
|
1531
1614
|
var name = t === '??' ? 'nullish_' : "power_";
|
|
@@ -1721,7 +1804,7 @@ var down = function (scoped) {
|
|
|
1721
1804
|
fordeep = saveddeep;
|
|
1722
1805
|
};
|
|
1723
1806
|
if (scoped.isfunc) {
|
|
1724
|
-
if (!scoped.body && scoped.head?.next?.
|
|
1807
|
+
if (!scoped.body && scoped.head?.next?.brace) scoped.body = scoped.head.next;
|
|
1725
1808
|
if (scoped.head) var [argsmap, argcodes] = killarg(scoped.head, scoped.body, _letname, false);
|
|
1726
1809
|
else argcodes = [];
|
|
1727
1810
|
if ((markcodes.length || argcodes.length) && !funcMark) precode(markcodes.concat(argcodes).join(";") + ";");
|
|
@@ -160,7 +160,7 @@ 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 (!
|
|
163
|
+
_ = {}; _1 = argitem.sort; if (!_1) return [1, 0]; _1 = argitem.sort; return [2, 0]
|
|
164
164
|
},
|
|
165
165
|
function () {
|
|
166
166
|
_1 = 'date'; return [1, 0]
|
|
@@ -431,4 +431,14 @@ _0 = a; return [_0, 1]
|
|
|
431
431
|
})
|
|
432
432
|
var a, _0 }`)
|
|
433
433
|
|
|
434
|
-
assert(downLevel(`function(a=b=>b,c){c}`), 'function (a, c) { if (a === undefined) a = function (b) { return b }; c }')
|
|
434
|
+
assert(downLevel(`function(a=b=>b,c){c}`), 'function (a, c) { if (a === undefined) a = function (b) { return b }; c }')
|
|
435
|
+
assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `Object.defineProperty(dis, f.key, (_ = {},
|
|
436
|
+
_.get = function () {},
|
|
437
|
+
_.set = function (v) {}, _))
|
|
438
|
+
var _`);
|
|
439
|
+
common.debug = true;
|
|
440
|
+
var c = scanner2(`\r\n if (search.length) return null;\r\n return path.join(...pathlist);\r\n`);
|
|
441
|
+
c.fix();
|
|
442
|
+
c.break();
|
|
443
|
+
assert(c.toString(), `\r\n if (search["length"]) return null;\r\n return path["join"](...pathlist);\r\n`)
|
|
444
|
+
assert(downLevel.code(c).toString(), `\r\n if (search["length"]) return null;\r\n return (_ = path)["join"]["apply"](_, pathlist);\r\n\r\nvar _`);
|
|
@@ -20,7 +20,7 @@ function format(code, step) {
|
|
|
20
20
|
var space = lowspace + step;
|
|
21
21
|
if (code.length === 0) continue;
|
|
22
22
|
var explist = createExpressList(code);
|
|
23
|
-
var breakline = explist.length > 1 && (code.isObject || !code.entry || code.
|
|
23
|
+
var breakline = explist.length > 1 && (code.isObject || !code.entry || code.brace);
|
|
24
24
|
code.splice(0, code.length);
|
|
25
25
|
if (breakline) code.push({ type: SPACE, text: space });
|
|
26
26
|
if (breakline) var deepspace = space + step;
|
package/coms/compile/powermap.js
CHANGED
|
@@ -1,35 +1,18 @@
|
|
|
1
|
-
var
|
|
2
|
-
var powermap = new class {
|
|
3
|
-
puncLeft(o) {
|
|
4
|
-
var s = snapExpressHead(o.prev);
|
|
5
|
-
var p = Infinity;
|
|
6
|
-
while (o && o.prev) {
|
|
7
|
-
if (o.type !== STAMP || !(o.text in this) || this[o.text] < p) return s;
|
|
8
|
-
s = snapExpressHead(o.prev);
|
|
9
|
-
o = s.prev;
|
|
10
|
-
}
|
|
11
|
-
return s;
|
|
12
|
-
}
|
|
13
|
-
puncRight(o) {
|
|
14
|
-
var s = snapExpressFoot(o.next);
|
|
15
|
-
var p = 0;
|
|
16
|
-
while (o && o.next) {
|
|
17
|
-
if (o.type !== STAMP || !(o.text in this) || this[o.text] <= p) return s;
|
|
18
|
-
s = snapExpressFoot(o.next);
|
|
19
|
-
o = s.next;
|
|
20
|
-
}
|
|
21
|
-
return s;
|
|
22
|
-
}
|
|
1
|
+
var powermap = {
|
|
23
2
|
};
|
|
24
3
|
|
|
25
4
|
[
|
|
26
|
-
'
|
|
5
|
+
'=,+=,-=,*=,/=,%=,|=,&=,^=,||=,&&=,??=,<<=,>>=,>>>=,**=,~=,:=,?,:,=>'/* 1 */,
|
|
27
6
|
'&&,||,^^,??'/* 4 */, '&,|,^'/* 5 */,
|
|
28
7
|
'instanceof,in,==,>=,<=,>,<,!=,!==,===,!in,!instanceof'/* 6 */,
|
|
29
8
|
'>>,>>>,<<'/* 7 */, '+,-'/* 8 */, '*,/,%'/* 9 */, '**'/* 10 */,
|
|
30
|
-
'
|
|
9
|
+
'++,--'/* 11 */,
|
|
10
|
+
"typeof,await,yield,new,delete,void,..."/*12*/,
|
|
11
|
+
'!,~'/* 13 */,
|
|
12
|
+
"::,?.,->,."/*14*/,
|
|
31
13
|
].forEach((pp, i) => {
|
|
32
14
|
pp.split(",").forEach(p => {
|
|
33
15
|
powermap[p] = i + 1;
|
|
34
16
|
})
|
|
35
17
|
});
|
|
18
|
+
module.exports = powermap;
|
package/coms/compile/unstruct.js
CHANGED
|
@@ -529,7 +529,7 @@ var _invoke = function (t, getname) {
|
|
|
529
529
|
for (var cx = 0; cx < t.length; cx++) {
|
|
530
530
|
var o = t[cx];
|
|
531
531
|
a: if (o.type === STRAP) {
|
|
532
|
-
if (/^(async|function)/.test(o.text)) while (o && o.
|
|
532
|
+
if (/^(async|function)/.test(o.text)) while (o && !o.brace) o = o.next;
|
|
533
533
|
else if (o.text === 'class') {
|
|
534
534
|
while (o && !o.isClass) o = o.next;
|
|
535
535
|
var n = o.next;
|
|
@@ -541,7 +541,6 @@ var _invoke = function (t, getname) {
|
|
|
541
541
|
continue;
|
|
542
542
|
}
|
|
543
543
|
if (needbreak(o)) {
|
|
544
|
-
|
|
545
544
|
var s = splice(t, bx, cx + 1 - bx);
|
|
546
545
|
if (cx > 0) s.name = [cloneNode(s[0])];
|
|
547
546
|
else s.name = qname;
|
|
@@ -642,8 +641,8 @@ var _invoke = function (t, getname) {
|
|
|
642
641
|
else if (t.length) {
|
|
643
642
|
if (!isAequalA(t)) {
|
|
644
643
|
var t0 = t[0];
|
|
645
|
-
if (t0.type === EXPRESS && /^[\.\[]/.test(t0.text) || t0.type & (STAMP | STRAP) && powermap[t0.text] < powermap.new) {
|
|
646
|
-
t.unshift(...rescan
|
|
644
|
+
if ((t0.type === EXPRESS && /^[\.\[]/.test(t0.text) || t0.type & (STAMP | STRAP) && powermap[t0.text] < powermap.new) && result.length) {
|
|
645
|
+
t.unshift(...rescan`${qname}=${qname}`);
|
|
647
646
|
relink(t);
|
|
648
647
|
}
|
|
649
648
|
t = uncurve(t);
|
|
@@ -784,8 +783,7 @@ var ternary = function (body, getname, ret) {
|
|
|
784
783
|
b = ternary(b, getnextname, true);
|
|
785
784
|
for (var b of b) pushstep(explist, b);
|
|
786
785
|
return b;
|
|
787
|
-
}, true)
|
|
788
|
-
}) return [1, 0]`);
|
|
786
|
+
}, true)}) return [1, 0]`);
|
|
789
787
|
var q = explist[explist.length - 1];
|
|
790
788
|
var qi = explist.length - 1;
|
|
791
789
|
var qe = q[q.length - 1];
|
|
@@ -872,6 +870,7 @@ var ternary = function (body, getname, ret) {
|
|
|
872
870
|
an = q2.name;
|
|
873
871
|
asn = cloneNode(an);
|
|
874
872
|
}
|
|
873
|
+
|
|
875
874
|
for (var e of explist2) pushstep(explist, e);
|
|
876
875
|
eq.text = "=";
|
|
877
876
|
}
|
|
@@ -898,7 +897,7 @@ var isFunctionOnly = function (body) {
|
|
|
898
897
|
var o = body[cx];
|
|
899
898
|
if (!o) return false;
|
|
900
899
|
if (o.type === STRAP) {
|
|
901
|
-
if (/^(async|function)$/.test(o.text)) while (o && o.
|
|
900
|
+
if (/^(async|function)$/.test(o.text)) while (o && !o.brace) o = body[cx++];
|
|
902
901
|
else if (o.text === 'class') {
|
|
903
902
|
while (o && !o.isClass) o = body[cx++];
|
|
904
903
|
while (o && (o.type & (SPACE | COMMENT) || o.isClass)) o = body[cx++];
|
|
@@ -970,6 +969,10 @@ var _express = function (body, getname, ret) {
|
|
|
970
969
|
continue;
|
|
971
970
|
}
|
|
972
971
|
if (o.type & (STRAP | STAMP)) {
|
|
972
|
+
if (o.needle) {
|
|
973
|
+
exps.push(o);
|
|
974
|
+
continue;
|
|
975
|
+
}
|
|
973
976
|
var p = 0;
|
|
974
977
|
if (o.unary) p = powermap["!"];
|
|
975
978
|
else p = powermap[o.text];
|
|
@@ -96,9 +96,9 @@ test("if(1) function a(){}", 'if (false) return [1, 0]; a = function () {}; retu
|
|
|
96
96
|
test("if(1) {function a(){}}", 'if (false) return [1, 0]; a = function () {}; return [1, 0]', true);
|
|
97
97
|
test("if(a) a = 1;function a(){}", "a = function () {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
|
|
98
98
|
test("if(a) a = 1;async function a(){}", "a = async function () {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
|
|
99
|
-
test("if(a) a = 1;async function* a(){}", "a = async function*
|
|
99
|
+
test("if(a) a = 1;async function* a(){}", "a = async function *() {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
|
|
100
100
|
test("if(a) a = 1;class a{}", "a = class {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
|
|
101
|
-
test("if(a) a = 1;function* a(){}", "a = function*
|
|
101
|
+
test("if(a) a = 1;function* a(){}", "a = function *() {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
|
|
102
102
|
test("await new Promise(function(){})", '_ = function () {}; _ = new Promise(_); return [_, 1]', true);
|
|
103
103
|
test(`onerror({ status: xhr.status, response: "Cookie解析异常!", toString: toResponse })`, '_ = { status: xhr.status, response: "Cookie解析异常!", toString: toResponse }; onerror(_)', true);
|
|
104
104
|
test(`if (!/^https\\:\\/\\/|^s\\/\\//.test(url)) console.warn("请使用https访问如下路径:" + url)`, '_ = /^https\\:\\/\\/|^s\\/\\//.test(url); if (_) return [1, 0]; _ = "请使用https访问如下路径:" + url; _ = console.warn(_); return [1, 0]', true);
|
|
@@ -126,7 +126,7 @@ test(`switch(a){default: a;case 1:b;}`, 'if (a === 1) return [2, 0]; return [1,
|
|
|
126
126
|
test("loop:{a=b;if(a) continue loop}", "a = b; if (a) return [0, 0]", true);
|
|
127
127
|
test("if(a)try{}finally{}else a;", 'if (!a) return [4, 0]; return [1, 8];\r\n return [0, 9];\r\n return [1, 9];\r\n return [2, 0];\r\n a; return [1, 0]')
|
|
128
128
|
test("b:while(t){switch(a){case c:break b;}}", 'if (!t) return [1, 0]; if (a === c) return [1, 0]; return [0, 0]');
|
|
129
|
-
test("predef[key[1]](r.slice(key[0].length).trim())", '_ = key[1]; _0 = key[0].length; _0 = r.slice(_0); _0 = _0.trim(); predef[_](_0)');
|
|
129
|
+
test("predef[key[1]](r.slice(key[0].length).trim())", '_ = key[1]; _0 = key[0]; _0 = _0.length; _0 = r.slice(_0); _0 = _0.trim(); predef[_](_0)');
|
|
130
130
|
test("predef[key[1]](r.slice())(r.slice())", '_ = key[1]; _0 = r.slice(); _ = predef[_](_0); _0 = r.slice(); _(_0)');
|
|
131
131
|
test("predef[key[1]][key[2]][key[3]]", '_ = key[1]; _ = predef[_]; _0 = key[2]; _ = _[_0]; _0 = key[3]; _[_0]');
|
|
132
132
|
test("[key[1]][key[2]][key[3]]", '_ = key[1]; _ = [_]; _0 = key[2]; _ = _[_0]; _0 = key[3]; _[_0]');
|