diff options
author | martinw | 2000-11-01 15:42:13 +0000 |
---|---|---|
committer | martinw | 2000-11-01 15:42:13 +0000 |
commit | 82bd65297bb04bdd2b144e2c426b6a548024ff6e (patch) | |
tree | 84d139b61c5b908fc66df5af7027f215814b0c87 /frontend/checksupport.icl | |
parent | changes were necessary due to different numberings due to caching of dcl (diff) |
improved code for explicit imports,
moved all switches to syntax module
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@277 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/checksupport.icl')
-rw-r--r-- | frontend/checksupport.icl | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/frontend/checksupport.icl b/frontend/checksupport.icl index 069f924..1377fa2 100644 --- a/frontend/checksupport.icl +++ b/frontend/checksupport.icl @@ -18,11 +18,9 @@ cGlobalScope :== 1 cIsNotADclModule :== False cIsADclModule :== True -// MW.. cNeedStdArray :== 1 cNeedStdEnum :== 2 cNeedStdDynamics:== 4 -// ..MW :: Heaps = { hp_var_heap ::!.VarHeap @@ -56,7 +54,7 @@ where toInt (STE_Field _) = cSelectorDefs toInt STE_Class = cClassDefs toInt STE_Member = cMemberDefs - toInt STE_Instance = cInstanceDefs + toInt (STE_Instance _) = cInstanceDefs toInt STE_DclFunction = cFunctionDefs toInt (STE_FunctionOrMacro _) = cMacroDefs toInt _ = NoIndex @@ -84,7 +82,7 @@ where , dcls_explicit ::!{!ExplicitImport} } -:: ExplicitImport = ExplicitImport !Declaration !LineNr; +:: ExplicitImport = ExplicitImport !Declaration !Position :: IclModule = { icl_name :: !Ident @@ -252,12 +250,12 @@ retrieveAndRemoveImportsFromSymbolTable [] all_decls symbol_table retrieveAndRemoveImportsOfModuleFromSymbolTable2 :: !{!.Declaration} !{!.Declaration} ![.Declaration] !*(Heap SymbolTableEntry) -> ([Declaration],.Heap SymbolTableEntry); retrieveAndRemoveImportsOfModuleFromSymbolTable2 imports locals_for_import all_decls symbol_table - # (all_decls, symbol_table) = retrieve_declared_symbols_in_array 0 imports all_decls symbol_table - = retrieve_declared_symbols_in_array 0 locals_for_import all_decls symbol_table + # (all_decls, symbol_table) = retrieve_declared_symbols_in_array ((size imports)-1) imports all_decls symbol_table + = retrieve_declared_symbols_in_array ((size locals_for_import)-1) locals_for_import all_decls symbol_table retrieveAndRemoveImportsOfModuleFromSymbolTable :: !{!.Declaration} ![.Declaration] ![.Declaration] !*(Heap SymbolTableEntry) -> ([Declaration],.Heap SymbolTableEntry); retrieveAndRemoveImportsOfModuleFromSymbolTable imports locals all_decls symbol_table - # (all_decls, symbol_table) = retrieve_declared_symbols_in_array 0 imports all_decls symbol_table + # (all_decls, symbol_table) = retrieve_declared_symbols_in_array ((size imports)-1) imports all_decls symbol_table = retrieve_declared_symbols locals all_decls symbol_table where retrieve_declared_symbols :: ![Declaration] ![Declaration] !*SymbolTable -> (![Declaration], !*SymbolTable) @@ -292,13 +290,13 @@ where retrieve_declared_symbols_in_array :: !Int !{!Declaration} ![Declaration] !*SymbolTable -> (![Declaration], !*SymbolTable) retrieve_declared_symbols_in_array symbol_index symbols decls symbol_table - | symbol_index<size symbols + | symbol_index>=0 #! (declaration,symbols) = symbols![symbol_index] # {dcl_ident=ident=:{id_info},dcl_kind}=declaration #! entry = sreadPtr id_info symbol_table # {ste_kind,ste_def_level} = entry | ste_kind == STE_Empty || ste_def_level > cModuleScope - = retrieve_declared_symbols_in_array (symbol_index+1) symbols decls symbol_table + = retrieve_declared_symbols_in_array (symbol_index-1) symbols decls symbol_table # symbol_table = symbol_table <:= (id_info, entry.ste_previous) = case ste_kind of STE_Field selector_id @@ -307,29 +305,29 @@ retrieve_declared_symbols_in_array symbol_index symbols decls symbol_table _ -> False #! (declaration,symbols) = symbols![symbol_index] #! dcl_index = symbols.[symbol_index].dcl_index - -> retrieve_declared_symbols_in_array (symbol_index+1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id NoIndex dcl_index symbol_table) + -> retrieve_declared_symbols_in_array (symbol_index-1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id NoIndex dcl_index symbol_table) #! (declaration,symbols) = symbols![symbol_index] #! dcl_index = declaration.dcl_index #! declaration = { declaration & dcl_kind = ste_kind } - -> retrieve_declared_symbols_in_array (symbol_index+1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id NoIndex dcl_index symbol_table) + -> retrieve_declared_symbols_in_array (symbol_index-1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id NoIndex dcl_index symbol_table) STE_Imported (STE_Field selector_id) def_mod | case dcl_kind of STE_Imported (STE_Field f) d -> d==def_mod && f==selector_id _ -> False #! (declaration,symbols) = symbols![symbol_index] #! dcl_index = symbols.[symbol_index].dcl_index - -> retrieve_declared_symbols_in_array (symbol_index+1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id def_mod dcl_index symbol_table) + -> retrieve_declared_symbols_in_array (symbol_index-1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id def_mod dcl_index symbol_table) #! (declaration,symbols) = symbols![symbol_index] #! dcl_index = declaration.dcl_index #! declaration = { declaration & dcl_kind = ste_kind } - -> retrieve_declared_symbols_in_array (symbol_index+1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id def_mod dcl_index symbol_table) + -> retrieve_declared_symbols_in_array (symbol_index-1) symbols [declaration : decls ] (removeFieldFromSelectorDefinition selector_id def_mod dcl_index symbol_table) _ | same_STE_Kind ste_kind dcl_kind #! (declaration,symbols) = symbols![symbol_index] - -> retrieve_declared_symbols_in_array (symbol_index+1) symbols [declaration : decls ] symbol_table + -> retrieve_declared_symbols_in_array (symbol_index-1) symbols [declaration : decls ] symbol_table #! (declaration,symbols) = symbols![symbol_index] #! declaration = { declaration & dcl_kind = ste_kind } - -> retrieve_declared_symbols_in_array (symbol_index+1) symbols [declaration : decls ] symbol_table + -> retrieve_declared_symbols_in_array (symbol_index-1) symbols [declaration : decls ] symbol_table = (decls, symbol_table) same_STE_Kind (STE_Imported s1 i1) (STE_Imported s2 i2) = i1==i2 && same_STE_Kind s1 s2 @@ -338,7 +336,7 @@ same_STE_Kind (STE_FunctionOrMacro []) (STE_FunctionOrMacro []) = True same_STE_Kind STE_Type STE_Type = True same_STE_Kind STE_Constructor STE_Constructor = True same_STE_Kind (STE_Field f1) (STE_Field f2) = f1==f2 -same_STE_Kind STE_Instance STE_Instance = True +same_STE_Kind (STE_Instance _) (STE_Instance _) = True same_STE_Kind STE_Member STE_Member = True same_STE_Kind STE_Class STE_Class = True same_STE_Kind _ _ = False @@ -631,6 +629,14 @@ newFreeVariable new_var [] = (True, [new_var]) +local_declaration_for_import :: !u:Declaration .Index -> v:Declaration, [u <= v] +local_declaration_for_import decl=:{dcl_kind=STE_FunctionOrMacro _} module_n + = decl +local_declaration_for_import decl=:{dcl_kind=STE_Imported _ _} module_n + = abort "local_declaration_for_import" +local_declaration_for_import decl=:{dcl_kind} module_n + = {decl & dcl_kind = STE_Imported dcl_kind module_n} + class toIdent a :: !a -> Ident @@ -728,7 +734,7 @@ where STE_Member = file <<< "STE_Member" (<<<) file - STE_Instance + (STE_Instance _) = file <<< "STE_Instance" (<<<) file (STE_Variable _) |