fix switch variable propagation
This commit is contained in:
parent
8d886570aa
commit
3c4ad5cf0b
@ -2937,6 +2937,7 @@ void decompiler::process_stmt_switch(const gsc::context_ptr& ctx, const gsc::stm
|
|||||||
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
||||||
{
|
{
|
||||||
std::vector<gsc::context*> childs;
|
std::vector<gsc::context*> childs;
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
for(auto& entry : stmt->stmts)
|
for(auto& entry : stmt->stmts)
|
||||||
{
|
{
|
||||||
@ -2954,6 +2955,7 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
||||||
{
|
{
|
||||||
|
has_default = true;
|
||||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||||
|
|
||||||
@ -2966,7 +2968,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->append(childs);
|
if(has_default)
|
||||||
|
{
|
||||||
|
ctx->append(childs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||||
|
@ -2937,6 +2937,7 @@ void decompiler::process_stmt_switch(const gsc::context_ptr& ctx, const gsc::stm
|
|||||||
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
||||||
{
|
{
|
||||||
std::vector<gsc::context*> childs;
|
std::vector<gsc::context*> childs;
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
for(auto& entry : stmt->stmts)
|
for(auto& entry : stmt->stmts)
|
||||||
{
|
{
|
||||||
@ -2954,6 +2955,7 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
||||||
{
|
{
|
||||||
|
has_default = true;
|
||||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||||
|
|
||||||
@ -2966,7 +2968,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->append(childs);
|
if(has_default)
|
||||||
|
{
|
||||||
|
ctx->append(childs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||||
|
@ -2931,6 +2931,7 @@ void decompiler::process_stmt_switch(const gsc::context_ptr& ctx, const gsc::stm
|
|||||||
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
||||||
{
|
{
|
||||||
std::vector<gsc::context*> childs;
|
std::vector<gsc::context*> childs;
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
for(auto& entry : stmt->stmts)
|
for(auto& entry : stmt->stmts)
|
||||||
{
|
{
|
||||||
@ -2948,6 +2949,7 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
||||||
{
|
{
|
||||||
|
has_default = true;
|
||||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||||
|
|
||||||
@ -2960,7 +2962,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->append(childs);
|
if(has_default)
|
||||||
|
{
|
||||||
|
ctx->append(childs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||||
|
@ -2931,6 +2931,7 @@ void decompiler::process_stmt_switch(const gsc::context_ptr& ctx, const gsc::stm
|
|||||||
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
||||||
{
|
{
|
||||||
std::vector<gsc::context*> childs;
|
std::vector<gsc::context*> childs;
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
for(auto& entry : stmt->stmts)
|
for(auto& entry : stmt->stmts)
|
||||||
{
|
{
|
||||||
@ -2948,6 +2949,7 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
||||||
{
|
{
|
||||||
|
has_default = true;
|
||||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||||
|
|
||||||
@ -2960,7 +2962,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->append(childs);
|
if(has_default)
|
||||||
|
{
|
||||||
|
ctx->append(childs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||||
|
@ -2931,6 +2931,7 @@ void decompiler::process_stmt_switch(const gsc::context_ptr& ctx, const gsc::stm
|
|||||||
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
||||||
{
|
{
|
||||||
std::vector<gsc::context*> childs;
|
std::vector<gsc::context*> childs;
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
for(auto& entry : stmt->stmts)
|
for(auto& entry : stmt->stmts)
|
||||||
{
|
{
|
||||||
@ -2948,6 +2949,7 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
||||||
{
|
{
|
||||||
|
has_default = true;
|
||||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||||
|
|
||||||
@ -2960,7 +2962,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->append(childs);
|
if(has_default)
|
||||||
|
{
|
||||||
|
ctx->append(childs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||||
|
@ -2937,6 +2937,7 @@ void decompiler::process_stmt_switch(const gsc::context_ptr& ctx, const gsc::stm
|
|||||||
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
||||||
{
|
{
|
||||||
std::vector<gsc::context*> childs;
|
std::vector<gsc::context*> childs;
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
for(auto& entry : stmt->stmts)
|
for(auto& entry : stmt->stmts)
|
||||||
{
|
{
|
||||||
@ -2954,6 +2955,7 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
||||||
{
|
{
|
||||||
|
has_default = true;
|
||||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||||
|
|
||||||
@ -2966,7 +2968,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->append(childs);
|
if(has_default)
|
||||||
|
{
|
||||||
|
ctx->append(childs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||||
|
@ -2946,6 +2946,7 @@ void decompiler::process_stmt_switch(const gsc::context_ptr& ctx, const gsc::stm
|
|||||||
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt_list_ptr& stmt)
|
||||||
{
|
{
|
||||||
std::vector<gsc::context*> childs;
|
std::vector<gsc::context*> childs;
|
||||||
|
bool has_default = false;
|
||||||
|
|
||||||
for(auto& entry : stmt->stmts)
|
for(auto& entry : stmt->stmts)
|
||||||
{
|
{
|
||||||
@ -2963,6 +2964,7 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
else if(entry.as_node->type == gsc::node_t::stmt_default)
|
||||||
{
|
{
|
||||||
|
has_default = true;
|
||||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||||
|
|
||||||
@ -2975,7 +2977,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx->append(childs);
|
if(has_default)
|
||||||
|
{
|
||||||
|
ctx->append(childs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||||
|
Loading…
Reference in New Issue
Block a user