diff options
Diffstat (limited to 'backendC/CleanCompilerSources')
-rw-r--r-- | backendC/CleanCompilerSources/codegen1.c | 15 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/codegen2.c | 11 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/instructions.c | 5 |
3 files changed, 21 insertions, 10 deletions
diff --git a/backendC/CleanCompilerSources/codegen1.c b/backendC/CleanCompilerSources/codegen1.c index b96bed6..fc0a66e 100644 --- a/backendC/CleanCompilerSources/codegen1.c +++ b/backendC/CleanCompilerSources/codegen1.c @@ -1179,12 +1179,17 @@ void GenerateCodeForLazyUnboxedRecordListFunctions (void) type_node_arguments_p=fun_def->sdef_rule_type->rule_type_rule->type_alt_lhs->type_node_arguments; tail_strict=type_node_arguments_p->type_arg_next->type_arg_node->type_node_symbol->symb_tail_strictness; - unboxed_record_cons_lab.lab_mod=ExportLocalLabels ? CurrentModule : NULL; + if (ExportLocalLabels){ + unboxed_record_cons_lab.lab_mod=CurrentModule; + unboxed_record_cons_lab.lab_symbol=type_node_arguments_p->type_arg_node->type_node_symbol->symb_def; + unboxed_record_cons_lab.lab_issymbol=True; + } else { + unboxed_record_cons_lab.lab_name=type_node_arguments_p->type_arg_node->type_node_symbol->symb_def->sdef_ident->ident_name; + unboxed_record_cons_lab.lab_issymbol=False; + } unboxed_record_cons_lab.lab_pref=tail_strict ? "r_Cons#!" : "r_Cons#"; - unboxed_record_cons_lab.lab_issymbol=False; - unboxed_record_cons_lab.lab_name=type_node_arguments_p->type_arg_node->type_node_symbol->symb_def->sdef_ident->ident_name; unboxed_record_cons_lab.lab_post='\0'; - + GenFillR (&unboxed_record_cons_lab,a_size,b_size,a_size,0,0,ReleaseAndFill,True); GenRtn (1,0,OnAState); @@ -2386,8 +2391,6 @@ SymbDef create_match_function (SymbolP constructor_symbol,int constructor_arity, #if STRICT_LISTS if (constructor_symbol->symb_kind==cons_symb && (constructor_symbol->symb_head_strictness>1 || constructor_symbol->symb_tail_strictness)){ - constructor_symbol->symb_def->sdef_constructor->cl_state_p; - if (constructor_symbol->symb_head_strictness>1){ if (constructor_symbol->symb_head_strictness==4) head_and_tail_states[0]=*constructor_symbol->symb_state_p; diff --git a/backendC/CleanCompilerSources/codegen2.c b/backendC/CleanCompilerSources/codegen2.c index 2b1cb6a..f8d0d49 100644 --- a/backendC/CleanCompilerSources/codegen2.c +++ b/backendC/CleanCompilerSources/codegen2.c @@ -2879,10 +2879,15 @@ LabDef *unboxed_cons_label (SymbolP cons_symbol_p) if (cons_symbol_p->symb_unboxed_cons_state_p->state_type==SimpleState && BETWEEN (IntObj,FileObj,cons_symbol_p->symb_unboxed_cons_state_p->state_object)) return &unboxed_cons_labels[cons_symbol_p->symb_unboxed_cons_state_p->state_object-IntObj][cons_symbol_p->symb_tail_strictness]; else if (cons_symbol_p->symb_unboxed_cons_state_p->state_type==RecordState){ - unboxed_record_cons_lab.lab_mod=ExportLocalLabels ? CurrentModule : NULL; + if (ExportLocalLabels){ + unboxed_record_cons_lab.lab_mod=CurrentModule; + unboxed_record_cons_lab.lab_symbol=cons_symbol_p->symb_unboxed_cons_state_p->state_record_symbol; + unboxed_record_cons_lab.lab_issymbol=True; + } else { + unboxed_record_cons_lab.lab_name=cons_symbol_p->symb_unboxed_cons_state_p->state_record_symbol->sdef_ident->ident_name; + unboxed_record_cons_lab.lab_issymbol=False; + } unboxed_record_cons_lab.lab_pref=cons_symbol_p->symb_tail_strictness ? "r_Cons#!" : "r_Cons#"; - unboxed_record_cons_lab.lab_issymbol=False; - unboxed_record_cons_lab.lab_name=cons_symbol_p->symb_unboxed_cons_state_p->state_record_symbol->sdef_ident->ident_name; unboxed_record_cons_lab.lab_post='\0'; return &unboxed_record_cons_lab; diff --git a/backendC/CleanCompilerSources/instructions.c b/backendC/CleanCompilerSources/instructions.c index ebed588..9c03346 100644 --- a/backendC/CleanCompilerSources/instructions.c +++ b/backendC/CleanCompilerSources/instructions.c @@ -2812,7 +2812,10 @@ void GenUnboxedConsRecordDescriptor (SymbDef sdef,int tail_strict) DetermineSizeOfState (tuple_state,&asize,&bsize); - FPrintF (OutFile,tail_strict ? " %d %d \"[#%s!]\"" : " %d %d \"[#%s]\"",asize,bsize,name); + if (ExportLocalLabels) + FPrintF (OutFile,tail_strict ? " %d %d \"_Cons#!%s\"" : " %d %d \"_Cons#\"",asize,bsize,name); + else + FPrintF (OutFile,tail_strict ? " %d %d \"[#%s!]\"" : " %d %d \"[#%s]\"",asize,bsize,name); } #endif |