Skip to content

Crash in checkNestedBlockScopedBinding with export as namespace (?) #29524

Closed
@mprobst

Description

@mprobst

TypeScript Version: 3.2.0-dev.201xxxxx

Search Terms:

  • checkNestedBlockScopedBinding
  • TypeError: Cannot read property 'kind' of undefined

Code

I've yet been unable to isolate a reasonably self-contained example. This involves third party typings for THREE in a specific version that are re-exported via a declare global and export as namespace, and apparently in a specific version.

What appears to happen though is that checkNestedBlockScopedBinding tries to check if the valueDeclaration is in a catch clause:

            if (languageVersion >= ScriptTarget.ES2015 ||
                (symbol.flags & (SymbolFlags.BlockScopedVariable | SymbolFlags.Class)) === 0 ||
                symbol.valueDeclaration.parent.kind === SyntaxKind.CatchClause) {
                return;
            }

However valueDeclaration can be a SourceFile in this case, which means .parent is undefined, and thus the .kind check throws.

Expected behavior:

No crash.

Actual behavior:

Crashes with a stack trace of:

Compilation failed TypeError: Cannot read property 'kind' of undefined
    at checkNestedBlockScopedBinding (lib/typescript.js:45938:48)
    at checkIdentifier (lib/typescript.js:45844:13)
    at checkExpressionWorker (lib/typescript.js:51828:28)
    at checkExpression (lib/typescript.js:51800:42)
    at checkNonNullExpression (lib/typescript.js:48151:37)
    at checkPropertyAccessExpressionOrQualifiedName (lib/typescript.js:48184:28)
    at checkPropertyAccessExpression (lib/typescript.js:48177:20)
    at checkExpressionWorker (lib/typescript.js:51857:28)
    at checkExpression (lib/typescript.js:51800:42)
    at checkNonNullExpression (lib/typescript.js:48151:37)
    at resolveNewExpression (lib/typescript.js:49546:34)
    at resolveSignature (lib/typescript.js:49817:28)
    at getResolvedSignature (lib/typescript.js:49847:26)
    at checkCallExpression (lib/typescript.js:49939:29)
    at checkExpressionWorker (lib/typescript.js:51866:28)
    at checkExpression (lib/typescript.js:51800:42)
    at checkExpressionCached (lib/typescript.js:51646:38)
    at getTypeOfExpression (lib/typescript.js:51767:28)
    at checkDeclarationInitializer (lib/typescript.js:51657:24)
    at getTypeForVariableLikeDeclaration (lib/typescript.js:35286:28)
    at getWidenedTypeForVariableLikeDeclaration (lib/typescript.js:35570:56)
    at getTypeOfVariableOrParameterOrPropertyWorker (lib/typescript.js:35684:24)
    at getTypeOfVariableOrParameterOrProperty (lib/typescript.js:35606:48)
    at getTypeOfSymbol (lib/typescript.js:35895:24)
    at checkVariableLikeDeclaration (lib/typescript.js:54098:41)
    at checkVariableDeclaration (lib/typescript.js:54171:20)
    at checkSourceElement (lib/typescript.js:56192:28)
    at Object.forEach (lib/typescript.js:210:30)
    at checkVariableStatement (lib/typescript.js:54181:16)
    at checkSourceElement (lib/typescript.js:56161:28)
    at Object.forEach (lib/typescript.js:210:30)
    at checkSourceFileWorker (lib/typescript.js:56360:20)
    at checkSourceFile (lib/typescript.js:56332:13)
    at getDiagnosticsWorker (lib/typescript.js:56407:17)
    at Object.getDiagnostics (lib/typescript.js:56393:24)
    at lib/typescript.js:87124:85
    at runWithCancellationToken (lib/typescript.js:87090:24)
    at getSemanticDiagnosticsForFileNoCache (lib/typescript.js:87113:20)
    at getAndCacheDiagnostics (lib/typescript.js:87361:26)
    at getSemanticDiagnosticsForFile (lib/typescript.js:87110:20)
    at getDiagnosticsHelper (lib/typescript.js:87052:24)
    at Object.getSemanticDiagnostics (lib/typescript.js:87065:20)

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions