From 3cc0bc66f471780505a453abd28e8d244bf9ab90 Mon Sep 17 00:00:00 2001 From: Dimitar Trendafilov Date: Mon, 22 Oct 2018 21:49:58 +0300 Subject: Fixed compilation with warning level 4 --- JSImpl/src/Parser.cpp | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'JSImpl/src/Parser.cpp') diff --git a/JSImpl/src/Parser.cpp b/JSImpl/src/Parser.cpp index a2a46e2..a89e81c 100644 --- a/JSImpl/src/Parser.cpp +++ b/JSImpl/src/Parser.cpp @@ -649,22 +649,23 @@ ExpressionPtr Parser::Expression() ExpressionPtr Parser::Statement() { - if (auto result = EmptyStatement()) return result; - else if(auto result = VariableDefinition()) return result; - else if(auto result = Block()) return result; - else if(auto result = LabeledStatement()) return result; - else if(auto result = IfStatementfull()) return result; - else if(auto result = SwitchStatement()) return result; - else if(auto result = DoStatement()) return result; - else if(auto result = WhileStatement()) return result; - else if(auto result = ForStatement()) return result; - else if(auto result = WithStatement()) return result; - else if(auto result = ContinueStatement()) return result; - else if(auto result = BreakStatement()) return result; - else if(auto result = OptionalLabel()) return result; - else if(auto result = ReturnStatement()) return result; - else if(auto result = TryStatement()) return result; - return nullptr; + ExpressionPtr result; + if (result = EmptyStatement()) return result; + else if(result = VariableDefinition()) return result; + else if(result = Block()) return result; + else if(result = LabeledStatement()) return result; + else if(result = IfStatementfull()) return result; + else if(result = SwitchStatement()) return result; + else if(result = DoStatement()) return result; + else if(result = WhileStatement()) return result; + else if(result = ForStatement()) return result; + else if(result = WithStatement()) return result; + else if(result = ContinueStatement()) return result; + else if(result = BreakStatement()) return result; + else if(result = OptionalLabel()) return result; + else if(result = ReturnStatement()) return result; + else if(result = TryStatement()) return result; + return result; } ExpressionPtr Parser::EmptyStatement() -- cgit v1.3.1-23-gd82d From 75993cc48f8e72f7aee4ddf857001dbfcd36f3ac Mon Sep 17 00:00:00 2001 From: Dimitar Trendafilov Date: Mon, 22 Oct 2018 21:51:11 +0300 Subject: Fixed parsing of for loop --- JSImpl/src/Parser.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'JSImpl/src/Parser.cpp') diff --git a/JSImpl/src/Parser.cpp b/JSImpl/src/Parser.cpp index a89e81c..97ad735 100644 --- a/JSImpl/src/Parser.cpp +++ b/JSImpl/src/Parser.cpp @@ -739,13 +739,13 @@ ExpressionPtr Parser::Block() if (Match(TokenType::LeftBrace)) { - if (Match(TokenType::RightBrace)) + if (!Match(TokenType::RightBrace)) { return BlockStatementsPrefix(); } else { - // TODO log error + // TODO log error - empty block? assert(false); return nullptr; } @@ -847,14 +847,30 @@ ExpressionPtr Parser::ForStatement() { if (Match(TokenType::For)) { + if (!Match(TokenType::LeftParen)) + { + assert(false); + } auto initializer = Expression(); if (!initializer) { initializer = VariableDefinition(); } + if (!Match(TokenType::Semicolon)) + { + assert(false); + } auto cond = Expression(); + if (!Match(TokenType::Semicolon)) + { + assert(false); + } auto iteration = Expression(); + if (!Match(TokenType::RightParen)) + { + assert(false); + } auto body = Statement(); return IPLMakeSharePtr<::ForStatement>(initializer, cond, iteration, body); } -- cgit v1.3.1-23-gd82d From 11380dc5c1acaa957430c4e00cc04bfc1478248f Mon Sep 17 00:00:00 2001 From: Dimitar Trendafilov Date: Mon, 22 Oct 2018 21:52:05 +0300 Subject: Fixed parsing of some unary expressions --- JSImpl/src/Parser.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'JSImpl/src/Parser.cpp') diff --git a/JSImpl/src/Parser.cpp b/JSImpl/src/Parser.cpp index 97ad735..4e1fbca 100644 --- a/JSImpl/src/Parser.cpp +++ b/JSImpl/src/Parser.cpp @@ -350,9 +350,10 @@ ExpressionPtr Parser::Unary() TokenType::PlusPlus, })) { + auto op = Prev().Type; auto ls = LeftSideExpression(); auto suffix = false; - return IPLMakeSharePtr(ls, Prev().Type, suffix); + return IPLMakeSharePtr(ls, op, suffix); } else if (MatchOneOf({ TokenType::Void, -- cgit v1.3.1-23-gd82d