diff options
author | johnvg | 2001-05-15 10:57:47 +0000 |
---|---|---|
committer | johnvg | 2001-05-15 10:57:47 +0000 |
commit | c10c04bc302879a378ef0be7aae6574728e39422 (patch) | |
tree | 38a0f59394046ca5d8dc9400d3f6b533611ea95e /backendC/CleanCompilerSources/optimisations.c | |
parent | *** empty log message *** (diff) |
merged with backend C source code on the mac
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@430 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'backendC/CleanCompilerSources/optimisations.c')
-rw-r--r-- | backendC/CleanCompilerSources/optimisations.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/backendC/CleanCompilerSources/optimisations.c b/backendC/CleanCompilerSources/optimisations.c index bb83056..f0ffede 100644 --- a/backendC/CleanCompilerSources/optimisations.c +++ b/backendC/CleanCompilerSources/optimisations.c @@ -3,6 +3,8 @@ Author: John van Groningen */ +#include "compiledefines.h" +#include "types.t" #include "system.h" #include "syntaxtr.t" #include "comsupport.h" @@ -1549,7 +1551,11 @@ static void optimise_normal_node (Node node) #else if ((BETWEEN (int_denot,real_denot,symbol->symb_kind) || symbol->symb_kind==string_denot +# if STRICT_LISTS + || (BETWEEN (tuple_symb,nil_symb,symbol->symb_kind) && !(symbol->symb_kind==cons_symb && (symbol->symb_head_strictness || symbol->symb_tail_strictness))) +# else || BETWEEN (tuple_symb,nil_symb,symbol->symb_kind) +# endif ) && node->node_state.state_kind==OnA){ #endif node->node_state.state_kind=StrictOnA; @@ -1903,6 +1909,10 @@ static Bool try_insert_constructor_update_node (NodeP node,FreeUniqueNodeIdsP *f break; } case cons_symb: +#if STRICT_LISTS + if ((node->node_symbol->symb_head_strictness || node->node_symbol->symb_tail_strictness) && IsLazyStateKind (node->node_state.state_kind)) + return False; +#endif return insert_unique_fill_node (node,f_node_ids,2,0); case tuple_symb: return insert_unique_fill_node (node,f_node_ids,node->node_arity,0); @@ -3394,7 +3404,7 @@ static ImpRuleS **OptimiseRule (ImpRuleS *rule) new_rules=new_rule->rule_next; alt=new_rule->rule_alts; - DetermineStatesOfRootNodeAndDefs (alt->alt_rhs_root,alt->alt_rhs_defs,alt->alt_lhs_root->node_state,0); + DetermineStatesOfRootNodeAndDefs (alt->alt_rhs_root,&alt->alt_rhs_defs,alt->alt_lhs_root->node_state,0); ReorderNodeDefinitionsAndDetermineUsedEntries (&alt->alt_rhs_defs,alt->alt_rhs_root); new_rule->rule_next=rule->rule_next; |