efront 4.20.1 → 4.21.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.
Files changed (48) hide show
  1. package/#/345/233/275/351/231/205/345/214/226.yml +3 -0
  2. package/coms/basic/#loader.js +4 -4
  3. package/coms/basic/ArrayFill.js +1 -5
  4. package/coms/basic/extend.js +1 -17
  5. package/coms/basic/isSubpath.js +2 -0
  6. package/coms/basic_/{Array2.js → &Array.js} +2 -1
  7. package/coms/basic_/&ArrayFill.js +5 -0
  8. package/coms/basic_/{aster_.js → &aster.js} +3 -2
  9. package/coms/basic_/&async.js +5 -0
  10. package/coms/basic_/{asyncAster_.js → &asyncAster.js} +3 -2
  11. package/coms/basic_/&async_test.js +15 -0
  12. package/coms/basic_/{exec_.js → &exec.js} +2 -1
  13. package/coms/basic_/&extend.js +18 -0
  14. package/coms/basic_/{extends_.js → &extends.js} +2 -1
  15. package/coms/basic_/readme-en.md +3 -3
  16. package/coms/basic_/readme.md +3 -3
  17. package/coms/compile/Javascript.js +3 -3
  18. package/coms/compile/Program.js +20 -4
  19. package/coms/compile/common.js +1 -1
  20. package/coms/compile/downLevel.js +20 -20
  21. package/coms/compile/downLevel_test.js +91 -91
  22. package/coms/compile/nametill.js +13 -0
  23. package/coms/compile/polyfill.js +1 -1
  24. package/coms/compile/run-test262.js +8 -8
  25. package/coms/compile/scanner2.js +22 -3
  26. package/coms/compile/unstruct.js +3 -3
  27. package/coms/compile/unstruct_test.js +1 -1
  28. package/coms/compile//347/264/240/351/246/250.js +12 -4
  29. package/coms/compile//347/264/240/351/246/250_test.js +3 -0
  30. package/coms/explorer/fileitem.html +5 -4
  31. package/coms/explorer/fileitem.js +5 -1
  32. package/coms/explorer/fileitem.less +67 -6
  33. package/coms/reptile/colored_console.js +1 -1
  34. package/coms/zimoli/XMLHttpRequest.js +29 -25
  35. package/coms/zimoli/popup.js +2 -1
  36. package/coms/zimoli/render.js +3 -3
  37. package/coms/zimoli/view.js +4 -4
  38. package/package.json +1 -1
  39. package/public/efront.js +1 -1
  40. package/coms/basic_/async_.js +0 -4
  41. package/coms/basic_/async_test.js +0 -11
  42. /package/coms/basic_/{exec_test.js → &exec_test.js} +0 -0
  43. /package/coms/basic_/{nullish_.js → &nullish.js} +0 -0
  44. /package/coms/basic_/{power_.js → &power.js} +0 -0
  45. /package/coms/basic_/{rest_.js → &rest.js} +0 -0
  46. /package/coms/basic_/{restIter_.js → &restIter.js} +0 -0
  47. /package/coms/basic_/{withget_.js → &wget.js} +0 -0
  48. /package/coms/basic_/{with_.js → &with.js} +0 -0
