efront 4.0.20 → 4.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coms/basic/queue.js +3 -2
- package/coms/basic_/Symbol.js +2 -2
- package/coms/basic_/aster_.js +6 -6
- package/coms/basic_/asyncAster_.js +19 -13
- package/coms/basic_/exec_.js +21 -5
- package/coms/compile/Javascript.js +70 -30
- package/coms/compile/Program.js +13 -6
- package/coms/compile/common.js +76 -79
- package/coms/compile/downLevel.js +281 -107
- package/coms/compile/downLevel_test.js +63 -32
- package/coms/compile/run-test262.js +141 -0
- package/coms/compile/unstruct.js +42 -40
- package/coms/compile/unstruct_test.js +10 -5
- package/coms/kugou/dance.js +1 -0
- package/coms/kugou/playList.html +0 -4
- package/coms/kugou/playList.js +0 -1
- package/coms/kugou/player.js +4 -27
- package/coms/reptile/colored_console.js +9 -9
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
var downLevel = require("./downLevel");
|
|
2
|
-
var _asert = assert, i =
|
|
2
|
+
var _asert = assert, i = 12;
|
|
3
3
|
assert = function (a, b) {
|
|
4
4
|
var d = 1;
|
|
5
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
|
}
|
|
9
|
+
var innerJs = new Javascript;
|
|
10
|
+
innerJs.defaultType = common.STRAP;
|
|
9
11
|
// 声明及解构
|
|
10
12
|
assert(downLevel(`var [name, type, options] = piece, key, repeat;`), 'var name = piece[0], type = piece[1], options = piece[2], key, repeat;');
|
|
11
|
-
assert(downLevel(`
|
|
12
|
-
assert(downLevel(`
|
|
13
|
+
assert(downLevel(`var [] = piece, key,[]= repeat;`), 'var key;');
|
|
14
|
+
assert(downLevel(`var [] = piece, key,[]`), 'var key');
|
|
15
|
+
assert(downLevel(`const`), 'const');
|
|
16
|
+
assert(downLevel(`let`), 'let');
|
|
13
17
|
assert(downLevel(`var`), '');
|
|
14
18
|
assert(downLevel(`{let a; function b(){a};return;}`), `if (tmp = 0, tmp0 =function (a) { a; function b() { a }; return tmp = 1, void 0; }(a)) { if (tmp === 1) return tmp0; }
|
|
15
19
|
var tmp, a, tmp0`);
|
|
16
20
|
assert(downLevel(`const a,b,c`), 'var a, b, c');
|
|
17
21
|
assert(downLevel(`let a,b,c`), 'var a, b, c');
|
|
18
|
-
assert(downLevel(`
|
|
22
|
+
assert(downLevel(`for(let a in b)`), 'for (var a in b)');
|
|
23
|
+
assert(downLevel(`a;for(let a in b)`), 'a; for (var a0 in b)');
|
|
24
|
+
assert(downLevel(`for(let a in b)setTimeout(function(){console.log(a)})`), 'for (var a in b)(function (a) { setTimeout(function () { console.log(a) }) }(a))\r\nvar tmp, a');
|
|
25
|
+
assert(downLevel(`var a;{let a,b,c}`), 'var a; { var a0 = undefined, b = undefined, c = undefined }');
|
|
26
|
+
assert(downLevel(`var a;{let {a,b},c=1}`), 'var a; { var a0 = undefined, b = undefined, c = 1 }');
|
|
27
|
+
assert(downLevel(`var a;{let {a,b},c}`), 'var a; { var a0 = undefined, b = undefined, c = undefined }');
|
|
19
28
|
assert(downLevel(`var {a,b,c}`), 'var a, b, c');
|
|
20
29
|
assert(downLevel(`let {a,b,c}`), 'var a, b, c');
|
|
21
30
|
assert(downLevel(`const {a,b,c}`), 'var a, b, c');
|
|
@@ -28,6 +37,11 @@ assert(downLevel(`var {a}=b`), 'var a = b.a');
|
|
|
28
37
|
assert(downLevel(`var {a}=1`), 'var a = 1 .a');
|
|
29
38
|
assert(downLevel(`var {a}=1.1`), 'var a = 1.1 .a');
|
|
30
39
|
assert(downLevel(`var {c:a}=b`), 'var a = b.c');
|
|
40
|
+
assert(downLevel(`[...[a]]=[1]`), 'a = [1][0]');
|
|
41
|
+
assert(downLevel(`[...[a]]=[...[1]]`), 'a = [1][0]');
|
|
42
|
+
assert(downLevel(`[a[a]]=[1]`), 'a[a] = [1][0]');
|
|
43
|
+
assert(downLevel(`[a,b]=[b,a]`), '_ = [b, a], a = _[0], b = _[1]\r\nvar _');
|
|
44
|
+
assert(downLevel(`var {c:a=2}=b`), 'var _ = b.c, a = _ !== undefined ? _ : 2\r\nvar _');
|
|
31
45
|
assert(downLevel(`var {"c":a}=b`), 'var a = b["c"]');
|
|
32
46
|
assert(downLevel(`var {1:a}=b`), 'var a = b[1]');
|
|
33
47
|
assert(downLevel(`var [,a]=b`), 'var a = b[1]');
|
|
@@ -36,9 +50,9 @@ assert(downLevel(`var {1:a}=b`), 'var a = b[1]');
|
|
|
36
50
|
assert(downLevel(`var {.1:a}=b`), 'var a = b[.1]');
|
|
37
51
|
assert(downLevel(`var {a,[a]:c}=b`), 'var a = b.a, c = b[a]');
|
|
38
52
|
assert(downLevel(`var {a}=a`), 'var a = a.a');
|
|
39
|
-
assert(downLevel(`var {a,b}=a`), 'var _ = a, a = a.a, b = _.b');
|
|
53
|
+
assert(downLevel(`var {a,b}=a`), 'var _ = a, a = a.a, b = _.b\r\nvar _');
|
|
40
54
|
assert(downLevel(`var {a:{a:{a}}}=b`), 'var a = b.a.a.a');
|
|
41
|
-
assert(downLevel(`var {a,[a]:c}={}`), 'var _ = {}, a = _.a, c = _[a]');
|
|
55
|
+
assert(downLevel(`var {a,[a]:c}={}`), 'var _ = {}, a = _.a, c = _[a]\r\nvar _');
|
|
42
56
|
assert(downLevel(`={a,[a]:c}={}`), '= _ = {}, a = _.a, c = _[a]\r\nvar _');
|
|
43
57
|
var tmp = scanner2(`var {window}=this`); tmp.helpcode = false; tmp.detour(); assert(downLevel.code(tmp).toString(), `var window = this["window"]`);
|
|
44
58
|
assert(downLevel(`function (){var [a]=a;}`), "function () { var a = a[0]; }")
|
|
@@ -187,7 +201,7 @@ assert(downLevel(`(a)=>k`), "function (a) { return k }")
|
|
|
187
201
|
assert(downLevel(`(a=1)=>k`), "function (a) { if (a === undefined) a = 1; return k }")
|
|
188
202
|
assert(downLevel(`([a])=>b`), "function (arg) { var a = arg[0]; return b }")
|
|
189
203
|
assert(downLevel(`map(([a])=>a)`), "map(function (arg) { var a = arg[0]; return a })")
|
|
190
|
-
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]
|
|
204
|
+
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")
|
|
191
205
|
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;")
|
|
192
206
|
i++// 对象收集
|
|
193
207
|
assert(downLevel(`function (a,...b){}`), `var slice_ = Array["prototype"]["slice"];\r\nfunction (a) { var b = slice_["call"](arguments, 1); }`)
|
|
@@ -196,7 +210,7 @@ assert(downLevel(`function (a,...,c){}`), `function (a, c) { c = arguments["leng
|
|
|
196
210
|
assert(downLevel(`(...a) => k`), `var slice_ = Array["prototype"]["slice"];\r\nfunction () { var a = slice_["call"](arguments, 0); return k }`)
|
|
197
211
|
assert(downLevel(`for await(o of os) noSymbol`), `return async_(
|
|
198
212
|
function () {
|
|
199
|
-
return [
|
|
213
|
+
return [8, 8]
|
|
200
214
|
},
|
|
201
215
|
function () {
|
|
202
216
|
_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]
|
|
@@ -208,19 +222,22 @@ function (_1) {
|
|
|
208
222
|
_2 = _1; _ = _2; return [1, 0]
|
|
209
223
|
},
|
|
210
224
|
function () {
|
|
211
|
-
_2 = !_["done"]; if (!_2) return [
|
|
225
|
+
_2 = !_["done"]; if (!_2) return [2, 0]; _2 = _["value"]; return [_2, 1]
|
|
226
|
+
},
|
|
227
|
+
function (_1) {
|
|
228
|
+
_2 = _1; o = _2; _2 = (true)
|
|
212
229
|
},
|
|
213
230
|
function () {
|
|
214
231
|
if (!_2) return [2, 0]; noSymbol; _2 = _0["next"](); return [_2, 1]
|
|
215
232
|
},
|
|
216
233
|
function (_1) {
|
|
217
|
-
_2 = _1; _ = _2; return [-
|
|
234
|
+
_2 = _1; _ = _2; return [-3, 0]
|
|
218
235
|
},
|
|
219
236
|
function () {
|
|
220
237
|
return [0, 9]
|
|
221
238
|
},
|
|
222
239
|
function () {
|
|
223
|
-
_2 = _
|
|
240
|
+
_2 = _; if (!_2) return [1, 0]; _2 = !_["done"]; if (!_2) return [1, 0]; _2 = _0["return"]; _2 = isFunction(_2)
|
|
224
241
|
},
|
|
225
242
|
function () {
|
|
226
243
|
if (!_2) return [1, 0]; _2 = _0["return"](); return [1, 0]
|
|
@@ -231,45 +248,59 @@ return [1, 9]
|
|
|
231
248
|
var _, _0, _2`)
|
|
232
249
|
assert(downLevel(`for await(var [o,s] of os) noSymbol`), `return async_(
|
|
233
250
|
function () {
|
|
234
|
-
return [
|
|
251
|
+
return [11, 8]
|
|
235
252
|
},
|
|
236
253
|
function () {
|
|
237
|
-
o; s;
|
|
254
|
+
o; s; _5 = Symbol["asyncIterator"]; _5 = os[_5]; if (_5) return [1, 0]; _5 = Symbol["iterator"]; _5 = os[_5]; if (_5) return [1, 0]; _5 = Symbol["iterator"]; _5 = Array["prototype"][_5]
|
|
255
|
+
},
|
|
256
|
+
function () {
|
|
257
|
+
_0 = _5; _0 = _0["call"](os); _5 = _0["next"](); return [_5, 1]
|
|
258
|
+
},
|
|
259
|
+
function (_4) {
|
|
260
|
+
_5 = _4; _ = _5; return [1, 0]
|
|
238
261
|
},
|
|
239
262
|
function () {
|
|
240
|
-
|
|
263
|
+
_5 = !_["done"]; if (!_5) return [5, 0]; _5 = _["value"]; return [_5, 1]
|
|
241
264
|
},
|
|
242
|
-
function (
|
|
243
|
-
|
|
265
|
+
function (_4) {
|
|
266
|
+
_5 = _4; _1 = _5; _6 = Symbol["iterator"]; _6 = _1[_6]; if (_6) return [1, 0]; _6 = Symbol["iterator"]; _6 = Array["prototype"][_6]
|
|
267
|
+
},
|
|
268
|
+
function () {
|
|
269
|
+
_6 = (_6); _2 = _6["call"](_1); _3 = undefined; _3 = _2["next"](); o = _3["value"]; _3 = _2["next"](); s = _3["value"]; _9 = !_3; if (_9) return [1, 0]; _9 = !_3["done"]
|
|
270
|
+
},
|
|
271
|
+
function () {
|
|
272
|
+
_9 = (_9); if (!_9) return [1, 0]; _9 = _2["return"]; _9 = isFunction(_9); if (!_9) return [1, 0]; _9 = _2["return"]()
|
|
244
273
|
},
|
|
245
274
|
function () {
|
|
246
|
-
_3 =
|
|
275
|
+
_3 = _9; _5 = (true)
|
|
247
276
|
},
|
|
248
277
|
function () {
|
|
249
|
-
if (!
|
|
278
|
+
if (!_5) return [2, 0]; noSymbol; _5 = _0["next"](); return [_5, 1]
|
|
250
279
|
},
|
|
251
|
-
function (
|
|
252
|
-
|
|
280
|
+
function (_4) {
|
|
281
|
+
_5 = _4; _ = _5; return [-6, 0]
|
|
253
282
|
},
|
|
254
283
|
function () {
|
|
255
284
|
return [0, 9]
|
|
256
285
|
},
|
|
257
286
|
function () {
|
|
258
|
-
|
|
287
|
+
_5 = _; if (!_5) return [1, 0]; _5 = !_["done"]; if (!_5) return [1, 0]; _5 = _0["return"]; _5 = isFunction(_5)
|
|
259
288
|
},
|
|
260
289
|
function () {
|
|
261
|
-
if (!
|
|
290
|
+
if (!_5) return [1, 0]; _5 = _0["return"](); return [1, 0]
|
|
262
291
|
},
|
|
263
292
|
function () {
|
|
264
293
|
return [1, 9]
|
|
265
294
|
})
|
|
266
|
-
var o, s, _, _0, _1, _3`)
|
|
267
|
-
assert(downLevel(`for(o of os) noSymbol`), `for (_ = 0
|
|
268
|
-
assert(downLevel(`for(var o of os) Symbol`), `try { for (var o, _0 = os[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol } finally { if (_
|
|
269
|
-
assert(downLevel(`for(var o of os) Symbol`), `try { for (var o, _0 = os[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol } finally { if (_
|
|
270
|
-
assert(downLevel(`for(var o of o)Symbol`), `try { for (var o, _1 = o, _0 = _1[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](_1), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol } finally { if (_
|
|
271
|
-
assert(downLevel(`for(var [a] of os)Symbol`), `try { for (var a, _0 = os[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (
|
|
272
|
-
|
|
295
|
+
var o, s, _, _0, _1, _2, _3, _5, _6, _7, _8, _9`);
|
|
296
|
+
assert(downLevel(`for(o of os) noSymbol`), `for (_ = 0; _ < os["length"] && (o = os[_], true); _++) noSymbol\r\nvar _, _0`)
|
|
297
|
+
assert(downLevel(`for(var o of os) Symbol`), `try { for (var o, _0 = os[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol } finally { if (_ && !_["done"] && isFunction(_0["return"])) _0["return"]() }\r\nvar _, _0`)
|
|
298
|
+
assert(downLevel(`for(var o of os) Symbol`), `try { for (var o, _0 = os[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](os), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol } finally { if (_ && !_["done"] && isFunction(_0["return"])) _0["return"]() }\r\nvar _, _0`)
|
|
299
|
+
assert(downLevel(`for(var o of o)Symbol`), `try { for (var o, _1 = o, _0 = _1[Symbol["iterator"]] || Array["prototype"][Symbol["iterator"]], _0 = _0["call"](_1), _ = _0["next"](); !_["done"] && (o = _["value"], true); _ = _0["next"]()) Symbol } finally { if (_ && !_["done"] && isFunction(_0["return"])) _0["return"]() }\r\nvar _, _0, _1`)
|
|
300
|
+
assert(downLevel(`for(var [a] of os)Symbol`), `try { for (var a, _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 = (!_3 || !_3["done"]) && isFunction(_2["return"]) && _2["return"](), true); _ = _0["next"]()) Symbol } finally { if (_ && !_["done"] && isFunction(_0["return"])) _0["return"]() }
|
|
301
|
+
var _, _0, _1, _2, _3`)
|
|
302
|
+
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"]() }
|
|
303
|
+
var _, _0, _1, _2, _3`)
|
|
273
304
|
assert(downLevel(`[...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\na = slice_["call"](a, 0)`)
|
|
274
305
|
assert(downLevel(`[c,...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\nc = a[0], a = slice_["call"](a, 1)`)
|
|
275
306
|
assert(downLevel(`[...a]=a`), `var slice_ = Array["prototype"]["slice"];\r\na = slice_["call"](a, 0)`)
|
|
@@ -286,10 +317,10 @@ var _0, _1 };`);
|
|
|
286
317
|
i++//异步或步进函数
|
|
287
318
|
assert(downLevel(`function *(){yield *a}`), `function () { return aster_(
|
|
288
319
|
function () {
|
|
289
|
-
_; _0 = 0;
|
|
320
|
+
_; _0 = 0; return [1, 0]
|
|
290
321
|
},
|
|
291
322
|
function () {
|
|
292
|
-
_3 = _0 <
|
|
323
|
+
_3 = _0 < a["length"]; if (!_3) return [1, 0]; _ = a[_0]; _3 = (true)
|
|
293
324
|
},
|
|
294
325
|
function () {
|
|
295
326
|
if (!_3) return [2, 0]; return [_, 3]
|
|
@@ -319,7 +350,7 @@ function () {
|
|
|
319
350
|
return [0, 9]
|
|
320
351
|
},
|
|
321
352
|
function () {
|
|
322
|
-
_2 = _
|
|
353
|
+
_2 = _; if (!_2) return [1, 0]; _2 = !_["done"]; if (!_2) return [1, 0]; _2 = _0["return"]; _2 = isFunction(_2)
|
|
323
354
|
},
|
|
324
355
|
function () {
|
|
325
356
|
if (!_2) return [1, 0]; _2 = _0["return"](); return [1, 0]
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
var fs = require("fs/promises");
|
|
2
|
+
var path = require("path");
|
|
3
|
+
var vm = require("vm");
|
|
4
|
+
var testpath = path.join(__dirname, '../../../test262');
|
|
5
|
+
var $262 = await async function () {
|
|
6
|
+
var $262 = {
|
|
7
|
+
evalScript(script) {
|
|
8
|
+
script = downLevel(script);
|
|
9
|
+
vm.runInNewContext(script);
|
|
10
|
+
},
|
|
11
|
+
createRealm() {
|
|
12
|
+
return;
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
$262.global = vm.createContext({ $262 });
|
|
16
|
+
var v8agent = await fs.readFile(path.join(testpath, "implementation-contributed/v8/test262/harness-agent.js"));
|
|
17
|
+
new Function("$262", [v8agent].join("\r\n"))($262);
|
|
18
|
+
return $262;
|
|
19
|
+
}();
|
|
20
|
+
var harness = await async function () {
|
|
21
|
+
var hpath = path.join(testpath, "harness");
|
|
22
|
+
var nameMap = { "-gc": "GC" };
|
|
23
|
+
var files = await fs.readdir(hpath, { withFileTypes: true });
|
|
24
|
+
var codes = await queue.call(files.filter(f => /\.js$/i.test(f.name)), async (f) => {
|
|
25
|
+
var n = f.name;
|
|
26
|
+
var p = path.join(hpath, n);
|
|
27
|
+
var code = scanner2(String(await fs.readFile(p)));
|
|
28
|
+
n = n.replace(/\.js$/i, '').replace(/\-\w+/g, function (a) {
|
|
29
|
+
return a in nameMap ? nameMap[a] : a[1].toUpperCase() + a.slice(2);
|
|
30
|
+
});
|
|
31
|
+
code.name = n;
|
|
32
|
+
return code;
|
|
33
|
+
});
|
|
34
|
+
var vars = {};
|
|
35
|
+
codes.sort((a, b) => {
|
|
36
|
+
var aenvs = a.envs;
|
|
37
|
+
var avars = a.vars;
|
|
38
|
+
var bvars = b.vars;
|
|
39
|
+
var benvs = b.envs;
|
|
40
|
+
for (var k in aenvs) if (k in bvars) return -1;
|
|
41
|
+
for (var k in benvs) if (k in avars) return 1;
|
|
42
|
+
return 0;
|
|
43
|
+
});
|
|
44
|
+
codes.forEach(c => extend(vars, c.vars));
|
|
45
|
+
return new Function("$262", 'print', codes.join("\r\n") + `\r\nreturn {${Object.keys(vars).map(a => `${a}:${a}`).join(',')}}`)($262, console.info);
|
|
46
|
+
}();
|
|
47
|
+
await async function () {
|
|
48
|
+
extend(harness, {
|
|
49
|
+
aster_,
|
|
50
|
+
async_,
|
|
51
|
+
asyncAster_,
|
|
52
|
+
isFunction,
|
|
53
|
+
restIter_,
|
|
54
|
+
rest_,
|
|
55
|
+
exec_,
|
|
56
|
+
})
|
|
57
|
+
extend(global, harness);
|
|
58
|
+
var rest = [path.join(testpath, 'test')];
|
|
59
|
+
var ignore = [
|
|
60
|
+
"dynamic-import",
|
|
61
|
+
"intl402",
|
|
62
|
+
"built-ins",
|
|
63
|
+
];
|
|
64
|
+
ignore.forEach(k => ignore[k] = true);
|
|
65
|
+
var testFiles = [];
|
|
66
|
+
while (rest.length) {
|
|
67
|
+
var p = rest.pop();
|
|
68
|
+
var names = await fs.readdir(p, { withFileTypes: true });
|
|
69
|
+
for (var n of names) {
|
|
70
|
+
if (n.name in ignore) continue;
|
|
71
|
+
var p1 = path.join(p, n.name);
|
|
72
|
+
if (n.isDirectory()) rest.push(p1);
|
|
73
|
+
else if (!/\.js$/i.test(p1)) continue;
|
|
74
|
+
else testFiles.push(p1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// testFiles = testFiles.slice(4053,9153);
|
|
78
|
+
testFiles.skip = 0;
|
|
79
|
+
var currentTest, currentText;
|
|
80
|
+
var currentIndex = 0;
|
|
81
|
+
var running = false;
|
|
82
|
+
var interupt = function (e) {
|
|
83
|
+
if (this == 'r' && !running) return;
|
|
84
|
+
console.fail(this, currentIndex, currentTest + "\r\n");
|
|
85
|
+
console.log(currentText);
|
|
86
|
+
if (e) console.trace(e);
|
|
87
|
+
process.exit();
|
|
88
|
+
};
|
|
89
|
+
process.on("uncaughtException", interupt.bind('e'));
|
|
90
|
+
process.on("unhandledRejection", interupt.bind('r'));
|
|
91
|
+
await queue.call(testFiles, async function (f, i) {
|
|
92
|
+
var runText = async function (text) {
|
|
93
|
+
/**
|
|
94
|
+
* @type {vm.RunningCodeInNewContextOptions}
|
|
95
|
+
*/
|
|
96
|
+
var ctxOptions = {
|
|
97
|
+
filename: f,
|
|
98
|
+
displayErrors: false,
|
|
99
|
+
};
|
|
100
|
+
running = true;
|
|
101
|
+
if (code.envs.$DONE) harness.$DONE = function (e) {
|
|
102
|
+
if (e) console.fail(ti, f + "\r\n"), console.log(currentText), console.trace(e), process.exit();
|
|
103
|
+
};
|
|
104
|
+
vm.runInThisContext(text, ctxOptions);
|
|
105
|
+
running = false;
|
|
106
|
+
};
|
|
107
|
+
var ti = `${i}/${testFiles.length}`;
|
|
108
|
+
var data = await fs.readFile(f);
|
|
109
|
+
var de;
|
|
110
|
+
try {
|
|
111
|
+
console.test("解析", ti, f);
|
|
112
|
+
var code = scanner2(String(data));
|
|
113
|
+
console.test("降级", ti, f);
|
|
114
|
+
var text = downLevel.code(code).toString();
|
|
115
|
+
} catch (e) {
|
|
116
|
+
de = e;
|
|
117
|
+
}
|
|
118
|
+
currentTest = f;
|
|
119
|
+
currentText = text;
|
|
120
|
+
currentIndex = ti;
|
|
121
|
+
if (text) {
|
|
122
|
+
try {
|
|
123
|
+
console.test("执行", ti, f);
|
|
124
|
+
await runText(text);
|
|
125
|
+
} catch (e) { de = e };
|
|
126
|
+
}
|
|
127
|
+
if (de) try {
|
|
128
|
+
try {
|
|
129
|
+
console.test("检查", ti, f);
|
|
130
|
+
await runText(data);
|
|
131
|
+
} catch (e) { de = null };
|
|
132
|
+
} catch { de = null; }
|
|
133
|
+
if (!text && de) {
|
|
134
|
+
console.log(de)
|
|
135
|
+
console.fail(ti, f);
|
|
136
|
+
throw de;
|
|
137
|
+
}
|
|
138
|
+
console.pass(path.relative(testpath, f));
|
|
139
|
+
}, 1, null);
|
|
140
|
+
console.log(`\r\n完成 ${testFiles.length} 个测试项!`);
|
|
141
|
+
}();
|
package/coms/compile/unstruct.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var { SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL, createString, skipAssignment, skipSentenceQueue, isHalfSentence, splice, relink, createExpressList, snapExpressHead, snapExpressFoot } = require("./common");
|
|
1
|
+
var { SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL, isEval, createString, skipAssignment, skipSentenceQueue, isHalfSentence, splice, relink, createExpressList, snapExpressHead, snapExpressFoot } = require("./common");
|
|
2
2
|
var scanner2 = require("./scanner2");
|
|
3
3
|
var RE = { type: STRAP, text: "@re" };// if (_) return
|
|
4
4
|
var RZ = { type: STRAP, text: "@rz" };// if (!_) return
|
|
@@ -139,6 +139,7 @@ var _switch = function (body, cx, unblock, result, getname) {
|
|
|
139
139
|
var m = o.first;
|
|
140
140
|
var tmp = [];
|
|
141
141
|
while (o[cy] !== m) cy++;
|
|
142
|
+
var default_ = null, case_ = null;
|
|
142
143
|
while (cy < o.length) {
|
|
143
144
|
var block = getblock(o, ++cy);
|
|
144
145
|
cy += block.length;
|
|
@@ -150,23 +151,25 @@ var _switch = function (body, cx, unblock, result, getname) {
|
|
|
150
151
|
var q = ternary(block, getnextname, true);
|
|
151
152
|
for (var q of q) if (q.length) pushstep(result, q);
|
|
152
153
|
var qe = q;
|
|
153
|
-
if (qe.name)
|
|
154
|
-
else case_ = scanner2(`return[]`),
|
|
155
|
-
pushstep(result, case_);
|
|
154
|
+
if (qe.name) case_ = scanner2(`if(${qn}===${qe.name})return[]`), pushstep(result, case_);
|
|
155
|
+
else default_ = case_ = scanner2(`return[]`), default_.ret_ = -1;
|
|
156
156
|
var by = cy;
|
|
157
157
|
m = o[cy];
|
|
158
158
|
while (m && (m.type !== STRAP || !/^(default|case)$/i.test(m.text))) m = o[++cy];
|
|
159
159
|
tmp.push(result.length - 1, case_[case_.length - 1], o.slice(by, cy));
|
|
160
160
|
}
|
|
161
|
-
if (!
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
tmp.push(result.length - 1, case_[case_.length - 1], []);
|
|
161
|
+
if (!default_) {
|
|
162
|
+
default_ = scanner2(`return[]`), default_.ret_ = -1;
|
|
163
|
+
tmp.push(result.length - 1, default_[default_.length - 1], []);
|
|
165
164
|
}
|
|
165
|
+
var default_r = default_[default_.length - 1];
|
|
166
|
+
pushstep(result, default_);
|
|
167
|
+
default_r.index = result.length - 1;
|
|
166
168
|
while (tmp.length) {
|
|
167
169
|
cy = tmp.shift();
|
|
168
170
|
q = tmp.shift();
|
|
169
171
|
block = tmp.shift();
|
|
172
|
+
if (default_r === q) cy = default_r.index;
|
|
170
173
|
q.push({ type: VALUE, text: String(result.length - cy) }, { type: STAMP, text: "," }, { type: VALUE, text: '0' });
|
|
171
174
|
relink(q);
|
|
172
175
|
unblock(block);
|
|
@@ -322,6 +325,9 @@ var pushstep = function (result, step) {
|
|
|
322
325
|
}
|
|
323
326
|
_return(step);
|
|
324
327
|
};
|
|
328
|
+
var patchresult = function (result) {
|
|
329
|
+
for (var cx = 0, dx = result.length; cx < dx; cx++)patchstep(result[cx], result.length - cx, 0);
|
|
330
|
+
};
|
|
325
331
|
var patchstep = function (r, nextindex, h) {
|
|
326
332
|
var name = r.name;
|
|
327
333
|
var o, i, x, p, n;
|
|
@@ -335,6 +341,7 @@ var patchstep = function (r, nextindex, h) {
|
|
|
335
341
|
r.splice(i, 1, ...scanner2(_withget(b.text)));
|
|
336
342
|
}
|
|
337
343
|
}
|
|
344
|
+
var changed = false;
|
|
338
345
|
for (i = r.length - 1; i >= h; i--) {
|
|
339
346
|
o = r[i];
|
|
340
347
|
if (o === RZ) {
|
|
@@ -347,6 +354,7 @@ var patchstep = function (r, nextindex, h) {
|
|
|
347
354
|
x = scanner2(`if(${name}!==null&&${name}!== undefined)return [${nextindex},0]`);
|
|
348
355
|
}
|
|
349
356
|
else continue;
|
|
357
|
+
changed = true;
|
|
350
358
|
var p = o.prev;
|
|
351
359
|
if (!p || p.type === STAMP && p.text === ";");
|
|
352
360
|
else x.unshift({ type: STAMP, text: ";" });
|
|
@@ -354,22 +362,15 @@ var patchstep = function (r, nextindex, h) {
|
|
|
354
362
|
if (!n || n.type === STAMP && n.text === ';');
|
|
355
363
|
else x.push({ type: STAMP, text: ';' });
|
|
356
364
|
r.splice(i, 1, ...x);
|
|
357
|
-
relink(r);
|
|
358
365
|
}
|
|
366
|
+
if (changed) relink(r);
|
|
367
|
+
return changed;
|
|
359
368
|
};
|
|
360
369
|
var flushqueue = function (result, queue) {
|
|
361
|
-
var savedLength = result.length;
|
|
362
|
-
var savedIndex = savedLength - 1;
|
|
363
|
-
var prev = result[savedIndex];
|
|
364
|
-
if (prev) var patch = prev.length;
|
|
365
370
|
for (var q of queue) pushstep(result, q);
|
|
366
|
-
queue = [];
|
|
367
|
-
if (ret_) {
|
|
368
|
-
if (prev) patchstep(prev, result.length - savedIndex, patch || 0);
|
|
369
|
-
result.slice(savedLength).forEach((a, i) => patchstep(a, result.length - savedLength - i, 0));
|
|
370
|
-
}
|
|
371
371
|
};
|
|
372
372
|
|
|
373
|
+
|
|
373
374
|
var _do = function (body, cx, unblock, result) {
|
|
374
375
|
var o = body[cx];
|
|
375
376
|
var label = o;
|
|
@@ -438,17 +439,6 @@ var remove_end_comma = function (o) {
|
|
|
438
439
|
splice(o, cx, o.length - cx);
|
|
439
440
|
}
|
|
440
441
|
};
|
|
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
|
-
};
|
|
452
442
|
var ispropcall = function (o) {
|
|
453
443
|
var n = o.next;
|
|
454
444
|
if (!n || n.type !== SCOPED && n.entry !== '(') return false;
|
|
@@ -493,7 +483,7 @@ var _invoke = function (t, getname) {
|
|
|
493
483
|
if (o.type === SCOPED && (o.entry === '[' || o.entry === "(")) {
|
|
494
484
|
var _nameindex = nameindex;
|
|
495
485
|
remove_end_comma(o);
|
|
496
|
-
var iseval =
|
|
486
|
+
var iseval = o.iseval = isEval(o);
|
|
497
487
|
var constStart = 0;
|
|
498
488
|
if (!iseval) {
|
|
499
489
|
for (var cy = 0; cy < o.length; cy++) {
|
|
@@ -522,7 +512,7 @@ var _invoke = function (t, getname) {
|
|
|
522
512
|
if (!iseval || m[m.length - 1] === o.last) {
|
|
523
513
|
var q = toqueue(m, getdeepname, 1);
|
|
524
514
|
var qe = q[q.length - 1];
|
|
525
|
-
splice(o, by, ey - by, { text: qe.name, type: EXPRESS });
|
|
515
|
+
splice(o, by, ey - by, ...qe ? [{ text: qe.name, type: EXPRESS }] : []);
|
|
526
516
|
cy = by + 1;
|
|
527
517
|
}
|
|
528
518
|
else {
|
|
@@ -567,9 +557,9 @@ var _invoke = function (t, getname) {
|
|
|
567
557
|
}
|
|
568
558
|
pushstep(result, t);
|
|
569
559
|
}
|
|
560
|
+
if (ret_) patchresult(result, 0);
|
|
570
561
|
return result;
|
|
571
562
|
};
|
|
572
|
-
|
|
573
563
|
var _await = function (t) {
|
|
574
564
|
var t0 = t[0];
|
|
575
565
|
if (t0.type === STRAP) {
|
|
@@ -615,7 +605,7 @@ var clone = function (o) {
|
|
|
615
605
|
var popass = function (explist) {
|
|
616
606
|
var asn = explist.pop();
|
|
617
607
|
var n;
|
|
618
|
-
if (!asn.ret_ && asn.length) {
|
|
608
|
+
if (asn && !asn.ret_ && asn.length) {
|
|
619
609
|
asn = createExpressList(asn);
|
|
620
610
|
if (asn.length > 1) {
|
|
621
611
|
explist.push(...asn.slice(0, asn.length - 1));
|
|
@@ -627,7 +617,7 @@ var popass = function (explist) {
|
|
|
627
617
|
}
|
|
628
618
|
}
|
|
629
619
|
else {
|
|
630
|
-
n = asn.name;
|
|
620
|
+
n = asn && asn.name;
|
|
631
621
|
asn = [{ type: EXPRESS, text: n }];
|
|
632
622
|
}
|
|
633
623
|
return [asn, n];
|
|
@@ -686,10 +676,12 @@ var ternary = function (body, getname, ret) {
|
|
|
686
676
|
if (!question.length) {
|
|
687
677
|
var b = body.slice(equalsend, bx);
|
|
688
678
|
relink(b);
|
|
689
|
-
var c = toqueue(body.slice(bx + 1, cx), getnextname, true);
|
|
690
|
-
var d = toqueue(body.slice(cx + 1), getnextname, true);
|
|
691
|
-
|
|
692
|
-
|
|
679
|
+
var c = toqueue(equals.concat(body.slice(bx + 1, cx)), getnextname, true);
|
|
680
|
+
var d = toqueue(equals.concat(body.slice(cx + 1)), getnextname, true);
|
|
681
|
+
if (!equals.length && ret) {
|
|
682
|
+
patchname(d, getnextname);
|
|
683
|
+
patchname(c, getnextname);
|
|
684
|
+
}
|
|
693
685
|
pushstep(d, stepReturn(1, 0, d));
|
|
694
686
|
pushstep(c, stepReturn(d.length + 1, 0, c));
|
|
695
687
|
pushstep(explist, scanner2(`if(${getCondition(b, function (b) {
|
|
@@ -707,9 +699,12 @@ var ternary = function (body, getname, ret) {
|
|
|
707
699
|
qe.text = String(explist.length - qi);
|
|
708
700
|
explist.push(...d);
|
|
709
701
|
hasquestion = true;
|
|
710
|
-
|
|
702
|
+
return explist;
|
|
711
703
|
}
|
|
712
704
|
}
|
|
705
|
+
else if (o.text === "=>") {
|
|
706
|
+
cx = skipAssignment(body, cx + 1);
|
|
707
|
+
}
|
|
713
708
|
else if (powermap[o.text] === powermap["="]) {
|
|
714
709
|
var ass = toqueue(body.slice(equalsend, cx), getnextname, false);
|
|
715
710
|
var [ass1, n = ++eqused] = popass(ass);
|
|
@@ -731,6 +726,7 @@ var ternary = function (body, getname, ret) {
|
|
|
731
726
|
explist = [r];
|
|
732
727
|
}
|
|
733
728
|
else {
|
|
729
|
+
if (equals.length && bd.length === 1 && bd[0].type === SCOPED && bd[0].entry === '(' && skipAssignment(bd[0], 0) === bd[0].length) bd = bd[0];
|
|
734
730
|
explist = _express(bd, getnextname, equalsend > skip || ret);
|
|
735
731
|
}
|
|
736
732
|
}
|
|
@@ -1142,12 +1138,18 @@ function toqueue(body, getname, ret = false, result = []) {
|
|
|
1142
1138
|
while (labels.length) {
|
|
1143
1139
|
var e = labels[labels.length - 1];
|
|
1144
1140
|
if (e.type !== LABEL) break;
|
|
1145
|
-
|
|
1141
|
+
var ei = scopes.lastIndexOf(e.scope);
|
|
1142
|
+
if (ei === scopes.length - 1) {
|
|
1143
|
+
if (cx < e.final) break;
|
|
1144
|
+
}
|
|
1145
|
+
else if (ei >= 0) break;
|
|
1146
1146
|
_poplabel();
|
|
1147
1147
|
}
|
|
1148
1148
|
|
|
1149
1149
|
if (o.type === LABEL) {
|
|
1150
1150
|
o.scope = scopes[scopes.length - 1];
|
|
1151
|
+
o.final = body.indexOf(skipSentenceQueue(o.next), cx);
|
|
1152
|
+
if (o.final < 0) o.final = body.length;
|
|
1151
1153
|
labels.push(o);
|
|
1152
1154
|
var next = o.next;
|
|
1153
1155
|
if (next && next.type === SCOPED && next.entry === '{') {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
var unstruct = require('./unstruct');
|
|
2
2
|
var scanner2 = require("./scanner2");
|
|
3
|
-
var { createString } = require("./common");
|
|
4
|
-
var r =
|
|
3
|
+
var { createString, STRAP } = require("./common");
|
|
4
|
+
var r = 12;
|
|
5
|
+
var innerjs = new Javascript;
|
|
6
|
+
innerjs.defaultType = STRAP;
|
|
5
7
|
function test(codetext, expect, ret = false) {
|
|
6
|
-
var code = scanner2(codetext), i = -2;
|
|
8
|
+
var code = scanner2(codetext, innerjs), i = -2;
|
|
7
9
|
try { code = unstruct(code, () => ++i >= 0 ? "_" + i : '_', ret && "@"); } catch (e) { console.log(r); throw e }
|
|
8
10
|
assert(code.map(createString).join(";\r\n "), expect, r++);
|
|
9
11
|
}
|
|
@@ -18,7 +20,7 @@ test('a * a + b * c * c ** d', "_ = a * a, _0 = b * c, _1 = c ** d, _0 = _0 * _1
|
|
|
18
20
|
test('a * a || b * c * c ** d', "_ = a * a @re _ = b * c, _0 = c ** d, _ * _0");
|
|
19
21
|
test('a * a || b * c || c * d', "_ = a * a @re _ = b * c @re c * d");
|
|
20
22
|
test('a || b || c', "_ = a; if (_) return [1, 0]; _ = b; if (_) return [1, 0]; c", true);
|
|
21
|
-
test('a?b:c', "if (!a) return [1, 0];
|
|
23
|
+
test('a?b:c', "if (!a) return [1, 0]; b; return [2, 0];\r\n c; return [1, 0]");
|
|
22
24
|
test('a * a && b * c * c ** d', "_ = a * a @rz _ = b * c, _0 = c ** d, _ * _0");
|
|
23
25
|
test('a = 1 + 2', "a = 1 + 2", true);
|
|
24
26
|
test('a = b', "a = b", true);
|
|
@@ -36,11 +38,13 @@ test('a * a ?? b * c * c ** d', "_ = a * a; if (_ !== null && _ !== undefined) r
|
|
|
36
38
|
test('a * a && await b*c', "_ = a * a; if (!_) return [2, 0]; _ = b; return [_, 1];\r\n _ = @; _ * c", true);
|
|
37
39
|
test("await a", "_ = a; return [_, 1]", true);
|
|
38
40
|
test("yield a", "return [a, 3]", true);
|
|
41
|
+
test("!a.done&&(b=await a.value)", "_ = !a.done; if (!_) return [2, 0]; _ = a.value; return [_, 1];\r\n _ = @; b = _; (_)", true);
|
|
42
|
+
test("a=1?2:3",`if (false) return [1, 0]; a = 2; return [2, 0];\r\n a = 3; return [1, 0]`)
|
|
39
43
|
test("await a()", "_ = a(); return [_, 1]", true);
|
|
40
44
|
test("yield a()", "_ = a(); return [_, 3]", true);
|
|
41
45
|
test("a = await a()", "_ = a(); return [_, 1];\r\n _ = @; a = _", true);
|
|
42
46
|
test("a = yield a()", "_ = a(); return [_, 3];\r\n _ = @; a = _", true);
|
|
43
|
-
test("(1+ +1)", "_ =
|
|
47
|
+
test("(1+ +1)", "_ = 1 + +1; (_)", true);
|
|
44
48
|
test("await a(await b)", "_ = b; return [_, 1];\r\n _ = @; _ = a(_); return [_, 1]", true);
|
|
45
49
|
test("await a(await b).s(await c)", "_ = b; return [_, 1];\r\n _ = @; _ = a(_); _0 = c; return [_0, 1];\r\n _0 = @; _ = _.s(_0); return [_, 1]", true);
|
|
46
50
|
test("a*a + await a(await b).s(await c)", "_ = a * a, _0 = b; return [_0, 1];\r\n _0 = @; _0 = a(_0); _1 = c; return [_1, 1];\r\n _1 = @; _0 = _0.s(_1); return [_0, 1];\r\n _0 = @; _ + _0", true);
|
|
@@ -114,4 +118,5 @@ test("//aaa", '//aaa', true);
|
|
|
114
118
|
test("menus[0].name+='aaa'", "_ = menus[0]; _0 = _.name + 'aaa'; _.name = _0", true);
|
|
115
119
|
test("menus[a+b].name+='aaa'", "_ = a + b; _ = menus[_]; _0 = _.name + 'aaa'; _.name = _0", true);
|
|
116
120
|
test("menus[a+b]()", "_ = a + b; menus[_]()", true);
|
|
121
|
+
test(`switch(a){default: a;case 1:b;}`, 'if (a === 1) return [2, 0]; return [1, 0];\r\n a; return [1, 0];\r\n b; return [1, 0]', true);
|
|
117
122
|
test("loop:{a=b;if(a) continue loop}", "a = b; if (a) return [0, 0]", true);
|
package/coms/kugou/dance.js
CHANGED
|
@@ -62,6 +62,7 @@ var danceIcon = lazy(async function (theta) {
|
|
|
62
62
|
*/
|
|
63
63
|
function draw(buffer) {
|
|
64
64
|
danceIcon(buffer.theta);
|
|
65
|
+
if (!buffer.length) return;
|
|
65
66
|
var canvas = this;
|
|
66
67
|
var context = canvas.getContext("2d");
|
|
67
68
|
if (canvas.width !== canvas.offsetWidth * devicePixelRatio) canvas.width = canvas.offsetWidth * devicePixelRatio;
|
package/coms/kugou/playList.html
CHANGED