Merge pull request #18417 from Microsoft/fail-spec-lambda-parsing-on-parameter-initialiser-missing-=

Fail speculative parsing of arrow functions when their parameter initialisers are missing a =
This commit is contained in:
Nathan Shively-Sanders
2017-09-14 13:01:51 -07:00
committed by GitHub
14 changed files with 871 additions and 20 deletions

View File

@@ -0,0 +1,15 @@
=== tests/cases/conformance/parser/ecmascript5/ArrowFunctionExpressions/parserArrowFunctionExpression5.ts ===
function foo(q: string, b: number) {
>foo : Symbol(foo, Decl(parserArrowFunctionExpression5.ts, 0, 0))
>q : Symbol(q, Decl(parserArrowFunctionExpression5.ts, 0, 13))
>b : Symbol(b, Decl(parserArrowFunctionExpression5.ts, 0, 23))
return true ? (q ? true : false) : (b = q.length, function() { });
>q : Symbol(q, Decl(parserArrowFunctionExpression5.ts, 0, 13))
>b : Symbol(b, Decl(parserArrowFunctionExpression5.ts, 0, 23))
>q.length : Symbol(String.length, Decl(lib.d.ts, --, --))
>q : Symbol(q, Decl(parserArrowFunctionExpression5.ts, 0, 13))
>length : Symbol(String.length, Decl(lib.d.ts, --, --))
};

View File

@@ -0,0 +1,25 @@
=== tests/cases/conformance/parser/ecmascript5/ArrowFunctionExpressions/parserArrowFunctionExpression5.ts ===
function foo(q: string, b: number) {
>foo : (q: string, b: number) => boolean | (() => void)
>q : string
>b : number
return true ? (q ? true : false) : (b = q.length, function() { });
>true ? (q ? true : false) : (b = q.length, function() { }) : boolean | (() => void)
>true : true
>(q ? true : false) : boolean
>q ? true : false : boolean
>q : string
>true : true
>false : false
>(b = q.length, function() { }) : () => void
>b = q.length, function() { } : () => void
>b = q.length : number
>b : number
>q.length : number
>q : string
>length : number
>function() { } : () => void
};

View File

@@ -0,0 +1,11 @@
//// [parserArrowFunctionExpression6.ts]
function foo(q: string, b: number) {
return true ? (q ? true : false) : (b = q.length, function() { });
};
//// [parserArrowFunctionExpression6.js]
function foo(q, b) {
return true ? (q ? true : false) : (b = q.length, function () { });
}
;

View File

@@ -0,0 +1,15 @@
=== tests/cases/conformance/parser/ecmascript5/ArrowFunctionExpressions/parserArrowFunctionExpression6.ts ===
function foo(q: string, b: number) {
>foo : Symbol(foo, Decl(parserArrowFunctionExpression6.ts, 0, 0))
>q : Symbol(q, Decl(parserArrowFunctionExpression6.ts, 0, 13))
>b : Symbol(b, Decl(parserArrowFunctionExpression6.ts, 0, 23))
return true ? (q ? true : false) : (b = q.length, function() { });
>q : Symbol(q, Decl(parserArrowFunctionExpression6.ts, 0, 13))
>b : Symbol(b, Decl(parserArrowFunctionExpression6.ts, 0, 23))
>q.length : Symbol(String.length, Decl(lib.d.ts, --, --))
>q : Symbol(q, Decl(parserArrowFunctionExpression6.ts, 0, 13))
>length : Symbol(String.length, Decl(lib.d.ts, --, --))
};

View File

@@ -0,0 +1,25 @@
=== tests/cases/conformance/parser/ecmascript5/ArrowFunctionExpressions/parserArrowFunctionExpression6.ts ===
function foo(q: string, b: number) {
>foo : (q: string, b: number) => boolean | (() => void)
>q : string
>b : number
return true ? (q ? true : false) : (b = q.length, function() { });
>true ? (q ? true : false) : (b = q.length, function() { }) : boolean | (() => void)
>true : true
>(q ? true : false) : boolean
>q ? true : false : boolean
>q : string
>true : true
>false : false
>(b = q.length, function() { }) : () => void
>b = q.length, function() { } : () => void
>b = q.length : number
>b : number
>q.length : number
>q : string
>length : number
>function() { } : () => void
};

View File

@@ -0,0 +1,46 @@
//// [parserRegularExpressionDivideAmbiguity6.ts]
function c255lsqr8h(a7, a6, a5, a4, a3, a2, a1, a0) {
let r = [];
let v;
r[0] = (v = a0*a0) & 0xFFFF;
r[1] = (v = ((v / 0x10000) | 0) + 2*a0*a1) & 0xFFFF;
r[2] = (v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1) & 0xFFFF;
r[3] = (v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2) & 0xFFFF;
r[4] = (v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2) & 0xFFFF;
r[5] = (v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3) & 0xFFFF;
r[6] = (v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3) & 0xFFFF;
r[7] = (v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4) & 0xFFFF;
r[8] = (v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4) & 0xFFFF;
r[9] = (v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5) & 0xFFFF;
r[10] = (v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5) & 0xFFFF;
r[11] = (v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6) & 0xFFFF;
r[12] = (v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6) & 0xFFFF;
r[13] = (v = ((v / 0x10000) | 0) + 2*a6*a7) & 0xFFFF;
r[14] = (v = ((v / 0x10000) | 0) + a7*a7) & 0xFFFF;
r[15] = ((v / 0x10000) | 0);
return r;
}
//// [parserRegularExpressionDivideAmbiguity6.js]
function c255lsqr8h(a7, a6, a5, a4, a3, a2, a1, a0) {
var r = [];
var v;
r[0] = (v = a0 * a0) & 0xFFFF;
r[1] = (v = ((v / 0x10000) | 0) + 2 * a0 * a1) & 0xFFFF;
r[2] = (v = ((v / 0x10000) | 0) + 2 * a0 * a2 + a1 * a1) & 0xFFFF;
r[3] = (v = ((v / 0x10000) | 0) + 2 * a0 * a3 + 2 * a1 * a2) & 0xFFFF;
r[4] = (v = ((v / 0x10000) | 0) + 2 * a0 * a4 + 2 * a1 * a3 + a2 * a2) & 0xFFFF;
r[5] = (v = ((v / 0x10000) | 0) + 2 * a0 * a5 + 2 * a1 * a4 + 2 * a2 * a3) & 0xFFFF;
r[6] = (v = ((v / 0x10000) | 0) + 2 * a0 * a6 + 2 * a1 * a5 + 2 * a2 * a4 + a3 * a3) & 0xFFFF;
r[7] = (v = ((v / 0x10000) | 0) + 2 * a0 * a7 + 2 * a1 * a6 + 2 * a2 * a5 + 2 * a3 * a4) & 0xFFFF;
r[8] = (v = ((v / 0x10000) | 0) + 2 * a1 * a7 + 2 * a2 * a6 + 2 * a3 * a5 + a4 * a4) & 0xFFFF;
r[9] = (v = ((v / 0x10000) | 0) + 2 * a2 * a7 + 2 * a3 * a6 + 2 * a4 * a5) & 0xFFFF;
r[10] = (v = ((v / 0x10000) | 0) + 2 * a3 * a7 + 2 * a4 * a6 + a5 * a5) & 0xFFFF;
r[11] = (v = ((v / 0x10000) | 0) + 2 * a4 * a7 + 2 * a5 * a6) & 0xFFFF;
r[12] = (v = ((v / 0x10000) | 0) + 2 * a5 * a7 + a6 * a6) & 0xFFFF;
r[13] = (v = ((v / 0x10000) | 0) + 2 * a6 * a7) & 0xFFFF;
r[14] = (v = ((v / 0x10000) | 0) + a7 * a7) & 0xFFFF;
r[15] = ((v / 0x10000) | 0);
return r;
}

View File

@@ -0,0 +1,172 @@
=== tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity6.ts ===
function c255lsqr8h(a7, a6, a5, a4, a3, a2, a1, a0) {
>c255lsqr8h : Symbol(c255lsqr8h, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 0))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
let r = [];
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
let v;
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
r[0] = (v = a0*a0) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
r[1] = (v = ((v / 0x10000) | 0) + 2*a0*a1) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
r[2] = (v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
r[3] = (v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
r[4] = (v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
r[5] = (v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
r[6] = (v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
r[7] = (v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a0 : Symbol(a0, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 47))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
r[8] = (v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a1 : Symbol(a1, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 43))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
r[9] = (v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a2 : Symbol(a2, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 39))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
r[10] = (v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a3 : Symbol(a3, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 35))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
r[11] = (v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a4 : Symbol(a4, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 31))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
r[12] = (v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a5 : Symbol(a5, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 27))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
r[13] = (v = ((v / 0x10000) | 0) + 2*a6*a7) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a6 : Symbol(a6, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 23))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
r[14] = (v = ((v / 0x10000) | 0) + a7*a7) & 0xFFFF;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
>a7 : Symbol(a7, Decl(parserRegularExpressionDivideAmbiguity6.ts, 0, 20))
r[15] = ((v / 0x10000) | 0);
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
>v : Symbol(v, Decl(parserRegularExpressionDivideAmbiguity6.ts, 2, 7))
return r;
>r : Symbol(r, Decl(parserRegularExpressionDivideAmbiguity6.ts, 1, 7))
}

View File

@@ -0,0 +1,498 @@
=== tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity6.ts ===
function c255lsqr8h(a7, a6, a5, a4, a3, a2, a1, a0) {
>c255lsqr8h : (a7: any, a6: any, a5: any, a4: any, a3: any, a2: any, a1: any, a0: any) => any[]
>a7 : any
>a6 : any
>a5 : any
>a4 : any
>a3 : any
>a2 : any
>a1 : any
>a0 : any
let r = [];
>r : any[]
>[] : undefined[]
let v;
>v : any
r[0] = (v = a0*a0) & 0xFFFF;
>r[0] = (v = a0*a0) & 0xFFFF : number
>r[0] : any
>r : any[]
>0 : 0
>(v = a0*a0) & 0xFFFF : number
>(v = a0*a0) : number
>v = a0*a0 : number
>v : any
>a0*a0 : number
>a0 : any
>a0 : any
>0xFFFF : 65535
r[1] = (v = ((v / 0x10000) | 0) + 2*a0*a1) & 0xFFFF;
>r[1] = (v = ((v / 0x10000) | 0) + 2*a0*a1) & 0xFFFF : number
>r[1] : any
>r : any[]
>1 : 1
>(v = ((v / 0x10000) | 0) + 2*a0*a1) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a0*a1) : number
>v = ((v / 0x10000) | 0) + 2*a0*a1 : number
>v : any
>((v / 0x10000) | 0) + 2*a0*a1 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a0*a1 : number
>2*a0 : number
>2 : 2
>a0 : any
>a1 : any
>0xFFFF : 65535
r[2] = (v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1) & 0xFFFF;
>r[2] = (v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1) & 0xFFFF : number
>r[2] : any
>r : any[]
>2 : 2
>(v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1) : number
>v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1 : number
>v : any
>((v / 0x10000) | 0) + 2*a0*a2 + a1*a1 : number
>((v / 0x10000) | 0) + 2*a0*a2 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a0*a2 : number
>2*a0 : number
>2 : 2
>a0 : any
>a2 : any
>a1*a1 : number
>a1 : any
>a1 : any
>0xFFFF : 65535
r[3] = (v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2) & 0xFFFF;
>r[3] = (v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2) & 0xFFFF : number
>r[3] : any
>r : any[]
>3 : 3
>(v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2) : number
>v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2 : number
>v : any
>((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2 : number
>((v / 0x10000) | 0) + 2*a0*a3 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a0*a3 : number
>2*a0 : number
>2 : 2
>a0 : any
>a3 : any
>2*a1*a2 : number
>2*a1 : number
>2 : 2
>a1 : any
>a2 : any
>0xFFFF : 65535
r[4] = (v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2) & 0xFFFF;
>r[4] = (v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2) & 0xFFFF : number
>r[4] : any
>r : any[]
>4 : 4
>(v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2) : number
>v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2 : number
>v : any
>((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2 : number
>((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 : number
>((v / 0x10000) | 0) + 2*a0*a4 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a0*a4 : number
>2*a0 : number
>2 : 2
>a0 : any
>a4 : any
>2*a1*a3 : number
>2*a1 : number
>2 : 2
>a1 : any
>a3 : any
>a2*a2 : number
>a2 : any
>a2 : any
>0xFFFF : 65535
r[5] = (v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3) & 0xFFFF;
>r[5] = (v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3) & 0xFFFF : number
>r[5] : any
>r : any[]
>5 : 5
>(v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3) : number
>v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3 : number
>v : any
>((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3 : number
>((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 : number
>((v / 0x10000) | 0) + 2*a0*a5 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a0*a5 : number
>2*a0 : number
>2 : 2
>a0 : any
>a5 : any
>2*a1*a4 : number
>2*a1 : number
>2 : 2
>a1 : any
>a4 : any
>2*a2*a3 : number
>2*a2 : number
>2 : 2
>a2 : any
>a3 : any
>0xFFFF : 65535
r[6] = (v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3) & 0xFFFF;
>r[6] = (v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3) & 0xFFFF : number
>r[6] : any
>r : any[]
>6 : 6
>(v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3) : number
>v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3 : number
>v : any
>((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3 : number
>((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 : number
>((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 : number
>((v / 0x10000) | 0) + 2*a0*a6 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a0*a6 : number
>2*a0 : number
>2 : 2
>a0 : any
>a6 : any
>2*a1*a5 : number
>2*a1 : number
>2 : 2
>a1 : any
>a5 : any
>2*a2*a4 : number
>2*a2 : number
>2 : 2
>a2 : any
>a4 : any
>a3*a3 : number
>a3 : any
>a3 : any
>0xFFFF : 65535
r[7] = (v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4) & 0xFFFF;
>r[7] = (v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4) & 0xFFFF : number
>r[7] : any
>r : any[]
>7 : 7
>(v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4) : number
>v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4 : number
>v : any
>((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4 : number
>((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 : number
>((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 : number
>((v / 0x10000) | 0) + 2*a0*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a0*a7 : number
>2*a0 : number
>2 : 2
>a0 : any
>a7 : any
>2*a1*a6 : number
>2*a1 : number
>2 : 2
>a1 : any
>a6 : any
>2*a2*a5 : number
>2*a2 : number
>2 : 2
>a2 : any
>a5 : any
>2*a3*a4 : number
>2*a3 : number
>2 : 2
>a3 : any
>a4 : any
>0xFFFF : 65535
r[8] = (v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4) & 0xFFFF;
>r[8] = (v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4) & 0xFFFF : number
>r[8] : any
>r : any[]
>8 : 8
>(v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4) : number
>v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4 : number
>v : any
>((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4 : number
>((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 : number
>((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 : number
>((v / 0x10000) | 0) + 2*a1*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a1*a7 : number
>2*a1 : number
>2 : 2
>a1 : any
>a7 : any
>2*a2*a6 : number
>2*a2 : number
>2 : 2
>a2 : any
>a6 : any
>2*a3*a5 : number
>2*a3 : number
>2 : 2
>a3 : any
>a5 : any
>a4*a4 : number
>a4 : any
>a4 : any
>0xFFFF : 65535
r[9] = (v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5) & 0xFFFF;
>r[9] = (v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5) & 0xFFFF : number
>r[9] : any
>r : any[]
>9 : 9
>(v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5) : number
>v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5 : number
>v : any
>((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5 : number
>((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 : number
>((v / 0x10000) | 0) + 2*a2*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a2*a7 : number
>2*a2 : number
>2 : 2
>a2 : any
>a7 : any
>2*a3*a6 : number
>2*a3 : number
>2 : 2
>a3 : any
>a6 : any
>2*a4*a5 : number
>2*a4 : number
>2 : 2
>a4 : any
>a5 : any
>0xFFFF : 65535
r[10] = (v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5) & 0xFFFF;
>r[10] = (v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5) & 0xFFFF : number
>r[10] : any
>r : any[]
>10 : 10
>(v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5) : number
>v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5 : number
>v : any
>((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5 : number
>((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 : number
>((v / 0x10000) | 0) + 2*a3*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a3*a7 : number
>2*a3 : number
>2 : 2
>a3 : any
>a7 : any
>2*a4*a6 : number
>2*a4 : number
>2 : 2
>a4 : any
>a6 : any
>a5*a5 : number
>a5 : any
>a5 : any
>0xFFFF : 65535
r[11] = (v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6) & 0xFFFF;
>r[11] = (v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6) & 0xFFFF : number
>r[11] : any
>r : any[]
>11 : 11
>(v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6) : number
>v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6 : number
>v : any
>((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6 : number
>((v / 0x10000) | 0) + 2*a4*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a4*a7 : number
>2*a4 : number
>2 : 2
>a4 : any
>a7 : any
>2*a5*a6 : number
>2*a5 : number
>2 : 2
>a5 : any
>a6 : any
>0xFFFF : 65535
r[12] = (v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6) & 0xFFFF;
>r[12] = (v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6) & 0xFFFF : number
>r[12] : any
>r : any[]
>12 : 12
>(v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6) : number
>v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6 : number
>v : any
>((v / 0x10000) | 0) + 2*a5*a7 + a6*a6 : number
>((v / 0x10000) | 0) + 2*a5*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a5*a7 : number
>2*a5 : number
>2 : 2
>a5 : any
>a7 : any
>a6*a6 : number
>a6 : any
>a6 : any
>0xFFFF : 65535
r[13] = (v = ((v / 0x10000) | 0) + 2*a6*a7) & 0xFFFF;
>r[13] = (v = ((v / 0x10000) | 0) + 2*a6*a7) & 0xFFFF : number
>r[13] : any
>r : any[]
>13 : 13
>(v = ((v / 0x10000) | 0) + 2*a6*a7) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + 2*a6*a7) : number
>v = ((v / 0x10000) | 0) + 2*a6*a7 : number
>v : any
>((v / 0x10000) | 0) + 2*a6*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>2*a6*a7 : number
>2*a6 : number
>2 : 2
>a6 : any
>a7 : any
>0xFFFF : 65535
r[14] = (v = ((v / 0x10000) | 0) + a7*a7) & 0xFFFF;
>r[14] = (v = ((v / 0x10000) | 0) + a7*a7) & 0xFFFF : number
>r[14] : any
>r : any[]
>14 : 14
>(v = ((v / 0x10000) | 0) + a7*a7) & 0xFFFF : number
>(v = ((v / 0x10000) | 0) + a7*a7) : number
>v = ((v / 0x10000) | 0) + a7*a7 : number
>v : any
>((v / 0x10000) | 0) + a7*a7 : number
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
>a7*a7 : number
>a7 : any
>a7 : any
>0xFFFF : 65535
r[15] = ((v / 0x10000) | 0);
>r[15] = ((v / 0x10000) | 0) : number
>r[15] : any
>r : any[]
>15 : 15
>((v / 0x10000) | 0) : number
>(v / 0x10000) | 0 : number
>(v / 0x10000) : number
>v / 0x10000 : number
>v : any
>0x10000 : 65536
>0 : 0
return r;
>r : any[]
}

View File

@@ -0,0 +1,12 @@
tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity7.ts(1,2): error TS2304: Cannot find name 'a'.
tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity7.ts(2,3): error TS1005: ';' expected.
==== tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity7.ts (2 errors) ====
(a/8
~
!!! error TS2304: Cannot find name 'a'.
){}
~
!!! error TS1005: ';' expected.

View File

@@ -0,0 +1,8 @@
//// [parserRegularExpressionDivideAmbiguity7.ts]
(a/8
){}
//// [parserRegularExpressionDivideAmbiguity7.js]
(a / 8);
{ }

View File

@@ -0,0 +1,3 @@
function foo(q: string, b: number) {
return true ? (q ? true : false) : (b = q.length, function() { });
};

View File

@@ -0,0 +1,21 @@
function c255lsqr8h(a7, a6, a5, a4, a3, a2, a1, a0) {
let r = [];
let v;
r[0] = (v = a0*a0) & 0xFFFF;
r[1] = (v = ((v / 0x10000) | 0) + 2*a0*a1) & 0xFFFF;
r[2] = (v = ((v / 0x10000) | 0) + 2*a0*a2 + a1*a1) & 0xFFFF;
r[3] = (v = ((v / 0x10000) | 0) + 2*a0*a3 + 2*a1*a2) & 0xFFFF;
r[4] = (v = ((v / 0x10000) | 0) + 2*a0*a4 + 2*a1*a3 + a2*a2) & 0xFFFF;
r[5] = (v = ((v / 0x10000) | 0) + 2*a0*a5 + 2*a1*a4 + 2*a2*a3) & 0xFFFF;
r[6] = (v = ((v / 0x10000) | 0) + 2*a0*a6 + 2*a1*a5 + 2*a2*a4 + a3*a3) & 0xFFFF;
r[7] = (v = ((v / 0x10000) | 0) + 2*a0*a7 + 2*a1*a6 + 2*a2*a5 + 2*a3*a4) & 0xFFFF;
r[8] = (v = ((v / 0x10000) | 0) + 2*a1*a7 + 2*a2*a6 + 2*a3*a5 + a4*a4) & 0xFFFF;
r[9] = (v = ((v / 0x10000) | 0) + 2*a2*a7 + 2*a3*a6 + 2*a4*a5) & 0xFFFF;
r[10] = (v = ((v / 0x10000) | 0) + 2*a3*a7 + 2*a4*a6 + a5*a5) & 0xFFFF;
r[11] = (v = ((v / 0x10000) | 0) + 2*a4*a7 + 2*a5*a6) & 0xFFFF;
r[12] = (v = ((v / 0x10000) | 0) + 2*a5*a7 + a6*a6) & 0xFFFF;
r[13] = (v = ((v / 0x10000) | 0) + 2*a6*a7) & 0xFFFF;
r[14] = (v = ((v / 0x10000) | 0) + a7*a7) & 0xFFFF;
r[15] = ((v / 0x10000) | 0);
return r;
}