@@ -9,16 +9,16 @@ assert = function (a, b) {
9
9
  var innerJs = new Javascript;
10
10
  innerJs.defaultType = common.STRAP;
11
11
  // 运算符
12
- assert(downLevel(`a??b`), 'nullish_(a, b)', true);
13
- assert(downLevel(`a**b`), 'power_(a, b)', true);
14
- assert(downLevel(`a.c**b`), 'power_(a.c, b)', true);
15
- assert(downLevel(`a??=b`), 'a = nullish_(a, b)', true);
16
- assert(downLevel(`a**=b`), 'a = power_(a, b)', true);
17
- assert(downLevel(`a+=b+c**d`), 'a += b + power_(c, d)', true);
18
- assert(downLevel(`a(c**=d)`), 'a(c = power_(c, d))', true);
19
- assert(downLevel(`a(c.b.d**=d)`), 'a((_ = c.b, _.d = power_(_.d, d)))\r\nvar _', true);
20
- assert(downLevel(`a(c.b[a.b]**=d)`), 'a((_ = c.b, _[_0 = a.b] = power_(_[_0], d)))\r\nvar _, _0', true);
21
- assert(downLevel(`c.b[a.b]**=d`), '_ = c.b, _[_0 = a.b] = power_(_[_0], d)\r\nvar _, _0', true);
12
+ assert(downLevel(`a??b`), '&nullish(a, b)', true);
13
+ assert(downLevel(`a**b`), '&power(a, b)', true);
14
+ assert(downLevel(`a.c**b`), '&power(a.c, b)', true);
15
+ assert(downLevel(`a??=b`), 'a = &nullish(a, b)', true);
16
+ assert(downLevel(`a**=b`), 'a = &power(a, b)', true);
17
+ assert(downLevel(`a+=b+c**d`), 'a += b + &power(c, d)', true);
18
+ assert(downLevel(`a(c**=d)`), 'a(c = &power(c, d))', true);
19
+ assert(downLevel(`a(c.b.d**=d)`), 'a((_ = c.b, _.d = &power(_.d, d)))\r\nvar _', true);
20
+ assert(downLevel(`a(c.b[a.b]**=d)`), 'a((_ = c.b, _[_0 = a.b] = &power(_[_0], d)))\r\nvar _, _0', true);
21
+ assert(downLevel(`c.b[a.b]**=d`), '_ = c.b, _[_0 = a.b] = &power(_[_0], d)\r\nvar _, _0', true);
22
22
  i++// 声明及解构
23
23
  assert(downLevel(`var [data, args, strs] = breakcode(data, occurs), strs = []`), 'var _ = breakcode(data, occurs), data = _[0], args = _[1], strs = _[2], strs = []\r\nvar _');
24
24
  assert(downLevel(`var [name, type, options] = piece, key, repeat;`), 'var name = piece[0], type = piece[1], options = piece[2], key, repeat;');
@@ -83,7 +83,7 @@ assert(downLevel(`class a {}`), "function a() {}")
83
83
  var tmp = scanner2('export class a{a(){}}'); tmp.fix(); assert(downLevel.code(tmp).toString(), `exports.a = function (a) { a["prototype"].a = function () {}\r\nreturn a }(function a() {})`);
84
84
  assert(downLevel(`class a { static{ a.a=1}}`), "function a() {}; (function () { a.a = 1 }())")
85
85
  assert(downLevel(`if(a) a = 1; class a {}`), "if (a) a = 1; function a() {}")
86
- assert(downLevel(`async function(){if(a) a = 1; class a {}}`), `function () { return async_(
86
+ assert(downLevel(`async function(){if(a) a = 1; class a {}}`), `function () { return &async(
87
87
  function () {
88
88
  a = function () {}; if (!a) return [1, 0]; a = 1; return [1, 0]
89
89
  })
@@ -97,8 +97,8 @@ assert(downLevel(`var a=class { constructor(){this.a=1}; static b=2 b(){}};`), `
97
97
  assert(downLevel(`class a {static b(){}}`), "function a() {}; a.b = function () {}")
98
98
  assert(downLevel(`class a extends b{}`), `function a() {
99
99
  var this_ = b["apply"](this, arguments) || this;
100
- return this_ }; extends_(a, b)`);
101
- assert(downLevel(`class a extends class b{}{}`), `var a = function (b, a) { extends_(a, b)\r\nreturn a }(function b() {}, function a() {
100
+ return this_ }; &extends(a, b)`);
101
+ assert(downLevel(`class a extends class b{}{}`), `var a = function (b, a) { &extends(a, b)\r\nreturn a }(function b() {}, function a() {
102
102
  var this_ = b["apply"](this, arguments) || this;
103
103
  return this_ })`);
104
104
  assert(downLevel(`class a {get a(){}}`), `function a() {};
@@ -118,18 +118,18 @@ var tmp`);
118
118
  i++// 属性降级
119
119
  assert(downLevel(`return ({b,async a(){}})`), `return ((_ = {},
120
120
  _.b = b,
121
- _.a = function () { return async_() }, _))\r\nvar _`);
121
+ _.a = function () { return &async() }, _))\r\nvar _`);
122
122
  assert(downLevel(`var a={b,async a(){}}`), `var a = (_ = {},
123
123
  _.b = b,
124
- _.a = function () { return async_() }, _)\r\nvar _`);
124
+ _.a = function () { return &async() }, _)\r\nvar _`);
125
125
  assert(downLevel(`var a={b:a=>b,c}`), `var a = (_ = {},
126
126
  _.b = function (a) { return b },
127
127
  _.c = c, _)\r\nvar _`);
128
128
  assert(downLevel(`={b,async a(){}}`), `= (_ = {},
129
129
  _.b = b,
130
- _.a = function () { return async_() }, _)\r\nvar _`);
130
+ _.a = function () { return &async() }, _)\r\nvar _`);
131
131
  assert(downLevel(`={async [a](){}}`), `= (_ = {},
132
- _[a] = function () { return async_() }, _)\r\nvar _`);
132
+ _[a] = function () { return &async() }, _)\r\nvar _`);
133
133
  assert(downLevel(`={[a]:b}`), `= (_ = {},
134
134
  _[a] = b, _)\r\nvar _`);
135
135
  assert(downLevel(`={a:1,[a]:1}`), `= (_ = { a: 1 },
@@ -152,13 +152,13 @@ _[b] = (_0 = {},
152
152
  _0[a] = 1, _0), _)\r\nvar _, _0, _1`);
153
153
  i++// 对象展开
154
154
  assert(downLevel(`={ok:ok}`), `= { ok: ok }`);
155
- assert(downLevel(`={...a}`), `= extend({}, a)`);
156
- assert(downLevel(`={...a&&b}`), `= extend({}, a && b)`);
157
- assert(downLevel(`()=>({\r\nfileName: entry.fileName,\r\ntextSpan: highlightSpan.textSpan,\r\nisWriteAccess: highlightSpan.kind === "writtenReference" /* writtenReference */,\r\n...highlightSpan.isInString && { isInString: true },\r\n...highlightSpan.contextSpan && { contextSpan: highlightSpan.contextSpan }})`), `function () { return (extend({
155
+ assert(downLevel(`={...a}`), `= &extend({}, a)`);
156
+ assert(downLevel(`={...a&&b}`), `= &extend({}, a && b)`);
157
+ assert(downLevel(`()=>({\r\nfileName: entry.fileName,\r\ntextSpan: highlightSpan.textSpan,\r\nisWriteAccess: highlightSpan.kind === "writtenReference" /* writtenReference */,\r\n...highlightSpan.isInString && { isInString: true },\r\n...highlightSpan.contextSpan && { contextSpan: highlightSpan.contextSpan }})`), `function () { return (&extend({
158
158
  fileName: entry.fileName,
159
159
  textSpan: highlightSpan.textSpan,
160
160
  isWriteAccess: highlightSpan.kind === "writtenReference" /* writtenReference */ }, highlightSpan.isInString && { isInString: true }, highlightSpan.contextSpan && { contextSpan: highlightSpan.contextSpan })) }`);
161
- assert(downLevel(`async()=>({ [argitem.sort ? argitem.sort : 'date']: "desc" })`), `function () { return async_(
161
+ assert(downLevel(`async()=>({ [argitem.sort ? argitem.sort : 'date']: "desc" })`), `function () { return &async(
162
162
  function () {
163
163
  _ = {}; if (!argitem.sort) return [1, 0]; _1 = argitem.sort; return [2, 0]
164
164
  },
@@ -170,51 +170,51 @@ _[_1] = "desc"; _0 = _; return [_0, 2]
170
170
  })
171
171
  var _0, _1 }
172
172
  var _`);
173
- assert(downLevel(`={...{a:1}}`), `= extend({}, { a: 1 })`);
174
- assert(downLevel(`={...a,...c}`), `= extend({}, a, c)`);
175
- assert(downLevel(`={a:a,...b,c}`), `= (_ = extend({ a: a }, b),\r\n_.c = c, _)\r\nvar _`);
176
- assert(downLevel(`={...b,c,...d,e}`), `= (_ = extend({}, b),\r\n_.c = c, extend(_, d),\r\n_.e = e, _)\r\nvar _`);
177
- assert(downLevel(`={...a,b}`), `= (_ = extend({}, a),
173
+ assert(downLevel(`={...{a:1}}`), `= &extend({}, { a: 1 })`);
174
+ assert(downLevel(`={...a,...c}`), `= &extend({}, a, c)`);
175
+ assert(downLevel(`={a:a,...b,c}`), `= (_ = &extend({ a: a }, b),\r\n_.c = c, _)\r\nvar _`);
176
+ assert(downLevel(`={...b,c,...d,e}`), `= (_ = &extend({}, b),\r\n_.c = c, &extend(_, d),\r\n_.e = e, _)\r\nvar _`);
177
+ assert(downLevel(`={...a,b}`), `= (_ = &extend({}, a),
178
178
  _.b = b, _)\r\nvar _`);
179
- assert(downLevel(`={...a,b,...c}`), `= (_ = extend({}, a),
180
- _.b = b, extend(_, c), _)\r\nvar _`);
181
- assert(downLevel(`={...a,...c,b}`), `= (_ = extend({}, a, c),
179
+ assert(downLevel(`={...a,b,...c}`), `= (_ = &extend({}, a),
180
+ _.b = b, &extend(_, c), _)\r\nvar _`);
181
+ assert(downLevel(`={...a,...c,b}`), `= (_ = &extend({}, a, c),
182
182
  _.b = b, _)\r\nvar _`);
183
- assert(downLevel(`={...{},...c,b}`), `= (_ = extend({}, {}, c),
183
+ assert(downLevel(`={...{},...c,b}`), `= (_ = &extend({}, {}, c),
184
184
  _.b = b, _)\r\nvar _`);
185
185
  assert(downLevel(`={a(){},get c(){},b}`), `= (_ = {},
186
186
  _.a = function () {},
187
187
  Object["defineProperty"](_, "c", (_0 = {}, _0["get"] = function () {}, _0)),
188
188
  _.b = b, _)\r\nvar _, _0`);
189
189
  assert(downLevel(`if(){Promise.reslove({get then() {}})}`), `if () { Promise.reslove((_ = {},\r\nObject["defineProperty"](_, "then", (_0 = {}, _0["get"] = function () {}, _0)), _)) }\r\nvar _, _0`)
190
- assert(downLevel(`=[...a]`), `var slice_ = Array["prototype"]["slice"];\r\n= slice_["call"](a)`)
191
- assert(downLevel(`let a = [...a,...a()];`), `var slice_ = Array["prototype"]["slice"];\r\nvar a = slice_["call"](a)["concat"](slice_["call"](a()));`)
192
- assert(downLevel(`=[...a,...b]`), `var slice_ = Array["prototype"]["slice"];\r\n= slice_["call"](a)["concat"](slice_["call"](b))`)
193
- assert(downLevel(`=[a,...b]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a]["concat"](slice_["call"](b))`)
194
- assert(downLevel(`=[a,...b,...c]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a]["concat"](slice_["call"](b), slice_["call"](c))`)
195
- assert(downLevel(`=[a,b,...c]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c))`)
196
- assert(downLevel(`=[a,b,...c,d]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c), [d])`)
197
- assert(downLevel(`=[a,b,...c,d,e,f]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c), [d, e, f])`)
198
- 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))`)
199
- assert(downLevel(`=[a,b,...c,d,...e]`), `var slice_ = Array["prototype"]["slice"];\r\n= [a, b]["concat"](slice_["call"](c), [d], slice_["call"](e))`)
190
+ assert(downLevel(`=[...a]`), `var &slice = Array["prototype"]["slice"];\r\n= &slice["call"](a)`)
191
+ assert(downLevel(`let a = [...a,...a()];`), `var &slice = Array["prototype"]["slice"];\r\nvar a = &slice["call"](a)["concat"](&slice["call"](a()));`)
192
+ assert(downLevel(`=[...a,...b]`), `var &slice = Array["prototype"]["slice"];\r\n= &slice["call"](a)["concat"](&slice["call"](b))`)
193
+ assert(downLevel(`=[a,...b]`), `var &slice = Array["prototype"]["slice"];\r\n= [a]["concat"](&slice["call"](b))`)
194
+ assert(downLevel(`=[a,...b,...c]`), `var &slice = Array["prototype"]["slice"];\r\n= [a]["concat"](&slice["call"](b), &slice["call"](c))`)
195
+ assert(downLevel(`=[a,b,...c]`), `var &slice = Array["prototype"]["slice"];\r\n= [a, b]["concat"](&slice["call"](c))`)
196
+ assert(downLevel(`=[a,b,...c,d]`), `var &slice = Array["prototype"]["slice"];\r\n= [a, b]["concat"](&slice["call"](c), [d])`)
197
+ assert(downLevel(`=[a,b,...c,d,e,f]`), `var &slice = Array["prototype"]["slice"];\r\n= [a, b]["concat"](&slice["call"](c), [d, e, f])`)
198
+ 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))`)
199
+ assert(downLevel(`=[a,b,...c,d,...e]`), `var &slice = Array["prototype"]["slice"];\r\n= [a, b]["concat"](&slice["call"](c), [d], &slice["call"](e))`)
200
200
  assert(downLevel(`a(...b)`), `a["apply"](null, b)`)
201
201
  assert(downLevel(`a(..."b,c".split(","))`), `a["apply"](null, "b,c".split(","))`)
202
- assert(downLevel(`new a(...args)`), `var slice_ = Array["prototype"]["slice"];\r\nnew (a['bind']['apply'](a, [null]["concat"](slice_["call"](args))))`)
203
- 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))))`)
204
- 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))))`)
205
- 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 _`)
206
- assert(downLevel(`a(...b,...c)`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, slice_["call"](b)["concat"](slice_["call"](c)))`)
207
- assert(downLevel(`a(...b,c)`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, slice_["call"](b)["concat"]([c]))`)
202
+ assert(downLevel(`new a(...args)`), `var &slice = Array["prototype"]["slice"];\r\nnew (a['bind']['apply'](a, [null]["concat"](&slice["call"](args))))`)
203
+ 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))))`)
204
+ 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))))`)
205
+ 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 _`)
206
+ assert(downLevel(`a(...b,...c)`), `var &slice = Array["prototype"]["slice"];\r\na["apply"](null, &slice["call"](b)["concat"](&slice["call"](c)))`)
207
+ assert(downLevel(`a(...b,c)`), `var &slice = Array["prototype"]["slice"];\r\na["apply"](null, &slice["call"](b)["concat"]([c]))`)
208
208
  assert(downLevel(`getPendingExpressions()[_push](...flattenCommaList(expr));`), `(_ = getPendingExpressions())[_push]["apply"](_, flattenCommaList(expr));\r\nvar _`)
