From d976434e385e4c3650839dfcc564e88cda605e88 Mon Sep 17 00:00:00 2001 From: ineed bots Date: Sun, 17 Sep 2023 01:00:44 -0600 Subject: [PATCH] Verified --- src/utils/misc.cpp | 116 +++++++++++++++++++++++++++++++-------------- 1 file changed, 80 insertions(+), 36 deletions(-) diff --git a/src/utils/misc.cpp b/src/utils/misc.cpp index d8e84e4..39dfa7c 100644 --- a/src/utils/misc.cpp +++ b/src/utils/misc.cpp @@ -312,14 +312,6 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val switch (val.node[0].type) { - case game::ENUM_local_variable: - case game::ENUM_prof_begin: - case game::ENUM_prof_end: - case game::ENUM_animation: - answer["name"] = game::SL_ConvertToString(val.node[1].stringValue, inst); - answer["sourcePos"] = val.node[2].sourcePosValue; - break; - case game::ENUM_array_variable: answer["expr"] = print_statement_ast(inst, val.node[1]); answer["index"] = print_statement_ast(inst, val.node[2]); @@ -343,10 +335,12 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val case game::ENUM_far_function: answer["filename"] = game::SL_ConvertToString(val.node[1].stringValue, inst); answer["threadName"] = game::SL_ConvertToString(val.node[2].stringValue, inst); + answer["sourcePos"] = val.node[3].sourcePosValue; break; case game::ENUM_local_function: answer["threadName"] = game::SL_ConvertToString(val.node[1].stringValue, inst); + answer["sourcePos"] = val.node[2].sourcePosValue; break; case game::ENUM_function: @@ -503,7 +497,6 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val answer["sourcePos"] = val.node[3].sourcePosValue; { - auto ifStatBlock = val.node[4].block; ifStatBlock = ifStatBlock; } @@ -517,7 +510,6 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val answer["elseSourcePos"] = val.node[5].sourcePosValue; { - auto ifBlock = val.node[6].block; auto elseBlock = val.node[7].block; ifBlock = ifBlock; @@ -560,6 +552,7 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val answer["expr2"] = print_statement_ast(inst, val.node[2]); answer["expr1SourcePos"] = val.node[3].sourcePosValue; answer["expr2SourcePos"] = val.node[4].sourcePosValue; + answer["sourcePos"] = val.node[5].sourcePosValue; break; case game::ENUM_binary: @@ -627,6 +620,64 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val answer["waitSourcePos"] = val.node[4].sourcePosValue; break; + + case game::ENUM_switch: + answer["expr"] = print_statement_ast(inst, val.node[1]); + + answer["stmtlist"] = nlohmann::json::array(); + for (i = 0, node = val.node[2].node->node[1].node; + node; + node = node[1].node, i++) + { + answer["stmtlist"][i] = print_statement_ast(inst, *node); + } + + answer["sourcePos"] = val.node[3].sourcePosValue; + break; + + case game::ENUM_default: + answer["sourcePos"] = val.node[1].sourcePosValue; + + { + auto breakBlock = val.node[2].block; + breakBlock = breakBlock; + } + break; + + case game::ENUM_case: + answer["expr"] = print_statement_ast(inst, val.node[1]); + answer["sourcePos"] = val.node[2].sourcePosValue; + + { + auto caseBlock = val.node[3].block; + caseBlock = caseBlock; + } + break; + + case game::ENUM_waittillmatch: + answer["obj"] = print_statement_ast(inst, val.node[1]); + + answer["exprlist"] = nlohmann::json::array(); + for (i = 0, node = val.node[2].node->node[1].node; + node; + node = node[1].node, i++) + { + answer["exprlist"][i]["expr"] = print_statement_ast(inst, *node->node); + answer["exprlist"][i]["sourcePos"] = node->node[1].sourcePosValue; + } + + answer["sourcePos"] = val.node[3].sourcePosValue; + answer["waitSourcePos"] = val.node[4].sourcePosValue; + break; + + case game::ENUM_local_variable: + case game::ENUM_prof_begin: + case game::ENUM_prof_end: + case game::ENUM_animation: + answer["name"] = game::SL_ConvertToString(val.node[1].stringValue, inst); + answer["sourcePos"] = val.node[2].sourcePosValue; + break; + case game::ENUM_begin_developer_thread: case game::ENUM_end_developer_thread: case game::ENUM_undefined: @@ -642,6 +693,7 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val case game::ENUM_break: case game::ENUM_continue: case game::ENUM_animtree: + case game::ENUM_breakpoint: answer["sourcePos"] = val.node[1].sourcePosValue; break; @@ -650,6 +702,7 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val case game::ENUM_call_expression: case game::ENUM_call_expression_statement: case game::ENUM_expression: + case game::ENUM_statement: answer["expr"] = print_statement_ast(inst, val.node[1]); break; @@ -666,32 +719,23 @@ nlohmann::json print_statement_ast(game::scriptInstance_t inst, game::sval_u val break; case game::ENUM_NOP: - case game::ENUM_program: - case game::ENUM_unknown_variable: - case game::ENUM_local_variable_frozen: - case game::ENUM_unknown_field: - case game::ENUM_field_variable_frozen: - case game::ENUM_self_frozen: - case game::ENUM_include: - case game::ENUM_self_field: - case game::ENUM_object: - case game::ENUM_precachetree: - case game::ENUM_local: - case game::ENUM_statement: - case game::ENUM_bad_expression: - case game::ENUM_bad_statement: - case game::ENUM_argument: - case game::ENUM_thread_object: - case game::ENUM_vector: - case game::ENUM_breakon: - case game::ENUM_breakpoint: - - case game::ENUM_waittillmatch: - - case game::ENUM_switch: - case game::ENUM_case: - case game::ENUM_default: - + case game::ENUM_program: // unk + case game::ENUM_unknown_variable: // unk + case game::ENUM_local_variable_frozen: // unk, debugger? + case game::ENUM_unknown_field: // unk + case game::ENUM_field_variable_frozen: // unk, debugger? + case game::ENUM_self_frozen: // unk, debugger? + case game::ENUM_include: // handled + case game::ENUM_self_field: // debugger + case game::ENUM_object: // debugger + case game::ENUM_precachetree: // unk + case game::ENUM_local: // unk + case game::ENUM_bad_expression: // unk + case game::ENUM_bad_statement: // unk + case game::ENUM_argument: // unk + case game::ENUM_thread_object: // unk + case game::ENUM_vector: // unk + case game::ENUM_breakon: // debugger unk 2 vals 1 pos default: break; }