diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 63f1696832b8e..8912480d5418e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2240,7 +2240,7 @@ namespace ts { isStartOfType(/*inStartOfParameter*/ true); } - function parseParameter(): ParameterDeclaration { + function parseParameter(requireEqualsToken?: boolean): ParameterDeclaration { const node = 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); @@ -3017,7 +3010,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 @@ -3032,11 +3025,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(); } @@ -3351,8 +3350,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(expr, asyncModifier); @@ -3386,7 +3384,6 @@ namespace ts { const node = 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 @@ -3409,7 +3406,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; } @@ -5158,7 +5156,7 @@ namespace ts { const node = createNode(SyntaxKind.BindingElement); node.dotDotDotToken = parseOptionalToken(SyntaxKind.DotDotDotToken); node.name = parseIdentifierOrPattern(); - node.initializer = parseBindingElementInitializer(/*inParameter*/ false); + node.initializer = parseInitializer(/*inParameter*/ false); return finishNode(node); } @@ -5175,7 +5173,7 @@ namespace ts { node.propertyName = propertyName; node.name = parseIdentifierOrPattern(); } - node.initializer = parseBindingElementInitializer(/*inParameter*/ false); + node.initializer = parseInitializer(/*inParameter*/ false); return finishNode(node); } @@ -5214,7 +5212,7 @@ namespace ts { node.name = parseIdentifierOrPattern(); node.type = parseTypeAnnotation(); if (!isInOrOfKeyword(token())) { - node.initializer = parseInitializer(/*inParameter*/ false); + node.initializer = parseNonParameterInitializer(); } return finishNode(node); } diff --git a/tests/baselines/reference/parserArrowFunctionExpression5.symbols b/tests/baselines/reference/parserArrowFunctionExpression5.symbols new file mode 100644 index 0000000000000..d2b369c70de98 --- /dev/null +++ b/tests/baselines/reference/parserArrowFunctionExpression5.symbols @@ -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, --, --)) + +}; + diff --git a/tests/baselines/reference/parserArrowFunctionExpression5.types b/tests/baselines/reference/parserArrowFunctionExpression5.types new file mode 100644 index 0000000000000..ea9d9395fc059 --- /dev/null +++ b/tests/baselines/reference/parserArrowFunctionExpression5.types @@ -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 + +}; + diff --git a/tests/baselines/reference/parserArrowFunctionExpression6.js b/tests/baselines/reference/parserArrowFunctionExpression6.js new file mode 100644 index 0000000000000..1de3035cc76d5 --- /dev/null +++ b/tests/baselines/reference/parserArrowFunctionExpression6.js @@ -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 () { }); +} +; diff --git a/tests/baselines/reference/parserArrowFunctionExpression6.symbols b/tests/baselines/reference/parserArrowFunctionExpression6.symbols new file mode 100644 index 0000000000000..9b3afdbb95065 --- /dev/null +++ b/tests/baselines/reference/parserArrowFunctionExpression6.symbols @@ -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, --, --)) + +}; + diff --git a/tests/baselines/reference/parserArrowFunctionExpression6.types b/tests/baselines/reference/parserArrowFunctionExpression6.types new file mode 100644 index 0000000000000..6cc4f16e216cb --- /dev/null +++ b/tests/baselines/reference/parserArrowFunctionExpression6.types @@ -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 + +}; + diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.js b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.js new file mode 100644 index 0000000000000..dfcecd0b383b7 --- /dev/null +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.js @@ -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; +} diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.symbols b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.symbols new file mode 100644 index 0000000000000..3ae02bb1888a5 --- /dev/null +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.symbols @@ -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)) +} + diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.types b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.types new file mode 100644 index 0000000000000..50c3d2f92ad3d --- /dev/null +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity6.types @@ -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[] +} + diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity7.errors.txt b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity7.errors.txt new file mode 100644 index 0000000000000..4ec2f5358f7c7 --- /dev/null +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity7.errors.txt @@ -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. + \ No newline at end of file diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity7.js b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity7.js new file mode 100644 index 0000000000000..e2af8b6f5b74f --- /dev/null +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity7.js @@ -0,0 +1,8 @@ +//// [parserRegularExpressionDivideAmbiguity7.ts] +(a/8 + ){} + + +//// [parserRegularExpressionDivideAmbiguity7.js] +(a / 8); +{ } diff --git a/tests/cases/conformance/parser/ecmascript5/ArrowFunctionExpressions/parserArrowFunctionExpression6.ts b/tests/cases/conformance/parser/ecmascript5/ArrowFunctionExpressions/parserArrowFunctionExpression6.ts new file mode 100644 index 0000000000000..d4af97ddf7d57 --- /dev/null +++ b/tests/cases/conformance/parser/ecmascript5/ArrowFunctionExpressions/parserArrowFunctionExpression6.ts @@ -0,0 +1,3 @@ +function foo(q: string, b: number) { + return true ? (q ? true : false) : (b = q.length, function() { }); +}; diff --git a/tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity6.ts b/tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity6.ts new file mode 100644 index 0000000000000..e2e742fd6bf9e --- /dev/null +++ b/tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity6.ts @@ -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; +} diff --git a/tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity7.ts b/tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity7.ts new file mode 100644 index 0000000000000..54f19f7964e3e --- /dev/null +++ b/tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity7.ts @@ -0,0 +1,2 @@ +(a/8 + ){}