diff options
Diffstat (limited to 'backendC')
-rw-r--r-- | backendC/CleanCompilerSources/backend.c | 26 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/backend.h | 10 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/syntax_tree_types.h | 3 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/typeconv_2.c | 34 | ||||
-rw-r--r-- | backendC/backend.link | 16 | ||||
-rw-r--r-- | backendC/backend.rc | 4 |
6 files changed, 80 insertions, 13 deletions
diff --git a/backendC/CleanCompilerSources/backend.c b/backendC/CleanCompilerSources/backend.c index 8a77f8f..bb09c6f 100644 --- a/backendC/CleanCompilerSources/backend.c +++ b/backendC/CleanCompilerSources/backend.c @@ -1334,6 +1334,7 @@ BEVarTypeNode (CleanString name) node->type_node_arity = 0; node->type_node_annotation = NoAnnot; node->type_node_attribute = NoUniAttr; + node->type_for_all_vars = NULL; return (node); } /* BEVarTypeNode */ @@ -1351,6 +1352,7 @@ BENormalTypeNode (BESymbolP symbol, BETypeArgP args) node->type_node_attribute = NoUniAttr; node->type_node_symbol = symbol; node->type_node_arguments = args; + node->type_for_all_vars = NULL; return (node); } /* BENormalTypeNode */ @@ -1431,6 +1433,15 @@ BEAnnotateTypeNode (BEAnnotation annotation, BETypeNodeP typeNode) return (typeNode); } /* BEAnnotateTypeNode */ +BETypeNodeP +BEAddForAllTypeVariables (BETypeVarListP vars, BETypeNodeP type) +{ + Assert (type->type_for_all_vars == NULL); + type->type_for_all_vars = vars; + + return (type); +} /* BEAddForAllTypeVariables */ + BETypeArgP BENoTypeArgs (void) { @@ -2647,12 +2658,23 @@ BETypeVar (CleanString name) } /* BETypeVar */ BETypeVarListP -BETypeVars (BETypeVarP typeVar, BETypeVarListP typeVarList) +BETypeVarListElem (BETypeVarP typeVar, BEAttribution attribute) { TypeVarList typeVarListElement; typeVarListElement = ConvertAllocType (struct type_var_list); - typeVarListElement->tvl_elem = typeVar; + typeVarListElement->tvl_elem = typeVar; + typeVarListElement->tvl_attribute = attribute; + typeVarListElement->tvl_next = NULL; + + return (typeVarListElement); +} /* BETypeVarListElem */ + +BETypeVarListP +BETypeVars (BETypeVarListP typeVarListElement, BETypeVarListP typeVarList) +{ + Assert (typeVarListElement->tvl_next == NULL); + typeVarListElement->tvl_next = typeVarList; return (typeVarListElement); diff --git a/backendC/CleanCompilerSources/backend.h b/backendC/CleanCompilerSources/backend.h index 0da892e..de0e54c 100644 --- a/backendC/CleanCompilerSources/backend.h +++ b/backendC/CleanCompilerSources/backend.h @@ -244,8 +244,11 @@ Clean (BEBasicSymbol :: Int BackEnd -> (BESymbolP, BackEnd)) BETypeNodeP BEVarTypeNode (CleanString name); Clean (BEVarTypeNode :: String BackEnd -> (BETypeNodeP, BackEnd)) -BETypeVarListP BETypeVars (BETypeVarP typeVar, BETypeVarListP typeVarList); -Clean (BETypeVars :: BETypeVarP BETypeVarListP BackEnd -> (BETypeVarListP, BackEnd)) +BETypeVarListP BETypeVarListElem (BETypeVarP typeVar, BEAttribution attribute); +Clean (BETypeVarListElem :: BETypeVarP BEAttribution BackEnd -> (BETypeVarListP, BackEnd)) + +BETypeVarListP BETypeVars (BETypeVarListP typeVarListElem, BETypeVarListP typeVarList); +Clean (BETypeVars :: BETypeVarListP BETypeVarListP BackEnd -> (BETypeVarListP, BackEnd)) BETypeVarListP BENoTypeVars (void); Clean (BENoTypeVars :: BackEnd -> (BETypeVarListP, BackEnd)) @@ -256,6 +259,9 @@ Clean (BENormalTypeNode :: BESymbolP BETypeArgP BackEnd -> (BETypeNodeP, BackEnd BETypeNodeP BEAnnotateTypeNode (BEAnnotation annotation, BETypeNodeP typeNode); Clean (BEAnnotateTypeNode :: BEAnnotation BETypeNodeP BackEnd -> (BETypeNodeP, BackEnd)) +BETypeNodeP BEAddForAllTypeVariables (BETypeVarListP vars, BETypeNodeP type); +Clean (BEAddForAllTypeVariables :: BETypeVarListP BETypeNodeP BackEnd -> (BETypeNodeP, BackEnd)) + BETypeNodeP BEAttributeTypeNode (BEAttribution attribution, BETypeNodeP typeNode); Clean (BEAttributeTypeNode :: BEAttribution BETypeNodeP BackEnd -> (BETypeNodeP, BackEnd)) diff --git a/backendC/CleanCompilerSources/syntax_tree_types.h b/backendC/CleanCompilerSources/syntax_tree_types.h index ded1bf9..ad6cebc 100644 --- a/backendC/CleanCompilerSources/syntax_tree_types.h +++ b/backendC/CleanCompilerSources/syntax_tree_types.h @@ -401,6 +401,9 @@ struct type_node short type_node_arity; Annotation type_node_annotation; unsigned char type_node_is_var:1; +# ifdef CLEAN2 + TypeVarList type_for_all_vars; +# endif }; #define type_node_symbol type_node_contents.contents_symbol diff --git a/backendC/CleanCompilerSources/typeconv_2.c b/backendC/CleanCompilerSources/typeconv_2.c index 63f4090..88d0bc8 100644 --- a/backendC/CleanCompilerSources/typeconv_2.c +++ b/backendC/CleanCompilerSources/typeconv_2.c @@ -429,6 +429,28 @@ static void PrintArguments (TypeArgs args, char separator, Bool brackets, Bool s } /* PrintArguments */ +#ifdef CLEAN2 +static void PrintTypeVarList (TypeVarList type_vars) +{ + for (; type_vars != NULL; type_vars = type_vars -> tvl_next) + { + /* RWS: + Printing the attributes currently works because the attributes for + universally quantified type variables can only be none, '*' or '.'. + For attribute variables something should probably done with the + CurrentARC_Info administration, but I don't understand how this works. + */ + if (type_vars -> tvl_attribute != NoUniAttr) + PrintAttribute (type_vars -> tvl_attribute, cDoPrintColon); + + FPutS (type_vars -> tvl_elem -> tv_ident -> ident_name, StdListTypes); + + if (type_vars -> tvl_next != NULL) + FPutC (' ', StdListTypes); + } +} +#endif + static void PrintNode (TypeNode node, Bool brackets, Bool strict_context, Bool print_annot) { @@ -449,6 +471,14 @@ static void PrintNode (TypeNode node, Bool brackets, Bool strict_context, Bool p (node -> type_node_symbol -> symb_kind == fun_type || node -> type_node_symbol -> symb_kind == apply_symb)) brackets = True; } +#ifdef CLEAN2 + if (node -> type_for_all_vars != NULL) + { FPutS ("(A.", StdListTypes); + PrintTypeVarList (node -> type_for_all_vars); + FPutC (':', StdListTypes); + brackets = False; + } +#endif switch (node -> type_node_symbol -> symb_kind) { case tuple_type: @@ -546,6 +576,10 @@ static void PrintNode (TypeNode node, Bool brackets, Bool strict_context, Bool p break; } +#ifdef CLEAN2 + if (node -> type_for_all_vars != NULL) + FPutC (')', StdListTypes); +#endif } /* PrintNode */ static void PrintAttributeEquations (UniVarEquations attr_equas) diff --git a/backendC/backend.link b/backendC/backend.link index 91099d5..4b7095a 100644 --- a/backendC/backend.link +++ b/backendC/backend.link @@ -13,14 +13,23 @@ /EXPORT: BEDontCareDefinitionSymbol /EXPORT: BEBoolSymbol /EXPORT: BELiteralSymbol +/EXPORT: BEPredefineListConstructorSymbol +/EXPORT: BEPredefineListTypeSymbol +/EXPORT: BEAdjustStrictListConsInstance +/EXPORT: BEAdjustUnboxedListDeconsInstance +/EXPORT: BEAdjustOverloadedNilFunction +/EXPORT: BEOverloadedConsSymbol +/EXPORT: BEOverloadedPushNode /EXPORT: BEPredefineConstructorSymbol /EXPORT: BEPredefineTypeSymbol /EXPORT: BEBasicSymbol /EXPORT: BEVarTypeNode +/EXPORT: BETypeVarListElem /EXPORT: BETypeVars /EXPORT: BENoTypeVars /EXPORT: BENormalTypeNode /EXPORT: BEAnnotateTypeNode +/EXPORT: BEAddForAllTypeVariables /EXPORT: BEAttributeTypeNode /EXPORT: BEAttributeKind /EXPORT: BENoAttributeKinds @@ -110,10 +119,3 @@ /EXPORT: BESetMainDclModuleN /EXPORT: BEDeclareDynamicTypeSymbol /EXPORT: BEDynamicTempTypeSymbol -/EXPORT: BEPredefineListTypeSymbol -/EXPORT: BEPredefineListConstructorSymbol -/EXPORT: BEAdjustStrictListConsInstance -/EXPORT: BEAdjustUnboxedListDeconsInstance -/EXPORT: BEAdjustOverloadedNilFunction -/EXPORT: BEOverloadedConsSymbol -/EXPORT: BEOverloadedPushNode diff --git a/backendC/backend.rc b/backendC/backend.rc index 78fff0a..f65427f 100644 --- a/backendC/backend.rc +++ b/backendC/backend.rc @@ -14,7 +14,7 @@ # define kFileFlags VS_FF_DEBUG | VS_FF_PRERELEASE # define kFileFlagsMask VS_FF_DEBUG | VS_FF_PRERELEASE -# define kFileVersionString "2.0.d.8" +# define kFileVersionString "2.0.d.9" VS_VERSION_INFO VERSIONINFO FILEVERSION kFileVersion @@ -37,7 +37,7 @@ BEGIN VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename","backend.dll\0" VALUE "ProductName", "Clean System" - VALUE "ProductVersion", "2.0.d.8" + VALUE "ProductVersion", "2.0.d.9" VALUE "OLESelfRegister", "\0" END |