aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/check.icl132
-rw-r--r--frontend/checktypes.icl51
2 files changed, 120 insertions, 63 deletions
diff --git a/frontend/check.icl b/frontend/check.icl
index 5638cd7..1315b06 100644
--- a/frontend/check.icl
+++ b/frontend/check.icl
@@ -1225,34 +1225,35 @@ checkCommonDefinitions opt_icl_info module_index common modules heaps cs
= checkMemberTypes module_index opt_icl_info com_member_defs com_type_defs com_class_defs modules heaps cs
(com_instance_defs, com_type_defs, com_class_defs, com_member_defs, modules, heaps, cs)
= checkInstanceDefs module_index common.com_instance_defs com_type_defs com_class_defs com_member_defs modules heaps cs
-//AA..
(com_generic_defs, com_type_defs, com_class_defs, modules, heaps, cs)
= checkGenericDefs module_index opt_icl_info common.com_generic_defs com_type_defs com_class_defs modules heaps cs
(com_gencase_defs, com_generic_defs, com_type_defs, modules, heaps, cs)
= checkGenericCaseDefs module_index common.com_gencase_defs com_generic_defs com_type_defs modules heaps cs
-//..AA
-
+ | cs.cs_error.ea_ok
+ # (size_com_type_defs,com_type_defs) = usize com_type_defs
+ (size_com_selector_defs,com_selector_defs) = usize com_selector_defs
+ (size_com_cons_defs,com_cons_defs) = usize com_cons_defs
+ {hp_var_heap, hp_type_heaps=hp_type_heaps=:{th_vars} } = heaps
+ is_dcl = case opt_icl_info of No -> True ; Yes _ -> False
+ (new_type_defs, new_selector_defs, new_cons_defs,dictionary_info,com_type_defs,com_selector_defs, com_cons_defs, com_class_defs, modules, th_vars, hp_var_heap, cs_symbol_table)
+ = createClassDictionaries is_dcl module_index size_com_type_defs size_com_selector_defs size_com_cons_defs
+ com_type_defs com_selector_defs com_cons_defs com_class_defs modules th_vars hp_var_heap cs.cs_symbol_table
- (size_com_type_defs,com_type_defs) = usize com_type_defs
- (size_com_selector_defs,com_selector_defs) = usize com_selector_defs
- (size_com_cons_defs,com_cons_defs) = usize com_cons_defs
-
- {hp_var_heap, hp_type_heaps=hp_type_heaps=:{th_vars} } = heaps
- is_dcl = case opt_icl_info of No -> True ; Yes _ -> False
- (new_type_defs, new_selector_defs, new_cons_defs,dictionary_info,com_type_defs,com_selector_defs, com_cons_defs, com_class_defs, modules, th_vars, hp_var_heap, cs_symbol_table)
- = createClassDictionaries is_dcl module_index size_com_type_defs size_com_selector_defs size_com_cons_defs
- com_type_defs com_selector_defs com_cons_defs com_class_defs modules th_vars hp_var_heap cs.cs_symbol_table
-
- com_type_defs = array_plus_list com_type_defs new_type_defs
- com_selector_defs = array_plus_list com_selector_defs new_selector_defs
- com_cons_defs = array_plus_list com_cons_defs new_cons_defs
-
- common = {common & com_type_defs = com_type_defs, com_cons_defs = com_cons_defs, com_selector_defs = com_selector_defs, com_class_defs = com_class_defs,
- com_member_defs = com_member_defs, com_instance_defs = com_instance_defs,
- com_generic_defs = com_generic_defs, com_gencase_defs = com_gencase_defs}
-
- heaps = {heaps & hp_var_heap=hp_var_heap,hp_type_heaps={hp_type_heaps & th_vars=th_vars}}
- = (dictionary_info,common, modules, heaps, { cs & cs_symbol_table = cs_symbol_table })
+ com_type_defs = array_plus_list com_type_defs new_type_defs
+ com_selector_defs = array_plus_list com_selector_defs new_selector_defs
+ com_cons_defs = array_plus_list com_cons_defs new_cons_defs
+
+ common = {common & com_type_defs = com_type_defs, com_cons_defs = com_cons_defs, com_selector_defs = com_selector_defs, com_class_defs = com_class_defs,
+ com_member_defs = com_member_defs, com_instance_defs = com_instance_defs,
+ com_generic_defs = com_generic_defs, com_gencase_defs = com_gencase_defs}
+ heaps = {heaps & hp_var_heap=hp_var_heap,hp_type_heaps={hp_type_heaps & th_vars=th_vars}}
+ = (dictionary_info,common, modules, heaps, { cs & cs_symbol_table = cs_symbol_table })
+
+ # dictionary_info = { n_dictionary_types=0, n_dictionary_constructors=0, n_dictionary_selectors=0 }
+ common = {common & com_type_defs = com_type_defs, com_cons_defs = com_cons_defs, com_selector_defs = com_selector_defs, com_class_defs = com_class_defs,
+ com_member_defs = com_member_defs, com_instance_defs = com_instance_defs,
+ com_generic_defs = com_generic_defs, com_gencase_defs = com_gencase_defs}
+ = (dictionary_info,common, modules, heaps, cs)
collectCommonfinitions :: !(CollectedDefinitions ClassInstance a) -> (!*{# Int}, ![Declaration])
collectCommonfinitions {def_types,def_constructors,def_selectors,def_classes,def_members,def_instances, def_generic_cases, def_generics}
@@ -1967,9 +1968,16 @@ checkDclComponent components_array super_components expl_imp_indices mod_indices
(possibly_write_expl_imports_of_main_dcl_mod_to_file imports_ikh dcl_modules cs)
(dcl_modules, cs)
+
+ (dcls_common_defs, (dcl_modules, cs))
+ = mapSt (createCommonDefinitionsWithinComponent is_on_cycle) mod_indices (dcl_modules, cs)
+
+
(afterwards_info, (expl_imp_infos, dcl_modules, icl_functions, macro_defs, heaps, cs))
- = mapSt (checkDclModuleWithinComponent dcl_imported_module_numbers component_nr is_on_cycle modules_in_component_set super_components imports_ikh)
- mod_indices (expl_imp_infos, dcl_modules, icl_functions, macro_defs, heaps, cs)
+ = map2St (checkDclModuleWithinComponent dcl_imported_module_numbers component_nr is_on_cycle modules_in_component_set super_components imports_ikh)
+ mod_indices dcls_common_defs (expl_imp_infos, dcl_modules, icl_functions, macro_defs, heaps, cs)
+
+
| not cs.cs_error.ea_ok
-> (component_nr-1, expl_imp_infos, dcl_modules, icl_functions, macro_defs, heaps, cs)
@@ -2037,19 +2045,50 @@ compute_used_module_nrs (mod_index, _, _) (mod_nr_accu, dcl_modules)
= (addNr mod_index (numberSetUnion dcl_imported_module_numbers 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
+createCommonDefinitionsWithinComponent is_on_cycle mod_index (dcl_modules, cs=:{cs_symbol_table})
+ # (dcl_mod=:{dcl_name}, dcl_modules) = dcl_modules![mod_index]
+ (mod_entry, cs_symbol_table) = readPtr dcl_name.id_info cs_symbol_table
+ ({ ste_kind = STE_Module mod, ste_index }) = mod_entry
+ cs = { cs & cs_symbol_table = cs_symbol_table}
+ # dcl_common = createCommonDefinitions mod.mod_defs
+ #! first_type_index = size dcl_common.com_type_defs
+ # dcl_common = {dcl_common & com_class_defs = number_class_dictionaries 0 dcl_common.com_class_defs first_type_index}
+ with
+ number_class_dictionaries class_index class_defs index_type
+ | class_index < size class_defs
+ # class_defs = { class_defs & [class_index].class_dictionary.ds_index = index_type }
+ = number_class_dictionaries (inc class_index) class_defs (inc index_type)
+ = class_defs
+ | not is_on_cycle
+ = (dcl_common, (dcl_modules, cs))
+ # (dcl_common,dcl_common2) = copy_common_defs dcl_common
+ # dcl_modules = {dcl_modules & [mod_index].dcl_common=dcl_common2}
+ = (dcl_common, (dcl_modules, cs))
+ with
+ copy_common_defs :: !*CommonDefs -> (!*CommonDefs,!*CommonDefs)
+ copy_common_defs {com_type_defs,com_cons_defs,com_selector_defs,com_class_defs,com_member_defs,com_instance_defs,com_generic_defs,com_gencase_defs}
+ # (type_defs1,type_defs2) = arrayCopy com_type_defs
+ # (cons_defs1,cons_defs2) = arrayCopy com_cons_defs
+ # (selector_defs1,selector_defs2) = arrayCopy com_selector_defs
+ # (class_defs1,class_defs2) = arrayCopy com_class_defs
+ # (member_defs1,member_defs2) = arrayCopy com_member_defs
+ # (instance_defs1,instance_defs2) = arrayCopy com_instance_defs
+ # (generic_defs1,generic_defs2) = arrayCopy com_generic_defs
+ # (gencase_defs1,gencase_defs2) = arrayCopy com_gencase_defs
+ = ({com_type_defs=type_defs1,com_cons_defs=cons_defs1,com_selector_defs=selector_defs1,com_class_defs=class_defs1,com_member_defs=member_defs1,com_instance_defs=instance_defs1,com_generic_defs=generic_defs1,com_gencase_defs=gencase_defs1},
+ {com_type_defs=type_defs2,com_cons_defs=cons_defs2,com_selector_defs=selector_defs2,com_class_defs=class_defs2,com_member_defs=member_defs2,com_instance_defs=instance_defs2,com_generic_defs=generic_defs2,com_gencase_defs=gencase_defs2})
+
+checkDclModuleWithinComponent dcl_imported_module_numbers component_nr is_on_cycle modules_in_component_set super_components imports_ikh
+ mod_index dcl_common
(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
- = 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
- { cs & cs_symbol_table = cs_symbol_table }
-
+ cs = { cs & cs_symbol_table = writePtr dcl_name.id_info { mod_entry & ste_kind = STE_ClosedModule } cs_symbol_table}
+ # {mod_name,mod_defs={def_macro_indices,def_funtypes}} = mod
+ = checkDclModule2 dcl_imported_module_numbers super_components.[mod_index] imports_ikh component_nr is_on_cycle modules_in_component_set
+ mod_name dcl_common def_macro_indices def_funtypes ste_index expl_imp_infos dcl_modules icl_functions macro_defs heaps cs
+
renumber_icl_module :: ModuleKind IndexRange IndexRange IndexRange Index Int {#Int} (Optional {#{#Int}}) IndexRange *{#FunDef} *CommonDefs [Declaration] *{#DclModule} *ErrorAdmin
-> (![IndexRange],![IndexRange], ![IndexRange], !Int,!Index,!IndexRange,!*{#FunDef},!*CommonDefs,![Declaration],!*{#DclModule}, *ErrorAdmin);
renumber_icl_module mod_type icl_global_function_range icl_instance_range icl_generic_range nr_of_functions main_dcl_module_n icl_sizes dcl_conversions def_macro_indices icl_functions icl_common local_defs dcl_modules error
@@ -3275,26 +3314,39 @@ checkInstancesOfDclModule mod_index (nr_of_dcl_functions_and_instances, nr_of_dc
(inst_def, instance_defs) = instance_defs![ds_index]
(Yes symbol_type) = inst_def.ft_type
= { instance_defs & [ds_index] = { inst_def & ft_type = makeElemTypeOfArrayFunctionStrict inst_def.ft_type ins_offset offset_table } }
-
checkDclModule :: !NumberSet ![Int] !(IntKeyHashtable SolvedImports) !Int !Bool !LargeBitvect
!(Module (CollectedDefinitions ClassInstance IndexRange)) !Index !*ExplImpInfos !*{#DclModule} !*{#FunDef} !*{#*{#FunDef}} !*Heaps !*CheckState
-> (!(!Int,!Index,![FunType]), !(!*ExplImpInfos, !*{#DclModule}, !*{#FunDef},!*{#*{#FunDef}},!*Heaps, !*CheckState))
checkDclModule dcl_imported_module_numbers super_components imports_ikh component_nr is_on_cycle modules_in_component_set
- {mod_name,mod_imports,mod_defs} mod_index expl_imp_info modules icl_functions macro_defs heaps cs
+ mod=:{mod_name,mod_defs=mod_defs=:{def_macro_indices,def_funtypes}} mod_index expl_imp_info modules icl_functions macro_defs heaps cs
// | False--->("checkDclModule", mod_name, mod_index) //, modules.[mod_index].dcl_declared.dcls_local)
// = undef
+ # dcl_common = createCommonDefinitions mod_defs
+ #! first_type_index = size dcl_common.com_type_defs
+ # dcl_common = {dcl_common & com_class_defs = number_class_dictionaries 0 dcl_common.com_class_defs first_type_index}
+ with
+ number_class_dictionaries class_index class_defs index_type
+ | class_index < size class_defs
+ # class_defs = { class_defs & [class_index].class_dictionary.ds_index = index_type }
+ = number_class_dictionaries (inc class_index) class_defs (inc index_type)
+ = class_defs
+ = checkDclModule2 dcl_imported_module_numbers super_components imports_ikh component_nr is_on_cycle modules_in_component_set
+ mod_name dcl_common def_macro_indices def_funtypes mod_index expl_imp_info modules icl_functions macro_defs heaps cs
+
+checkDclModule2 :: !NumberSet ![Int] !(IntKeyHashtable SolvedImports) !Int !Bool !LargeBitvect
+ !Ident *CommonDefs !IndexRange ![FunType] !Index !*ExplImpInfos !*{#DclModule} !*{#FunDef} !*{#*{#FunDef}} !*Heaps !*CheckState
+ -> (!(!Int,!Index,![FunType]), !(!*ExplImpInfos, !*{#DclModule}, !*{#FunDef},!*{#*{#FunDef}},!*Heaps, !*CheckState))
+checkDclModule2 dcl_imported_module_numbers super_components imports_ikh component_nr is_on_cycle modules_in_component_set
+ mod_name dcl_common dcl_macros dcl_funtypes mod_index expl_imp_info modules icl_functions macro_defs heaps cs
# (dcl_mod, modules) = modules![mod_index]
dcl_defined = dcl_mod.dcl_declared.dcls_local
- dcl_common = createCommonDefinitions mod_defs
- dcl_macros = mod_defs.def_macro_indices
cs = addGlobalDefinitionsToSymbolTable dcl_defined cs
(dcls_import_list, modules, cs)
= addImportedSymbolsToSymbolTable mod_index No modules_in_component_set imports_ikh modules cs
dcls_import = { el \\ el<-dcls_import_list }
cs = { cs & cs_x.x_needed_modules = 0 }
nr_of_dcl_functions = size dcl_mod.dcl_functions
- #! main_dcl_module_n = cs.cs_x.x_main_dcl_module_n
# (dictionary_info,dcl_common, modules, heaps, cs)
= checkCommonDefinitions No mod_index dcl_common modules heaps cs
# dcl_mod = {dcl_mod & dcl_dictionary_info=dictionary_info}
@@ -3308,7 +3360,7 @@ checkDclModule dcl_imported_module_numbers super_components imports_ikh componen
(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
+ = checkDclFunctions mod_index nr_of_dcl_functions_and_instances dcl_funtypes
dcl_common.com_type_defs dcl_common.com_class_defs modules heaps cs
dcl_functions = { function \\ function <- reverse rev_function_list }
diff --git a/frontend/checktypes.icl b/frontend/checktypes.icl
index 9489e3d..76961ea 100644
--- a/frontend/checktypes.icl
+++ b/frontend/checktypes.icl
@@ -1257,7 +1257,8 @@ createClassDictionaries is_dcl mod_index first_type_index first_selector_index f
= (type_def_list, sel_def_list, cons_def_list, dictionary_info, type_defs, selector_defs, cons_defs, class_defs, modules, type_var_heap, var_heap, symbol_table)
# (dcl_class_defs,modules) = modules![mod_index].dcl_common.com_class_defs
-
+ # class_defs = number_exported_icl_class_dictionaries 0 dcl_class_defs class_defs
+ # (class_defs,last_type_index_plus1) = number_icl_class_dictionaries 0 class_defs first_type_index
#! first_dcl_dictionary_cons_index = modules.[mod_index].dcl_sizes.[cConstructorDefs]
#! first_dcl_dictionary_selector_index = modules.[mod_index].dcl_sizes.[cSelectorDefs]
@@ -1267,13 +1268,29 @@ createClassDictionaries is_dcl mod_index first_type_index first_selector_index f
# indexes = { index_type = first_type_index, index_cons= first_cons_index, index_selector = first_selector_index }
# (class_defs, modules, rev_dictionary_list, indexes, type_var_heap, var_heap, symbol_table)
- = create_icl_class_dictionaries mod_index 0 class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
+ = create_icl_class_dictionaries mod_index 0 last_type_index_plus1 first_type_index class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
# (size_type_defs,type_defs) = usize type_defs
(type_def_list, sel_def_list, cons_def_list, selector_defs, cons_defs, symbol_table)
= foldSt (collect_type_def_in_icl_module size_type_defs) rev_dictionary_list ([], [], [], selector_defs, cons_defs, symbol_table)
# (dictionary_info,modules)=modules![mod_index].dcl_dictionary_info
= (type_def_list, sel_def_list, cons_def_list, dictionary_info, type_defs, selector_defs, cons_defs, class_defs, modules, type_var_heap, var_heap, symbol_table)
+ with
+ number_exported_icl_class_dictionaries dcl_class_index dcl_class_defs class_defs
+ | dcl_class_index < size dcl_class_defs
+ # icl_class_index = dcl_class_index
+ # dcl_dictionary_index = dcl_class_defs.[dcl_class_index].class_dictionary.ds_index
+ # class_defs = { class_defs & [icl_class_index].class_dictionary.ds_index = dcl_dictionary_index }
+ = number_exported_icl_class_dictionaries (inc dcl_class_index) dcl_class_defs class_defs
+ = class_defs
+
+ number_icl_class_dictionaries class_index class_defs index_type
+ | class_index < size class_defs
+ | class_defs.[class_index].class_dictionary.ds_index==NoIndex
+ # class_defs = { class_defs & [class_index].class_dictionary.ds_index = index_type }
+ = number_icl_class_dictionaries (inc class_index) class_defs (inc index_type)
+ = number_icl_class_dictionaries (inc class_index) class_defs index_type
+ = (class_defs,index_type)
where
collect_type_def type_ptr (type_defs, sel_defs, cons_defs, symbol_table)
# ({ ste_kind = STE_DictType type_def }, symbol_table) = readPtr type_ptr symbol_table
@@ -1329,15 +1346,16 @@ where
= create_exported_icl_class_dictionaries mod_index (inc dcl_class_index) dcl_class_defs type_defs class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
= (type_defs, class_defs, modules, rev_dictionary_list, indexes, type_var_heap, var_heap, symbol_table)
- create_icl_class_dictionaries mod_index class_index class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
+ create_icl_class_dictionaries mod_index class_index last_type_index_plus1 first_type_index class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
| class_index < size class_defs
- | class_defs.[class_index].class_dictionary.ds_index==NoIndex
+ # index=class_defs.[class_index].class_dictionary.ds_index
+ | index>=first_type_index && index<last_type_index_plus1
# (class_defs, modules, type_id_info, indexes, type_var_heap, var_heap, symbol_table)
= create_class_dictionary mod_index class_index class_defs modules indexes type_var_heap var_heap symbol_table
# rev_dictionary_list = [ type_id_info : rev_dictionary_list ]
- = create_icl_class_dictionaries mod_index (inc class_index) class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
- = create_icl_class_dictionaries mod_index (inc class_index) class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
- = (class_defs, modules, rev_dictionary_list, indexes, type_var_heap, var_heap, symbol_table)
+ = create_icl_class_dictionaries mod_index (inc class_index) last_type_index_plus1 first_type_index class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
+ = create_icl_class_dictionaries mod_index (inc class_index) last_type_index_plus1 first_type_index class_defs modules rev_dictionary_list indexes type_var_heap var_heap symbol_table
+ = (class_defs, modules, rev_dictionary_list, indexes, type_var_heap, var_heap, symbol_table)
create_class_dictionary :: !Index !Index !*{#ClassDef} !w:{#DclModule} !u:Indexes !*TypeVarHeap !*VarHeap !*SymbolTable
-> (!*{#ClassDef}, !w:{#DclModule}, !SymbolPtr, !u:Indexes, !*TypeVarHeap, !*VarHeap, !*SymbolTable)
@@ -1357,6 +1375,7 @@ where
field_type = makeAttributedType TA_Multi TE
(rev_fields, var_heap, symbol_table)
= build_fields 0 nr_of_members class_members rec_type field_type index_type index_selector [] var_heap symbol_table
+
(index_selector, rev_fields, rev_field_types, class_defs, modules, var_heap, symbol_table)
= build_context_fields mod_index nr_of_members class_context rec_type index_type (index_selector + nr_of_members) rev_fields
[ field_type \\ i <- [1..nr_of_members] ] class_defs modules var_heap symbol_table
@@ -1375,7 +1394,7 @@ where
, td_args = td_args
, td_attrs = []
, td_context = []
- , td_rhs = RecordType {rt_constructor = cons_symbol, rt_fields = { field \\ field <- reverse rev_fields }}
+ , td_rhs = RecordType {rt_constructor = cons_symbol, rt_fields = { field \\ field <- reverse rev_fields } /*, rt_is_boxed_record=False*/}
, td_attribute = TA_None
, td_pos = NoPos
, td_used_types = []
@@ -1401,7 +1420,7 @@ where
ste_def_level = NotALevel, ste_previous = abort "empty SymbolTableEntry" })
<:= (cons_id_info, { ste_kind = STE_DictCons cons_def, ste_index = index_cons,
ste_def_level = NotALevel, ste_previous = abort "empty SymbolTableEntry" }))
-
+
new_attributed_type_variable tv type_var_heap
# (new_tv_ptr, type_var_heap) = newPtr TVI_Empty type_var_heap
= ({atv_attribute = TA_Multi, atv_variable = { tv & tv_info_ptr = new_tv_ptr }}, type_var_heap)
@@ -1419,22 +1438,9 @@ where
# ({class_name, class_arity, class_dictionary = {ds_ident, ds_index}}, _, class_defs, modules) = getClassDef ds_index glob_module mod_index class_defs modules
type_symb = MakeTypeSymbIdent { glob_object = ds_index, glob_module = glob_module } ds_ident class_arity
field_type = makeAttributedType TA_Multi (TA type_symb [makeAttributedType TA_Multi TE \\ i <- [1..class_arity]])
-/* RWS FIXME ...
- This is a patch for the case that the class has a context field which class
- has not yet been seen. For example (note the order of definitions):
- class C2 a | C1 a
- class C1 a :: a
- A proper solution would be to split this in two phases. For example
- 1) assign class indices
- 2) bind context fields
- This should then also work across (dcl) module boundaries.
-*/
- field_type = if (ds_index == NoIndex) (makeAttributedType TA_Multi TE) field_type
-// ... RWS
(field, var_heap, symbol_table) = build_field field_nr class_name.id_name rec_type_index rec_type field_type next_selector_index var_heap symbol_table
= build_context_fields mod_index (inc field_nr) tcs rec_type rec_type_index (inc next_selector_index) [ field : rev_fields ]
[field_type : rev_field_types] class_defs modules var_heap symbol_table
-
build_context_fields mod_index field_nr [{tc_class = TCGeneric {gtc_generic, gtc_kind}} :tcs] rec_type rec_type_index
next_selector_index rev_fields rev_field_types class_defs modules var_heap symbol_table
// FIXME: We do not know the type before the generic phase.
@@ -1444,7 +1450,6 @@ where
# (field, var_heap, symbol_table) = build_field field_nr class_name.id_name rec_type_index rec_type field_type next_selector_index var_heap symbol_table
= build_context_fields mod_index (inc field_nr) tcs rec_type rec_type_index (inc next_selector_index) [ field : rev_fields ]
[field_type : rev_field_types] class_defs modules var_heap symbol_table
-
build_context_fields mod_index field_nr [] rec_type rec_type_index next_selector_index rev_fields rev_field_types class_defs modules var_heap symbol_table
= (next_selector_index, rev_fields, rev_field_types , class_defs, modules, var_heap, symbol_table)