aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorjohnvg2014-04-03 13:15:39 +0000
committerjohnvg2014-04-03 13:15:39 +0000
commit2b2c154fd6341b2990dc552adcf824c9fe9be90f (patch)
treef2df36cd67591c8665be06fb6a97eb0decf8a8bc /frontend
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 'frontend')
-rw-r--r--frontend/check.icl6
-rw-r--r--frontend/convertDynamics.icl2
-rw-r--r--frontend/parse.icl80
-rw-r--r--frontend/predef.dcl422
-rw-r--r--frontend/predef.icl24
5 files changed, 300 insertions, 234 deletions
diff --git a/frontend/check.icl b/frontend/check.icl
index 232b44e..36b797f 100644
--- a/frontend/check.icl
+++ b/frontend/check.icl
@@ -3330,8 +3330,8 @@ where
<=< adjustPredefSymbolAndCheckIndex PD_StringType mod_index PD_StringTypeIndex STE_Type
<=< adjust_predef_symbols PD_ListType PD_OverloadedListType mod_index STE_Type
<=< adjust_predef_symbols_and_check_indices PD_Arity2TupleType PD_Arity32TupleType PD_Arity2TupleTypeIndex mod_index STE_Type
- <=< adjust_predef_symbols PD_LazyArrayType PD_UnboxedArrayType mod_index STE_Type
- <=< adjust_predef_symbols PD_ConsSymbol PD_Arity32TupleSymbol mod_index STE_Constructor
+ <=< adjust_predef_symbols PD_LazyArrayType PD_UnitType mod_index STE_Type
+ <=< adjust_predef_symbols PD_ConsSymbol PD_UnitConsSymbol mod_index STE_Constructor
<=< (if tc_class_defined (adjustPredefSymbol PD_TypeCodeClass mod_index STE_Class) (\x->x))
<=< (if tc_class_defined (adjustPredefSymbol PD_TypeCodeMember mod_index STE_Member) (\x->x))
<=< adjustPredefSymbol PD_DummyForStrictAliasFun mod_index STE_DclFunction)
@@ -3356,7 +3356,7 @@ where
<=< adjust_predef_symbols PD_Dyn_initial_unification_environment PD_Dyn_normalise mod_index STE_DclFunction
<=< adjustPredefSymbol PD_Dyn__to_TypeCodeConstructor mod_index STE_DclFunction
<=< adjustPredefSymbol PD_TypeCodeConstructor mod_index STE_Type
- <=< adjust_predef_symbols PD_TC_Int PD_TC__UnboxedArray mod_index STE_Constructor
+ <=< adjust_predef_symbols PD_TC_Int PD_TC__Unit mod_index STE_Constructor
)
# (pre_mod, cs_predef_symbols) = cs_predef_symbols![PD_StdGeneric]
# type_bimap = predefined_idents.[PD_TypeBimap]
diff --git a/frontend/convertDynamics.icl b/frontend/convertDynamics.icl
index 2ce916e..bbe667d 100644
--- a/frontend/convertDynamics.icl
+++ b/frontend/convertDynamics.icl
@@ -560,6 +560,8 @@ where
-> type_code_constructor_expression PD_TC__StrictArray ci
PD_UnboxedArrayType
-> type_code_constructor_expression PD_TC__UnboxedArray ci
+ PD_UnitType
+ -> type_code_constructor_expression PD_TC__Unit ci
typeConstructor (GTT_Constructor fun_ident _) ci
# type_fun
= App {app_symb = fun_ident, app_args = [], app_info_ptr = nilPtr}
diff --git a/frontend/parse.icl b/frontend/parse.icl
index a7147da..0b02282 100644
--- a/frontend/parse.icl
+++ b/frontend/parse.icl
@@ -2964,6 +2964,9 @@ trySimpleTypeT_after_OpenToken ArrowToken attr pState
= (ParseOk, {at_attribute = attr, at_type = TArrow}, pState)
= (ParseFailWithError,{at_attribute = attr, at_type = TE},
parseError "arrow type" (Yes token) ")" pState)
+trySimpleTypeT_after_OpenToken CloseToken attr pState
+ #! unit_type_ident = predefined_idents.[PD_UnitType]
+ = (ParseOk,{at_attribute=attr,at_type=TA (MakeNewTypeSymbIdent unit_type_ident 0) []},pState)
trySimpleTypeT_after_OpenToken token attr pState
# (annot_with_pos,atype, pState) = wantAnnotatedATypeWithPositionT token pState
(token, pState) = nextToken TypeContext pState
@@ -3387,19 +3390,37 @@ trySimplePatternT SquareOpenToken pState
# (list_expr, pState) = wantListExp cIsAPattern pState
= (True, list_expr, pState)
trySimplePatternT OpenToken pState
- # (args=:[exp:exps], pState) = want_pattern_list pState
- pState = wantToken FunctionContext "pattern list" CloseToken pState
- | isEmpty exps
- = case exp of
- PE_Ident id
- -> (True, PE_List [exp], pState)
- _
- -> (True, exp, pState)
- = (True, PE_Tuple args, pState)
+ # (token, pState) = nextToken FunctionContext pState
+ = case token of
+ CloseToken
+ #! unit_cons_ident = predefined_idents.[PD_UnitConsSymbol]
+ -> (True,PE_Ident unit_cons_ident,pState)
+ _
+ # (args=:[exp:exps], pState) = want_pattern_list_t token pState
+ pState = wantToken FunctionContext "pattern list" CloseToken pState
+ | isEmpty exps
+ -> case exp of
+ PE_Ident id
+ -> (True, PE_List [exp], pState)
+ _
+ -> (True, exp, pState)
+ -> (True, PE_Tuple args, pState)
where
+ want_pattern_list_t token pState
+ # (expr, pState)
+ = case token of
+ CharListToken charList // To produce a better error message
+ -> charListError charList pState
+ _
+ -> wantPatternT token pState
+ = want_pattern_list_rest expr pState
+
want_pattern_list pState
# (expr, pState) = wantPattern pState
- (token, pState) = nextToken FunctionContext pState
+ = want_pattern_list_rest expr pState
+
+ want_pattern_list_rest expr pState
+ # (token, pState) = nextToken FunctionContext pState
| token == CommaToken
# (exprs, pState) = want_pattern_list pState
= ([expr : exprs], pState)
@@ -3492,19 +3513,38 @@ trySimpleExpressionT SquareOpenToken pState
# (list_expr, pState) = wantListExp cIsNotAPattern pState
= (True, list_expr, pState)
trySimpleExpressionT OpenToken pState
- # (args=:[exp:exps], pState) = want_expression_list pState
- pState = wantToken FunctionContext "expression list" CloseToken pState
- | isEmpty exps
- = case exp of
- PE_Ident id
- -> (True, PE_List [exp], pState)
- _
- -> (True, exp, pState)
- = (True, PE_Tuple args, pState)
+ # (token, pState) = nextToken FunctionContext pState
+ = case token of
+ CloseToken
+ #! unit_cons_ident = predefined_idents.[PD_UnitConsSymbol]
+ -> (True,PE_Ident unit_cons_ident,pState)
+ _
+ # (args=:[exp:exps], pState) = want_expression_list_t token pState
+ pState = wantToken FunctionContext "expression list" CloseToken pState
+ | isEmpty exps
+ -> case exp of
+ PE_Ident id
+ -> (True, PE_List [exp], pState)
+ _
+ -> (True, exp, pState)
+ -> (True, PE_Tuple args, pState)
where
+ want_expression_list_t token pState
+ # (expr, pState)
+ = case token of
+ CharListToken charList
+ // To produce a better error message
+ -> charListError charList pState
+ _
+ -> wantExpressionT token pState
+ = want_expression_list_rest expr pState
+
want_expression_list pState
# (expr, pState) = wantExpression pState
- (token, pState) = nextToken FunctionContext pState
+ = want_expression_list_rest expr pState
+
+ want_expression_list_rest expr pState
+ # (token, pState) = nextToken FunctionContext pState
| token == CommaToken
# (exprs, pState) = want_expression_list pState
= ([expr : exprs], pState)
diff --git a/frontend/predef.dcl b/frontend/predef.dcl
index e649c95..620b470 100644
--- a/frontend/predef.dcl
+++ b/frontend/predef.dcl
@@ -23,7 +23,7 @@ PD_StringTypeIndex :== 0
PD_Arity2TupleTypeIndex :== 8
PD_Arity32TupleTypeIndex :== 38
-/* identifiers not present the hastable */
+/* identifiers not present the hashtable */
PD_PredefinedModule :== 0
@@ -46,258 +46,264 @@ PD_LazyArrayType :== 40
PD_StrictArrayType :== 41
PD_UnboxedArrayType :== 42
+PD_UnitType :== 43
+
// constructors:
FirstConstructorPredefinedSymbolIndex :== PD_ConsSymbol; // to compute index in com_cons_defs
-PD_ConsSymbol :== 43
-PD_StrictConsSymbol :== 44
-PD_UnboxedConsSymbol :== 45
-PD_TailStrictConsSymbol :== 46
-PD_StrictTailStrictConsSymbol :== 47
-PD_UnboxedTailStrictConsSymbol :== 48
-PD_OverloadedConsSymbol :== 49
-
-PD_NilSymbol :== 50
-PD_StrictNilSymbol :== 51
-PD_UnboxedNilSymbol :== 52
-PD_TailStrictNilSymbol :== 53
-PD_StrictTailStrictNilSymbol :== 54
-PD_UnboxedTailStrictNilSymbol :== 55
-PD_OverloadedNilSymbol :== 56
-
-PD_Arity2TupleSymbol :== 57
-PD_Arity32TupleSymbol :== 87
+PD_ConsSymbol :== 44
+PD_StrictConsSymbol :== 45
+PD_UnboxedConsSymbol :== 46
+PD_TailStrictConsSymbol :== 47
+PD_StrictTailStrictConsSymbol :== 48
+PD_UnboxedTailStrictConsSymbol :== 49
+PD_OverloadedConsSymbol :== 50
+
+PD_NilSymbol :== 51
+PD_StrictNilSymbol :== 52
+PD_UnboxedNilSymbol :== 53
+PD_TailStrictNilSymbol :== 54
+PD_StrictTailStrictNilSymbol :== 55
+PD_UnboxedTailStrictNilSymbol :== 56
+PD_OverloadedNilSymbol :== 57
+
+PD_Arity2TupleSymbol :== 58
+PD_Arity32TupleSymbol :== 88
+
+PD_UnitConsSymbol :== 89
// end constructors
-PD_TypeVar_a0 :== 88
-PD_TypeVar_a31 :== 119
+PD_TypeVar_a0 :== 90
+PD_TypeVar_a31 :== 121
/* identifiers present in the hashtable */
-PD_StdArray :== 120
-PD_StdEnum :== 121
-PD_StdBool :== 122
+PD_StdArray :== 122
+PD_StdEnum :== 123
+PD_StdBool :== 124
-PD_AndOp :== 123
-PD_OrOp :== 124
+PD_AndOp :== 125
+PD_OrOp :== 126
/* Array functions */
-PD_ArrayClass :== 125
+PD_ArrayClass :== 127
-PD_CreateArrayFun :== 126
-PD__CreateArrayFun :== 127
-PD_ArraySelectFun :== 128
-PD_UnqArraySelectFun :== 129
-PD_ArrayUpdateFun :== 130
-PD_ArrayReplaceFun :== 131
-PD_ArraySizeFun :== 132
-PD_UnqArraySizeFun :== 133
+PD_CreateArrayFun :== 128
+PD__CreateArrayFun :== 129
+PD_ArraySelectFun :== 130
+PD_UnqArraySelectFun :== 131
+PD_ArrayUpdateFun :== 132
+PD_ArrayReplaceFun :== 133
+PD_ArraySizeFun :== 134
+PD_UnqArraySizeFun :== 135
/* Enum/Comprehension functions */
-PD_SmallerFun :== 134
-PD_LessOrEqualFun :== 135
-PD_IncFun :== 136
-PD_SubFun :== 137
-PD_From :== 138
-PD_FromThen :== 139
-PD_FromTo :== 140
-PD_FromThenTo :== 141
+PD_SmallerFun :== 136
+PD_LessOrEqualFun :== 137
+PD_IncFun :== 138
+PD_SubFun :== 139
+PD_From :== 140
+PD_FromThen :== 141
+PD_FromTo :== 142
+PD_FromThenTo :== 143
/* StdMisc */
-PD_StdMisc :== 142
-PD_abort :== 143
-PD_undef :== 144
+PD_StdMisc :== 144
+PD_abort :== 145
+PD_undef :== 146
-PD_Start :== 145
+PD_Start :== 147
-PD_DummyForStrictAliasFun :== 146
+PD_DummyForStrictAliasFun :== 148
-PD_StdStrictLists:==147
+PD_StdStrictLists:==149
-PD_cons:==148
-PD_decons:==149
+PD_cons:==150
+PD_decons:==151
-PD_cons_u:==150
-PD_decons_u:==151
+PD_cons_u:==152
+PD_decons_u:==153
-PD_cons_uts:==152
-PD_decons_uts:==153
+PD_cons_uts:==154
+PD_decons_uts:==155
-PD_nil:==154
-PD_nil_u:==155
-PD_nil_uts:==156
+PD_nil:==156
+PD_nil_u:==157
+PD_nil_uts:==158
-PD_ListClass :== 157
-PD_UListClass :== 158
-PD_UTSListClass :== 159
+PD_ListClass :== 159
+PD_UListClass :== 160
+PD_UTSListClass :== 161
/* Dynamics */
// TC class
-PD_TypeCodeMember :== 160
-PD_TypeCodeClass :== 161
+PD_TypeCodeMember :== 162
+PD_TypeCodeClass :== 163
// dynamic module
-PD_StdDynamic :== 162
+PD_StdDynamic :== 164
// dynamic type
-PD_Dyn_DynamicTemp :== 163
+PD_Dyn_DynamicTemp :== 165
// type code (type)
-PD_Dyn_TypeCode :== 164
+PD_Dyn_TypeCode :== 166
// unification (type)
-PD_Dyn_UnificationEnvironment :== 165
+PD_Dyn_UnificationEnvironment :== 167
// type code (expressions)
-PD_Dyn_TypeScheme :== 166
-PD_Dyn_TypeApp :== 167
-PD_Dyn_TypeVar :== 168
-PD_Dyn_TypeCons :== 169
-PD_Dyn_TypeUnique :== 170
-PD_Dyn__TypeFixedVar :== 171
+PD_Dyn_TypeScheme :== 168
+PD_Dyn_TypeApp :== 169
+PD_Dyn_TypeVar :== 170
+PD_Dyn_TypeCons :== 171
+PD_Dyn_TypeUnique :== 172
+PD_Dyn__TypeFixedVar :== 173
// unification (expressions)
-PD_Dyn_initial_unification_environment :== 172
-PD_Dyn_bind_global_type_pattern_var :== 173
-PD_Dyn_unify :== 174
-PD_Dyn_normalise :== 175
+PD_Dyn_initial_unification_environment :== 174
+PD_Dyn_bind_global_type_pattern_var :== 175
+PD_Dyn_unify :== 176
+PD_Dyn_normalise :== 177
/* Generics */
-PD_StdGeneric :== 176
+PD_StdGeneric :== 178
// Generics types
-PD_TypeBimap :== 177
-PD_TypeUNIT :== 178
-PD_TypeEITHER :== 179
-PD_TypePAIR :== 180
+PD_TypeBimap :== 179
+PD_TypeUNIT :== 180
+PD_TypeEITHER :== 181
+PD_TypePAIR :== 182
// for constructor info
-PD_TypeCONS :== 181
-PD_TypeRECORD :== 182
-PD_TypeFIELD :== 183
-PD_TypeOBJECT :== 184
-PD_TGenericConsDescriptor :== 185
-PD_TGenericRecordDescriptor :== 186
-PD_TGenericFieldDescriptor :== 187
-PD_TGenericTypeDefDescriptor :== 188
-PD_TGenConsPrio :== 189
-PD_TGenConsAssoc :== 190
-PD_TGenType :== 191
-
-PD_TypeGenericDict :== 192
+PD_TypeCONS :== 183
+PD_TypeRECORD :== 184
+PD_TypeFIELD :== 185
+PD_TypeOBJECT :== 186
+PD_TGenericConsDescriptor :== 187
+PD_TGenericRecordDescriptor :== 188
+PD_TGenericFieldDescriptor :== 189
+PD_TGenericTypeDefDescriptor :== 190
+PD_TGenConsPrio :== 191
+PD_TGenConsAssoc :== 192
+PD_TGenType :== 193
+
+PD_TypeGenericDict :== 194
// Generics fields
-PD_map_to :== 193
-PD_map_from :== 194
+PD_map_to :== 195
+PD_map_from :== 196
// Generics expression
-PD_ConsBimap :== 195
-PD_ConsUNIT :== 196
-PD_ConsLEFT :== 197
-PD_ConsRIGHT :== 198
-PD_ConsPAIR :== 199
+PD_ConsBimap :== 197
+PD_ConsUNIT :== 198
+PD_ConsLEFT :== 199
+PD_ConsRIGHT :== 200
+PD_ConsPAIR :== 201
// for constructor info
-PD_ConsCONS :== 200
-PD_ConsRECORD :== 201
-PD_ConsFIELD :== 202
-PD_ConsOBJECT :== 203
-PD_CGenericConsDescriptor :== 204
-PD_CGenericRecordDescriptor :== 205
-PD_CGenericFieldDescriptor :== 206
-PD_CGenericTypeDefDescriptor :== 207
-PD_CGenConsNoPrio :== 208
-PD_CGenConsPrio :== 209
-PD_CGenConsAssocNone :== 210
-PD_CGenConsAssocLeft :== 211
-PD_CGenConsAssocRight :== 212
-PD_CGenTypeCons :== 213
-PD_CGenTypeVar :== 214
-PD_CGenTypeArrow :== 215
-PD_CGenTypeApp :== 216
-
-PD_bimapId :== 217
-PD_GenericBimap :== 218
-
-PD_FromS :== 219
-PD_FromTS :== 220
-PD_FromSTS :== 221
-PD_FromU :== 222
-PD_FromUTS :== 223
-PD_FromO :== 224
-
-PD_FromThenS :== 225
-PD_FromThenTS :== 226
-PD_FromThenSTS :== 227
-PD_FromThenU :== 228
-PD_FromThenUTS :== 229
-PD_FromThenO :== 230
-
-PD_FromToS :== 231
-PD_FromToTS :== 232
-PD_FromToSTS :== 233
-PD_FromToU :== 234
-PD_FromToUTS :== 235
-PD_FromToO :== 236
-
-PD_FromThenToS :== 237
-PD_FromThenToTS :== 238
-PD_FromThenToSTS :== 239
-PD_FromThenToU :== 240
-PD_FromThenToUTS :== 241
-PD_FromThenToO :== 242
-
-PD_Dyn__to_TypeCodeConstructor :== 243
-PD_TypeCodeConstructor :== 244
-
-PD_TC_Int :== 245
-PD_TC_Char :== 246
-PD_TC_Real :== 247
-PD_TC_Bool :== 248
-PD_TC_Dynamic :== 249
-PD_TC_File :== 250
-PD_TC_World :== 251
-
-PD_TC__Arrow :== 252
-
-PD_TC__List :== 253
-PD_TC__StrictList :== 254
-PD_TC__UnboxedList :== 255
-PD_TC__TailStrictList :== 256
-PD_TC__StrictTailStrictList :== 257
-PD_TC__UnboxedTailStrictList :== 258
-
-PD_TC__Tuple2 :== 259
-PD_TC__Tuple3 :== 260
-PD_TC__Tuple4 :== 261
-PD_TC__Tuple5 :== 262
-PD_TC__Tuple6 :== 263
-PD_TC__Tuple7 :== 264
-PD_TC__Tuple8 :== 265
-PD_TC__Tuple9 :== 266
-PD_TC__Tuple10 :== 267
-PD_TC__Tuple11 :== 268
-PD_TC__Tuple12 :== 269
-PD_TC__Tuple13 :== 270
-PD_TC__Tuple14 :== 271
-PD_TC__Tuple15 :== 272
-PD_TC__Tuple16 :== 273
-PD_TC__Tuple17 :== 274
-PD_TC__Tuple18 :== 275
-PD_TC__Tuple19 :== 276
-PD_TC__Tuple20 :== 277
-PD_TC__Tuple21 :== 278
-PD_TC__Tuple22 :== 279
-PD_TC__Tuple23 :== 280
-PD_TC__Tuple24 :== 281
-PD_TC__Tuple25 :== 282
-PD_TC__Tuple26 :== 283
-PD_TC__Tuple27 :== 284
-PD_TC__Tuple28 :== 285
-PD_TC__Tuple29 :== 286
-PD_TC__Tuple30 :== 287
-PD_TC__Tuple31 :== 288
-PD_TC__Tuple32 :== 289
-
-PD_TC__LazyArray :== 290
-PD_TC__StrictArray :== 291
-PD_TC__UnboxedArray :== 292
-
-PD_NrOfPredefSymbols :== 293
+PD_ConsCONS :== 202
+PD_ConsRECORD :== 203
+PD_ConsFIELD :== 204
+PD_ConsOBJECT :== 205
+PD_CGenericConsDescriptor :== 206
+PD_CGenericRecordDescriptor :== 207
+PD_CGenericFieldDescriptor :== 208
+PD_CGenericTypeDefDescriptor :== 209
+PD_CGenConsNoPrio :== 210
+PD_CGenConsPrio :== 211
+PD_CGenConsAssocNone :== 212
+PD_CGenConsAssocLeft :== 213
+PD_CGenConsAssocRight :== 214
+PD_CGenTypeCons :== 215
+PD_CGenTypeVar :== 216
+PD_CGenTypeArrow :== 217
+PD_CGenTypeApp :== 218
+
+PD_bimapId :== 219
+PD_GenericBimap :== 220
+
+PD_FromS :== 221
+PD_FromTS :== 222
+PD_FromSTS :== 223
+PD_FromU :== 224
+PD_FromUTS :== 225
+PD_FromO :== 226
+
+PD_FromThenS :== 227
+PD_FromThenTS :== 228
+PD_FromThenSTS :== 229
+PD_FromThenU :== 230
+PD_FromThenUTS :== 231
+PD_FromThenO :== 232
+
+PD_FromToS :== 233
+PD_FromToTS :== 234
+PD_FromToSTS :== 235
+PD_FromToU :== 236
+PD_FromToUTS :== 237
+PD_FromToO :== 238
+
+PD_FromThenToS :== 239
+PD_FromThenToTS :== 240
+PD_FromThenToSTS :== 241
+PD_FromThenToU :== 242
+PD_FromThenToUTS :== 243
+PD_FromThenToO :== 244
+
+PD_Dyn__to_TypeCodeConstructor :== 245
+PD_TypeCodeConstructor :== 246
+
+PD_TC_Int :== 247
+PD_TC_Char :== 248
+PD_TC_Real :== 249
+PD_TC_Bool :== 250
+PD_TC_Dynamic :== 251
+PD_TC_File :== 252
+PD_TC_World :== 253
+
+PD_TC__Arrow :== 254
+
+PD_TC__List :== 255
+PD_TC__StrictList :== 256
+PD_TC__UnboxedList :== 257
+PD_TC__TailStrictList :== 258
+PD_TC__StrictTailStrictList :== 259
+PD_TC__UnboxedTailStrictList :== 260
+
+PD_TC__Tuple2 :== 261
+PD_TC__Tuple3 :== 262
+PD_TC__Tuple4 :== 263
+PD_TC__Tuple5 :== 264
+PD_TC__Tuple6 :== 265
+PD_TC__Tuple7 :== 266
+PD_TC__Tuple8 :== 267
+PD_TC__Tuple9 :== 268
+PD_TC__Tuple10 :== 269
+PD_TC__Tuple11 :== 270
+PD_TC__Tuple12 :== 271
+PD_TC__Tuple13 :== 272
+PD_TC__Tuple14 :== 273
+PD_TC__Tuple15 :== 274
+PD_TC__Tuple16 :== 275
+PD_TC__Tuple17 :== 276
+PD_TC__Tuple18 :== 277
+PD_TC__Tuple19 :== 278
+PD_TC__Tuple20 :== 279
+PD_TC__Tuple21 :== 280
+PD_TC__Tuple22 :== 281
+PD_TC__Tuple23 :== 282
+PD_TC__Tuple24 :== 283
+PD_TC__Tuple25 :== 284
+PD_TC__Tuple26 :== 285
+PD_TC__Tuple27 :== 286
+PD_TC__Tuple28 :== 287
+PD_TC__Tuple29 :== 288
+PD_TC__Tuple30 :== 289
+PD_TC__Tuple31 :== 290
+PD_TC__Tuple32 :== 291
+
+PD_TC__LazyArray :== 292
+PD_TC__StrictArray :== 293
+PD_TC__UnboxedArray :== 294
+
+PD_TC__Unit :== 295
+
+PD_NrOfPredefSymbols :== 296
GetTupleConsIndex tup_arity :== PD_Arity2TupleSymbol + tup_arity - 2
GetTupleTypeIndex tup_arity :== PD_Arity2TupleType + tup_arity - 2
diff --git a/frontend/predef.icl b/frontend/predef.icl
index 8157dfd..c21a608 100644
--- a/frontend/predef.icl
+++ b/frontend/predef.icl
@@ -33,7 +33,8 @@ predefined_idents
[PD_StrictTailStrictNilSymbol] = i "_!Nil!",
[PD_UnboxedTailStrictNilSymbol] = i "_#Nil!",
[PD_OverloadedNilSymbol] = i "_|Nil",
-
+ [PD_UnitConsSymbol] = i "_Unit",
+
[PD_PredefinedModule] = i "_predefined",
[PD_StringType] = i "_String",
[PD_ListType] = i PD_ListType_String,
@@ -46,6 +47,7 @@ predefined_idents
[PD_LazyArrayType] = i "_Array",
[PD_StrictArrayType] = i "_!Array",
[PD_UnboxedArrayType] = i PD_UnboxedArray_String,
+ [PD_UnitType] = i "_Unit",
[PD_TypeCodeMember] = i "_type_code",
[PD_DummyForStrictAliasFun] = i "_dummyForStrictAlias"
}
@@ -168,6 +170,8 @@ predefined_idents
[PD_TC__StrictArray] = i "TC__StrictArray",
[PD_TC__UnboxedArray] = i "TC__UnboxedArray",
+ [PD_TC__Unit] = i "TC__Unit",
+
[PD_StdGeneric] = i "StdGeneric",
[PD_TypeBimap] = i "Bimap",
[PD_ConsBimap] = i "_Bimap",
@@ -309,6 +313,7 @@ where
<<= (local_predefined_idents, PD_LazyArrayType)
<<= (local_predefined_idents, PD_StrictArrayType)
<<= (local_predefined_idents, PD_UnboxedArrayType)
+ <<= (local_predefined_idents, PD_UnitType) <<= (local_predefined_idents, PD_UnitConsSymbol)
<<= (local_predefined_idents, PD_TypeCodeMember)
<<= (local_predefined_idents, PD_DummyForStrictAliasFun) // MW++
where
@@ -369,7 +374,7 @@ where
<<- (local_predefined_idents, IC_Type, PD_TypeCodeConstructor)
<<- (local_predefined_idents, IC_Module NoQualifiedIdents, PD_StdGeneric)
- # hash_table = put_predefined_idents_in_hash_table PD_TC_Int PD_TC__UnboxedArray IC_Expression local_predefined_idents hash_table
+ # hash_table = put_predefined_idents_in_hash_table PD_TC_Int PD_TC__Unit IC_Expression local_predefined_idents hash_table
# hash_table = put_predefined_idents_in_hash_table PD_TypeBimap PD_TypeGenericDict IC_Type local_predefined_idents hash_table
# hash_table = put_predefined_idents_in_hash_table PD_ConsBimap PD_bimapId IC_Expression local_predefined_idents hash_table
@@ -421,6 +426,15 @@ make_list_definition list_type_pre_def_symbol_index cons_pre_def_symbol_index ni
pc_cons_prio = NoPrio, pc_exi_vars = [], pc_cons_pos = PreDefPos pre_mod_id}
= (list_def,ParsedConstructorToConsDef cons_def,ParsedConstructorToConsDef nil_def,pre_def_symbols);
+make_unit_definition :: Ident *{#PredefinedSymbol} -> (!TypeDef TypeRhs,!ConsDef,!.{#PredefinedSymbol})
+make_unit_definition pre_mod_id pre_def_symbols
+ # unit_cons_ident = predefined_idents.[PD_UnitConsSymbol]
+ unit_cons_symb = {ds_ident = unit_cons_ident, ds_arity=0 ,ds_index = PD_UnitConsSymbol-FirstConstructorPredefinedSymbolIndex}
+ (unit_type_def, pre_def_symbols) = make_type_def PD_UnitType [] (AlgType [unit_cons_symb]) pre_def_symbols
+ unit_cons_def = {pc_cons_ident = unit_cons_ident, pc_cons_arity = 0, pc_arg_types = [], pc_args_strictness=NotStrict, pc_context = [],
+ pc_cons_prio = NoPrio, pc_exi_vars = [], pc_cons_pos = PreDefPos pre_mod_id}
+ = (unit_type_def,ParsedConstructorToConsDef unit_cons_def,pre_def_symbols);
+
buildPredefinedModule :: !Bool !*PredefinedSymbols -> (!ScannedModule, !.PredefinedSymbols)
buildPredefinedModule support_dynamics pre_def_symbols
# type_var_ident = predefined_idents.[PD_TypeVar_a0]
@@ -454,7 +468,11 @@ buildPredefinedModule support_dynamics pre_def_symbols
(strict_def, pre_def_symbols) = make_type_def PD_StrictArrayType [type_var] (AbstractType cAllBitsClear) pre_def_symbols
(unboxed_def, pre_def_symbols) = make_type_def PD_UnboxedArrayType [type_var] (AbstractType cAllBitsClear) pre_def_symbols
- (type_defs, cons_defs, pre_def_symbols) = add_tuple_defs pre_mod_ident MaxTupleArity [array_def,strict_def,unboxed_def] [] pre_def_symbols
+ (unit_type_def,unit_cons_def,pre_def_symbols) = make_unit_definition pre_mod_ident pre_def_symbols
+
+ array_and_unit_type_defs = [array_def,strict_def,unboxed_def,unit_type_def]
+ (type_defs, cons_defs, pre_def_symbols) = add_tuple_defs pre_mod_ident MaxTupleArity array_and_unit_type_defs [unit_cons_def] pre_def_symbols
+
alias_dummy_type = make_identity_fun_type alias_dummy_ident type_var
(def_classes, def_members) = make_predefined_classes_and_members support_dynamics
= ({ mod_ident = pre_mod_ident, mod_modification_time = "", mod_type = MK_System, mod_imports = [],mod_foreign_exports=[], mod_imported_objects = [],