aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorjohnvg2011-04-12 14:28:38 +0000
committerjohnvg2011-04-12 14:28:38 +0000
commit16611833c11257bcf9f2cb425edb742092fb2aec (patch)
tree2ca6ec763867e1cf419e15685528c3461c2e79b3 /frontend
parentadd BETypeSymbolNoMark to the 64 bit version (diff)
allow qualified imports of class members
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1915 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend')
-rw-r--r--frontend/check.icl34
-rw-r--r--frontend/checksupport.dcl3
-rw-r--r--frontend/explicitimports.dcl7
-rw-r--r--frontend/explicitimports.icl136
-rw-r--r--frontend/utilities.dcl3
-rw-r--r--frontend/utilities.icl8
6 files changed, 88 insertions, 103 deletions
diff --git a/frontend/check.icl b/frontend/check.icl
index bbf67bd..dc50af9 100644
--- a/frontend/check.icl
+++ b/frontend/check.icl
@@ -3,7 +3,7 @@ implementation module check
import StdEnv
import syntax, typesupport, parse, checksupport, utilities, checktypes, transform, predef
-import explicitimports, comparedefimp, checkFunctionBodies, containers, compilerSwitches
+import explicitimports, comparedefimp, checkFunctionBodies, containers
import genericsupport
import typereify
from checkgenerics import checkGenericDefs,checkGenericCaseDefs,convert_generic_instances,create_gencase_funtypes
@@ -938,7 +938,7 @@ createCommonDefinitions {def_types,def_constructors,def_selectors,def_classes,de
, com_member_defs = { member \\ member <- def_members }
, com_instance_defs = { next_instance \\ next_instance <- def_instances }
, com_generic_defs = { gen \\ gen <- def_generics }
- , com_gencase_defs = { gi \\ gi <- def_generic_cases}
+ , com_gencase_defs = { gi \\ gi <- def_generic_cases}
}
array_plus_list a [] = a
@@ -1468,8 +1468,8 @@ replace_icl_macros_by_dcl_macros _ {ir_from=first_icl_macro_index,ir_to=end_icl_
(<=<) infixl
(<=<) state fun :== fun state
-checkDclModules :: [Import] *{#DclModule} *{#*{#FunDef}} *Heaps *CheckState
- -> (Int,[ExplicitImport],.[{#Char}],{!{!.ExplImpInfo}}, *{#DclModule},*{#*{#FunDef}},*Heaps,*CheckState)
+checkDclModules :: [Import] *{#DclModule} *{#*{#FunDef}} *Heaps *CheckState
+ -> (Int,[ExplicitImport],.[{#Char}],ExplImpInfos, *{#DclModule},*{#*{#FunDef}},*Heaps,*CheckState)
checkDclModules imports_of_icl_mod dcl_modules macro_defs heaps cs=:{cs_symbol_table}
#! nr_of_dcl_modules = size dcl_modules
# (bitvect, dependencies, dcl_modules, cs_symbol_table)
@@ -1762,8 +1762,8 @@ createCommonDefinitionsWithinComponent is_on_cycle mod_index (dcl_modules, cs=:{
{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 :: .NumberSet Int Bool {#.Int} {![.Int]} (IntKeyHashtable SolvedImports) Int *CommonDefs
- *(*{!*{!*ExplImpInfo}},*{#.DclModule},*{#*{#.FunDef}},*Heaps,*CheckState)
- -> ((Int,Int,[FunType]),({!{!.ExplImpInfo}},.{# DclModule},.{#.{# FunDef}},.Heaps,.CheckState))
+ *(*ExplImpInfos,*{#.DclModule},*{#*{#.FunDef}},*Heaps,*CheckState)
+ -> ((Int,Int,[FunType]),(*ExplImpInfos,.{# DclModule},.{#.{# FunDef}},.Heaps,.CheckState))
checkDclModuleWithinComponent dcl_imported_module_numbers component_nr is_on_cycle modules_in_component_set components_importing_module_a imports_ikh
mod_index dcl_common
(expl_imp_infos, dcl_modules, macro_defs, heaps, cs=:{cs_symbol_table})
@@ -2761,8 +2761,8 @@ add_declaration_to_symbol_table opt_dcl_macro_range (Declaration {decl_kind=STE_
add_declaration_to_symbol_table yes_for_icl_module (Declaration {decl_kind=decl_kind=:STE_Imported def_kind def_mod, decl_ident, decl_index, decl_pos}) importing_mod cs
= addSymbol yes_for_icl_module decl_ident decl_pos decl_kind def_kind decl_index def_mod importing_mod cs
-updateExplImpInfo :: [Int] Index {!Declaration} {!Declaration} u:{#DclModule} {!{!*ExplImpInfo}} *SymbolTable
- -> (u:{#DclModule},!{!{!.ExplImpInfo}},.SymbolTable)
+updateExplImpInfo :: [Int] Index {!Declaration} {!Declaration} u:{#DclModule} ExplImpInfos *SymbolTable
+ -> (u:{#DclModule},!ExplImpInfos,.SymbolTable)
updateExplImpInfo components_importing_module mod_index dcls_import dcls_local_for_import dcl_modules expl_imp_infos cs_symbol_table
# (changed_symbols, (expl_imp_infos, cs_symbol_table))
= mapSt markExplImpSymbols components_importing_module (expl_imp_infos, cs_symbol_table)
@@ -2774,8 +2774,8 @@ updateExplImpInfo components_importing_module mod_index dcls_import dcls_local_f
= foldSt (\l cs_symbol_table->foldSt restoreHeap l cs_symbol_table) changed_symbols cs_symbol_table
= (dcl_modules, expl_imp_infos, cs_symbol_table)
-updateExplImpInfoForCachedModule :: [Int] Index {!Declaration} {!Declaration} {!{!*ExplImpInfo}} u:{#DclModule} *SymbolTable
- -> (!{!{!.ExplImpInfo}},u:{#DclModule},.SymbolTable)
+updateExplImpInfoForCachedModule :: [Int] Index {!Declaration} {!Declaration} ExplImpInfos u:{#DclModule} *SymbolTable
+ -> (!ExplImpInfos,u:{#DclModule},.SymbolTable)
updateExplImpInfoForCachedModule components_importing_module mod_index dcls_import dcls_local_for_import expl_imp_infos dcl_modules cs_symbol_table
# (changed_symbols, (expl_imp_infos, cs_symbol_table))
= mapSt markExplImpSymbols components_importing_module (expl_imp_infos, cs_symbol_table)
@@ -2927,17 +2927,16 @@ update_expl_imp_for_marked_local_symbol mod_index decl=:(Declaration {decl_ident
# (ste, cs_symbol_table) = readPtr decl_ident.id_info cs_symbol_table
= updateExplImpForMarkedLocalSymbol mod_index decl ste dcl_modules expl_imp_infos cs_symbol_table
where
- updateExplImpForMarkedLocalSymbol :: !Index Declaration !SymbolTableEntry !u:{#DclModule} !{!{!*ExplImpInfo}} !*SymbolTable
- -> (!u:{#DclModule}, !{!{!.ExplImpInfo}}, !.SymbolTable)
+ updateExplImpForMarkedLocalSymbol :: !Index Declaration !SymbolTableEntry !u:{#DclModule} !ExplImpInfos !*SymbolTable
+ -> (!u:{#DclModule}, !ExplImpInfos, !.SymbolTable)
updateExplImpForMarkedLocalSymbol mod_index decl {ste_kind=STE_ExplImpComponentNrs component_numbers}
dcl_modules expl_imp_infos cs_symbol_table
= foldSt (addExplImpInfo mod_index decl) component_numbers (dcl_modules, expl_imp_infos, cs_symbol_table)
where
- addExplImpInfo :: !Index Declaration !ComponentNrAndIndex !(!u:{#DclModule}, !{!{!*ExplImpInfo}}, !v:SymbolTable)
- -> (!u:{#DclModule}, !{!{!.ExplImpInfo}}, !v:SymbolTable)
+ addExplImpInfo :: !Index Declaration !ComponentNrAndIndex !(!u:{#DclModule}, !ExplImpInfos, !v:SymbolTable)
+ -> (!u:{#DclModule}, !ExplImpInfos, !v:SymbolTable)
addExplImpInfo mod_index decl { cai_component_nr, cai_index } (dcl_modules, expl_imp_infos, cs_symbol_table)
- # (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_infos)
- = replaceTwoDimArrElt cai_component_nr cai_index TemporarilyFetchedAway expl_imp_infos
+ # (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_infos) = expl_imp_infos![cai_component_nr,cai_index]
(all_belongs, dcl_modules) = getBelongingSymbols decl dcl_modules
di_belonging = nsFromTo (nrOfBelongingSymbols all_belongs)
di = { di_decl = decl, di_belonging = di_belonging }
@@ -2958,8 +2957,7 @@ checkInstancesOfDclModule mod_index (nr_of_dcl_functions_and_instances, nr_of_dc
{d \\ d<-:dcl_common.com_class_defs}
{d \\ d<-:dcl_common.com_member_defs}
dcl_modules hp_type_heaps hp_var_heap { cs & cs_error = cs_error }
- heaps
- = { heaps & hp_type_heaps = hp_type_heaps, hp_var_heap = hp_var_heap }
+ heaps = { heaps & hp_type_heaps = hp_type_heaps, hp_var_heap = hp_var_heap }
(nr_of_dcl_funs_insts_and_specs, new_class_instances, rev_special_defs, all_spec_types, heaps, cs_predef_symbols,cs_error)
= checkSpecialsOfInstances mod_index nr_of_dcl_functions rev_spec_class_inst nr_of_dcl_funs_insts_and_specs []
rev_special_defs { mem \\ mem <- memb_inst_defs } { [] \\ mem <- memb_inst_defs } heaps cs.cs_predef_symbols cs.cs_error
diff --git a/frontend/checksupport.dcl b/frontend/checksupport.dcl
index d53df90..7de856d 100644
--- a/frontend/checksupport.dcl
+++ b/frontend/checksupport.dcl
@@ -48,11 +48,10 @@ cMacroDefs :== 9
cConversionTableSize :== 10
-:: *ExplImpInfos :== *{!*{!*ExplImpInfo}}
+:: *ExplImpInfos :== *{#*{!*ExplImpInfo}}
:: ExplImpInfo
= ExplImpInfo Ident !.DeclaringModulesSet
- | TemporarilyFetchedAway
:: DeclaringModulesSet :== IntKeyHashtable DeclarationInfo
diff --git a/frontend/explicitimports.dcl b/frontend/explicitimports.dcl
index 952cc59..867b467 100644
--- a/frontend/explicitimports.dcl
+++ b/frontend/explicitimports.dcl
@@ -20,11 +20,10 @@ import syntax, checksupport
, si_implicit :: ![(ModuleN, Position)]
}
-markExplImpSymbols :: !Int !*(!*{!*{!u:ExplImpInfo}}, !*SymbolTable)
- -> (!.[Ident],!(!{!{!u:ExplImpInfo}},!.SymbolTable))
+markExplImpSymbols :: !Int !*(!*ExplImpInfos,!*SymbolTable) -> (!.[Ident],!(!*ExplImpInfos,!*SymbolTable))
-updateExplImpForMarkedSymbol :: !Index !Declaration !SymbolTableEntry !u:{#DclModule} !{!{!*ExplImpInfo}} !*SymbolTable
- -> (!u:{#DclModule}, !{!{!.ExplImpInfo}}, !.SymbolTable)
+updateExplImpForMarkedSymbol :: !Index !Declaration !SymbolTableEntry !u:{#DclModule} !*ExplImpInfos !*SymbolTable
+ -> (!u:{#DclModule},!*ExplImpInfos,!*SymbolTable)
solveExplicitImports :: !(IntKeyHashtable [ExplicitImport]) !{#Int} !Index
!*(!v:{#DclModule},!*{#Int},!{!*ExplImpInfo},!*CheckState)
diff --git a/frontend/explicitimports.icl b/frontend/explicitimports.icl
index eb91f69..e8b973b 100644
--- a/frontend/explicitimports.icl
+++ b/frontend/explicitimports.icl
@@ -3,8 +3,7 @@ implementation module explicitimports
import StdEnv
-import syntax, typesupport, parse, checksupport, utilities, checktypes, transform, predef,
- compilerSwitches//, RWSDebug
+import syntax, typesupport, parse, checksupport, utilities, checktypes, transform, predef
cUndef :== (-1)
implies a b :== not a || b
@@ -20,7 +19,7 @@ implies a b :== not a || b
, si_implicit :: ![(ModuleN, Position)]
}
-markExplImpSymbols :: !Int !*(!*{!*{!u:ExplImpInfo}}, !*SymbolTable) -> (!.[Ident],!(!{!{!u:ExplImpInfo}},!.SymbolTable))
+markExplImpSymbols :: !Int !*(!*ExplImpInfos,!*SymbolTable) -> (!.[Ident],!(!*ExplImpInfos,!*SymbolTable))
markExplImpSymbols component_nr (expl_imp_info, cs_symbol_table)
# (expl_imp_info_from_component,expl_imp_info) = replace expl_imp_info component_nr {}
#! nr_of_expl_imp_symbols = size expl_imp_info_from_component
@@ -29,9 +28,9 @@ markExplImpSymbols component_nr (expl_imp_info, cs_symbol_table)
= (new_symbols, (expl_imp_info, cs_symbol_table))
where
mark_symbol component_nr i (changed_symbols_accu, expl_imp_info_from_component, cs_symbol_table)
- # (eii, expl_imp_info_from_component) = replace expl_imp_info_from_component i TemporarilyFetchedAway
+ # (eii, expl_imp_info_from_component) = expl_imp_info_from_component![i]
(eii_ident, eii) = get_eei_ident eii
- expl_imp_info_from_component = { expl_imp_info_from_component & [i] = eii }
+ expl_imp_info_from_component = {expl_imp_info_from_component & [i] = eii}
(ste, cs_symbol_table) = readPtr eii_ident.id_info cs_symbol_table
cai = { cai_component_nr = component_nr, cai_index = i }
= case ste.ste_kind of
@@ -43,26 +42,25 @@ markExplImpSymbols component_nr (expl_imp_info, cs_symbol_table)
# new_ste = { ste & ste_kind = STE_ExplImpComponentNrs [cai], ste_previous = ste }
-> ([eii_ident:changed_symbols_accu], expl_imp_info_from_component, writePtr eii_ident.id_info new_ste cs_symbol_table)
-updateExplImpForMarkedSymbol :: !Index !Declaration !SymbolTableEntry !u:{#DclModule} !{!{!*ExplImpInfo}} !*SymbolTable
- -> (!u:{#DclModule}, !{!{!.ExplImpInfo}}, !.SymbolTable)
+updateExplImpForMarkedSymbol :: !Index !Declaration !SymbolTableEntry !u:{#DclModule} !*ExplImpInfos !*SymbolTable
+ -> (!u:{#DclModule},!*ExplImpInfos,!*SymbolTable)
updateExplImpForMarkedSymbol mod_index decl {ste_kind=STE_ExplImpComponentNrs component_numbers} dcl_modules expl_imp_infos cs_symbol_table
= foldSt (addExplImpInfo mod_index decl) component_numbers (dcl_modules, expl_imp_infos, cs_symbol_table)
updateExplImpForMarkedSymbol _ _ entry dcl_modules expl_imp_infos cs_symbol_table
= (dcl_modules, expl_imp_infos, cs_symbol_table)
-addExplImpInfo :: !Index Declaration !ComponentNrAndIndex !(!u:{#DclModule}, !{!{!*ExplImpInfo}}, !v:SymbolTable)
- -> (!u:{#DclModule}, !{!{!.ExplImpInfo}}, !v:SymbolTable)
+addExplImpInfo :: !Index Declaration !ComponentNrAndIndex !(!u:{#DclModule},!*ExplImpInfos,!*SymbolTable)
+ -> (!u:{#DclModule},!*ExplImpInfos,!*SymbolTable)
addExplImpInfo mod_index decl { cai_component_nr, cai_index } (dcl_modules, expl_imp_infos, cs_symbol_table)
- # (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_infos)
- = replaceTwoDimArrElt cai_component_nr cai_index TemporarilyFetchedAway expl_imp_infos
+ # (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_infos) = expl_imp_infos![cai_component_nr,cai_index]
(di_belonging, dcl_modules, cs_symbol_table)
= get_belonging_symbol_nrs decl dcl_modules cs_symbol_table
di = { di_decl = decl, di_belonging = di_belonging }
new_expl_imp_info = ExplImpInfo eii_ident (ikhInsert` False mod_index di eii_declaring_modules)
= (dcl_modules, { expl_imp_infos & [cai_component_nr,cai_index] = new_expl_imp_info }, cs_symbol_table)
where
- get_belonging_symbol_nrs :: !Declaration !v:{#DclModule} !u:(Heap SymbolTableEntry)
- -> (!.NumberSet,!v:{#DclModule},!u: Heap SymbolTableEntry)
+ get_belonging_symbol_nrs :: !Declaration !v:{#DclModule} !*SymbolTable
+ -> (!.NumberSet,!v:{#DclModule},!*SymbolTable)
get_belonging_symbol_nrs decl dcl_modules cs_symbol_table
# (all_belonging_symbols, dcl_modules) = getBelongingSymbols decl dcl_modules
nr_of_belongs = nrOfBelongingSymbols all_belonging_symbols
@@ -143,7 +141,7 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
solve_qualified_expl_imp_from_module expl_imp_indices_ikh modules_in_component_set path
{ei_module_n=imported_mod, ei_position=position, ei_symbols=imported_symbols} (dcl_modules, visited_modules, expl_imp_info, cs)
# (not_exported_symbols,decl_accu, unsolved_belonging, visited_modules, expl_imp_info)
- = search_expl_imp_symbols imported_symbols expl_imp_indices_ikh modules_in_component_set path imported_mod
+ = search_qualified_expl_imp_symbols imported_symbols expl_imp_indices_ikh modules_in_component_set path imported_mod
([],[], [], visited_modules, expl_imp_info)
(expl_imp_info,dcl_modules,cs_error)
= report_not_exported_symbol_errors not_exported_symbols position expl_imp_info imported_mod dcl_modules cs.cs_error
@@ -156,6 +154,10 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
= foldSt (search_expl_imp_symbol expl_imp_indices_ikh modules_in_component_set path imported_mod)
imported_symbols state
+ search_qualified_expl_imp_symbols imported_symbols expl_imp_indices_ikh modules_in_component_set path imported_mod state
+ = foldSt (search_qualified_expl_imp_symbol expl_imp_indices_ikh modules_in_component_set path imported_mod)
+ imported_symbols state
+
solve_belongings unsolved_belonging position expl_imp_indices_ikh modules_in_component_set path state
= foldSt (solve_belonging position expl_imp_indices_ikh modules_in_component_set path)
unsolved_belonging state
@@ -163,12 +165,9 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
solve_belonging position expl_imp_indices_ikh modules_in_component_set path
(decl, {ini_symbol_nr, ini_imp_decl}, imported_mod)
(decls_accu, dcl_modules, visited_modules, expl_imp_info, cs=:{cs_error, cs_symbol_table})
- # (Yes belongs)
- = getBelongingSymbolsFromID ini_imp_decl
- (all_belongs, dcl_modules)
- = get_all_belongs decl dcl_modules
- (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_info)
- = replace expl_imp_info ini_symbol_nr TemporarilyFetchedAway
+ # (Yes belongs) = getBelongingSymbolsFromID ini_imp_decl
+ (all_belongs, dcl_modules) = get_all_belongs decl dcl_modules
+ (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_info) = expl_imp_info![ini_symbol_nr]
(need_all, belongs_set, cs_error, cs_symbol_table)
= case belongs of
[]
@@ -218,13 +217,12 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
(new, eii_declaring_modules)
= ikhInsert True mod_index { di & di_belonging = addNr belong_nr di_belonging } eii_declaring_modules
| new
- = abort "sanity check nr 2765 failed in module check"
+ = abort "sanity check failed in module explicitimports"
= eii_declaring_modules
get_nth_belonging_decl position belong_nr decl=:(Declaration {decl_kind}) dcl_modules
# (STE_Imported _ def_mod_index) = decl_kind
- (belongin_symbols, dcl_modules)
- = getBelongingSymbols decl dcl_modules
+ (belongin_symbols, dcl_modules) = getBelongingSymbols decl dcl_modules
= case belongin_symbols of
BS_Constructors constructors
# {ds_ident, ds_index} = constructors!!belong_nr
@@ -245,17 +243,13 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
decl_index = ds_index }, dcl_modules)
get_all_belongs decl=:(Declaration {decl_kind,decl_index}) dcl_modules
- # (belonging_symbols, dcl_modules)
- = getBelongingSymbols decl dcl_modules
+ # (belonging_symbols, dcl_modules) = getBelongingSymbols decl dcl_modules
= case belonging_symbols of
BS_Constructors constructors
-> ([ds_ident \\ {ds_ident}<-constructors], dcl_modules)
BS_Fields rt_fields
-> ([fs_ident \\ {fs_ident}<-:rt_fields], dcl_modules)
BS_Members class_members
- # (STE_Imported _ def_mod_index) = decl_kind
- ({class_members}, dcl_modules)
- = dcl_modules![def_mod_index].dcl_common.com_class_defs.[decl_index]
-> ([ds_ident \\ {ds_ident}<-:class_members], dcl_modules)
BS_Nothing
-> ([], dcl_modules)
@@ -280,48 +274,59 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
-> ([ImportNrAndIdents],[Declaration],[(Declaration,ImportNrAndIdents,Int)],*{#Int},*{!*ExplImpInfo})
search_expl_imp_symbol expl_imp_indices_ikh modules_in_component_set path imported_mod
ini=:{ini_symbol_nr} (not_exported_symbols,decls_accu, belonging_accu, visited_modules, expl_imp_info)
- # (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_info)
- = replace expl_imp_info ini_symbol_nr TemporarilyFetchedAway
+ # (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_info) = expl_imp_info![ini_symbol_nr]
+ (opt_decl, path, eii_declaring_modules, visited_modules)
+ = depth_first_search expl_imp_indices_ikh modules_in_component_set imported_mod
+ ini_symbol_nr cUndef stupid_ident path
+ eii_declaring_modules (bitvectResetAll visited_modules)
+ = case opt_decl of
+ Yes di=:{di_decl=di_decl=:Declaration {decl_kind}}
+ | is_not_STE_member decl_kind
+ # new_eii_declaring_modules = update_declaring_modules di_decl path eii_declaring_modules
+ expl_imp_info = {expl_imp_info & [ini_symbol_nr] = ExplImpInfo eii_ident new_eii_declaring_modules}
+ new_belonging_accu = update_belonging_accu di_decl ini imported_mod belonging_accu
+ -> (not_exported_symbols,[di_decl:decls_accu], new_belonging_accu, visited_modules, expl_imp_info)
+ _
+ # expl_imp_info = {expl_imp_info & [ini_symbol_nr] = ExplImpInfo eii_ident eii_declaring_modules}
+ -> ([ini:not_exported_symbols],decls_accu, belonging_accu, visited_modules, expl_imp_info)
+
+ search_qualified_expl_imp_symbol :: (IntKeyHashtable [ExplicitImport]) {#Int} [Int] Int ImportNrAndIdents
+ *([ImportNrAndIdents],[Declaration],[(Declaration,ImportNrAndIdents,Int)],*{#Int},*{!*ExplImpInfo})
+ -> ([ImportNrAndIdents],[Declaration],[(Declaration,ImportNrAndIdents,Int)],*{#Int},*{!*ExplImpInfo})
+ search_qualified_expl_imp_symbol expl_imp_indices_ikh modules_in_component_set path imported_mod
+ ini=:{ini_symbol_nr} (not_exported_symbols,decls_accu, belonging_accu, visited_modules, expl_imp_info)
+ # (ExplImpInfo eii_ident eii_declaring_modules, expl_imp_info) = expl_imp_info![ini_symbol_nr]
(opt_decl, path, eii_declaring_modules, visited_modules)
= depth_first_search expl_imp_indices_ikh modules_in_component_set imported_mod
ini_symbol_nr cUndef stupid_ident path
eii_declaring_modules (bitvectResetAll visited_modules)
= case opt_decl of
Yes di=:{di_decl}
- | ( case di_decl of
- Declaration {decl_kind}
- -> case decl_kind of
- STE_Imported STE_Member _
- -> False
- STE_Member
- -> False
- _
- -> True
- )
- # new_eii_declaring_modules
- = foldSt (\mod_index eei_dm->ikhInsert` False mod_index
- {di_decl = di_decl, di_belonging=EndNumbers} eei_dm)
- path eii_declaring_modules
- new_belonging_accu
- = case getBelongingSymbolsFromID ini.ini_imp_decl of
- No
- -> belonging_accu
- Yes _
- -> [(di_decl, ini, imported_mod):belonging_accu]
- new_eii = ExplImpInfo eii_ident new_eii_declaring_modules
- -> (not_exported_symbols,[di_decl:decls_accu], new_belonging_accu, visited_modules,
- { expl_imp_info & [ini_symbol_nr] = new_eii })
- // otherwise GOTO next alternative
+ # new_eii_declaring_modules = update_declaring_modules di_decl path eii_declaring_modules
+ expl_imp_info = {expl_imp_info & [ini_symbol_nr] = ExplImpInfo eii_ident new_eii_declaring_modules}
+ new_belonging_accu = update_belonging_accu di_decl ini imported_mod belonging_accu
+ -> (not_exported_symbols,[di_decl:decls_accu], new_belonging_accu, visited_modules, expl_imp_info)
_
- # eii = ExplImpInfo eii_ident eii_declaring_modules
- -> ([ini:not_exported_symbols],decls_accu, belonging_accu, visited_modules, { expl_imp_info & [ini_symbol_nr] = eii })
+ # expl_imp_info = {expl_imp_info & [ini_symbol_nr] = ExplImpInfo eii_ident eii_declaring_modules}
+ -> ([ini:not_exported_symbols],decls_accu, belonging_accu, visited_modules, expl_imp_info)
+
+ is_not_STE_member (STE_Imported STE_Member _) = False
+ is_not_STE_member STE_Member = False
+ is_not_STE_member _ = True
+
+ update_declaring_modules di_decl path eii_declaring_modules
+ = foldSt (\mod_index eei_dm->ikhInsert` False mod_index {di_decl = di_decl, di_belonging=EndNumbers} eei_dm) path eii_declaring_modules
+
+ update_belonging_accu di_decl ini imported_mod belonging_accu
+ = case getBelongingSymbolsFromID ini.ini_imp_decl of
+ No -> belonging_accu
+ Yes _ -> [(di_decl, ini, imported_mod):belonging_accu]
depth_first_search expl_imp_indices_ikh modules_in_component_set
imported_mod imported_symbol belong_nr belong_ident path eii_declaring_modules visited_modules
// | False--->("depth_first_search imported_mod", imported_mod, "imported_symbol", imported_symbol)
// = undef
- # (search_result, eii_declaring_modules)
- = ikhUSearch imported_mod eii_declaring_modules
+ # (search_result, eii_declaring_modules) = ikhUSearch imported_mod eii_declaring_modules
= case search_result of
yes_di=:(Yes di)
| belong_nr==cUndef
@@ -333,8 +338,7 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
// the eii_declaring_modules is complete for modules that are outside
// (=beneath) the actual component=> no need to search further
-> (No, [], eii_declaring_modules, visited_modules)
- # imports_of_imported_mod
- = ikhSearch` imported_mod expl_imp_indices_ikh
+ # imports_of_imported_mod = ikhSearch` imported_mod expl_imp_indices_ikh
-> try_children imports_of_imported_mod expl_imp_indices_ikh
modules_in_component_set imported_symbol belong_nr belong_ident
[imported_mod:path]
@@ -343,7 +347,6 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
try_children [{ei_module_n=imp_imp_mod,ei_symbols=imp_imp_symbols}:imports] expl_imp_indices_ikh
modules_in_component_set imported_symbol belong_nr belong_ident path eii_declaring_modules visited_modules
| bitvectSelect imp_imp_mod visited_modules
-// | False--->"visited" = undef
= try_children imports expl_imp_indices_ikh modules_in_component_set imported_symbol
belong_nr belong_ident path eii_declaring_modules visited_modules
| not (isEmpty imp_imp_symbols)
@@ -402,7 +405,9 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
= is_member belong_ident t
report_not_exported_symbol_errors [{ini_symbol_nr,ini_imp_decl}:not_exported_symbols] position expl_imp_info imported_mod dcl_modules cs_error
- # (eii_ident, expl_imp_info) = do_a_lot_just_to_read_an_array_2 ini_symbol_nr expl_imp_info
+ # (eii, expl_imp_info) = expl_imp_info![ini_symbol_nr]
+ (eii_ident, eii) = get_eei_ident eii
+ expl_imp_info = {expl_imp_info & [ini_symbol_nr] = eii}
(module_name,dcl_modules)=dcl_modules![imported_mod].dcl_name.id_name
cs_error = popErrorAdmin (checkError eii_ident
("not exported as a "+++impDeclToNameSpaceString ini_imp_decl +++" by module "+++module_name)
@@ -411,11 +416,6 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
report_not_exported_symbol_errors [] position expl_imp_info imported_mod dcl_modules cs_error
= (expl_imp_info,dcl_modules,cs_error)
- do_a_lot_just_to_read_an_array_2 i expl_imp_info
- # (eii, expl_imp_info) = replace expl_imp_info i TemporarilyFetchedAway
- (eii_ident, eii) = get_eei_ident eii
- = (eii_ident, { expl_imp_info & [i] = eii })
-
impDeclToNameSpaceString (ID_Function _) = "function/macro"
impDeclToNameSpaceString (ID_Class _ _) = "class"
impDeclToNameSpaceString (ID_Type _ _) = "type"
@@ -732,7 +732,7 @@ instance check_completeness SymbIdent where
= case symb_kind of
SK_Constructor {glob_module,glob_object}
-> check_whether_ident_is_imported symb_ident glob_module glob_object STE_Constructor cci ccs
- SK_Function global_index
+ SK_Function global_index
-> check_completeness_for_function symb_ident global_index cci ccs
SK_DclMacro global_index
-> check_completeness_for_macro symb_ident global_index cci ccs
diff --git a/frontend/utilities.dcl b/frontend/utilities.dcl
index bd11ea6..8ffad4f 100644
--- a/frontend/utilities.dcl
+++ b/frontend/utilities.dcl
@@ -211,6 +211,3 @@ isEmptyBag :: !(Bag x) -> Bool
}
partitionateDAG :: !DAG ![Int] -> [[Int]]
-
-replaceTwoDimArrElt :: !Int !Int !.e !{!*{!.e}} -> (!.e, !{!.{!.e}})
- // like "replace" for one dimensional arrays \ No newline at end of file
diff --git a/frontend/utilities.icl b/frontend/utilities.icl
index f7d7264..de046af 100644
--- a/frontend/utilities.icl
+++ b/frontend/utilities.icl
@@ -419,11 +419,3 @@ where
| d == node_index
= (ds, marks, [d : group])
= close_group node_index ds marks [d : group] pi
-
-replaceTwoDimArrElt :: !Int !Int !.e !{!*{!.e}} -> (!.e, !{!.{!.e}})
-replaceTwoDimArrElt ix1 ix2 el arr
- # (inner_array, arr)
- = replace arr ix1 {}
- (el2, inner_array)
- = replace inner_array ix2 el
- = (el2, { arr & [ix1] = inner_array })