efront 4.10.1 → 4.11.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/i18n.md +1 -1
- package/coms/basic/sortRegister.js +16 -0
- package/coms/basic_/nullish_.js +1 -1
- package/coms/compile/Html.js +5 -1
- package/coms/compile/Javascript.js +101 -63
- package/coms/compile/Javascript_test.js +17 -5
- package/coms/compile/Program.js +202 -76
- package/coms/compile/autoenum.js +5 -0
- package/coms/compile/common.js +82 -44
- package/coms/compile/downLevel.js +132 -51
- package/coms/compile/downLevel_test.js +9 -2
- package/coms/compile/powermap.js +6 -23
- package/coms/compile/rescan.js +4 -2
- package/coms/compile/unstruct.js +8 -5
- package/coms/compile/unstruct_test.js +2 -2
- package/coms/docs/codecolor.js +23 -2
- package/coms/docs/codetext.xht +20 -6
- package/coms/maps/gaode.js +1 -1
- 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 &&
|
|
33
|
+
if (p?.type && (STAMP | EXPRESS) && p.text === '...') {
|
|
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 = {};
|
|
@@ -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
|
}
|
|
@@ -835,16 +857,16 @@ var killspr = function (body, i, _getobjname, killobj) {
|
|
|
835
857
|
splice(body, i++, 0, ...scanner2('["apply"]'));
|
|
836
858
|
var m1 = skipAssignment(m);
|
|
837
859
|
if (index > 0 || m1 && m1.next) {
|
|
838
|
-
var h = splice(o, 2, o.length);
|
|
860
|
+
var h = splice(o, 2, o.length - 2);
|
|
839
861
|
var c = scanner2(`[]`);
|
|
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) {
|
|
@@ -918,9 +940,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
918
940
|
var name = getname_("_");
|
|
919
941
|
var y = scanner2(`for await(var ${name} of)yield ${name}`, innerJs);
|
|
920
942
|
splice(y[2], y[2].length, 0, ...splice(body, i, n - i));
|
|
921
|
-
splice.debug = true;
|
|
922
943
|
splice(body, i - 1, 1, ...y);
|
|
923
|
-
splice.debug = false;
|
|
924
944
|
innerJs.setType(y[1]);
|
|
925
945
|
if (y[1].type === EXPRESS) splice(body, i, 1);
|
|
926
946
|
unforof(y[0], getname_.bind(null, '_'), y.used, deepkill);
|
|
@@ -963,6 +983,14 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
963
983
|
case "async":
|
|
964
984
|
splice(body, i, 1);
|
|
965
985
|
break;
|
|
986
|
+
case "new":
|
|
987
|
+
if (o.next?.needle) {
|
|
988
|
+
o.text = 'undefined';
|
|
989
|
+
o = o.next;
|
|
990
|
+
var e = snapExpressFoot(o).next;
|
|
991
|
+
splice2(o.queue, o, e);
|
|
992
|
+
break;
|
|
993
|
+
}
|
|
966
994
|
default:
|
|
967
995
|
i++;
|
|
968
996
|
}
|
|
@@ -982,6 +1010,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
|
|
|
982
1010
|
}
|
|
983
1011
|
else if (o.entry === '[') {
|
|
984
1012
|
var a = snapExpressHead(o);
|
|
1013
|
+
|
|
985
1014
|
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
1015
|
i = killdec(body, i, _getdeepname, '', deepkill);
|
|
987
1016
|
}
|
|
@@ -1258,6 +1287,12 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1258
1287
|
var namemap = Object.create(null);
|
|
1259
1288
|
while (o) {
|
|
1260
1289
|
var aname = null;
|
|
1290
|
+
var is3darg = false;
|
|
1291
|
+
var a = o;
|
|
1292
|
+
if (o.type === STAMP && o.text === '...') {
|
|
1293
|
+
o = o.next;
|
|
1294
|
+
is3darg = true;
|
|
1295
|
+
}
|
|
1261
1296
|
if (o.type === SCOPED) {
|
|
1262
1297
|
aname = _getname(head.length > 1 ? 'arg' + index : 'arg');
|
|
1263
1298
|
var dec = splice2(head, o, o = o.next, { type: EXPRESS, text: aname });
|
|
@@ -1266,10 +1301,11 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1266
1301
|
else argcodes.push(`var ` + dec);
|
|
1267
1302
|
}
|
|
1268
1303
|
else if (o.type & (EXPRESS | VALUE)) {
|
|
1304
|
+
if (!is3darg) is3darg = is3dots(o);
|
|
1269
1305
|
aname = o.text;
|
|
1270
|
-
if (
|
|
1306
|
+
if (is3darg) {
|
|
1271
1307
|
cname = aname.replace(/^\.\.\./, '');
|
|
1272
|
-
splice2(head,
|
|
1308
|
+
splice2(head, a.prev || a, o = skipAssignment(o));
|
|
1273
1309
|
collect = index + 1;
|
|
1274
1310
|
}
|
|
1275
1311
|
else {
|
|
@@ -1280,7 +1316,13 @@ var killarg = function (head, body, _getname, setarg = true) {
|
|
|
1280
1316
|
index++;
|
|
1281
1317
|
}
|
|
1282
1318
|
}
|
|
1283
|
-
else
|
|
1319
|
+
else if (is3darg) {
|
|
1320
|
+
splice2(head, a.prev || a, o = skipAssignment(o));
|
|
1321
|
+
aname = '...';
|
|
1322
|
+
cname = '';
|
|
1323
|
+
collect = index + 1;
|
|
1324
|
+
}
|
|
1325
|
+
else throw i18n`参数声明异常!`;
|
|
1284
1326
|
if (o && o.type === STAMP) {
|
|
1285
1327
|
if (o.text === ',') {
|
|
1286
1328
|
o = o.next; continue;
|
|
@@ -1443,6 +1485,27 @@ var killret = function (body, labels = Object.create(null), gettmpname) {
|
|
|
1443
1485
|
}
|
|
1444
1486
|
return breakmap;
|
|
1445
1487
|
}
|
|
1488
|
+
var puncLeft = function (o) {
|
|
1489
|
+
var s = snapExpressHead(o.prev);
|
|
1490
|
+
var p = Infinity;
|
|
1491
|
+
while (o && o.prev) {
|
|
1492
|
+
if (o.type !== STAMP || !(o.text in powermap) || powermap[o.text] < p) return s;
|
|
1493
|
+
s = snapExpressHead(o.prev);
|
|
1494
|
+
o = s.prev;
|
|
1495
|
+
}
|
|
1496
|
+
return s;
|
|
1497
|
+
}
|
|
1498
|
+
var puncRight = function (o) {
|
|
1499
|
+
var s = snapExpressFoot(o.next);
|
|
1500
|
+
var p = 0;
|
|
1501
|
+
while (o && o.next) {
|
|
1502
|
+
if (o.type !== STAMP || !(o.text in powermap) || powermap[o.text] <= p) return s;
|
|
1503
|
+
s = snapExpressFoot(o.next);
|
|
1504
|
+
o = s.next;
|
|
1505
|
+
}
|
|
1506
|
+
return s;
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1446
1509
|
|
|
1447
1510
|
var newpunc = function (body, i, newname) {
|
|
1448
1511
|
var o = body[i];
|
|
@@ -1465,29 +1528,44 @@ var newpunc = function (body, i, newname) {
|
|
|
1465
1528
|
if (!h) return;
|
|
1466
1529
|
var rt = h.type === EXPRESS && h.text;
|
|
1467
1530
|
var p = o.prev;
|
|
1531
|
+
var done = false;
|
|
1468
1532
|
var hi = body.lastIndexOf(h, i);
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
if (canbeTemp(p)) {
|
|
1476
|
-
var name = p.first.text;
|
|
1533
|
+
var pp = p?.prev;
|
|
1534
|
+
if (h === p) {
|
|
1535
|
+
if (h.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
|
|
1536
|
+
splice(sentence, 0, 0, ...scanner2(rt + punc));
|
|
1537
|
+
hi = i;
|
|
1538
|
+
done = true;
|
|
1477
1539
|
}
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1540
|
+
}
|
|
1541
|
+
else if (h === pp) {
|
|
1542
|
+
if (p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
|
|
1543
|
+
if (canbeTemp(p)) {
|
|
1544
|
+
var name = p.first.text;
|
|
1545
|
+
}
|
|
1546
|
+
else {
|
|
1547
|
+
var name = newname();
|
|
1548
|
+
splice(p, 0, 0, ...scanner2(`${name}=`));
|
|
1549
|
+
}
|
|
1550
|
+
splice(sentence, 0, 0, ...scanner2(`${rt}[${name}]` + punc));
|
|
1551
|
+
hi = i;
|
|
1552
|
+
done = true;
|
|
1481
1553
|
}
|
|
1482
|
-
splice(sentence, 0, 0, ...scanner2(`${rt}[${name}]` + punc));
|
|
1483
|
-
hi = i;
|
|
1484
1554
|
}
|
|
1485
|
-
else {
|
|
1555
|
+
else if (h === pp.prev) {
|
|
1556
|
+
var ppp = pp.prev;
|
|
1557
|
+
if (pp.text === '.' && p.type === EXPRESS && ppp.type === EXPRESS && !/[\.\[]/.test(p.text) && !/[\.\[]/.test(ppp.text)) {
|
|
1558
|
+
splice(sentence, 0, 0, ...scanner2(`${ppp.text}.${pp.text}+${punc}`));
|
|
1559
|
+
hi = i;
|
|
1560
|
+
done = true;
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
if (!done) {
|
|
1486
1564
|
var n = null;
|
|
1487
1565
|
var name = newname();
|
|
1488
1566
|
var pt = p.type === EXPRESS && p.text;
|
|
1489
1567
|
var hp = h.prev;
|
|
1490
|
-
splice(body, i
|
|
1568
|
+
splice(body, i -= 1, 1);
|
|
1491
1569
|
if (p.type === EXPRESS && (n = /^(?:[\s\S]*[^\.])?(\.[^\.]*|\[[^\]]*\])$/.exec(pt))) {
|
|
1492
1570
|
var n = n[1];
|
|
1493
1571
|
p.text = pt.slice(0, pt.length - n.length);
|
|
@@ -1501,14 +1579,17 @@ var newpunc = function (body, i, newname) {
|
|
|
1501
1579
|
var name2 = newname();
|
|
1502
1580
|
splice(p, 0, 0, ...scanner2(`${name2}=`));
|
|
1503
1581
|
}
|
|
1504
|
-
splice(body, i
|
|
1582
|
+
splice(body, i -= 1, 1);
|
|
1505
1583
|
splice(sentence, 0, 0, ...scanner2(`,${name}`), p, ...scanner2(`=${name}[${name2}]${punc}`));
|
|
1506
1584
|
p = p.prev;
|
|
1507
1585
|
}
|
|
1508
1586
|
else {
|
|
1509
1587
|
var n = p.text.replace(/^\./, '');
|
|
1510
1588
|
var pp = p.prev;
|
|
1511
|
-
if (
|
|
1589
|
+
if (n === p.text) {
|
|
1590
|
+
if (pp.text === '.') pp = pp.prev, splice(body, i -= 2, 2);
|
|
1591
|
+
else if (pp.type & EXPRESS) pp.text = pp.text.replace(/\.$/, ''), splice(body, i -= 1, 1);
|
|
1592
|
+
}
|
|
1512
1593
|
splice(sentence, 0, 0, ...scanner2(`,${name}.${n}=${name}.${n}${punc}`));
|
|
1513
1594
|
}
|
|
1514
1595
|
splice(sentence, 0, 0, ...scanner2(`${name}=`), ...splice(body, hi, i));
|
|
@@ -1524,8 +1605,8 @@ var newpunc = function (body, i, newname) {
|
|
|
1524
1605
|
else {
|
|
1525
1606
|
hi = i;
|
|
1526
1607
|
if (/^(\?\?|\*\*)$/.test(t)) {
|
|
1527
|
-
var l =
|
|
1528
|
-
var r =
|
|
1608
|
+
var l = puncLeft(o);
|
|
1609
|
+
var r = puncRight(o);
|
|
1529
1610
|
var li = body.lastIndexOf(l, i);
|
|
1530
1611
|
var ri = body.indexOf(r, i);
|
|
1531
1612
|
var name = t === '??' ? 'nullish_' : "power_";
|
|
@@ -430,9 +430,16 @@ function () {
|
|
|
430
430
|
_0 = a; return [_0, 1]
|
|
431
431
|
})
|
|
432
432
|
var a, _0 }`)
|
|
433
|
-
|
|
434
433
|
assert(downLevel(`function(a=b=>b,c){c}`), 'function (a, c) { if (a === undefined) a = function (b) { return b }; c }')
|
|
435
434
|
assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `Object.defineProperty(dis, f.key, (_ = {},
|
|
436
435
|
_.get = function () {},
|
|
437
436
|
_.set = function (v) {}, _))
|
|
438
|
-
var _`)
|
|
437
|
+
var _`);
|
|
438
|
+
downLevel.debug = true; i++;
|
|
439
|
+
assert(downLevel(`var restq = splice(queue, i, i2 - i, ...a[1], { type: STAMP, text: "=" });`), `var slice_ = Array["prototype"]["slice"];
|
|
440
|
+
var restq = splice["apply"](null, [queue, i, i2 - i]["concat"](slice_["call"](a[1]), [{ type: STAMP, text: "=" }]));`)
|
|
441
|
+
var c = scanner2(`\r\n if (search.length) return null;\r\n return path.join(...pathlist);\r\n`);
|
|
442
|
+
c.fix();
|
|
443
|
+
c.break();
|
|
444
|
+
assert(c.toString(), `\r\n if (search["length"]) return null;\r\n return path["join"](...pathlist);\r\n`)
|
|
445
|
+
assert(downLevel.code(c).toString(), `\r\n if (search["length"]) return null;\r\n return path["join"]["apply"](path, pathlist);\r\n`);
|
package/coms/compile/powermap.js
CHANGED
|
@@ -1,25 +1,4 @@
|
|
|
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
|
[
|
|
@@ -27,9 +6,13 @@ var powermap = new class {
|
|
|
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/rescan.js
CHANGED
|
@@ -24,10 +24,12 @@ function rescan(strs, ...args) {
|
|
|
24
24
|
var dist = [];
|
|
25
25
|
var i = 0;
|
|
26
26
|
for (var s of strs) {
|
|
27
|
-
dist.push(s, '
|
|
27
|
+
if (s) dist.push(s, ' ');
|
|
28
|
+
dist.push('#\\' + i++, " ");
|
|
28
29
|
}
|
|
30
|
+
dist.pop();
|
|
29
31
|
if (i > args.length) dist.pop();
|
|
30
|
-
dist = scanner2(dist.join('
|
|
32
|
+
dist = scanner2(dist.join(''));
|
|
31
33
|
patchObject(dist, args);
|
|
32
34
|
return dist;
|
|
33
35
|
}
|
package/coms/compile/unstruct.js
CHANGED
|
@@ -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
|
}
|
|
@@ -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);
|
package/coms/docs/codecolor.js
CHANGED
|
@@ -10,6 +10,26 @@ var codecolor = function (c, encode) {
|
|
|
10
10
|
var envs = c.envs;
|
|
11
11
|
var deep = 0;
|
|
12
12
|
var used = c.used;
|
|
13
|
+
var scoped = c.scoped;
|
|
14
|
+
var setdefs = function (scoped) {
|
|
15
|
+
var { used } = scoped;
|
|
16
|
+
for (var k in used) {
|
|
17
|
+
var isdef = false;
|
|
18
|
+
for (var o of used[k]) {
|
|
19
|
+
if (o.next?.needle) {
|
|
20
|
+
isdef = true;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (isdef) {
|
|
25
|
+
for (var o of used[k]) {
|
|
26
|
+
o.isdef = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
scoped.forEach(setdefs);
|
|
31
|
+
};
|
|
32
|
+
setdefs(scoped);
|
|
13
33
|
var isConstValue = () => false;
|
|
14
34
|
if (c.program) {
|
|
15
35
|
var { strap_reg, value_reg } = c.program;
|
|
@@ -19,6 +39,7 @@ var codecolor = function (c, encode) {
|
|
|
19
39
|
var o = o.next;
|
|
20
40
|
if (o?.type === EXPRESS && needhead_reg.test(o.text)) o = o.next;
|
|
21
41
|
if (o?.type === ELEMENT && o.istype) o = o.next;
|
|
42
|
+
if (o?.type === STAMP && o.needle) o = o.next;
|
|
22
43
|
if (o?.type === SCOPED && o.entry === "(") return true;
|
|
23
44
|
return false;
|
|
24
45
|
}
|
|
@@ -30,7 +51,7 @@ var codecolor = function (c, encode) {
|
|
|
30
51
|
}
|
|
31
52
|
var [name] = keys;
|
|
32
53
|
if (/^[\<\?]/.test(name) || !name);
|
|
33
|
-
else if (!o.isprop && isConstValue(name)) name = `<strap>${name}</strap>`;
|
|
54
|
+
else if (!o.isprop && o.text !== name && isConstValue(name)) name = `<strap>${name}</strap>`;
|
|
34
55
|
else name = `<${label}>${name}</${label}>`;
|
|
35
56
|
keys[0] = name;
|
|
36
57
|
o.text = keys.map(k => /^[\<\?]/.test(k) || !k ? k : `<express>${k}</express>`).join(".");
|
|
@@ -113,7 +134,7 @@ var codecolor = function (c, encode) {
|
|
|
113
134
|
|
|
114
135
|
break;
|
|
115
136
|
case EXPRESS:
|
|
116
|
-
setExpress(o, o.istype ? 'predef' : 'express');
|
|
137
|
+
setExpress(o, o.istype || o.isdef || o.next?.needle ? 'predef' : 'express');
|
|
117
138
|
break;
|
|
118
139
|
case STRAP:
|
|
119
140
|
if (control_reg?.test(text)) o.text = `<flow>${o.text}</flow>`;
|
package/coms/docs/codetext.xht
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
font-family: Consolas, "Courier New", monospace;
|
|
12
12
|
vertical-align: top;
|
|
13
13
|
text-decoration-line: none;
|
|
14
|
+
tab-size: 4;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
stamp {
|
|
@@ -124,7 +125,11 @@
|
|
|
124
125
|
"step", "smoothstep",
|
|
125
126
|
"mix", "clamp"
|
|
126
127
|
);
|
|
127
|
-
var
|
|
128
|
+
var rust = new compile$Javascript;
|
|
129
|
+
rust.powermap = Object.assign({}, rust.powermap);
|
|
130
|
+
rust.powermap["->"] = 0;
|
|
131
|
+
rust.straps = ["let", 'use', 'mut', 'fn', 'if', 'else', 'loop', 'while', 'for', 'in', 'break', 'true', 'false', 'struct', 'enum', 'impl', 'self', 'match', 'pub', 'mod', 'trait'];
|
|
132
|
+
var struct_reg = /^(while|do|for|with|switch|case|default|if|else|try|catch|finally|loop|import|export)$/;
|
|
128
133
|
|
|
129
134
|
gl.setType = function (o) {
|
|
130
135
|
var { type } = o;
|
|
@@ -160,6 +165,11 @@
|
|
|
160
165
|
codecolor(c, encode);
|
|
161
166
|
return c.toString();
|
|
162
167
|
},
|
|
168
|
+
rs(a) {
|
|
169
|
+
var c = compile$scanner2(a, rust);
|
|
170
|
+
codecolor(c, encode);
|
|
171
|
+
return c.toString();
|
|
172
|
+
},
|
|
163
173
|
glsl(a) {
|
|
164
174
|
var c = compile$scanner2(a, gl);
|
|
165
175
|
codecolor(c, encode);
|
|
@@ -200,7 +210,7 @@
|
|
|
200
210
|
};
|
|
201
211
|
codesupports.gl = codesupports.glsl;
|
|
202
212
|
codesupports.cmd = codesupports.bat;
|
|
203
|
-
codesupports.jsx = codesupports.js = codesupports.javascript;
|
|
213
|
+
codesupports.cjs = codesupports.mjs = codesupports.jsx = codesupports.js = codesupports.javascript;
|
|
204
214
|
codesupports.tsx = codesupports.ts = codesupports.typescript;
|
|
205
215
|
codesupports.jsp = codesupports.asp = codesupports.php = codesupports.xml = codesupports.html;
|
|
206
216
|
var { SCOPED, QUOTED, SPACE, STRAP, EXPRESS, PROPERTY } = compile$common;
|
|
@@ -271,14 +281,18 @@
|
|
|
271
281
|
}
|
|
272
282
|
else text = encode(text);
|
|
273
283
|
var codes = text.split(/\r\n|\r|\n/);
|
|
274
|
-
var minSpace =
|
|
284
|
+
var minSpace = Infinity;
|
|
275
285
|
for (var c of codes) {
|
|
276
|
-
var m = /^\s
|
|
277
|
-
if (m
|
|
286
|
+
var m = /^\s+/.exec(c);
|
|
287
|
+
if (!m) {
|
|
288
|
+
minSpace = 0;
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
if (m[0].length < minSpace) {
|
|
278
292
|
minSpace = m[0].length;
|
|
279
293
|
}
|
|
280
294
|
}
|
|
281
|
-
if (minSpace > 0) codes = codes.map(c => /^\s+/.test(c) ? c.slice(minSpace) : c);
|
|
295
|
+
if (minSpace > 0 && minSpace < Infinity) codes = codes.map(c => /^\s+/.test(c) ? c.slice(minSpace) : c);
|
|
282
296
|
return codes;
|
|
283
297
|
}
|
|
284
298
|
function codetext(type, text, blink) {
|
package/coms/maps/gaode.js
CHANGED