aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzweije2001-07-03 15:14:18 +0000
committerzweije2001-07-03 15:14:18 +0000
commita82ea4ad2d1576d15edc1b11636b2fc81df520dd (patch)
tree0e296a305b285b6473a89cc2e7ccbd0f6cb52e99
parentThis commit was generated by cvs2svn to compensate for changes in r518, (diff)
This commit was generated by cvs2svn to compensate for changes in r520,
which included commits to RCS files with non-trunk default branches. git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@521 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r--sucl/Makefile3
-rw-r--r--sucl/frontend.dcl55
-rw-r--r--sucl/frontend.icl390
3 files changed, 2 insertions, 446 deletions
diff --git a/sucl/Makefile b/sucl/Makefile
index 884f07e..d830a8c 100644
--- a/sucl/Makefile
+++ b/sucl/Makefile
@@ -6,7 +6,7 @@ COCL = cocl
#COCLFLAGS = -lat
SYS = Clean\ System\ Files
-MODULES = basic pretty pfun graph dnc rule trd rewr complete history spine trace absmodule spine strat loop law
+MODULES = basic pretty pfun graph dnc rule trd rewr complete history spine trace absmodule spine strat loop law supercompile
ABC = $(patsubst %,$(SYS)/%.abc,$(MODULES))
@@ -22,6 +22,7 @@ clean:
$(SYS)/%.abc: %.icl
$(COCL) $(COCLFLAGS) $*
+$(SYS)/supercompile.abc: supercompile.icl supercompile.dcl
$(SYS)/law.abc: law.icl law.dcl
$(SYS)/loop.abc: loop.icl loop.dcl trace.dcl strat.dcl history.dcl rule.dcl graph.dcl basic.dcl
$(SYS)/strat.abc: strat.icl strat.dcl history.dcl spine.dcl dnc.dcl rule.dcl graph.dcl pfun.dcl basic.dcl
diff --git a/sucl/frontend.dcl b/sucl/frontend.dcl
deleted file mode 100644
index 9aff725..0000000
--- a/sucl/frontend.dcl
+++ /dev/null
@@ -1,55 +0,0 @@
-definition module frontend
-
-// $Id$
-
-from scanner import SearchPaths
-from general import Optional, Yes, No
-import checksupport, transform, overloading
-
-:: FrontEndSyntaxTree
- = { fe_icl :: !IclModule // The ICL being compiled
- , fe_dcls :: !{#DclModule} // ? The DCLs that were imported
- , fe_components :: !{!Group} // ? Component groups of functions
- , fe_dclIclConversions ::!Optional {# Index} // ?
- , fe_iclDclConversions ::!Optional {# Index} // ?
- , fe_globalFunctions :: !IndexRange // ?
- , fe_arrayInstances :: !IndexRange // ?
- }
-
-:: FrontEndPhase
- = FrontEndPhaseCheck
- | FrontEndPhaseTypeCheck
- | FrontEndPhaseConvertDynamics
- | FrontEndPhaseTransformGroups
- | FrontEndPhaseConvertModules
- | FrontEndPhaseAll
-
-frontEndInterface
- :: !FrontEndPhase // Up to where we want `frontEndInterface' to do its work
- !Ident // ? Name of module being compiled
- !SearchPaths // ? Where to look for input files
- !{#DclModule} // Modules in the DCL cache
- !{#FunDef} // Functions and macros in the DCL cache
- !(Optional Bool) // List generated types (with or without attributes)
- !*PredefinedSymbols // Symbols that are predefined in the Clean langauge (which?), from the DCL cache (?)
- !*HashTable // ? ... from the DCL cache
- !*Files // Original file system state
- !*File // Original standard error stream state
- !*File // Original standard io stream state
- !*File // Original standard out stream state
- (!Optional !*File) // ? TCL file (?)
- !*Heaps // ? ... from the DCL cache
-
- -> ( !Optional *FrontEndSyntaxTree // Resulting syntax tree if successful
- , !.{# FunDef } // ? Cached functions and macros (which?)
- , !Int // ? Don't care (?)
- , !Int // ? main_dcl_module_n (?)
- , !*PredefinedSymbols // ? Symbols that are predefined in the Clean language
- , !*HashTable // ?
- , !*Files // Resulting file system state
- , !*File // Resulting standard error stream state
- , !*File // Resulting standard io stream state
- , !*File // Resulting standard out stream state
- , !Optional !*File // ? TCL file (?)
- , !*Heaps // ?
- )
diff --git a/sucl/frontend.icl b/sucl/frontend.icl
deleted file mode 100644
index f2470e3..0000000
--- a/sucl/frontend.icl
+++ /dev/null
@@ -1,390 +0,0 @@
-implementation module frontend
-
-// $Id$
-
-// vi:set tabstop=4 noet:
-
-import scanner, parse, postparse, check, type, trans, convertcases, overloading, utilities, convertDynamics,
- convertimportedtypes, checkKindCorrectness, compilerSwitches, analtypes, generics, supercompile
-
-:: FrontEndSyntaxTree
- = { fe_icl :: !IclModule
- , fe_dcls :: !{#DclModule}
- , fe_components :: !{!Group}
- , fe_dclIclConversions ::!Optional {# Index}
- , fe_iclDclConversions ::!Optional {# Index}
- , fe_globalFunctions :: !IndexRange
- , fe_arrayInstances :: !IndexRange
- }
-
-// trace macro
-(-*->) infixl
-(-*->) value trace
- :== value // ---> trace
-
-build_optional_icl_dcl_conversions :: !Int !(Optional {# Index}) -> Optional {# Index}
-build_optional_icl_dcl_conversions size No
- = Yes (buildIclDclConversions size {})
-build_optional_icl_dcl_conversions size (Yes dcl_icl_conversions)
- = Yes (buildIclDclConversions size dcl_icl_conversions)
-
-buildIclDclConversions :: !Int !{# Index} -> {# Index}
-buildIclDclConversions table_size dcl_icl_conversions
- # dcl_table_size = size dcl_icl_conversions
- icl_dcl_conversions = update_conversion_array 0 dcl_table_size dcl_icl_conversions (createArray table_size NoIndex)
- = fill_empty_positions 0 table_size dcl_table_size icl_dcl_conversions
-
-where
- update_conversion_array dcl_index dcl_table_size dcl_icl_conversions icl_conversions
- | dcl_index < dcl_table_size
- # icl_index = dcl_icl_conversions.[dcl_index]
- = update_conversion_array (inc dcl_index) dcl_table_size dcl_icl_conversions
- { icl_conversions & [icl_index] = dcl_index }
- = icl_conversions
-
- fill_empty_positions next_index table_size next_new_index icl_conversions
- | next_index < table_size
- | icl_conversions.[next_index] == NoIndex
- = fill_empty_positions (inc next_index) table_size (inc next_new_index) { icl_conversions & [next_index] = next_new_index }
- = fill_empty_positions (inc next_index) table_size next_new_index icl_conversions
- = icl_conversions
-
-:: FrontEndOptions
- = { feo_upToPhase :: !FrontEndPhase // How much of the frontend to execute
- feo_search_paths :: !SearchPaths // Folders in which to search for files
- feo_typelisting :: !Optional !Bool // Whether to list derived types, and if so whether to list attributes
- feo_fusionstyle :: !FusionStyle // What type of fusion to perform
- }
-
-:: FrontEndPhase
- = FrontEndPhaseCheck
- | FrontEndPhaseTypeCheck
- | FrontEndPhaseConvertDynamics
- | FrontEndPhaseTransformGroups
- | FrontEndPhaseConvertModules
- | FrontEndPhaseAll
-
-:: FusionStyle
- = FS_online // Do online fusion (supercompilation)
- | FS_offline // Do offline fusion (deforestation)
- | FS_none // Do no fusion
-
-instance == FrontEndPhase where
- (==) a b
- = equal_constructor a b
-
-frontSyntaxTree cached_functions_and_macros n_functions_and_macros_in_dcl_modules main_dcl_module_n predef_symbols hash_table files error io out tcl_file icl_mod dcl_mods fun_defs components array_instances optional_dcl_icl_conversions
- global_fun_range heaps
- :== (Yes {
- fe_icl = {icl_mod & icl_functions=fun_defs }
- , fe_dcls = dcl_mods
- , fe_components = components
- , fe_dclIclConversions = optional_dcl_icl_conversions
- , fe_iclDclConversions = build_optional_icl_dcl_conversions (size fun_defs) optional_dcl_icl_conversions
- , fe_globalFunctions = global_fun_range
- , fe_arrayInstances = array_instances
- },cached_functions_and_macros,n_functions_and_macros_in_dcl_modules,main_dcl_module_n,predef_symbols,hash_table,files,error,io,out,tcl_file,heaps
- )
-
-//frontEndInterface :: !FrontEndPhase !Ident !SearchPaths !{#DclModule} !{#FunDef} !(Optional Bool) !*PredefinedSymbols !*HashTable !*Files !*File !*File !*File !*File !*Heaps -> ( !Optional *FrontEndSyntaxTree,!.{# FunDef },!Int,!Int,!*PredefinedSymbols, !*HashTable, !*Files, !*File !*File, !*File, !*File, !*Heaps)
-frontEndInterface :: !FrontEndOptions !Ident !{#DclModule} !{#FunDef} !*PredefinedSymbols !*HashTable !*Files !*File !*File !*File (!Optional !*File) !*Heaps
- -> ( !Optional *FrontEndSyntaxTree,!.{# FunDef },!Int,!Int,!*PredefinedSymbols, !*HashTable, !*Files, !*File, !*File, !*File, !Optional !*File, !*Heaps)
-
-frontEndInterface opts mod_ident dcl_modules functions_and_macros predef_symbols hash_table files error io out tcl_file heaps
- # {feo_upToPhase=upToPhase, feo_search_paths=search_paths,feo_list_inferred_types=list_inferred_types} = opts
- # (ok, mod, hash_table, error, predef_symbols, files)
- = wantModule cWantIclFile mod_ident NoPos (hash_table /* ---> ("Parsing:", mod_ident)*/) error search_paths predef_symbols files
- | not ok
- = (No,{},0,0,predef_symbols, hash_table, files, error, io, out, tcl_file, heaps)
- # cached_module_idents = [dcl_mod.dcl_name \\ dcl_mod<-:dcl_modules]
- # (ok, mod, global_fun_range, mod_functions, optional_dcl_mod, modules, dcl_module_n_in_cache,n_functions_and_macros_in_dcl_modules,hash_table, error, predef_symbols, files)
- = scanModule (mod -*-> "Scanning") cached_module_idents (size functions_and_macros) hash_table error search_paths predef_symbols files
- /* JVG: */
-// # hash_table = {hash_table & hte_entries={}}
- # hash_table = remove_icl_symbols_from_hash_table hash_table
- /**/
- | not ok
- = (No,{},0,0,predef_symbols, hash_table, files, error, io, out, tcl_file, heaps)
- # symbol_table = hash_table.hte_symbol_heap
- (ok, icl_mod, dcl_mods, components, optional_dcl_icl_conversions,cached_functions_and_macros,main_dcl_module_n,heaps, predef_symbols, symbol_table, error /* TD */, directly_imported_dcl_modules)
- = checkModule mod global_fun_range mod_functions n_functions_and_macros_in_dcl_modules dcl_module_n_in_cache optional_dcl_mod modules dcl_modules functions_and_macros predef_symbols (symbol_table -*-> "Checking") error heaps
- hash_table = { hash_table & hte_symbol_heap = symbol_table}
-
- | not ok
- = (No,{},0,main_dcl_module_n,predef_symbols, hash_table, files, error, io, out, tcl_file, heaps)
-
- #! (icl_functions,icl_mod) = select_and_remove_icl_functions_from_record icl_mod
- with
- select_and_remove_icl_functions_from_record :: !*IclModule -> (!.{#FunDef},!.IclModule)
- select_and_remove_icl_functions_from_record icl_mod=:{icl_functions} = (icl_functions,{icl_mod & icl_functions={}})
-
-// # {icl_functions,icl_instances,icl_specials,icl_common,icl_import} = icl_mod
- # {icl_instances,icl_specials,icl_common,icl_import,icl_name,icl_imported_objects,icl_used_module_numbers} = icl_mod
-/*
- (_,f,files) = fopen "components" FWriteText files
- (components, icl_functions, f) = showComponents components 0 True icl_functions f
- (ok,files) = fclose f files
- | ok<>ok
- = abort "";
-*/
-// dcl_mods = {{dcl_mod & dcl_declared={dcls_import=[],dcls_local=[],dcls_explicit=[]}}\\ dcl_mod<-:dcl_mods}
-// # dcl_mods = {{dcl_mod & dcl_declared={dcls_import={},dcls_local=[],dcls_local_for_import={},dcls_explicit={}}}\\ dcl_mod<-:dcl_mods}
-
- # var_heap = heaps.hp_var_heap
- type_heaps = heaps.hp_type_heaps
- fun_defs = icl_functions
- array_instances = {ir_from=0, ir_to=0}
-
- | upToPhase == FrontEndPhaseCheck
- = frontSyntaxTree cached_functions_and_macros n_functions_and_macros_in_dcl_modules main_dcl_module_n predef_symbols hash_table files error io out tcl_file icl_mod dcl_mods fun_defs components array_instances optional_dcl_icl_conversions global_fun_range heaps
-
-// AA..
- # error_admin = {ea_file = error, ea_loc = [], ea_ok = True }
- # (ti_common_defs, dcl_mods) = get_common_defs dcl_mods
- ti_common_defs = { ti_common_defs & [main_dcl_module_n] = icl_common }
- # (td_infos, type_heaps, error_admin) = analTypeDefs ti_common_defs icl_used_module_numbers type_heaps error_admin
- (fun_defs, dcl_mods, th_vars, td_infos, error_admin)
- = checkKindCorrectness main_dcl_module_n icl_instances
- fun_defs ti_common_defs dcl_mods type_heaps.th_vars td_infos error_admin
- type_heaps = { type_heaps & th_vars = th_vars }
- # heaps = { heaps & hp_type_heaps = type_heaps }
- # ti_common_defs = {dcl_common \\ {dcl_common} <-: dcl_mods }
- # (saved_main_dcl_common, ti_common_defs) = replace ti_common_defs main_dcl_module_n icl_common
-
- #! (components, ti_common_defs, fun_defs, generic_range, td_infos, heaps, hash_table, predef_symbols, dcl_mods, optional_dcl_icl_conversions, error_admin) =
- case SupportGenerics of
- True -> convertGenerics
- components main_dcl_module_n ti_common_defs fun_defs td_infos
- heaps hash_table predef_symbols dcl_mods optional_dcl_icl_conversions error_admin
- False -> (components, ti_common_defs, fun_defs, {ir_to=0,ir_from=0}, td_infos, heaps, hash_table, predef_symbols, dcl_mods, optional_dcl_icl_conversions, error_admin)
-
- # (icl_common, ti_common_defs) = replace copied_ti_common_defs main_dcl_module_n saved_main_dcl_common
- with
- copied_ti_common_defs :: !.{#CommonDefs} // needed for Clean 2.0 to disambiguate overloading of replace
- copied_ti_common_defs = {x \\ x <-: ti_common_defs}
- # dcl_mods = { {dcl_mod & dcl_common = common} \\ dcl_mod <-: dcl_mods & common <-: ti_common_defs }
-
- # error = error_admin.ea_file
- #! ok = error_admin.ea_ok
- | not ok
- = (No,{},0,main_dcl_module_n,predef_symbols, hash_table, files, error, io, out, tcl_file, heaps)
-// ..AA
-
- # (ok, fun_defs, array_instances, type_code_instances, common_defs, imported_funs, type_def_infos, heaps, predef_symbols, error,out)
- = typeProgram (components -*-> "Typing") main_dcl_module_n fun_defs/*icl_functions*/ icl_specials list_inferred_types icl_common [a\\a<-:icl_import] dcl_mods icl_used_module_numbers td_infos heaps predef_symbols error out dcl_mods
-
- | not ok
- = (No,{},0,main_dcl_module_n,predef_symbols, hash_table, files, error, io, out, tcl_file, heaps)
-
-
- # (fun_def_size, fun_defs) = usize fun_defs
- # (components, fun_defs) = partitionateFunctions (fun_defs -*-> "partitionateFunctions") [ global_fun_range, icl_instances, icl_specials, generic_range]
-
-// (components, fun_defs, error) = showTypes components 0 fun_defs error
-// (components, fun_defs, error) = showComponents components 0 True fun_defs error
-// (fun_defs, error) = showFunctions array_instances fun_defs error
-
- | upToPhase == FrontEndPhaseTypeCheck
- = frontSyntaxTree cached_functions_and_macros n_functions_and_macros_in_dcl_modules main_dcl_module_n predef_symbols hash_table files error io out tcl_file icl_mod dcl_mods fun_defs components array_instances optional_dcl_icl_conversions global_fun_range heaps
-
- # (components, fun_defs, predef_symbols, dcl_types, used_conses_in_dynamics, var_heap, type_heaps, expression_heap, tcl_file)
- = convertDynamicPatternsIntoUnifyAppls type_code_instances common_defs main_dcl_module_n (components -*-> "convertDynamics") fun_defs predef_symbols
- heaps.hp_var_heap heaps.hp_type_heaps heaps.hp_expression_heap tcl_file dcl_mods icl_mod /* TD */ directly_imported_dcl_modules
-// # (components, fun_defs, error) = showComponents3 components 0 False fun_defs error
-// (components, fun_defs, error) = showComponents components 0 True fun_defs error
-
- | upToPhase == FrontEndPhaseConvertDynamics
- # heaps = {hp_var_heap=var_heap, hp_type_heaps=type_heaps, hp_expression_heap=expression_heap}
- = frontSyntaxTree cached_functions_and_macros n_functions_and_macros_in_dcl_modules main_dcl_module_n predef_symbols hash_table files error io out tcl_file icl_mod dcl_mods fun_defs components array_instances optional_dcl_icl_conversions global_fun_range heaps
-
-// (components, fun_defs, error) = showComponents components 0 True fun_defs error
-
-// VZ..
-// Select fusion style and do fusion
- # (components, fun_defs, dcl_types, used_conses, var_heap, type_heaps, expression_heap)
- = case opts.feo_fusionstyle of
- FS_offline
- # (cleanup_info, acc_args, components, fun_defs, var_heap, expression_heap)
- = analyseGroups common_defs array_instances main_dcl_module_n (components -*-> "Analyse") fun_defs var_heap expression_heap
- -> transformGroups cleanup_info main_dcl_module_n (components -*-> "Transform") fun_defs acc_args common_defs imported_funs dcl_types used_conses_in_dynamics type_def_infos var_heap type_heaps expression_heap
- FS_online
- -> supercompile common_defs array_instances main_dcl_module_n (components -*-> "Supercompile") fun_defs var_heap expression_heap imported_funs dcl_types used_conses_in_dynamics type_def_infos type_heaps
- FS_none
- -> (components, fun_defs, dcl_types, used_conses_in_dynamics, var_heap, expression_heap)
-// ..VZ
-
- | upToPhase == FrontEndPhaseTransformGroups
- # heaps = {hp_var_heap=var_heap, hp_type_heaps=type_heaps, hp_expression_heap=expression_heap}
- = frontSyntaxTree cached_functions_and_macros n_functions_and_macros_in_dcl_modules main_dcl_module_n predef_symbols hash_table files error io out tcl_file icl_mod dcl_mods fun_defs components array_instances optional_dcl_icl_conversions global_fun_range heaps
-
- # (dcl_types, used_conses, var_heap, type_heaps) = convertIclModule main_dcl_module_n common_defs (dcl_types -*-> "Convert icl") used_conses var_heap type_heaps
- # (dcl_types, used_conses, var_heap, type_heaps) = convertDclModule main_dcl_module_n dcl_mods common_defs (dcl_types -*-> "Convert dcl") used_conses var_heap type_heaps
-
-// (components, fun_defs, out) = showComponents components 0 False fun_defs out
-
- | upToPhase == FrontEndPhaseConvertModules
- # heaps = {hp_var_heap=var_heap, hp_type_heaps=type_heaps, hp_expression_heap=expression_heap}
- = frontSyntaxTree cached_functions_and_macros n_functions_and_macros_in_dcl_modules main_dcl_module_n predef_symbols hash_table files error io out tcl_file icl_mod dcl_mods fun_defs components array_instances optional_dcl_icl_conversions global_fun_range heaps
-
-// (components, fun_defs, out) = showComponents components 0 False fun_defs out
- # (used_funs, components, fun_defs, dcl_types, used_conses, var_heap, type_heaps, expression_heap)
- = convertCasesOfFunctions components main_dcl_module_n imported_funs common_defs fun_defs (dcl_types -*-> "Convert cases") used_conses
- var_heap type_heaps expression_heap
- #! (dcl_types, type_heaps, var_heap)
- = convertImportedTypeSpecifications main_dcl_module_n dcl_mods imported_funs common_defs used_conses used_funs (dcl_types -*-> "Convert types") type_heaps var_heap
- # heaps = {hp_var_heap = var_heap, hp_expression_heap=expression_heap, hp_type_heaps=type_heaps}
-// (components, fun_defs, error) = showTypes components 0 fun_defs error
-// (dcl_mods, out) = showDclModules dcl_mods out
-// (components, fun_defs, out) = showComponents components 0 False fun_defs out
-
- #! fe ={ fe_icl =
-// {icl_mod & icl_functions=fun_defs }
- {icl_functions=fun_defs,icl_instances=icl_instances,icl_specials=icl_specials,icl_common=icl_common,icl_import=icl_import,
- icl_name=icl_name,icl_imported_objects=icl_imported_objects,icl_used_module_numbers=icl_used_module_numbers }
-
- , fe_dcls = dcl_mods
- , fe_components = components
- , fe_dclIclConversions = optional_dcl_icl_conversions
- , fe_iclDclConversions = build_optional_icl_dcl_conversions (size fun_defs) optional_dcl_icl_conversions
- , fe_arrayInstances = array_instances,fe_globalFunctions=global_fun_range
- }
- = (Yes fe,cached_functions_and_macros,n_functions_and_macros_in_dcl_modules,main_dcl_module_n,predef_symbols,hash_table,files,error,io,out,tcl_file,heaps)
- where
- build_optional_icl_dcl_conversions :: !Int !(Optional {# Index}) -> Optional {# Index}
- build_optional_icl_dcl_conversions size No
- = Yes (build_icl_dcl_conversions size {})
- build_optional_icl_dcl_conversions size (Yes dcl_icl_conversions)
- = Yes (build_icl_dcl_conversions size dcl_icl_conversions)
-
- build_icl_dcl_conversions :: !Int !{# Index} -> {# Index}
- build_icl_dcl_conversions table_size dcl_icl_conversions
- # dcl_table_size = size dcl_icl_conversions
- icl_dcl_conversions = update_conversion_array 0 dcl_table_size dcl_icl_conversions (createArray table_size NoIndex)
- = fill_empty_positions 0 table_size dcl_table_size icl_dcl_conversions
-
- update_conversion_array dcl_index dcl_table_size dcl_icl_conversions icl_conversions
- | dcl_index < dcl_table_size
- # icl_index = dcl_icl_conversions.[dcl_index]
- = update_conversion_array (inc dcl_index) dcl_table_size dcl_icl_conversions
- { icl_conversions & [icl_index] = dcl_index }
- = icl_conversions
-
- fill_empty_positions next_index table_size next_new_index icl_conversions
- | next_index < table_size
- | icl_conversions.[next_index] == NoIndex
- = fill_empty_positions (inc next_index) table_size (inc next_new_index) { icl_conversions & [next_index] = next_new_index }
- = fill_empty_positions (inc next_index) table_size next_new_index icl_conversions
- = icl_conversions
- get_common_defs dcl_mods
- #! size = size dcl_mods
- # ({dcl_common=arbitrary_value_for_initializing}, dcl_mods) = dcl_mods![0]
- = loop 0 (createArray size arbitrary_value_for_initializing) dcl_mods
- where
- loop :: !Int !*{#CommonDefs} !u:{#DclModule} -> (!*{#CommonDefs}, !u:{#DclModule})
- loop i common_defs dcl_mods
- | i==size dcl_mods
- = (common_defs, dcl_mods)
- # ({dcl_common}, dcl_mods) = dcl_mods![i]
- = loop (i+1) { common_defs & [i] = dcl_common } dcl_mods
-
-newSymbolTable :: !Int -> *{# SymbolTableEntry}
-newSymbolTable size
- = createArray size { ste_index = NoIndex, ste_def_level = -1, ste_kind = STE_Empty, ste_previous = abort "PreviousPlaceholder"}
-
-showFunctions :: !IndexRange !*{# FunDef} !*File -> (!*{# FunDef},!*File)
-showFunctions {ir_from, ir_to} fun_defs file
- = iFoldSt show_function ir_from ir_to (fun_defs, file)
-where
- show_function fun_index (fun_defs, file)
- # (fd, fun_defs) = fun_defs![fun_index]
- = (fun_defs, file <<< fun_index <<< fd <<< '\n')
-
-showComponents :: !*{! Group} !Int !Bool !*{# FunDef} !*File -> (!*{! Group}, !*{# FunDef},!*File)
-showComponents comps comp_index show_types fun_defs file
- | comp_index >= size comps
- = (comps, fun_defs, file)
- # (comp, comps) = comps![comp_index]
- # (fun_defs, file) = show_component comp.group_members show_types fun_defs (file <<< "component " <<< comp_index <<< '\n')
- = showComponents comps (inc comp_index) show_types fun_defs file
-where
- show_component [] show_types fun_defs file
- = (fun_defs, file <<< '\n')
- show_component [fun:funs] show_types fun_defs file
- # (fun_def, fun_defs) = fun_defs![fun]
- | show_types
- = show_component funs show_types fun_defs (file <<< fun_def.fun_type <<< '\n' <<< fun_def)
- = show_component funs show_types fun_defs (file <<< fun_def)
-// = show_component funs show_types fun_defs (file <<< fun_def.fun_symb)
-
-showComponents2 :: !{! Group} !Int !*{# FunDef} !{! ConsClasses} !*File -> (!*{# FunDef},!*File)
-showComponents2 comps comp_index fun_defs acc_args file
- | comp_index >= (size comps)
- = (fun_defs, file)
- # (fun_defs, file) = show_component comps.[comp_index].group_members fun_defs acc_args file
- = showComponents2 comps (inc comp_index) fun_defs acc_args file
-where
- show_component [] fun_defs _ file
- = (fun_defs, file <<< '\n')
- show_component [fun:funs] fun_defs acc_args file
- # (fd, fun_defs) = fun_defs![fun]
- # file = show_accumulating_arguments acc_args.[fun].cc_args (file <<< fd.fun_symb <<< '.' <<< fun <<< " (")
- = show_component funs fun_defs acc_args (file <<< ") ")
-
- show_accumulating_arguments [ cc : ccs] file
- | cc == cPassive
- = show_accumulating_arguments ccs (file <<< 'p')
- | cc == cActive
- = show_accumulating_arguments ccs (file <<< 'c')
- | cc == cAccumulating
- = show_accumulating_arguments ccs (file <<< 'a')
- = show_accumulating_arguments ccs (file <<< '?')
- show_accumulating_arguments [] file
- = file
-
-
-show_components comps fun_defs = map (show_component fun_defs) comps
-
-show_component fun_defs [] = []
-show_component fun_defs [fun:funs] = [fun_defs.[fun ---> fun] : show_component fun_defs funs]
-
-showTypes :: !*{! Group} !Int !*{# FunDef} !*File -> (!*{! Group}, !*{# FunDef},!*File)
-showTypes comps comp_index fun_defs file
- | comp_index >= size comps
- = (comps, fun_defs, file)
- # (comp, comps) = comps![comp_index]
- # (fun_defs, file) = show_types comp.group_members fun_defs (file <<< "component " <<< comp_index <<< '\n')
- = showTypes comps (inc comp_index) fun_defs file
-where
- show_types [] fun_defs file
- = (fun_defs, file <<< '\n')
- show_types [fun:funs] fun_defs file
- # (fun_def, fun_defs) = fun_defs![fun]
- # properties = { form_properties = cAttributed bitor cAnnotated, form_attr_position = No }
- (Yes ftype) = fun_def.fun_type
- = show_types funs fun_defs (file <<< fun_def.fun_symb <<< " :: " <:: (properties, ftype, No) <<< '\n' )
-
-showDclModules :: !u:{#DclModule} !*File -> (!u:{#DclModule}, !*File)
-showDclModules dcl_mods file
- = show_dcl_mods 0 dcl_mods file
-where
- show_dcl_mods mod_index dcl_mods file
- # (size_dcl_mods, dcl_mods) = usize dcl_mods
- | mod_index == size_dcl_mods
- = (dcl_mods, file)
- | otherwise
- # (dcl_mod, dcl_mods) = dcl_mods ! [mod_index]
- # file = show_dcl_mod dcl_mod file
- = (dcl_mods, file)
-
- show_dcl_mod {dcl_name, dcl_functions} file
- # file = file <<< dcl_name <<< ":\n"
- # file = show_dcl_functions 0 dcl_functions file
- = file <<< "\n"
- show_dcl_functions fun_index dcl_functions file
- | fun_index == size dcl_functions
- = file
- | otherwise
- # file = show_dcl_function dcl_functions.[fun_index] file
- = show_dcl_functions (inc fun_index) dcl_functions file
- show_dcl_function {ft_symb, ft_type} file
- = file <<< ft_symb <<< " :: " <<< ft_type <<< "\n"