aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-02-18 13:14:42 +0800
committerLi Jin <dragon-fly@qq.com>2020-02-18 13:14:42 +0800
commit0eaea3f979ef46fe195649ee18400f014957db26 (patch)
treedf63ea1ac9806bf0c501c96d28dd382f7139cceb /src
parentadfea5f0eee289fe729c2bcc68105417d77a8407 (diff)
downloadyuescript-0eaea3f979ef46fe195649ee18400f014957db26.tar.gz
yuescript-0eaea3f979ef46fe195649ee18400f014957db26.tar.bz2
yuescript-0eaea3f979ef46fe195649ee18400f014957db26.zip
did some clean up.
Diffstat (limited to 'src')
-rw-r--r--src/MoonP/ast.hpp2
-rw-r--r--src/MoonP/moon_ast.h6
-rw-r--r--src/MoonP/moon_compiler.cpp37
3 files changed, 22 insertions, 23 deletions
diff --git a/src/MoonP/ast.hpp b/src/MoonP/ast.hpp
index d576395..104202d 100644
--- a/src/MoonP/ast.hpp
+++ b/src/MoonP/ast.hpp
@@ -97,7 +97,7 @@ public:
97 virtual int getId() const = 0; 97 virtual int getId() const = 0;
98 98
99 template<class T> 99 template<class T>
100 inline ast_ptr<false, T> new_ptr() { 100 inline ast_ptr<false, T> new_ptr() const {
101 auto item = new T; 101 auto item = new T;
102 item->m_begin.m_line = m_begin.m_line; 102 item->m_begin.m_line = m_begin.m_line;
103 item->m_end.m_line = m_begin.m_line; 103 item->m_end.m_line = m_begin.m_line;
diff --git a/src/MoonP/moon_ast.h b/src/MoonP/moon_ast.h
index 26accbf..917429e 100644
--- a/src/MoonP/moon_ast.h
+++ b/src/MoonP/moon_ast.h
@@ -13,18 +13,18 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
13namespace parserlib { 13namespace parserlib {
14 14
15#define AST_LEAF(type) \ 15#define AST_LEAF(type) \
16COUNTER_INC;\ 16COUNTER_INC; \
17class type##_t : public ast_node \ 17class type##_t : public ast_node \
18{ \ 18{ \
19public: \ 19public: \
20 virtual int getId() const override { return COUNTER_READ; } 20 virtual int getId() const override { return COUNTER_READ; }
21 21
22#define AST_NODE(type) \ 22#define AST_NODE(type) \
23COUNTER_INC;\ 23COUNTER_INC; \
24class type##_t : public ast_container \ 24class type##_t : public ast_container \
25{ \ 25{ \
26public: \ 26public: \
27 virtual int getId() const override { return COUNTER_READ; } \ 27 virtual int getId() const override { return COUNTER_READ; }
28 28
29#define AST_MEMBER(type, ...) \ 29#define AST_MEMBER(type, ...) \
30 type##_t() { \ 30 type##_t() { \
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp
index 23ce6ce..4596542 100644
--- a/src/MoonP/moon_compiler.cpp
+++ b/src/MoonP/moon_compiler.cpp
@@ -488,7 +488,7 @@ private:
488 return true; 488 return true;
489 case id<SimpleValue_t>(): { 489 case id<SimpleValue_t>(): {
490 auto simpleValue = static_cast<SimpleValue_t*>(item); 490 auto simpleValue = static_cast<SimpleValue_t*>(item);
491 if (simpleValue->value. is<TableLit_t>()) { 491 if (simpleValue->value.is<TableLit_t>()) {
492 return true; 492 return true;
493 } 493 }
494 return false; 494 return false;
@@ -1020,7 +1020,7 @@ private:
1020 1020
1021 std::list<DestructItem> destructFromExp(ast_node* node) { 1021 std::list<DestructItem> destructFromExp(ast_node* node) {
1022 const node_container* tableItems = nullptr; 1022 const node_container* tableItems = nullptr;
1023 if (ast_cast<Exp_t>(node)) { 1023 if (ast_is<Exp_t>(node)) {
1024 auto item = singleValueFrom(node)->item.get(); 1024 auto item = singleValueFrom(node)->item.get();
1025 if (!item) throw std::logic_error(_info.errorMessage("Invalid destructure value."sv, node)); 1025 if (!item) throw std::logic_error(_info.errorMessage("Invalid destructure value."sv, node));
1026 auto tbA = item->getByPath<TableLit_t>(); 1026 auto tbA = item->getByPath<TableLit_t>();
@@ -1044,7 +1044,7 @@ private:
1044 } 1044 }
1045 auto value = singleValueFrom(pair); 1045 auto value = singleValueFrom(pair);
1046 auto item = value->item.get(); 1046 auto item = value->item.get();
1047 if (ast_cast<simple_table_t>(item) || 1047 if (ast_is<simple_table_t>(item) ||
1048 item->getByPath<TableLit_t>()) { 1048 item->getByPath<TableLit_t>()) {
1049 auto subPairs = destructFromExp(pair); 1049 auto subPairs = destructFromExp(pair);
1050 for (auto& p : subPairs) { 1050 for (auto& p : subPairs) {
@@ -1088,7 +1088,7 @@ private:
1088 if (auto exp = np->value.as<Exp_t>()) { 1088 if (auto exp = np->value.as<Exp_t>()) {
1089 if (!isAssignable(exp)) throw std::logic_error(_info.errorMessage("Can't destructure value."sv, exp)); 1089 if (!isAssignable(exp)) throw std::logic_error(_info.errorMessage("Can't destructure value."sv, exp));
1090 auto item = singleValueFrom(exp)->item.get(); 1090 auto item = singleValueFrom(exp)->item.get();
1091 if (ast_cast<simple_table_t>(item) || 1091 if (ast_is<simple_table_t>(item) ||
1092 item->getByPath<TableLit_t>()) { 1092 item->getByPath<TableLit_t>()) {
1093 auto subPairs = destructFromExp(exp); 1093 auto subPairs = destructFromExp(exp);
1094 auto name = _parser.toString(key); 1094 auto name = _parser.toString(key);
@@ -1129,7 +1129,7 @@ private:
1129 } 1129 }
1130 break; 1130 break;
1131 } 1131 }
1132 if (np->value.as<TableBlock_t>()) { 1132 if (np->value.is<TableBlock_t>()) {
1133 auto subPairs = destructFromExp(pair); 1133 auto subPairs = destructFromExp(pair);
1134 for (auto& p : subPairs) { 1134 for (auto& p : subPairs) {
1135 pairs.push_back({p.isVariable, p.name, 1135 pairs.push_back({p.isVariable, p.name,
@@ -1367,7 +1367,7 @@ private:
1367 auto var = singleVariableFrom(exp); 1367 auto var = singleVariableFrom(exp);
1368 if (var.empty()) { 1368 if (var.empty()) {
1369 storingValue = true; 1369 storingValue = true;
1370 auto desVar = getUnusedName("_des_"); 1370 auto desVar = getUnusedName("_des_"sv);
1371 if (assign->values.objects().size() == 1) { 1371 if (assign->values.objects().size() == 1) {
1372 auto var = singleVariableFrom(assign->values.objects().front()); 1372 auto var = singleVariableFrom(assign->values.objects().front());
1373 if (!var.empty()) { 1373 if (!var.empty()) {
@@ -2016,7 +2016,6 @@ private:
2016 arg.name = "self.__class"sv; 2016 arg.name = "self.__class"sv;
2017 break; 2017 break;
2018 case id<self_name_t>(): { 2018 case id<self_name_t>(): {
2019
2020 auto sfName = static_cast<self_name_t*>(selfName->name.get()); 2019 auto sfName = static_cast<self_name_t*>(selfName->name.get());
2021 arg.name = _parser.toString(sfName->name); 2020 arg.name = _parser.toString(sfName->name);
2022 arg.assignSelf = s("self."sv) + arg.name; 2021 arg.assignSelf = s("self."sv) + arg.name;
@@ -2083,7 +2082,7 @@ private:
2083 auto clsName = static_cast<self_class_name_t*>(name); 2082 auto clsName = static_cast<self_class_name_t*>(name);
2084 auto nameStr = _parser.toString(clsName->name); 2083 auto nameStr = _parser.toString(clsName->name);
2085 if (LuaKeywords.find(nameStr) != LuaKeywords.end()) { 2084 if (LuaKeywords.find(nameStr) != LuaKeywords.end()) {
2086 out.push_back(s("self.__class[\""sv) + nameStr + s("\"]")); 2085 out.push_back(s("self.__class[\""sv) + nameStr + s("\"]"sv));
2087 if (invoke) { 2086 if (invoke) {
2088 if (auto invokePtr = invoke.as<Invoke_t>()) { 2087 if (auto invokePtr = invoke.as<Invoke_t>()) {
2089 invokePtr->args.push_front(toAst<Exp_t>("self.__class"sv, x)); 2088 invokePtr->args.push_front(toAst<Exp_t>("self.__class"sv, x));
@@ -2104,7 +2103,7 @@ private:
2104 auto sfName = static_cast<self_class_name_t*>(name); 2103 auto sfName = static_cast<self_class_name_t*>(name);
2105 auto nameStr = _parser.toString(sfName->name); 2104 auto nameStr = _parser.toString(sfName->name);
2106 if (LuaKeywords.find(nameStr) != LuaKeywords.end()) { 2105 if (LuaKeywords.find(nameStr) != LuaKeywords.end()) {
2107 out.push_back(s("self[\""sv) + nameStr + s("\"]")); 2106 out.push_back(s("self[\""sv) + nameStr + s("\"]"sv));
2108 if (invoke) { 2107 if (invoke) {
2109 if (auto invokePtr = invoke.as<Invoke_t>()) { 2108 if (auto invokePtr = invoke.as<Invoke_t>()) {
2110 invokePtr->args.push_front(toAst<Exp_t>("self"sv, x)); 2109 invokePtr->args.push_front(toAst<Exp_t>("self"sv, x));
@@ -2763,7 +2762,7 @@ private:
2763 _buf << join(temp); 2762 _buf << join(temp);
2764 _buf << assignStr; 2763 _buf << assignStr;
2765 _buf << indent(int(temp.size())) << lenVar << " = "sv << lenVar << " + 1"sv << nll(comp); 2764 _buf << indent(int(temp.size())) << lenVar << " = "sv << lenVar << " + 1"sv << nll(comp);
2766 for (int ind = int(temp.size()) - 1; ind > -1 ; --ind) { 2765 for (int ind = int(temp.size()) - 1; ind > -1; --ind) {
2767 _buf << indent(ind) << "end"sv << nll(comp); 2766 _buf << indent(ind) << "end"sv << nll(comp);
2768 } 2767 }
2769 switch (usage) { 2768 switch (usage) {
@@ -2827,7 +2826,7 @@ private:
2827 case id<star_exp_t>(): { 2826 case id<star_exp_t>(): {
2828 auto star_exp = static_cast<star_exp_t*>(loopTarget); 2827 auto star_exp = static_cast<star_exp_t*>(loopTarget);
2829 auto listVar = singleVariableFrom(star_exp->value); 2828 auto listVar = singleVariableFrom(star_exp->value);
2830 auto indexVar = getUnusedName("_index_"); 2829 auto indexVar = getUnusedName("_index_"sv);
2831 varAfter.push_back(indexVar); 2830 varAfter.push_back(indexVar);
2832 auto value = singleValueFrom(star_exp->value); 2831 auto value = singleValueFrom(star_exp->value);
2833 if (!value) throw std::logic_error(_info.errorMessage("Invalid star syntax."sv, star_exp)); 2832 if (!value) throw std::logic_error(_info.errorMessage("Invalid star syntax."sv, star_exp));
@@ -2869,14 +2868,14 @@ private:
2869 temp.pop_back(); 2868 temp.pop_back();
2870 } 2869 }
2871 if (listVar.empty()) { 2870 if (listVar.empty()) {
2872 listVar = getUnusedName("_list_"); 2871 listVar = getUnusedName("_list_"sv);
2873 varBefore.push_back(listVar); 2872 varBefore.push_back(listVar);
2874 transformChainValue(chain, temp, ExpUsage::Closure); 2873 transformChainValue(chain, temp, ExpUsage::Closure);
2875 _buf << indent() << "local "sv << listVar << " = "sv << temp.back() << nll(nameList); 2874 _buf << indent() << "local "sv << listVar << " = "sv << temp.back() << nll(nameList);
2876 } 2875 }
2877 std::string maxVar; 2876 std::string maxVar;
2878 if (!stopValue.empty()) { 2877 if (!stopValue.empty()) {
2879 maxVar = getUnusedName("_max_"); 2878 maxVar = getUnusedName("_max_"sv);
2880 varBefore.push_back(maxVar); 2879 varBefore.push_back(maxVar);
2881 _buf << indent() << "local "sv << maxVar << " = "sv << stopValue << nll(nameList); 2880 _buf << indent() << "local "sv << maxVar << " = "sv << stopValue << nll(nameList);
2882 } 2881 }
@@ -2885,7 +2884,7 @@ private:
2885 if (stopValue.empty()) { 2884 if (stopValue.empty()) {
2886 _buf << "#"sv << listVar; 2885 _buf << "#"sv << listVar;
2887 } else { 2886 } else {
2888 _buf << maxVar << " < 0 and #"sv << listVar <<" + " << maxVar << " or "sv << maxVar; 2887 _buf << maxVar << " < 0 and #"sv << listVar << " + "sv << maxVar << " or "sv << maxVar;
2889 } 2888 }
2890 if (!stepValue.empty()) { 2889 if (!stepValue.empty()) {
2891 _buf << ", "sv << stepValue; 2890 _buf << ", "sv << stepValue;
@@ -2897,7 +2896,7 @@ private:
2897 bool newListVal = false; 2896 bool newListVal = false;
2898 if (listVar.empty()) { 2897 if (listVar.empty()) {
2899 newListVal = true; 2898 newListVal = true;
2900 listVar = getUnusedName("_list_"); 2899 listVar = getUnusedName("_list_"sv);
2901 varBefore.push_back(listVar); 2900 varBefore.push_back(listVar);
2902 } 2901 }
2903 if (!endWithSlice) { 2902 if (!endWithSlice) {
@@ -3355,7 +3354,7 @@ private:
3355 } 3354 }
3356 } 3355 }
3357 if (!varDefs.empty()) { 3356 if (!varDefs.empty()) {
3358 temp.push_back(indent() + s("local ") + join(varDefs, ", "sv) + nll(body)); 3357 temp.push_back(indent() + s("local "sv) + join(varDefs, ", "sv) + nll(body));
3359 } 3358 }
3360 } 3359 }
3361 std::string parent, parentVar; 3360 std::string parent, parentVar;
@@ -3431,7 +3430,7 @@ private:
3431 if (extend) { 3430 if (extend) {
3432 _buf << indent() << "setmetatable("sv << baseVar << ", "sv << parentVar << ".__base)"sv << nll(classDecl); 3431 _buf << indent() << "setmetatable("sv << baseVar << ", "sv << parentVar << ".__base)"sv << nll(classDecl);
3433 } 3432 }
3434 _buf << indent() << classVar << " = setmetatable({" << nll(classDecl); 3433 _buf << indent() << classVar << " = setmetatable({"sv << nll(classDecl);
3435 if (!builtins.empty()) { 3434 if (!builtins.empty()) {
3436 _buf << join(builtins) << ","sv << nll(classDecl); 3435 _buf << join(builtins) << ","sv << nll(classDecl);
3437 } else { 3436 } else {
@@ -3472,7 +3471,7 @@ private:
3472 pushScope(); 3471 pushScope();
3473 auto selfVar = getUnusedName("_self_"sv); 3472 auto selfVar = getUnusedName("_self_"sv);
3474 addToScope(selfVar); 3473 addToScope(selfVar);
3475 _buf << indent(1) << "local " << selfVar << " = setmetatable({}, "sv << baseVar << ")"sv << nll(classDecl); 3474 _buf << indent(1) << "local "sv << selfVar << " = setmetatable({}, "sv << baseVar << ")"sv << nll(classDecl);
3476 _buf << indent(1) << "cls.__init("sv << selfVar << ", ...)"sv << nll(classDecl); 3475 _buf << indent(1) << "cls.__init("sv << selfVar << ", ...)"sv << nll(classDecl);
3477 _buf << indent(1) << "return "sv << selfVar << nll(classDecl); 3476 _buf << indent(1) << "return "sv << selfVar << nll(classDecl);
3478 popScope(); 3477 popScope();
@@ -4101,7 +4100,7 @@ private:
4101 auto assignList = x->new_ptr<ExpList_t>(); 4100 auto assignList = x->new_ptr<ExpList_t>();
4102 assignList->exprs.push_back(exp); 4101 assignList->exprs.push_back(exp);
4103 auto assign = x->new_ptr<Assign_t>(); 4102 auto assign = x->new_ptr<Assign_t>();
4104 assign->values.push_back(toAst<Exp_t>(s("require ") + _parser.toString(import->literal), x)); 4103 assign->values.push_back(toAst<Exp_t>(s("require "sv) + _parser.toString(import->literal), x));
4105 auto assignment = x->new_ptr<ExpListAssign_t>(); 4104 auto assignment = x->new_ptr<ExpListAssign_t>();
4106 assignment->expList.set(assignList); 4105 assignment->expList.set(assignList);
4107 assignment->action.set(assign); 4106 assignment->action.set(assign);