aboutsummaryrefslogtreecommitdiff
path: root/src/MoonP
diff options
context:
space:
mode:
Diffstat (limited to 'src/MoonP')
-rw-r--r--src/MoonP/moon_compiler.cpp33
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;