diff options
author | johnvg | 2008-12-19 14:15:51 +0000 |
---|---|---|
committer | johnvg | 2008-12-19 14:15:51 +0000 |
commit | bbf888355686fee0b9f5f176db19024947108177 (patch) | |
tree | 5c4458d8c393a6890d5f1b10c8b5708cb3d57953 | |
parent | add hsFile (diff) |
add integers and rationals
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1719 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r-- | backendC/CleanCompilerSources/backend.c | 44 | ||||
-rw-r--r-- | backendC/CleanCompilerSources/backend.h | 8 |
2 files changed, 51 insertions, 1 deletions
diff --git a/backendC/CleanCompilerSources/backend.c b/backendC/CleanCompilerSources/backend.c index ff740e1..9ceed58 100644 --- a/backendC/CleanCompilerSources/backend.c +++ b/backendC/CleanCompilerSources/backend.c @@ -587,6 +587,22 @@ BEBindSpecialFunction (BESpecialIdentIndex index, int functionIndex, int moduleI *gSpecialIdents [index] = functionSymbol->symb_def->sdef_ident; } /* BEBindSpecialFunction */ +extern SymbDefP special_types[]; /* defined in statesgen */ + +void BEBindSpecialType (int special_type_n,int type_index,int module_index) +{ + SymbolP type_symbol_p; + BEModuleP module; + + module = &gBEState.be_modules [module_index]; + type_symbol_p = module->bem_types [type_index]; + + if (type_symbol_p->symb_kind==definition) + special_types[special_type_n] = type_symbol_p->symb_def; + else + special_types[special_type_n] = NULL; +} + BESymbolP BESpecialArrayFunctionSymbol (BEArrayFunKind arrayFunKind, int functionIndex, int moduleIndex) { @@ -1965,6 +1981,29 @@ BECaseNode (int symbolArity, BESymbolP symbol, BENodeDefP nodeDefs, BEStrictNode return (caseNode); } /* BECaseNode */ +BENodeP BEOverloadedCaseNode (BENodeP case_node,BENodeP equal_node,BENodeP from_integer_node) +{ + NodeP overloaded_case_node; + ArgP equal_arg,from_integer_arg; + + overloaded_case_node = ConvertAllocType (NodeS); + overloaded_case_node->node_kind = OverloadedCaseNode; + + overloaded_case_node->node_node = case_node; + + equal_arg = ConvertAllocType (ArgS); + equal_arg->arg_node = equal_node; + + from_integer_arg = ConvertAllocType (ArgS); + from_integer_arg->arg_node = from_integer_node; + + from_integer_arg->arg_next = NULL; + equal_arg->arg_next = from_integer_arg; + overloaded_case_node->node_arguments = equal_arg; + + return overloaded_case_node; +} + BENodeP BEDefaultNode (BENodeDefP nodeDefs, BEStrictNodeIdP strictNodeIds, BENodeP node) { @@ -3568,10 +3607,12 @@ CheckBEEnumTypes (void) Assert (procid_type == BEProcIdType); Assert (redid_type == BERedIdType); Assert (Nr_Of_Basic_Types == BENrOfBasicTypes); + Assert (rational_denot == BERationalDenot); Assert (int_denot == BEIntDenot); Assert (bool_denot == BEBoolDenot); Assert (char_denot == BECharDenot); Assert (real_denot == BERealDenot); + Assert (integer_denot == BEIntegerDenot); Assert (string_denot == BEStringDenot); Assert (fun_type == BEFunType); Assert (array_type == BEArrayType); @@ -3783,6 +3824,9 @@ BEInit (int argc) im_def_module = NULL; + special_types[0]=NULL; + special_types[1]=NULL; + return ((BackEnd) &gBEState); } /* BEInit */ diff --git a/backendC/CleanCompilerSources/backend.h b/backendC/CleanCompilerSources/backend.h index a9847d4..728aea4 100644 --- a/backendC/CleanCompilerSources/backend.h +++ b/backendC/CleanCompilerSources/backend.h @@ -127,7 +127,7 @@ enum { BEIntType, BEBoolType, BECharType, BERealType, BEFileType, BEStringType, BEWorldType, BEProcIdType, BERedIdType, - BENrOfBasicTypes, + BERationalDenot, BEIntDenot, BEBoolDenot, BECharDenot, BERealDenot, BEIntegerDenot, @@ -195,6 +195,9 @@ Clean (BEBindSpecialModule :: BESpecialIdentIndex Int BackEnd -> BackEnd) void BEBindSpecialFunction (BESpecialIdentIndex index, int functionIndex, int moduleIndex); Clean (BEBindSpecialFunction :: BESpecialIdentIndex Int Int BackEnd -> BackEnd) +void BEBindSpecialType (int special_type_n,int type_index,int module_index); +Clean (BEBindSpecialType :: Int Int Int BackEnd -> BackEnd) + BESymbolP BESpecialArrayFunctionSymbol (BEArrayFunKind arrayFunKind, int functionIndex, int moduleIndex); Clean (BESpecialArrayFunctionSymbol :: BEArrayFunKind Int Int BackEnd -> (BESymbolP, BackEnd)) @@ -335,6 +338,9 @@ 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 BEOverloadedCaseNode (BENodeP case_node,BENodeP equal_node,BENodeP from_integer_node); +Clean (BEOverloadedCaseNode :: BENodeP BENodeP BENodeP BackEnd -> (BENodeP, BackEnd)) + void BEEnterLocalScope (void); Clean (BEEnterLocalScope :: BackEnd -> BackEnd) |