209
- assert(downLevel(`a(b,...c)`), `var slice_ = Array["prototype"]["slice"];\r\na["apply"](null, [b]["concat"](slice_["call"](c)))`)
210
- 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)))`)
211
- 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)))`)
212
- 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)))`)
213
- 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 _`)
209
+ assert(downLevel(`a(b,...c)`), `var &slice = Array["prototype"]["slice"];\r\na["apply"](null, [b]["concat"](&slice["call"](c)))`)
210
+ 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)))`)
211
+ 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)))`)
212
+ 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)))`)
213
+ 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 _`)
214
214
  assert(downLevel(`a(...b).c(...d)`), `(_ = a["apply"](null, b)).c["apply"](_, d)\r\nvar _`)
215
215
  assert(downLevel(`a(...b).c(...d).e(...f)`), `(_ = (_ = a["apply"](null, b)).c["apply"](_, d)).e["apply"](_, f)\r\nvar _`)
216
216
  assert(downLevel(`diagnostic.relatedInformation.push(...relatedInformation);`), `(_ = diagnostic.relatedInformation).push["apply"](_, relatedInformation);\r\nvar _`);
217
- assert(downLevel(`const typeNames = [79 /* Identifier */, ...typeKeywords];`), `var slice_ = Array["prototype"]["slice"];\r\nvar typeNames = [79 /* Identifier */]["concat"](slice_["call"](typeKeywords));`);
217
+ assert(downLevel(`const typeNames = [79 /* Identifier */, ...typeKeywords];`), `var &slice = Array["prototype"]["slice"];\r\nvar typeNames = [79 /* Identifier */]["concat"](&slice["call"](typeKeywords));`);
218
218
  i++// 箭头函数
