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)
|
||||
{
|
||||
std::vector<gsc::context*> childs;
|
||||
bool has_default = false;
|
||||
|
||||
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)
|
||||
{
|
||||
has_default = true;
|
||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||
|
||||
@ -2966,7 +2968,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
||||
}
|
||||
}
|
||||
|
||||
if(has_default)
|
||||
{
|
||||
ctx->append(childs);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
std::vector<gsc::context*> childs;
|
||||
bool has_default = false;
|
||||
|
||||
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)
|
||||
{
|
||||
has_default = true;
|
||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||
|
||||
@ -2966,7 +2968,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
||||
}
|
||||
}
|
||||
|
||||
if(has_default)
|
||||
{
|
||||
ctx->append(childs);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
std::vector<gsc::context*> childs;
|
||||
bool has_default = false;
|
||||
|
||||
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)
|
||||
{
|
||||
has_default = true;
|
||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||
|
||||
@ -2960,7 +2962,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
||||
}
|
||||
}
|
||||
|
||||
if(has_default)
|
||||
{
|
||||
ctx->append(childs);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
std::vector<gsc::context*> childs;
|
||||
bool has_default = false;
|
||||
|
||||
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)
|
||||
{
|
||||
has_default = true;
|
||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||
|
||||
@ -2960,7 +2962,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
||||
}
|
||||
}
|
||||
|
||||
if(has_default)
|
||||
{
|
||||
ctx->append(childs);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
std::vector<gsc::context*> childs;
|
||||
bool has_default = false;
|
||||
|
||||
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)
|
||||
{
|
||||
has_default = true;
|
||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||
|
||||
@ -2960,7 +2962,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
||||
}
|
||||
}
|
||||
|
||||
if(has_default)
|
||||
{
|
||||
ctx->append(childs);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
std::vector<gsc::context*> childs;
|
||||
bool has_default = false;
|
||||
|
||||
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)
|
||||
{
|
||||
has_default = true;
|
||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||
|
||||
@ -2966,7 +2968,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
||||
}
|
||||
}
|
||||
|
||||
if(has_default)
|
||||
{
|
||||
ctx->append(childs);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
std::vector<gsc::context*> childs;
|
||||
bool has_default = false;
|
||||
|
||||
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)
|
||||
{
|
||||
has_default = true;
|
||||
entry.as_default->ctx = std::make_unique<gsc::context>();
|
||||
ctx->transfer_decompiler(entry.as_default->ctx);
|
||||
|
||||
@ -2975,7 +2977,10 @@ void decompiler::process_stmt_cases(const gsc::context_ptr& ctx, const gsc::stmt
|
||||
}
|
||||
}
|
||||
|
||||
if(has_default)
|
||||
{
|
||||
ctx->append(childs);
|
||||
}
|
||||
}
|
||||
|
||||
void decompiler::process_stmt_break(const gsc::context_ptr& ctx, const gsc::stmt_break_ptr& stmt)
|
||||
|
Loading…
Reference in New Issue
Block a user