diff options
author | johnvg | 2013-04-08 09:16:09 +0000 |
---|---|---|
committer | johnvg | 2013-04-08 09:16:09 +0000 |
commit | 9894d082bd5a0f3c74a2874f9c9a78fd89a089a5 (patch) | |
tree | 9d851f5631f8981893af610d96371b4afd2d1009 /frontend/overloading.icl | |
parent | update derive class for deriving generic functions in class context (from iTa... (diff) |
add generic function dependencies for generic function definitions,
add generic case definitions in definition modules for the types used to make the generic representation,
in generic case definitions in definition modules specify what generic info and dependencies are used
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@2227 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/overloading.icl')
-rw-r--r-- | frontend/overloading.icl | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/frontend/overloading.icl b/frontend/overloading.icl index f216b8f..a4e42e8 100644 --- a/frontend/overloading.icl +++ b/frontend/overloading.icl @@ -986,11 +986,16 @@ convertOverloadedCall defs contexts {symb_ident,symb_kind = SK_OverloadedFunctio = ({heaps & hp_expression_heap = heaps.hp_expression_heap <:= (expr_ptr, inst_expr)}, ptrs, error) where adjust_member_application defs contexts {me_ident,me_offset,me_class} (CA_Instance red_contexts) class_exprs heaps_and_ptrs - # ({glob_module,glob_object}, red_contexts_appls) = find_instance_of_member me_class me_offset red_contexts - (exprs, heaps_and_ptrs) = convertClassApplsToExpressions defs contexts red_contexts_appls heaps_and_ptrs - class_exprs = exprs ++ class_exprs - = (EI_Instance { glob_module = glob_module, glob_object = { ds_ident = me_ident, ds_arity = length class_exprs, ds_index = glob_object }} class_exprs, - heaps_and_ptrs) + # (glob_module,cim_index,cim_ident,red_contexts_appls) = find_instance_of_member me_class me_offset red_contexts + #! (exprs, heaps_and_ptrs) = convertClassApplsToExpressions defs contexts red_contexts_appls heaps_and_ptrs + class_exprs = exprs ++ class_exprs + n_class_exprs = length class_exprs + | cim_index>=0 + = (EI_Instance {glob_module=glob_module, glob_object={ds_ident=me_ident, ds_arity=n_class_exprs, ds_index=cim_index}} class_exprs, + heaps_and_ptrs) + # index = -1 - cim_index + = (EI_Instance {glob_module=glob_module, glob_object={ds_ident=cim_ident, ds_arity=n_class_exprs, ds_index=index}} class_exprs, + heaps_and_ptrs) adjust_member_application defs contexts {me_ident,me_offset,me_class={glob_module,glob_object}} (CA_Context tc) class_exprs (heaps=:{hp_type_heaps}, ptrs) # (class_context, address, hp_type_heaps) = determineContextAddress contexts defs tc hp_type_heaps # {class_dictionary={ds_index,ds_ident}} = defs.[glob_module].com_class_defs.[glob_object] @@ -1003,13 +1008,13 @@ where adjust_member_application defs contexts _ (CA_LocalTypeCode new_var_ptr) _ heaps_and_ptrs = (EI_TypeCode (TCE_Var new_var_ptr), heaps_and_ptrs) - find_instance_of_member :: (Global Int) Int ReducedContexts -> ((Global Int),[ClassApplication]) + find_instance_of_member :: (Global Int) Int ReducedContexts -> (!Index,!Index,!Ident,[ClassApplication]) find_instance_of_member me_class me_offset { rcs_class_context = {rc_class_index, rc_inst_module, rc_inst_members, rc_red_contexts}, rcs_constraints_contexts} - | rc_class_index.gi_module == me_class.glob_module && rc_class_index.gi_index == me_class.glob_object - # {cim_index,cim_arity} = rc_inst_members.[me_offset] + | rc_class_index.gi_module == me_class.glob_module && rc_class_index.gi_index == me_class.glob_object + # {cim_index,cim_arity,cim_ident} = rc_inst_members.[me_offset] | cim_index<0 - = ({ glob_module = cim_arity, glob_object = -1 - cim_index }, rc_red_contexts) - = ({ glob_module = rc_inst_module, glob_object = cim_index }, rc_red_contexts) + = (cim_arity, cim_index, cim_ident, rc_red_contexts) + = (rc_inst_module, cim_index, cim_ident, rc_red_contexts) = find_instance_of_member_in_constraints me_class me_offset rcs_constraints_contexts where find_instance_of_member_in_constraints me_class me_offset [ CA_Instance rcs=:{rcs_constraints_contexts} : rcss ] |