diff options
Diffstat (limited to 'backendC/CleanCompilerSources/set_scope_numbers.c')
-rw-r--r-- | backendC/CleanCompilerSources/set_scope_numbers.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/backendC/CleanCompilerSources/set_scope_numbers.c b/backendC/CleanCompilerSources/set_scope_numbers.c index 9cb4e3f..351d022 100644 --- a/backendC/CleanCompilerSources/set_scope_numbers.c +++ b/backendC/CleanCompilerSources/set_scope_numbers.c @@ -39,8 +39,8 @@ static void set_root_scope_numbers (NodeP node_p,int local_scope) int new_local_scope; ArgP arg_p; - node_p->node_if_scope=local_scope; - + node_p->node_if_scope=scope; + new_local_scope=scope+2; scope+=3; @@ -61,33 +61,48 @@ static void set_root_scope_numbers (NodeP node_p,int local_scope) case SwitchNode: { ArgP arg_p; + int old_scope; + + old_scope=scope; for_l (arg_p,node_p->node_arguments,arg_next){ - NodeP node; - - node=arg_p->arg_node; - if (node->node_kind==CaseNode){ + NodeP node_p; + + scope=old_scope; + + node_p=arg_p->arg_node; + if (node_p->node_kind==CaseNode){ NodeP case_alt_node_p; - case_alt_node_p=node->node_arguments->arg_node; - /* Cedewarrior bug if (case_alt_node_p->node_kind==PushNode){ */ - if (node->node_arguments->arg_node->node_kind==PushNode){ + case_alt_node_p=node_p->node_arguments->arg_node; + /* Cedewarrior bug if (case_alt_node_p->node_kind==PushNode) */ + if (node_p->node_arguments->arg_node->node_kind==PushNode) set_root_scope_numbers (case_alt_node_p->node_arguments->arg_next->arg_node, local_scope); - } else - set_root_scope_numbers (node->node_arguments->arg_node, local_scope); - } else if (node->node_kind==DefaultNode){ - set_root_scope_numbers (node->node_arguments->arg_node, local_scope); + set_root_scope_numbers (node_p->node_arguments->arg_node, local_scope); + } else if (node_p->node_kind==DefaultNode){ + set_root_scope_numbers (node_p->node_arguments->arg_node, local_scope); } else ErrorInCompiler ("set_scope_numbers.c", "set_root_scope_numbers", ""); + + set_node_id_scope_numbers (node_p->node_node_defs,local_scope); } } break; case GuardNode: + { + int old_scope; + + old_scope=scope; + set_root_scope_numbers (node_p->node_arguments->arg_node,local_scope); + + scope=old_scope; + set_root_scope_numbers (node_p->node_arguments->arg_next->arg_node,local_scope); set_node_id_scope_numbers (node_p->node_node_defs,local_scope); break; + } } } |