aboutsummaryrefslogtreecommitdiff
path: root/frontend/explicitimports.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/explicitimports.icl')
-rw-r--r--frontend/explicitimports.icl47
1 files changed, 31 insertions, 16 deletions
diff --git a/frontend/explicitimports.icl b/frontend/explicitimports.icl
index 30a4638..9f07158 100644
--- a/frontend/explicitimports.icl
+++ b/frontend/explicitimports.icl
@@ -112,9 +112,9 @@ solveExplicitImports :: !(IntKeyHashtable [ExplicitImport]) !{#Int} !Index
-> (!.SolvedImports,! (!v:{#DclModule},!.{#Int},!{!.ExplImpInfo},!.CheckState))
solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod (dcl_modules, visited_modules, expl_imp_info, cs)
# import_indices = ikhSearch` importing_mod expl_imp_indices_ikh
- expl_imp_indices = [ imports \\ imports=:{ei_symbols=[_:_],ei_qualified=NotQualified} <- import_indices ]
- qualified_expl_imp_indices = [ imports \\ imports=:{ei_symbols=[_:_],ei_qualified=Qualified} <- import_indices ]
- impl_imports = [ (ei_module_n,ei_position) \\ imports=:{ei_module_n,ei_position,ei_symbols=[]} <- import_indices ]
+
+ (expl_imp_indices,qualified_expl_imp_indices,impl_imports) = split_imports import_indices
+
state = (dcl_modules, visited_modules, expl_imp_info, cs)
path = [importing_mod]
(expl_imports, state)
@@ -126,8 +126,21 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
qualified_expl_imp_indices state
= ({ si_explicit=expl_imports, si_qualified_explicit=qualified_expl_imports, si_implicit=impl_imports }, state)
where
+ split_imports :: [ExplicitImport] -> (![ExplicitImport],![ExplicitImport],![(Int,Position)])
+ split_imports [imports:import_indices]
+ # (expl_imp_indices,qualified_expl_imp_indices,impl_imports) = split_imports import_indices
+ = case imports of
+ {ei_symbols=ImportSymbolsOnly _,ei_qualified=NotQualified}
+ -> ([imports:expl_imp_indices],qualified_expl_imp_indices,impl_imports)
+ {ei_symbols=ImportSymbolsOnly _}
+ -> (expl_imp_indices,[imports:qualified_expl_imp_indices],impl_imports)
+ {ei_symbols=ImportSymbolsAll,ei_module_n,ei_position}
+ -> (expl_imp_indices,qualified_expl_imp_indices,[(ei_module_n,ei_position):impl_imports])
+ split_imports []
+ = ([],[],[])
+
solve_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)
+ {ei_module_n=imported_mod, ei_position=position, ei_symbols=ImportSymbolsOnly 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
([],[], [], visited_modules, expl_imp_info)
@@ -139,7 +152,7 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
= ((decl_accu, position), (dcl_modules, visited_modules, expl_imp_info, cs))
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)
+ {ei_module_n=imported_mod, ei_position=position, ei_symbols=ImportSymbolsOnly imported_symbols} (dcl_modules, visited_modules, expl_imp_info, cs)
# (not_exported_symbols,decl_accu, unsolved_belonging, visited_modules, expl_imp_info)
= search_qualified_expl_imp_symbols imported_symbols expl_imp_indices_ikh modules_in_component_set path imported_mod
([],[], [], visited_modules, expl_imp_info)
@@ -344,22 +357,24 @@ solveExplicitImports expl_imp_indices_ikh modules_in_component_set importing_mod
[imported_mod:path]
eii_declaring_modules (bitvectSet imported_mod visited_modules)
- try_children [{ei_module_n=imp_imp_mod,ei_symbols=imp_imp_symbols}:imports] expl_imp_indices_ikh
+ try_children [{ei_module_n=imp_imp_mod,ei_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
= 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)
- // follow the path trough an explicit import only if the symbol is listed there
- # (found, opt_belongs)
- = search_imported_symbol imported_symbol imp_imp_symbols
- | not (found && implies (belong_nr<>cUndef) (belong_ident_found belong_ident opt_belongs))
- = try_children imports expl_imp_indices_ikh modules_in_component_set imported_symbol
- belong_nr belong_ident path eii_declaring_modules visited_modules
- = continue imp_imp_mod imports expl_imp_indices_ikh modules_in_component_set imported_symbol
- belong_nr belong_ident path eii_declaring_modules visited_modules
- = continue imp_imp_mod imports expl_imp_indices_ikh modules_in_component_set imported_symbol
+ = case ei_symbols of
+ ImportSymbolsAll
+ -> continue imp_imp_mod imports expl_imp_indices_ikh modules_in_component_set imported_symbol
belong_nr belong_ident path eii_declaring_modules visited_modules
+ ImportSymbolsOnly imp_imp_symbols
+ // follow the path trough an explicit import only if the symbol is listed there
+ # (found, opt_belongs)
+ = search_imported_symbol imported_symbol imp_imp_symbols
+ | not (found && implies (belong_nr<>cUndef) (belong_ident_found belong_ident opt_belongs))
+ -> try_children imports expl_imp_indices_ikh modules_in_component_set imported_symbol
+ belong_nr belong_ident path eii_declaring_modules visited_modules
+ -> continue imp_imp_mod imports expl_imp_indices_ikh modules_in_component_set imported_symbol
+ belong_nr belong_ident path eii_declaring_modules visited_modules
where
continue imp_imp_mod imports expl_imp_indices_ikh modules_in_component_set imported_symbol
belong_nr belong_ident path eii_declaring_modules visited_modules