From c525877aaa2586f7ae2fee8682860a7775e87392 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 16 Dec 2014 13:35:31 -0800 Subject: [PATCH] Move grammar checking: moduleDeclaration; there are still errors from incomplete grammar migration --- src/compiler/checker.ts | 21 +++++++++++++++++++ src/compiler/parser.ts | 4 ++-- .../reference/declareAlreadySeen.errors.txt | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f2874ae5085..455442a6317 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8880,6 +8880,27 @@ module ts { } function checkModuleDeclaration(node: ModuleDeclaration) { + // Grammar checking + if (!checkGrammarModifiers(node)) { + if (!isInAmbientContext(node) && node.name.kind === SyntaxKind.StringLiteral) { + grammarErrorOnNode(node.name, Diagnostics.Only_ambient_modules_can_use_quoted_names); + } + else if (node.name.kind === SyntaxKind.Identifier && node.body.kind === SyntaxKind.ModuleBlock) { + var statements = (node.body).statements; + for (var i = 0, n = statements.length; i < n; i++) { + var statement = statements[i]; + + if (statement.kind === SyntaxKind.ExportAssignment) { + // Export assignments are not allowed in an internal module + grammarErrorOnNode(statement, Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + } + else if (isExternalModuleImportDeclaration(statement)) { + grammarErrorOnNode(getExternalModuleImportDeclarationExpression(statement), Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } + } + } + } + if (fullTypeCheck) { checkCollisionWithCapturedThisVariable(node, node.name); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f0c6fcc0e2a..4aa2eb6b203 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4656,7 +4656,7 @@ module ts { //case SyntaxKind.MethodDeclaration: //case SyntaxKind.MethodSignature: //return checkMethod(node); - case SyntaxKind.ModuleDeclaration: return checkModuleDeclaration(node); + //case SyntaxKind.ModuleDeclaration: return checkModuleDeclaration(node); //case SyntaxKind.ObjectLiteralExpression: return checkObjectLiteralExpression(node); //case SyntaxKind.NumericLiteral: return checkNumericLiteral(node); //case SyntaxKind.Parameter: return checkParameter(node); @@ -5330,7 +5330,7 @@ module ts { //case SyntaxKind.MethodSignature: //case SyntaxKind.ClassDeclaration: case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.ModuleDeclaration: + //case SyntaxKind.ModuleDeclaration: //case SyntaxKind.EnumDeclaration: case SyntaxKind.ExportAssignment: //case SyntaxKind.VariableStatement: diff --git a/tests/baselines/reference/declareAlreadySeen.errors.txt b/tests/baselines/reference/declareAlreadySeen.errors.txt index da671ad313a..d606b571478 100644 --- a/tests/baselines/reference/declareAlreadySeen.errors.txt +++ b/tests/baselines/reference/declareAlreadySeen.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/declareAlreadySeen.ts(5,13): error TS1030: 'declare' modifier already seen. tests/cases/compiler/declareAlreadySeen.ts(2,13): error TS1030: 'declare' modifier already seen. tests/cases/compiler/declareAlreadySeen.ts(3,13): error TS1030: 'declare' modifier already seen. +tests/cases/compiler/declareAlreadySeen.ts(5,13): error TS1030: 'declare' modifier already seen. tests/cases/compiler/declareAlreadySeen.ts(7,13): error TS1030: 'declare' modifier already seen.