diff --git a/test/fuzz/luaL_loadbuffer/luaL_loadbuffer_fuzzer.cc b/test/fuzz/luaL_loadbuffer/luaL_loadbuffer_fuzzer.cc index 94ebd5bad94970a49fe104ece11b41e34cba6f13..c3a467d22161d9494f9399abaced757033e8bb53 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 70dc0617e4ed716012289292135262d8619b57f8..05c27ff701165c5c381ca31d0f4b539bd1f8a130 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 97812c919a71924fab90af755a97884cf7ca91df..bb946f1062c69d56ba014904070630284ff8199e 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 0000000000000000000000000000000000000000..de5ef527326687a480cad723b6773a6bfc036ba8 --- /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 0000000000000000000000000000000000000000..31df60b8020f22ca82cdaffbf9d2b27239c9992e --- /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 0000000000000000000000000000000000000000..4e507d55cea39464cf6edf81337fc9c2aba32f35 --- /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 0000000000000000000000000000000000000000..d24f50ad02a36c6c26ea9c0d923b6d7d16ee7d79 --- /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 0000000000000000000000000000000000000000..d4fba91694aba37c6853b7c610b1c3990f2176c5 --- /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 0000000000000000000000000000000000000000..f6c92c9e1a3c10966bda556ca8dd2dd0fde77bd6 --- /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 0000000000000000000000000000000000000000..2bc7dbc54fea77e53ea5093cd73c2a6a23303ee4 --- /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 0000000000000000000000000000000000000000..faf6891d2b0a5bce335e07244b3d5169279c9c4c --- /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 0000000000000000000000000000000000000000..48d3fdbf35b4387a605bf16e2955e855b5b5f76d --- /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 0000000000000000000000000000000000000000..a9348904805c88562c66e19656dde3c070f8eb3a --- /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 0000000000000000000000000000000000000000..b183355ae816908393a8fac7c0effeac58207317 --- /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 0000000000000000000000000000000000000000..472f4b2b4b955b2563ca9f9fda343dede1711d85 --- /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 0000000000000000000000000000000000000000..7db71e5c5c5b18b805b03feb29491c881fdb3c57 --- /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 { + } + } + } +}