diff options
Diffstat (limited to 'src/MoonP')
-rw-r--r-- | src/MoonP/moon_compiler.cpp | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp index d3427d3..30adbae 100644 --- a/src/MoonP/moon_compiler.cpp +++ b/src/MoonP/moon_compiler.cpp | |||
@@ -690,7 +690,7 @@ private: | |||
690 | break; | 690 | break; |
691 | } | 691 | } |
692 | } | 692 | } |
693 | throw std::logic_error(_info.errorMessage("Expression list must appear at the end of body block."sv, expList)); | 693 | throw std::logic_error(_info.errorMessage("Expression list must appear at the end of body or block."sv, expList)); |
694 | } | 694 | } |
695 | break; | 695 | break; |
696 | } | 696 | } |
@@ -1252,26 +1252,31 @@ private: | |||
1252 | bool oneLined = defs.size() == expList->exprs.objects().size() && | 1252 | bool oneLined = defs.size() == expList->exprs.objects().size() && |
1253 | traversal::Stop != action->traverse([&](ast_node* n) { | 1253 | traversal::Stop != action->traverse([&](ast_node* n) { |
1254 | switch (n->getId()) { | 1254 | switch (n->getId()) { |
1255 | case "Callable"_id: { | 1255 | case "ChainValue"_id: { |
1256 | auto callable = static_cast<Callable_t*>(n); | 1256 | auto chainValue = static_cast<ChainValue_t*>(n); |
1257 | switch (callable->item->getId()) { | 1257 | const auto& items = chainValue->items.objects(); |
1258 | case "Variable"_id: | 1258 | BLOCK_START |
1259 | for (const auto& def : defs) { | 1259 | auto callable = ast_cast<Callable_t>(*items.begin()); |
1260 | BREAK_IF(!callable); | ||
1261 | auto next = items.begin(); ++next; | ||
1262 | BREAK_IF(next == items.end()); | ||
1263 | BREAK_IF((!ast_is<Invoke_t,InvokeArgs_t>(*next))); | ||
1264 | for (const auto& def : defs) { | ||
1265 | switch (callable->item->getId()) { | ||
1266 | case "Variable"_id: | ||
1260 | if (def == _parser.toString(callable->item)) { | 1267 | if (def == _parser.toString(callable->item)) { |
1261 | return traversal::Stop; | 1268 | return traversal::Stop; |
1262 | } | 1269 | } |
1263 | } | 1270 | return traversal::Return; |
1264 | return traversal::Return; | 1271 | case "SelfName"_id: |
1265 | case "SelfName"_id: | ||
1266 | for (const auto& def : defs) { | ||
1267 | if (def == "self"sv) { | 1272 | if (def == "self"sv) { |
1268 | return traversal::Stop; | 1273 | return traversal::Stop; |
1269 | } | 1274 | } |
1270 | } | 1275 | return traversal::Return; |
1271 | return traversal::Return; | 1276 | } |
1272 | default: | ||
1273 | return traversal::Continue; | ||
1274 | } | 1277 | } |
1278 | BLOCK_END | ||
1279 | return traversal::Continue; | ||
1275 | } | 1280 | } |
1276 | default: | 1281 | default: |
1277 | return traversal::Continue; | 1282 | return traversal::Continue; |