efront 3.34.11 → 3.35.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 (76) hide show
  1. package/apps/moue/content//344/275/240/345/245/275/344/270/226/347/225/214.vue +21 -0
  2. package/apps/moue/content//344/275/240/345/245/275/345/274/200/345/217/221/350/200/205.html +1 -0
  3. package/apps/moue/{home/index.js → content//344/275/240/345/245/275/345/274/200/345/217/221/350/200/205.js} +4 -2
  4. package/apps/moue/content//344/275/240/345/245/275/345/274/200/345/217/221/350/200/205.less +4 -0
  5. package/apps/moue/home/index2.vue +97 -18
  6. package/apps/moue/index.html +1 -1
  7. package/coms/basic/ArrayFill.md +9 -0
  8. package/coms/basic/awaitable.md +10 -0
  9. package/coms/basic/backEach.md +7 -0
  10. package/coms/basic/combine.md +23 -0
  11. package/coms/basic/renderExpress.js +1 -1
  12. package/coms/basic/wait.js +5 -0
  13. package/coms/basic_/readme.md +27 -9
  14. package/coms/compile/#/350/257/264/346/230/216.md +1 -0
  15. package/coms/compile/Html.js +263 -0
  16. package/coms/compile/Html_test.js +5 -0
  17. package/coms/compile/Javascript.js +594 -0
  18. package/coms/compile/Program.js +664 -0
  19. package/coms/compile/autoenum.js +179 -0
  20. package/coms/compile/autoenum_test.js +17 -0
  21. package/coms/compile/autoeval.js +50 -0
  22. package/coms/compile/autoeval_test.js +28 -0
  23. package/coms/compile/autoiota.js +121 -0
  24. package/coms/compile/breakcode.js +83 -0
  25. package/coms/compile/common.js +1063 -0
  26. package/coms/compile/downLevel.js +901 -0
  27. package/coms/compile/downLevel_test.js +111 -0
  28. package/coms/compile/formatcode.js +57 -0
  29. package/coms/compile/iso8859.js +9 -0
  30. package/coms/compile/iso8859_test.js +2 -0
  31. package/coms/compile/keywords.js +6 -0
  32. package/coms/compile/namelist.js +154 -0
  33. package/coms/compile/namelist_test.js +7 -0
  34. package/coms/compile/polyfill.js +31 -0
  35. package/coms/compile/required.js +20 -0
  36. package/coms/compile/richcss.js +237 -0
  37. package/coms/compile/richcss_test.js +7 -0
  38. package/coms/compile/scanner.js +653 -0
  39. package/coms/compile/scanner2.js +202 -0
  40. package/coms/compile/scanner2_test.js +110 -0
  41. package/coms/compile/scanner_test.js +10 -0
  42. package/coms/compile/unstruct.js +712 -0
  43. package/coms/compile/unstruct_test.js +54 -0
  44. package/coms/compile/washcode.js +237 -0
  45. package/coms/compile/washcode_test.js +17 -0
  46. package/coms/docs/helps.js +71 -0
  47. package/coms/docs/markdown.js +248 -0
  48. package/coms/frame/route.js +1 -1
  49. package/coms/reptile/colored_console.js +2 -1
  50. package/coms/zimoli/cless.js +1 -0
  51. package/coms/zimoli/css.js +1 -9
  52. package/coms/zimoli/html.js +1 -1
  53. package/coms/zimoli/menu.js +1 -1
  54. package/coms/zimoli/menuItem.html +1 -1
  55. package/coms/zimoli/menuItem.js +1 -1
  56. package/coms/zimoli/render.js +14 -3
  57. package/coms/zimoli/text.js +1 -1
  58. package/coms/zimoli/transition.js +4 -4
  59. package/coms/zimoli/tree.js +2 -2
  60. package/coms/zimoli/zimoli.js +39 -12
  61. package/docs/compare.md +5 -5
  62. package/docs/components.jsp +17 -0
  63. package/docs/index.html +16 -26
  64. package/docs/main.xht +182 -0
  65. package/docs/mark.xht +166 -0
  66. package/docs/welcome.jsp +7 -0
  67. package/docs//345/221/275/344/273/244.xht +100 -0
  68. package/docs//347/211/210/346/234/254/350/257/264/346/230/216.md +9 -0
  69. package/docs//347/273/204/344/273/266.xht +87 -0
  70. package/package.json +1 -1
  71. package/public/efront.js +1 -1
  72. package/readme.md +6 -11
  73. package/apis/docs/getAllComponents.js +0 -69
  74. package/apps/moue/home/index.html +0 -1
  75. package/apps/moue/home/index.less +0 -0
  76. package/docs/main.js +0 -17
@@ -0,0 +1,712 @@
1
+ var { SPACE, COMMENT, EXPRESS, STRAP, STAMP, SCOPED, VALUE, LABEL, createString, skipAssignment } = require("./common");
2
+ var scanner2 = require("./scanner2");
3
+ var RE = { type: STRAP, text: "@re" };// if (_) return
4
+ var RZ = { type: STRAP, text: "@rz" };// if (!_) return
5
+ var RETURN = { type: STRAP, text: "@ret" };// return;
6
+ var NEXT = { type: STRAP, text: "@next" };// return;
7
+ var relink = scanner2.Program.prototype.relink;
8
+ var _break = function (body, cx, result) {
9
+ var label;
10
+ do {
11
+ var o = body[++cx];
12
+ if (!o || o.type === SPACE || o.type === STAMP && o.text === ';') break;
13
+ if (o.type === EXPRESS) label = o.text;
14
+ } while (true);
15
+ var bx = cx;
16
+ if (label) {
17
+ for (var cx = labels.length - 1; cx >= 0; cx--) {
18
+ var b = labels[cx];
19
+ if (b.type === LABEL && b.text === label) {
20
+ if (!b.breaks) b.breaks = [];
21
+ var _b = scanner2(`return[]`);
22
+ addresult(result, _b);
23
+ b.breaks.push(_b);
24
+ break;
25
+ }
26
+ }
27
+ }
28
+ else {
29
+ for (var cx = labels.length - 1; cx >= 0; cx--) {
30
+ var b = labels[cx];
31
+ if (b.type !== LABEL) {
32
+ if (!b.breaks) b.breaks = [];
33
+ var _b = scanner2(`return[]`);
34
+ addresult(result, _b);
35
+ b.breaks.push(_b);
36
+ break;
37
+ }
38
+ }
39
+ }
40
+ return bx;
41
+ };
42
+ var evals = [];
43
+
44
+ var _with = function (body, cx, unblock, result, getname) {
45
+ var o = body[cx];
46
+ var c = o.next;
47
+ while (body[cx] !== c) cx++;
48
+ unblock(c);
49
+ addresult(result, []);
50
+ evals.push(getname(0));
51
+ var block = getblock(body, ++cx);
52
+ cx += block.length;
53
+ unblock(block);
54
+ evals.pop();
55
+ return cx;
56
+ };
57
+ var _withget = function (text) {
58
+ var index = text.indexOf('.');
59
+ if (index < 0) index = text.length;
60
+ var name = text.slice(0, index);
61
+ var prop = text.slice(index);
62
+ return `withget_("${name}",[${evals.join(',')}],${name})${prop}`;
63
+ };
64
+ var _withset = function (text, tmpname, valname) {
65
+ var index = text.indexOf(".");
66
+ if (index < 0) index = text.length;
67
+ var name = text.slice(0, index);
68
+ return `if(${tmpname}=with_("${name}",[${evals.join(",")}]))${tmpname}.${text}=${valname};else ${text}=${valname};`;
69
+ };
70
+ var _switch = function (body, cx, unblock, result, getname) {
71
+ var o = body[cx];
72
+ o = o.next;
73
+ if (!o) return;
74
+ unblock(o);
75
+ o = o.next;
76
+ while (body[cx++] !== o);
77
+ if (!o) return;
78
+ var cy = 0;
79
+ var m = o.first;
80
+ var tmp = [];
81
+ while (o[cy] !== m) cy++;
82
+ while (cy < o.length) {
83
+ var block = getblock(o, ++cy);
84
+ cy += block.length + 1;
85
+ var getnextname = function (deep) {
86
+ return getname(deep + 1);
87
+ };
88
+ var q = _express(block, getnextname, true);
89
+ for (var q of q) addresult(result, q);
90
+ addresult(result, scanner2(`if(${getname(0)}===${getname(1)})return[]`));
91
+ var by = cy;
92
+ m = o[cy];
93
+ while (m && (m.type !== STRAP || m.text !== 'case')) m = o[++cy];
94
+ tmp.push(result.length - 1, o.slice(by, cy));
95
+ }
96
+ while (tmp.length) {
97
+ cy = tmp.shift();
98
+ block = tmp.shift();
99
+ var q = result[cy];
100
+ q[q.length - 1].push({ type: VALUE, text: String(result.length - cy) });
101
+ relink(q[q.length - 1]);
102
+ for (var cy = 0, dy = block.length; cy < dy; cy++) {
103
+ var b = getblock(block, cy);
104
+ cy += b.length;
105
+ var r = toqueue(b, getnextname, true);
106
+ for (var r of r) {
107
+ result.push(r);
108
+ }
109
+ }
110
+ addresult(result, []);
111
+ }
112
+ return cx;
113
+ };
114
+ var _for = function (body, cx, unblock, result, tmpname) {
115
+ var o = body[cx];
116
+ o = o.next;
117
+ var m = o.first;
118
+ if (m.type === STRAP && /^(let|const|var)$/.test(m.text)) {
119
+ m = m.next;
120
+ }
121
+ var cy = 0;
122
+ while (o[cy] !== m) cy++;
123
+ var block = getblock(o, cy);// init
124
+ cy += block.length + 1;
125
+ unblock(block, ...scanner2(`[1]`));
126
+ var block1 = getblock(o, cy);// condition
127
+ cy += block1.length + 1;
128
+ var block2 = getblock(o, cy);// next
129
+ while (body[cx] !== o) cx++;
130
+ var block_ = getblock(body, ++cx);// body
131
+ cx += block_.length;
132
+ unblock(block1);
133
+ result[result.length - 1].pop();
134
+ result[result.length - 1].pop();
135
+ relink(result[result.length - 1]);
136
+ var b = scanner2(`if(!${tmpname})return []`)
137
+ result[result.length - 1].push(...b);
138
+ relink(result[result.length - 1]);
139
+ var i = result.length;
140
+ unblock(block_);
141
+ unblock(block2);
142
+ result[result.length - 1].pop();
143
+ result[result.length - 1].push(...scanner2(`[${i - result.length}]`));
144
+ b[b.length - 1].push(result.length - i + 1);
145
+ relink(result[result.length - 1]);
146
+ return cx;
147
+ };
148
+ var _while = function (body, cx, unblock, result, tmpname) {
149
+ var o = body[cx];
150
+ o = o.next;
151
+ while (body[cx] !== o) cx++;
152
+ var b = scanner2(`if(!${tmpname})return []`)
153
+ unblock(o);
154
+ result[result.length - 1].pop();
155
+ result[result.length - 1].pop();
156
+ result[result.length - 1].push(...b);
157
+ relink(result[result.length - 1]);
158
+ var block = getblock(body, ++cx);
159
+ var i = result.length;
160
+ cx += block.length;
161
+ unblock(block);
162
+ result.push(scanner2(`return [${i - result.length - 1}]`));
163
+ b[b.length - 1].push(result.length - i + 1);
164
+ return cx;
165
+ };
166
+ var addresult = function (result, next) {
167
+ var q = result[result.length - 1];
168
+ if (q && q._return) {
169
+ q.pop(), q.pop();
170
+ if (next.length) {
171
+ q.push(...next);
172
+ relink(q);
173
+ }
174
+ else {
175
+ q.pop();
176
+ }
177
+ q._return = next._return;
178
+ }
179
+ else {
180
+ if (next.length) result.push(next);
181
+ }
182
+ };
183
+ var _do = function (body, cx, unblock, result, tmpname) {
184
+ var o = body[cx];
185
+ o = o.next;
186
+ var i = result.length;
187
+ unblock(o);
188
+ o = o.next.next;
189
+ unblock(o);
190
+ var b = scanner2(`return [${tmpname}?${i - result.length}:${1}]`);
191
+ addresult(result, b);
192
+ while (body[cx] !== o) cx++;
193
+ return cx;
194
+ };
195
+
196
+ var needbreak = function (o) {
197
+ return o === RE || o === RZ || o === RETURN || o === NEXT;
198
+ };
199
+ var _return = function (q) {
200
+ var result = [];
201
+ var tmp = [];
202
+ for (var q of q) {
203
+ tmp.push(q);
204
+ if (q.type === EXPRESS && q.next && q.next.type === STAMP && q.next.text === '=') {
205
+ tmp.name = q.text;
206
+ }
207
+
208
+ if (needbreak(q)) {
209
+ result.push(tmp);
210
+ tmp = [];
211
+ }
212
+ }
213
+ if (tmp.length) result.push(tmp);
214
+ result.forEach((r, i) => {
215
+ var e = r[r.length - 1];
216
+ if (!needbreak(e)) return;
217
+ r.pop();
218
+ var semicolon = r[r.length - 1];
219
+ semicolon = semicolon && semicolon.type === STAMP && semicolon.text === ';';
220
+ var x;
221
+ if (e === RZ) {
222
+ x = scanner2(`if(!${r.name})return [${result.length - i},]`);
223
+ }
224
+ else if (e === RE) {
225
+ x = scanner2(`if(${r.name})return [${result.length - i},]`);
226
+ }
227
+ else if (e === RETURN) {
228
+ if (result.length === 1) r._return = true;
229
+ x = scanner2(`return [${result.length - i},]`);
230
+ }
231
+ else if (e === NEXT) {
232
+ x = scanner2(`return [1,]`);
233
+ }
234
+ if (r.name) {
235
+ if (!semicolon) r.push({ type: STAMP, text: ';' });
236
+ x[x.length - 1].push({ type: EXPRESS, text: r.name });
237
+ relink(x[x.length - 1]);
238
+ r.push(...x);
239
+ }
240
+ else {
241
+ x[x.length - 1].push(...r);
242
+ r.splice(0, r.length, ...x);
243
+ }
244
+ relink(r);
245
+ });
246
+ return result;
247
+ };
248
+ var power_map = {};
249
+ [
250
+ '=,+=,-=,*=,/=,%=,|=,&=,^=,**=,~='/* 1 */,
251
+ '=>'/* 2 */, '?,:'/* 3 */, '&&,||'/* 4 */, '&,|,^'/* 5 */,
252
+ 'instanceof,in,==,>=,<=,>,<,!=,!==,===,!in,!instanceof'/* 6 */,
253
+ '>>,>>>,<<'/* 7 */, '+,-'/* 8 */, '*,/,%'/* 9 */, '**'/* 10 */,
254
+ 'typeof,await,yield,new,!,~'/* 11 */, '++,--'/* 12 */
255
+ ].forEach((pp, i) => {
256
+ pp.split(",").forEach(p => {
257
+ power_map[p] = i + 1;
258
+ })
259
+ });
260
+ var remove_end_comma = function (o) {
261
+ if (!o.length || o.type !== SCOPED || o.entry === '[') return;
262
+ for (var cx = o.length - 1; cx >= 0; cx--) {
263
+ var m = o[cx];
264
+ if (m.type !== SPACE && m.type !== COMMENT) {
265
+ break;
266
+ }
267
+ }
268
+ if (m && m.type === STAMP && m.text === ',') {
269
+ o.splice(cx, cx + 1);
270
+ }
271
+ };
272
+ var _invoke = function (t, getname) {
273
+ var nameindex = 0;;
274
+ var getdeepname = function (deep = 0) {
275
+ return getname(nameindex + deep)
276
+ };
277
+ var result = [];
278
+ var cache = [];
279
+ var queue = [];
280
+ var bx = 0;
281
+ for (var cx = 0; cx < t.length; cx++) {
282
+ var o = t[cx];
283
+ if (o.type === STAMP && /^[,;]$/.test(o.text)) {
284
+ if (queue.length) queue.push({ type: STAMP, text: ';' });
285
+ queue.push(...t.splice(bx, cx + 1));
286
+ cx += bx - cx - 1;
287
+ queue.pop();
288
+ bx = cx + 1;
289
+ continue;
290
+ }
291
+ if (o.type === SCOPED && o.entry === '[' || o.entry === "(") {
292
+ var _nameindex = nameindex;
293
+ remove_end_comma(o);
294
+ var cy = 0;
295
+ for (var cy = 0; cy < o.length; cy++) {
296
+ var by = cy;
297
+ cy = skipAssignment(o, cy);
298
+ if (by === cy) continue;
299
+ var m = o.slice(by, cy);
300
+ if (m.length === 1 && (m[0].type === EXPRESS && /\./.test(m[0].text) || m[0].type === VALUE)) {
301
+ continue;
302
+ }
303
+ var q = toqueue(m, getdeepname, true);
304
+ o.splice(by, cy, { text: getdeepname(0), type: EXPRESS });
305
+ cy -= cy - by - 1;
306
+ nameindex++;
307
+ q.forEach(q => {
308
+ if (q._return) {
309
+ q.splice(q.length - 3);
310
+ }
311
+ cache.push(q);
312
+ });
313
+ }
314
+ if (!cache.length) continue;
315
+ nameindex = _nameindex;
316
+ if (queue.length) result.push(queue), queue = [];
317
+ result.push(...cache);
318
+ cache = [];
319
+ var m = t.splice(bx, cx + 1);
320
+ cx -= m.length;
321
+ if (bx + 1 < t.length && (t[bx].type === SCOPED || t[bx].type === EXPRESS)) t.splice(bx, 0, ...scanner2(`${getname(0)}=${getname(nameindex)}`));
322
+ relink(m);
323
+ result.push(m);
324
+ nameindex++;
325
+ bx = cx + 1;
326
+ }
327
+ }
328
+ if (t.length) {
329
+ if (!queue.length && result.length) queue = result.pop();
330
+ if (queue.length) queue.push({ type: STAMP, text: ';' });
331
+ queue.push(...t);
332
+ }
333
+ if (queue.length) result.push(..._return(queue, getname(0)));
334
+ return result;
335
+ };
336
+
337
+ var _await = function (t) {
338
+ if (t[0].type === STRAP && t[0].text === 'await') {
339
+ t.shift();
340
+ return true;
341
+ }
342
+ return false;
343
+ };
344
+ var needcomma = function (q) {
345
+ if (!q.length) return false;
346
+ var e = q[q.length - 1];
347
+ return !needbreak(e);
348
+ };
349
+ var ternary = function (body, getname, ret) {
350
+ var question = [];
351
+ var res = [];
352
+ for (var cx = 0, dx = body.length; cx < dx; cx++) {
353
+ var o = body[cx];
354
+ if (o.type == STAMP && o.text === '?') {
355
+ question.push(cx);
356
+ }
357
+ else if (o.type === STAMP && o.text === ":") {
358
+ var bx = question.pop();
359
+ if (!question.length) {
360
+ var b = body.slice(0, bx);
361
+ b = _express(b, getname, true);
362
+ b[b.length - 1].pop();
363
+ b[b.length - 1].pop();
364
+ var c = ternary(body.slice(bx + 1, cx), getname, true);
365
+ var d = ternary(body.slice(cx + 1), getname, true);
366
+ b[b.length - 1].push(...scanner2(`return [${getname(0)}?1:${c.length + 1},${getname(0)}]${ret ? '' : ';'}`));
367
+ c[c.length - 1].pop();
368
+ c[c.length - 1].pop();
369
+ c[c.length - 1].push(...scanner2(`return [${d.length + 1},${getname(0)}]${ret ? '' : ';'}`));
370
+ res.push(...b);
371
+ res.push(...c);
372
+ res.push(...d);
373
+ }
374
+ }
375
+ }
376
+ if (!res.length) return _express(body, getname, ret);
377
+ if (!ret) res = Array.prototype.concat.apply([], res), relink(res);
378
+ return res;
379
+ };
380
+ var _express = function (body, getname, ret) {
381
+ var result = [];
382
+ var q = [];
383
+ var needpunc = false;
384
+ var bx = 0;
385
+ var cache = [];
386
+ var n = null;
387
+ var nameindex = 0;
388
+ var maxindex = 0;
389
+ var getdeepname = function (deep = 0) {
390
+ return getname(maxindex + deep);
391
+ };
392
+ var ax = 0;
393
+ var exps = [];
394
+ for (var cx = 0, dx = body.length; cx < dx; cx++) {
395
+ var o = body[cx];
396
+ if (o.type === COMMENT || o.type === SPACE) continue;
397
+ if (o.type === STRAP || o.type === STAMP) {
398
+ var p = 0;
399
+ if (o.text === '=') {
400
+ ax = exps.length;
401
+ bx = cx + 1;
402
+ continue;
403
+ }
404
+ if (/[!~]|\+\-|\-\+/.test(o.text)) p = power_map["!"];
405
+ if (!p && /[\+\-]/.test(o.text)) p = needpunc ? power_map["+"] : power_map["!"];
406
+ if (!p) p = power_map[o.text];
407
+ needpunc = false;
408
+ var b = body.slice(bx, cx + 1);
409
+ bx = cx + 1;
410
+ b.index = nameindex;
411
+ if (!cache.length || p > cache[cache.length - 1]) {
412
+ cache.push(b, p);
413
+ continue;
414
+ }
415
+ var n = scanner2(`${getname(nameindex)}`);
416
+ n.index = nameindex;
417
+ nameindex = cache[cache.length - 2].index;
418
+ n.push(b.pop());
419
+ while (cache.length && cache[cache.length - 1] >= p) {
420
+ if (needcomma(q)) q.push({ type: STAMP, text: ',' });
421
+ var p0 = cache.pop();
422
+ var t = cache.pop();
423
+ var isawait = _await(t);
424
+ if (p0 > power_map["="]) q.push(...scanner2(`${getname(t.index)}=`));
425
+ q.push.apply(q, t);
426
+ q.push.apply(q, b);
427
+ if (isawait) q.push(NEXT);
428
+ }
429
+ nameindex++;
430
+ if (maxindex < nameindex) maxindex = nameindex;
431
+ if (p == power_map["||"]) {
432
+ if (o.text === '||') {
433
+ q.push(RE);
434
+ }
435
+ else if (o.text === '&&') {
436
+ q.push(RZ);
437
+ }
438
+ nameindex = 0;
439
+ } else {
440
+ cache.push(n, p);
441
+ }
442
+ }
443
+ else {
444
+ needpunc = true;
445
+ if (o.type === EXPRESS) {
446
+ exps.push(o);
447
+ }
448
+ }
449
+ }
450
+ var b = body.slice(bx, cx);
451
+ if (cache.length) while (cache.length) {
452
+ var p = cache.pop();
453
+ if (needcomma(q)) q.push({ type: STAMP, text: ',' });
454
+ nameindex = cache[cache.length - 1].index;
455
+ var t = cache.pop();
456
+ var isawait = _await(t, nameindex);
457
+ if (p > power_map["="] && (ret || cache.length > 0)) q.push(...scanner2(`${getname(nameindex)}=`));
458
+ q.push.apply(q, t);
459
+ q.push.apply(q, b);
460
+ if (isawait) q.push(NEXT);
461
+ b = [{ type: EXPRESS, text: getname(nameindex) }];
462
+ }
463
+ else {
464
+ if (ax === 1) {
465
+ if (evals.length) {
466
+ q.push.apply(q, scanner2(_withset(exps[0].text, getname(nameindex), createString(b))));
467
+ }
468
+ else {
469
+ q.push(exps[0], { type: STAMP, text: "=" });
470
+ q.push(...b);
471
+ }
472
+ exps.shift();
473
+ }
474
+ else if (ret && b.length || ax > 1) {
475
+ q.push(...scanner2(`${getname(nameindex)}=`));
476
+ q.push(...b);
477
+ }
478
+ else {
479
+ q.push(...b);
480
+ }
481
+ }
482
+ if (ax > 1) {
483
+ while (ax > 0) {
484
+ q.push({ type: STAMP, text: ';' });
485
+ var [e] = exps.splice(ax - 1, 1);
486
+ if (evals.length) {
487
+ _withset(e.text, getname(nameindex + 1), getname(nameindex));
488
+ }
489
+ else {
490
+ q.push(e);
491
+ q.push(...scanner2(`=${getname(nameindex)}`))
492
+ }
493
+ ax--;
494
+ }
495
+ }
496
+ if (evals.length && exps.length) for (var cx = q.length - 1; cx >= 0; cx--) {
497
+ var o = q[cx];
498
+ if (o.type !== EXPRESS) continue;
499
+ if (o === exps[exps.length - 1]) {
500
+ exps.pop();
501
+ q.splice(cx, 1, ...scanner2(_withget(o.text)));
502
+ if (!exps.length) {
503
+ break;
504
+ }
505
+ }
506
+ }
507
+ relink(q);
508
+ if (ret && !needbreak(q[q.length - 1]) && q.length) q.push(RETURN);
509
+ if (ret) result = _invoke(q, getdeepname);
510
+ return ret ? result : q;
511
+ };
512
+
513
+ var getblock = function (body, cx) {
514
+ var o = body[cx];
515
+ if (o.type === SCOPED && o.entry === '{') return [o];
516
+ var ax = cx;
517
+ do {
518
+ cx = skipAssignment(body, cx);
519
+ var o = body[cx];
520
+ if (!o || o.type !== STAMP || o.text !== ',') break;
521
+ cx++;
522
+ } while (o);
523
+ return body.slice(ax, cx);
524
+ };
525
+ var labels = [];
526
+
527
+ function toqueue(body, getname, ret = false) {
528
+ var uniftop = function () {
529
+ for (var cx = 0, dx = iftop.length - 1; cx < dx; cx++) {
530
+ var findex = iftop[cx++];
531
+ var f = result[findex];
532
+ var n = iftop[cx];
533
+ var c = scanner2(`if(!${n})return [${iftop[cx + 1] - findex || 1}];`);
534
+ if (f) f.unshift.apply(f, c), relink(f), f[f.length - 1][0].text = String(result.length - findex);
535
+ else result.push(c);
536
+ };
537
+ };
538
+ var unblock = function (block, ...end) {
539
+ var c = toqueue(block, getname, true);
540
+ bx = cx + 1;
541
+ if (c.length > 0) {
542
+ c.forEach(q => {
543
+ if (q.length) result.push(q);
544
+ });
545
+ if (end.length) {
546
+ var q = c[c.length - 1];
547
+ q.pop();
548
+ q.push(...end);
549
+ relink(q);
550
+ }
551
+ }
552
+ };
553
+ var poplabel = function () {
554
+ var e = labels.pop();
555
+ if (e.breaks) {
556
+ while (e.breaks.length) {
557
+ var b = e.breaks.pop();
558
+ var end = b[b.length - 1];
559
+ for (var cx = result.length - 1; cx >= 0; cx--) {
560
+ var r = result[cx];
561
+ if (r[r.length - 1] === end) { break }
562
+ }
563
+ end.push({ type: VALUE, text: result.length - cx });
564
+ }
565
+ }
566
+ };
567
+
568
+ var result = [];
569
+ var cx = 0, bx = 0;
570
+ var iftop = null;
571
+ do {
572
+ while (cx < body.length && (body[cx].type === SPACE || body[cx].type === COMMENT)) cx++;
573
+ var o = body[cx];
574
+ if (!o) break;
575
+ while (labels.length) {
576
+ var e = labels[labels.length - 1];
577
+ if (e.type !== LABEL) {
578
+ break;
579
+ }
580
+ if (e.keep) {
581
+ e.keep = false;
582
+ break;
583
+ }
584
+ poplabel();
585
+ }
586
+
587
+ if (o.type === LABEL) {
588
+ o.keep = true;
589
+ labels.push(o);
590
+ continue;
591
+ }
592
+ if (o.type === SCOPED && o.entry === '{' && !o.isExpress) {
593
+ var b = toqueue(o, getname, false);
594
+ result.push.apply(result, b);
595
+ cx++;
596
+ bx = cx;
597
+ continue;
598
+ }
599
+ a: if (o.type === STRAP) {
600
+ if (/^(new|typeof|yield|await)$/.test(o.text)) {
601
+ break a;
602
+ }
603
+ if (o.text === 'return') {
604
+ ret = true;
605
+ bx = cx + 1;
606
+ cx++;
607
+ break a;
608
+ }
609
+ if (o.text === 'break') {
610
+ cx = _break(body, cx, result);
611
+ bx = cx + 1;
612
+ continue;
613
+ };
614
+ if (o.text === 'with') {
615
+ cx = _with(body, cx, unblock, result, getname);
616
+ bx = cx + 1;
617
+ continue;
618
+ }
619
+ if (o.text === 'for') {
620
+ labels.push(o);
621
+ cx = _for(body, cx, unblock, result, getname(0));
622
+ poplabel();
623
+ bx = cx + 1;
624
+ continue;
625
+ }
626
+ if (o.text === 'while') {
627
+ labels.push(o);
628
+ cx = _while(body, cx, unblock, result, getname(0));
629
+ poplabel();
630
+ bx = cx + 1;
631
+ continue;
632
+ }
633
+ if (o.text === 'do') {
634
+ labels.push(o);
635
+ cx = _do(body, cx, unblock, result, getname(0));
636
+ poplabel();
637
+ bx = cx + 1;
638
+ continue;
639
+ }
640
+ if (o.text === 'switch') {
641
+ labels.push(o);
642
+ cx = _switch(body, cx, unblock, result, getname);
643
+ poplabel();
644
+ bx = cx + 1;
645
+ continue;
646
+ }
647
+ var elseif = false;
648
+ if (o.text === 'else') {
649
+ iftop.push(result.length);
650
+ while (body[cx] !== o.next) cx++;
651
+ o = o.next;
652
+ elseif = true;
653
+ }
654
+ if (o.text === 'if') {
655
+ while (body[cx] !== o.next) cx++;
656
+ o = o.next;
657
+ var n = '';
658
+ if (o.first && o.first === o.lastUncomment) {
659
+ if (o.first.type === EXPRESS) {
660
+ n = o.first.text;
661
+ }
662
+ }
663
+ if (!n) {
664
+ unblock(o);
665
+ n = getname(0);
666
+ }
667
+ if (!elseif) {
668
+ if (iftop) uniftop();
669
+ iftop = [result.length, n];
670
+ }
671
+ else {
672
+ iftop.push(n);
673
+ }
674
+ elseif = true;
675
+ }
676
+ if (elseif) {
677
+ while (body[cx] !== o.next) cx++;
678
+ var block = getblock(body, cx);
679
+ cx += block.length;
680
+ o = body[cx];
681
+ unblock(block);
682
+ if (o && o.type === STAMP && o.text === ';') o = o.next;
683
+ while (body[cx] !== o) cx++;
684
+ if (!o || o.type !== STRAP || o.text !== 'else') {
685
+ uniftop();
686
+ iftop = null;
687
+ }
688
+ }
689
+ else {
690
+ cx++;
691
+ }
692
+ continue;
693
+ }
694
+ cx = skipAssignment(body, cx);
695
+ var b = body.slice(bx, cx);
696
+ cx++;
697
+ bx = cx;
698
+ b = ternary(b, getname, ret);
699
+ if (ret) result.push.apply(result, b);
700
+ else result.push(b);
701
+ } while (cx < body.length);
702
+ return result;
703
+ }
704
+ module.exports = function (body, newname, ret) {
705
+ var tmpnames = [];
706
+ var getname = function (i) {
707
+ i += evals.length;
708
+ if (!tmpnames[i]) tmpnames[i] = newname();
709
+ return tmpnames[i];
710
+ };
711
+ return toqueue(body, getname, ret);
712
+ };