219
219
  assert(downLevel(`a=>k`), "function (a) { return k }")
220
220
  assert(downLevel(`function (a,...b,b){}`), `function (a, b) { b = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
@@ -225,11 +225,11 @@ assert(downLevel(`map(([a])=>a)`), "map(function (arg) { var a = arg[0]; return
225
225
  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];\r\nvar _0")
226
226
  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;")
227
227
  i++// 对象收集
228
- assert(downLevel(`function (a,...b){}`), `var slice_ = Array["prototype"]["slice"];\r\nfunction (a) { var b = slice_["call"](arguments, 1); }`)
229
- 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; }`)
228
+ assert(downLevel(`function (a,...b){}`), `var &slice = Array["prototype"]["slice"];\r\nfunction (a) { var b = &slice["call"](arguments, 1); }`)
229
+ 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; }`)
230
230
  assert(downLevel(`function (a,...,c){}`), `function (a, c) { c = arguments["length"] > 1 ? arguments[arguments["length"] - 1] : undefined; }`)
231
- assert(downLevel(`(...a) => k`), `var slice_ = Array["prototype"]["slice"];\r\nfunction () { var a = slice_["call"](arguments, 0); return k }`)
232
- assert(downLevel(`for await(o of os) noSymbol`), `return async_(
231
+ assert(downLevel(`(...a) => k`), `var &slice = Array["prototype"]["slice"];\r\nfunction () { var a = &slice["call"](arguments, 0); return k }`)
232
+ assert(downLevel(`for await(o of os) noSymbol`), `return &async(
233
233
  function () {
234
234
  return [8, 8]
235
235
  },
@@ -267,7 +267,7 @@ function () {
267
267
  return [1, 9]
268
268
  })
269
269
  var _, _0, _2, _3`)
270
- assert(downLevel(`for await(var [o,s] of os) noSymbol`), `return async_(
270
+ assert(downLevel(`for await(var [o,s] of os) noSymbol`), `return &async(
271
271
  function () {
272
272
  return [11, 8]
273
273
  },
@@ -322,21 +322,21 @@ assert(downLevel(`for(var [a] of os)Symbol`), `try { for (var a, _0 = os[Symbol[
322
322
  var _, _0, _1, _2, _3`)
323
323
  assert(downLevel(`for(var [a,b] of os)Symbol`), `try { for (var a, b, _0 = os[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (_1 = _["value"], _2 = (_1[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]])["call"](_1), _3 = undefined, _3 = _2["next"](), a = _3["value"], _3 = _2["next"](), b = _3["value"], _3 = (!_3 || !_3["done"]) && isFunction(_2["return"]) && _2["return"](), true); _ = _0["next"]()) Symbol } finally { if (_ && !_["done"] && isFunction(_0["return"])) _0["return"]() }
324
324
  var _, _0, _1, _2, _3`)
325
- assert(downLevel(`[...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\na = slice_["call"](a, 0)`)
326
- assert(downLevel(`[c,...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\nc = a[0], a = slice_["call"](a, 1)`)
327
- assert(downLevel(`[...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\na = slice_["call"](a, 0)`)
328
- 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 _`)
329
- assert(downLevel(`{...a,c}=a`), `c = a.c, a = rest_(a, ["c"])`)
330
- assert(downLevel(`{c,...a}=a`), `c = a.c, a = rest_(a, ["c"])`)
325
+ assert(downLevel(`[...a]=a`), `var &slice = Array["prototype"]["slice"];\r\na = &slice["call"](a, 0)`)
326
+ assert(downLevel(`[c,...a]=a`), `var &slice = Array["prototype"]["slice"];\r\nc = a[0], a = &slice["call"](a, 1)`)
327
+ assert(downLevel(`[...a]=a`), `var &slice = Array["prototype"]["slice"];\r\na = &slice["call"](a, 0)`)
328
+ 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 _`)
329
+ assert(downLevel(`{...a,c}=a`), `c = a.c, a = &rest(a, ["c"])`)
330
+ assert(downLevel(`{c,...a}=a`), `c = a.c, a = &rest(a, ["c"])`)
331
331
  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);
332
- assert(downLevel(`{c,[c]:b,...a}=a`), `c = a.c, b = a[c], a = rest_(a, ["c", c])`)
333
- assert(downLevel(`async()=>name = require("./$split")(name)["join"]("/");`), `function () { return async_(
332
+ assert(downLevel(`{c,[c]:b,...a}=a`), `c = a.c, b = a[c], a = &rest(a, ["c", c])`)
333
+ assert(downLevel(`async()=>name = require("./$split")(name)["join"]("/");`), `function () { return &async(
334
334
  function () {
335
335
  _0 = require("./$split"); _0 = _0(name); name = _0["join"]("/"); return [name, 2]
336
336
  })
337
337
  var _0 };`);
338
338
  i++//异步或步进函数
339
- assert(downLevel(`function *(){yield *a}`), `function () { return aster_(
339
+ assert(downLevel(`function *(){yield *a}`), `function () { return &aster(
340
340
  function () {
341
341
  return [9, 8]
342
342
  },
@@ -377,8 +377,8 @@ function () {
377
377
  return [1, 9]
378
378
  })
379
379
  var _, _0, _1, _3, _4 }`)
380
- assert(downLevel(`async function(){}`), `function () { return async_() }`)
381
- assert(downLevel(`async function(){for(var a of b){Symbol}}`), `function () { return async_(
380
+ assert(downLevel(`async function(){}`), `function () { return &async() }`)
381
+ assert(downLevel(`async function(){for(var a of b){Symbol}}`), `function () { return &async(
382
382
  function () {
383
383
  return [5, 8]
384
384
  },
@@ -408,13 +408,13 @@ return [1, 9]
408
408
  })
409
409
  var a, _, _0, _2, _3 }`)
410
410
  assert(downLevel(`a={async a(){var b =c;return 1}}`), `a = (_ = {},
411
- _.a = function () { return async_(\r\nfunction () {\r\nb = c; return [1, 2]\r\n})\r\nvar b }, _)\r\nvar _`)
412
- assert(downLevel(`async function(){return 1}`), `function () { return async_(\r\nfunction () {\r\nreturn [1, 2]\r\n}) }`)
413
- assert(downLevel(`async function(a){await a}`), `function (a) { return async_(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n})\r\nvar _0 }`)
414
- assert(downLevel(`async function(a){return await a}`), `function (a) { return async_(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; return [_0, 2]\r\n})\r\nvar _0 }`)
415
- assert(downLevel(`async function(a){await a,await b}`), `function (a) { return async_(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; _0 = b; return [_0, 1]\r\n})\r\nvar _0 }`)
416
- assert(downLevel(`async function(){await a,await b}`), `function () { return async_(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; _0 = b; return [_0, 1]\r\n})\r\nvar _0 }`)
417
- assert(downLevel(`async function(a){ if(c)await a,await b;else if(s) await c;}`), `function (a) { return async_(
411
+ _.a = function () { return &async(\r\nfunction () {\r\nb = c; return [1, 2]\r\n})\r\nvar b }, _)\r\nvar _`)
412
+ assert(downLevel(`async function(){return 1}`), `function () { return &async(\r\nfunction () {\r\nreturn [1, 2]\r\n}) }`)
413
+ assert(downLevel(`async function(a){await a}`), `function (a) { return &async(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n})\r\nvar _0 }`)
414
+ assert(downLevel(`async function(a){return await a}`), `function (a) { return &async(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; return [_0, 2]\r\n})\r\nvar _0 }`)
415
+ assert(downLevel(`async function(a){await a,await b}`), `function (a) { return &async(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; _0 = b; return [_0, 1]\r\n})\r\nvar _0 }`)
416
+ assert(downLevel(`async function(){await a,await b}`), `function () { return &async(\r\nfunction () {\r\n_0 = a; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; _0 = b; return [_0, 1]\r\n})\r\nvar _0 }`)
417
+ assert(downLevel(`async function(a){ if(c)await a,await b;else if(s) await c;}`), `function (a) { return &async(
418
418
  function () {
419
419
  if (!c) return [3, 0]; _0 = a; return [_0, 1]
420
420
  },
@@ -431,8 +431,8 @@ function (_) {
431
431
  _0 = _; return [1, 0]
432
432
  })
433
433
  var _0 }`)
434
- assert(downLevel(`async function(a){ for(var i=1;i<2;i++) await 1 }`), `function (a) { return async_(\r\nfunction () {\r\ni = 1; return [1, 0]\r\n},\r\nfunction () {\r\n_0 = i < 2; if (!_0) return [2, 0]; _0 = 1; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; _0 = i++; return [-1, 0]\r\n})\r\nvar i, _0 }`)
435
- assert(downLevel('async function(){ if(b); else {if (a){}else{location = getRequestProtocol(url) + "//" + location;}}}'), `function () { return async_(
434
+ assert(downLevel(`async function(a){ for(var i=1;i<2;i++) await 1 }`), `function (a) { return &async(\r\nfunction () {\r\ni = 1; return [1, 0]\r\n},\r\nfunction () {\r\n_0 = i < 2; if (!_0) return [2, 0]; _0 = 1; return [_0, 1]\r\n},\r\nfunction (_) {\r\n_0 = _; _0 = i++; return [-1, 0]\r\n})\r\nvar i, _0 }`)
435
+ assert(downLevel('async function(){ if(b); else {if (a){}else{location = getRequestProtocol(url) + "//" + location;}}}'), `function () { return &async(
436
436
  function () {
437
437
  if (!b) return [1, 0]; return [3, 0]
438
438
  },
@@ -443,7 +443,7 @@ function () {
443
443
  _0 = getRequestProtocol(url), _0 = _0 + "//", location = _0 + location; return [1, 0]
444
444
  })
445
445
  var _0 }`);
446
- assert(downLevel("var{a}=await b"), `return async_(
446
+ assert(downLevel("var{a}=await b"), `return &async(
447
447
  function () {
448
448
  _0 = b; return [_0, 1]
449
449
  },
@@ -451,7 +451,7 @@ function (_) {
451
451
  _0 = _; _0 = _0.a; a = _0
452
452
  })
453
453
  var a, _0`)
454
- assert(downLevel(`async a=>await a`), `function (a) { return return async_(
454
+ assert(downLevel(`async a=>await a`), `function (a) { return return &async(
455
455
  function () {
456
456
  _0 = a; return [_0, 1]
457
457
  })
@@ -461,8 +461,8 @@ assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `O
461
461
  _.get = function () {},
462
462
  _.set = function (v) {}, _))
463
463
  var _`);
464
- assert(downLevel(`var restq = splice(queue, i, i2 - i, ...a[1], { type: STAMP, text: "=" });`), `var slice_ = Array["prototype"]["slice"];
465
- var restq = splice["apply"](null, [queue, i, i2 - i]["concat"](slice_["call"](a[1]), [{ type: STAMP, text: "=" }]));`)
464
+ assert(downLevel(`var restq = splice(queue, i, i2 - i, ...a[1], { type: STAMP, text: "=" });`), `var &slice = Array["prototype"]["slice"];
465
+ var restq = splice["apply"](null, [queue, i, i2 - i]["concat"](&slice["call"](a[1]), [{ type: STAMP, text: "=" }]));`)
466
466
  var c = scanner2(`\r\n if (search.length) return null;\r\n return path.join(...pathlist);\r\n`); i++
467
467
  c.fix(); i++
468
468
  c.break(); i++
@@ -479,20 +479,20 @@ assert(downLevel(`[{}.b,c]=[1]`), '_ = [1], {}.b = _[0], c = _[1]\r\nvar _')
479
479
  assert(downLevel(`[{}.b]=[1]`), '({}).b = [1][0]')
480
480
  assert(downLevel(`[[[a[b]]]]=[1]`), 'a[b] = [1][0][0][0]')
481
481
  assert(downLevel(`[[[{}[b]]]]=[1]`), '({})[b] = [1][0][0][0]')
482
- assert(downLevel(`[...a[b]]=[1]`), 'var slice_ = Array["prototype"]["slice"];\r\n_ = [1], a[b] = slice_["call"](_, 0)\r\nvar _')
483
- assert(downLevel(`[a,...{length}]=[1]`), 'var slice_ = Array["prototype"]["slice"];\r\n_ = [1], a = _[0], _0 = slice_["call"](_, 1), length = _0.length\r\nvar _, _0')
484
- assert(downLevel(`[...{length}]=[1]`), `var slice_ = Array["prototype"]["slice"];
485
- _ = [1], _0 = slice_["call"](_, 0), length = _0.length
482
+ assert(downLevel(`[...a[b]]=[1]`), 'var &slice = Array["prototype"]["slice"];\r\n_ = [1], a[b] = &slice["call"](_, 0)\r\nvar _')
483
+ assert(downLevel(`[a,...{length}]=[1]`), 'var &slice = Array["prototype"]["slice"];\r\n_ = [1], a = _[0], _0 = &slice["call"](_, 1), length = _0.length\r\nvar _, _0')
484
+ assert(downLevel(`[...{length}]=[1]`), `var &slice = Array["prototype"]["slice"];
485
+ _ = [1], _0 = &slice["call"](_, 0), length = _0.length
486
486
  var _, _0`)
487
- assert(downLevel(`[...{}[a]]=[1]`), `var slice_ = Array["prototype"]["slice"];
488
- _ = [1], {}[a] = slice_["call"](_, 0)
487
+ assert(downLevel(`[...{}[a]]=[1]`), `var &slice = Array["prototype"]["slice"];
488
+ _ = [1], {}[a] = &slice["call"](_, 0)
489
489
  var _`)
490
- assert(downLevel(`,{...{}[a]}=[1]`), `_ = [1], {}[a] = rest_(_, [])
490
+ assert(downLevel(`,{...{}[a]}=[1]`), `_ = [1], {}[a] = &rest(_, [])
491
491
  var _`)
492
- assert(downLevel(`var res=null,res2=1,{...{}[a]}=[1]`), `var res = null, res2 = 1, _ = [1], {}[a] = rest_(_, [])
492
+ assert(downLevel(`var res=null,res2=1,{...{}[a]}=[1]`), `var res = null, res2 = 1, _ = [1], {}[a] = &rest(_, [])
493
493
  var _`);
494
- assert(downLevel(`var res=null,{...{}[a]}=[1]`), `var res = null, _ = [1], {}[a] = rest_(_, [])
494
+ assert(downLevel(`var res=null,{...{}[a]}=[1]`), `var res = null, _ = [1], {}[a] = &rest(_, [])
495
495
  var _`)
496
- assert(downLevel(`,{b,...{}[a]}=[1]`), `_ = [1], b = _.b, {}[a] = rest_(_, ["b"])
496
+ assert(downLevel(`,{b,...{}[a]}=[1]`), `_ = [1], b = _.b, {}[a] = &rest(_, ["b"])
497
497
  var _`)
498
498
  assert(downLevel(`var penddings = {}, circle = [], module_keys = [];`), `var penddings = {}, circle = [], module_keys = [];`)
@@ -0,0 +1,13 @@
1
+ function till(n) {
2
+ if (/^[&\^%\?@#]/.test(n)) {
3
+ var s = n = n.replace(/[&\^%\?@#]/g, '_');
4
+ var i = 0;
5
+ while (n in this) {
6
+ n = s + i++;
7
+ }
8
+ }
9
+ return n;
10
+ }
11
+ module.exports = function nametill(names, prevent) {
12
+ return names.map(till, prevent);
13
+ }
@@ -2,7 +2,7 @@ var { SCOPED } = require("./common");
2
2
  var backEach = require("../basic/backEach");
3
3
 
4
4
  var polyfills = Object.assign(Object.create(null), {
5
- "Object.assign": 'extend'
5
+ "Object.assign": '&extend'
6
6
  });
7
7
  var polyfill = function (o, i, used) {
8
8
  var v = o.text;
@@ -46,14 +46,14 @@ var harness = await async function () {
46
46
  }();
47
47
  await async function () {
48
48
  extend(harness, {
49
- aster_,
50
- async_,
51
- asyncAster_,
52
- extends_,
49
+ &aster,
50
+ &async,
51
+ &asyncAster,
52
+ &extends,
53
53
  isFunction,
54
- restIter_,
55
- rest_,
56
- exec_,
54
+ &restIter,
55
+ &rest,
56
+ &exec,
57
57
  })
58
58
  extend(global, harness);
59
59
  var rest = [path.join(testpath, 'test')];
@@ -93,7 +93,7 @@ await async function () {
93
93
  await queue.call(testFiles, async function (f, i) {
94
94
  var runText = async function (text) {
95
95
  /**
96
- * @type {vm.RunningCodeInNewContextOptions}
96
+ * &type {vm.RunningCodeInNewContextOptions}
97
97
  */
98
98
  var ctxOptions = {
99
99
  timeout: 1000,
@@ -1,5 +1,10 @@
1
1
  "use strict";
2
- var createNamelist = require("./namelist");
2
+ var createShortName = require("./namelist");
3
+ var createShortList = function (keys, prevent) {
4
+ return createShortName(keys.length, prevent);
5
+ };
6
+ var renameHashName = require("./nametill");
7
+ var createNameList = createShortList;
3
8
  var Html = require("./Html");
4
9
  var Javascript = require("./Javascript");
5
10
  const {
@@ -37,11 +42,20 @@ var compress = function (scoped, maped = Object.create(null)) {
37
42
  var keys = Object.keys(map);
38
43
  keys.sort((a, b) => used[b].length - used[a].length);
39
44
  if (keys.length) {
40
- var names = createNamelist(keys.length, __prevent);
45
+ var names = createNameList(keys, __prevent);
46
+ var umap = Array(keys.length);
41
47
  for (var cx = 0, dx = keys.length; cx < dx; cx++) {
42
48
  var k = keys[cx];
43
49
  var name = names[cx];
50
+ umap[cx] = used[k];
44
51
  rename(used, k, name);
52
+ delete used[k];
53
+ delete map[k];
54
+ }
55
+ for (var cx = 0, dx = names.length; cx < dx; cx++) {
56
+ var n = names[cx];
57
+ map[n] = true;
58
+ used[n] = umap[cx];
45
59
  }
46
60
  }
47
61
  if (scoped.length) {
@@ -138,7 +152,7 @@ class Code extends Array {
138
152
  if (k in occurs) continue;
139
153
  occurs[k] = true;
140
154
  }
141
- for (var k in scoped.lets) {
155
+ if (scoped.lets !== scoped.vars) for (var k in scoped.lets) {
142
156
  if (k in occurs) continue;
143
157
  occurs[k] = true;
144
158
  }
@@ -167,6 +181,11 @@ class Code extends Array {
167
181
  if (this._scoped) extend(this.envs, envs);
168
182
  return this;
169
183
  }
184
+ revar() {
185
+ createNameList = renameHashName;
186
+ compress(this.scoped);
187
+ createNameList = createShortList;
188
+ }
170
189
  // 压缩
171
190
  press(keepspace) {
172
191
  this.keepspace = keepspace;
@@ -134,13 +134,13 @@ var _withget = function (text) {
134
134
  if (index < 0) index = text.length;
135
135
  var name = text.slice(0, index);
136
136
  var prop = text.slice(index);
137
- return rescan`${patchMark}withget_(${`"${name}"`},[${_evals()}],${name})${prop}`;
137
+ return rescan`${patchMark + "wget"}(${`"${name}"`},[${_evals()}],${name})${prop}`;
138
138
  };
139
139
  var _withset = function (text, tmpname, valname) {
140
140
  var index = text.indexOf(".");
141
141
  if (index < 0) index = text.length;
142
142
  var name = text.slice(0, index);
143
- return rescan`if(${tmpname}=${patchMark}with_(${`"${name}"`},[${_evals()}]))${tmpname}.${text}=${valname};else ${text}=${valname};`;
143
+ return rescan`if(${tmpname}=${patchMark + "with"}(${`"${name}"`},[${_evals()}]))${tmpname}.${text}=${valname};else ${text}=${valname};`;
144
144
  };
145
145
  var _switch = function (body, cx, unblock, result, getname) {
146
146
  var o = body[cx];
@@ -1404,7 +1404,7 @@ var strip = false;
1404
1404
  var canbeTemp = function (body) {
1405
1405
  return _canbeTemp(body, strip);
1406
1406
  };
1407
- var patchMark = '';
1407
+ var patchMark = '&';
1408
1408
  module.exports = function (body, newname, ret) {
1409
1409
  strip = body.strip;
1410
1410
  var patchMark_ = patchMark;
@@ -85,7 +85,7 @@ test("switch(a){case 1:break;case 2:break;}", "if (a === 1) return [1, 0]; if (a
85
85
  test("switch(a){case 1:case 2:break;}", "if (a === 1) return [1, 0]; if (a === 2) return [1, 0]", true);
86
86
  test("switch(a){case 1:case 2:x=1;}", "if (a === 1) return [1, 0]; if (a === 2) return [1, 0]; return [2, 0];\r\n x = 1; return [1, 0]", true);
87
87
  test("switch(a){case 1:case 2:x=1;}", "if (a === 1) return [1, 0]; if (a === 2) return [1, 0]; return [2, 0];\r\n x = 1; return [1, 0]", true);
88
- test("with(a){ a = 1}", `if (_ = with_("a", [a])) _.a = 1; else a = 1;`, true);
88
+ test("with(a){ a = 1}", `if (_ = &with("a", [a])) _.a = 1; else a = 1;`, true);
89
89
  test("try{a=2+1}catch(e){return;}", 'return [65537, 7];\r\n a = 2 + 1; return [0, 9];\r\n e = @; return [undefined, 2];\r\n return [1, 9]', true);
90
90
  test("try{a=2+1}catch(e){}", 'return [1, 7];\r\n a = 2 + 1; return [0, 9];\r\n return [1, 9]', true);
91
91
  test("try{a=2+1}catch(e){a=3}", 'return [65537, 7];\r\n a = 2 + 1; return [0, 9];\r\n e = @; a = 3; return [0, 9];\r\n return [1, 9]', true);
@@ -463,8 +463,15 @@ var Method = function () {
463
463
  if (!this.base) this.base = base;
464
464
  vlist.push(valueMap);
465
465
  var argDefaults = this.args.defaults;
466
+ var ipd = 0;
466
467
  this.args.forEach((k, i) => {
467
- var a = arguments[i];
468
+ var p = i + ipd;
469
+ if (/^\.\.\.@/i.test(k)) {
470
+ var a = Array.prototype.slice.call(arguments, p, i + arguments.length - this.args.length + 1);
471
+ ipd += a.length - 1;
472
+ k = k.slice(3);
473
+ }
474
+ else var a = arguments[p];
468
475
  if (a === undefined || a === null) a = seprateFunc(calcvars(argDefaults[k])).map(evalproc).join('');
469
476
  valueMap[k] = a;
470
477
  });
@@ -497,17 +504,18 @@ var killneg = function (v, n) {
497
504
  v = n + v;
498
505
  }
499
506
  }
507
+ else if (n === '...');
500
508
  else if (n) v = n + v;
501
509
  return v;
502
510
  };
503
511
  var calcvars = function (v) {
504
512
  var decode = /^['"`]/.test(v) ? strings.decode : a => a;
505
- return v.replace(/(^\-)?(@[^\s\{\}\(\)\[\]\:\+\*\/,;\!\>\$\=\&\%\#\@'"`\?\.\/\|~#]+|@\{[^\}@]*\})/g, function (_, n, m) {
513
+ return v.replace(/(^\-|\.\.\.)?(@[^\s\{\}\(\)\[\]\:\+\*\/,;\!\>\$\=\&\%\#\@'"`\?\.\/\|~#]+|@\{[^\}@]*\})/g, function (_, n, m) {
506
514
  var value = getFromScopeList(m, vlist, m);
507
515
  value = decode(value);
508
516
  value = killneg(value, n);
509
517
  return value;
510
- }).replace(/(^|\s|[\]\)\(\[\+\*\/,;]|^\-)(?:var\s*\(([\s\S]*?)\)|(--\S+))/g, function (m, q, a, b) {
518
+ }).replace(/(^|\s|[\]\)\(\[\+\*\/,;]|\-|\.\.\.)(?:var\s*\(([\s\S]*?)\)|(--\S+))/g, function (m, q, a, b) {
511
519
  var v = getFromScopeList(b || a.trim(), vlist, m.slice(q.length));
512
520
  v = killneg(v, q);
513
521
  return v;
@@ -564,7 +572,7 @@ var eval2 = function (props) {
564
572
  var [, name, args] = match;
565
573
  args = createArgMap(args);
566
574
  p.args = args;
567
- p.reg = new RegExp(args.join("|") + /|@\{[^\}@]+\}/.source, 'g');
575
+ p.reg = new RegExp(args.map(a => /(?:\.\.\.)?/.source + a.replace(/^\.\.\./, '')).join("|") + /|@\{[^\}@]+\}/.source, 'g');
568
576
  if (!methods[name]) methods[name] = [];
569
577
  var argDefaults = args.defaults;
570
578
  Object.keys(argDefaults).forEach(k => {
@@ -87,7 +87,10 @@ assert(素馨(`a{a:extract(2 3,2)}`), `a{a:3;}`);
87
87
  assert(素馨(`value: range(10px, 30px, 10);`, '', true), `value:10px 20px 30px;`);
88
88
  assert(素馨(`value: range(4);`, '', true), `value:1 2 3 4;`);
89
89
  assert(素馨(`@a:-1;b{a:-@a}`, '', true), `b{a:1;}`);
90
+ assert(素馨(`@b(@c,...@d,@e){each(@d,(@a){a:@a})};@b(1,2,3,4,5,3,4)`, '', true), `a:2;a:3;a:4;a:5;a:3;`);
90
91
  assert(素馨(`--mwidth:0px;--bwidth:2px;--qwidth: var(--mwidth)+var(--bwidth);width:--qwidth`, '', true), `width:2px;`);
92
+ assert(素馨(`a{--a:1px;padding:var(--a) -var(--a);}`, '', true), `a{padding:1px -1px;}`);
93
+ assert(素馨(`a{@a:1px;padding:@a -@a;}`, '', true), `a{padding:1px -1px;}`);
91
94
  assert(scanner2(`-0.2em .3em -0.2em 0`, new 素馨.素心)[0].text, '-0.2em');
92
95
  assert(scanner2(`-0.2em .3em -0.2em 0`, new 素馨.素心)[0].isdigit, true);
93
96
  assert(scanner2(`-0.2em .3em -0.2em 0`, new 素馨.素心)[2].text, ".3em");
@@ -1,8 +1,9 @@
1
- <fileitem type_="d.type" @mouseenter="startMarquee(sp)" @mouseleave="stopMarquee(sp)" @touchstart="startMarquee(sp)"
2
- @touchend="stopMarquee(sp)">
1
+ <fileitem type_="d.type" ext+ @mouseenter="startMarquee(sp)" @mouseleave="stopMarquee(sp)"
2
+ @touchstart="startMarquee(sp)" @touchend="stopMarquee(sp)">
3
3
  <template -src="d.isfolder?icons.folder:icons.file"></template>
4
- <span #sp ng-text=d.name></span>
5
- <p -if="d.pending" keep >
4
+ <span #sp name ng-text=d.name></span>
5
+ <p -if="d.pending" keep>
6
6
  <r -style="{width:(d.percent*100).toFixed(4)+'%'}"></r>
7
7
  </p>
8
+ <span ext? -if="!d.isfolder"></span>
8
9
  </fileitem>
@@ -8,6 +8,7 @@ class Fileitem {
8
8
  var e = Fileitem.prototype;
9
9
  e.startMarquee = function (sp) {
10
10
  if (sp.scrollWidth <= sp.clientWidth) return;
11
+ clearInterval(sp.mq);
11
12
  sp.mq = setInterval(function () {
12
13
  clearInterval(sp.mq);
13
14
  sp.mq = setInterval(function () {
@@ -17,7 +18,7 @@ e.startMarquee = function (sp) {
17
18
  }, 16);
18
19
  }, 400);
19
20
  sp.setAttribute("marquee", '');
20
- sp.scrollLeft = sp.clientWidth;
21
+ sp.scrollLeft = sp.clientWidth - parseFloat(getComputedStyle(sp).paddingLeft);
21
22
  };
22
23
  e.stopMarquee = function (sp) {
23
24
  clearInterval(sp.mq);
@@ -29,6 +30,9 @@ function fileitem(elem) {
29
30
  elem.innerHTML = template;
30
31
  var e = elem.children[0];
31
32
  e.$scope = new Fileitem;
33
+ var ext = /\.([^\.]+)$/.exec(elem.$scope.d.name);
34
+ if (ext) e.$scope.ext = ext[1];
35
+ else e.$scope.ext = '';
32
36
  extend(e.$scope, elem.$scope);
33
37
  return e;
34
38
  }