From 2257c08cb159a30492bf2aec172539b1dd504700 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 28 Aug 2018 21:11:17 +0300 Subject: Add ret type --- crates/libsyntax2/src/ast/generated.rs | 22 ++++++++++++++++++++++ crates/libsyntax2/src/grammar.ron | 3 +++ crates/libsyntax2/src/grammar/mod.rs | 2 ++ crates/libsyntax2/src/syntax_kinds/generated.rs | 2 ++ 4 files changed, 29 insertions(+) (limited to 'crates/libsyntax2/src') diff --git a/crates/libsyntax2/src/ast/generated.rs b/crates/libsyntax2/src/ast/generated.rs index 999023e3d..e8743caa8 100644 --- a/crates/libsyntax2/src/ast/generated.rs +++ b/crates/libsyntax2/src/ast/generated.rs @@ -523,6 +523,10 @@ impl<'a> FnDef<'a> { pub fn body(self) -> Option> { super::child_opt(self) } + + pub fn ret_type(self) -> Option> { + super::child_opt(self) + } } // FnPointerType @@ -1412,6 +1416,24 @@ impl<'a> AstNode<'a> for ReferenceType<'a> { impl<'a> ReferenceType<'a> {} +// RetType +#[derive(Debug, Clone, Copy)] +pub struct RetType<'a> { + syntax: SyntaxNodeRef<'a>, +} + +impl<'a> AstNode<'a> for RetType<'a> { + fn cast(syntax: SyntaxNodeRef<'a>) -> Option { + match syntax.kind() { + RET_TYPE => Some(RetType { syntax }), + _ => None, + } + } + fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax } +} + +impl<'a> RetType<'a> {} + // ReturnExpr #[derive(Debug, Clone, Copy)] pub struct ReturnExpr<'a> { diff --git a/crates/libsyntax2/src/grammar.ron b/crates/libsyntax2/src/grammar.ron index f8fa7b694..f1907d1ce 100644 --- a/crates/libsyntax2/src/grammar.ron +++ b/crates/libsyntax2/src/grammar.ron @@ -119,6 +119,7 @@ Grammar( "STRUCT_DEF", "ENUM_DEF", "FN_DEF", + "RET_TYPE", "EXTERN_CRATE_ITEM", "MODULE", "USE_ITEM", @@ -252,8 +253,10 @@ Grammar( options: [ ["param_list", "ParamList"], ["body", "Block"], + ["ret_type", "RetType"] ], ), + "RetType": (), "StructDef": ( traits: [ "NameOwner", diff --git a/crates/libsyntax2/src/grammar/mod.rs b/crates/libsyntax2/src/grammar/mod.rs index 496d28349..1acecac41 100644 --- a/crates/libsyntax2/src/grammar/mod.rs +++ b/crates/libsyntax2/src/grammar/mod.rs @@ -119,8 +119,10 @@ fn abi(p: &mut Parser) { fn opt_fn_ret_type(p: &mut Parser) -> bool { if p.at(THIN_ARROW) { + let m = p.start(); p.bump(); types::type_(p); + m.complete(p, RET_TYPE); true } else { false diff --git a/crates/libsyntax2/src/syntax_kinds/generated.rs b/crates/libsyntax2/src/syntax_kinds/generated.rs index 0a22b11c2..7882bded9 100644 --- a/crates/libsyntax2/src/syntax_kinds/generated.rs +++ b/crates/libsyntax2/src/syntax_kinds/generated.rs @@ -119,6 +119,7 @@ pub enum SyntaxKind { STRUCT_DEF, ENUM_DEF, FN_DEF, + RET_TYPE, EXTERN_CRATE_ITEM, MODULE, USE_ITEM, @@ -380,6 +381,7 @@ impl SyntaxKind { STRUCT_DEF => &SyntaxInfo { name: "STRUCT_DEF" }, ENUM_DEF => &SyntaxInfo { name: "ENUM_DEF" }, FN_DEF => &SyntaxInfo { name: "FN_DEF" }, + RET_TYPE => &SyntaxInfo { name: "RET_TYPE" }, EXTERN_CRATE_ITEM => &SyntaxInfo { name: "EXTERN_CRATE_ITEM" }, MODULE => &SyntaxInfo { name: "MODULE" }, USE_ITEM => &SyntaxInfo { name: "USE_ITEM" }, -- cgit v1.2.3