efront 3.38.2 → 4.0.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.
@@ -1,6 +1,6 @@
1
1
  # efront 兼容性说明
2
2
  * `coms/basic_`目录的代码均为非标准实现,如果你要兼容低版本的运行环境,尽量避免使用高级的功能
3
- * 当前的`efront`进行代码降级时用到了`typescript`,所以下文有些问题的描述会误伤`typescript`,不用觉得奇怪。
3
+ * 3.x及以前版本的`efront`进行代码降级时用到了`typescript`,所以下文有些问题的描述会误伤`typescript`,不用觉得奇怪。
4
4
  * 已知在转换成低版本代码后与高级版本有区别的语法如下:
5
5
  1. ```javascript
6
6
  class ... extends Array {...}
@@ -24,7 +24,7 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj) {
24
24
  var dp = 0;
25
25
  if (typeof k === 'number' && k < 0) {
26
26
  dp = 1;
27
- k = `${tmpname}.length>${doged - k - 1}?${tmpname}[${tmpname}.length - ${-k}]:undefined`;
27
+ k = `${tmpname}["length"]>${doged - k - 1}?${tmpname}[${tmpname}["length"] - ${-k}]:undefined`;
28
28
  } else {
29
29
  k = tmpname + k;
30
30
  }
@@ -123,12 +123,12 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj) {
123
123
  map[a] = a;
124
124
  });
125
125
  d.attributes.forEach(dec);
126
- write(name, `rest_(${tmpname},[${Object.keys(map)}])`, false);
126
+ write(name, `rest_(${tmpname},[${Object.keys(map)}])`, false), rootenvs.rest_ = true;
127
127
  }
128
128
  else {
129
129
  doged = at + 1;
130
130
  head.forEach(dec);
131
- write(name, `Array.prototype.slice.call(${tmpname},${at}${a > at ? `,${at - a}` : ''})`, rest.length > 0);
131
+ write(name, `slice_["call"](${tmpname},${at}${a > at ? `,${at - a}` : ''})`, rest.length > 0), rootenvs.slice_ = true;
132
132
  doged = at + 1;
133
133
  total = rest.length;
134
134
  rest.forEach(dec);
@@ -245,7 +245,7 @@ var killmap = function (body, i, _getobjname, killobj) {
245
245
  s = m, p = m.prev;
246
246
  if (m.type === EXPRESS) break;
247
247
  while (m && (m.type === STRAP || m.type === STAMP)) m = m.next;
248
- if (!m || m.isprop && (m.type === SCOPED || m.type === PROPERTY && /\[/.test(m.text) || m.short || m.next && m.next.type === SCOPED)) {
248
+ if (!m || m.type & (PROPERTY | QUOTED | EXPRESS) && /^\[/.test(m.text) || m.isprop && (m.type === SCOPED || m.short || m.next && m.next.type === SCOPED)) {
249
249
  break;
250
250
  }
251
251
  m = m.next;
@@ -425,10 +425,12 @@ var setprop = function (prop, k, d, q) {
425
425
  else pe = null;
426
426
  }
427
427
  if (!d[prop.name]) {
428
- let tmp = scanner2(`\r\nObject.defineProperty(${k},${prop.name},{})`);
428
+ let tmp = scanner2(`\r\nObject["defineProperty"](${k},${prop.name},{})`);
429
429
  insert1(q, null, ...tmp);
430
430
  if (pe) insert1(q, null, pe);
431
- d[prop.name] = tmp[tmp.length - 1][4];
431
+ tmp = tmp[tmp.length - 1];
432
+ tmp = tmp[tmp.length - 1];
433
+ d[prop.name] = tmp;
432
434
  }
433
435
  if (d[prop.name].length) insert1(d[prop.name], null, { type: STAMP, text: ',' });
434
436
  insert1(d[prop.name], null, { type: PROPERTY, text: prop.get ? "get" : "set" });
@@ -489,7 +491,7 @@ var killcls = function (body, i, getname_) {
489
491
  while (m) {
490
492
  var [prop, m] = getprop(o, m);
491
493
  if (!prop.value.length) prop.value = scanner2('undefined;');
492
- var k = prop.static ? clz.name : `${clz.name}.prototype`;
494
+ var k = prop.static ? clz.name : `${clz.name}["prototype"]`;
493
495
  var d = prop.static ? static_ : define_;
494
496
  if (prop.get || prop.set || prop.static) {
495
497
  setprop(prop, k, d, defines);
@@ -518,16 +520,16 @@ var killcls = function (body, i, getname_) {
518
520
  if (cs.used.this) rename(cs.used, 'this', newt);
519
521
  var inited = false;
520
522
  assign.forEach(o => {
521
- if (o.type === EXPRESS) o.text = o.text.replace(/^this\./g, newt);
523
+ if (o.type === EXPRESS) o.text = o.text.replace(/^this([\[\.]|$)/g, newt + "$1");
522
524
  });
523
525
  if (cs.used.super) {
524
526
  cs.used.super.forEach(o => {
525
527
  if (o.text !== 'super') return;
526
528
  var n = o.next;
527
529
  if (!n || n.type !== SCOPED || n.entry !== "(") return;
528
- o.text = base + '.call';
530
+ o.text = base + '["call"]';
529
531
  if (!inited) {
530
- insert1(o.queue, o, ...assign);
532
+ insert1(o.queue, skipAssignment(o), ...assign);
531
533
  }
532
534
  inited = true;
533
535
  insert1(o.queue, o, ...scanner2(`var ${newt}=`));
@@ -539,11 +541,11 @@ var killcls = function (body, i, getname_) {
539
541
  if (scoped.used.super) {
540
542
  scoped.used.super.forEach(o => {
541
543
  if (!/^super(\.|\[|$)/.test(o.text)) return;
542
- o.text = `${base}.prototype` + o.text.replace(/^super/, '');
543
- insert1(o.queue, o.next, ...scanner2('.bind(this)'));
544
+ o.text = `${base}["prototype"]` + o.text.replace(/^super/, '');
545
+ insert1(o.queue, o.next, ...scanner2('["bind"](this)'));
544
546
  })
545
547
  }
546
- if (!inited) constructor[1].unshift(...scanner2(`\r\nvar ${newt}=${base}.apply(this,arguments)||this;\r\n`), ...assign);
548
+ if (!inited) constructor[1].unshift(...scanner2(`\r\nvar ${newt}=${base}["apply"](this,arguments)||this;\r\n`), ...assign);
547
549
  }
548
550
  else {
549
551
  constructor[1].unshift(...assign);
@@ -582,7 +584,7 @@ var indexof = function (list, o, i) {
582
584
  return i;
583
585
  };
584
586
  // 数组或参数展开
585
- var killspr = function (body, i, _getobjname, setsolid, killobj) {
587
+ var killspr = function (body, i, _getobjname, killobj) {
586
588
  var o = body[i];
587
589
  var m = o.first;
588
590
  if (!m) return i + 1;
@@ -592,12 +594,12 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
592
594
  var s = m;
593
595
  s.text = s.text.replace(/^\.\.\./, '');
594
596
  m = skipAssignment(m);
595
- var q = scanner2(`Array.prototype.slice.call()`);
597
+ var q = scanner2(`slice_["call"]()`);
598
+ rootenvs.slice_ = true;
596
599
  var v = splice2(o, s, m);
597
600
  if (m) splice2(o, m, m = m.next);
598
601
  killobj(v);
599
- insert1(q[1], null, ...v);
600
- setsolid(q, q[0]);
602
+ insert1(q[q.length - 1], null, ...v);
601
603
  return q;
602
604
  };
603
605
  var killnext = function (m) {
@@ -613,11 +615,12 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
613
615
  index++;
614
616
  }
615
617
  if (!m) return i + 1;
616
- var c = scanner2('.concat()');
618
+ var c = scanner2('["concat"]()');
617
619
  var next = o.next;
618
620
  if (o.entry === '(') {
619
621
  var r = snapExpressHead(o);
620
622
  var rt = r.type === EXPRESS && r.text.replace(/^\.\.\./, '');
623
+ var p = o.prev;
621
624
  if (r === o);
622
625
  else if (
623
626
  r === o.prev && r.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
@@ -625,8 +628,12 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
625
628
  var n = /\.|\[/.test(rt) ? rt.replace(/\.[^\.]*|\[[^\]]*\]$/, '') : "null";
626
629
  splice(o, 0, 0, ...scanner2(n + ","));
627
630
  }
631
+ else if (p && r === p.prev && p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
632
+ splice(o, 0, 0, ...scanner2(rt + ","));
633
+ p = r;
634
+ }
628
635
  else {
629
- var p = o.prev, n = null, hasdot = false;
636
+ var n = null, hasdot = false;
630
637
  var pt = p.type === EXPRESS && p.text.replace(/^\.\.\./, '');
631
638
  if (p.type === EXPRESS && (n = /^(?:[\s\S]*[^\.])?(\.[^\.]*|\[[^\]]*\])$/.exec(pt))) {
632
639
  hasdot = p.text.length !== pt.length;
@@ -652,7 +659,7 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
652
659
  if (cx >= 0) splice(h1, cx, 1);
653
660
  }
654
661
  }
655
- splice(body, i++, 0, ...scanner2('.apply'));
662
+ splice(body, i++, 0, ...scanner2('["apply"]'));
656
663
  var m1 = skipAssignment(m);
657
664
  if (index > 0 || m1 && m1.next) {
658
665
  var h = splice(o, 2, o.length);
@@ -696,7 +703,7 @@ var killspr = function (body, i, _getobjname, setsolid, killobj) {
696
703
  return indexof(body, next, i);
697
704
  };
698
705
 
699
- var killobj = function (body, getobjname, getletname, getname_, letname_, setsolid, deep = 0) {
706
+ var killobj = function (body, getobjname, getletname, getname_, letname_, deep = 0) {
700
707
  var i = 0;
701
708
  var _getdeep = function () {
702
709
  deep++;
@@ -712,7 +719,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
712
719
  return getobjname(deep + i);
713
720
  };
714
721
  var deepkill = function (o) {
715
- killobj(o, getobjname, getletname, getname_, letname_, setsolid, deep);
722
+ killobj(o, getobjname, getletname, getname_, letname_, deep);
716
723
  if (o.await_) body.await_ = true;
717
724
  };
718
725
  while (i < body.length) {
@@ -798,7 +805,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
798
805
  i = killdec(body, i, _getdeepname, '', deepkill);
799
806
  }
800
807
  else {
801
- i = killspr(body, i, _getobjname, setsolid, deepkill);
808
+ i = killspr(body, i, _getobjname, deepkill);
802
809
  }
803
810
  continue;
804
811
  }
@@ -808,11 +815,11 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, setsol
808
815
  var p = o.prev;
809
816
  if (p.transive || /^(if|else|while|with|switch)$/.test(p.text)) deepkill(o);
810
817
  }
811
- else if (!o.prev || o.prev.type === STAMP || o.prev.type === STRAP) {
818
+ else if (!o.prev || o.prev.type & (STAMP | STRAP)) {
812
819
  deepkill(o);
813
820
  }
814
821
  else {
815
- i = killspr(body, i, _getobjname, setsolid, deepkill);
822
+ i = killspr(body, i, _getobjname, deepkill);
816
823
  continue;
817
824
  }
818
825
  }
@@ -971,8 +978,8 @@ var unforof = function (o, getnewname, used) {
971
978
  o.push(...mo);
972
979
  o.push({ type: STAMP, text: ',' });
973
980
  }
974
- if (useSimpleLoop) o.push(...scanner2(`${iname}=0,${gname}=${oname}.length;${iname}<${gname}&&(${createString([p])}=${oname}[${iname}],true);${iname}++`));
975
- else rootenvs.Symbol = true, o.push(...scanner2(`${gname}=${hasawait ? `${oname}[Symbol.asyncIterator]||${oname}[Symbol.iterator]` : `${oname}[Symbol.iterator]||${oname}[Symbol.asyncIterator]`}||Array.prototype[Symbol.iterator],${gname}=${gname}.call(${oname}),${iname}=${hasawait ? "await " : ''}${gname}.next();!${iname}.done&&(${createString([p])}=${iname}.value,true);${iname}=${gname}.next()`));
981
+ if (useSimpleLoop) o.push(...scanner2(`${iname}=0,${gname}=${oname}["length"];${iname}<${gname}&&(${createString([p])}=${oname}[${iname}],true);${iname}++`));
982
+ else rootenvs.Symbol = true, o.push(...scanner2(`${gname}=${hasawait ? `${oname}[Symbol["asyncIterator"]]||${oname}[Symbol["iterator"]]` : `${oname}[Symbol["iterator"]]||${oname}[Symbol["asyncIterator"]]`}||Array["prototype"][Symbol["iterator"]],${gname}=${gname}["call"](${oname}),${iname}=${hasawait ? "await " : ''}${gname}["next"]();!${iname}["done"]&&(${createString([p])}=${iname}["value"],true);${iname}=${gname}["next"]()`));
976
983
  relink(o);
977
984
  };
978
985
  var unarrow = function (body, i, killobj, letname_) {
@@ -993,7 +1000,7 @@ var unarrow = function (body, i, killobj, letname_) {
993
1000
  if (n.type !== SCOPED || n.entry !== "{") {
994
1001
  var nni = skipAssignment(body, ni);
995
1002
  b = scanner2('{}')[0];
996
- b.push({ type: STRAP, text: "return" }, ...body.splice(ni, nni - ni, b));
1003
+ splice(b, 0, 0, { type: STRAP, transive: true, text: "return" }, ...splice(body, ni, nni - ni, b));
997
1004
  killarg(h, b, letname_);
998
1005
  killobj(b);
999
1006
  ni = nni;
@@ -1056,10 +1063,10 @@ var killarg = function (head, body, _getname, setarg = true) {
1056
1063
  argcodes.unshift.apply(argcodes, anames.map((a, i) => {
1057
1064
  if (a === cname) cname = '';
1058
1065
  var n = anames.length - i;
1059
- return `${a}=arguments.length>${collect + n - 1}?arguments[arguments.length - ${n}]:undefined`;
1066
+ return `${a}=arguments["length"]>${collect + n - 1}?arguments[arguments["length"] - ${n}]:undefined`;
1060
1067
  }));
1061
1068
 
1062
- if (cname) argcodes.unshift(`var ${cname}=Array.prototype.slice.call(arguments,${collect}${index > collect ? `,${collect - index}` : ""})`);
1069
+ if (cname) argcodes.unshift(`var ${cname}=slice_["call"](arguments,${collect}${index > collect ? `,${collect - index}` : ""})`), rootenvs.slice_ = true;
1063
1070
  }
1064
1071
  if (argcodes.length && setarg) {
1065
1072
  if (!body) {
@@ -1315,25 +1322,6 @@ var down = function (scoped) {
1315
1322
  scoped.body.unshift.apply(scoped.body, codelist);
1316
1323
  };
1317
1324
 
1318
- var solidmap = {};
1319
- var setsolid = function (q, o) {
1320
- var k = o.text;
1321
- if (!/\.[\s\S]+\./.test(k)) return;
1322
- var c = k.replace(/^[\s\S]*?(\.[^\.]*$)/, '$1');
1323
- k = k.replace(/^([\s\S]*?)\.[^\.]*$/, '$1');
1324
- if (!solidmap[k]) {
1325
- solidmap[k] = [q, o];
1326
- return;
1327
- }
1328
- if (typeof solidmap[k] !== 'string') {
1329
- var n = k.replace(/^[\s\S]*?([^\.]*)$/, "$1");
1330
- n = _getname(n + "_");
1331
- var [q, b] = solidmap[k];
1332
- b.text = `(${n} = ${k})${c}`;
1333
- solidmap[k] = n;
1334
- }
1335
- o.text = solidmap[k] + c;
1336
- };
1337
1325
  var markcodes = [];
1338
1326
  if (scoped.isfunc && scoped.used.this && (funcMark || scoped.insett)) {
1339
1327
  let tn = _getname("this_");
@@ -1349,9 +1337,9 @@ var down = function (scoped) {
1349
1337
  }
1350
1338
  var fordeep = 0;
1351
1339
  var _killobj = function (_getlocal, o) {
1352
- return killobj(o, gettmpname, getletname, _getlocal, _letname, setsolid);
1340
+ return killobj(o, gettmpname, getletname, _getlocal, _letname);
1353
1341
  };
1354
- var kill = function (scoped, _, body) {
1342
+ var kill = function (scoped, _, parentScope) {
1355
1343
  if (scoped.isfunc) return down(scoped);
1356
1344
  killlet(scoped);
1357
1345
  var saveddeep = fordeep;
@@ -1380,6 +1368,7 @@ var down = function (scoped) {
1380
1368
  fordeep = saveddeep;
1381
1369
  };
1382
1370
  if (scoped.isfunc) {
1371
+ if (!scoped.body && scoped.head) scoped.body = scoped.head.next;
1383
1372
  if (scoped.head) var [argsmap, argcodes] = killarg(scoped.head, scoped.body, _letname, false);
1384
1373
  else argcodes = [];
1385
1374
  if ((markcodes.length || argcodes.length) && !funcMark) precode(markcodes.concat(argcodes).join(";") + ";");
@@ -1412,6 +1401,7 @@ var down = function (scoped) {
1412
1401
  scoped.yield = false;
1413
1402
  }
1414
1403
  var vars1 = Object.keys(vars).filter(k => !(k in scoped.vars));
1404
+ scoped.vars = vars;
1415
1405
  if (argsmap) vars1 = vars1.filter(k => !(k in argsmap));
1416
1406
  if (vars1.length && scoped.body) scoped.body.push(...scanner2(`\r\nvar ${vars1}`));
1417
1407
  if (scoped.body) relink(scoped.body);
@@ -1433,6 +1423,10 @@ var downcode = downLevel.code = function (code) {
1433
1423
  rootHyper = rootenvs.Symbol || code.yield || code.async;
1434
1424
  down(code.scoped);
1435
1425
  code.keepcolor = false;
1426
+ if (rootenvs.slice_) {
1427
+ delete rootenvs.slice_;
1428
+ if (!code.vars.slice_) splice(code.scoped.body, 0, 0, ...scanner2('var slice_ = Array["prototype"]["slice"];\r\n'));
1429
+ }
1436
1430
  rootenvs = null;
1437
1431
  return code;
1438
1432
  };
@@ -2,7 +2,7 @@ var downLevel = require("./downLevel");
2
2
  var _asert = assert, i = 10;
3
3
  assert = function (a, b) {
4
4
  var d = 1;
5
- b = b.split(/(?<!\r)\n/), d = b.length, b = b.join("\r\n");
5
+ b = b.split(/(?<!\r)\n/), d = b["length"], b = b["join"]("\r\n");
6
6
  _asert(a, b, i);
7
7
  i += d;
8
8
  }
@@ -54,27 +54,27 @@ assert(downLevel(`function (arg1=b,[c],d,e=f){}`), "function (arg1, arg2, d, e)
54
54
  i++// class降级
55
55
  assert(downLevel(`class a {}`), "function a() {}")
56
56
  assert(downLevel(`class a {a=1}`), "function a() { this.a = 1 }")
57
- assert(downLevel(`class a {a=1; b(){}}`), "function a() { this.a = 1; }; a.prototype.b = function () {}")
58
- assert(downLevel(`=class a {a=1; b(){}}`), "= function (a) { a.prototype.b = function () {}\r\nreturn a }(function a() { this.a = 1; })")
59
- assert(downLevel(`var a=class {a=1; static b=2 b(){}};`), "var a = function (cls0) { cls0.b = 2\r\ncls0.prototype.b = function () {}\r\nreturn cls0 }(function () { this.a = 1; });")
60
- assert(downLevel(`var a=class { constructor(){this.a=1}; static b=2 b(){}};`), "var a = function (cls0) { cls0.b = 2\r\ncls0.prototype.b = function () {}\r\nreturn cls0 }(function () { this.a = 1 });")
57
+ assert(downLevel(`class a {a=1; b(){}}`), `function a() { this.a = 1; }; a["prototype"].b = function () {}`)
58
+ assert(downLevel(`=class a {a=1; b(){}}`), `= function (a) { a["prototype"].b = function () {}\r\nreturn a }(function a() { this.a = 1; })`)
59
+ assert(downLevel(`var a=class {a=1; static b=2 b(){}};`), `var a = function (cls0) { cls0.b = 2\r\ncls0["prototype"].b = function () {}\r\nreturn cls0 }(function () { this.a = 1; });`)
60
+ assert(downLevel(`var a=class { constructor(){this.a=1}; static b=2 b(){}};`), `var a = function (cls0) { cls0.b = 2\r\ncls0["prototype"].b = function () {}\r\nreturn cls0 }(function () { this.a = 1 });`)
61
61
  assert(downLevel(`class a {static b(){}}`), "function a() {}; a.b = function () {}")
62
62
  assert(downLevel(`class a extends b{}`), `function a() {
63
- var this_ = b.apply(this, arguments) || this;
63
+ var this_ = b["apply"](this, arguments) || this;
64
64
  return this_ }; extends_(a, b)`);
65
65
  assert(downLevel(`class a extends class b{}{}`), `var a = function (b, a) { extends_(a, b)\r\nreturn a }(function b() {}, function a() {
66
- var this_ = b.apply(this, arguments) || this;
66
+ var this_ = b["apply"](this, arguments) || this;
67
67
  return this_ })`);
68
68
  assert(downLevel(`class a {get a(){}}`), `function a() {};
