From 69091011685db34e5dc4012e9d2cf24a0ac77715 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 26 Mar 2020 16:21:30 +0800 Subject: remove else branch support for appendix syntax. --- spec/inputs/syntax.moon | 2 +- src/MoonP/moon_ast.h | 9 ++++----- src/MoonP/moon_compiler.cpp | 22 +++++----------------- src/MoonP/moon_parser.cpp | 4 ++-- src/MoonP/moon_parser.h | 2 +- 5 files changed, 13 insertions(+), 26 deletions(-) diff --git a/spec/inputs/syntax.moon b/spec/inputs/syntax.moon index 5442b61..b5f973b 100644 --- a/spec/inputs/syntax.moon +++ b/spec/inputs/syntax.moon @@ -122,7 +122,7 @@ print "nutjob" if hello then _ = 343 -print "what" if cool else whack! +print "what" if cool arg = {...} diff --git a/src/MoonP/moon_ast.h b/src/MoonP/moon_ast.h index 3f9ce79..0743014 100644 --- a/src/MoonP/moon_ast.h +++ b/src/MoonP/moon_ast.h @@ -642,12 +642,11 @@ AST_NODE(ExpListAssign) AST_MEMBER(ExpListAssign, &expList, &action) AST_END(ExpListAssign) -AST_NODE(if_else_line) +AST_NODE(if_line) ast_ptr condition; ast_ptr assign; - ast_sel elseExpr; - AST_MEMBER(if_else_line, &condition, &assign, &elseExpr) -AST_END(if_else_line) + AST_MEMBER(if_line, &condition, &assign) +AST_END(if_line) AST_NODE(unless_line) ast_ptr condition; @@ -655,7 +654,7 @@ AST_NODE(unless_line) AST_END(unless_line) AST_NODE(statement_appendix) - ast_sel item; + ast_sel item; AST_MEMBER(statement_appendix, &item) AST_END(statement_appendix) diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp index b89f6d1..e961a92 100644 --- a/src/MoonP/moon_compiler.cpp +++ b/src/MoonP/moon_compiler.cpp @@ -43,7 +43,7 @@ inline std::string s(std::string_view sv) { } const char* moonScriptVersion() { - return "0.5.0-r0.3.5"; + return "0.5.0-r0.3.6"; } // name of table stored in lua registry @@ -641,13 +641,13 @@ private: } auto appendix = statement->appendix.get(); switch (appendix->item->getId()) { - case id(): { - auto if_else_line = appendix->item.to(); + case id(): { + auto if_line = appendix->item.to(); auto ifNode = x->new_ptr(); auto ifCond = x->new_ptr(); - ifCond->condition.set(if_else_line->condition); - ifCond->assign.set(if_else_line->assign); + ifCond->condition.set(if_line->condition); + ifCond->assign.set(if_line->assign); ifNode->nodes.push_back(ifCond); auto stmt = x->new_ptr(); @@ -656,18 +656,6 @@ private: body->content.set(stmt); ifNode->nodes.push_back(body); - if (!ast_is(if_else_line->elseExpr)) { - auto expList = x->new_ptr(); - expList->exprs.push_back(if_else_line->elseExpr); - auto expListAssign = x->new_ptr(); - expListAssign->expList.set(expList); - auto stmt = x->new_ptr(); - stmt->content.set(expListAssign); - auto body = x->new_ptr(); - body->content.set(stmt); - ifNode->nodes.push_back(body); - } - statement->appendix.set(nullptr); auto simpleValue = x->new_ptr(); simpleValue->value.set(ifNode); diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp index 58f8fb3..9208d3a 100644 --- a/src/MoonP/moon_parser.cpp +++ b/src/MoonP/moon_parser.cpp @@ -533,10 +533,10 @@ MoonParser::MoonParser() { ExpListAssign = ExpList >> -(Update | Assign); - if_else_line = key("if") >> Exp >> -Assign >> (key("else") >> Exp | default_value); + if_line = key("if") >> Exp >> -Assign; unless_line = key("unless") >> Exp; - statement_appendix = (if_else_line | unless_line | CompInner) >> Space; + statement_appendix = (if_line | unless_line | CompInner) >> Space; Statement = ( Import | While | For | ForEach | Return | Local | Global | Export | diff --git a/src/MoonP/moon_parser.h b/src/MoonP/moon_parser.h index cea14fa..ec51340 100644 --- a/src/MoonP/moon_parser.h +++ b/src/MoonP/moon_parser.h @@ -286,7 +286,7 @@ private: AST_RULE(const_value) AST_RULE(unary_exp) AST_RULE(ExpListAssign) - AST_RULE(if_else_line) + AST_RULE(if_line) AST_RULE(unless_line) AST_RULE(statement_appendix) AST_RULE(BreakLoop) -- cgit v1.2.3-55-g6feb