/*! * Function declaration parsing */ use crate::ast::{ASTNode, Span}; use crate::parser::common::ParserUtils; use crate::parser::{NyashParser, ParseError}; use crate::tokenizer::TokenType; impl NyashParser { /// function宣言をパース: function name(params) { body } pub fn parse_function_declaration(&mut self) -> Result { self.consume(TokenType::FUNCTION)?; // 関数名を取得 let name = if let TokenType::IDENTIFIER(name) = &self.current_token().token_type { let name = name.clone(); self.advance(); name } else { let line = self.current_token().line; return Err(ParseError::UnexpectedToken { found: self.current_token().token_type.clone(), expected: "function name".to_string(), line, }); }; // パラメータリストをパース self.consume(TokenType::LPAREN)?; // Phase 285A1.5: Use shared helper to prevent parser hangs on unsupported type annotations let params = crate::parser::common::params::parse_param_name_list(self, "function")?; self.consume(TokenType::RPAREN)?; // 関数本体をパース(共通ブロックヘルパー) let body = self.parse_block_statements()?; Ok(ASTNode::FunctionDeclaration { name, params, body, is_static: false, // 通常の関数は静的でない is_override: false, // デフォルトは非オーバーライド span: Span::unknown(), }) } }