efront 4.0.6 → 4.0.8

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.
@@ -982,7 +982,7 @@ var unforof = function (o, getnewname, used) {
982
982
  splice(o, o.length, 0, { type: STAMP, text: ',' });
983
983
  }
984
984
  if (useSimpleLoop) splice(o, o.length, 0, ...scanner2(`${iname}=0,${gname}=${oname}["length"];${iname}<${gname}&&(${createString([p])}=${oname}[${iname}],true);${iname}++`));
985
- else rootenvs.Symbol = true, splice(o, o.length, 0, ...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"]()`));
985
+ else rootenvs.Symbol = true, splice(o, o.length, 0, ...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}=${hasawait ? 'await ' : ''}${gname}["next"]()`));
986
986
  relink(o);
987
987
  };
988
988
  var unarrow = function (body, i, killobj, letname_) {
@@ -188,7 +188,7 @@ assert(downLevel(`function (a,...,c){}`), `function (a, c) { c = arguments["leng
188
188
  assert(downLevel(`(...a) => k`), `var slice_ = Array["prototype"]["slice"];\r\nfunction () { var a = slice_["call"](arguments, 0); return k }`)
189
189
  assert(downLevel(`for await(o of os) noSymbol`), `return async_(
190
190
  function () {
191
- _3 = Symbol["asyncIterator"]; _2 = os[_3]; if (_2) return [1, 0]; _3 = Symbol["iterator"]; _2 = os[_3]; if (_2) return [1, 0]; _3 = Symbol["iterator"]; _2 = Array["prototype"][_3]
191
+ _2 = Symbol["asyncIterator"]; _2 = os[_2]; if (_2) return [1, 0]; _2 = Symbol["iterator"]; _2 = os[_2]; if (_2) return [1, 0]; _2 = Symbol["iterator"]; _2 = Array["prototype"][_2]
192
192
  },
193
193
  function () {
194
194
  _0 = _2; _2 = _0["call"](os); _0 = _2; _2 = _0["next"](); return [_2, 1]
@@ -197,15 +197,18 @@ function (_1) {
197
197
  _2 = _1; _ = _2; return [1, 0]
198
198
  },
199
199
  function () {
200
- _2 = !_["done"]; if (!_2) return [1, 0]; _3 = _["value"]; o = _3; _2 = (true)
200
+ _2 = !_["done"]; if (!_2) return [1, 0]; o = _["value"]; _2 = (true)
201
201
  },
202
202
  function () {
203
- if (!_2) return [1, 0]; noSymbol; _2 = _0["next"](); _ = _2; return [-1, 0]
203
+ if (!_2) return [2, 0]; noSymbol; _2 = _0["next"](); return [_2, 1]
204
+ },
205
+ function (_1) {
206
+ _2 = _1; _ = _2; return [-2, 0]
204
207
  })
205
- var _, _0, _2, _3`)
208
+ var _, _0, _2`)
206
209
  assert(downLevel(`for await(var [o,s] of os) noSymbol`), `return async_(
207
210
  function () {
208
- o; s; _4 = Symbol["asyncIterator"]; _3 = os[_4]; if (_3) return [1, 0]; _4 = Symbol["iterator"]; _3 = os[_4]; if (_3) return [1, 0]; _4 = Symbol["iterator"]; _3 = Array["prototype"][_4]
211
+ o; s; _3 = Symbol["asyncIterator"]; _3 = os[_3]; if (_3) return [1, 0]; _3 = Symbol["iterator"]; _3 = os[_3]; if (_3) return [1, 0]; _3 = Symbol["iterator"]; _3 = Array["prototype"][_3]
209
212
  },
210
213
  function () {
211
214
  _0 = _3; _3 = _0["call"](os); _0 = _3; _3 = _0["next"](); return [_3, 1]
@@ -214,12 +217,15 @@ function (_2) {
214
217
  _3 = _2; _ = _3; return [1, 0]
215
218
  },
216
219
  function () {
217
- _3 = !_["done"]; if (!_3) return [1, 0]; _4 = _["value"]; _1 = _4; _5 = _1[0]; o = _5; _6 = _1[1]; s = _6; _3 = (true)
220
+ _3 = !_["done"]; if (!_3) return [1, 0]; _1 = _["value"]; o = _1[0]; s = _1[1]; _3 = (true)
218
221
  },
219
222
  function () {
220
- if (!_3) return [1, 0]; noSymbol; _3 = _0["next"](); _ = _3; return [-1, 0]
223
+ if (!_3) return [2, 0]; noSymbol; _3 = _0["next"](); return [_3, 1]
224
+ },
225
+ function (_2) {
226
+ _3 = _2; _ = _3; return [-2, 0]
221
227
  })
222
- var o, s, _, _0, _1, _3, _4, _5, _6`)
228
+ var o, s, _, _0, _1, _3`)
223
229
  assert(downLevel(`for(o of os) noSymbol`), `for (_ = 0, _0 = os["length"]; _ < _0 && (o = os[_], true); _++) noSymbol\r\nvar _, _0`)
224
230
  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`)
225
231
  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`)
@@ -245,7 +251,7 @@ function () {
245
251
  _; _0 = 0; _3 = a["length"]; _1 = _3; return [1, 0]
246
252
  },
247
253
  function () {
248
- _3 = _0 < _1; if (!_3) return [1, 0]; _4 = a[_0]; _ = _4; _3 = (true)
254
+ _3 = _0 < _1; if (!_3) return [1, 0]; _ = a[_0]; _3 = (true)
249
255
  },
250
256
  function () {
251
257
  if (!_3) return [2, 0]; return [_, 3]
@@ -253,22 +259,22 @@ if (!_3) return [2, 0]; return [_, 3]
253
259
  function () {
254
260
  _3 = _0++; return [-2, 0]
255
261
  })
256
- var _, _0, _1, _3, _4 }`)
262
+ var _, _0, _1, _3 }`)
257
263
  assert(downLevel(`async function(){}`), `function () { return async_() }`)
258
264
  assert(downLevel(`async function(){for(var a of b){Symbol}}`), `function () { return async_(
259
265
  function () {
260
- 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]
266
+ a; _2 = Symbol["iterator"]; _2 = b[_2]; if (_2) return [1, 0]; _2 = Symbol["asyncIterator"]; _2 = b[_2]; if (_2) return [1, 0]; _2 = Symbol["iterator"]; _2 = Array["prototype"][_2]
261
267
  },
262
268
  function () {
263
269
  _0 = _2; _2 = _0["call"](b); _0 = _2; _2 = _0["next"](); _ = _2; return [1, 0]
264
270
  },
265
271
  function () {
266
- _2 = !_["done"]; if (!_2) return [1, 0]; _3 = _["value"]; a = _3; _2 = (true)
272
+ _2 = !_["done"]; if (!_2) return [1, 0]; a = _["value"]; _2 = (true)
267
273
  },
268
274
  function () {
269
275
  if (!_2) return [1, 0]; Symbol; _2 = _0["next"](); _ = _2; return [-1, 0]
270
276
  })
271
- var a, _, _0, _2, _3 }`)
277
+ var a, _, _0, _2 }`)
272
278
  assert(downLevel(`a={async a(){var b =c;return 1}}`), `a = (_ = {},
273
279
  _.a = function () { return async_(\r\nfunction () {\r\nb = c; return [1, 2]\r\n})\r\nvar b }, _)\r\nvar _`)
274
280
  assert(downLevel(`async function(){return 1}`), `function () { return async_(\r\nfunction () {\r\nreturn [1, 2]\r\n}) }`)
@@ -466,6 +466,19 @@ var _invoke = function (t, getname) {
466
466
  var _nameindex = nameindex;
467
467
  remove_end_comma(o);
468
468
  var iseval = isEvalScope(o);
469
+ var constStart = 0;
470
+ if (!iseval) {
471
+ for (var cy = 0; cy < o.length; cy++) {
472
+ while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
473
+ var ay = cy;
474
+ cy = skipAssignment(o, cy);
475
+ var m = o[ay];
476
+ if (cy === ay + 1 && (m.type === EXPRESS && !/[\.\[]/.test(m.text) || m.type === VALUE || m.type === QUOTED && !m.length)) {
477
+ continue;
478
+ }
479
+ constStart = cy + 1;
480
+ }
481
+ }
469
482
  for (var cy = 0; cy < o.length; cy++) {
470
483
  var by = cy;
471
484
  while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
@@ -474,16 +487,17 @@ var _invoke = function (t, getname) {
474
487
  var ey = cy;
475
488
  if (ay === ey || ay >= o.length) continue;
476
489
  var m = o.slice(ay, ey);
477
- if (m.length === 1 && (m[0].type === EXPRESS && !/[\.\[]/.test(m[0].text) || m[0].type === VALUE || m[0].type === QUOTED && !m[0].length)) {
490
+ if (m.length === 1 && (m[0].type === EXPRESS && !/[\.\[]/.test(m[0].text) && ay >= constStart || m[0].type === VALUE || m[0].type === QUOTED && !m[0].length)) {
478
491
  continue;
479
492
  }
480
- var q = toqueue(m, getdeepname, true);
481
- var qe = q[q.length - 1];
482
493
  if (!iseval || m[m.length - 1] === o.last) {
494
+ var q = toqueue(m, getdeepname, 1);
495
+ var qe = q[q.length - 1];
483
496
  splice(o, by, ey - by, { text: qe.name, type: EXPRESS });
484
497
  cy = by + 1;
485
498
  }
486
499
  else {
500
+ var q = toqueue(m, getdeepname, false);
487
501
  while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
488
502
  var c = o[cy];
489
503
  if (c && c.type & STAMP && /^[,;]$/.test(c.text)) cy++;
@@ -618,6 +632,12 @@ var ternary = function (body, getname, ret) {
618
632
  if (!ret && equcount === 1 && canbeOnce(bd)) {
619
633
  res = [bd];
620
634
  }
635
+ else if (ret === 1 && !equcount && canbeOnce(bd)) {
636
+ var name = getname(0);
637
+ var r = [{ type: EXPRESS, text: name }, { type: STAMP, text: '=' }, ...bd]
638
+ r.name = name;
639
+ res = [r];
640
+ }
621
641
  else {
622
642
  res = _express(bd, getname, equalsend > skip || ret);
623
643
  }
@@ -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())", "_ = Symbol.iterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.asyncIterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.iterator; _ = Array.prototype[_];\r\n a = _; _ = a.call(os); a = _; _ = a.next(); b = _; return [1, 0];\r\n _ = !b.done; if (!_) return [1, 0]; _ = b.value; o = _; _ = (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())", "_ = Symbol.iterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.asyncIterator; _ = os[_]; if (_) return [1, 0]; _ = Symbol.iterator; _ = Array.prototype[_];\r\n a = _; _ = a.call(os); a = _; _ = a.next(); b = _; return [1, 0];\r\n _ = !b.done; if (!_) return [1, 0]; o = b.value; _ = (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\r\n else a=1", `a = 0; return [1, 0];\r\n _ = a < 1; if (!_) return [3, 0]; _ = a == 0; if (_) return [2, 0]; return [1, 0];\r\n a = 1; return [1, 0];\r\n _ = a++; return [-2, 0]`, true);
62
62
  test("for(a=0;a<1;a++)if(a==0){continue} else {a=1}", `a = 0; return [1, 0];\r\n _ = a < 1; if (!_) return [3, 0]; _ = a == 0; if (!_) return [1, 0]; return [2, 0];\r\n a = 1; return [1, 0];\r\n _ = a++; return [-2, 0]`, true);
63
63
  test("for(a=0;a<1;a++){if(a==0){a=2;continue} else if(b) {a=1;continue} c=3}", `a = 0; return [1, 0];\r\n _ = a < 1; if (!_) return [4, 0]; _ = a == 0; if (!_) return [1, 0]; a = 2; return [3, 0];\r\n if (!b) return [1, 0]; a = 1; return [2, 0];\r\n c = 3; return [1, 0];\r\n _ = a++; return [-3, 0]`, true);
@@ -93,4 +93,5 @@ test(`a=a+b*c+c*d`, `_ = b * c, _ = a + _, _0 = c * d, _ = _ + _0; a = _`, true)
93
93
  test(`cc.name += "<f test></f>"`, `_ = cc.name + "<f test></f>"; cc.name = _`, true);
94
94
  test("yield a", 'return [a, 3]', true);
95
95
  test("throw a", 'throw a', true);
96
- test("debugger", 'debugger', true);
96
+ test("debugger", 'debugger', true);
97
+ test("a(b,b+=1)", '_ = b; _0 = b + 1; b = _0; a(_, _0)', true);
@@ -8,4 +8,4 @@
8
8
 
9
9
  3.x版本 `efront`拥有自建的语法解析器,不再依赖`esprima`、`esmangle`、`escodegen`,自我编译耗时由原来的10分钟github工作流,逐步减少到2分钟左右。
10
10
 
11
- 4.0版本 不再依赖`typescipt`(近17万行源码)
11
+ 4.0版本 不再依赖`typescipt`(近17万行源码),编译速度再次提升4倍,占用内存减少到原来的1/8,github上自我编译时间也减少到15秒左右。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.0.6",
3
+ "version": "4.0.8",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {