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
commit b934c8bcbd
14 changed files with 871 additions and 20 deletions

View File

@ -2240,7 +2240,7 @@ namespace ts {
isStartOfType(/*inStartOfParameter*/ true);
}
function parseParameter(): ParameterDeclaration {
function parseParameter(requireEqualsToken?: boolean): ParameterDeclaration {
const node = <ParameterDeclaration>createNode(SyntaxKind.Parameter);
if (token() === SyntaxKind.ThisKeyword) {
node.name = createIdentifier(/*isIdentifier*/ true);
@ -2269,19 +2269,11 @@ namespace ts {
node.questionToken = parseOptionalToken(SyntaxKind.QuestionToken);
node.type = parseParameterType();
node.initializer = parseBindingElementInitializer(/*inParameter*/ true);
node.initializer = parseInitializer(/*inParameter*/ true, requireEqualsToken);
return addJSDocComment(finishNode(node));
}
function parseBindingElementInitializer(inParameter: boolean) {
return inParameter ? parseParameterInitializer() : parseNonParameterInitializer();
}
function parseParameterInitializer() {
return parseInitializer(/*inParameter*/ true);
}
function fillSignature(
returnToken: SyntaxKind.ColonToken | SyntaxKind.EqualsGreaterThanToken,
flags: SignatureFlags,
@ -2334,7 +2326,8 @@ namespace ts {
setYieldContext(!!(flags & SignatureFlags.Yield));
setAwaitContext(!!(flags & SignatureFlags.Await));
const result = parseDelimitedList(ParsingContext.Parameters, flags & SignatureFlags.JSDoc ? parseJSDocParameter : parseParameter);
const result = parseDelimitedList(ParsingContext.Parameters,
flags & SignatureFlags.JSDoc ? parseJSDocParameter : () => parseParameter(!!(flags & SignatureFlags.RequireCompleteParameterList)));
setYieldContext(savedYieldContext);
setAwaitContext(savedAwaitContext);
@ -3011,7 +3004,7 @@ namespace ts {
return expr;
}
function parseInitializer(inParameter: boolean): Expression {
function parseInitializer(inParameter: boolean, requireEqualsToken?: boolean): Expression {
if (token() !== SyntaxKind.EqualsToken) {
// It's not uncommon during typing for the user to miss writing the '=' token. Check if
// there is no newline after the last token and if we're on an expression. If so, parse
@ -3026,11 +3019,17 @@ namespace ts {
// do not try to parse initializer
return undefined;
}
if (inParameter && requireEqualsToken) {
// = is required when speculatively parsing arrow function parameters,
// so return a fake initializer as a signal that the equals token was missing
const result = createMissingNode(SyntaxKind.Identifier, /*reportAtCurrentPosition*/ true, Diagnostics._0_expected, "=") as Identifier;
result.escapedText = "= not found" as __String;
return result;
}
}
// Initializer[In, Yield] :
// = AssignmentExpression[?In, ?Yield]
parseExpected(SyntaxKind.EqualsToken);
return parseAssignmentExpressionOrHigher();
}
@ -3345,8 +3344,7 @@ namespace ts {
function tryParseAsyncSimpleArrowFunctionExpression(): ArrowFunction | undefined {
// We do a check here so that we won't be doing unnecessarily call to "lookAhead"
if (token() === SyntaxKind.AsyncKeyword) {
const isUnParenthesizedAsyncArrowFunction = lookAhead(isUnParenthesizedAsyncArrowFunctionWorker);
if (isUnParenthesizedAsyncArrowFunction === Tristate.True) {
if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === Tristate.True) {
const asyncModifier = parseModifiersForArrowFunction();
const expr = parseBinaryExpressionOrHigher(/*precedence*/ 0);
return parseSimpleArrowFunctionExpression(<Identifier>expr, asyncModifier);
@ -3380,7 +3378,6 @@ namespace ts {
const node = <ArrowFunction>createNode(SyntaxKind.ArrowFunction);
node.modifiers = parseModifiersForArrowFunction();
const isAsync = hasModifier(node, ModifierFlags.Async) ? SignatureFlags.Await : SignatureFlags.None;
// Arrow functions are never generators.
//
// If we're speculatively parsing a signature for a parenthesized arrow function, then
@ -3403,7 +3400,8 @@ namespace ts {
// - "a ? (b): c" will have "(b):" parsed as a signature with a return type annotation.
//
// So we need just a bit of lookahead to ensure that it can only be a signature.
if (!allowAmbiguity && token() !== SyntaxKind.EqualsGreaterThanToken && token() !== SyntaxKind.OpenBraceToken) {
if (!allowAmbiguity && ((token() !== SyntaxKind.EqualsGreaterThanToken && token() !== SyntaxKind.OpenBraceToken) ||
find(node.parameters, p => p.initializer && ts.isIdentifier(p.initializer) && p.initializer.escapedText === "= not found"))) {
// Returning undefined here will cause our caller to rewind to where we started from.
return undefined;
}
@ -5152,7 +5150,7 @@ namespace ts {
const node = <BindingElement>createNode(SyntaxKind.BindingElement);
node.dotDotDotToken = parseOptionalToken(SyntaxKind.DotDotDotToken);
node.name = parseIdentifierOrPattern();
node.initializer = parseBindingElementInitializer(/*inParameter*/ false);
node.initializer = parseInitializer(/*inParameter*/ false);
return finishNode(node);
}
@ -5169,7 +5167,7 @@ namespace ts {
node.propertyName = propertyName;
node.name = parseIdentifierOrPattern();
}
node.initializer = parseBindingElementInitializer(/*inParameter*/ false);
node.initializer = parseInitializer(/*inParameter*/ false);
return finishNode(node);
}
@ -5208,7 +5206,7 @@ namespace ts {
node.name = parseIdentifierOrPattern();
node.type = parseTypeAnnotation();
if (!isInOrOfKeyword(token())) {
node.initializer = parseInitializer(/*inParameter*/ false);
node.initializer = parseNonParameterInitializer();
}
return finishNode(node);
}

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;
}