aboutsummaryrefslogtreecommitdiff
path: root/backendC/CleanCompilerSources
diff options
context:
space:
mode:
Diffstat (limited to 'backendC/CleanCompilerSources')
-rw-r--r--backendC/CleanCompilerSources/backend.c5
-rw-r--r--backendC/CleanCompilerSources/backend.h3
-rw-r--r--backendC/CleanCompilerSources/codegen1.c15
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);
- }
+ }
}
}
}