aboutsummaryrefslogtreecommitdiff
path: root/backendC/CleanCompilerSources/set_scope_numbers.c
diff options
context:
space:
mode:
Diffstat (limited to 'backendC/CleanCompilerSources/set_scope_numbers.c')
-rw-r--r--backendC/CleanCompilerSources/set_scope_numbers.c41
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;
+ }
}
}