aboutsummaryrefslogtreecommitdiff
path: root/frontend/comparedefimp.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/comparedefimp.icl')
-rw-r--r--frontend/comparedefimp.icl38
1 files changed, 25 insertions, 13 deletions
diff --git a/frontend/comparedefimp.icl b/frontend/comparedefimp.icl
index 27ecbca..741aa69 100644
--- a/frontend/comparedefimp.icl
+++ b/frontend/comparedefimp.icl
@@ -84,9 +84,11 @@ class CorrespondenceNumber a where
initial_hwn hwn_heap = { hwn_heap = hwn_heap, hwn_number = 0 }
-compareDefImp :: !{!FunctionBody} !*{# DclModule} !*IclModule !*Heaps !*ErrorAdmin
+compareDefImp :: !{#Int} !{!FunctionBody} !*{# DclModule} !*IclModule !*Heaps !*ErrorAdmin
-> (!.{# DclModule}, !.IclModule,!.Heaps,!.ErrorAdmin)
-compareDefImp untransformed dcl_modules icl_module heaps error_admin
+compareDefImp size_uncopied_icl_defs untransformed dcl_modules icl_module heaps error_admin
+ // icl definitions with indices >= size_uncopied_icl_defs.[def_type] don't have to be compared,
+ // because they are copies of definitions that appear exclusively in the dcl module
# (main_dcl_module, dcl_modules) = dcl_modules![cIclModIndex]
= case main_dcl_module.dcl_conversions of
No -> (dcl_modules, icl_module, heaps, error_admin)
@@ -110,22 +112,28 @@ compareDefImp untransformed dcl_modules icl_module heaps error_admin
, tc_visited_syn_types = createArray (size dcl_common.com_type_defs) False
}
(icl_com_type_defs, tc_state, error_admin)
- = compareWithConversions conversion_table.[cTypeDefs]
+ = compareWithConversions
+ size_uncopied_icl_defs.[cTypeDefs] conversion_table.[cTypeDefs]
dcl_common.com_type_defs icl_com_type_defs tc_state error_admin
(icl_com_cons_defs, tc_state, error_admin)
- = compareWithConversions conversion_table.[cConstructorDefs]
+ = compareWithConversions
+ size_uncopied_icl_defs.[cConstructorDefs] conversion_table.[cConstructorDefs]
dcl_common.com_cons_defs icl_com_cons_defs tc_state error_admin
(icl_com_selector_defs, tc_state, error_admin)
- = compareWithConversions conversion_table.[cSelectorDefs]
+ = compareWithConversions
+ size_uncopied_icl_defs.[cSelectorDefs] conversion_table.[cSelectorDefs]
dcl_common.com_selector_defs icl_com_selector_defs tc_state error_admin
(icl_com_class_defs, tc_state, error_admin)
- = compareWithConversions conversion_table.[cClassDefs]
+ = compareWithConversions
+ size_uncopied_icl_defs.[cClassDefs] conversion_table.[cClassDefs]
dcl_common.com_class_defs icl_com_class_defs tc_state error_admin
(icl_com_member_defs, tc_state, error_admin)
- = compareWithConversions conversion_table.[cMemberDefs]
+ = compareWithConversions
+ size_uncopied_icl_defs.[cMemberDefs] conversion_table.[cMemberDefs]
dcl_common.com_member_defs icl_com_member_defs tc_state error_admin
(icl_com_instance_defs, tc_state, error_admin)
- = compareWithConversions conversion_table.[cInstanceDefs]
+ = compareWithConversions
+ size_uncopied_icl_defs.[cInstanceDefs] conversion_table.[cInstanceDefs]
dcl_common.com_instance_defs icl_com_instance_defs tc_state error_admin
(icl_functions, hp_var_heap, hp_expression_heap, tc_state, error_admin)
= compareMacrosWithConversion conversion_table.[cMacroDefs] dcl_macros untransformed
@@ -151,10 +159,11 @@ compareDefImp untransformed dcl_modules icl_module heaps error_admin
# new = createArray size (abort "don't make that array strict !")
= iFoldSt (\i (dst, src=:{[i]=src_i}) -> ({ dst & [i] = src_i }, src)) 0 size (new, original)
-compareWithConversions conversions dclDefs iclDefs tc_state error_admin
- = iFoldSt (compareWithConversion conversions dclDefs) 0 (size conversions) (iclDefs, tc_state, error_admin)
+compareWithConversions size_uncopied_icl_defs conversions dclDefs iclDefs tc_state error_admin
+ = iFoldSt (compareWithConversion size_uncopied_icl_defs conversions dclDefs) 0 (size conversions)
+ (iclDefs, tc_state, error_admin)
-compareWithConversion :: !{#Int} !(b c) !Int !(!u:(b c), !*TypesCorrespondState, !*ErrorAdmin)
+compareWithConversion :: !Int !{#Int} !(b c) !Int !(!u:(b c), !*TypesCorrespondState, !*ErrorAdmin)
-> (!v:(b c), !.TypesCorrespondState, !.ErrorAdmin)
//1.3
| Array .b & getIdentPos , select_u , t_corresponds , uselect_u c, [u <= v]
@@ -162,8 +171,11 @@ compareWithConversion :: !{#Int} !(b c) !Int !(!u:(b c), !*TypesCorrespondState,
/*2.0
| Array b c & t_corresponds, getIdentPos c, [u <= v]
0.2*/
-compareWithConversion conversions dclDefs dclIndex (iclDefs, tc_state, error_admin)
- # (iclDef, iclDefs) = iclDefs![conversions.[dclIndex]]
+compareWithConversion size_uncopied_icl_defs conversions dclDefs dclIndex (iclDefs, tc_state, error_admin)
+ # icl_index = conversions.[dclIndex]
+ | icl_index>=size_uncopied_icl_defs
+ = (iclDefs, tc_state, error_admin)
+ # (iclDef, iclDefs) = iclDefs![icl_index]
(corresponds, tc_state) = t_corresponds dclDefs.[dclIndex] iclDef tc_state
| corresponds
= (iclDefs, tc_state, error_admin)