From 30ce12988db58e78f56981f57a810a1b885a7349 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 22 Dec 2024 19:00:29 +0100 Subject: [PATCH] insert symbol on functiondecl return ident from parse_fn_proto --- src/ast2/mod.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/ast2/mod.rs b/src/ast2/mod.rs index 8a3a39d..158e756 100644 --- a/src/ast2/mod.rs +++ b/src/ast2/mod.rs @@ -2592,7 +2592,10 @@ pub mod ast_gen { /// fn IDENTIFIER () -> TYPENAME /// fn IDENTIFIER ( PARAMETER_LIST ,? ) /// fn IDENTIFIER ( PARAMETER_LIST ,? ) -> TYPENAME - fn parse_fn_proto(&mut self, tokens: &mut TokenIterator) -> ParseResult { + fn parse_fn_proto( + &mut self, + tokens: &mut TokenIterator, + ) -> ParseResult<(Index, intern::Index)> { let loc = tokens.current_source_location(); let _ = tokens.eat_token(Token::Fn).ok_or(ErrorInfo { error: ParseError::ExpectedToken(Token::Fn), @@ -2617,8 +2620,10 @@ pub mod ast_gen { tokens.current_source_location(), ) }; + let decl = + self.ast.push_fn_proto(ident, return_type, parameters, loc); - return Ok(self.ast.push_fn_proto(ident, return_type, parameters, loc)); + Ok((decl, ident)) } fn parse_fn_inner(&mut self, tokens: &mut TokenIterator) -> ParseResult { @@ -2627,7 +2632,7 @@ pub mod ast_gen { self.push_scope(func, intern::Index::invalid()); - let proto = self.parse_fn_proto(tokens).map_err(|e| { + let (proto, ident) = self.parse_fn_proto(tokens).map_err(|e| { self.pop_scope(); e })?; @@ -2640,6 +2645,13 @@ pub mod ast_gen { self.ast.set_fn_decl(func, proto, body, loc); + self.syms.insert_symbol( + self.current_scope(), + ident, + SymbolKind::Function, + func, + ); + Ok(func) }