diff options
author | Li Jin <dragon-fly@qq.com> | 2020-06-30 12:15:25 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2020-06-30 12:15:25 +0800 |
commit | 7682305156719aad1397d9eb63e97ecdb8393316 (patch) | |
tree | 824c0e1965b88985d740e63448b1b399665fb977 | |
parent | 20df8a965a99593653c9047b7565a29331138ee6 (diff) | |
download | yuescript-7682305156719aad1397d9eb63e97ecdb8393316.tar.gz yuescript-7682305156719aad1397d9eb63e97ecdb8393316.tar.bz2 yuescript-7682305156719aad1397d9eb63e97ecdb8393316.zip |
fix issue when declaring multiple variables with attribute.
-rw-r--r-- | spec/inputs/attrib.moon | 7 | ||||
-rw-r--r-- | src/MoonP/moon_compiler.cpp | 7 |
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 @@ | |||
1 | do | 1 | do |
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 | ||
5 | do | 8 | do |
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 | ||