summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-01-25 14:11:25 +0800
committerLi Jin <dragon-fly@qq.com>2020-01-25 14:11:25 +0800
commit4827d200604a086e2ad94edb4257c3abc7a3c4fc (patch)
treecf2508586aeea39a3556a9395db4f1ddc4244f0b
parent96e0f5d1d7b3d0b3cf278b82ef6819dbfac96219 (diff)
downloadyuescript-4827d200604a086e2ad94edb4257c3abc7a3c4fc.tar.gz
yuescript-4827d200604a086e2ad94edb4257c3abc7a3c4fc.tar.bz2
yuescript-4827d200604a086e2ad94edb4257c3abc7a3c4fc.zip
fix more chain value case.
-rw-r--r--spec/inputs/existential.moon2
-rw-r--r--src/MoonP/moon_compiler.cpp7
2 files changed, 5 insertions, 4 deletions
diff --git a/spec/inputs/existential.moon b/spec/inputs/existential.moon
index e8e2249..f7d5ebd 100644
--- a/spec/inputs/existential.moon
+++ b/spec/inputs/existential.moon
@@ -17,5 +17,5 @@ with abc?!\func?!
17if {:x} = a?.if?\then?(123)? @?\function 998 17if {:x} = a?.if?\then?(123)? @?\function 998
18 print x 18 print x
19 19
20res = b.function\do!\while("OK")\if("def",998)\f? 20res = b.function\do!\while?("OK")\if("def",998)\f?
21print res 21print res
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp
index 020e561..b1770fb 100644
--- a/src/MoonP/moon_compiler.cpp
+++ b/src/MoonP/moon_compiler.cpp
@@ -441,16 +441,17 @@ private:
441 if (ast_is<existential_op_t>(chainValue->items.back())) { 441 if (ast_is<existential_op_t>(chainValue->items.back())) {
442 return ChainType::EndWithEOP; 442 return ChainType::EndWithEOP;
443 } 443 }
444 ChainType type = ChainType::Common;
444 for (auto item : chainValue->items.objects()) { 445 for (auto item : chainValue->items.objects()) {
445 if (auto colonChain = ast_cast<ColonChainItem_t>(item)) { 446 if (auto colonChain = ast_cast<ColonChainItem_t>(item)) {
446 if (ast_is<LuaKeyword_t>(colonChain->name)) { 447 if (ast_is<LuaKeyword_t>(colonChain->name)) {
447 return ChainType::HasKeyword; 448 type = ChainType::HasKeyword;
448 } 449 }
449 } else if (ast_is<existential_op_t>(item) && item != chainValue->items.back()) { 450 } else if (ast_is<existential_op_t>(item)) {
450 return ChainType::HasEOP; 451 return ChainType::HasEOP;
451 } 452 }
452 } 453 }
453 return ChainType::Common; 454 return type;
454 } 455 }
455 456
456 std::string singleVariableFrom(ChainValue_t* chainValue) { 457 std::string singleVariableFrom(ChainValue_t* chainValue) {