diff options
author | Li Jin <dragon-fly@qq.com> | 2020-11-03 14:21:17 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2020-11-03 14:21:17 +0800 |
commit | e07a2eb9c389f27103872a3b5a5bfe500d0c2d62 (patch) | |
tree | e73abc495faa92bab2d9eee9b89afc89f57d1390 /src | |
parent | c421550a006c6c01ac176a879593a20d51d77c5d (diff) | |
download | yuescript-e07a2eb9c389f27103872a3b5a5bfe500d0c2d62.tar.gz yuescript-e07a2eb9c389f27103872a3b5a5bfe500d0c2d62.tar.bz2 yuescript-e07a2eb9c389f27103872a3b5a5bfe500d0c2d62.zip |
fix issue #29
Diffstat (limited to 'src')
-rw-r--r-- | src/MoonP/moon_compiler.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp index f24441f..138a6bf 100644 --- a/src/MoonP/moon_compiler.cpp +++ b/src/MoonP/moon_compiler.cpp | |||
@@ -53,7 +53,7 @@ inline std::string s(std::string_view sv) { | |||
53 | return std::string(sv); | 53 | return std::string(sv); |
54 | } | 54 | } |
55 | 55 | ||
56 | const std::string_view version = "0.4.19"sv; | 56 | const std::string_view version = "0.4.20"sv; |
57 | const std::string_view extension = "mp"sv; | 57 | const std::string_view extension = "mp"sv; |
58 | 58 | ||
59 | class MoonCompilerImpl { | 59 | class MoonCompilerImpl { |
@@ -3814,17 +3814,16 @@ private: | |||
3814 | void transformLoopBody(Body_t* body, str_list& out, const std::string& appendContent, ExpUsage usage, ExpList_t* assignList = nullptr) { | 3814 | void transformLoopBody(Body_t* body, str_list& out, const std::string& appendContent, ExpUsage usage, ExpList_t* assignList = nullptr) { |
3815 | str_list temp; | 3815 | str_list temp; |
3816 | bool withContinue = traversal::Stop == body->traverse([&](ast_node* node) { | 3816 | bool withContinue = traversal::Stop == body->traverse([&](ast_node* node) { |
3817 | switch (node->getId()) { | 3817 | if (auto stmt = ast_cast<Statement_t>(node)) { |
3818 | case id<For_t>(): | 3818 | if (stmt->content.is<BreakLoop_t>()) { |
3819 | case id<ForEach_t>(): | 3819 | return _parser.toString(stmt->content) == "continue"sv ? |
3820 | return traversal::Return; | 3820 | traversal::Stop : traversal::Return; |
3821 | case id<BreakLoop_t>(): { | 3821 | } else if (expListFrom(stmt)) { |
3822 | return _parser.toString(node) == "continue"sv ? | ||
3823 | traversal::Stop : traversal::Return; | ||
3824 | } | ||
3825 | default: | ||
3826 | return traversal::Continue; | 3822 | return traversal::Continue; |
3823 | } | ||
3824 | return traversal::Return; | ||
3827 | } | 3825 | } |
3826 | return traversal::Continue; | ||
3828 | }); | 3827 | }); |
3829 | if (withContinue) { | 3828 | if (withContinue) { |
3830 | auto continueVar = getUnusedName("_continue_"sv); | 3829 | auto continueVar = getUnusedName("_continue_"sv); |