diff options
author | johnvg | 2002-02-08 14:11:40 +0000 |
---|---|---|
committer | johnvg | 2002-02-08 14:11:40 +0000 |
commit | a1c46ae2dd18252d57a66baf6217c208b9b93070 (patch) | |
tree | cbb9e9f9446c665921b0212c39a997726f11dda5 | |
parent | export and extend PrintState, add File parameter to PrintRules (diff) |
fix bug in scope numbers
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1011 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r-- | backendC/CleanCompilerSources/set_scope_numbers.c | 41 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/statesgen.c | 39 |
2 files changed, 53 insertions, 27 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; + } } } diff --git a/backendC/CleanCompilerSources/statesgen.c b/backendC/CleanCompilerSources/statesgen.c index 1c13dcf..8837f33 100644 --- a/backendC/CleanCompilerSources/statesgen.c +++ b/backendC/CleanCompilerSources/statesgen.c @@ -1530,6 +1530,11 @@ static Bool AdjustState (StateS *old_state_p, StateS newstate) return False; } +#if 0 +# include "dbprint.h" +extern File rules_file; +#endif + static void DetermineStateOfThenOrElse (Args t_or_e_args, NodeDefs *t_or_e_defs, StateS demstate,int local_scope) { Node node; @@ -1542,8 +1547,12 @@ static void DetermineStateOfThenOrElse (Args t_or_e_args, NodeDefs *t_or_e_defs, node_id=node->node_node_id; if (node_id->nid_ref_count_copy>=0) --node_id->nid_ref_count_copy__; - } else + } else { +#if 0 + FPrintF (rules_file,"DetermineStateOfThenOrElse %d\n",local_scope); +#endif DetermineStatesOfRootNodeAndDefs (node,t_or_e_defs,demstate, local_scope); + } AdjustState (&t_or_e_args->arg_state,demstate); } @@ -1554,10 +1563,6 @@ static void DecrementRefCountCopy (NodeId nid) --nid->nid_ref_count_copy__; } -#if 0 -# include "dbprint.h" -#endif - static Bool AdjustStateOfSharedNode (NodeId nid, StateS demstate, int local_scope) { /* @@ -1581,9 +1586,9 @@ static Bool AdjustStateOfSharedNode (NodeId nid, StateS demstate, int local_scop node_id_scope=-node_id_scope; #if 0 - printf ("AdjustStateOfSharedNode "); - DPrintNodeId (nid,StdOut); - printf (" %d %d\n",node_id_scope,local_scope); + FPrintF (rules_file,"AdjustStateOfSharedNode "); + DPrintNodeId (nid,rules_file); + FPrintF (rules_file," %d %d\n",node_id_scope,local_scope); #endif if (node_id_scope>=local_scope){ @@ -1845,9 +1850,9 @@ static Bool NodeInAStrictContext (Node node,StateS demanded_state,int local_scop node_id_scope=-node_id_scope; #if 0 - printf ("NodeInAStrictContext select_symb "); - DPrintNodeId (node_id,StdOut); - printf (" %d %d\n",node_id_scope,local_scope); + FPrintF (rules_file,"NodeInAStrictContext select_symb %d ",node->node_arity); + DPrintNodeId (node_id,rules_file); + FPrintF (rules_file," %d %d\n",node_id_scope,local_scope); #endif if (node_id_scope>=local_scope){ if (IsSimpleState (argnode->node_state)){ @@ -1873,6 +1878,11 @@ static Bool NodeInAStrictContext (Node node,StateS demanded_state,int local_scop AdjustState (&argnode->node_state.state_tuple_arguments[node->node_arity-1],demanded_state); } } + +#if 0 + PrintState (argnode->node_state,rules_file); + FPrintF (rules_file,"\n"); +#endif } } node->node_state = demanded_state; @@ -3594,7 +3604,7 @@ static NodeDefs *CollectSharedNodeIdsInRootNode (Node* node_p,NodeId parent_node for_l (arg_p,root_node->node_arguments,arg_next){ NodeP node; - + node=arg_p->arg_node; if (node->node_kind==CaseNode){ NodeP case_alt_node_p; @@ -3631,6 +3641,7 @@ static NodeDefs *CollectSharedNodeIdsInRootNode (Node* node_p,NodeId parent_node break; } default: + scope=1; last=CollectSharedNodeIdsInNode (node_p,parent_node_id,last); break; @@ -3644,9 +3655,9 @@ static void CollectSharedAndAnnotatedNodesInRhs (NodeS **root_p,NodeDefS **defs_ { NodeDefS **last; NodeP root_node; - +/* scope=1; - +*/ NodeIdCount=1; NodeIdStackTop = (NodeId)-1; |