efront 4.3.8 → 4.3.10
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/compile/Program.js
CHANGED
|
@@ -448,7 +448,7 @@ class Program {
|
|
|
448
448
|
if (isdigit && lasttype === STAMP) {
|
|
449
449
|
var last = queue.last;
|
|
450
450
|
var prev = last.prev;
|
|
451
|
-
if ((!prev || prev.type & (STAMP | STRAP)) && /^[+\-]+$/.test(last.text)) {
|
|
451
|
+
if ((!prev || prev.type & (STAMP | STRAP) && !/^(\+\+|\-\-)$/.test(prev.text)) && /^[+\-]+$/.test(last.text)) {
|
|
452
452
|
last.type = VALUE;
|
|
453
453
|
last.text += m;
|
|
454
454
|
lasttype = VALUE;
|
package/coms/compile/common.js
CHANGED
package/coms/compile/unstruct.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var { SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL, canbeTemp: _canbeTemp, isEval, createString, skipAssignment, skipSentenceQueue, isHalfSentence, splice, relink, createExpressList, snapExpressHead, snapExpressFoot } = require("./common");
|
|
1
|
+
var { SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL, canbeTemp: _canbeTemp, isEval, createString, skipAssignment, pickSentence, skipSentenceQueue, isHalfSentence, splice, relink, createExpressList, snapExpressHead, snapExpressFoot } = require("./common");
|
|
2
2
|
var scanner2 = require("./scanner2");
|
|
3
3
|
var returnText = function () { return this.text };
|
|
4
4
|
var NodeNotClone = o => Object.assign(Object.create(null), o, { toString: returnText });
|
|
@@ -54,7 +54,7 @@ var mount_break = function (body, cx, b1s, iscontinue) {
|
|
|
54
54
|
}
|
|
55
55
|
var _break = function (body, cx, result, iscontinue) {
|
|
56
56
|
var re = result[result.length - 1];
|
|
57
|
-
if (!result.length || re.ret_ && !re.await_ && re.ret_ !== -2) return;
|
|
57
|
+
if (!result.length || result.length === 1 && re.ret_ && !re.await_ && re.ret_ !== -2) return;
|
|
58
58
|
var _b = scanner2('return []');
|
|
59
59
|
_b.ret_ = -1;
|
|
60
60
|
mount_break(body, cx, [_b[1]], iscontinue);
|
|
@@ -144,6 +144,7 @@ var _withset = function (text, tmpname, valname) {
|
|
|
144
144
|
};
|
|
145
145
|
var _switch = function (body, cx, unblock, result, getname) {
|
|
146
146
|
var o = body[cx];
|
|
147
|
+
var O = o;
|
|
147
148
|
o = o.next;
|
|
148
149
|
if (!o) return;
|
|
149
150
|
var qt = ternary(o, getname, true);
|
|
@@ -492,7 +493,11 @@ var remove_end_comma = function (o) {
|
|
|
492
493
|
};
|
|
493
494
|
var ispropcall = function (o) {
|
|
494
495
|
var n = o.next;
|
|
495
|
-
if (!n
|
|
496
|
+
if (!n) return false;
|
|
497
|
+
if (n.type === STAMP) {
|
|
498
|
+
if (!/^(\+\+|\-\-|[^!=><]+\=|>>>?=|<<=)$/.test(n.text)) return false;
|
|
499
|
+
}
|
|
500
|
+
else if (n.type !== SCOPED || n.entry !== '(') return false;
|
|
496
501
|
if (o.type === EXPRESS && snapExpressHead(o) !== o) return true;
|
|
497
502
|
if (o.type === SCOPED && o.entry === '[' && snapExpressHead(o) !== o) return true;
|
|
498
503
|
return false;
|
|
@@ -961,10 +966,10 @@ var _express = function (body, getname, ret) {
|
|
|
961
966
|
}
|
|
962
967
|
if (o.type & (STRAP | STAMP)) {
|
|
963
968
|
var p = 0;
|
|
964
|
-
if (
|
|
965
|
-
if (!p &&
|
|
969
|
+
if (/^([!~]|\+\-|\-\+)*$/.test(o.text)) p = powermap["!"];
|
|
970
|
+
if (!p && /^[\+\-]$/.test(o.text)) p = needpunc ? powermap["+"] : powermap["!"];
|
|
966
971
|
if (!p) p = powermap[o.text];
|
|
967
|
-
needpunc = false;
|
|
972
|
+
if (o.unary) needpunc = false;
|
|
968
973
|
var b = body.slice(bx, cx + 1);
|
|
969
974
|
bx = cx + 1;
|
|
970
975
|
b.index = nameindex;
|
|
@@ -133,6 +133,18 @@ test("predef[key[1]][key[2]][key[3]]", '_ = key[1]; _ = predef[_]; _0 = key[2];
|
|
|
133
133
|
test("[key[1]][key[2]][key[3]]", '_ = key[1]; _ = [_]; _0 = key[2]; _ = _[_0]; _0 = key[3]; _[_0]');
|
|
134
134
|
test("[key[1]][key[2]]+[key[3]][key[4]]", '_ = key[1]; _ = [_]; _0 = key[2]; _ = _[_0]; _0 = key[3]; _0 = [_0]; _1 = key[4]; _ + _0[_1]');
|
|
135
135
|
test("if(a)a:{break a}", "if (!a) return [2, 0]; return [1, 0];\r\n return [1, 0]", true);
|
|
136
|
-
unstruct.debug = true;
|
|
137
136
|
test("rgb=(rgb<<8|rgb>>16)&0xffffff", "_ = rgb << 8, _0 = rgb >> 16, _ = _ | _0; _ = (_); rgb = _ & 0xffffff", true);
|
|
138
|
-
test(`if (c) a; else return true; return false`, "if (!c) return [1, 0]; a; return [2, 0];\r\n return [true, 2];\r\n return [false, 2]")
|
|
137
|
+
test(`if (c) a; else return true; return false`, "if (!c) return [1, 0]; a; return [2, 0];\r\n return [true, 2];\r\n return [false, 2]")
|
|
138
|
+
test(`switch(a){case a:a=a?1:0;break;case b:a=b;break;}`, "if (a === a) return [1, 0]; if (a === b) return [4, 0]; return [5, 0];\r\n if (!a) return [1, 0]; a = 1; return [2, 0];\r\n a = 0; return [1, 0];\r\n return [2, 0];\r\n a = b; return [1, 0]");
|
|
139
|
+
test(`a=typeof a!==1`, "_ = typeof a, a = _ !== 1");
|
|
140
|
+
test(`a[0]++`, "a[0]++");
|
|
141
|
+
test(`1+a[0]++`, "_ = a[0]++, 1 + _");
|
|
142
|
+
test(`a[0]++ + 1`, "_ = a[0]++, _ + 1");
|
|
143
|
+
test(`a[0]-- + 1`, "_ = a[0]--, _ + 1");
|
|
144
|
+
test(`a[0]-- +1`, "_ = a[0]--, _ + 1");
|
|
145
|
+
test(`a[0]--+1`, "_ = a[0]--, _ + 1");
|
|
146
|
+
test(`a[0]+++1`, "_ = a[0]++, _ + 1");
|
|
147
|
+
unstruct.debug = true; r++;
|
|
148
|
+
test(`c=b\r\n++a`, "c = b; ++a");
|
|
149
|
+
test(`c=b+\r\n++a`, "_ =\r\n++a, c = b + _");
|
|
150
|
+
test(`c=b+ ++a`, "_ = ++a, c = b + _");
|