aboutsummaryrefslogtreecommitdiff
path: root/backendC/CleanCompilerSources/optimisations.c
diff options
context:
space:
mode:
Diffstat (limited to 'backendC/CleanCompilerSources/optimisations.c')
-rw-r--r--backendC/CleanCompilerSources/optimisations.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/backendC/CleanCompilerSources/optimisations.c b/backendC/CleanCompilerSources/optimisations.c
index e4bf8ea..9f210d6 100644
--- a/backendC/CleanCompilerSources/optimisations.c
+++ b/backendC/CleanCompilerSources/optimisations.c
@@ -1421,6 +1421,7 @@ static char *create_arguments_for_local_function (NodeP node_p,ArgS ***arg_h,Arg
}
}
#endif
+
if (arg_node->node_kind==NodeIdNode && (arg_node->node_node_id->nid_mark & NID_LIFTED_BY_OPTIMISE) && arg_node->node_node_id->nid_forward_node_id!=NULL){
arg_node_id=arg_node->node_node_id->nid_forward_node_id;
--arg_node_id->nid_refcount;
@@ -3283,8 +3284,15 @@ static void ExamineSymbolApplication (struct node *node)
symbol=node->node_symbol;
- if (symbol->symb_kind!=definition)
+ if (symbol->symb_kind!=definition){
+ if (symbol->symb_kind==cons_symb && symbol->symb_head_strictness==4){
+ if (node->node_arity<2)
+ symbol->symb_unboxed_cons_sdef_p->sdef_mark |= SDEF_USED_CURRIED_MASK;
+ else if (IsLazyState (node->node_state))
+ symbol->symb_unboxed_cons_sdef_p->sdef_mark |= SDEF_USED_LAZILY_MASK;
+ }
return;
+ }
sdef=symbol->symb_def;