aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/check.icl57
-rw-r--r--frontend/comparedefimp.icl18
2 files changed, 33 insertions, 42 deletions
diff --git a/frontend/check.icl b/frontend/check.icl
index d3f19cc..1a2f5aa 100644
--- a/frontend/check.icl
+++ b/frontend/check.icl
@@ -792,7 +792,7 @@ ident_for_errors_from_fun_symb_and_fun_kind fun_symb _
checkFunction :: !FunDef !Index !FunctionOrMacroIndex !Level !Int !*{#FunDef} !*ExpressionInfo !*Heaps !*CheckState
-> (!FunDef,!*{#FunDef},!*ExpressionInfo,!*Heaps,!*CheckState);
checkFunction fun_def=:{fun_symb,fun_pos,fun_body,fun_type,fun_kind} mod_index fun_index def_level local_functions_index_offset
- fun_defs e_info=:{ef_type_defs,ef_modules,ef_class_defs,ef_is_macro_fun} heaps=:{hp_var_heap,hp_expression_heap,hp_type_heaps} cs=:{cs_error}
+ fun_defs e_info=:{ef_type_defs,ef_modules,ef_class_defs,ef_is_macro_fun} heaps=:{hp_var_heap,hp_expression_heap,hp_type_heaps} cs=:{cs_error}
# function_ident_for_errors = ident_for_errors_from_fun_symb_and_fun_kind fun_symb fun_kind
# cs = {cs & cs_error = pushErrorAdmin (newPosition function_ident_for_errors fun_pos) cs_error}
@@ -1705,16 +1705,11 @@ compute_used_module_nrs (mod_index, _, _) (mod_nr_accu, dcl_modules)
checkDclModuleWithinComponent dcl_imported_module_numbers component_nr is_on_cycle modules_in_component_set
super_components imports_ikh mod_index
(expl_imp_infos, dcl_modules, icl_functions, macro_defs, heaps, cs=:{cs_symbol_table})
- # ({dcl_name}, dcl_modules)
- = dcl_modules![mod_index]
- (mod_entry, cs_symbol_table)
- = readPtr dcl_name.id_info cs_symbol_table
- cs
- = { cs & cs_symbol_table = cs_symbol_table }
- ({ ste_kind = STE_Module mod, ste_index })
- = mod_entry
- cs_symbol_table
- = writePtr dcl_name.id_info { mod_entry & ste_kind = STE_ClosedModule } cs.cs_symbol_table
+ # ({dcl_name}, dcl_modules) = dcl_modules![mod_index]
+ (mod_entry, cs_symbol_table) = readPtr dcl_name.id_info cs_symbol_table
+ cs = { cs & cs_symbol_table = cs_symbol_table }
+ ({ ste_kind = STE_Module mod, ste_index }) = mod_entry
+ cs_symbol_table = writePtr dcl_name.id_info { mod_entry & ste_kind = STE_ClosedModule } cs.cs_symbol_table
= checkDclModule dcl_imported_module_numbers super_components.[mod_index] imports_ikh component_nr
is_on_cycle modules_in_component_set
mod ste_index expl_imp_infos dcl_modules icl_functions macro_defs heaps
@@ -1746,7 +1741,10 @@ renumber_icl_module mod_type icl_global_function_range icl_instance_range nr_of_
#! first_not_exported_global_function_index = size dcl_mod.dcl_functions
# n_dcl_instances = dcl_instances.ir_to-dcl_instances.ir_from
- # local_functions_index_offset = n_dcl_instances;
+ #! dcl_specials = dcl_mod.dcl_specials
+ # n_dcl_specials = dcl_specials.ir_to-dcl_specials.ir_from
+
+ # local_functions_index_offset = n_dcl_instances + n_dcl_specials
# dcl_mod = case dcl_mod of
dcl_mod=:{dcl_macro_conversions=Yes conversion_table}
@@ -1765,13 +1763,10 @@ renumber_icl_module mod_type icl_global_function_range icl_instance_range nr_of_
# first_macro_index = def_macro_indices.ir_from+local_functions_index_offset
# end_macro_indexes = def_macro_indices.ir_to+local_functions_index_offset
# def_macro_indices={ir_from=first_macro_index,ir_to=end_macro_indexes}
-
- # icl_instances_ranges = [dcl_instances,{ir_from=icl_instance_range.ir_from+n_dcl_instances,ir_to=icl_instance_range.ir_to}]
+ # icl_instances_ranges = [dcl_instances,{ir_from=icl_instance_range.ir_from+n_dcl_specials+n_dcl_instances,ir_to=icl_instance_range.ir_to+n_dcl_specials}]
= (icl_global_functions_ranges,icl_instances_ranges,n_exported_global_functions,local_functions_index_offset,def_macro_indices,icl_functions,icl_common,local_defs,dcl_modules)
-
where
-
add_dummy_specialized_functions MK_Main dcl_mod icl_functions
= icl_functions
add_dummy_specialized_functions _ {dcl_specials={ir_from,ir_to}} icl_functions
@@ -2053,7 +2048,7 @@ check_module2 mod_name mod_modification_time mod_imported_objects mod_imports mo
ef_cons_defs = icl_common.com_cons_defs, ef_member_defs = icl_common.com_member_defs, ef_generic_defs = icl_common.com_generic_defs,
ef_modules = dcl_modules, ef_macro_defs=macro_defs, ef_is_macro_fun = False }
- (icl_functions, e_info, heaps, cs) = checkAndPartitionateIclMacros main_dcl_module_n def_macro_indices local_functions_index_offset icl_functions e_info heaps cs
+ # (icl_functions, e_info, heaps, cs) = checkAndPartitionateIclMacros main_dcl_module_n def_macro_indices local_functions_index_offset icl_functions e_info heaps cs
(icl_functions, e_info, heaps, cs) = checkGlobalFunctionsInRanges icl_global_functions_ranges main_dcl_module_n local_functions_index_offset icl_functions e_info heaps cs
cs = check_start_rule mod_type mod_name icl_global_functions_ranges cs
@@ -2079,10 +2074,9 @@ check_module2 mod_name mod_modification_time mod_imported_objects mod_imports mo
# class_instances = icl_common.com_instance_defs
- (new_nr_of_functions, dcl_modules, icl_functions, var_heap, th_vars, expr_heap)
+ (icl_specials,dcl_modules, icl_functions, var_heap, th_vars, expr_heap)
= collect_specialized_functions_in_dcl_module mod_type nr_of_functions main_dcl_module_n dcl_modules icl_functions hp_var_heap th_vars hp_expression_heap
- icl_specials = {ir_from = nr_of_functions,ir_to = new_nr_of_functions}
icl_functions = copy_instance_types instance_types icl_functions
(dcl_modules, class_instances, icl_functions, cs_predef_symbols)
@@ -2160,29 +2154,27 @@ check_module2 mod_name mod_modification_time mod_imported_objects mod_imports mo
= (modules, macro_and_fun_defs, macro_defs, heaps, cs)
collect_specialized_functions_in_dcl_module :: ModuleKind !Index !Int !*{# DclModule} !*{# FunDef} !*VarHeap !*TypeVarHeap !*ExpressionHeap
- -> (!Index, !*{# DclModule},!*{# FunDef},!*VarHeap,!*TypeVarHeap,!*ExpressionHeap)
+ -> (!IndexRange,!*{# DclModule},!*{# FunDef},!*VarHeap,!*TypeVarHeap,!*ExpressionHeap)
collect_specialized_functions_in_dcl_module MK_Main first_free_index main_dcl_module_n modules icl_functions var_heap type_var_heap expr_heap
- = (first_free_index, modules, icl_functions, var_heap, type_var_heap, expr_heap)
+ = ({ir_from=first_free_index,ir_to=first_free_index},modules, icl_functions, var_heap, type_var_heap, expr_heap)
collect_specialized_functions_in_dcl_module _ first_free_index main_dcl_module_n modules icl_functions var_heap type_var_heap expr_heap
# (dcl_mod, modules) = modules![main_dcl_module_n]
- # {dcl_specials,dcl_functions,dcl_common} = dcl_mod
- # (icl_functions, last_index, (var_heap, type_var_heap, expr_heap))
- = collect_specialized_functions dcl_specials.ir_from dcl_specials.ir_to dcl_functions
- (icl_functions, first_free_index, (var_heap, type_var_heap, expr_heap))
- = (last_index, modules, icl_functions, var_heap, type_var_heap, expr_heap)
+ # {dcl_specials=dcl_specials=:{ir_from,ir_to},dcl_functions,dcl_common} = dcl_mod
+ # (icl_functions, (var_heap, type_var_heap, expr_heap))
+ = collect_specialized_functions ir_from ir_to dcl_functions (icl_functions, (var_heap, type_var_heap, expr_heap))
+ = (dcl_specials,modules, icl_functions, var_heap, type_var_heap, expr_heap)
where
- collect_specialized_functions spec_index last_index dcl_fun_types (icl_functions, next_fun_index, heaps)
+ collect_specialized_functions spec_index last_index dcl_fun_types (icl_functions, heaps)
| spec_index < last_index
# {ft_type,ft_specials = SP_FunIndex decl_index} = dcl_fun_types.[spec_index]
// icl_index = conversion_table.[decl_index]
icl_index = decl_index
(icl_fun, icl_functions) = icl_functions![icl_index]
- (new_fun_def, heaps) = build_function next_fun_index icl_fun icl_index ft_type heaps
- (icl_functions, next_fun_index, heaps)
- = collect_specialized_functions (inc spec_index) last_index dcl_fun_types /*conversion_table*/ (icl_functions, inc next_fun_index, heaps)
+ (new_fun_def, heaps) = build_function spec_index icl_fun icl_index ft_type heaps
+ (icl_functions, heaps) = collect_specialized_functions (inc spec_index) last_index dcl_fun_types (icl_functions, heaps)
# icl_functions = {icl_functions & [spec_index]=new_fun_def}
- = (icl_functions, next_fun_index, heaps)
- = (icl_functions, next_fun_index, heaps)
+ = (icl_functions, heaps)
+ = (icl_functions, heaps)
build_function new_fun_index fun_def=:{fun_symb, fun_arity, fun_body = CheckedBody {cb_args}, fun_info} fun_index fun_type
(var_heap, type_var_heap, expr_heap)
@@ -2713,6 +2705,7 @@ checkDclModule dcl_imported_module_numbers super_components imports_ikh componen
#!nr_of_members = count_members mod_index dcl_common.com_instance_defs dcl_common.com_class_defs modules
# nr_of_dcl_functions_and_instances = nr_of_dcl_functions+nr_of_members
+
(nr_of_dcl_funs_insts_and_specs, rev_function_list, rev_special_defs, com_type_defs, com_class_defs, modules, heaps, cs)
= checkDclFunctions mod_index nr_of_dcl_functions_and_instances mod_defs.def_funtypes
dcl_common.com_type_defs dcl_common.com_class_defs modules heaps cs
diff --git a/frontend/comparedefimp.icl b/frontend/comparedefimp.icl
index 1d5c92e..1eff2a9 100644
--- a/frontend/comparedefimp.icl
+++ b/frontend/comparedefimp.icl
@@ -367,8 +367,8 @@ compareDefImp :: !Int !DclModule !Int !*IclModule !*{#*{#FunDef}} !*Heaps !*Erro
compareDefImp main_dcl_module_n main_dcl_module=:{dcl_macro_conversions=No} n_exported_global_functions icl_module macro_defs heaps error_admin
= (icl_module, macro_defs,heaps, error_admin)
compareDefImp main_dcl_module_n main_dcl_module=:{dcl_macro_conversions=Yes macro_conversion_table} n_exported_global_functions icl_module macro_defs heaps error_admin
-// | print_function_body_array icl_module.icl_functions
-// && print_function_body_array macro_defs.[main_dcl_module_n]
+// | Trace_array icl_module.icl_functions
+// && Trace_array macro_defs.[main_dcl_module_n]
# {dcl_functions,dcl_macros,dcl_common} = main_dcl_module
{icl_common, icl_functions, icl_copied_from_dcl = {copied_type_defs,copied_class_defs}}
@@ -1202,15 +1202,13 @@ instance <<< Priority
(<<<) file (Prio LeftAssoc i) = file <<< "Prio LeftAssoc " <<< i
(<<<) file (Prio RightAssoc i) = file <<< "Prio RightAssoc " <<< i
(<<<) file (Prio NoAssoc i) = file <<< "Prio NoAssoc " <<< i
-*/
-/*
-print_function_body_array function_bodies
- = print_function_bodies 0
+Trace_array a
+ = trace_array 0
where
- print_function_bodies i
- | i<size function_bodies
- = Trace_tn i && Trace_tn function_bodies.[i] && print_function_bodies (i+1)
+ trace_array i
+ | i<size a
+ = Trace_tn i && Trace_tn a.[i] && trace_array (i+1)
= True;
Trace_tn d
@@ -1223,4 +1221,4 @@ file_to_true file = code {
pushB TRUE
.end
};
-*/
+*/ \ No newline at end of file