From f1898c3f2fae38f249a6cc1c44f6a109833d8d85 Mon Sep 17 00:00:00 2001 From: klauwier <r.tolkacheva@g.nsu.ru> Date: Sun, 11 Jun 2023 19:59:22 +0700 Subject: [PATCH] test/fuzz: fix luaJIT fuzzer timeout LuaJIT fuzzer used to stop due to timeout caused by infinite cycles and recursions. Counters were introduced for every cycle and function to address LuaJIT fuzzer timeouts. The idea is to add unique counters for every cycle and function to ensure finite code execution, if it wasn't already. For while, repeat, for cycles, local and global named, anonymous functions, counters will be initialized before the code generated from protobuf, and checked in the first body statement. An entry point for the serializer was created to count cycles and functions for counter initialization. The idea was taken from a paper "Program Reconditioning: Avoiding Undefined Behaviour When Finding and Reducing Compiler Bugs" [1]. Here is an example of a change in serialized code made by this commit. Before: ```lua while (true) do foo = 'bar' end function bar() bar() end ``` After: ```lua counter_0 = 0 counter_1 = 0 while (true) do if counter_0 > 5 then break end counter_0 = counter_0 + 1 foo = 'bar' end function bar() if counter_1 > 5 then return end counter_1 = counter_1 + 1 bar() end ``` Protobuf structures that reproduce the timeout problem were added to the LuaJIT fuzzer corpus. [1] https://www.doc.ic.ac.uk/~afd/homepages/papers/pdfs/2023/PLDI.pdf NO_CHANGELOG=internal NO_DOC=fuzzer fix (cherry picked from commit 4d004bbe24768c6b1afe634d87d9bea8e60b1995) --- .../luaL_loadbuffer/luaL_loadbuffer_fuzzer.cc | 2 +- test/fuzz/luaL_loadbuffer/serializer.cc | 266 ++++- test/fuzz/luaL_loadbuffer/serializer.h | 16 + ...t-0952c452a9b293fbd1bb3ad989b4627976d27e97 | 485 ++++++++ ...t-337b9efb6b00c9363e9ca290cd09e8d7caba54bb | 398 +++++++ ...t-53c0a03d2fa042bda3c544569c387086295af2a5 | 863 ++++++++++++++ ...t-5fef580e9368ed8fc12db09db214241d3c353377 | 682 +++++++++++ ...t-7fa44b92f42baec7b4d5029123d005bf8e6ece19 | 1024 +++++++++++++++++ ...t-81c222fd009c8604a860ab967143637f94276d68 | 859 ++++++++++++++ ...t-8a7111c13961d300ba0d55fd9411e9a0f7b1b606 | 472 ++++++++ ...t-a0aa27253eafb4ab8c975ad981bdc013d85b8c21 | 480 ++++++++ ...t-a383120b323bf8da86fa78919f1f2999154c581e | 978 ++++++++++++++++ ...t-b02e909f524a1990690994e84d6dbc93581c0557 | 999 ++++++++++++++++ ...t-b0e5846adaa872aedb8c142620b3a7775c785ea3 | 895 ++++++++++++++ ...t-c0e43bf73dbe687a743986309beb9683ccac018e | 665 +++++++++++ ...t-c9a028495b4422da26c910b64f0249a69668de48 | 768 +++++++++++++ 16 files changed, 9805 insertions(+), 47 deletions(-) create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-0952c452a9b293fbd1bb3ad989b4627976d27e97 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-337b9efb6b00c9363e9ca290cd09e8d7caba54bb create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-53c0a03d2fa042bda3c544569c387086295af2a5 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-5fef580e9368ed8fc12db09db214241d3c353377 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-7fa44b92f42baec7b4d5029123d005bf8e6ece19 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-81c222fd009c8604a860ab967143637f94276d68 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-8a7111c13961d300ba0d55fd9411e9a0f7b1b606 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-a0aa27253eafb4ab8c975ad981bdc013d85b8c21 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-a383120b323bf8da86fa78919f1f2999154c581e create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-b02e909f524a1990690994e84d6dbc93581c0557 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-b0e5846adaa872aedb8c142620b3a7775c785ea3 create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-c0e43bf73dbe687a743986309beb9683ccac018e create mode 100644 test/static/corpus/luaL_loadbuffer/timeout-c9a028495b4422da26c910b64f0249a69668de48 diff --git a/test/fuzz/luaL_loadbuffer/luaL_loadbuffer_fuzzer.cc b/test/fuzz/luaL_loadbuffer/luaL_loadbuffer_fuzzer.cc index 94ebd5bad9..c3a467d221 100644 --- a/test/fuzz/luaL_loadbuffer/luaL_loadbuffer_fuzzer.cc +++ b/test/fuzz/luaL_loadbuffer/luaL_loadbuffer_fuzzer.cc @@ -34,7 +34,7 @@ DEFINE_PROTO_FUZZER(const lua_grammar::Block &message) if (!L) return; - std::string code = BlockToString(message); + std::string code = MainBlockToString(message); if (::getenv("LPM_DUMP_NATIVE_INPUT") && code.size() != 0) { std::cout << "-------------------------" << std::endl; diff --git a/test/fuzz/luaL_loadbuffer/serializer.cc b/test/fuzz/luaL_loadbuffer/serializer.cc index 70dc0617e4..05c27ff701 100644 --- a/test/fuzz/luaL_loadbuffer/serializer.cc +++ b/test/fuzz/luaL_loadbuffer/serializer.cc @@ -5,6 +5,157 @@ */ #include "serializer.h" +#include <stack> +#include <string> + +namespace { + +const std::string kCounterNamePrefix = "counter_"; + +/** + * Class that controls id creation for counters. Basically, a + * variable wrapper that guarantees variable to be incremented. + */ +class CounterIdProvider { +public: + /** Returns number of id provided. */ + std::size_t count() + { + return id_; + } + + /** Returns a new id that was not used after last clean(). */ + std::size_t next() + { + return id_++; + } + + /** + * Cleans history. Should be used to make fuzzer starts + * independent. + */ + void clean() + { + id_ = 0; + } + +private: + std::size_t id_ = 0; +}; + +/** A singleton for counter id provider. */ +CounterIdProvider& +GetCounterIdProvider() +{ + static CounterIdProvider provider; + return provider; +} + +std::string +GetCounterName(std::size_t id) +{ + return kCounterNamePrefix + std::to_string(id); +} + +/** Returns `<counter_name> = <counter_name> + 1`. */ +std::string +GetCounterIncrement(const std::string &counter_name) +{ + std::string retval = counter_name; + retval += " = "; + retval += counter_name; + retval += " + 1\n"; + return retval; +} + +/** + * Returns `if <counter_name> > kMaxCounterValue then + * <then_block> end`. + */ +std::string +GetCondition(const std::string &counter_name, const std::string &then_block) +{ + std::string retval = "if "; + retval += counter_name; + retval += " > "; + retval += std::to_string(kMaxCounterValue); + retval += " then "; + retval += then_block; + retval += " end\n"; + return retval; +} + +/** + * Block may be placed not only in a cycle, so specially for cycles + * there is a function that will add a break condition and a + * counter increment. + */ +std::string +BlockToStringCycleProtected(const Block &block, const std::string &counter_name) +{ + std::string retval = GetCondition(counter_name, "break"); + retval += GetCounterIncrement(counter_name); + retval += ChunkToString(block.chunk()); + return retval; +} + +/** + * DoBlock may be placed not only in a cycle, so specially for + * cycles there is a function that will call + * BlockToStringCycleProtected(). + */ +std::string +DoBlockToStringCycleProtected(const DoBlock &block, + const std::string &counter_name) +{ + std::string retval = "do\n"; + retval += BlockToStringCycleProtected(block.block(), counter_name); + retval += "end\n"; + return retval; +} + +/** + * FuncBody may contain recursive calls, so for all function bodies, + * there is a function that adds a return condition and a counter + * increment. + */ +std::string +FuncBodyToStringReqProtected(const FuncBody &body, + const std::string &counter_name) +{ + std::string body_str = "( "; + if (body.has_parlist()) { + body_str += ParListToString(body.parlist()); + } + body_str += " )\n\t"; + + body_str += GetCondition(counter_name, "return"); + body_str += GetCounterIncrement(counter_name); + + body_str += BlockToString(body.block()); + body_str += "end\n"; + return body_str; +} + +} /* namespace */ + +std::string +MainBlockToString(const Block &block) +{ + GetCounterIdProvider().clean(); + + std::string block_str = BlockToString(block); + std::string retval; + + for (size_t i = 0; i < GetCounterIdProvider().count(); ++i) { + retval += GetCounterName(i); + retval += " = 0\n"; + } + retval += block_str; + + return retval; +} + static inline std::string RemoveLeadingNumbers(const std::string &s) { @@ -126,18 +277,12 @@ PROTO_TOSTRING(Statement, stat) case StatType::kBlock: stat_str = DoBlockToString(stat.block()); break; - /** - * TODO: - * Commented due to possible generation of infinite loops. - * In that case, fuzzer will drop only by timeout. - * Example: 'while true do end'. - */ - /* - * case StatType::kWhilecycle: - * stat_str = WhileCycleToString(stat.whilecycle()); - * case StatType::kRepeatcycle: - * stat_str = RepeatCycleToString(stat.repeatcycle()); - */ + case StatType::kWhilecycle: + stat_str = WhileCycleToString(stat.whilecycle()); + break; + case StatType::kRepeatcycle: + stat_str = RepeatCycleToString(stat.repeatcycle()); + break; case StatType::kIfstat: stat_str = IfStatementToString(stat.ifstat()); break; @@ -255,9 +400,15 @@ PROTO_TOSTRING(DoBlock, block) */ PROTO_TOSTRING(WhileCycle, whilecycle) { - std::string whilecycle_str = "while " + ExpressionToString( - whilecycle.condition()); - whilecycle_str += " " + DoBlockToString(whilecycle.doblock()); + const auto id = GetCounterIdProvider().next(); + auto counter_name = GetCounterName(id); + + std::string whilecycle_str = "while "; + whilecycle_str += ExpressionToString(whilecycle.condition()); + whilecycle_str += " "; + whilecycle_str += DoBlockToStringCycleProtected(whilecycle.doblock(), + counter_name); + return whilecycle_str; } @@ -266,10 +417,15 @@ PROTO_TOSTRING(WhileCycle, whilecycle) */ PROTO_TOSTRING(RepeatCycle, repeatcycle) { - std::string repeatcycle_str = "repeat " + BlockToString( - repeatcycle.block()); - repeatcycle_str += "until " + ExpressionToString( - repeatcycle.condition()); + const auto id = GetCounterIdProvider().next(); + auto counter_name = GetCounterName(id); + + std::string repeatcycle_str = "repeat\n"; + repeatcycle_str += BlockToStringCycleProtected(repeatcycle.block(), + counter_name); + repeatcycle_str += "until "; + repeatcycle_str += ExpressionToString(repeatcycle.condition()); + return repeatcycle_str; } @@ -309,16 +465,23 @@ NESTED_PROTO_TOSTRING(ElseIfBlock, elseifblock, IfStatement) */ PROTO_TOSTRING(ForCycleName, forcyclename) { - std::string forcyclename_str = "for " + NameToString( - forcyclename.name()); - forcyclename_str += " = " + ExpressionToString(forcyclename.startexp()); - forcyclename_str += ", " + ExpressionToString(forcyclename.stopexp()); + const auto id = GetCounterIdProvider().next(); + auto counter_name = GetCounterName(id); + + std::string forcyclename_str = "for "; + forcyclename_str += NameToString(forcyclename.name()); + forcyclename_str += " = "; + forcyclename_str += ExpressionToString(forcyclename.startexp()); + forcyclename_str += ", "; + forcyclename_str += ExpressionToString(forcyclename.stopexp()); if (forcyclename.has_stepexp()) forcyclename_str += ", " + ExpressionToString( forcyclename.stepexp()); - forcyclename_str += " " + DoBlockToString(forcyclename.doblock()); + forcyclename_str += " "; + forcyclename_str += DoBlockToStringCycleProtected( + forcyclename.doblock(), counter_name); return forcyclename_str; } @@ -327,11 +490,16 @@ PROTO_TOSTRING(ForCycleName, forcyclename) */ PROTO_TOSTRING(ForCycleList, forcyclelist) { - std::string forcyclelist_str = "for " + NameListToString( - forcyclelist.names()); - forcyclelist_str += " in " + ExpressionListToString( - forcyclelist.expressions()); - forcyclelist_str += " " + DoBlockToString(forcyclelist.doblock()); + const auto id = GetCounterIdProvider().next(); + auto counter_name = GetCounterName(id); + + std::string forcyclelist_str = "for "; + forcyclelist_str += NameListToString(forcyclelist.names()); + forcyclelist_str += " in "; + forcyclelist_str += ExpressionListToString(forcyclelist.expressions()); + forcyclelist_str += " "; + forcyclelist_str += DoBlockToStringCycleProtected( + forcyclelist.doblock(), counter_name); return forcyclelist_str; } @@ -340,8 +508,13 @@ PROTO_TOSTRING(ForCycleList, forcyclelist) */ PROTO_TOSTRING(Function, func) { - std::string func_str = "function " + FuncNameToString(func.name()); - func_str += FuncBodyToString(func.body()); + const auto id = GetCounterIdProvider().next(); + auto counter_name = GetCounterName(id); + + std::string func_str = "function "; + func_str += FuncNameToString(func.name()); + func_str += FuncBodyToStringReqProtected(func.body(), counter_name); + return func_str; } @@ -366,17 +539,6 @@ PROTO_TOSTRING(NameList, namelist) return namelist_str; } -PROTO_TOSTRING(FuncBody, body) -{ - std::string body_str = "( "; - if (body.has_parlist()) - body_str += ParListToString(body.parlist()); - body_str += " )\n\t"; - body_str += BlockToString(body.block()); - body_str += "end\n"; - return body_str; -} - NESTED_PROTO_TOSTRING(NameListWithEllipsis, namelist, FuncBody) { std::string namelist_str = NameListToString(namelist.namelist()); @@ -404,9 +566,15 @@ NESTED_PROTO_TOSTRING(ParList, parlist, FuncBody) */ PROTO_TOSTRING(LocalFunc, localfunc) { - std::string localfunc_str = "local function " + NameToString( - localfunc.name()); - localfunc_str += " " + FuncBodyToString(localfunc.funcbody()); + const auto id = GetCounterIdProvider().next(); + auto counter_name = GetCounterName(id); + + std::string localfunc_str = "local function "; + localfunc_str += NameToString(localfunc.name()); + localfunc_str += " "; + localfunc_str += FuncBodyToStringReqProtected(localfunc.funcbody(), + counter_name); + return localfunc_str; } @@ -548,7 +716,13 @@ PROTO_TOSTRING(Expression, expr) NESTED_PROTO_TOSTRING(AnonFunc, func, Expression) { - return "function " + FuncBodyToString(func.body()); + const auto id = GetCounterIdProvider().next(); + auto counter_name = GetCounterName(id); + + std::string retval = "function "; + retval += FuncBodyToStringReqProtected(func.body(), counter_name); + + return retval; } NESTED_PROTO_TOSTRING(ExpBinaryOpExp, binary, Expression) diff --git a/test/fuzz/luaL_loadbuffer/serializer.h b/test/fuzz/luaL_loadbuffer/serializer.h index 97812c919a..bb946f1062 100644 --- a/test/fuzz/luaL_loadbuffer/serializer.h +++ b/test/fuzz/luaL_loadbuffer/serializer.h @@ -19,6 +19,11 @@ using namespace lua_grammar; /** * Fuzzing parameters: + * kMaxCounterValue - value used in the condition + * `if counter > kMaxCounterValue then break end` or, in functions, + * `if counter > kMaxCounterValue then return end`. It is used to + * prevent serealized code from encountering infinite recursions + * and cycles. * kMaxNumber - upper bound for all generated numbers. * kMinNumber - lower bound for all generated numbers. * kMaxStrLength - upper bound for generating string literals and identifiers. @@ -27,12 +32,23 @@ using namespace lua_grammar; * Default values were chosen arbitrary but not too big for better readability * of generated code samples. */ +constexpr std::size_t kMaxCounterValue = 5; constexpr double kMaxNumber = 1000.0; constexpr double kMinNumber = -1000.0; constexpr size_t kMaxStrLength = 20; constexpr size_t kMaxIdentifiers = 10; constexpr char kDefaultIdent[] = "Name"; +/** + * Entry point for the serializer. Generates a Lua program from a + * protobuf message with all counter initializations placed above + * the serialized message. The purpose of the counters is to + * address the timeout problem caused by infinite cycles and + * recursions. + */ +std::string +MainBlockToString(const Block &block); + PROTO_TOSTRING(Block, block); PROTO_TOSTRING(Chunk, chunk); diff --git a/test/static/corpus/luaL_loadbuffer/timeout-0952c452a9b293fbd1bb3ad989b4627976d27e97 b/test/static/corpus/luaL_loadbuffer/timeout-0952c452a9b293fbd1bb3ad989b4627976d27e97 new file mode 100644 index 0000000000..de5ef52732 --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-0952c452a9b293fbd1bb3ad989b4627976d27e97 @@ -0,0 +1,485 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + nil: 131072 + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + block { + block { + chunk { + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + block { + block { + chunk { + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + forcyclelist { + names { + firstname { + name: "" + num: 0 + } + } + expressions { + expressions { + false: 8192 + } + explast { + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-337b9efb6b00c9363e9ca290cd09e8d7caba54bb b/test/static/corpus/luaL_loadbuffer/timeout-337b9efb6b00c9363e9ca290cd09e8d7caba54bb new file mode 100644 index 0000000000..31df60b802 --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-337b9efb6b00c9363e9ca290cd09e8d7caba54bb @@ -0,0 +1,398 @@ +chunk { + stat { + whilecycle { + condition { + number: 0 + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + } + exp { + unary { + unop { + } + exp { + tableconstructor { + } + } + } + } + } + } + value { + false: 10240 + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + } + exp { + unary { + unop { + } + exp { + tableconstructor { + } + } + } + } + } + } + value { + false: 10240 + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + number: 0 + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + } + exp { + function { + body { + parlist { + namelist { + namelist { + firstname { + name: "" + num: 0 + } + names { + name: "\001" + num: 0 + } + } + } + } + block { + chunk { + } + } + } + } + } + } + } + value { + false: 10240 + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + false: 10240 + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-53c0a03d2fa042bda3c544569c387086295af2a5 b/test/static/corpus/luaL_loadbuffer/timeout-53c0a03d2fa042bda3c544569c387086295af2a5 new file mode 100644 index 0000000000..4e507d55ce --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-53c0a03d2fa042bda3c544569c387086295af2a5 @@ -0,0 +1,863 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + str: "\000\000\000\000\000\000\000\000\000\000" + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + stat { + forcyclelist { + names { + firstname { + name: "\000\000\000\000\000\000\000\000\000\000" + num: 0 + } + } + expressions { + explast { + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + forcyclelist { + names { + firstname { + name: "" + num: 0 + } + } + expressions { + explast { + } + } + doblock { + block { + chunk { + stat { + ifstat { + condition { + } + first { + chunk { + } + } + last { + chunk { + laststat { + semicolon: true + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + ifstat { + condition { + } + first { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + stat { + localnames { + namelist { + firstname { + name: "" + num: 0 + } + } + explist { + expressions { + false: 0 + } + explast { + } + } + } + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + forcyclelist { + names { + firstname { + name: "" + num: 0 + } + names { + name: "" + num: 0 + } + } + expressions { + explast { + } + } + doblock { + block { + chunk { + } + } + } + } + } + laststat { + semicolon: true + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + forcyclelist { + names { + firstname { + name: "" + num: 0 + } + } + expressions { + explast { + } + } + doblock { + block { + chunk { + stat { + ifstat { + condition { + } + first { + chunk { + } + } + last { + chunk { + laststat { + semicolon: true + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + ifstat { + condition { + } + first { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-5fef580e9368ed8fc12db09db214241d3c353377 b/test/static/corpus/luaL_loadbuffer/timeout-5fef580e9368ed8fc12db09db214241d3c353377 new file mode 100644 index 0000000000..d24f50ad02 --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-5fef580e9368ed8fc12db09db214241d3c353377 @@ -0,0 +1,682 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + true: 41 + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + true: 41 + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-7fa44b92f42baec7b4d5029123d005bf8e6ece19 b/test/static/corpus/luaL_loadbuffer/timeout-7fa44b92f42baec7b4d5029123d005bf8e6ece19 new file mode 100644 index 0000000000..d4fba91694 --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-7fa44b92f42baec7b4d5029123d005bf8e6ece19 @@ -0,0 +1,1024 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + explast { + tableconstructor { + fieldlist { + firstField { + } + fields { + field { + exprassign { + key { + tableconstructor { + } + } + value { + } + } + } + sep { + } + } + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + nil: 25344 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + explast { + tableconstructor { + fieldlist { + firstField { + } + fields { + field { + exprassign { + key { + tableconstructor { + } + } + value { + } + } + } + sep { + } + } + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + nil: 25344 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + list { + varlist { + var { + } + } + explist { + explast { + tableconstructor { + fieldlist { + firstField { + } + fields { + field { + exprassign { + key { + tableconstructor { + fieldlist { + firstField { + } + lastSep { + comma: 0 + } + } + } + } + value { + } + } + } + sep { + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-81c222fd009c8604a860ab967143637f94276d68 b/test/static/corpus/luaL_loadbuffer/timeout-81c222fd009c8604a860ab967143637f94276d68 new file mode 100644 index 0000000000..f6c92c9e1a --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-81c222fd009c8604a860ab967143637f94276d68 @@ -0,0 +1,859 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + ifstat { + condition { + } + first { + chunk { + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + stat { + semicolon: true + } + stat { + semicolon: true + } + stat { + semicolon: false + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + ifstat { + condition { + } + first { + chunk { + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + parlist { + } + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-8a7111c13961d300ba0d55fd9411e9a0f7b1b606 b/test/static/corpus/luaL_loadbuffer/timeout-8a7111c13961d300ba0d55fd9411e9a0f7b1b606 new file mode 100644 index 0000000000..2bc7dbc54f --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-8a7111c13961d300ba0d55fd9411e9a0f7b1b606 @@ -0,0 +1,472 @@ +chunk { + stat { + whilecycle { + condition { + number: 0 + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + binary { + leftexp { + } + binop { + or: 4 + } + rightexp { + } + } + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + binary { + leftexp { + } + binop { + or: 4 + } + rightexp { + } + } + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + number: 0 + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + binary { + leftexp { + } + binop { + or: 4 + } + rightexp { + } + } + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + false: 10240 + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + binary { + leftexp { + } + binop { + or: 4 + } + rightexp { + } + } + } + } + } + fields { + field { + exprassign { + key { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + value { + unary { + unop { + length: 4 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 256 + } + } + } + } + } + } + } + value { + unary { + unop { + not: 3 + } + exp { + tableconstructor { + } + } + } + } + } + } + sep { + comma: 4 + } + } + fields { + field { + } + sep { + semicolon: 16 + } + } + } + } + } + doblock { + block { + chunk { + stat { + localnames { + namelist { + firstname { + name: "" + num: 0 + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + laststat { + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-a0aa27253eafb4ab8c975ad981bdc013d85b8c21 b/test/static/corpus/luaL_loadbuffer/timeout-a0aa27253eafb4ab8c975ad981bdc013d85b8c21 new file mode 100644 index 0000000000..faf6891d2b --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-a0aa27253eafb4ab8c975ad981bdc013d85b8c21 @@ -0,0 +1,480 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + expressions { + } + expressions { + function { + body { + block { + chunk { + } + } + } + } + } + expressions { + function { + body { + block { + chunk { + } + } + } + } + } + expressions { + function { + body { + parlist { + namelist { + namelist { + firstname { + name: "" + num: 0 + } + } + ellipsis: "coroutine.running" + } + } + block { + chunk { + stat { + semicolon: true + } + } + } + } + } + } + explast { + } + } + } + } + stat { + semicolon: true + } + stat { + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + expressions { + } + expressions { + function { + body { + block { + chunk { + } + } + } + } + } + expressions { + function { + body { + block { + chunk { + } + } + } + } + } + expressions { + function { + body { + parlist { + namelist { + namelist { + firstname { + name: "" + num: 0 + } + } + ellipsis: "coroutine.running" + } + } + block { + chunk { + stat { + semicolon: true + } + } + } + } + } + } + explast { + } + } + } + } + stat { + semicolon: true + } + stat { + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + } + } + } + } + semicolon: false + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: false + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + } + } + } + } + } + } + } + } + } + } + semicolon: false + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: false + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-a383120b323bf8da86fa78919f1f2999154c581e b/test/static/corpus/luaL_loadbuffer/timeout-a383120b323bf8da86fa78919f1f2999154c581e new file mode 100644 index 0000000000..48d3fdbf35 --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-a383120b323bf8da86fa78919f1f2999154c581e @@ -0,0 +1,978 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: false + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + true: 25344 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 0 + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + func { + name { + firstname { + name: "" + num: 0 + } + } + body { + block { + chunk { + } + } + } + } + semicolon: false + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 0 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + forcyclename { + name { + name: "" + num: 0 + } + startexp { + } + stopexp { + true: 1526726656 + } + doblock { + block { + chunk { + } + } + } + } + } + laststat { + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-b02e909f524a1990690994e84d6dbc93581c0557 b/test/static/corpus/luaL_loadbuffer/timeout-b02e909f524a1990690994e84d6dbc93581c0557 new file mode 100644 index 0000000000..a934890480 --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-b02e909f524a1990690994e84d6dbc93581c0557 @@ -0,0 +1,999 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + false: 7 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + func { + name { + firstname { + name: "" + num: 0 + } + } + body { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + false: 7 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + func { + name { + firstname { + name: "" + num: 0 + } + } + body { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + localnames { + namelist { + firstname { + name: "" + num: 0 + } + } + explist { + explast { + function { + body { + parlist { + ellipsis: "!" + } + block { + chunk { + } + } + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + func { + name { + firstname { + name: "" + num: 0 + } + } + body { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + } + lastSep { + comma: 134217729 + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + localnames { + namelist { + firstname { + name: "" + num: 0 + } + } + explist { + explast { + function { + body { + parlist { + ellipsis: "!" + } + block { + chunk { + } + } + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + func { + name { + firstname { + name: "" + num: 0 + } + } + body { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + } + lastSep { + comma: 134217729 + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + semicolon: true + } + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + } + lastSep { + comma: 134217729 + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + stat { + func { + name { + firstname { + name: "*********************************************************************************************" + num: 0 + } + } + body { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + tableconstructor { + fieldlist { + firstField { + } + lastSep { + comma: 134217729 + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-b0e5846adaa872aedb8c142620b3a7775c785ea3 b/test/static/corpus/luaL_loadbuffer/timeout-b0e5846adaa872aedb8c142620b3a7775c785ea3 new file mode 100644 index 0000000000..b183355ae8 --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-b0e5846adaa872aedb8c142620b3a7775c785ea3 @@ -0,0 +1,895 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + namedassign { + name { + name: "" + num: 0 + } + value { + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + } + stat { + semicolon: true + } + stat { + } + stat { + } + stat { + block { + block { + chunk { + } + } + } + } + stat { + } + stat { + } + stat { + whilecycle { + condition { + tableconstructor { + } + } + doblock { + block { + chunk { + } + } + } + } + semicolon: false + } + stat { + } + stat { + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + list { + varlist { + var { + name { + name: "select" + num: 0 + } + } + } + explist { + explast { + } + } + } + } + stat { + semicolon: true + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + } + stat { + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + } + value { + prefixexp { + } + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + } + value { + prefixexp { + } + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + name { + name: "select" + num: 0 + } + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + } + value { + prefixexp { + } + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + } + value { + prefixexp { + } + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + list { + varlist { + var { + } + } + explist { + expressions { + tableconstructor { + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + } + value { + prefixexp { + } + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + list { + varlist { + var { + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + exprassign { + key { + } + value { + prefixexp { + } + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + } + stat { + localnames { + namelist { + firstname { + name: "" + num: 0 + } + } + } + } + stat { + } + stat { + } + stat { + } + stat { + } + stat { + } + stat { + semicolon: true + } + stat { + } + stat { + } + stat { + semicolon: false + } + stat { + } + stat { + semicolon: true + } + stat { + } + stat { + semicolon: true + } + stat { + } + stat { + block { + block { + chunk { + stat { + list { + varlist { + var { + indexname { + prefixexp { + } + Name: "\000\000\000\000" + } + } + } + explist { + expressions { + tableconstructor { + fieldlist { + firstField { + namedassign { + name { + name: "." + num: 0 + } + value { + } + } + } + } + } + } + explast { + binary { + leftexp { + prefixexp { + exp { + ellipsis: "\326" + } + } + } + binop { + } + rightexp { + } + } + } + } + } + } + } + } + } + } + stat { + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-c0e43bf73dbe687a743986309beb9683ccac018e b/test/static/corpus/luaL_loadbuffer/timeout-c0e43bf73dbe687a743986309beb9683ccac018e new file mode 100644 index 0000000000..472f4b2b4b --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-c0e43bf73dbe687a743986309beb9683ccac018e @@ -0,0 +1,665 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: false + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + semicolon: true + } + stat { + whilecycle { + condition { + true: 25344 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + localfunc { + name { + name: "" + num: 0 + } + funcbody { + block { + chunk { + stat { + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 254 + } + } + } + } + } + } + } + } + } + } + } + stat { + func { + name { + firstname { + name: "" + num: 0 + } + } + body { + block { + chunk { + } + } + } + } + semicolon: false + } + } + } + } + } + } + stat { + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + laststat { + break: 0 + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + forcyclename { + name { + name: "" + num: 0 + } + startexp { + } + stopexp { + true: 1526726656 + } + doblock { + block { + chunk { + } + } + } + } + } + laststat { + semicolon: true + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } +} diff --git a/test/static/corpus/luaL_loadbuffer/timeout-c9a028495b4422da26c910b64f0249a69668de48 b/test/static/corpus/luaL_loadbuffer/timeout-c9a028495b4422da26c910b64f0249a69668de48 new file mode 100644 index 0000000000..7db71e5c5c --- /dev/null +++ b/test/static/corpus/luaL_loadbuffer/timeout-c9a028495b4422da26c910b64f0249a69668de48 @@ -0,0 +1,768 @@ +chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + explast { + tableconstructor { + fieldlist { + firstField { + } + fields { + field { + exprassign { + key { + tableconstructor { + fieldlist { + firstField { + } + lastSep { + comma: 0 + } + } + } + } + value { + } + } + } + sep { + } + } + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + nil: 25344 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + function { + body { + block { + chunk { + } + } + } + } + } + doblock { + block { + chunk { + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + stat { + list { + varlist { + var { + } + } + explist { + explast { + tableconstructor { + fieldlist { + firstField { + } + fields { + field { + exprassign { + key { + tableconstructor { + fieldlist { + firstField { + } + lastSep { + comma: 0 + } + } + } + } + value { + } + } + } + sep { + } + } + } + } + } + } + } + semicolon: true + } + stat { + whilecycle { + condition { + nil: 25344 + } + doblock { + block { + chunk { + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + repeatcycle { + block { + chunk { + } + } + condition { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + whilecycle { + condition { + } + doblock { + block { + chunk { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + stat { + repeatcycle { + block { + chunk { + } + } + condition { + } + } + } +} -- GitLab