efront 4.10.1 → 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/sortRegister.js +16 -0
- package/coms/basic_/nullish_.js +1 -1
- package/coms/compile/Html.js +5 -1
- package/coms/compile/Javascript.js +68 -55
- package/coms/compile/Javascript_test.js +7 -5
- package/coms/compile/Program.js +200 -76
- package/coms/compile/autoenum.js +5 -0
- package/coms/compile/common.js +81 -47
- package/coms/compile/downLevel.js +131 -48
- package/coms/compile/downLevel_test.js +8 -2
- package/coms/compile/powermap.js +6 -23
- package/coms/compile/unstruct.js +8 -5
- package/coms/compile/unstruct_test.js +3 -3
- package/coms/docs/codecolor.js +23 -2
- package/coms/docs/codetext.xht +12 -2
- 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 && 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 = {};
|
|
@@ -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
|
}
|
|
@@ -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;
|
|
@@ -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_";
|
|
@@ -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]
|
|
@@ -435,4 +435,10 @@ assert(downLevel(`function(a=b=>b,c){c}`), 'function (a, c) { if (a === undefine
|
|
|
435
435
|
assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `Object.defineProperty(dis, f.key, (_ = {},
|
|
436
436
|
_.get = function () {},
|
|
437
437
|
_.set = function (v) {}, _))
|
|
438
|
-
var _`)
|
|
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 _`);
|
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/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);
|
|
@@ -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]');
|
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;
|
package/coms/maps/gaode.js
CHANGED