diff options
Diffstat (limited to 'backendC')
-rw-r--r-- | backendC/CleanCompilerSources/backend.c | 5 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/backend.h | 3 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/codegen1.c | 15 |
3 files changed, 22 insertions, 1 deletions
diff --git a/backendC/CleanCompilerSources/backend.c b/backendC/CleanCompilerSources/backend.c index 5de268d..2fd911e 100644 --- a/backendC/CleanCompilerSources/backend.c +++ b/backendC/CleanCompilerSources/backend.c @@ -1017,6 +1017,11 @@ BETypeSymbol (int typeIndex, int moduleIndex) return (typeSymbol); } /* BETypeSymbol */ +BESymbolP BETypeSymbolNoMark (int typeIndex, int moduleIndex) +{ + return gBEState.be_modules [moduleIndex].bem_types [typeIndex]; +} + BESymbolP BEDontCareDefinitionSymbol (void) { diff --git a/backendC/CleanCompilerSources/backend.h b/backendC/CleanCompilerSources/backend.h index 0a25481..4a17ac6 100644 --- a/backendC/CleanCompilerSources/backend.h +++ b/backendC/CleanCompilerSources/backend.h @@ -217,6 +217,9 @@ Clean (BEConstructorSymbol :: Int Int BackEnd -> (BESymbolP, BackEnd)) BESymbolP BEFieldSymbol (int fieldIndex, int moduleIndex); Clean (BEFieldSymbol :: Int Int BackEnd -> (BESymbolP, BackEnd)) +BESymbolP BETypeSymbolNoMark (int typeIndex, int moduleIndex); +Clean (BETypeSymbolNoMark :: Int Int BackEnd -> (BESymbolP, BackEnd)) + BESymbolP BETypeSymbol (int typeIndex, int moduleIndex); Clean (BETypeSymbol :: Int Int BackEnd -> (BESymbolP, BackEnd)) diff --git a/backendC/CleanCompilerSources/codegen1.c b/backendC/CleanCompilerSources/codegen1.c index c9e53cf..3350563 100644 --- a/backendC/CleanCompilerSources/codegen1.c +++ b/backendC/CleanCompilerSources/codegen1.c @@ -1318,6 +1318,19 @@ void GenerateCodeForConstructorsAndRecords (Symbol symbols) ConstructorList constructor; constructor = def->sdef_type->type_constructors; + if (!(def->sdef_isused || def->sdef_exported || (def->sdef_mark & (SDEF_USED_LAZILY_MASK | SDEF_USED_STRICTLY_MASK | SDEF_USED_CURRIED_MASK)))){ + for_l (fields,constructor->cl_fields,fl_next){ + SymbDef field_def; + + field_def=fields->fl_symbol->symb_def; + if (field_def->sdef_isused || field_def->sdef_mark & (SDEF_USED_LAZILY_MASK | SDEF_USED_STRICTLY_MASK | SDEF_USED_CURRIED_MASK)) + break; + } + + if (fields==NULL) + continue; + } + DetermineSizeOfState (def->sdef_record_state, &asize, &bsize); GenRecordDescriptor (def); @@ -1327,7 +1340,7 @@ void GenerateCodeForConstructorsAndRecords (Symbol symbols) for_l (fields,constructor->cl_fields,fl_next) GenLazyFieldSelectorEntry (fields->fl_symbol->symb_def,def->sdef_record_state, asize, bsize); - } + } } } } |