aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-06-30 12:15:25 +0800
committerLi Jin <dragon-fly@qq.com>2020-06-30 12:15:25 +0800
commit7682305156719aad1397d9eb63e97ecdb8393316 (patch)
tree824c0e1965b88985d740e63448b1b399665fb977
parent20df8a965a99593653c9047b7565a29331138ee6 (diff)
downloadyuescript-7682305156719aad1397d9eb63e97ecdb8393316.tar.gz
yuescript-7682305156719aad1397d9eb63e97ecdb8393316.tar.bz2
yuescript-7682305156719aad1397d9eb63e97ecdb8393316.zip
fix issue when declaring multiple variables with attribute.
-rw-r--r--spec/inputs/attrib.moon7
-rw-r--r--src/MoonP/moon_compiler.cpp7
2 files changed, 10 insertions, 4 deletions
diff --git a/spec/inputs/attrib.moon b/spec/inputs/attrib.moon
index a5fa376..bc1e67e 100644
--- a/spec/inputs/attrib.moon
+++ b/spec/inputs/attrib.moon
@@ -1,6 +1,9 @@
1do 1do
2 close a = setmetatable {},__close:=> print "closed" 2 close a, b = setmetatable {},__close:=> print "closed"
3 const a = 123 3 const c, d = 123, 'abc'
4
5 close a, b
6 const c, d
4 7
5do 8do
6 close v = if flag 9 close v = if flag
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp
index 8dc5c94..a3ed4de 100644
--- a/src/MoonP/moon_compiler.cpp
+++ b/src/MoonP/moon_compiler.cpp
@@ -5126,6 +5126,7 @@ private:
5126 auto expList = x->new_ptr<ExpList_t>(); 5126 auto expList = x->new_ptr<ExpList_t>();
5127 str_list tmpVars; 5127 str_list tmpVars;
5128 str_list vars; 5128 str_list vars;
5129 pushScope();
5129 for (auto name : localAttrib->nameList->names.objects()) { 5130 for (auto name : localAttrib->nameList->names.objects()) {
5130 auto callable = x->new_ptr<Callable_t>(); 5131 auto callable = x->new_ptr<Callable_t>();
5131 callable->item.set(name); 5132 callable->item.set(name);
@@ -5136,9 +5137,11 @@ private:
5136 auto exp = newExp(value, x); 5137 auto exp = newExp(value, x);
5137 expList->exprs.push_back(exp); 5138 expList->exprs.push_back(exp);
5138 tmpVars.push_back(getUnusedName("_var_"sv)); 5139 tmpVars.push_back(getUnusedName("_var_"sv));
5140 addToScope(tmpVars.back());
5139 vars.push_back(_parser.toString(name)); 5141 vars.push_back(_parser.toString(name));
5140 } 5142 }
5141 auto tmpVarStr = join(tmpVars, ","sv); 5143 popScope();
5144 auto tmpVarStr = join(tmpVars, ", "sv);
5142 auto tmpVarList = toAst<ExpList_t>(tmpVarStr, x); 5145 auto tmpVarList = toAst<ExpList_t>(tmpVarStr, x);
5143 auto assignment = x->new_ptr<ExpListAssign_t>(); 5146 auto assignment = x->new_ptr<ExpListAssign_t>();
5144 assignment->expList.set(tmpVarList); 5147 assignment->expList.set(tmpVarList);
@@ -5150,7 +5153,7 @@ private:
5150 forceAddToScope(var); 5153 forceAddToScope(var);
5151 var.append(attrib); 5154 var.append(attrib);
5152 } 5155 }
5153 temp.push_back(indent() + s("local "sv) + join(vars) + s(" = "sv) + tmpVarStr + nll(x)); 5156 temp.push_back(indent() + s("local "sv) + join(vars, ", "sv) + s(" = "sv) + tmpVarStr + nll(x));
5154 out.push_back(join(temp)); 5157 out.push_back(join(temp));
5155 } 5158 }
5156 5159