aboutsummaryrefslogtreecommitdiff
path: root/frontend/postparse.icl
diff options
context:
space:
mode:
authorjohnvg2013-04-08 09:16:09 +0000
committerjohnvg2013-04-08 09:16:09 +0000
commit9894d082bd5a0f3c74a2874f9c9a78fd89a089a5 (patch)
tree9d851f5631f8981893af610d96371b4afd2d1009 /frontend/postparse.icl
parentupdate derive class for deriving generic functions in class context (from iTa... (diff)
add generic function dependencies for generic function definitions,
add generic case definitions in definition modules for the types used to make the generic representation, in generic case definitions in definition modules specify what generic info and dependencies are used git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@2227 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/postparse.icl')
-rw-r--r--frontend/postparse.icl252
1 files changed, 212 insertions, 40 deletions
diff --git a/frontend/postparse.icl b/frontend/postparse.icl
index 6af58be..fc63ca7 100644
--- a/frontend/postparse.icl
+++ b/frontend/postparse.icl
@@ -1054,13 +1054,14 @@ where
scan_dcl_module dcl_module mod=:{mod_defs = pdefs} parsed_modules searchPaths modtimefunction files ca
# (_, defs, imports, imported_objects,foreign_exports,ca)
= reorganiseDefinitionsAndAddTypes dcl_module support_dynamics False pdefs ca
- (def_macros, ca) = collectFunctions defs.def_macros False {ca & ca_fun_count=0,ca_rev_fun_defs=[]}
- (range, ca) = addFunctionsRange def_macros ca
+ n_macros = length defs.def_macros
+ (def_macros, ca) = collectFunctions defs.def_macros False {ca & ca_fun_count=n_macros,ca_rev_fun_defs=[]}
+ range = {ir_from=0,ir_to=n_macros}
(rev_fun_defs,ca) = ca!ca_rev_fun_defs
- ca = {ca & ca_rev_fun_defs=[]}
+ def_macros = def_macros++reverse rev_fun_defs
(pea_ok,ca) = ca!ca_error.pea_ok
- mod = { mod & mod_imports = imports, mod_imported_objects = imported_objects, mod_defs = { defs & def_macros=reverse rev_fun_defs,def_macro_indices = range }}
ca = {ca & ca_rev_fun_defs=[]}
+ mod = { mod & mod_imports = imports, mod_imported_objects = imported_objects, mod_defs = { defs & def_macros=def_macros,def_macro_indices = range }}
(import_ok, parsed_modules,files, ca)
= scanModules imports [mod : parsed_modules] cached_modules searchPaths support_generics support_dynamics modtimefunction files ca
= (pea_ok && import_ok, parsed_modules,files, ca)
@@ -1083,7 +1084,7 @@ scanModule mod=:{mod_ident,mod_type,mod_defs = pdefs} cached_modules support_gen
(import_dcls_ok, parsed_modules, files, ca)
= scanModules imports parsed_modules cached_modules searchPaths support_generics support_dynamics modtimefunction files ca
- (pea_dcl_ok,optional_dcl_mod,ca) = collect_main_dcl_module optional_parsed_dcl_mod dcl_module_n ca
+ (pea_dcl_ok,optional_dcl_mod,ca) = collect_main_dcl_module optional_parsed_dcl_mod dcl_module_n ca
modules = case (reverse parsed_modules) of
[{mod_type=MK_NoMainDcl}:modules]
@@ -1153,12 +1154,14 @@ where
= (import_ok, Yes mod, NoIndex,parsed_modules, cached_modules,files, ca)
collect_main_dcl_module (Yes mod=:{mod_defs=defs}) dcl_module_n ca
- # (macro_defs, ca) = collectFunctions defs.def_macros False {ca & ca_fun_count=0,ca_rev_fun_defs=[]}
- (range, ca) = addFunctionsRange macro_defs ca
+ # n_macros = length defs.def_macros
+ (def_macros, ca) = collectFunctions defs.def_macros False {ca & ca_fun_count=n_macros,ca_rev_fun_defs=[]}
+ range = {ir_from=0,ir_to=n_macros}
(rev_fun_defs,ca) = ca!ca_rev_fun_defs
+ def_macros = def_macros++reverse rev_fun_defs
ca = {ca & ca_rev_fun_defs=[]}
(pea_ok,ca) = ca!ca_error.pea_ok
- mod = { mod & mod_defs = { defs & def_macros=reverse rev_fun_defs,def_macro_indices = range }}
+ mod = { mod & mod_defs = { defs & def_macros=def_macros,def_macro_indices = range }}
= (pea_ok,Yes mod,ca)
collect_main_dcl_module No dcl_module_n ca
| dcl_module_n==NoIndex
@@ -1194,21 +1197,164 @@ collectFunctionBodies fun_name fun_arity fun_prio fun_kind all_defs=:[PD_Functio
collectFunctionBodies fun_name fun_arity fun_prio fun_kind defs ca
= ([], fun_kind, defs, ca)
-collectGenericBodies :: ![ParsedDefinition] !Ident !Int !TypeCons !*CollectAdmin -> (![ParsedBody], ![ParsedDefinition],!*CollectAdmin)
-collectGenericBodies all_defs=:[PD_GenericCase gc=:{gc_gcf=GCF gc_ident2 gcf} : defs] gc_ident1 gcf_arity1 gc_type_cons1 ca
+collectGenericBodies :: ![ParsedDefinition] !Ident !Int !TypeCons !*CollectAdmin -> (![ParsedBody], !Int, ![ParsedDefinition],!*CollectAdmin)
+collectGenericBodies all_defs=:[PD_GenericCase gc=:{gc_gcf=GCF gc_ident2 gcf} _ : defs] gc_ident1 gcf_arity1 gc_type_cons1 ca
| gc_ident2==gc_ident1 && gc.gc_type_cons==gc_type_cons1
- #! (bodies, rest_defs, ca) = collectGenericBodies defs gc_ident1 gcf_arity1 gc_type_cons1 ca
- # (GCF _ {gcf_body=GCB_ParsedBody args rhs,gcf_arity}) = gc.gc_gcf
+ #! (bodies, generic_info, rest_defs, ca) = collectGenericBodies defs gc_ident1 gcf_arity1 gc_type_cons1 ca
+ # (GCF _ {gcf_body=GCB_ParsedBody args rhs,gcf_arity,gcf_generic_info}) = gc.gc_gcf
+ # generic_info = generic_info bitor gcf_generic_info
#! body = {pb_args = args, pb_rhs = rhs, pb_position = gc.gc_pos}
| gcf_arity==gcf_arity1
- = ([body : bodies], rest_defs, ca)
- #! msg = "This generic alternative has " +++ toString gcf_arity +++ " argument"
- + (if (gcf_arity <> 1) "s" "")+++" instead of " +++ toString gcf_arity1
- #! ca = postParseError gc.gc_pos msg ca
- = ([body : bodies], rest_defs, ca)
- = ([], all_defs, ca)
+ = ([body : bodies], generic_info, rest_defs, ca)
+ #! msg = "This generic alternative has " +++ toString gcf_arity +++ " argument"
+ +++ (if (gcf_arity <> 1) "s" "")+++" instead of " +++ toString gcf_arity1
+ #! ca = postParseError gc.gc_pos msg ca
+ = ([body : bodies], generic_info, rest_defs, ca)
+ = ([], 0, all_defs, ca)
collectGenericBodies defs gc_ident1 gcf_arity1 gc_type_cons1 ca
- = ([], defs, ca)
+ = ([], 0, defs, ca)
+
+replace_generic_info_record_by_arguments :: !Int ![ParsedBody] !Int !TypeCons !*CollectAdmin -> (![ParsedBody],!Int,!GenericInstanceDependencies,!*CollectAdmin)
+replace_generic_info_record_by_arguments generic_info bodies arity (TypeConsSymb {type_ident={id_name}}) ca
+ # arity = add_n_bits generic_info (arity-1)
+ # (bodies,n_deps,deps,ca) = replace_generic_info_record_by_arguments_in_bodies bodies generic_info -1 0 ca
+ | n_deps>=0
+ # deps = deps bitand ((1<<n_deps)-1)
+ = (bodies,arity,GenericInstanceUsedArgs n_deps deps,ca)
+ = (bodies,arity,GenericInstanceUsedArgs 0 0,ca)
+ where
+ generic_cons_index
+ = case id_name of
+ "OBJECT" -> 0
+ "CONS" -> 1
+ "RECORD" -> 2
+ "FIELD" -> 3
+
+ replace_generic_info_record_by_arguments_in_bodies [body:bodies] generic_info n_deps deps ca
+ # (body,n_deps,deps,ca) = replace_generic_info_record_by_arguments_in_body body generic_info n_deps deps ca
+ # (bodies,n_deps,deps,ca) = replace_generic_info_record_by_arguments_in_bodies bodies generic_info n_deps deps ca
+ = ([body : bodies],n_deps,deps,ca)
+ replace_generic_info_record_by_arguments_in_bodies [] generic_info n_deps deps ca
+ = ([],n_deps,deps,ca)
+
+ replace_generic_info_record_by_arguments_in_body body=:{pb_args=[PE_Record PE_Empty NoRecordName field_assignments:args]} generic_info n_deps deps ca
+ # (n_deps,deps) = mark_deps_in_args args 0 n_deps deps
+ # (args,ca) = add_fields generic_info field_assignments args ca
+ = ({body & pb_args = args},n_deps,deps,ca)
+ replace_generic_info_record_by_arguments_in_body body=:{pb_args=[PE_WildCard:args]} generic_info n_deps deps ca
+ # (n_deps,deps) = mark_deps_in_args args 0 n_deps deps
+ # args = add_wild_cards generic_info args
+ = ({body & pb_args = args},n_deps,deps,ca)
+
+ add_fields :: !Int [FieldAssignment] [ParsedExpr] *CollectAdmin -> (![ParsedExpr],!*CollectAdmin)
+ add_fields generic_info field_assignments args ca
+ | generic_info==0
+ = (args,ca)
+ | generic_info bitand 1<>0
+ = add_field (field_0_name_of_generic_info generic_cons_index) (generic_info bitxor 1) field_assignments args ca
+ | generic_info bitand 2<>0
+ = add_field (field_1_name_of_generic_info generic_cons_index) (generic_info bitxor 2) field_assignments args ca
+ | generic_info bitand 4<>0
+ = add_field (field_2_name_of_generic_info generic_cons_index) (generic_info bitxor 4) field_assignments args ca
+ | generic_info bitand 8<>0
+ = add_field (field_3_name_of_generic_info generic_cons_index) (generic_info bitxor 8) field_assignments args ca
+ | generic_info bitand 16<>0
+ = add_field (field_4_name_of_generic_info generic_cons_index) (generic_info bitxor 16) field_assignments args ca
+ | generic_info bitand 32<>0
+ = add_field (field_5_name_of_generic_info generic_cons_index) (generic_info bitxor 32) field_assignments args ca
+
+ add_field :: !{#Char} !Int [FieldAssignment] [ParsedExpr] *CollectAdmin -> (![ParsedExpr],!*CollectAdmin)
+ add_field field_name generic_info field_assignments args ca
+ # (arg,ca) = field_or_wild_card field_name field_assignments ca
+ # (args,ca) = add_fields generic_info field_assignments args ca
+ = ([arg : args],ca)
+
+ add_wild_cards 0 args
+ = args
+ add_wild_cards generic_info args
+ | generic_info bitand 1<>0
+ = [PE_WildCard : add_wild_cards (generic_info>>1) args]
+ = add_wild_cards (generic_info>>1) args
+
+ field_or_wild_card field_name [{bind_dst=FieldName {id_name},bind_src}:field_assignments] ca
+ | id_name==field_name
+ = case bind_src of
+ PE_Empty
+ # ({boxed_ident=ident}, ca_hash_table) = putIdentInHashTable id_name IC_Expression ca.ca_hash_table
+ -> (PE_Ident ident, {ca & ca_hash_table = ca_hash_table})
+ _
+ -> (bind_src,ca)
+ = field_or_wild_card field_name field_assignments ca
+ field_or_wild_card field_name field_assignments ca
+ = (PE_WildCard,ca)
+
+ add_n_bits n c
+ | n>1
+ = add_n_bits (n>>1) (c+(n bitand 1))
+ = c+n
+
+determine_generic_instance_deps :: ![ParsedBody] !Int !TypeCons !*CollectAdmin -> (![ParsedBody],!Int,!GenericInstanceDependencies,!*CollectAdmin)
+determine_generic_instance_deps bodies arity type_cons ca
+ = case type_cons of
+ TypeConsSymb {type_ident={id_name}}
+ | id_name=="OBJECT" || id_name=="CONS" || id_name=="RECORD" || id_name=="FIELD" || id_name=="PAIR" || id_name=="EITHER" || id_name=="UNIT"
+ # (n_deps,deps) = determine_generic_instance_deps_in_bodies bodies -1 0
+ | n_deps>=0
+ # deps = deps bitand ((1<<n_deps)-1)
+ -> (bodies,arity,GenericInstanceUsedArgs n_deps deps,ca)
+ -> (bodies,arity,GenericInstanceUsedArgs 0 0,ca)
+ _
+ -> (bodies,arity,AllGenericInstanceDependencies,ca)
+ where
+ determine_generic_instance_deps_in_bodies [body:bodies] n_deps deps
+ # (n_deps,deps) = determine_generic_instance_deps_in_body body n_deps deps
+ = determine_generic_instance_deps_in_bodies bodies n_deps deps
+ determine_generic_instance_deps_in_bodies [] n_deps deps
+ = (n_deps,deps)
+
+ determine_generic_instance_deps_in_body {pb_args=[_:args]} n_deps deps
+ = mark_deps_in_args args 0 n_deps deps
+ determine_generic_instance_deps_in_body body n_deps deps
+ = (n_deps,deps)
+
+remove_generic_info_and_determine_generic_instance_deps :: ![ParsedBody] !Int !TypeCons !*CollectAdmin -> (![ParsedBody],!Int,!GenericInstanceDependencies,!*CollectAdmin)
+remove_generic_info_and_determine_generic_instance_deps bodies arity type_cons ca
+ = case type_cons of
+ TypeConsSymb {type_ident={id_name}}
+ | id_name=="OBJECT" || id_name=="CONS" || id_name=="RECORD" || id_name=="FIELD" || id_name=="PAIR" || id_name=="EITHER" || id_name=="UNIT"
+ # (bodies,n_deps,deps) = remove_generic_info_and_determine_generic_instance_deps_in_bodies bodies -1 0
+ | n_deps>=0
+ # deps = deps bitand ((1<<n_deps)-1)
+ -> (bodies,arity-1,GenericInstanceUsedArgs n_deps deps,ca)
+ -> (bodies,arity-1,GenericInstanceUsedArgs 0 0,ca)
+ _
+ -> (bodies,arity-1,AllGenericInstanceDependencies,ca)
+ where
+ remove_generic_info_and_determine_generic_instance_deps_in_bodies [body:bodies] n_deps deps
+ # (body,n_deps,deps) = remove_generic_info_and_determine_generic_instance_deps_in_body body n_deps deps
+ # (bodies,n_deps,deps) = remove_generic_info_and_determine_generic_instance_deps_in_bodies bodies n_deps deps
+ = ([body:bodies],n_deps,deps)
+ remove_generic_info_and_determine_generic_instance_deps_in_bodies [] n_deps deps
+ = ([],n_deps,deps)
+
+ remove_generic_info_and_determine_generic_instance_deps_in_body body=:{pb_args=[_:args]} n_deps deps
+ # (n_deps,deps) = mark_deps_in_args args 0 n_deps deps
+ = ({body & pb_args=args},n_deps,deps)
+ remove_generic_info_and_determine_generic_instance_deps_in_body body n_deps deps
+ = (body,n_deps,deps)
+
+mark_deps_in_args :: [ParsedExpr] Int Int Int -> (!Int,!Int)
+mark_deps_in_args [PE_WildCard:args] arg_n n_deps deps
+ = mark_deps_in_args args (arg_n+1) n_deps deps
+mark_deps_in_args [_:args] arg_n n_deps deps
+ # deps = deps bitor (1<<arg_n)
+ = mark_deps_in_args args (arg_n+1) n_deps deps
+mark_deps_in_args [] arg_n n_deps deps
+ | n_deps>=0
+ | arg_n<n_deps
+ = (arg_n,deps)
+ = (n_deps,deps)
+ = (arg_n,deps)
strictness_from_fields :: ![ParsedSelector] -> StrictnessList
strictness_from_fields fields
@@ -1230,20 +1376,23 @@ where
cons_count :: !Int,
sel_count :: !Int,
mem_count :: !Int,
- type_count :: !Int
+ type_count :: !Int,
+ macro_count :: !Int
}
reorganiseDefinitions :: Bool [ParsedDefinition] !DefCounts *CollectAdmin -> (![FunDef],!CollectedDefinitions (ScannedInstanceAndMembersR FunDef), ![ParsedImport], ![ImportedObject],![ParsedForeignExport],!*CollectAdmin)
-reorganiseDefinitions icl_module [PD_Function pos name is_infix args rhs fun_kind : defs] def_counts ca
+reorganiseDefinitions icl_module [PD_Function pos name is_infix args rhs fun_kind : defs] def_counts=:{macro_count} ca
# prio = if is_infix (Prio NoAssoc 9) NoPrio
fun_arity = length args
(bodies, fun_kind, defs, ca) = collectFunctionBodies name fun_arity prio fun_kind defs ca
- (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
fun = MakeNewImpOrDefFunction name fun_arity [{ pb_args = args, pb_rhs = rhs, pb_position = pos } : bodies] fun_kind prio No pos
| fun_kind == FK_Macro
+ # def_counts & macro_count=macro_count+1
+ (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
= (fun_defs, { c_defs & def_macros = [ fun : c_defs.def_macros ]}, imports, imported_objects,foreign_exports, ca)
+ # (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
= ([ fun : fun_defs ], c_defs, imports, imported_objects,foreign_exports, ca)
-reorganiseDefinitions icl_module [PD_TypeSpec fun_pos fun_name prio No specials : defs] def_counts ca
+reorganiseDefinitions icl_module [PD_TypeSpec fun_pos fun_name prio No specials : defs] def_counts=:{macro_count} ca
= case defs of
[PD_Function pos name is_infix args rhs fun_kind : defs]
| fun_name <> name
@@ -1253,10 +1402,12 @@ reorganiseDefinitions icl_module [PD_TypeSpec fun_pos fun_name prio No specials
// | belongsToTypeSpec fun_name prio name is_infix
# fun_arity = length args
(bodies, fun_kind, defs, ca) = collectFunctionBodies name fun_arity prio fun_kind defs ca
- (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
fun = MakeNewImpOrDefFunction name fun_arity [{ pb_args = args, pb_rhs = rhs, pb_position = pos } : bodies ] fun_kind prio No fun_pos
| fun_kind == FK_Macro
+ # def_counts & macro_count=macro_count+1
+ (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
-> (fun_defs, { c_defs & def_macros = [ fun : c_defs.def_macros]}, imports, imported_objects,foreign_exports, ca)
+ # (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
-> ([ fun : fun_defs ], c_defs, imports, imported_objects,foreign_exports, ca)
// -> reorganiseDefinitions icl_module defs cons_count sel_count mem_count (postParseError fun_pos "function body expected (1)" ca)
_
@@ -1343,12 +1494,12 @@ reorganiseDefinitions icl_module [PD_Type type_def=:{td_rhs = MoreConses type_ex
type_def & td_rhs = UncheckedAlgConses type_ext_ident cons_symbs
c_defs & def_types = [type_def : c_defs.def_types], def_constructors = mapAppend ParsedConstructorToConsDef cons_defs c_defs.def_constructors
= (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
-reorganiseDefinitions icl_module [PD_Class class_def=:{class_ident,class_arity,class_args} members : defs] def_counts=:{mem_count} ca
+reorganiseDefinitions icl_module [PD_Class class_def=:{class_ident,class_arity,class_args} members : defs] def_counts=:{mem_count,macro_count} ca
# type_context = { tc_class = TCClass {glob_module = NoIndex, glob_object = {ds_ident = class_ident, ds_arity = class_arity, ds_index = NoIndex }},
tc_types = [ TV tv \\ tv <- class_args ], tc_var = nilPtr}
(mem_defs, mem_macros, ca) = check_symbols_of_class_members members type_context ca
(mem_symbs, mem_defs, class_size) = reorganise_member_defs mem_defs mem_count
- def_counts & mem_count=mem_count + class_size
+ def_counts & mem_count=mem_count + class_size, macro_count=macro_count + length mem_macros
(fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
class_def = { class_def & class_members = { member \\ member <- mem_symbs }}
c_defs = { c_defs & def_classes = [class_def : c_defs.def_classes], def_macros = mem_macros ++ c_defs.def_macros,
@@ -1450,19 +1601,40 @@ reorganiseDefinitions icl_module [PD_Generic gen : defs] def_counts ca
# (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
c_defs = {c_defs & def_generics = [gen : c_defs.def_generics]}
= (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
-reorganiseDefinitions icl_module [PD_GenericCase gc=:{gc_type_cons} : defs] def_counts ca
- # (GCF gc_ident gcf=:{gcf_body=GCB_ParsedBody args rhs,gcf_arity}) = gc.gc_gcf
- #! (bodies, defs, ca) = collectGenericBodies defs gc_ident gcf_arity gc_type_cons ca
- #! (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
- = reorganiseDefinitions icl_module defs def_counts ca
- # body = {pb_args = args, pb_rhs = rhs, pb_position = gc.gc_pos}
- #! bodies = [body : bodies]
- #! fun_name = genericIdentToFunIdent gc_ident.id_name gc.gc_type_cons
- #! fun = MakeNewImpOrDefFunction fun_name gcf_arity bodies (FK_Function cNameNotLocationDependent) NoPrio No gc.gc_pos
- # gcf & gcf_body=GCB_FunDef fun, gcf_arity=gcf_arity
- #! inst = {gc & gc_gcf = GCF gc_ident gcf}
- #! c_defs = {c_defs & def_generic_cases = [inst : c_defs.def_generic_cases]}
- = (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
+reorganiseDefinitions icl_module [PD_GenericCase gc=:{gc_type_cons} generic_fun_ident : defs] def_counts=:{macro_count} ca
+ # (GCF gc_ident gcf=:{gcf_body=GCB_ParsedBody args rhs,gcf_arity,gcf_generic_info}) = gc.gc_gcf
+ #! (bodies, generic_info, defs, ca) = collectGenericBodies defs gc_ident gcf_arity gc_type_cons ca
+ # generic_info = generic_info bitor gcf_generic_info
+ #! body = { pb_args = args, pb_rhs = rhs, pb_position = gc.gc_pos }
+ # bodies = [body : bodies]
+ # fun_name = genericIdentToFunIdent gc_ident.id_name /*gcf.gcf_ident.id_name*/ gc.gc_type_cons
+ | icl_module
+ # (bodies,gcf_arity,generic_instance_deps,ca)
+ = if (generic_info > 0)
+ (replace_generic_info_record_by_arguments generic_info bodies gcf_arity gc_type_cons ca)
+ (determine_generic_instance_deps bodies gcf_arity gc_type_cons ca)
+ #! (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
+ = reorganiseDefinitions icl_module defs def_counts ca
+ #! fun = MakeNewImpOrDefFunction fun_name gcf_arity bodies (FK_Function cNameNotLocationDependent) NoPrio No gc.gc_pos
+ # gcf & gcf_body=GCB_FunDef fun, gcf_arity=gcf_arity, gcf_generic_info=generic_info, gcf_generic_instance_deps=generic_instance_deps
+ #! inst = {gc & gc_gcf = GCF gc_ident gcf}
+ #! c_defs & def_generic_cases = [inst : c_defs.def_generic_cases]
+ = (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
+
+ # (bodies,gcf_arity,generic_instance_deps,ca)
+ = if (generic_info > 0)
+ (replace_generic_info_record_by_arguments generic_info bodies gcf_arity gc_type_cons ca)
+ (if (generic_info < 0)
+ (determine_generic_instance_deps bodies gcf_arity gc_type_cons ca)
+ (remove_generic_info_and_determine_generic_instance_deps bodies gcf_arity gc_type_cons ca))
+ # def_counts & macro_count=macro_count+1
+ #! (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
+ = reorganiseDefinitions icl_module defs def_counts ca
+ #! macro = MakeNewImpOrDefFunction generic_fun_ident gcf_arity bodies (FK_Function False) NoPrio No gc.gc_pos
+ # gcf & gcf_body=GCB_MacroIndex macro_count, gcf_arity=gcf_arity, gcf_generic_info=generic_info, gcf_generic_instance_deps=generic_instance_deps
+ #! inst = {gc & gc_gcf = GCF gc_ident gcf}
+ #! c_defs & def_generic_cases = [inst : c_defs.def_generic_cases], def_macros = [macro : c_defs.def_macros]
+ = (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca)
reorganiseDefinitions icl_module [PD_Derive derive_defs : defs] def_counts=:{type_count} ca
# def_counts & type_count=type_count+1
#! (fun_defs, c_defs, imports, imported_objects,foreign_exports, ca) = reorganiseDefinitions icl_module defs def_counts ca
@@ -1520,7 +1692,7 @@ qualified_ident_to_import_declaration IC_Selector ident
= abort "qualified_ident_to_import_declaration IC_Selector not yet implemented"
reorganiseDefinitionsAndAddTypes mod_ident support_dynamics icl_module defs ca
- # def_counts = {cons_count=0, sel_count=0, mem_count=0, type_count=0}
+ # def_counts = {cons_count=0, sel_count=0, mem_count=0, type_count=0, macro_count=0}
| support_dynamics
# clean_types_module_ident
= predefined_idents.[PD_StdDynamic]