From 82eb992dc43ad91ee553b9853ef7f6501b1afd77 Mon Sep 17 00:00:00 2001 From: jbondc Date: Thu, 8 Oct 2015 08:21:28 -0400 Subject: [PATCH] Accept baselines. --- src/compiler/checker.ts | 12 ++-- .../baselines/reference/constIndexedAccess.js | 69 ++++++++++++++++++ .../reference/constIndexedAccess.symbols | 68 ++++++++++++++++++ .../reference/constIndexedAccess.types | 72 +++++++++++++++++++ 4 files changed, 215 insertions(+), 6 deletions(-) create mode 100644 tests/baselines/reference/constIndexedAccess.js create mode 100644 tests/baselines/reference/constIndexedAccess.symbols create mode 100644 tests/baselines/reference/constIndexedAccess.types diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c36ce9a7667..d6e5a73d146 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8134,12 +8134,12 @@ namespace ts { if (indexArgumentExpression.kind === SyntaxKind.StringLiteral || indexArgumentExpression.kind === SyntaxKind.NumericLiteral) { return (indexArgumentExpression).text; } - if (indexArgumentExpression.kind === SyntaxKind.ElementAccessExpression || indexArgumentExpression.kind === SyntaxKind.PropertyAccessExpression) { - let value = getConstantValue(indexArgumentExpression); - if (value !== undefined) { - return value.toString(); - } - } + if (indexArgumentExpression.kind === SyntaxKind.ElementAccessExpression || indexArgumentExpression.kind === SyntaxKind.PropertyAccessExpression) { + let value = getConstantValue(indexArgumentExpression); + if (value !== undefined) { + return value.toString(); + } + } if (checkThatExpressionIsProperSymbolReference(indexArgumentExpression, indexArgumentType, /*reportError*/ false)) { let rightHandSideName = ((indexArgumentExpression).name).text; return getPropertyNameForKnownSymbolName(rightHandSideName); diff --git a/tests/baselines/reference/constIndexedAccess.js b/tests/baselines/reference/constIndexedAccess.js new file mode 100644 index 00000000000..ee0e9b8cc36 --- /dev/null +++ b/tests/baselines/reference/constIndexedAccess.js @@ -0,0 +1,69 @@ +//// [constIndexedAccess.ts] + +const enum numbers { + zero, + one +} + +interface indexAccess { + 0: string; + 1: number; +} + +let test: indexAccess; + +let s = test[0]; +let n = test[1]; + +let s1 = test[numbers.zero]; +let n1 = test[numbers.one]; + +/* +TODO: revisit with const propagation + +const zero = 0; +const one = 1; + +let s2 = test[zero]; +let n2 = test[one]; + +const zeroRef = zero; +const oneRef = one; + +let s3 = test[zeroRef]; +let n3 = test[oneRef]; + +const zeroRefEnum = numbers.zero; +const oneRefEnum = numbers.one; + +let s4 = test[zeroRefEnum]; +let n4 = test[oneRefEnum]; +*/ + +//// [constIndexedAccess.js] +var test; +var s = test[0]; +var n = test[1]; +var s1 = test[0 /* zero */]; +var n1 = test[1 /* one */]; +/* +TODO: revisit with const propagation + +const zero = 0; +const one = 1; + +let s2 = test[zero]; +let n2 = test[one]; + +const zeroRef = zero; +const oneRef = one; + +let s3 = test[zeroRef]; +let n3 = test[oneRef]; + +const zeroRefEnum = numbers.zero; +const oneRefEnum = numbers.one; + +let s4 = test[zeroRefEnum]; +let n4 = test[oneRefEnum]; +*/ diff --git a/tests/baselines/reference/constIndexedAccess.symbols b/tests/baselines/reference/constIndexedAccess.symbols new file mode 100644 index 00000000000..ff18f84372e --- /dev/null +++ b/tests/baselines/reference/constIndexedAccess.symbols @@ -0,0 +1,68 @@ +=== tests/cases/compiler/constIndexedAccess.ts === + +const enum numbers { +>numbers : Symbol(numbers, Decl(constIndexedAccess.ts, 0, 0)) + + zero, +>zero : Symbol(numbers.zero, Decl(constIndexedAccess.ts, 1, 20)) + + one +>one : Symbol(numbers.one, Decl(constIndexedAccess.ts, 2, 6)) +} + +interface indexAccess { +>indexAccess : Symbol(indexAccess, Decl(constIndexedAccess.ts, 4, 1)) + + 0: string; + 1: number; +} + +let test: indexAccess; +>test : Symbol(test, Decl(constIndexedAccess.ts, 11, 3)) +>indexAccess : Symbol(indexAccess, Decl(constIndexedAccess.ts, 4, 1)) + +let s = test[0]; +>s : Symbol(s, Decl(constIndexedAccess.ts, 13, 3)) +>test : Symbol(test, Decl(constIndexedAccess.ts, 11, 3)) +>0 : Symbol(indexAccess.0, Decl(constIndexedAccess.ts, 6, 23)) + +let n = test[1]; +>n : Symbol(n, Decl(constIndexedAccess.ts, 14, 3)) +>test : Symbol(test, Decl(constIndexedAccess.ts, 11, 3)) +>1 : Symbol(indexAccess.1, Decl(constIndexedAccess.ts, 7, 11)) + +let s1 = test[numbers.zero]; +>s1 : Symbol(s1, Decl(constIndexedAccess.ts, 16, 3)) +>test : Symbol(test, Decl(constIndexedAccess.ts, 11, 3)) +>numbers.zero : Symbol(numbers.zero, Decl(constIndexedAccess.ts, 1, 20)) +>numbers : Symbol(numbers, Decl(constIndexedAccess.ts, 0, 0)) +>zero : Symbol(numbers.zero, Decl(constIndexedAccess.ts, 1, 20)) + +let n1 = test[numbers.one]; +>n1 : Symbol(n1, Decl(constIndexedAccess.ts, 17, 3)) +>test : Symbol(test, Decl(constIndexedAccess.ts, 11, 3)) +>numbers.one : Symbol(numbers.one, Decl(constIndexedAccess.ts, 2, 6)) +>numbers : Symbol(numbers, Decl(constIndexedAccess.ts, 0, 0)) +>one : Symbol(numbers.one, Decl(constIndexedAccess.ts, 2, 6)) + +/* +TODO: revisit with const propagation + +const zero = 0; +const one = 1; + +let s2 = test[zero]; +let n2 = test[one]; + +const zeroRef = zero; +const oneRef = one; + +let s3 = test[zeroRef]; +let n3 = test[oneRef]; + +const zeroRefEnum = numbers.zero; +const oneRefEnum = numbers.one; + +let s4 = test[zeroRefEnum]; +let n4 = test[oneRefEnum]; +*/ diff --git a/tests/baselines/reference/constIndexedAccess.types b/tests/baselines/reference/constIndexedAccess.types new file mode 100644 index 00000000000..b4cc0e930d5 --- /dev/null +++ b/tests/baselines/reference/constIndexedAccess.types @@ -0,0 +1,72 @@ +=== tests/cases/compiler/constIndexedAccess.ts === + +const enum numbers { +>numbers : numbers + + zero, +>zero : numbers + + one +>one : numbers +} + +interface indexAccess { +>indexAccess : indexAccess + + 0: string; + 1: number; +} + +let test: indexAccess; +>test : indexAccess +>indexAccess : indexAccess + +let s = test[0]; +>s : string +>test[0] : string +>test : indexAccess +>0 : number + +let n = test[1]; +>n : number +>test[1] : number +>test : indexAccess +>1 : number + +let s1 = test[numbers.zero]; +>s1 : string +>test[numbers.zero] : string +>test : indexAccess +>numbers.zero : numbers +>numbers : typeof numbers +>zero : numbers + +let n1 = test[numbers.one]; +>n1 : number +>test[numbers.one] : number +>test : indexAccess +>numbers.one : numbers +>numbers : typeof numbers +>one : numbers + +/* +TODO: revisit with const propagation + +const zero = 0; +const one = 1; + +let s2 = test[zero]; +let n2 = test[one]; + +const zeroRef = zero; +const oneRef = one; + +let s3 = test[zeroRef]; +let n3 = test[oneRef]; + +const zeroRefEnum = numbers.zero; +const oneRefEnum = numbers.one; + +let s4 = test[zeroRefEnum]; +let n4 = test[oneRefEnum]; +*/