From dc9a702aa8c2f8b12831b2e6fb22ed0e756aa58b Mon Sep 17 00:00:00 2001 From: 0xtechnobabble <0xtechnobabble@protonmail.com> Date: Thu, 12 Mar 2020 13:16:48 +0200 Subject: [PATCH] LibJS/Parser: Parse let declarations --- Libraries/LibJS/Parser.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index fdb43ed517..4b3a7b850e 100644 --- a/Libraries/LibJS/Parser.cpp +++ b/Libraries/LibJS/Parser.cpp @@ -65,6 +65,7 @@ NonnullOwnPtr Parser::parse_statement() case TokenType::Return: return parse_return_statement(); case TokenType::Var: + case TokenType::Let: return parse_variable_declaration(); case TokenType::For: return parse_for_statement(); @@ -243,14 +244,27 @@ NonnullOwnPtr Parser::parse_function_declaration() NonnullOwnPtr Parser::parse_variable_declaration() { - consume(TokenType::Var); + DeclarationType declaration_type; + + switch (m_current_token.type()) { + case TokenType::Var: + declaration_type = DeclarationType::Var; + consume(TokenType::Var); + break; + case TokenType::Let: + declaration_type = DeclarationType::Let; + consume(TokenType::Let); + break; + default: + ASSERT_NOT_REACHED(); + } auto name = consume(TokenType::Identifier).value(); OwnPtr initializer; if (match(TokenType::Equals)) { consume(); initializer = parse_expression(); } - return make(make(name), move(initializer), DeclarationType::Var); + return make(make(name), move(initializer), declaration_type); } NonnullOwnPtr Parser::parse_for_statement()