Remove unnecessary state from the parser.

This commit is contained in:
Cyrus Najmabadi 2014-11-19 22:15:32 -08:00
parent e4f7822774
commit c7c1d6b03b
4 changed files with 446 additions and 192 deletions

View file

@ -1784,7 +1784,7 @@ module ts {
}
else {
// If there are no specified types, try to infer it from the body of the get accessor if it exists.
if (getter) {
if (getter && getter.body) {
type = getReturnTypeFromBody(getter);
}
// Otherwise, fall back to 'any'.

View file

@ -842,10 +842,9 @@ module ts {
var identifierCount = 0;
var nodeCount = 0;
var lineStarts: number[];
var isInStrictMode = false;
var isInStrictMode = false;
var lookAheadMode = LookAheadMode.NotLookingAhead;
var inAmbientContext = false;
function getLineStarts(): number[] {
return lineStarts || (lineStarts = computeLineStarts(sourceText));
@ -3046,16 +3045,7 @@ module ts {
node.typeParameters = sig.typeParameters;
node.parameters = sig.parameters;
node.type = sig.type;
// A common error is to try to declare an accessor in an ambient class.
if (inAmbientContext && canParseSemicolon()) {
parseSemicolon();
node.body = <Block>createMissingNode();
}
else {
node.body = parseFunctionBlock(/* ignoreMissingOpenBrace */ false);
}
node.body = parseFunctionBlockOrSemicolon();
return finishNode(node);
}
@ -3260,13 +3250,7 @@ module ts {
var node = <ModuleDeclaration>createNode(SyntaxKind.ModuleDeclaration, pos);
node.flags = flags;
node.name = parseStringLiteral();
// For error recovery, just in case the user forgot the declare modifier on this ambient
// external module, treat it as ambient anyway.
var saveInAmbientContext = inAmbientContext;
inAmbientContext = true;
node.body = parseModuleBody();
inAmbientContext = saveInAmbientContext;
return finishNode(node);
}
@ -3345,10 +3329,6 @@ module ts {
}
}
var saveInAmbientContext = inAmbientContext;
if (modifiers && modifiers.flags & NodeFlags.Ambient) {
inAmbientContext = true;
}
var flags = modifiers ? modifiers.flags : 0;
var result: Declaration;
switch (token) {
@ -3394,7 +3374,6 @@ module ts {
result.modifiers = modifiers;
}
inAmbientContext = saveInAmbientContext;
return result;
}
@ -3494,7 +3473,6 @@ module ts {
var rootNodeFlags: NodeFlags = 0;
if (fileExtensionIs(filename, ".d.ts")) {
rootNodeFlags = NodeFlags.DeclarationFile;
inAmbientContext = true;
}
file = <SourceFileInternal>createRootNode(SyntaxKind.SourceFile, 0, sourceText.length, rootNodeFlags);
file.filename = normalizePath(filename);
@ -4493,6 +4471,9 @@ module ts {
else if (inAmbientContext) {
return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);
}
else if (accessor.body === undefined) {
return grammarErrorAtPos(accessor.end - 1, ";".length, Diagnostics._0_expected, "{");
}
else if (accessor.typeParameters) {
return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_have_type_parameters);
}

File diff suppressed because it is too large Load diff

View file

@ -11,13 +11,12 @@ tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPr
tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(16,6): error TS1005: ':' expected.
tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(17,6): error TS1005: ':' expected.
tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(20,17): error TS1005: ':' expected.
tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(5,9): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement.
tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(15,5): error TS2300: Duplicate identifier 'a'.
tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(16,5): error TS2300: Duplicate identifier 'a'.
tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts(17,5): error TS2300: Duplicate identifier 'a'.
==== tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts (17 errors) ====
==== tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.ts (16 errors) ====
// errors
var y = {
"stringLiteral",
@ -29,8 +28,6 @@ tests/cases/conformance/es6/shorthandPropertyAssignment/objectLiteralShorthandPr
get e,
~
!!! error TS1005: '(' expected.
~
!!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement.
set f,
~
!!! error TS1005: '(' expected.