efront 4.25.2 → 4.26.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.
- package/#/345/233/275/351/231/205/345/214/226.yml +9 -3
- package/coms/basic/i18n-supports.js +3 -1
- package/coms/compile/Javascript.js +1 -0
- package/coms/compile/Javascript_test.js +1 -0
- package/coms/compile/Program.js +11 -6
- package/coms/compile/common.js +227 -188
- package/coms/compile/createExpressList_test.js +7 -2
- package/coms/compile/unstruct.js +32 -8
- package/coms/compile/unstruct_test.js +6 -5
- package/coms/zimoli/password.js +43 -8
- package/coms/zimoli/password.less +44 -4
- package/coms//350/214/250/350/217/260//350/257/255/350/250/200.js +1 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/compile/common.js
CHANGED
|
@@ -21,7 +21,7 @@ var needfoot_reg = /(\:\:|\.)$/;
|
|
|
21
21
|
var skipAssignment = function (o, cx) {
|
|
22
22
|
if (!o) return;
|
|
23
23
|
var next = arguments.length === 1 ? function () {
|
|
24
|
-
o = o
|
|
24
|
+
o = getnext(o);
|
|
25
25
|
} : function () {
|
|
26
26
|
o = body[++ox];
|
|
27
27
|
cx = ox;
|
|
@@ -34,7 +34,7 @@ var skipAssignment = function (o, cx) {
|
|
|
34
34
|
while (o && o.type & (SPACE | COMMENT)) o = body[++ox];
|
|
35
35
|
cx = ox;
|
|
36
36
|
}
|
|
37
|
-
else if (o.type & (SPACE | COMMENT)) o = o
|
|
37
|
+
else if (o.type & (SPACE | COMMENT)) o = getnext(o);
|
|
38
38
|
var needpunc = false;
|
|
39
39
|
var qcount = 0;
|
|
40
40
|
var condition = false;
|
|
@@ -51,7 +51,7 @@ var skipAssignment = function (o, cx) {
|
|
|
51
51
|
switch (o.text) {
|
|
52
52
|
case ";":
|
|
53
53
|
if (!ifdeep) break loop;
|
|
54
|
-
var n = o
|
|
54
|
+
var n = getnext(o);
|
|
55
55
|
if (!n || n.type !== STRAP || n.text !== 'else') break loop;
|
|
56
56
|
next();
|
|
57
57
|
break;
|
|
@@ -79,7 +79,7 @@ var skipAssignment = function (o, cx) {
|
|
|
79
79
|
break;
|
|
80
80
|
case ":":
|
|
81
81
|
if (qcount === 0) {
|
|
82
|
-
var p = o
|
|
82
|
+
var p = getprev(o);
|
|
83
83
|
if (p && p.type === LABEL) {
|
|
84
84
|
next();
|
|
85
85
|
break;
|
|
@@ -119,7 +119,7 @@ var skipAssignment = function (o, cx) {
|
|
|
119
119
|
next();
|
|
120
120
|
break;
|
|
121
121
|
}
|
|
122
|
-
var prev = o
|
|
122
|
+
var prev = getprev(o);
|
|
123
123
|
if (prev?.type === EXPRESS && needfoot_reg.test(prev.text)) {
|
|
124
124
|
next();
|
|
125
125
|
break;
|
|
@@ -222,45 +222,45 @@ var skipAssignment = function (o, cx) {
|
|
|
222
222
|
function skipSentenceQueue(o) {
|
|
223
223
|
do {
|
|
224
224
|
o = skipAssignment(o)
|
|
225
|
-
} while (o && o.type === STAMP && o.text === ',' ? o = o
|
|
225
|
+
} while (o && o.type === STAMP && o.text === ',' ? o = getnext(o) : false);
|
|
226
226
|
return o;
|
|
227
227
|
}
|
|
228
228
|
function skipFunction(o) {
|
|
229
|
-
if (o.type === STRAP && o.text === 'async') o = o
|
|
229
|
+
if (o.type === STRAP && o.text === 'async') o = getnext(o);
|
|
230
230
|
if (o.type !== STRAP) return skipAssignment(o);
|
|
231
231
|
if (o.text === 'function') {
|
|
232
|
-
while (o && (o.type !== SCOPED || o.entry !== '{')) o = o
|
|
233
|
-
return o
|
|
232
|
+
while (o && (o.type !== SCOPED || o.entry !== '{')) o = getnext(o);
|
|
233
|
+
return getnext(o);
|
|
234
234
|
}
|
|
235
235
|
if (o.text === 'class') {
|
|
236
|
-
while (!o.isClass) o = o
|
|
237
|
-
while (o.isClass) o = o
|
|
236
|
+
while (!o.isClass) o = getnext(o);
|
|
237
|
+
while (o.isClass) o = getnext(o);
|
|
238
238
|
return o;
|
|
239
239
|
}
|
|
240
240
|
return o;
|
|
241
241
|
}
|
|
242
242
|
var getDoBeforeWhile = function (while_) {
|
|
243
|
-
var p = while_
|
|
243
|
+
var p = getprev(while_);
|
|
244
244
|
if (!p || p.type !== SCOPED || p.entry !== '{') return;
|
|
245
|
-
p = p
|
|
245
|
+
p = getprev(p);
|
|
246
246
|
if (p.type === STRAP && p.text === "do") return p;
|
|
247
247
|
};
|
|
248
248
|
var getIfElseHead = function (if_) {
|
|
249
249
|
var p = if_;
|
|
250
250
|
do {
|
|
251
251
|
if_ = p;
|
|
252
|
-
p = if_
|
|
252
|
+
p = getprev(if_);
|
|
253
253
|
if (!p || p.type !== STRAP || p.text !== 'else') {
|
|
254
254
|
return if_;
|
|
255
255
|
}
|
|
256
|
-
while (p && (p.type !== STRAP || p.text !== 'if')) p = p
|
|
256
|
+
while (p && (p.type !== STRAP || p.text !== 'if')) p = getprev(p);
|
|
257
257
|
} while (p);
|
|
258
258
|
};
|
|
259
259
|
var getContitionHeadBeforeScoped = function (p, nodo) {
|
|
260
|
-
var pp = p
|
|
260
|
+
var pp = getprev(p);
|
|
261
261
|
if (pp.type !== STRAP) return;
|
|
262
262
|
if (pp.text === 'await') {
|
|
263
|
-
pp = pp
|
|
263
|
+
pp = getprev(pp);
|
|
264
264
|
if (pp?.type === STRAP && pp.text === "for") {
|
|
265
265
|
return pp;
|
|
266
266
|
};
|
|
@@ -281,12 +281,12 @@ var getContitionHeadBeforeScoped = function (p, nodo) {
|
|
|
281
281
|
}
|
|
282
282
|
};
|
|
283
283
|
var getFunctionHeadBeforeScoped = function (p) {
|
|
284
|
-
var pp = p
|
|
285
|
-
if (pp && pp.type === EXPRESS) pp = pp
|
|
286
|
-
if (pp && pp.text === '*') pp = pp
|
|
284
|
+
var pp = getprev(p);
|
|
285
|
+
if (pp && pp.type === EXPRESS) pp = getprev(pp);
|
|
286
|
+
if (pp && pp.text === '*') pp = getprev(pp);
|
|
287
287
|
if (pp && pp.type === STRAP && pp.text === 'function') {
|
|
288
288
|
p = pp;
|
|
289
|
-
pp = pp
|
|
289
|
+
pp = getprev(pp);
|
|
290
290
|
if (pp && pp.type === STRAP && pp.text === 'async') {
|
|
291
291
|
p = pp;
|
|
292
292
|
}
|
|
@@ -294,19 +294,19 @@ var getFunctionHeadBeforeScoped = function (p) {
|
|
|
294
294
|
}
|
|
295
295
|
while (pp?.isprop) {
|
|
296
296
|
p = pp;
|
|
297
|
-
pp = pp
|
|
297
|
+
pp = getprev(pp);
|
|
298
298
|
if (pp?.isend) break;
|
|
299
299
|
}
|
|
300
300
|
if (p.isprop) return p;
|
|
301
301
|
}
|
|
302
302
|
function snapSentenceHead(o) {
|
|
303
303
|
// 只检查一级
|
|
304
|
-
while (o && o
|
|
305
|
-
var p = o
|
|
304
|
+
while (o && getprev(o)) {
|
|
305
|
+
var p = getprev(o);
|
|
306
306
|
if (o.entry === '(') {
|
|
307
307
|
if (p.type & ~(STAMP | STRAP)) {
|
|
308
308
|
o = p;
|
|
309
|
-
p = o
|
|
309
|
+
p = getprev(o);
|
|
310
310
|
if (!p) break;
|
|
311
311
|
}
|
|
312
312
|
var pp = getContitionHeadBeforeScoped(o, false);
|
|
@@ -314,7 +314,7 @@ function snapSentenceHead(o) {
|
|
|
314
314
|
pp = getFunctionHeadBeforeScoped(o);
|
|
315
315
|
if (pp) {
|
|
316
316
|
o = pp;
|
|
317
|
-
p = o
|
|
317
|
+
p = getprev(o);
|
|
318
318
|
if (!p || p.type === STAMP && /^[,;]$/.test(p.text)) break;
|
|
319
319
|
continue
|
|
320
320
|
};
|
|
@@ -334,7 +334,7 @@ function snapSentenceHead(o) {
|
|
|
334
334
|
if (p.type & (VALUE | QUOTED)) {
|
|
335
335
|
if (maybeprop) {
|
|
336
336
|
o = p;
|
|
337
|
-
if (p.entry === '`' && p
|
|
337
|
+
if (p.entry === '`' && getprev(p) && getprev(p).type & ~(STAMP | STRAP)) o = getprev(p);
|
|
338
338
|
continue;
|
|
339
339
|
}
|
|
340
340
|
break;
|
|
@@ -350,7 +350,7 @@ function snapSentenceHead(o) {
|
|
|
350
350
|
var pp = getFunctionHeadBeforeScoped(p);
|
|
351
351
|
if (pp) {
|
|
352
352
|
o = pp;
|
|
353
|
-
p = o
|
|
353
|
+
p = getprev(o);
|
|
354
354
|
if (!p || p.type === STAMP && /^[,;]$/.test(p.text)) break;
|
|
355
355
|
continue;
|
|
356
356
|
}
|
|
@@ -363,7 +363,7 @@ function snapSentenceHead(o) {
|
|
|
363
363
|
continue;
|
|
364
364
|
}
|
|
365
365
|
if (/^(in|instanceof|of|as|from)$/.test(p.text)) {
|
|
366
|
-
o = p
|
|
366
|
+
o = getprev(p);
|
|
367
367
|
continue;
|
|
368
368
|
}
|
|
369
369
|
if (/^(return|yield|break|continue)$/.test(p.text)) {
|
|
@@ -388,7 +388,7 @@ function snapSentenceHead(o) {
|
|
|
388
388
|
}
|
|
389
389
|
if (/^[\?\:]$/.test(p.text)) {
|
|
390
390
|
if (o) {
|
|
391
|
-
var e = snapExpressFoot(o)
|
|
391
|
+
var e = getnext(snapExpressFoot(o));
|
|
392
392
|
if (!e || e.type === STAMP && equal_reg.test(e.text)) break;
|
|
393
393
|
}
|
|
394
394
|
}
|
|
@@ -403,37 +403,42 @@ function snapSentenceHead(o) {
|
|
|
403
403
|
o = p;
|
|
404
404
|
continue;
|
|
405
405
|
}
|
|
406
|
-
o = p
|
|
406
|
+
o = getprev(p);
|
|
407
407
|
continue;
|
|
408
408
|
}
|
|
409
409
|
break;
|
|
410
410
|
}
|
|
411
411
|
while (o) {
|
|
412
|
-
var p = o
|
|
412
|
+
var p = getprev(o);
|
|
413
413
|
if (!p || p.type !== LABEL) break;
|
|
414
414
|
o = p;
|
|
415
415
|
}
|
|
416
416
|
return o;
|
|
417
417
|
}
|
|
418
418
|
var getStrapHead = function (o) {
|
|
419
|
-
var p = o
|
|
419
|
+
var p = getprev(o);
|
|
420
420
|
if (p && p.type === STRAP && !p.transive) return p;
|
|
421
|
-
if (p && p.type === STRAP && p.text === 'await') p = p
|
|
421
|
+
if (p && p.type === STRAP && p.text === 'await') p = getprev(p);
|
|
422
422
|
if (p && p.type === STRAP && p.text === 'for') return p;
|
|
423
423
|
return null;
|
|
424
424
|
}
|
|
425
|
+
var getprev = function (o) {
|
|
426
|
+
return o.prev;
|
|
427
|
+
};
|
|
428
|
+
var getnext = function (o) {
|
|
429
|
+
return o.next;
|
|
430
|
+
};
|
|
425
431
|
var snapExpressHead = function (o) {
|
|
426
432
|
if (!o || o.type & ~(EXPRESS | SCOPED | QUOTED) && !o.needle) return o;
|
|
427
|
-
var a = o;
|
|
428
|
-
while (o && o
|
|
429
|
-
var p = o.prev;
|
|
433
|
+
var a = o, p = getprev(o);
|
|
434
|
+
while (o && (p = getprev(o))) {
|
|
430
435
|
if (p.type === STAMP && p.needle || o.type === STAMP && o.needle) {
|
|
431
436
|
o = p;
|
|
432
437
|
continue;
|
|
433
438
|
}
|
|
434
439
|
if (p && p.type === STRAP && p.text === 'new') return p;
|
|
435
440
|
if (o.type === SCOPED && o.entry === '(') {
|
|
436
|
-
var h = getStrapHead(o);
|
|
441
|
+
var h = getStrapHead(o, getprev);
|
|
437
442
|
if (h) return h;
|
|
438
443
|
}
|
|
439
444
|
if (o.type === SCOPED && o.entry !== '{'
|
|
@@ -442,7 +447,7 @@ var snapExpressHead = function (o) {
|
|
|
442
447
|
|| o.type === QUOTED && (o.length || /^\`/.test(o.text))
|
|
443
448
|
) {
|
|
444
449
|
if (p.type === SCOPED && p.entry === '(') {
|
|
445
|
-
if (getStrapHead(p)) return o;
|
|
450
|
+
if (getStrapHead(p, getprev)) return o;
|
|
446
451
|
}
|
|
447
452
|
if (p.type & (EXPRESS | VALUE | QUOTED | SCOPED)) {
|
|
448
453
|
a = o;
|
|
@@ -455,18 +460,18 @@ var snapExpressHead = function (o) {
|
|
|
455
460
|
if (o.isObject) return o;
|
|
456
461
|
if (!o.isClass) {
|
|
457
462
|
if (p.type === SCOPED && p.entry === "(") {
|
|
458
|
-
p = p
|
|
459
|
-
if (p && p.type === EXPRESS) p = p
|
|
460
|
-
if (p && p.type === STAMP && p.text === '*') p = p
|
|
463
|
+
p = getprev(p);
|
|
464
|
+
if (p && p.type === EXPRESS) p = getprev(p);
|
|
465
|
+
if (p && p.type === STAMP && p.text === '*') p = getprev(p);
|
|
461
466
|
if (!p || p.type !== STRAP || !/^function$/.test(p.text)) return a;
|
|
462
|
-
if (p && p.type === STRAP && p.text === "new") p = p
|
|
467
|
+
if (p && p.type === STRAP && p.text === "new") p = getprev(p);
|
|
463
468
|
return p;
|
|
464
469
|
}
|
|
465
470
|
return a;
|
|
466
471
|
}
|
|
467
472
|
while (o.isClass) {
|
|
468
473
|
isclass++;
|
|
469
|
-
o = o
|
|
474
|
+
o = getprev(o);
|
|
470
475
|
}
|
|
471
476
|
var p = o;
|
|
472
477
|
while (o && isclass > 0) {
|
|
@@ -474,7 +479,7 @@ var snapExpressHead = function (o) {
|
|
|
474
479
|
if (o.type === STRAP && o.text === 'class') {
|
|
475
480
|
isclass--;
|
|
476
481
|
}
|
|
477
|
-
o = o
|
|
482
|
+
o = getprev(o);
|
|
478
483
|
}
|
|
479
484
|
if (p && p.type === STRAP && p.text === 'new') return p;
|
|
480
485
|
return p;
|
|
@@ -485,30 +490,30 @@ var snapExpressHead = function (o) {
|
|
|
485
490
|
};
|
|
486
491
|
|
|
487
492
|
var snapExpressFoot = function (o) {
|
|
488
|
-
while (o && o
|
|
493
|
+
while (o && getnext(o)) {
|
|
489
494
|
if (o.needle) {
|
|
490
|
-
o = o
|
|
495
|
+
o = getnext(o);
|
|
491
496
|
continue;
|
|
492
497
|
}
|
|
493
498
|
var n = null;
|
|
494
499
|
var isExpress = o.isExpress;
|
|
495
500
|
if (o.type & STRAP) {
|
|
496
501
|
n = o;
|
|
497
|
-
if (n.text === 'new') n = n
|
|
502
|
+
if (n.text === 'new') n = getnext(n);
|
|
498
503
|
if (n.text === 'function') {
|
|
499
|
-
while (n && (n.type !== SCOPED || n.entry !== '{')) n = n
|
|
504
|
+
while (n && (n.type !== SCOPED || n.entry !== '{')) n = getnext(n);
|
|
500
505
|
}
|
|
501
506
|
else if (n.text === 'class') {
|
|
502
507
|
var n = o;
|
|
503
|
-
while (n && !n.isClass) n = n
|
|
504
|
-
while (n && n.isClass) n = n
|
|
508
|
+
while (n && !n.isClass) n = getnext(n);
|
|
509
|
+
while (n && n.isClass) n = getnext(n);
|
|
505
510
|
}
|
|
506
511
|
else break;
|
|
507
512
|
o = n;
|
|
508
|
-
n = o && o
|
|
513
|
+
n = o && getnext(o);
|
|
509
514
|
}
|
|
510
515
|
else if (o.type & (EXPRESS | QUOTED | VALUE | SCOPED)) {
|
|
511
|
-
n = o
|
|
516
|
+
n = getnext(o);
|
|
512
517
|
}
|
|
513
518
|
if (!n) break;
|
|
514
519
|
if (n.type === SCOPED && (o.entry !== '{' || isExpress)
|
|
@@ -531,8 +536,8 @@ var createScoped = function (parsed, wash) {
|
|
|
531
536
|
scoped.isfunc = true;
|
|
532
537
|
var dec = function (map, o) {
|
|
533
538
|
var kind = o.text;
|
|
534
|
-
o = o
|
|
535
|
-
while (o && o.type === STRAP) o = o
|
|
539
|
+
o = getnext(o);
|
|
540
|
+
while (o && o.type === STRAP) o = getnext(o);
|
|
536
541
|
var [declared, used0, o0, skiped] = getDeclared(o, kind);
|
|
537
542
|
if (o0 !== o) {
|
|
538
543
|
mergeTo(used, used0);
|
|
@@ -557,9 +562,9 @@ var createScoped = function (parsed, wash) {
|
|
|
557
562
|
var isAster = false;
|
|
558
563
|
var function_obj = null;
|
|
559
564
|
if (o.type === STAMP && equal_reg.test(o.text)) {
|
|
560
|
-
var p = snapExpressHead(o
|
|
565
|
+
var p = snapExpressHead(getprev(o));
|
|
561
566
|
if (!p || p.type & (STRAP | STAMP) || p.type !== EXPRESS && !p.isExpress) {
|
|
562
|
-
let n = o
|
|
567
|
+
let n = getnext(o);
|
|
563
568
|
if (n && n.type & (EXPRESS | VALUE)) {
|
|
564
569
|
n.equal = o;
|
|
565
570
|
}
|
|
@@ -569,7 +574,7 @@ var createScoped = function (parsed, wash) {
|
|
|
569
574
|
}
|
|
570
575
|
else if (o.text === '=' && p.type === SCOPED && !p.isprop) {
|
|
571
576
|
if (!p.kind) {
|
|
572
|
-
var pp = p
|
|
577
|
+
var pp = getprev(p);
|
|
573
578
|
if (!pp || pp.type === STAMP || pp.type === STRAP) {
|
|
574
579
|
getDeclared(p, 'assign');
|
|
575
580
|
}
|
|
@@ -599,36 +604,38 @@ var createScoped = function (parsed, wash) {
|
|
|
599
604
|
case EXPRESS:
|
|
600
605
|
if (needhead_reg.test(o.text)) break;
|
|
601
606
|
|
|
602
|
-
var
|
|
603
|
-
if (
|
|
604
|
-
if (
|
|
605
|
-
if (
|
|
606
|
-
var o0 = dec(lets,
|
|
607
|
+
var p = getprev(o);
|
|
608
|
+
if (p) {
|
|
609
|
+
if (p.needle || p.type === EXPRESS && needfoot_reg.test(p.text)) break;
|
|
610
|
+
if (p.type === STRAP && p.istype) {
|
|
611
|
+
var o0 = dec(lets, p);
|
|
607
612
|
if (o0 && o0.type === SCOPED && o0.entry === "(") {
|
|
608
613
|
isFunction = true;
|
|
609
614
|
isScope = true;
|
|
610
615
|
break;
|
|
611
616
|
}
|
|
612
|
-
if (o === o0) o = o
|
|
617
|
+
if (o === o0) o = getnext(o);
|
|
613
618
|
else o = o0;
|
|
614
619
|
continue;
|
|
615
620
|
}
|
|
616
621
|
}
|
|
617
|
-
|
|
622
|
+
var on = getnext(o);
|
|
623
|
+
if (on && on.type === STAMP && on.text === "=>") {
|
|
618
624
|
isScope = true;
|
|
619
625
|
isArraw = true;
|
|
620
|
-
|
|
626
|
+
var p = getprev(o);
|
|
627
|
+
isAsync = p?.type === STRAP && p.text === 'async';
|
|
621
628
|
}
|
|
622
629
|
else {
|
|
623
630
|
var u = o.text;
|
|
624
631
|
if (/^\.\.\./.test(u)) u = u.slice(3);
|
|
625
632
|
var u = u.replace(/^([^\.\[\?\s\:]*)[\s\S]*$/, '$1');
|
|
626
633
|
if (!u) break;
|
|
627
|
-
var
|
|
628
|
-
if (
|
|
629
|
-
var pp =
|
|
634
|
+
var p = getprev(o);
|
|
635
|
+
if (p && p.type === STAMP && /^(?:\+\+|\-\-)$/.test(p.text)) {
|
|
636
|
+
var pp = getprev(p);
|
|
630
637
|
if (!pp || pp.type === STAMP) {
|
|
631
|
-
o.equal =
|
|
638
|
+
o.equal = p;
|
|
632
639
|
}
|
|
633
640
|
}
|
|
634
641
|
saveTo(used, u, o);
|
|
@@ -649,7 +656,7 @@ var createScoped = function (parsed, wash) {
|
|
|
649
656
|
case "break":
|
|
650
657
|
case "continue":
|
|
651
658
|
if (o.isend) break;
|
|
652
|
-
o = o
|
|
659
|
+
o = getnext(o);
|
|
653
660
|
if (o?.type === EXPRESS) {
|
|
654
661
|
saveTo(labelused, o.text, o);
|
|
655
662
|
}
|
|
@@ -672,21 +679,23 @@ var createScoped = function (parsed, wash) {
|
|
|
672
679
|
case "let":
|
|
673
680
|
case "const":
|
|
674
681
|
m = lets;
|
|
675
|
-
|
|
682
|
+
var n = getnext(o);
|
|
683
|
+
if (!n || n.type & ~(EXPRESS | STRAP) && (n.type !== SCOPED || n.entry === "(")) {
|
|
676
684
|
o.type = EXPRESS;
|
|
677
685
|
continue;
|
|
678
686
|
}
|
|
679
687
|
case "import":
|
|
680
688
|
case "use":
|
|
681
|
-
|
|
682
|
-
if (
|
|
689
|
+
var n = getnext(o);
|
|
690
|
+
if (!n || n.type === QUOTED) break;
|
|
691
|
+
if (n.needle) {
|
|
683
692
|
o.type = EXPRESS;
|
|
684
693
|
continue;
|
|
685
694
|
}
|
|
686
695
|
case "var":
|
|
687
696
|
m = m || vars;
|
|
688
697
|
var o0 = dec(m, o);
|
|
689
|
-
if (o0 === o) o = o
|
|
698
|
+
if (o0 === o) o = getnext(o);
|
|
690
699
|
else o = o0;
|
|
691
700
|
continue loop;
|
|
692
701
|
case "static":
|
|
@@ -694,16 +703,17 @@ var createScoped = function (parsed, wash) {
|
|
|
694
703
|
case "fn":
|
|
695
704
|
case "func":
|
|
696
705
|
isFunction = true;
|
|
697
|
-
var
|
|
698
|
-
if (
|
|
706
|
+
var p = getprev(o);
|
|
707
|
+
if (p?.type === STRAP && p.text === 'async') {
|
|
699
708
|
isAsync = true;
|
|
700
|
-
o.isExpress =
|
|
709
|
+
o.isExpress = p.isExpress;
|
|
701
710
|
}
|
|
702
711
|
function_obj = o;
|
|
703
|
-
|
|
712
|
+
var n = getnext(o);
|
|
713
|
+
if (n.type === STAMP) {
|
|
704
714
|
isAster = true;
|
|
705
|
-
o = o
|
|
706
|
-
o.isExpress =
|
|
715
|
+
o = getnext(o);
|
|
716
|
+
o.isExpress = p?.isExpress;
|
|
707
717
|
}
|
|
708
718
|
case "catch":
|
|
709
719
|
if (s === 'catch') isCatch = true;
|
|
@@ -711,24 +721,24 @@ var createScoped = function (parsed, wash) {
|
|
|
711
721
|
case "interface":
|
|
712
722
|
if (/^interface|class$/.test(s)) isClass = true;
|
|
713
723
|
if (!o.isExpress) {
|
|
714
|
-
o = o
|
|
724
|
+
o = getnext(o);
|
|
715
725
|
|
|
716
726
|
if (o.type === EXPRESS) {
|
|
717
727
|
vars[o.text] = true;
|
|
718
728
|
o.kind = isFunction ? 'function' : 'class';
|
|
719
729
|
saveTo(used, o.text, o);
|
|
720
|
-
o = o
|
|
721
|
-
if (o?.type === ELEMENT) o = o
|
|
730
|
+
o = getnext(o);
|
|
731
|
+
if (o?.type === ELEMENT) o = getnext(o);
|
|
722
732
|
}
|
|
723
733
|
}
|
|
724
734
|
isScope = true;
|
|
725
735
|
break;
|
|
726
736
|
case "for":
|
|
727
|
-
o = o
|
|
737
|
+
o = getnext(o);
|
|
728
738
|
if (o.type !== SCOPED && o.text === 'await') {
|
|
729
739
|
if (o.type === EXPRESS) o.type = STRAP;
|
|
730
740
|
funcbody.await = funcbody.async = true;
|
|
731
|
-
o = o
|
|
741
|
+
o = getnext(o);
|
|
732
742
|
}
|
|
733
743
|
isScope = true;
|
|
734
744
|
break;
|
|
@@ -737,18 +747,19 @@ var createScoped = function (parsed, wash) {
|
|
|
737
747
|
break;
|
|
738
748
|
case SCOPED:
|
|
739
749
|
if (o.entry === "(") {
|
|
740
|
-
var
|
|
741
|
-
|
|
750
|
+
var p = getprev(o);
|
|
751
|
+
var n = getnext(o);
|
|
752
|
+
if (n?.type === STAMP && n.text === "=>") {
|
|
742
753
|
isArraw = true;
|
|
743
754
|
isScope = true;
|
|
744
|
-
if (
|
|
755
|
+
if (p?.type === STRAP && p.text === 'async') {
|
|
745
756
|
isAsync = true;
|
|
746
757
|
}
|
|
747
758
|
}
|
|
748
|
-
else if (
|
|
759
|
+
else if (p?.isprop) {
|
|
749
760
|
isFunction = true;
|
|
750
761
|
isScope = true;
|
|
751
|
-
var pp =
|
|
762
|
+
var pp = getprev(p);
|
|
752
763
|
if (pp && pp.type === STAMP && pp.isprop) {
|
|
753
764
|
isAster = true;
|
|
754
765
|
}
|
|
@@ -811,20 +822,20 @@ var createScoped = function (parsed, wash) {
|
|
|
811
822
|
}
|
|
812
823
|
if (isArraw);
|
|
813
824
|
else while (o && (o.type !== SCOPED || o.entry === '[')) {
|
|
814
|
-
o = o
|
|
825
|
+
o = getnext(o);
|
|
815
826
|
if (o && o.type === EXPRESS) {
|
|
816
827
|
var tack = o.text.replace(/[\.\[][\s\S]*$/, '');
|
|
817
828
|
saveTo(used, tack, o);
|
|
818
|
-
|
|
829
|
+
var p = getprev(o);
|
|
830
|
+
if (p?.type === STRAP && p.text === 'extends') continue;
|
|
819
831
|
lets[tack] = true;
|
|
820
832
|
o.kind = isFunction ? 'function' : 'class';
|
|
821
|
-
o = o
|
|
833
|
+
o = getnext(o);
|
|
822
834
|
}
|
|
823
835
|
}
|
|
824
836
|
if (!isFunction) while (o.type !== SCOPED) {
|
|
825
|
-
// if (o.next && o.next.type === STAMP && o.next.text === "=>") break;
|
|
826
837
|
o = run(o, 0);
|
|
827
|
-
o = o
|
|
838
|
+
o = getnext(o);
|
|
828
839
|
if (!o) break;
|
|
829
840
|
}
|
|
830
841
|
if (!o);
|
|
@@ -846,15 +857,15 @@ var createScoped = function (parsed, wash) {
|
|
|
846
857
|
else {
|
|
847
858
|
run(o.first);
|
|
848
859
|
}
|
|
849
|
-
o = o
|
|
860
|
+
o = getnext(o);
|
|
850
861
|
if (!o);
|
|
851
|
-
else if (o.type === STAMP && o.text === "=>") o = o
|
|
862
|
+
else if (o.type === STAMP && o.text === "=>") o = getnext(o);
|
|
852
863
|
}
|
|
853
864
|
else if (isArraw) {
|
|
854
865
|
vars[o.text] = true;
|
|
855
866
|
o.kind = 'argument';
|
|
856
867
|
saveTo(used, o.text, o);
|
|
857
|
-
o = o
|
|
868
|
+
o = getnext(getnext(o));
|
|
858
869
|
}
|
|
859
870
|
if (!o);
|
|
860
871
|
else if (o.type === SCOPED && o.brace) {
|
|
@@ -862,12 +873,12 @@ var createScoped = function (parsed, wash) {
|
|
|
862
873
|
o.scoped = scoped;
|
|
863
874
|
o.isExpress = isExpress;
|
|
864
875
|
run(o.first);
|
|
865
|
-
if (isArraw && id >= 0 && o) o = o
|
|
876
|
+
if (isArraw && id >= 0 && o) o = getnext(o);
|
|
866
877
|
if (wash && isFunction) {
|
|
867
|
-
var e = o
|
|
878
|
+
var e = getnext(o);
|
|
868
879
|
if (e && e.type === EXPRESS && /^[\.\[]/.test(e.text) || e && e.type === SCOPED && e.entry === "[") {
|
|
869
880
|
scoped.target = true;
|
|
870
|
-
e = e
|
|
881
|
+
e = getnext(e);
|
|
871
882
|
}
|
|
872
883
|
if (e && e.type === SCOPED && e.entry === '(') {
|
|
873
884
|
if (e.first) {
|
|
@@ -878,13 +889,13 @@ var createScoped = function (parsed, wash) {
|
|
|
878
889
|
}
|
|
879
890
|
}
|
|
880
891
|
else if (isArraw) {
|
|
881
|
-
var
|
|
892
|
+
var n = skipAssignment(o);
|
|
882
893
|
scoped.arraw = o;
|
|
883
894
|
var u = o;
|
|
884
|
-
while (o !==
|
|
885
|
-
var
|
|
886
|
-
if (o ===
|
|
887
|
-
else o =
|
|
895
|
+
while (o !== n) {
|
|
896
|
+
var n1 = run(o, 0);
|
|
897
|
+
if (o === n1 || n1 && n1.entry === '{') o = getnext(n1);
|
|
898
|
+
else o = n1;
|
|
888
899
|
}
|
|
889
900
|
}
|
|
890
901
|
else {
|
|
@@ -892,18 +903,19 @@ var createScoped = function (parsed, wash) {
|
|
|
892
903
|
if (o.type === STAMP && o.text === ";") break;
|
|
893
904
|
o = run(o, 0);
|
|
894
905
|
if (!o) break;
|
|
895
|
-
var
|
|
896
|
-
if (!
|
|
906
|
+
var n = getnext(o);
|
|
907
|
+
if (!n) break;
|
|
897
908
|
var e = o;
|
|
898
|
-
|
|
909
|
+
var p = getprev(o);
|
|
910
|
+
if (o.type === STAMP && /^(\+\+|\-\-)$/.test(o.text) && p?.type === EXPRESS
|
|
899
911
|
|| (VALUE | QUOTED | SCOPED) & o.type
|
|
900
912
|
|| EXPRESS === o.type && !needfoot_reg.test(o.text)) {
|
|
901
|
-
if ((VALUE | QUOTED | PROPERTY | LABEL) &
|
|
902
|
-
if (EXPRESS ===
|
|
903
|
-
if (
|
|
904
|
-
if (
|
|
913
|
+
if ((VALUE | QUOTED | PROPERTY | LABEL) & n.type) break;
|
|
914
|
+
if (EXPRESS === n.type && !/^[\.\[]/.test(n.text)) break;
|
|
915
|
+
if (n.type === SCOPED && n.brace) break;
|
|
916
|
+
if (n.type === STRAP && !n.isExpress) break;
|
|
905
917
|
}
|
|
906
|
-
o =
|
|
918
|
+
o = n;
|
|
907
919
|
} while (o);
|
|
908
920
|
}
|
|
909
921
|
var map = isFunction ? vars : lets;
|
|
@@ -956,11 +968,29 @@ var createScoped = function (parsed, wash) {
|
|
|
956
968
|
scoped = _scoped;
|
|
957
969
|
}
|
|
958
970
|
if (id >= 0) break;
|
|
959
|
-
if (o) o = o
|
|
971
|
+
if (o) o = getnext(o);
|
|
960
972
|
}
|
|
961
973
|
return o;
|
|
962
974
|
};
|
|
963
|
-
run(parsed.first);
|
|
975
|
+
if (parsed.first) run(parsed.first);
|
|
976
|
+
else {
|
|
977
|
+
rehead(parsed);
|
|
978
|
+
var { first, last } = parsed;
|
|
979
|
+
var gtprev = getprev;
|
|
980
|
+
var gtnext = getnext;
|
|
981
|
+
getnext = function (o) {
|
|
982
|
+
if (o === last) return null;
|
|
983
|
+
return gtnext(o);
|
|
984
|
+
};
|
|
985
|
+
getprev = function (o) {
|
|
986
|
+
if (o === first) return null;
|
|
987
|
+
return gtprev(o);
|
|
988
|
+
};
|
|
989
|
+
run(first);
|
|
990
|
+
getnext = gtnext;
|
|
991
|
+
getprev = gtprev;
|
|
992
|
+
}
|
|
993
|
+
|
|
964
994
|
scoped.used = used;
|
|
965
995
|
scoped.vars = vars;
|
|
966
996
|
scoped.caps = used;
|
|
@@ -1002,19 +1032,19 @@ var createScoped = function (parsed, wash) {
|
|
|
1002
1032
|
var hasEqual = function (s) {
|
|
1003
1033
|
while (s) {
|
|
1004
1034
|
if (s.equal) return true;
|
|
1005
|
-
var sn = s
|
|
1035
|
+
var sn = getnext(s);
|
|
1006
1036
|
if (sn?.type === STRAP) {
|
|
1007
1037
|
if (sn.text === 'of') return true;
|
|
1008
1038
|
if (sn.text === "in") {
|
|
1009
1039
|
var q = s.queue;
|
|
1010
1040
|
if (q.entry === '(') {
|
|
1011
|
-
var qp = q
|
|
1041
|
+
var qp = getprev(q);
|
|
1012
1042
|
if (qp.type === STRAP && qp.text === 'await') qp = qp.text;
|
|
1013
1043
|
if (qp.type === STRAP && qp.text === 'for') return true;
|
|
1014
1044
|
}
|
|
1015
1045
|
}
|
|
1016
1046
|
}
|
|
1017
|
-
var sp = s
|
|
1047
|
+
var sp = getprev(s);
|
|
1018
1048
|
if (sp?.type === STRAP && sp.text === 'as') return true;
|
|
1019
1049
|
s = s.queue;
|
|
1020
1050
|
}
|
|
@@ -1027,14 +1057,14 @@ var getDeclared = function (o, kind, queue) {
|
|
|
1027
1057
|
var attributes = [];
|
|
1028
1058
|
var index = 0;
|
|
1029
1059
|
loop: while (o) {
|
|
1030
|
-
while (o && o.type === STAMP && o.text === ',') o = o
|
|
1060
|
+
while (o && o.type === STAMP && o.text === ',') o = getnext(o), index++;
|
|
1031
1061
|
if (!o) {
|
|
1032
1062
|
index--;
|
|
1033
1063
|
break;
|
|
1034
1064
|
}
|
|
1035
|
-
var
|
|
1036
|
-
if (
|
|
1037
|
-
o =
|
|
1065
|
+
var n = getnext(o);
|
|
1066
|
+
if (n?.needle) {
|
|
1067
|
+
o = getnext(n);
|
|
1038
1068
|
continue;
|
|
1039
1069
|
}
|
|
1040
1070
|
if (o.isprop) {
|
|
@@ -1045,9 +1075,9 @@ var getDeclared = function (o, kind, queue) {
|
|
|
1045
1075
|
else if (o.isdigit) prop = `[${prop}]`;
|
|
1046
1076
|
else if (!/^\[[\s\S]*\]$/.test(prop)) prop = "." + prop;
|
|
1047
1077
|
skiped.push(o);
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
o =
|
|
1078
|
+
var n = getnext(o);
|
|
1079
|
+
if (n?.type === STAMP && n.text === ":") {
|
|
1080
|
+
o = getnext(n);
|
|
1051
1081
|
}
|
|
1052
1082
|
}
|
|
1053
1083
|
switch (o.type) {
|
|
@@ -1062,40 +1092,42 @@ var getDeclared = function (o, kind, queue) {
|
|
|
1062
1092
|
d.entry = o.entry;
|
|
1063
1093
|
o.kind = kind;
|
|
1064
1094
|
attributes.push([prop, d]);
|
|
1065
|
-
o = o
|
|
1095
|
+
o = getnext(o);
|
|
1066
1096
|
break;
|
|
1067
1097
|
}
|
|
1068
1098
|
else {
|
|
1069
1099
|
var s = [];
|
|
1070
1100
|
while (foot !== o) {
|
|
1071
1101
|
s.push(o);
|
|
1072
|
-
o = o
|
|
1102
|
+
o = getnext(o);
|
|
1073
1103
|
}
|
|
1074
1104
|
s.push(foot);
|
|
1075
1105
|
skiped.push(...s);
|
|
1076
|
-
o = o
|
|
1106
|
+
o = getnext(o);
|
|
1077
1107
|
attributes.push([prop, s]);
|
|
1078
1108
|
break;
|
|
1079
1109
|
}
|
|
1080
1110
|
case STAMP:
|
|
1081
|
-
var
|
|
1082
|
-
if (o.text === "*" &&
|
|
1083
|
-
if (
|
|
1084
|
-
o =
|
|
1111
|
+
var n = getnext(o);
|
|
1112
|
+
if (o.text === "*" && n) {
|
|
1113
|
+
if (n.type === STRAP && n.text === 'as') {
|
|
1114
|
+
o = getnext(n);
|
|
1085
1115
|
prop = "*";
|
|
1086
1116
|
continue;
|
|
1087
1117
|
}
|
|
1088
1118
|
}
|
|
1089
1119
|
if (o.text === '...') {
|
|
1090
|
-
o = o
|
|
1120
|
+
o = getnext(o);
|
|
1091
1121
|
continue;
|
|
1092
1122
|
}
|
|
1093
1123
|
break;
|
|
1124
|
+
case LABEL:
|
|
1094
1125
|
case PROPERTY:
|
|
1095
|
-
|
|
1096
|
-
|
|
1126
|
+
var n = getnext(o);
|
|
1127
|
+
if (n) {
|
|
1128
|
+
if (n.type === STAMP && n.text === ":" || n.type === STRAP && n.text === "as") {
|
|
1097
1129
|
prop = "." + o.text;
|
|
1098
|
-
o =
|
|
1130
|
+
o = getnext(n);
|
|
1099
1131
|
continue;
|
|
1100
1132
|
}
|
|
1101
1133
|
}
|
|
@@ -1109,7 +1141,7 @@ var getDeclared = function (o, kind, queue) {
|
|
|
1109
1141
|
var isdec = !/[\.\[]/.test(k);
|
|
1110
1142
|
if (k && isdec) declared.push(k);
|
|
1111
1143
|
if (!isrest) {
|
|
1112
|
-
var prev = o
|
|
1144
|
+
var prev = getprev(o);
|
|
1113
1145
|
if (prev?.type === STAMP && prev.text === '...') {
|
|
1114
1146
|
isrest = true;
|
|
1115
1147
|
}
|
|
@@ -1130,11 +1162,11 @@ var getDeclared = function (o, kind, queue) {
|
|
|
1130
1162
|
var f = snapExpressFoot(o);
|
|
1131
1163
|
if (k) saveTo(used, k, o);
|
|
1132
1164
|
var s = [o];
|
|
1133
|
-
while (o !== f) o = o
|
|
1165
|
+
while (o !== f) o = getnext(o), s.push(o);
|
|
1134
1166
|
if (isrest) declared["..."] = [s, index];
|
|
1135
1167
|
else attributes.push([prop, s]);
|
|
1136
1168
|
o.kind = kind;
|
|
1137
|
-
o = f
|
|
1169
|
+
o = getnext(f);
|
|
1138
1170
|
break;
|
|
1139
1171
|
default:
|
|
1140
1172
|
console.log(createString(pickSentence(o.queue)), o.text, o.type);
|
|
@@ -1144,36 +1176,36 @@ var getDeclared = function (o, kind, queue) {
|
|
|
1144
1176
|
switch (o.type) {
|
|
1145
1177
|
case STRAP:
|
|
1146
1178
|
if (/^(in|of)$/.test(o.text)) {
|
|
1147
|
-
o = o
|
|
1179
|
+
o = getnext(o);
|
|
1148
1180
|
break loop;
|
|
1149
1181
|
}
|
|
1150
1182
|
break loop;
|
|
1151
1183
|
case STAMP:
|
|
1152
1184
|
if (o.text === "=") {
|
|
1153
|
-
o.
|
|
1154
|
-
o = o
|
|
1185
|
+
getprev(o).equal = o;
|
|
1186
|
+
o = getnext(o);
|
|
1155
1187
|
var o0 = skipAssignment(o);
|
|
1156
1188
|
if (isrest) throw new Error(i18n`余集变量不能有默认值`);
|
|
1157
1189
|
attributes[attributes.length - 1].push(queue, o, o0);
|
|
1158
1190
|
while (o !== o0) {
|
|
1159
1191
|
skiped.push(o);
|
|
1160
|
-
o = o
|
|
1192
|
+
o = getnext(o);
|
|
1161
1193
|
}
|
|
1162
1194
|
o = o0;
|
|
1163
1195
|
break;
|
|
1164
1196
|
}
|
|
1165
1197
|
if (o.text === '*') {
|
|
1166
|
-
o = o
|
|
1198
|
+
o = getnext(o);
|
|
1167
1199
|
break;
|
|
1168
1200
|
}
|
|
1169
1201
|
break;
|
|
1170
1202
|
case EXPRESS:
|
|
1171
|
-
if (o.text === '?') o = o
|
|
1203
|
+
if (o.text === '?') o = getnext(o);
|
|
1172
1204
|
break;
|
|
1173
1205
|
}
|
|
1174
1206
|
if (o?.type === STAMP) {
|
|
1175
1207
|
while (o?.istype) {
|
|
1176
|
-
o = o
|
|
1208
|
+
o = getnext(o);
|
|
1177
1209
|
}
|
|
1178
1210
|
}
|
|
1179
1211
|
if (!o) break;
|
|
@@ -1229,7 +1261,8 @@ var hasBreakBetween = function (prev, next) {
|
|
|
1229
1261
|
};
|
|
1230
1262
|
var getSemicolonBetween = function (prev, next) {
|
|
1231
1263
|
if (next.type === PROPERTY) return ";";
|
|
1232
|
-
if (next.type === STAMP && next.text === "*" && next
|
|
1264
|
+
if (next.type === STAMP && next.text === "*" && getnext(next) && getnext(next).type === PROPERTY) return ";";
|
|
1265
|
+
var pp = getprev(prev);
|
|
1233
1266
|
if (
|
|
1234
1267
|
(EXPRESS | VALUE | QUOTED) & prev.type
|
|
1235
1268
|
|| prev.type === STAMP && /^(\+\+|\-\-)$/.test(prev.text)
|
|
@@ -1237,7 +1270,7 @@ var getSemicolonBetween = function (prev, next) {
|
|
|
1237
1270
|
// 这两种分号不存在时efront的解析器可以识别,v8的识别不了,为了兼容追加分号
|
|
1238
1271
|
// do{}while(); return
|
|
1239
1272
|
// =function(){}(); return
|
|
1240
|
-
|
|
1273
|
+
pp?.type === STRAP && pp.text === 'while' || pp?.type === SCOPED
|
|
1241
1274
|
)
|
|
1242
1275
|
)
|
|
1243
1276
|
) {
|
|
@@ -1328,7 +1361,7 @@ var createString = function (parsed) {
|
|
|
1328
1361
|
var helpcolor = parsed.keepcolor === false;
|
|
1329
1362
|
var intag = false;
|
|
1330
1363
|
var run = (o, i, a) => {
|
|
1331
|
-
var prev = o
|
|
1364
|
+
var prev = getprev(o);
|
|
1332
1365
|
a: if (prev && lasttype !== SPACE && patchspace && ~(SPACE | COMMENT | STAMP | PIECE | SCOPED) & o.type) {
|
|
1333
1366
|
if ((QUOTED | SCOPED | STRAP | LABEL | COMMENT | ELEMENT | PROPERTY) & lasttype
|
|
1334
1367
|
|| prev.type === STAMP && !prev.unary && !prev.needle && !prev.isprop
|
|
@@ -1441,7 +1474,7 @@ var createString = function (parsed) {
|
|
|
1441
1474
|
break;
|
|
1442
1475
|
}
|
|
1443
1476
|
case SCOPED:
|
|
1444
|
-
var prev = o
|
|
1477
|
+
var prev = getprev(o);
|
|
1445
1478
|
if (patchspace && !intag && prev && o.type !== QUOTED && (lasttype === STAMP && !prev.unary && !prev.needle
|
|
1446
1479
|
|| lasttype & ~(SPACE | STAMP | COMMENT) && o.brace
|
|
1447
1480
|
|| lasttype === STRAP && !/^(this|arguments|import)$/.test(prev.text)
|
|
@@ -1456,13 +1489,14 @@ var createString = function (parsed) {
|
|
|
1456
1489
|
}
|
|
1457
1490
|
lasttype = SPACE;
|
|
1458
1491
|
o.forEach(run);
|
|
1459
|
-
|
|
1492
|
+
var p = getprev(o);
|
|
1493
|
+
if (p?.type === STRAP && /^for$/.test(p.text));
|
|
1460
1494
|
else if (/^[,;]$/.test(result[result.length - 1]) && autospace && !keepspace) {
|
|
1461
1495
|
var last = o.last;
|
|
1462
|
-
var lp = last && last
|
|
1496
|
+
var lp = last && getprev(last);
|
|
1463
1497
|
if (!lp) result.pop();
|
|
1464
1498
|
else {
|
|
1465
|
-
var lpp = lp
|
|
1499
|
+
var lpp = getprev(lp);
|
|
1466
1500
|
if (lp.type === STRAP && lp.text === 'else' || lp.type === SCOPED && lpp && lpp.type === STRAP && /^(while|if|with|for)/.test(lpp.text));
|
|
1467
1501
|
else result.pop();
|
|
1468
1502
|
}
|
|
@@ -1475,6 +1509,7 @@ var createString = function (parsed) {
|
|
|
1475
1509
|
break;
|
|
1476
1510
|
default:
|
|
1477
1511
|
if (o && typeof o === "object") {
|
|
1512
|
+
var p = getprev(o);
|
|
1478
1513
|
if (intag || o.needle || o.type & (EXPRESS | PROPERTY) && (needhead_reg.test(o.text) || lasttype & EXPRESS && needfoot_reg.test(prev?.text))) {
|
|
1479
1514
|
if (prev?.isdigit && !/^0[\dxbo]|[mni]$|[e\.]/.test(prev.text) && lasttype & ~(SPACE | COMMENT)) result.push(" ");
|
|
1480
1515
|
}
|
|
@@ -1484,28 +1519,26 @@ var createString = function (parsed) {
|
|
|
1484
1519
|
) {
|
|
1485
1520
|
if (autospace || prev?.isdigit) result.push(" ");
|
|
1486
1521
|
}
|
|
1487
|
-
else if (
|
|
1522
|
+
else if (p && o.type === STAMP && !/^[,;]/.test(o.text)) {
|
|
1488
1523
|
if (result[result.length - 1] === " ");
|
|
1489
1524
|
else if (o.text === ':') {
|
|
1490
|
-
var p = o.prev;
|
|
1491
1525
|
if ((lasttype === PROPERTY || p && p.isprop || !o.isExpress));
|
|
1492
1526
|
else if (autospace) result.push(' ');
|
|
1493
1527
|
}
|
|
1494
1528
|
else if (lasttype === STAMP) {
|
|
1495
|
-
|
|
1496
|
-
if (autospace) if (!prev.unary || /[\+\-]$/.test(prev.text) && prev.text === o.text) result.push(" ");
|
|
1529
|
+
if (autospace) if (!p.unary || /[\+\-]$/.test(p.text) && p.text === o.text) result.push(" ");
|
|
1497
1530
|
}
|
|
1498
|
-
else if (/^(\+\+|\-\-)$/.test(
|
|
1531
|
+
else if (/^(\+\+|\-\-)$/.test(p.text) && getprev(p)) {
|
|
1499
1532
|
if (o.unary) {
|
|
1500
|
-
var
|
|
1533
|
+
var pp = getprev(p);
|
|
1501
1534
|
if (
|
|
1502
|
-
|
|
1503
|
-
||
|
|
1535
|
+
pp.type === STRAP && !pp.isExpress
|
|
1536
|
+
|| pp.type & (EXPRESS | VALUE)
|
|
1504
1537
|
) result.push(";");
|
|
1505
1538
|
}
|
|
1506
1539
|
}
|
|
1507
1540
|
|
|
1508
|
-
else if (!/^(\+\+|\-\-)$/.test(o.text) ||
|
|
1541
|
+
else if (!/^(\+\+|\-\-)$/.test(o.text) || p.type & (STAMP | STRAP)) {
|
|
1509
1542
|
if (patchspace && lasttype !== SPACE && !o.needle) result.push(" ");
|
|
1510
1543
|
}
|
|
1511
1544
|
}
|
|
@@ -1555,8 +1588,14 @@ var createExpressList = function (code) {
|
|
|
1555
1588
|
for (var cx = 0, dx = code.length; cx < dx;) {
|
|
1556
1589
|
var o = code[cx];
|
|
1557
1590
|
var ex = skipAssignment(code, cx);
|
|
1558
|
-
|
|
1559
|
-
|
|
1591
|
+
var c = code[ex];
|
|
1592
|
+
if (c?.type === STAMP) {
|
|
1593
|
+
if (/^[,;]$/.test(c.text)) {
|
|
1594
|
+
ex++;
|
|
1595
|
+
}
|
|
1596
|
+
else if (c.text === ':' && !c.isExpress && c.prev?.type !== PROPERTY) {
|
|
1597
|
+
ex++;
|
|
1598
|
+
}
|
|
1560
1599
|
}
|
|
1561
1600
|
if (ex > dx) ex = dx;
|
|
1562
1601
|
var exp = [];
|
|
@@ -1576,13 +1615,13 @@ var isHalfSentence = function (body, i) {
|
|
|
1576
1615
|
if (a.type === STRAP && a.text === 'else') return true;
|
|
1577
1616
|
if (a.type === STAMP && (a.unary || !/^(;|\+\+|\-\-)$/.test(a.text))) return true;
|
|
1578
1617
|
if (a.type !== SCOPED || a.entry !== "(") return false;
|
|
1579
|
-
a = a
|
|
1618
|
+
a = getprev(a);
|
|
1580
1619
|
if (!a || a.type !== STRAP) return false;
|
|
1581
1620
|
if (a.text === 'while') {
|
|
1582
|
-
var p = a
|
|
1583
|
-
if (!p || p.type !== SCOPED || p.entry !== '{'
|
|
1584
|
-
p = p
|
|
1585
|
-
if (p.type !== STRAP || p.text !== 'do') return true;
|
|
1621
|
+
var p = getprev(a);
|
|
1622
|
+
if (!p || p.type !== SCOPED || p.entry !== '{') return true;
|
|
1623
|
+
p = getprev(p);
|
|
1624
|
+
if (!p || p.type !== STRAP || p.text !== 'do') return true;
|
|
1586
1625
|
return false;
|
|
1587
1626
|
}
|
|
1588
1627
|
return /^(if|for|with)$/.test(a.text);
|
|
@@ -1592,8 +1631,8 @@ var splice = function (queue, index, size, ...args) {
|
|
|
1592
1631
|
if (index < 0) index += queue.length;
|
|
1593
1632
|
var p = queue[index];
|
|
1594
1633
|
var n = queue[index + size - 1];
|
|
1595
|
-
var prev = p && p
|
|
1596
|
-
var next = n && n
|
|
1634
|
+
var prev = p && getprev(p);
|
|
1635
|
+
var next = n && getnext(n);
|
|
1597
1636
|
var res = queue.splice(index, size, ...args);
|
|
1598
1637
|
var previ = queue.lastIndexOf(prev, index);
|
|
1599
1638
|
var nexti = queue.indexOf(next, index + args.length);
|
|
@@ -1601,8 +1640,8 @@ var splice = function (queue, index, size, ...args) {
|
|
|
1601
1640
|
if (nexti < 0) nexti = queue.length, next = null;
|
|
1602
1641
|
else nexti++;
|
|
1603
1642
|
var changedargs = queue.slice(previ, nexti);
|
|
1604
|
-
var pp = prev && prev
|
|
1605
|
-
var nn = next && next
|
|
1643
|
+
var pp = prev && getprev(prev);
|
|
1644
|
+
var nn = next && getnext(next);
|
|
1606
1645
|
relink(changedargs);
|
|
1607
1646
|
if (pp) changedargs.first.prev = pp, pp.next = changedargs.first;
|
|
1608
1647
|
else queue.first = changedargs.first;
|
|
@@ -1680,20 +1719,20 @@ var canbeDuplicate = function (body) {
|
|
|
1680
1719
|
};
|
|
1681
1720
|
var pickArgument = function (o) {
|
|
1682
1721
|
var res = [];
|
|
1683
|
-
var t = o && o
|
|
1722
|
+
var t = o && getprev(o), p = o;
|
|
1684
1723
|
while (t && (t.type !== STAMP || !/^[,;]$/.test(t.text))) {
|
|
1685
1724
|
if (p.isprop) {
|
|
1686
|
-
p = t
|
|
1725
|
+
p = getprev(t);
|
|
1687
1726
|
if (!p || !p.isprop) break;
|
|
1688
1727
|
}
|
|
1689
1728
|
res.push(t);
|
|
1690
1729
|
p = t;
|
|
1691
|
-
t = t
|
|
1730
|
+
t = getprev(t);
|
|
1692
1731
|
}
|
|
1693
1732
|
while (o && (o.type !== STAMP || !/^[,;]$/.test(o.text))) {
|
|
1694
1733
|
res.push(o);
|
|
1695
1734
|
var n = o;
|
|
1696
|
-
o = o
|
|
1735
|
+
o = getnext(o);
|
|
1697
1736
|
if (o && o.isprop) {
|
|
1698
1737
|
if (!n.isprop) break;
|
|
1699
1738
|
}
|
|
@@ -1702,15 +1741,15 @@ var pickArgument = function (o) {
|
|
|
1702
1741
|
};
|
|
1703
1742
|
var pickSentence = function (o) {
|
|
1704
1743
|
if (!o) return [];
|
|
1705
|
-
if (o && o.type & (SPACE | COMMENT) && o
|
|
1706
|
-
if (o && o.type === STAMP && o
|
|
1707
|
-
if (o.type === STRAP && /^(in|instanceof|as|of)$/.test(o.text) && o
|
|
1744
|
+
if (o && o.type & (SPACE | COMMENT) && getprev(o)) o = getprev(o);
|
|
1745
|
+
if (o && o.type === STAMP && getprev(o)) o = getprev(o);
|
|
1746
|
+
if (o.type === STRAP && /^(in|instanceof|as|of)$/.test(o.text) && getprev(o)) o = getprev(o);
|
|
1708
1747
|
var h = snapSentenceHead(o);
|
|
1709
1748
|
var e = h;
|
|
1710
1749
|
do {
|
|
1711
1750
|
e = skipAssignment(e);
|
|
1712
1751
|
if (!e || e.type !== STAMP || e.text !== ',') break;
|
|
1713
|
-
e = e
|
|
1752
|
+
e = getnext(e);
|
|
1714
1753
|
} while (e);
|
|
1715
1754
|
var q = o.queue;
|
|
1716
1755
|
if (q) {
|
|
@@ -1721,7 +1760,7 @@ var pickSentence = function (o) {
|
|
|
1721
1760
|
var res = [];
|
|
1722
1761
|
do {
|
|
1723
1762
|
res.push(h);
|
|
1724
|
-
h = h
|
|
1763
|
+
h = getnext(h);
|
|
1725
1764
|
} while (h !== e);
|
|
1726
1765
|
return res;
|
|
1727
1766
|
};
|
|
@@ -1740,7 +1779,7 @@ var pickAssignment = function (n) {
|
|
|
1740
1779
|
var values = [];
|
|
1741
1780
|
while (n && n !== e) {
|
|
1742
1781
|
values.push(n);
|
|
1743
|
-
n = n
|
|
1782
|
+
n = getnext(n);
|
|
1744
1783
|
}
|
|
1745
1784
|
return values;
|
|
1746
1785
|
}
|
|
@@ -1750,7 +1789,7 @@ var insertBefore = function () {
|
|
|
1750
1789
|
var index = queue.indexOf(o);
|
|
1751
1790
|
var os = [].slice.call(arguments, 1);
|
|
1752
1791
|
queue.splice.apply(queue, [index, 0].concat(os));
|
|
1753
|
-
var prev = o && o
|
|
1792
|
+
var prev = o && getprev(o), next = o;
|
|
1754
1793
|
var desc = { value: queue, configurable: true, enumerable: false }
|
|
1755
1794
|
for (var o of os) {
|
|
1756
1795
|
if (prev) prev.next = o;
|
|
@@ -1769,7 +1808,7 @@ var insertAfter = function () {
|
|
|
1769
1808
|
var index = queue.indexOf(o) + 1;
|
|
1770
1809
|
var os = [].slice.call(arguments, 1);
|
|
1771
1810
|
queue.splice.apply(queue, [index, 0].concat(os));
|
|
1772
|
-
var prev = o, next = o && o
|
|
1811
|
+
var prev = o, next = o && getnext(o);
|
|
1773
1812
|
var desc = { value: queue, configurable: true, enumerable: false }
|
|
1774
1813
|
for (var o of os) {
|
|
1775
1814
|
if (prev) prev.next = o;
|
|
@@ -1860,7 +1899,7 @@ var isDeclareOnly = function (o) {
|
|
|
1860
1899
|
if (!q.kind) break;
|
|
1861
1900
|
o = q;
|
|
1862
1901
|
}
|
|
1863
|
-
var n = o
|
|
1902
|
+
var n = getnext(o);
|
|
1864
1903
|
if (!n) return true;
|
|
1865
1904
|
if (n.type !== STAMP || /^[,;]$/.test(n.text)) return true;
|
|
1866
1905
|
return false;
|