aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2023-12-19 23:29:07 +0800
committerLi Jin <dragon-fly@qq.com>2023-12-19 23:29:07 +0800
commit7de25e2ef75a748356c79d0015a5d934dde4c216 (patch)
tree4b6eb791750a93e1ab68066cd503247dba91f80d /src
parent8a7b5cc48c22f910a02320b547b76283307a1b83 (diff)
downloadyuescript-7de25e2ef75a748356c79d0015a5d934dde4c216.tar.gz
yuescript-7de25e2ef75a748356c79d0015a5d934dde4c216.tar.bz2
yuescript-7de25e2ef75a748356c79d0015a5d934dde4c216.zip
fix a const list destructuring case.
Diffstat (limited to 'src')
-rw-r--r--src/yuescript/yue_ast.h3
-rw-r--r--src/yuescript/yue_compiler.cpp5
-rw-r--r--src/yuescript/yue_parser.cpp2
3 files changed, 6 insertions, 4 deletions
diff --git a/src/yuescript/yue_ast.h b/src/yuescript/yue_ast.h
index 6b2b7f8..6d90add 100644
--- a/src/yuescript/yue_ast.h
+++ b/src/yuescript/yue_ast.h
@@ -80,6 +80,7 @@ class Macro_t;
80class In_t; 80class In_t;
81class NormalDef_t; 81class NormalDef_t;
82class SpreadListExp_t; 82class SpreadListExp_t;
83class Comprehension_t;
83} // namespace yue 84} // namespace yue
84 85
85AST_LEAF(Num) 86AST_LEAF(Num)
@@ -171,7 +172,7 @@ AST_END(CloseAttrib, "close"sv)
171AST_NODE(LocalAttrib) 172AST_NODE(LocalAttrib)
172 ast_sel<true, ConstAttrib_t, CloseAttrib_t> attrib; 173 ast_sel<true, ConstAttrib_t, CloseAttrib_t> attrib;
173 ast_ptr<true, Seperator_t> sep; 174 ast_ptr<true, Seperator_t> sep;
174 ast_sel_list<true, Variable_t, SimpleTable_t, TableLit_t> leftList; 175 ast_sel_list<true, Variable_t, SimpleTable_t, TableLit_t, Comprehension_t> leftList;
175 ast_ptr<true, Assign_t> assign; 176 ast_ptr<true, Assign_t> assign;
176 AST_MEMBER(LocalAttrib, &attrib, &sep, &leftList, &assign) 177 AST_MEMBER(LocalAttrib, &attrib, &sep, &leftList, &assign)
177AST_END(LocalAttrib, "local_attrib"sv) 178AST_END(LocalAttrib, "local_attrib"sv)
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp
index d43f79b..f163bdf 100644
--- a/src/yuescript/yue_compiler.cpp
+++ b/src/yuescript/yue_compiler.cpp
@@ -75,7 +75,7 @@ static std::unordered_set<std::string> Metamethods = {
75 "close"s // Lua 5.4 75 "close"s // Lua 5.4
76}; 76};
77 77
78const std::string_view version = "0.21.5"sv; 78const std::string_view version = "0.21.6"sv;
79const std::string_view extension = "yue"sv; 79const std::string_view extension = "yue"sv;
80 80
81class CompileError : public std::logic_error { 81class CompileError : public std::logic_error {
@@ -9376,7 +9376,8 @@ private:
9376 case id<SimpleTable_t>(): 9376 case id<SimpleTable_t>():
9377 value->item.set(item); 9377 value->item.set(item);
9378 break; 9378 break;
9379 case id<TableLit_t>(): { 9379 case id<TableLit_t>():
9380 case id<Comprehension_t>(): {
9380 auto simpleValue = item->new_ptr<SimpleValue_t>(); 9381 auto simpleValue = item->new_ptr<SimpleValue_t>();
9381 simpleValue->value.set(item); 9382 simpleValue->value.set(item);
9382 value->item.set(simpleValue); 9383 value->item.set(simpleValue);
diff --git a/src/yuescript/yue_parser.cpp b/src/yuescript/yue_parser.cpp
index 3557534..4e6105b 100644
--- a/src/yuescript/yue_parser.cpp
+++ b/src/yuescript/yue_parser.cpp
@@ -286,7 +286,7 @@ YueParser::YueParser() {
286 286
287 ConstAttrib = key("const"); 287 ConstAttrib = key("const");
288 CloseAttrib = key("close"); 288 CloseAttrib = key("close");
289 local_const_item = Variable | SimpleTable | TableLit; 289 local_const_item = Variable | SimpleTable | TableLit | Comprehension;
290 LocalAttrib = ( 290 LocalAttrib = (
291 ConstAttrib >> Seperator >> space >> local_const_item >> *(space >> ',' >> space >> local_const_item) | 291 ConstAttrib >> Seperator >> space >> local_const_item >> *(space >> ',' >> space >> local_const_item) |
292 CloseAttrib >> Seperator >> space >> Variable >> *(space >> ',' >> space >> Variable) 292 CloseAttrib >> Seperator >> space >> Variable >> *(space >> ',' >> space >> Variable)