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); |
