From 67b2a170345cd5f98971271c59bf275ca7053598 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Thu, 18 Feb 2016 16:19:06 -0800 Subject: [PATCH] super's containing class doesn't require base node In a class nested inside a constructor, `super` refers to the outer class' `super`, but when resolving a super call its containing class is identified as the immediately containing class. Previously, the compiler crashed, preventing the error from being reported correctly. Now it handles this disparity and correctly reports the error. --- src/compiler/checker.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d829795439..eddddb5cb2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10112,8 +10112,10 @@ namespace ts { // In super call, the candidate signatures are the matching arity signatures of the base constructor function instantiated // with the type arguments specified in the extends clause. const baseTypeNode = getClassExtendsHeritageClauseElement(getContainingClass(node)); - const baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments); - return resolveCall(node, baseConstructors, candidatesOutArray); + if (baseTypeNode) { + const baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments); + return resolveCall(node, baseConstructors, candidatesOutArray); + } } return resolveUntypedCall(node); }