Move grammar checking : computedPropertyName; there is still error from grammar check on ambient context and generator

This commit is contained in:
Yui T
2014-12-12 00:11:59 -08:00
parent 279aa39467
commit 6251127152
2 changed files with 19 additions and 1 deletions

View File

@@ -5357,6 +5357,14 @@ module ts {
var properties: SymbolTable = {};
var contextualType = getContextualType(node);
var typeFlags: TypeFlags;
// Grammar checking for computedPropertyName
forEach(node.properties, property => {
if (property.name && property.name.kind === SyntaxKind.ComputedPropertyName) {
checkGrammarComputedPropertyName(<ComputedPropertyName>property.name);
}
});
for (var id in members) {
if (hasProperty(members, id)) {
var member = members[id];
@@ -5405,6 +5413,7 @@ module ts {
properties[member.name] = member;
}
}
var stringIndexType = getIndexType(IndexKind.String);
var numberIndexType = getIndexType(IndexKind.Number);
var result = createAnonymousType(node.symbol, properties, emptyArray, emptyArray, stringIndexType, numberIndexType);
@@ -9990,6 +9999,15 @@ module ts {
}
}
function checkGrammarComputedPropertyName(node: ComputedPropertyName): void {
if (compilerOptions.target < ScriptTarget.ES6) {
grammarErrorOnNode(node, Diagnostics.Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
else if (node.expression.kind === SyntaxKind.BinaryExpression && (<BinaryExpression>node.expression).operator === SyntaxKind.CommaToken) {
grammarErrorOnNode(node.expression, Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
}
}
function hasParseDiagnostics(sourceFile: SourceFile): boolean {
return sourceFile.parseDiagnostics.length > 0;
}

View File

@@ -4638,7 +4638,7 @@ module ts {
//case SyntaxKind.BindingElement: return checkBindingElement(<BindingElement>node);
//case SyntaxKind.CatchClause: return checkCatchClause(<CatchClause>node);
//case SyntaxKind.ClassDeclaration: return checkClassDeclaration(<ClassDeclaration>node);
case SyntaxKind.ComputedPropertyName: return checkComputedPropertyName(<ComputedPropertyName>node);
//case SyntaxKind.ComputedPropertyName: return checkComputedPropertyName(<ComputedPropertyName>node);
case SyntaxKind.Constructor: return checkConstructor(<ConstructorDeclaration>node);
case SyntaxKind.DeleteExpression: return checkDeleteExpression(<DeleteExpression> node);
case SyntaxKind.ElementAccessExpression: return checkElementAccessExpression(<ElementAccessExpression>node);