aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorjohnvg2014-04-03 13:15:39 +0000
committerjohnvg2014-04-03 13:15:39 +0000
commit2b2c154fd6341b2990dc552adcf824c9fe9be90f (patch)
treef2df36cd67591c8665be06fb6a97eb0decf8a8bc /backend
parentuse the index to recognize predefined types when printing, instead of the nam... (diff)
add unit type
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@2365 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'backend')
-rw-r--r--backend/backendconvert.icl29
1 files changed, 29 insertions, 0 deletions
diff --git a/backend/backendconvert.icl b/backend/backendconvert.icl
index 3392c9d..156358a 100644
--- a/backend/backendconvert.icl
+++ b/backend/backendconvert.icl
@@ -917,6 +917,24 @@ declareDynamicTemp :: PredefinedSymbols -> BackEnder
declareDynamicTemp predefs
= appBackEnd (BEDeclareDynamicTypeSymbol predefs.[PD_StdDynamic].pds_def predefs.[PD_Dyn_DynamicTemp].pds_def)
+^= v be
+ :== (v,be)
+
+@^ f f1 be
+ # (v1,be) = f1 be
+ :== f v1 be
+
+@^^ f f1 f2 be
+ # (v1,be) = f1 be
+ (v2,be) = f2 be
+ :== f v1 v2 be
+
+@^^^ f f1 f2 f3 be
+ # (v1,be) = f1 be
+ (v2,be) = f2 be
+ (v3,be) = f3 be
+ :== f v1 v2 v3 be
+
predefineSymbols :: DclModule PredefinedSymbols -> BackEnder
predefineSymbols {dcl_common} predefs
= appBackEnd (BEDeclarePredefinedModule (size dcl_common.com_type_defs) (size dcl_common.com_cons_defs))
@@ -924,6 +942,7 @@ predefineSymbols {dcl_common} predefs
o` foldState predefineType types
o` foldState predefine_list_constructor list_constructors
o` foldState predefineConstructor constructors
+ o` define_unit_type
where
list_types :: [(Int,Int,Int)]
list_types
@@ -997,6 +1016,16 @@ predefineSymbols {dcl_common} predefs
// ... sanity check
= appBackEnd (BEPredefineConstructorSymbol arity predefs.[index].pds_def cPredefinedModuleIndex symbolKind)
+ define_unit_type
+ # constructor_symbol_be_f = BEConstructorSymbol predefs.[PD_UnitConsSymbol].pds_def cPredefinedModuleIndex
+ type_be_f = @^^ BENormalTypeNode constructor_symbol_be_f BENoTypeArgs
+ constructors_be_f = @^^ BEConstructors (@^ BEConstructor type_be_f) BENoConstructors
+ type_symbol_be_f = BETypeSymbol predefs.[PD_UnitType].pds_def cPredefinedModuleIndex
+ flat_type_be_f = @^^^ BEFlatType type_symbol_be_f (^= BENoUniAttr) BENoTypeVars
+ = appBackEnd
+ ( BEDeclareConstructor predefs.[PD_UnitConsSymbol].pds_def cPredefinedModuleIndex "_Unit"
+ o` BEDeclareType predefs.[PD_UnitType].pds_def cPredefinedModuleIndex "_Unit"
+ o` @^^ BEAlgebraicType flat_type_be_f constructors_be_f)
bindSpecialIdents :: PredefinedSymbols NumberSet -> BackEnder
bindSpecialIdents predefs usedModules