diff options
author | Li Jin <dragon-fly@qq.com> | 2020-06-22 16:50:40 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2020-06-22 16:50:40 +0800 |
commit | cd2b60b101a398cb9356d746364e70eaed1860f1 (patch) | |
tree | a1fe71b76faabc4883f16905a94164ce5c23e692 /src/MoonP/moon_parser.cpp | |
parent | 88c1052e700f38cf3d8ad82d469da4c487760b7e (diff) | |
download | yuescript-cd2b60b101a398cb9356d746364e70eaed1860f1.tar.gz yuescript-cd2b60b101a398cb9356d746364e70eaed1860f1.tar.bz2 yuescript-cd2b60b101a398cb9356d746364e70eaed1860f1.zip |
add support for local variable declared with attribute 'close' and 'const' for Lua 5.4.
Diffstat (limited to 'src/MoonP/moon_parser.cpp')
-rw-r--r-- | src/MoonP/moon_parser.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp index 25e67b3..4dee5b1 100644 --- a/src/MoonP/moon_parser.cpp +++ b/src/MoonP/moon_parser.cpp | |||
@@ -174,6 +174,14 @@ MoonParser::MoonParser() { | |||
174 | local_values = NameList >> -(sym('=') >> (TableBlock | ExpListLow)); | 174 | local_values = NameList >> -(sym('=') >> (TableBlock | ExpListLow)); |
175 | Local = key("local") >> (Space >> local_flag | local_values); | 175 | Local = key("local") >> (Space >> local_flag | local_values); |
176 | 176 | ||
177 | LocalAttrib = and_(key(pl::user(Name, [](const item_t& item) { | ||
178 | State* st = reinterpret_cast<State*>(item.user_data); | ||
179 | for (auto it = item.begin; it != item.end; ++it) st->buffer += static_cast<char>(*it); | ||
180 | auto it = Keywords.find(st->buffer); | ||
181 | st->buffer.clear(); | ||
182 | return it == Keywords.end(); | ||
183 | })) >> NameList >> sym('=') >> not_('=')) >> Space >> Name >> NameList >> Assign; | ||
184 | |||
177 | colon_import_name = sym('\\') >> Space >> Variable; | 185 | colon_import_name = sym('\\') >> Space >> Variable; |
178 | ImportName = colon_import_name | Space >> Variable; | 186 | ImportName = colon_import_name | Space >> Variable; |
179 | ImportNameList = Seperator >> *SpaceBreak >> ImportName >> *((+SpaceBreak | sym(',') >> *SpaceBreak) >> ImportName); | 187 | ImportNameList = Seperator >> *SpaceBreak >> ImportName >> *((+SpaceBreak | sym(',') >> *SpaceBreak) >> ImportName); |
@@ -552,7 +560,8 @@ MoonParser::MoonParser() { | |||
552 | Statement = ( | 560 | Statement = ( |
553 | Import | While | Repeat | For | ForEach | | 561 | Import | While | Repeat | For | ForEach | |
554 | Return | Local | Global | Export | Macro | | 562 | Return | Local | Global | Export | Macro | |
555 | Space >> BreakLoop | Label | Goto | Backcall | ExpListAssign | 563 | Space >> BreakLoop | Label | Goto | Backcall | |
564 | LocalAttrib | ExpListAssign | ||
556 | ) >> Space >> | 565 | ) >> Space >> |
557 | -statement_appendix >> -statement_sep; | 566 | -statement_appendix >> -statement_sep; |
558 | 567 | ||