aboutsummaryrefslogtreecommitdiff
path: root/src/MoonP/moon_parser.cpp
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-06-22 16:50:40 +0800
committerLi Jin <dragon-fly@qq.com>2020-06-22 16:50:40 +0800
commitcd2b60b101a398cb9356d746364e70eaed1860f1 (patch)
treea1fe71b76faabc4883f16905a94164ce5c23e692 /src/MoonP/moon_parser.cpp
parent88c1052e700f38cf3d8ad82d469da4c487760b7e (diff)
downloadyuescript-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.cpp11
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