diff options
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/trans.dcl | 4 | ||||
-rw-r--r-- | frontend/trans.icl | 25 |
2 files changed, 13 insertions, 16 deletions
diff --git a/frontend/trans.dcl b/frontend/trans.dcl index 67fe32c..640fc0a 100644 --- a/frontend/trans.dcl +++ b/frontend/trans.dcl @@ -24,6 +24,4 @@ partitionateFunctions :: !*{# FunDef} ![IndexRange] -> (!*{! Group}, !*{# FunDef convertSymbolType :: !{# CommonDefs} !SymbolType !*{#{# CheckedTypeDef}} !ImportedConstructors !*TypeHeaps !*VarHeap -> (!SymbolType, !*{#{# CheckedTypeDef}}, !ImportedConstructors, !*TypeHeaps, !*VarHeap) -// MV .. -addTypesOfDictionaries :: w:(a x:CommonDefs) .[TypeContext] u:[AType] -> v:[AType] | Array .a, [u <= v, w <= x]; -// .. MV
\ No newline at end of file +addTypesOfDictionaries :: !{#CommonDefs} ![TypeContext] ![AType] -> [AType] diff --git a/frontend/trans.icl b/frontend/trans.icl index c139943..8045b0b 100644 --- a/frontend/trans.icl +++ b/frontend/trans.icl @@ -692,7 +692,7 @@ where transform (Selection opt_type expr selectors) ro ti # (expr, ti) = transform expr ro ti - = transformSelection opt_type selectors expr ti + = transformSelection opt_type selectors expr ro ti transform (DynamicExpr dynamic_expr) ro ti # (dynamic_expr, ti) = transform dynamic_expr ro ti = (DynamicExpr dynamic_expr, ti) @@ -1416,10 +1416,7 @@ where # ({fun_type=Yes symbol_type}, fun_defs) = fun_defs![glob_object] = (symbol_type, fun_defs, fun_heap) # {ft_type} = ro.ro_imported_funs.[glob_module].[glob_object] -// MV .. st_args = addTypesOfDictionaries ro.ro_common_defs ft_type.st_context ft_type.st_args -// was: st_args = mapAppend (add_types_of_dictionary ro.ro_common_defs) ft_type.st_context ft_type.st_args -// .. MV = ({ft_type & st_args = st_args, st_arity = length st_args, st_context = [] }, fun_defs, fun_heap) get_producer_type {symb_kind=SK_GeneratedFunction fun_ptr _} ro fun_defs fun_heap @@ -1789,8 +1786,15 @@ transformApplication app [] ro ti transformApplication app extra_args ro ti = (App app @ extra_args, ti) -transformSelection opt_type [RecordSelection _ field_index : selectors] (App {app_symb={symb_kind= SK_Constructor _ }, app_args}) ti - = transform_selections selectors (app_args !! field_index) ti +transformSelection No s=:[RecordSelection _ field_index : selectors] + app=:(App {app_symb={symb_kind= SK_Constructor {glob_object, glob_module} }, app_args}) + ro ti=:{ti_var_heap, ti_type_heaps} + # cons_def + = ro.ro_common_defs.[glob_module].com_cons_defs.[glob_object] + | isEmpty [i \\ {at_annotation=AN_Strict} <- cons_def.cons_type.st_args & i<-[0..] + | i<>field_index] + = transform_selections selectors (app_args !! field_index) ti + = (Selection No app s, ti) where transform_selections [] expr ti = (expr, ti) @@ -1798,7 +1802,7 @@ where = transform_selections selectors (app_args !! field_index) ti transform_selections selectors expr ti = (Selection No expr selectors, ti) -transformSelection opt_type selectors expr ti +transformSelection opt_type selectors expr _ ti = (Selection opt_type expr selectors, ti) // XXX store linear_bits and cc_args together ? @@ -2029,8 +2033,7 @@ convertSymbolType common_defs st imported_types collected_imports type_heaps va , ets_var_heap :: !.VarHeap } -// MV .. -addTypesOfDictionaries :: w:(a x:CommonDefs) .[TypeContext] u:[AType] -> v:[AType] | Array .a, [u <= v, w <= x]; +addTypesOfDictionaries :: !{#CommonDefs} ![TypeContext] ![AType] -> [AType] addTypesOfDictionaries common_defs type_contexts type_args = mapAppend (add_types_of_dictionary common_defs) type_contexts type_args where @@ -2039,7 +2042,6 @@ where dict_type_symb = MakeTypeSymbIdent { glob_object = ds_index, glob_module = glob_module } ds_ident class_arity = { at_attribute = TA_Multi, at_annotation = AN_Strict, at_type = TA dict_type_symb ( map (\type -> { at_attribute = TA_Multi, at_annotation = AN_None, at_type = type }) tc_types) } -// .. MV class expandSynTypes a :: !{# CommonDefs} !a !*ExpandTypeState -> (!a, !*ExpandTypeState) @@ -2051,11 +2053,8 @@ instance expandSynTypes SymbolType where expandSynTypes common_defs st=:{st_args,st_result,st_context} ets # ((st_args,st_result), ets) = expandSynTypes common_defs (st_args,st_result) ets -// MV .. # st_args = addTypesOfDictionaries common_defs st_context st_args -// was: # st_args = mapAppend (add_types_of_dictionary common_defs) st_context st_args = ({st & st_args = st_args, st_result = st_result, st_arity = length st_args, st_context = [] }, ets) -// .. MV add_types_of_dictionary common_defs {tc_class = {glob_module, glob_object={ds_index}}, tc_types} # {class_arity, class_dictionary={ds_ident,ds_index}} = common_defs.[glob_module].com_class_defs.[ds_index] |