mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 736742 - Fix decompiler precedence for destructuring assignment with comma-expression (r=jorendorff)
--HG-- extra : rebase_source : d38dc6e2eec3a90e5bf1d86862da4734d374e6e2
This commit is contained in:
parent
910899696e
commit
57eb0b35a5
@ -73,6 +73,8 @@ test('return let (x = x + 1, [] = x, [[, , ]] = x, y = x) y;');
|
|||||||
test('return let ([{a: x}] = x, [, {b: y}] = x) let (x = x + 1, y = y + 2) x + y;', [{a:"p"},{b:"p"}], "p1p2");
|
test('return let ([{a: x}] = x, [, {b: y}] = x) let (x = x + 1, y = y + 2) x + y;', [{a:"p"},{b:"p"}], "p1p2");
|
||||||
test('return let ([] = []) x;');
|
test('return let ([] = []) x;');
|
||||||
test('return let ([] = [x]) x;');
|
test('return let ([] = [x]) x;');
|
||||||
|
test('return let ([a] = (1, [x])) a;');
|
||||||
|
test('return let ([a] = (1, x, 1, x)) a;', ['ponies']);
|
||||||
test('return let ([x] = [x]) x;');
|
test('return let ([x] = [x]) x;');
|
||||||
test('return let ([[a, [b, c]]] = [[x, []]]) a;');
|
test('return let ([[a, [b, c]]] = [[x, []]]) a;');
|
||||||
test('return let ([x, y] = [x, x + 1]) x + y;', 1, 3);
|
test('return let ([x, y] = [x, x + 1]) x + y;', 1, 3);
|
||||||
@ -129,6 +131,8 @@ test('let (x = x + 1, [] = x, [[, , ]] = x, y = x) {return y;}');
|
|||||||
test('let ([{a: x}] = x, [, {b: y}] = x) {let (x = x + 1, y = y + 2) {return x + y;}}', [{a:"p"},{b:"p"}], "p1p2");
|
test('let ([{a: x}] = x, [, {b: y}] = x) {let (x = x + 1, y = y + 2) {return x + y;}}', [{a:"p"},{b:"p"}], "p1p2");
|
||||||
test('let ([] = []) {return x;}');
|
test('let ([] = []) {return x;}');
|
||||||
test('let ([] = [x]) {return x;}');
|
test('let ([] = [x]) {return x;}');
|
||||||
|
test('let ([a] = (1, [x])) {return a;}');
|
||||||
|
test('let ([a] = (1, x, 1, x)) {return a;}', ['ponies']);
|
||||||
test('let ([x] = [x]) {return x;}');
|
test('let ([x] = [x]) {return x;}');
|
||||||
test('let ([[a, [b, c]]] = [[x, []]]) {return a;}');
|
test('let ([[a, [b, c]]] = [[x, []]]) {return a;}');
|
||||||
test('let ([x, y] = [x, x + 1]) {return x + y;}', 1, 3);
|
test('let ([x, y] = [x, x + 1]) {return x + y;}', 1, 3);
|
||||||
@ -174,6 +178,8 @@ test('var [{a: X}] = x, [, {b: y}] = x;var X = X + 1, y = y + 2;return X + y;',
|
|||||||
test('var [x] = [x];return x;');
|
test('var [x] = [x];return x;');
|
||||||
test('var [[a, [b, c]]] = [[x, []]];return a;');
|
test('var [[a, [b, c]]] = [[x, []]];return a;');
|
||||||
test('var [y] = [x];return y;');
|
test('var [y] = [x];return y;');
|
||||||
|
test('var [a] = (1, [x]);return a;');
|
||||||
|
test('var [a] = (1, x, 1, x);return a;', ['ponies']);
|
||||||
test('var [x, y] = [x, x + 1];return x + y;', 1, 3);
|
test('var [x, y] = [x, x + 1];return x + y;', 1, 3);
|
||||||
test('var [x, y, z] = [x, x + 1, x + 2];return x + y + z;', 1, 6);
|
test('var [x, y, z] = [x, x + 1, x + 2];return x + y + z;', 1, 6);
|
||||||
test('var [[x]] = [[x]];return x;');
|
test('var [[x]] = [[x]];return x;');
|
||||||
@ -213,6 +219,8 @@ test('if (x) {let [{a: X}] = x, [, {b: Y}] = x;var XX = X + 1, YY = Y + 2;return
|
|||||||
test('if (x) {let [[a, [b, c]]] = [[x, []]];return a;}');
|
test('if (x) {let [[a, [b, c]]] = [[x, []]];return a;}');
|
||||||
test('if (x) {let [X] = [x];return X;}');
|
test('if (x) {let [X] = [x];return X;}');
|
||||||
test('if (x) {let [y] = [x];return y;}');
|
test('if (x) {let [y] = [x];return y;}');
|
||||||
|
test('if (x) {let [a] = (1, [x]);return a;}');
|
||||||
|
test('if (x) {let [a] = (1, x, 1, x);return a;}', ['ponies']);
|
||||||
test('if (x) {let [X, y] = [x, x + 1];return X + y;}', 1, 3);
|
test('if (x) {let [X, y] = [x, x + 1];return X + y;}', 1, 3);
|
||||||
test('if (x) {let [X, y, z] = [x, x + 1, x + 2];return X + y + z;}', 1, 6);
|
test('if (x) {let [X, y, z] = [x, x + 1, x + 2];return X + y + z;}', 1, 6);
|
||||||
test('if (x) {let [[X]] = [[x]];return X;}');
|
test('if (x) {let [[X]] = [[x]];return X;}');
|
||||||
@ -279,6 +287,8 @@ test('for (let y;;) {let y;return x;}');
|
|||||||
test('for (let a = x;;) {let c = x, d = x;return c;}');
|
test('for (let a = x;;) {let c = x, d = x;return c;}');
|
||||||
test('for (let [a, b] = x;;) {let c = x, d = x;return c;}');
|
test('for (let [a, b] = x;;) {let c = x, d = x;return c;}');
|
||||||
test('for (let [] = [[]] = {};;) {return x;}');
|
test('for (let [] = [[]] = {};;) {return x;}');
|
||||||
|
test('for (let [a] = (1, [x]);;) {return a;}');
|
||||||
|
test('for (let [a] = (1, x, 1, x);;) {return a;}', ['ponies']);
|
||||||
isError('for (let x = 1, x = 2;;) {}');
|
isError('for (let x = 1, x = 2;;) {}');
|
||||||
isError('for (let [x, y] = a, {a:x} = b;;) {}');
|
isError('for (let [x, y] = a, {a:x} = b;;) {}');
|
||||||
isError('for (let [x, y, x] = a;;) {}');
|
isError('for (let [x, y, x] = a;;) {}');
|
||||||
|
@ -4095,8 +4095,13 @@ Decompile(SprintStack *ss, jsbytecode *pc, int nb)
|
|||||||
if (!pc)
|
if (!pc)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
lval = POP_STR(); /* Pop the decompiler result. */
|
/* Left-hand side never needs parens. */
|
||||||
rval = POP_STR(); /* Pop the initializer expression. */
|
JS_ASSERT(js_CodeSpec[JSOP_POP].prec <= 3);
|
||||||
|
lval = PopStr(ss, JSOP_POP);
|
||||||
|
|
||||||
|
/* Make sure comma-expression on rhs gets parens. */
|
||||||
|
JS_ASSERT(js_CodeSpec[JSOP_SETNAME].prec > js_CodeSpec[JSOP_POP].prec);
|
||||||
|
rval = PopStr(ss, JSOP_SETNAME);
|
||||||
|
|
||||||
if (strcmp(rval, forelem_cookie) == 0) {
|
if (strcmp(rval, forelem_cookie) == 0) {
|
||||||
todo = Sprint(&ss->sprinter, ss_format,
|
todo = Sprint(&ss->sprinter, ss_format,
|
||||||
|
Loading…
Reference in New Issue
Block a user