Commit 6e91806b authored by Tobias Tebbi's avatar Tobias Tebbi Committed by Commit Bot

[torque] add type alias declarations

Change-Id: I80dd313ac3a5809d363adff9cf11ac31b04648dd
Reviewed-on: https://chromium-review.googlesource.com/1068876
Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
Reviewed-by: 's avatarSigurd Schneider <sigurds@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53292}
parent 1c3b3e99
...@@ -270,6 +270,7 @@ extendsDeclaration: 'extends' IDENTIFIER; ...@@ -270,6 +270,7 @@ extendsDeclaration: 'extends' IDENTIFIER;
generatesDeclaration: 'generates' STRING_LITERAL; generatesDeclaration: 'generates' STRING_LITERAL;
constexprDeclaration: 'constexpr' STRING_LITERAL; constexprDeclaration: 'constexpr' STRING_LITERAL;
typeDeclaration : 'type' IDENTIFIER extendsDeclaration? generatesDeclaration? constexprDeclaration?';'; typeDeclaration : 'type' IDENTIFIER extendsDeclaration? generatesDeclaration? constexprDeclaration?';';
typeAliasDeclaration : 'type' IDENTIFIER '=' type ';';
externalBuiltin : EXTERN JAVASCRIPT? BUILTIN IDENTIFIER optionalGenericTypeList '(' typeList ')' optionalType ';'; externalBuiltin : EXTERN JAVASCRIPT? BUILTIN IDENTIFIER optionalGenericTypeList '(' typeList ')' optionalType ';';
externalMacro : EXTERN (IMPLICIT? 'operator' STRING_LITERAL)? MACRO IDENTIFIER optionalGenericTypeList typeListMaybeVarArgs optionalType optionalLabelList ';'; externalMacro : EXTERN (IMPLICIT? 'operator' STRING_LITERAL)? MACRO IDENTIFIER optionalGenericTypeList typeListMaybeVarArgs optionalType optionalLabelList ';';
...@@ -281,6 +282,7 @@ constDeclaration : 'const' IDENTIFIER ':' type '=' STRING_LITERAL ';'; ...@@ -281,6 +282,7 @@ constDeclaration : 'const' IDENTIFIER ':' type '=' STRING_LITERAL ';';
declaration declaration
: typeDeclaration : typeDeclaration
| typeAliasDeclaration
| builtinDeclaration | builtinDeclaration
| genericSpecialization | genericSpecialization
| macroDeclaration | macroDeclaration
......
...@@ -281,6 +281,11 @@ class TorqueBaseListener : public TorqueListener { ...@@ -281,6 +281,11 @@ class TorqueBaseListener : public TorqueListener {
void exitTypeDeclaration( void exitTypeDeclaration(
TorqueParser::TypeDeclarationContext* /*ctx*/) override {} TorqueParser::TypeDeclarationContext* /*ctx*/) override {}
void enterTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* /*ctx*/) override {}
void exitTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* /*ctx*/) override {}
void enterExternalBuiltin( void enterExternalBuiltin(
TorqueParser::ExternalBuiltinContext* /*ctx*/) override {} TorqueParser::ExternalBuiltinContext* /*ctx*/) override {}
void exitExternalBuiltin( void exitExternalBuiltin(
......
...@@ -300,6 +300,11 @@ class TorqueBaseVisitor : public TorqueVisitor { ...@@ -300,6 +300,11 @@ class TorqueBaseVisitor : public TorqueVisitor {
return visitChildren(ctx); return visitChildren(ctx);
} }
antlrcpp::Any visitTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* ctx) override {
return visitChildren(ctx);
}
antlrcpp::Any visitExternalBuiltin( antlrcpp::Any visitExternalBuiltin(
TorqueParser::ExternalBuiltinContext* ctx) override { TorqueParser::ExternalBuiltinContext* ctx) override {
return visitChildren(ctx); return visitChildren(ctx);
......
...@@ -266,6 +266,11 @@ class TorqueListener : public antlr4::tree::ParseTreeListener { ...@@ -266,6 +266,11 @@ class TorqueListener : public antlr4::tree::ParseTreeListener {
virtual void exitTypeDeclaration( virtual void exitTypeDeclaration(
TorqueParser::TypeDeclarationContext* ctx) = 0; TorqueParser::TypeDeclarationContext* ctx) = 0;
virtual void enterTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* ctx) = 0;
virtual void exitTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* ctx) = 0;
virtual void enterExternalBuiltin( virtual void enterExternalBuiltin(
TorqueParser::ExternalBuiltinContext* ctx) = 0; TorqueParser::ExternalBuiltinContext* ctx) = 0;
virtual void exitExternalBuiltin( virtual void exitExternalBuiltin(
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -158,16 +158,17 @@ class TorqueParser : public antlr4::Parser { ...@@ -158,16 +158,17 @@ class TorqueParser : public antlr4::Parser {
RuleGeneratesDeclaration = 56, RuleGeneratesDeclaration = 56,
RuleConstexprDeclaration = 57, RuleConstexprDeclaration = 57,
RuleTypeDeclaration = 58, RuleTypeDeclaration = 58,
RuleExternalBuiltin = 59, RuleTypeAliasDeclaration = 59,
RuleExternalMacro = 60, RuleExternalBuiltin = 60,
RuleExternalRuntime = 61, RuleExternalMacro = 61,
RuleBuiltinDeclaration = 62, RuleExternalRuntime = 62,
RuleGenericSpecialization = 63, RuleBuiltinDeclaration = 63,
RuleMacroDeclaration = 64, RuleGenericSpecialization = 64,
RuleConstDeclaration = 65, RuleMacroDeclaration = 65,
RuleDeclaration = 66, RuleConstDeclaration = 66,
RuleModuleDeclaration = 67, RuleDeclaration = 67,
RuleFile = 68 RuleModuleDeclaration = 68,
RuleFile = 69
}; };
explicit TorqueParser(antlr4::TokenStream* input); explicit TorqueParser(antlr4::TokenStream* input);
...@@ -240,6 +241,7 @@ class TorqueParser : public antlr4::Parser { ...@@ -240,6 +241,7 @@ class TorqueParser : public antlr4::Parser {
class GeneratesDeclarationContext; class GeneratesDeclarationContext;
class ConstexprDeclarationContext; class ConstexprDeclarationContext;
class TypeDeclarationContext; class TypeDeclarationContext;
class TypeAliasDeclarationContext;
class ExternalBuiltinContext; class ExternalBuiltinContext;
class ExternalMacroContext; class ExternalMacroContext;
class ExternalRuntimeContext; class ExternalRuntimeContext;
...@@ -1260,6 +1262,22 @@ class TorqueParser : public antlr4::Parser { ...@@ -1260,6 +1262,22 @@ class TorqueParser : public antlr4::Parser {
TypeDeclarationContext* typeDeclaration(); TypeDeclarationContext* typeDeclaration();
class TypeAliasDeclarationContext : public antlr4::ParserRuleContext {
public:
TypeAliasDeclarationContext(antlr4::ParserRuleContext* parent,
size_t invokingState);
size_t getRuleIndex() const override;
antlr4::tree::TerminalNode* IDENTIFIER();
TypeContext* type();
void enterRule(antlr4::tree::ParseTreeListener* listener) override;
void exitRule(antlr4::tree::ParseTreeListener* listener) override;
antlrcpp::Any accept(antlr4::tree::ParseTreeVisitor* visitor) override;
};
TypeAliasDeclarationContext* typeAliasDeclaration();
class ExternalBuiltinContext : public antlr4::ParserRuleContext { class ExternalBuiltinContext : public antlr4::ParserRuleContext {
public: public:
ExternalBuiltinContext(antlr4::ParserRuleContext* parent, ExternalBuiltinContext(antlr4::ParserRuleContext* parent,
...@@ -1407,6 +1425,7 @@ class TorqueParser : public antlr4::Parser { ...@@ -1407,6 +1425,7 @@ class TorqueParser : public antlr4::Parser {
DeclarationContext(antlr4::ParserRuleContext* parent, size_t invokingState); DeclarationContext(antlr4::ParserRuleContext* parent, size_t invokingState);
size_t getRuleIndex() const override; size_t getRuleIndex() const override;
TypeDeclarationContext* typeDeclaration(); TypeDeclarationContext* typeDeclaration();
TypeAliasDeclarationContext* typeAliasDeclaration();
BuiltinDeclarationContext* builtinDeclaration(); BuiltinDeclarationContext* builtinDeclaration();
GenericSpecializationContext* genericSpecialization(); GenericSpecializationContext* genericSpecialization();
MacroDeclarationContext* macroDeclaration(); MacroDeclarationContext* macroDeclaration();
......
...@@ -195,6 +195,9 @@ class TorqueVisitor : public antlr4::tree::AbstractParseTreeVisitor { ...@@ -195,6 +195,9 @@ class TorqueVisitor : public antlr4::tree::AbstractParseTreeVisitor {
virtual antlrcpp::Any visitTypeDeclaration( virtual antlrcpp::Any visitTypeDeclaration(
TorqueParser::TypeDeclarationContext* context) = 0; TorqueParser::TypeDeclarationContext* context) = 0;
virtual antlrcpp::Any visitTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* context) = 0;
virtual antlrcpp::Any visitExternalBuiltin( virtual antlrcpp::Any visitExternalBuiltin(
TorqueParser::ExternalBuiltinContext* context) = 0; TorqueParser::ExternalBuiltinContext* context) = 0;
......
...@@ -308,6 +308,14 @@ antlrcpp::Any AstGenerator::visitTypeDeclaration( ...@@ -308,6 +308,14 @@ antlrcpp::Any AstGenerator::visitTypeDeclaration(
return implicit_cast<Declaration*>(result); return implicit_cast<Declaration*>(result);
} }
antlrcpp::Any AstGenerator::visitTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* context) {
TypeAliasDeclaration* result = RegisterNode(new TypeAliasDeclaration{
Pos(context), context->IDENTIFIER()->getSymbol()->getText(),
GetType(context->type())});
return implicit_cast<Declaration*>(result);
}
antlrcpp::Any AstGenerator::visitVariableDeclaration( antlrcpp::Any AstGenerator::visitVariableDeclaration(
TorqueParser::VariableDeclarationContext* context) { TorqueParser::VariableDeclarationContext* context) {
return RegisterNode( return RegisterNode(
......
...@@ -50,6 +50,9 @@ class AstGenerator : public TorqueBaseVisitor { ...@@ -50,6 +50,9 @@ class AstGenerator : public TorqueBaseVisitor {
antlrcpp::Any visitTypeDeclaration( antlrcpp::Any visitTypeDeclaration(
TorqueParser::TypeDeclarationContext* context) override; TorqueParser::TypeDeclarationContext* context) override;
antlrcpp::Any visitTypeAliasDeclaration(
TorqueParser::TypeAliasDeclarationContext* context) override;
antlrcpp::Any visitVariableDeclaration( antlrcpp::Any visitVariableDeclaration(
TorqueParser::VariableDeclarationContext* context) override; TorqueParser::VariableDeclarationContext* context) override;
......
...@@ -65,6 +65,7 @@ DECLARE_CONTEXTUAL_VARIABLE(CurrentSourcePosition, SourcePosition) ...@@ -65,6 +65,7 @@ DECLARE_CONTEXTUAL_VARIABLE(CurrentSourcePosition, SourcePosition)
#define AST_DECLARATION_NODE_KIND_LIST(V) \ #define AST_DECLARATION_NODE_KIND_LIST(V) \
V(TypeDeclaration) \ V(TypeDeclaration) \
V(TypeAliasDeclaration) \
V(StandardDeclaration) \ V(StandardDeclaration) \
V(GenericDeclaration) \ V(GenericDeclaration) \
V(SpecializationDeclaration) \ V(SpecializationDeclaration) \
...@@ -553,6 +554,14 @@ struct TypeDeclaration : Declaration { ...@@ -553,6 +554,14 @@ struct TypeDeclaration : Declaration {
base::Optional<std::string> constexpr_generates; base::Optional<std::string> constexpr_generates;
}; };
struct TypeAliasDeclaration : Declaration {
DEFINE_AST_NODE_LEAF_BOILERPLATE(TypeAliasDeclaration)
TypeAliasDeclaration(SourcePosition p, std::string n, TypeExpression* t)
: Declaration(kKind, p), name(std::move(n)), type(t) {}
std::string name;
TypeExpression* type;
};
struct LabelAndTypes { struct LabelAndTypes {
std::string name; std::string name;
std::vector<TypeExpression*> types; std::vector<TypeExpression*> types;
......
...@@ -84,6 +84,11 @@ class DeclarationVisitor : public FileVisitor { ...@@ -84,6 +84,11 @@ class DeclarationVisitor : public FileVisitor {
} }
} }
void Visit(TypeAliasDeclaration* decl) {
declarations()->DeclareType(decl->name,
declarations()->GetType(decl->type));
}
Builtin* BuiltinDeclarationCommon(BuiltinDeclaration* decl, bool external, Builtin* BuiltinDeclarationCommon(BuiltinDeclaration* decl, bool external,
const Signature& signature); const Signature& signature);
......
...@@ -94,6 +94,7 @@ class ImplementationVisitor : public FileVisitor { ...@@ -94,6 +94,7 @@ class ImplementationVisitor : public FileVisitor {
Visit(implicit_cast<ModuleDeclaration*>(decl)); Visit(implicit_cast<ModuleDeclaration*>(decl));
} }
void Visit(TypeDeclaration* decl) {} void Visit(TypeDeclaration* decl) {}
void Visit(TypeAliasDeclaration* decl) {}
void Visit(ConstDeclaration* decl) {} void Visit(ConstDeclaration* decl) {}
void Visit(StandardDeclaration* decl); void Visit(StandardDeclaration* decl);
void Visit(GenericDeclaration* decl) {} void Visit(GenericDeclaration* decl) {}
......
...@@ -189,4 +189,9 @@ module test { ...@@ -189,4 +189,9 @@ module test {
assert(fptr2(c, Undefined) == Undefined); assert(fptr2(c, Undefined) == Undefined);
assert(fptr2(c, Undefined) == Undefined); assert(fptr2(c, Undefined) == Undefined);
} }
type SmiToSmi = builtin(Smi) => Smi;
macro TestTypeAlias(x : SmiToSmi) : Code {
return x;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment