Index: src/parsing/parser-base.h |
diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h |
index 5b56213df816980f78298107590c8f0cd0bdaf88..56b8cb36d7d8580c784b7c67b848e4603aa3e610 100644 |
--- a/src/parsing/parser-base.h |
+++ b/src/parsing/parser-base.h |
@@ -88,6 +88,7 @@ class ParserBase : public Traits { |
typedef typename Traits::Type::FunctionLiteral FunctionLiteralT; |
typedef typename Traits::Type::Literal LiteralT; |
typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT; |
+ typedef typename Traits::Type::Statement StatementT; |
typedef typename Traits::Type::StatementList StatementListT; |
typedef typename Traits::Type::ExpressionClassifier ExpressionClassifier; |
typedef typename Traits::Type::TypeSystem TypeSystem; |
@@ -852,6 +853,7 @@ class ParserBase : public Traits { |
typename TypeSystem::TypeList ParseTypeArguments(bool* ok); |
IdentifierListT ParsePropertyNameList(bool* ok); |
typename TypeSystem::TypeMember ParseTypeMember(bool* ok); |
+ StatementT ParseTypeAliasDeclaration(int pos, bool* ok); |
typename TypeSystem::Type ValidateType(typename TypeSystem::Type type, |
Scanner::Location location, bool* ok) { |
@@ -3598,6 +3600,35 @@ ParserBase<Traits>::ParseTypeMember(bool* ok) { |
} |
+template <typename Traits> |
+typename ParserBase<Traits>::StatementT |
+ParserBase<Traits>::ParseTypeAliasDeclaration(int pos, bool* ok) { |
+ // TypeAliasDeclaration :: |
+ // 'type' BindingIdentifier [ TypeParameters ] '=' Type ';' |
+ typename ParserBase<Traits>::StatementT empty = |
+ factory()->NewEmptyStatement(pos); |
+ IdentifierT name = ParseIdentifierName(ok); |
+ if (!*ok) return empty; |
+ // Parse optional type parameters. |
+ typename TypeSystem::TypeParameters type_parameters = |
+ this->NullTypeParameters(); |
+ if (peek() == Token::LT) { |
+ type_parameters = ParseTypeParameters(ok); |
+ if (!*ok) return empty; |
+ } |
+ Expect(Token::ASSIGN, ok); |
+ if (!*ok) return empty; |
+ typename TypeSystem::Type type = ParseValidType(ok); |
+ if (!*ok) return empty; |
+ ExpectSemicolon(ok); |
+ if (!*ok) return empty; |
+ USE(name); // TODO(nikolaos): really use them! |
+ USE(type_parameters); |
+ USE(type); |
+ return empty; |
+} |
+ |
+ |
#undef CHECK_OK |
#undef CHECK_OK_CUSTOM |
#undef CHECK_OK_TYPE |