diff options
author | sjakie | 2001-10-08 11:49:17 +0000 |
---|---|---|
committer | sjakie | 2001-10-08 11:49:17 +0000 |
commit | 6699a7ce6ee7c0c68deb75d68adc3dddd1e790b2 (patch) | |
tree | 4d8c043f0072195b3b2cc28d555fd01ac7ddf896 /frontend/comparedefimp.icl | |
parent | generate and export all labels for records and constructors when ExportLocalL... (diff) |
universally quantified attribute variables in typedefs added
bug fix: combination of caching and omitted clasdefs
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@833 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/comparedefimp.icl')
-rw-r--r-- | frontend/comparedefimp.icl | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/frontend/comparedefimp.icl b/frontend/comparedefimp.icl index a4baf5d..466f07c 100644 --- a/frontend/comparedefimp.icl +++ b/frontend/comparedefimp.icl @@ -15,24 +15,16 @@ instance_def_error = "instance definition in the impl module conflicts with the compareError message pos error_admin = popErrorAdmin (checkError "" message (pushErrorAdmin pos error_admin)) -markCheckedDefinitions :: !Int ![Index] -> *{# Bool} -markCheckedDefinitions nr_of_defs not_to_be_checked - # marks = createArray nr_of_defs True - = foldSt mark_def not_to_be_checked marks -where - mark_def index marks = { marks & [index] = False } - -compareTypeDefs :: !{# Int} ![Index] !{# CheckedTypeDef} !{# ConsDef} !u:{# CheckedTypeDef} !v:{# ConsDef} !*CompareState +compareTypeDefs :: !{# Int} !{#Bool} !{# CheckedTypeDef} !{# ConsDef} !u:{# CheckedTypeDef} !v:{# ConsDef} !*CompareState -> (!u:{# CheckedTypeDef}, !v:{# ConsDef}, !*CompareState) compareTypeDefs dcl_sizes copied_from_dcl dcl_type_defs dcl_cons_defs icl_type_defs icl_cons_defs comp_st # nr_of_dcl_types = dcl_sizes.[cTypeDefs] - to_be_checked = markCheckedDefinitions nr_of_dcl_types copied_from_dcl - = iFoldSt (compare_type_defs to_be_checked dcl_type_defs dcl_cons_defs) 0 nr_of_dcl_types (icl_type_defs, icl_cons_defs, comp_st) + = iFoldSt (compare_type_defs copied_from_dcl dcl_type_defs dcl_cons_defs) 0 nr_of_dcl_types (icl_type_defs, icl_cons_defs, comp_st) where compare_type_defs :: !{# Bool} !{# CheckedTypeDef} !{# ConsDef} !Index (!u:{# CheckedTypeDef}, !v:{# ConsDef}, !*CompareState) -> (!u:{# CheckedTypeDef}, !v:{# ConsDef}, !*CompareState) - compare_type_defs to_be_checked dcl_type_defs dcl_cons_defs type_index (icl_type_defs, icl_cons_defs, comp_st=:{comp_type_var_heap,comp_attr_var_heap}) - | to_be_checked.[type_index] + compare_type_defs copied_from_dcl dcl_type_defs dcl_cons_defs type_index (icl_type_defs, icl_cons_defs, comp_st=:{comp_type_var_heap,comp_attr_var_heap}) + | not copied_from_dcl.[type_index] # dcl_type_def = dcl_type_defs.[type_index] (icl_type_def, icl_type_defs) = icl_type_defs![type_index] comp_type_var_heap = initialyseATypeVars dcl_type_def.td_args comp_type_var_heap @@ -102,17 +94,16 @@ where = (False, icl_cons_defs, comp_st) -compareClassDefs :: !{# Int} ![Index] !{# ClassDef} !{# MemberDef} !u:{# ClassDef} !v:{# MemberDef} !*CompareState +compareClassDefs :: !{#Int} {#Bool} !{# ClassDef} !{# MemberDef} !u:{# ClassDef} !v:{# MemberDef} !*CompareState -> (!u:{# ClassDef}, !v:{# MemberDef}, !*CompareState) compareClassDefs dcl_sizes copied_from_dcl dcl_class_defs dcl_member_defs icl_class_defs icl_member_defs comp_st # nr_of_dcl_classes = dcl_sizes.[cClassDefs] - to_be_checked = markCheckedDefinitions nr_of_dcl_classes copied_from_dcl - = iFoldSt (compare_class_defs to_be_checked dcl_class_defs dcl_member_defs) 0 nr_of_dcl_classes (icl_class_defs, icl_member_defs, comp_st) + = iFoldSt (compare_class_defs copied_from_dcl dcl_class_defs dcl_member_defs) 0 nr_of_dcl_classes (icl_class_defs, icl_member_defs, comp_st) where compare_class_defs :: !{# Bool} {# ClassDef} {# MemberDef} !Index (!u:{# ClassDef}, !v:{# MemberDef}, !*CompareState) -> (!u:{# ClassDef}, v:{# MemberDef}, !*CompareState) - compare_class_defs to_be_checked dcl_class_defs dcl_member_defs class_index (icl_class_defs, icl_member_defs, comp_st) - | to_be_checked.[class_index] + compare_class_defs copied_from_dcl dcl_class_defs dcl_member_defs class_index (icl_class_defs, icl_member_defs, comp_st) + | not copied_from_dcl.[class_index] # dcl_class_def = dcl_class_defs.[class_index] (icl_class_def, icl_class_defs) = icl_class_defs![class_index] # (ok, icl_member_defs, comp_st) = compare_classes dcl_class_def dcl_member_defs icl_class_def icl_member_defs comp_st |