diff options
Diffstat (limited to 'backendC/CleanCompilerSources/backend.h')
-rw-r--r-- | backendC/CleanCompilerSources/backend.h | 80 |
1 files changed, 57 insertions, 23 deletions
diff --git a/backendC/CleanCompilerSources/backend.h b/backendC/CleanCompilerSources/backend.h index 2389f3f..0c46787 100644 --- a/backendC/CleanCompilerSources/backend.h +++ b/backendC/CleanCompilerSources/backend.h @@ -1,77 +1,90 @@ /* version info */ -# define kBEVersionCurrent 0x02000206 -# define kBEVersionOldestDefinition 0x02000204 +// increment this for every release +# define kBEVersionCurrent 0x02000207 + +// change this to the same value as kBEVersionCurrent if the new release is not +// upward compatible (for example when a function is added) +# define kBEVersionOldestDefinition 0x02000204 + +// change this to the same value as kBEVersionCurrent if the new release is not +// downward compatible (for example when a function is removed) # define kBEVersionOldestImplementation 0x02000206 + # define kBEDebug 1 /* pointer types */ +Clean (:: CPtr :== Int) + Clean (:: *UWorld :== Int) typedef struct BackEnd *BackEnd; -Clean (:: *BackEnd :== Int) +Clean (:: *BackEnd :== CPtr) typedef struct symbol *BESymbolP; -Clean (:: BESymbolP :== Int) +Clean (:: BESymbolP :== CPtr) typedef struct type_node *BETypeNodeP; -Clean (:: BETypeNodeP :== Int) +Clean (:: BETypeNodeP :== CPtr) typedef struct type_arg *BETypeArgP; -Clean (:: BETypeArgP :== Int) +Clean (:: BETypeArgP :== CPtr) typedef struct type_alt *BETypeAltP; -Clean (:: BETypeAltP :== Int) +Clean (:: BETypeAltP :== CPtr) typedef struct node *BENodeP; -Clean (:: BENodeP :== Int) +Clean (:: BENodeP :== CPtr) typedef struct arg *BEArgP; -Clean (:: BEArgP :== Int) +Clean (:: BEArgP :== CPtr) typedef struct rule_alt *BERuleAltP; -Clean (:: BERuleAltP :== Int) +Clean (:: BERuleAltP :== CPtr) typedef struct imp_rule *BEImpRuleP; -Clean (:: BEImpRuleP :== Int) +Clean (:: BEImpRuleP :== CPtr) typedef struct type *BETypeP; -Clean (:: BETypeP :== Int) +Clean (:: BETypeP :== CPtr) typedef struct flat_type *BEFlatTypeP; -Clean (:: BEFlatTypeP :== Int) +Clean (:: BEFlatTypeP :== CPtr) typedef struct type_var *BETypeVarP; -Clean (:: BETypeVarP :== Int) +Clean (:: BETypeVarP :== CPtr) typedef struct type_var_list *BETypeVarListP; -Clean (:: BETypeVarListP :== Int) +Clean (:: BETypeVarListP :== CPtr) typedef struct constructor_list *BEConstructorListP; -Clean (:: BEConstructorListP :== Int) +Clean (:: BEConstructorListP :== CPtr) typedef struct field_list *BEFieldListP; -Clean (:: BEFieldListP :== Int) +Clean (:: BEFieldListP :== CPtr) typedef struct node_id *BENodeIdP; -Clean (:: BENodeIdP :== Int) +Clean (:: BENodeIdP :== CPtr) typedef struct node_def *BENodeDefP; -Clean (:: BENodeDefP :== Int) +Clean (:: BENodeDefP :== CPtr) typedef struct strict_node_id *BEStrictNodeIdP; -Clean (:: BEStrictNodeIdP :== Int) +Clean (:: BEStrictNodeIdP :== CPtr) typedef struct parameter *BECodeParameterP; -Clean (:: BECodeParameterP :== Int) +Clean (:: BECodeParameterP :== CPtr) typedef struct code_block *BECodeBlockP; -Clean (:: BECodeBlockP :== Int) +Clean (:: BECodeBlockP :== CPtr) typedef struct string_list *BEStringListP; -Clean (:: BEStringListP :== Int) +Clean (:: BEStringListP :== CPtr) + +typedef struct node_id_list_element *BENodeIdListP; +Clean (:: BENodeIdListP :== CPtr) /* constants */ /* @@ -238,6 +251,18 @@ Clean (BEIfNode :: BENodeP BENodeP BENodeP BackEnd -> (BENodeP, BackEnd)) BENodeP BEGuardNode (BENodeP cond, BENodeDefP thenNodeDefs, BEStrictNodeIdP thenStricts, BENodeP then, BENodeDefP elseNodeDefs, BEStrictNodeIdP elseStricts, BENodeP elsje); Clean (BEGuardNode :: BENodeP BENodeDefP BEStrictNodeIdP BENodeP BENodeDefP BEStrictNodeIdP BENodeP BackEnd -> (BENodeP, BackEnd)) +BENodeP BESwitchNode (BENodeIdP nodeId, BEArgP caseNode); +Clean (BESwitchNode :: BENodeIdP BEArgP BackEnd -> (BENodeP, BackEnd)) + +BENodeP BECaseNode (int symbolArity, BESymbolP symbol, BENodeDefP nodeDefs, BEStrictNodeIdP strictNodeIds, BENodeP node); +Clean (BECaseNode :: Int BESymbolP BENodeDefP BEStrictNodeIdP BENodeP BackEnd -> (BENodeP, BackEnd)) + +BENodeP BEPushNode (int arity, BESymbolP symbol, BEArgP arguments, BENodeIdListP nodeIds); +Clean (BEPushNode :: Int BESymbolP BEArgP BENodeIdListP BackEnd -> (BENodeP, BackEnd)) + +BENodeP BEDefaultNode (BENodeDefP nodeDefs, BEStrictNodeIdP strictNodeIds, BENodeP node); +Clean (BEDefaultNode :: BENodeDefP BEStrictNodeIdP BENodeP BackEnd -> (BENodeP, BackEnd)) + BENodeP BESelectorNode (BESelectorKind selectorKind, BESymbolP fieldSymbol, BEArgP args); Clean (BESelectorNode :: BESelectorKind BESymbolP BEArgP BackEnd -> (BENodeP, BackEnd)) @@ -383,6 +408,15 @@ Clean (BECodeParameters:: BECodeParameterP BECodeParameterP BackEnd -> (BECodePa BECodeParameterP BENoCodeParameters (void); Clean (BENoCodeParameters:: BackEnd -> (BECodeParameterP, BackEnd)) +BENodeIdListP BENodeIdListElem (BENodeIdP nodeId); +Clean (BENodeIdListElem:: BENodeIdP BackEnd -> (BENodeIdListP, BackEnd)) + +BENodeIdListP BENodeIds (BENodeIdListP nid, BENodeIdListP nids); +Clean (BENodeIds:: BENodeIdListP BENodeIdListP BackEnd -> (BENodeIdListP, BackEnd)) + +BENodeIdListP BENoNodeIds (void); +Clean (BENoNodeIds:: BackEnd -> (BENodeIdListP, BackEnd)) + BECodeBlockP BEAbcCodeBlock (int inline, BEStringListP instructions); Clean (BEAbcCodeBlock:: Bool BEStringListP BackEnd -> (BECodeBlockP, BackEnd)) |