69
- Object.defineProperty(a.prototype, "a", { get: function () {} })`);
69
+ Object["defineProperty"](a["prototype"], "a", { get: function () {} })`);
70
70
  assert(downLevel(`class a {set a(){}}`), `function a() {};
71
- Object.defineProperty(a.prototype, "a", { set: function () {} })`);
71
+ Object["defineProperty"](a["prototype"], "a", { set: function () {} })`);
72
72
  assert(downLevel(`class a {get a(){}; get b(){}; set a(){}}`), `function a() {};
73
- Object.defineProperty(a.prototype, "a", { get: function () {}, set: function () {} });
74
- Object.defineProperty(a.prototype, "b", { get: function () {} });`);
73
+ Object["defineProperty"](a["prototype"], "a", { get: function () {}, set: function () {} });
74
+ Object["defineProperty"](a["prototype"], "b", { get: function () {} });`);
75
75
  assert(downLevel(`class a {set a(){}; get b(){}; set a(){}}`), `function a() {};
76
- Object.defineProperty(a.prototype, "a", { set: function () {}, set: function () {} });
77
- Object.defineProperty(a.prototype, "b", { get: function () {} });`);
76
+ Object["defineProperty"](a["prototype"], "a", { set: function () {}, set: function () {} });
77
+ Object["defineProperty"](a["prototype"], "b", { get: function () {} });`);
78
78
  i++// 属性降级
79
79
  assert(downLevel(`return ({b,async a(){}})`), `return ((_ = {},
80
80
  _.b = b,
@@ -132,38 +132,37 @@ assert(downLevel(`={...{},...c,b}`), `= (_ = extend({}, {}, c),
132
132
  _.b = b, _)\r\nvar _`);
133
133
  assert(downLevel(`={a(){},get c(){},b}`), `= (_ = {},
134
134
  _.a = function () {},
135
- Object.defineProperty(_, "c", { get: function () {} }),
135
+ Object["defineProperty"](_, "c", { get: function () {} }),
136
136
  _.b = b, _)\r\nvar _`);
137
- assert(downLevel(`=[...a]`), `= Array.prototype.slice.call(a)`)
138
- assert(downLevel(`let a = [...a,...a()];`), `var a = (slice_ = Array.prototype.slice).call(a).concat(slice_.call(a()));
139
- var slice_`)
140
- assert(downLevel(`=[...a,...b]`), `= (slice_ = Array.prototype.slice).call(a).concat(slice_.call(b))\r\nvar slice_`)
141
- assert(downLevel(`=[a,...b]`), `= [a].concat(Array.prototype.slice.call(b))`)
142
- assert(downLevel(`=[a,...b,...c]`), `= [a].concat((slice_ = Array.prototype.slice).call(b), slice_.call(c))\r\nvar slice_`)
143
- assert(downLevel(`=[a,b,...c]`), `= [a, b].concat(Array.prototype.slice.call(c))`)
144
- assert(downLevel(`=[a,b,...c,d]`), `= [a, b].concat(Array.prototype.slice.call(c), [d])`)
145
- assert(downLevel(`=[a,b,...c,d,e,f]`), `= [a, b].concat(Array.prototype.slice.call(c), [d, e, f])`)
146
- assert(downLevel(`=[a,b,...c,d,e,f,...g]`), `= [a, b].concat((slice_ = Array.prototype.slice).call(c), [d, e, f], slice_.call(g))\r\nvar slice_`)
147
- assert(downLevel(`=[a,b,...c,d,...e]`), `= [a, b].concat((slice_ = Array.prototype.slice).call(c), [d], slice_.call(e))\r\nvar slice_`)
148
- assert(downLevel(`a(...b)`), `a.apply(null, b)`)
149
- assert(downLevel(`a(c,d,e,...b(...c))`), `a.apply(null, [c, d, e].concat(Array.prototype.slice.call(b.apply(null, c))))`)
150
- assert(downLevel(`a(c,d,e,...b.a(...c))`), `a.apply(null, [c, d, e].concat(Array.prototype.slice.call(b.a.apply(b, c))))`)
151
- assert(downLevel(`a(c,d,e,...b.a.c(...c))`), `a.apply(null, [c, d, e].concat(Array.prototype.slice.call((_ = b.a).c.apply(_, c))))\r\nvar _`)
152
- assert(downLevel(`a(...b,...c)`), `a.apply(null, (slice_ = Array.prototype.slice).call(b).concat(slice_.call(c)))\r\nvar slice_`)
153
- assert(downLevel(`a(...b,c)`), `a.apply(null, Array.prototype.slice.call(b).concat([c]))`)
154
- assert(downLevel(`getPendingExpressions()[_push](...flattenCommaList(expr));`), `(_ = getPendingExpressions())[_push].apply(_, flattenCommaList(expr));\r\nvar _`)
155
- assert(downLevel(`a(b,...c)`), `a.apply(null, [b].concat(Array.prototype.slice.call(c)))`)
156
- assert(downLevel(`a(a,b,...c,d,...e)`), `a.apply(null, [a, b].concat((slice_ = Array.prototype.slice).call(c), [d], slice_.call(e)))\r\nvar slice_`)
157
- assert(downLevel(`a.call(a,b,...c,d,...e)`), `a.call.apply(a, [a, b].concat((slice_ = Array.prototype.slice).call(c), [d], slice_.call(e)))\r\nvar slice_`)
158
- assert(downLevel(`a.b(a,b,...c,d,...e)`), `a.b.apply(a, [a, b].concat((slice_ = Array.prototype.slice).call(c), [d], slice_.call(e)))\r\nvar slice_`)
159
- assert(downLevel(`[].b(a,b,...c,d,...e)`), `(_ = []).b.apply(_, [a, b].concat((slice_ = Array.prototype.slice).call(c), [d], slice_.call(e)))\r\nvar _, slice_`)
160
- assert(downLevel(`a(...b).c(...d)`), `(_ = a.apply(null, b)).c.apply(_, d)\r\nvar _`)
161
- assert(downLevel(`a(...b).c(...d).e(...f)`), `(_ = (_ = a.apply(null, b)).c.apply(_, d)).e.apply(_, f)\r\nvar _`)
162
- assert(downLevel(`diagnostic.relatedInformation.push(...relatedInformation);`), `(_ = diagnostic.relatedInformation).push.apply(_, relatedInformation);\r\nvar _`);
163
- assert(downLevel(`const typeNames = [79 /* Identifier */, ...typeKeywords];`), `var typeNames = [79 /* Identifier */].concat(Array.prototype.slice.call(typeKeywords));`);
137
+ assert(downLevel(`=[...a]`), `var slice_ = Array["prototype"]["slice"];\r\n= slice_["call"](a)`)
138
+ assert(downLevel(`let a = [...a,...a()];`), `var slice_ = Array["prototype"]["slice"];\r\nvar a = slice_["call"](a)["concat"](slice_["call"](a()));`)
139
+ assert(downLevel(`=[...a,...b]`), `var slice_ = Array["prototype"]["slice"];\r\n= slice_["call"](a)["concat"](slice_["call"](b))`)
140
+ assert(downLevel(`=[a,...b]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a]["concat"](slice_["call"](b))`)
141
+ assert(downLevel(`=[a,...b,...c]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a]["concat"](slice_["call"](b), slice_["call"](c))`)
142
+ assert(downLevel(`=[a,b,...c]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c))`)
143
+ assert(downLevel(`=[a,b,...c,d]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c), [d])`)
144
+ assert(downLevel(`=[a,b,...c,d,e,f]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c), [d, e, f])`)
145
+ assert(downLevel(`=[a,b,...c,d,e,f,...g]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c), [d, e, f], slice_["call"](g))`)
146
+ assert(downLevel(`=[a,b,...c,d,...e]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c), [d], slice_["call"](e))`)
147
+ assert(downLevel(`a(...b)`), `a["apply"](null, b)`)
148
+ assert(downLevel(`a(c,d,e,...b(...c))`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, [c, d, e]["concat"](slice_["call"](b["apply"](null, c))))`)
149
+ assert(downLevel(`a(c,d,e,...b.a(...c))`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, [c, d, e]["concat"](slice_["call"](b.a["apply"](b, c))))`)
150
+ assert(downLevel(`a(c,d,e,...b.a.c(...c))`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, [c, d, e]["concat"](slice_["call"]((_ = b.a).c["apply"](_, c))))\r\nvar _`)
151
+ assert(downLevel(`a(...b,...c)`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, slice_["call"](b)["concat"](slice_["call"](c)))`)
152
+ assert(downLevel(`a(...b,c)`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, slice_["call"](b)["concat"]([c]))`)
153
+ assert(downLevel(`getPendingExpressions()[_push](...flattenCommaList(expr));`), `(_ = getPendingExpressions())[_push]["apply"](_, flattenCommaList(expr));\r\nvar _`)
154
+ assert(downLevel(`a(b,...c)`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, [b]["concat"](slice_["call"](c)))`)
155
+ assert(downLevel(`a(a,b,...c,d,...e)`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, [a, b]["concat"](slice_["call"](c), [d], slice_["call"](e)))`)
156
+ assert(downLevel(`a["call"](a,b,...c,d,...e)`), `var slice_ = Array["prototype"]["slice"];\r\na["call"]["apply"](a, [a, b]["concat"](slice_["call"](c), [d], slice_["call"](e)))`)
157
+ assert(downLevel(`a.b(a,b,...c,d,...e)`), `var slice_ = Array["prototype"]["slice"];\r\na.b["apply"](a, [a, b]["concat"](slice_["call"](c), [d], slice_["call"](e)))`)
158
+ assert(downLevel(`[].b(a,b,...c,d,...e)`), `var slice_ = Array["prototype"]["slice"];\r\n(_ = []).b["apply"](_, [a, b]["concat"](slice_["call"](c), [d], slice_["call"](e)))\r\nvar _`)
159
+ assert(downLevel(`a(...b).c(...d)`), `(_ = a["apply"](null, b)).c["apply"](_, d)\r\nvar _`)
160
+ assert(downLevel(`a(...b).c(...d).e(...f)`), `(_ = (_ = a["apply"](null, b)).c["apply"](_, d)).e["apply"](_, f)\r\nvar _`)
161
+ assert(downLevel(`diagnostic.relatedInformation.push(...relatedInformation);`), `(_ = diagnostic.relatedInformation).push["apply"](_, relatedInformation);\r\nvar _`);
162
+ assert(downLevel(`const typeNames = [79 /* Identifier */, ...typeKeywords];`), `var slice_ = Array["prototype"]["slice"];\r\nvar typeNames = [79 /* Identifier */]["concat"](slice_["call"](typeKeywords));`);
164
163
  i++// 箭头函数
165
164
  assert(downLevel(`a=>k`), "function (a) { return k }")
166
- assert(downLevel(`function (a,...b,b){}`), "function (a, b) { b = arguments.length > 1 ? arguments[arguments.length - 1] : undefined; }")
165
+ assert(downLevel(`function (a,...b,b){}`), `function (a, b) { b = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
167
166
  assert(downLevel(`(a)=>k`), "function (a) { return k }")
168
167
  assert(downLevel(`(a=1)=>k`), "function (a) { if (a === undefined) a = 1; return k }")
169
168
  assert(downLevel(`([a])=>b`), "function (arg) { var a = arg[0]; return b }")
@@ -171,31 +170,36 @@ assert(downLevel(`map(([a])=>a)`), "map(function (arg) { var a = arg[0]; return
171
170
  assert(downLevel(`var [_, R, G, B, A] = rgbHex.exec(color).map(a => parseInt(a + a, 16));`), "var _0 = rgbHex.exec(color).map(function (a) { return parseInt(a + a, 16) }), _ = _0[0], R = _0[1], G = _0[2], B = _0[3], A = _0[4];")
172
171
  assert(downLevel(`if (/^(?:select|input|textarea)$/i.test(initialEvent.target.tagName) || getTargetIn(a => a.nodrag || a.hasAttribute('nodrag'), initialEvent.target)) return;`), "if (/^(?:select|input|textarea)$/i.test(initialEvent.target.tagName) || getTargetIn(function (a) { return a.nodrag || a.hasAttribute('nodrag') }, initialEvent.target)) return;")
173
172
  i++// 对象收集
174
- assert(downLevel(`function (a,...b){}`), "function (a) { var b = Array.prototype.slice.call(arguments, 1); }")
175
- assert(downLevel(`function (a,...b,c){}`), "function (a, c) { var b = Array.prototype.slice.call(arguments, 1, -1); c = arguments.length > 1 ? arguments[arguments.length - 1] : undefined; }")
176
- assert(downLevel(`function (a,...,c){}`), "function (a, c) { c = arguments.length > 1 ? arguments[arguments.length - 1] : undefined; }")
177
- assert(downLevel(`(...a) => k`), "function () { var a = Array.prototype.slice.call(arguments, 0); return k }")
178
- assert(downLevel(`for(o of os) noSymbol`), "for (_ = 0, _0 = os.length; _ < _0 && (o = os[_], true); _++) noSymbol\r\nvar _, _0")
179
- assert(downLevel(`for(var o of os) Symbol`), "for (var o, _0 = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], _0 = _0.call(os), _ = _0.next(); !_.done && (o = _.value, true); _ = _0.next()) Symbol\r\nvar _, _0")
180
- assert(downLevel(`for(var o of os) Symbol`), "for (var o, _0 = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], _0 = _0.call(os), _ = _0.next(); !_.done && (o = _.value, true); _ = _0.next()) Symbol\r\nvar _, _0")
181
- assert(downLevel(`for(var o of o)Symbol`), "for (var o, _1 = o, _0 = _1[Symbol.iterator] || _1[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], _0 = _0.call(_1), _ = _0.next(); !_.done && (o = _.value, true); _ = _0.next()) Symbol\r\nvar _, _0, _1")
182
- assert(downLevel(`for(var [a] of os)Symbol`), "for (var a, _0 = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], _0 = _0.call(os), _ = _0.next(); !_.done && (a = _.value[0], true); _ = _0.next()) Symbol\r\nvar _, _0")
183
- assert(downLevel(`for(var [a,b] of os)Symbol`), "for (var a, b, _0 = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], _0 = _0.call(os), _ = _0.next(); !_.done && (_1 = _.value, a = _1[0], b = _1[1], true); _ = _0.next()) Symbol\r\nvar _, _0, _1")
184
- assert(downLevel(`[...a]=a`), "a = Array.prototype.slice.call(a, 0)")
185
- assert(downLevel(`[c,...a]=a`), "c = a[0], a = Array.prototype.slice.call(a, 1)")
186
- assert(downLevel(`[...a]=a`), "a = Array.prototype.slice.call(a, 0)")
187
- assert(downLevel(`[...a,c]=a`), "_ = a, a = Array.prototype.slice.call(a, 0, -1), c = _.length > 1 ? _[_.length - 1] : undefined\r\nvar _")
173
+ assert(downLevel(`function (a,...b){}`), `var slice_ = Array["prototype"]["slice"];\r\nfunction (a) { var b = slice_["call"](arguments, 1); }`)
174
+ assert(downLevel(`function (a,...b,c){}`), `var slice_ = Array["prototype"]["slice"];\r\nfunction (a, c) { var b = slice_["call"](arguments, 1, -1); c = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
175
+ assert(downLevel(`function (a,...,c){}`), `function (a, c) { c = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
176
+ assert(downLevel(`(...a) => k`), `var slice_ = Array["prototype"]["slice"];\r\nfunction () { var a = slice_["call"](arguments, 0); return k }`)
177
+ assert(downLevel(`for(o of os) noSymbol`), `for (_ = 0, _0 = os["length"]; _ < _0 && (o = os[_], true); _++) noSymbol\r\nvar _, _0`)
178
+ assert(downLevel(`for(var o of os) Symbol`), `for (var o, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol\r\nvar _, _0`)
179
+ assert(downLevel(`for(var o of os) Symbol`), `for (var o, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol\r\nvar _, _0`)
180
+ assert(downLevel(`for(var o of o)Symbol`), `for (var o, _1 = o, _0 = _1[Symbol["iterator"]] || _1[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](_1), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol\r\nvar _, _0, _1`)
181
+ assert(downLevel(`for(var [a] of os)Symbol`), `for (var a, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (a = _["value"][0], true); _ = _0["next"]()) Symbol\r\nvar _, _0`)
182
+ assert(downLevel(`for(var [a,b] of os)Symbol`), `for (var a, b, _0 = os[Symbol["iterator"]] || os[Symbol["asyncIterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (_1 = _["value"], a = _1[0], b = _1[1], true); _ = _0["next"]()) Symbol\r\nvar _, _0, _1`)
183
+ assert(downLevel(`[...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\na = slice_["call"](a, 0)`)
184
+ assert(downLevel(`[c,...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\nc = a[0], a = slice_["call"](a, 1)`)
185
+ assert(downLevel(`[...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\na = slice_["call"](a, 0)`)
186
+ assert(downLevel(`[...a,c]=a`), `var slice_ = Array["prototype"]["slice"];\r\n_ = a, a = slice_["call"](a, 0, -1), c = _["length"] > 1 ? _[_["length"] - 1] : undefined\r\nvar _`)
188
187
  assert(downLevel(`{...a,c}=a`), `c = a.c, a = rest_(a, ["c"])`)
189
188
  assert(downLevel(`{c,...a}=a`), `c = a.c, a = rest_(a, ["c"])`)
190
189
  assert(downLevel("if(a){}[r, g, b] = rgb4s(r, g, b, s)"), "if (a) {} _ = rgb4s(r, g, b, s), r = _[0], g = _[1], b = _[2]\r\nvar _", true);
191
190
  assert(downLevel(`{c,[c]:b,...a}=a`), `c = a.c, b = a[c], a = rest_(a, ["c", c])`)
191
+ assert(downLevel(`async()=>name = require("./$split")(name)["join"]("/");`), `function () { return async_(
192
+ function () {
193
+ _0 = require("./$split")(name)["join"]("/"); name = _0; return [_0, 2]
194
+ })
195
+ var _0 };`);
192
196
  i++//异步或步进函数
193
197
  assert(downLevel(`function *(){yield *a}`), `function () { return aster_(
194
198
  function () {
195
- _; _0 = 0; _3 = a.length; _1 = _3; return [1, 0]
199
+ _; _0 = 0; _3 = a["length"]; _1 = _3; return [1, 0]
196
200
  },
197
201
  function () {
198
- _3 = _0 < _1; if (!_3) return [1, 0]; _4 = a[_0]; _ = _4; _3 = (_4, true)
202
+ _3 = _0 < _1; if (!_3) return [1, 0]; _4 = a[_0]; _ = _4; _3 = (true)
199
203
  },
200
204
  function () {
201
205
  if (!_3) return [2, 0]; return [_, 3]
@@ -207,16 +211,16 @@ var _, _0, _1, _3, _4 }`)
207
211
  assert(downLevel(`async function(){}`), `function () { return async_() }`)
208
212
  assert(downLevel(`async function(){for(var a of b){Symbol}}`), `function () { return async_(
209
213
  function () {
210
- a; _3 = Symbol.iterator; _2 = b[_3]; if (_2) return [1, 0]; _3 = Symbol.asyncIterator; _2 = b[_3]; if (_2) return [1, 0]; _3 = Symbol.iterator; _2 = Array.prototype[_3]
214
+ a; _3 = Symbol["iterator"]; _2 = b[_3]; if (_2) return [1, 0]; _3 = Symbol["asyncIterator"]; _2 = b[_3]; if (_2) return [1, 0]; _3 = Symbol["iterator"]; _2 = Array["prototype"][_3]
211
215
  },
212
216
  function () {
213
- _0 = _2; _2 = _0.call(b); _0 = _2; _2 = _0.next(); _ = _2; return [1, 0]
217
+ _0 = _2; _2 = _0["call"](b); _0 = _2; _2 = _0["next"](); _ = _2; return [1, 0]
214
218
  },
215
219
  function () {
216
- _2 = !_.done; if (!_2) return [1, 0]; _3 = _.value; a = _3; _2 = (_3, true)
220
+ _2 = !_["done"]; if (!_2) return [1, 0]; _3 = _["value"]; a = _3; _2 = (true)
217
221
  },
218
222
  function () {
219
- if (!_2) return [1, 0]; Symbol; _2 = _0.next(); _ = _2; return [-1, 0]
223
+ if (!_2) return [1, 0]; Symbol; _2 = _0["next"](); _ = _2; return [-1, 0]
220
224
  })
221
225
  var a, _, _0, _2, _3 }`)
222
226
  assert(downLevel(`a={async a(){var b =c;return 1}}`), `a = (_ = {},
@@ -438,6 +438,17 @@ var remove_end_comma = function (o) {
438
438
  o.splice(cx, cx + 1);
439
439
  }
440
440
  };
441
+ var isEvalScope = function (o) {
442
+ if (o.entry === "[") {
443
+ var h = snapExpressHead(o);
444
+ return o !== h;
445
+ }
446
+ else if (o.entry === '(') {
447
+ var h = snapExpressHead(o);
448
+ return o === h;
449
+ }
450
+ return false;
451
+ }
441
452
  var _invoke = function (t, getname) {
442
453
  var nameindex = 0;;
443
454
  var getdeepname = function (deep = 0) {
@@ -464,6 +475,7 @@ var _invoke = function (t, getname) {
464
475
  if (o.type === SCOPED && (o.entry === '[' || o.entry === "(")) {
465
476
  var _nameindex = nameindex;
466
477
  remove_end_comma(o);
478
+ var iseval = isEvalScope(o);
467
479
  for (var cy = 0; cy < o.length; cy++) {
468
480
  if (o[cy].type & (SPACE | COMMENT)) continue;
469
481
  var by = cy;
@@ -477,10 +489,17 @@ var _invoke = function (t, getname) {
477
489
  }
478
490
  var q = toqueue(m, getdeepname, true);
479
491
  var qe = q[q.length - 1];
480
- o.splice(by, cy - by, { text: qe.name, type: EXPRESS });
481
- cy -= cy - by - 1;
482
- nameindex++;
492
+ if (!iseval || m[m.length - 1] === o.last) {
493
+ splice(o, by, cy - by, { text: qe.name, type: EXPRESS });
494
+ cy = by + 1;
495
+ }
496
+ else {
497
+ while (o[cy].type & (SPACE | COMMENT)) cy++;
498
+ splice(o, by, cy - by + 1);
499
+ cy = by;
500
+ }
483
501
  cache.push(...q);
502
+ nameindex++;
484
503
  }
485
504
  nameindex = _nameindex;
486
505
  if (!cache.length) continue;
@@ -665,6 +684,23 @@ var ternary = function (body, getname, ret) {
665
684
  }
666
685
  return explist;
667
686
  };
687
+ var isFunctionOnly = function (body) {
688
+ for (var cx = 2, dx = body.length; cx < dx; cx++) {
689
+ if (body[cx].type & (SPACE | COMMENT)) continue;
690
+ break;
691
+ }
692
+ var o = body[cx];
693
+ if (!o) return false;
694
+ if (o.type === STRAP && o.text === 'function') {
695
+ while (o && o.entry !== "{") o = body[cx++];
696
+ if (!o) return false;
697
+ }
698
+ else return false;
699
+ for (; cx < dx; cx++) {
700
+ if (!(body[cx].type & (SPACE | COMMENT))) return false;
701
+ }
702
+ return true;
703
+ };
668
704
  var canbeOnce = function (body) {
669
705
  for (var cx = 0, dx = body.length; cx < dx; cx++) {
670
706
  if (body[cx].type & (SPACE | COMMENT)) continue;
@@ -825,7 +861,12 @@ var _express = function (body, getname, ret) {
825
861
  }
826
862
  if (needname) q.name = getname(nameindex);
827
863
  relink(q);
828
- result = _invoke(q, getdeepname);
864
+ if (isFunctionOnly(q)) {
865
+ result = [q];
866
+ }
867
+ else {
868
+ result = _invoke(q, getdeepname);
869
+ }
829
870
  if (hasor) result[result.length - 1].ret_ = true;
830
871
  return result;
831
872
  };
@@ -57,7 +57,7 @@ test("if(await a) await b", "_ = a; return [_, 1];\r\n if (!@) return [2, 0]; _
57
57
  test("for(a in b)", "for (a in b)", true);
58
58
  test("for(var a in b) a.push()", "for (var a in b) a.push()", true);
59
59
  test("for(;;)", "return [0, 0]", true);
60
- test("for(a = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], a = a.call(os), b = a.next(); !b.done && (o = b.value, true); b = a.next())", "_0 = Symbol.iterator; _ = os[_0]; if (_) return [1, 0]; _0 = Symbol.asyncIterator; _ = os[_0]; if (_) return [1, 0]; _0 = Symbol.iterator; _ = Array.prototype[_0];\r\n a = _; _ = a.call(os); a = _; _ = a.next(); b = _; return [1, 0];\r\n _ = !b.done; if (!_) return [1, 0]; _0 = b.value; o = _0; _ = (_0, true);\r\n if (!_) return [1, 0]; _ = a.next(); b = _; return [-1, 0]", true);
60
+ test("for(a = os[Symbol.iterator] || os[Symbol.asyncIterator] || Array.prototype[Symbol.iterator], a = a.call(os), b = a.next(); !b.done && (o = b.value, true); b = a.next())", "_0 = Symbol.iterator; _ = os[_0]; if (_) return [1, 0]; _0 = Symbol.asyncIterator; _ = os[_0]; if (_) return [1, 0]; _0 = Symbol.iterator; _ = Array.prototype[_0];\r\n a = _; _ = a.call(os); a = _; _ = a.next(); b = _; return [1, 0];\r\n _ = !b.done; if (!_) return [1, 0]; _0 = b.value; o = _0; _ = (true);\r\n if (!_) return [1, 0]; _ = a.next(); b = _; return [-1, 0]", true);
61
61
  test("for(a=0;a<1;a++)if(a==0)continue", `a = 0; return [1, 0];\r\n _ = a < 1; if (!_) return [2, 0]; _ = a == 0; if (_) return [1, 0]; return [1, 0];\r\n _ = a++; return [-1, 0]`, true);
62
62
  test("for(a=0;a<10;a++) await a", "a = 0; return [1, 0];\r\n _ = a < 10; if (!_) return [2, 0]; _ = a; return [_, 1];\r\n _ = @; _ = a++; return [-1, 0]", true);
63
63
  test("for(a=0;a<10;a++) await a, await b", "a = 0; return [1, 0];\r\n _ = a < 10; if (!_) return [3, 0]; _ = a; return [_, 1];\r\n _ = @; _ = b; return [_, 1];\r\n _ = @; _ = a++; return [-2, 0]", true);
@@ -156,14 +156,14 @@ var formatRows = function (arg, rows, deep, entry, leave) {
156
156
  if (isArray) {
157
157
  for (var cx = 0, dx = rows.length; cx < dx; cx += itemcount) {
158
158
  res.push(rows.slice(cx, cx + itemcount).map((r, i) => {
159
- return Array(maxLength[i] - lens[cx + i] + 1).join(" ") + r;
159
+ return Array(Math.max(maxLength[i] - lens[cx + i], 0)).join(" ") + r;
160
160
  }).join(', '));
161
161
  }
162
162
  }
163
163
  else {
164
164
  for (var cx = 0, dx = rows.length; cx < dx; cx += itemcount) {
165
165
  res.push([rows[cx], ...rows.slice(cx + 1, cx + itemcount).map((r, i) => {
166
- return Array(maxLength[i] - lens[cx + i] + 1).join(" ") + r;
166
+ return Array(Math.max(maxLength[i] - lens[cx + i], 0)).join(" ") + r;
167
167
  })].join(', '));
168
168
  }
169
169
  }