aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/generics1.icl238
1 files changed, 3 insertions, 235 deletions
diff --git a/frontend/generics1.icl b/frontend/generics1.icl
index f14641b..98a97d8 100644
--- a/frontend/generics1.icl
+++ b/frontend/generics1.icl
@@ -11,15 +11,6 @@ from transform import ::Group
import genericsupport
import compilerSwitches
-//****************************************************************************************
-// tracing
-//****************************************************************************************
-traceGenerics context message x
- //:== traceValue context message x
- :== x
-
-
-
//**************************************************************************************
// Data types
//**************************************************************************************
@@ -136,14 +127,8 @@ convertGenerics
, hp_generic_heap = hp_generic_heap
, hp_type_heaps = { th_vars = th_vars, th_attrs = th_attrs }
}
-
- //#! funs = dump_funs 0 funs
- //#! dcl_modules = dump_dcl_modules 0 dcl_modules
- //#! error = error ---> "************************* generic phase completed ******************** "
- //| True = abort "generic phase aborted for testing\n"
= (modules, groups, funs, generic_ranges, td_infos, heaps, hash_table, u_predefs, dcl_modules, error)
where
-
convert_generics :: !*GenericState -> (![IndexRange], !*GenericState)
convert_generics gs
#! (iso_range, gs) = buildGenericRepresentations gs
@@ -167,27 +152,6 @@ where
#! ok = gs_error.ea_ok
= (ok, {gs & gs_error = gs_error})
- dump_funs n funs
- | n == size funs
- = funs
- #! ({fun_ident, fun_type, fun_body}, funs) = funs ! [n]
- #! funs = funs
- //---> ("icl function ", fun_ident, n, fun_type, fun_body)
- = dump_funs (inc n) funs
- dump_dcl_modules n dcl_modules
- | n == size dcl_modules
- = dcl_modules
- # ({dcl_functions}, dcl_modules) = dcl_modules ! [n]
- = dump_dcl_modules (inc n) (dump_dcl_funs 0 dcl_functions dcl_modules)
- //---> ("dcl module", n)
- dump_dcl_funs n dcl_funs dcl_modules
- | n == size dcl_funs
- = dcl_modules
- # {ft_ident, ft_type} = dcl_funs.[n]
- = dump_dcl_funs (inc n) dcl_funs dcl_modules
- //---> ("dcl function", ft_ident, n, ft_type)
-
-
//****************************************************************************************
// clear stuff that might have been left over
// from compilation of other icl modules
@@ -270,7 +234,6 @@ where
GeneratedBody
// needs a generic representation
-
-> case type_def.td_rhs of
SynType _
# gs_error = reportError gc_ident gc_pos ("cannot derive a generic instance for a synonym type " +++ type_def.td_ident.id_name) gs.gs_error
@@ -346,7 +309,6 @@ buildGenericTypeRep type_index funs_and_groups
, gs_exprh = hp_expression_heap
}
= ({gtr_type=atype,gtr_iso=iso_fun_ds}, funs_and_groups, gs)
- //---> ("buildGenericTypeRep", type_def.td_ident, atype)
//========================================================================================
// the structure type
@@ -464,7 +426,6 @@ where
clear_type_var {tv_info_ptr} th_vars
= writePtr tv_info_ptr TVI_Empty th_vars
-
buildStructType ::
!GlobalIndex // type def global index
!DefinedSymbol // type_info
@@ -476,7 +437,6 @@ buildStructType ::
)
buildStructType {gi_module,gi_index} type_info cons_infos predefs (modules, td_infos, heaps, error)
# (type_def=:{td_ident}, modules) = modules![gi_module].com_type_defs.[gi_index]
- //# (common_defs, modules) = modules ! [gi_module]
= build_type type_def type_info cons_infos (modules, td_infos, heaps, error)
//---> ("buildStructureType", td_ident, atype)
where
@@ -534,7 +494,8 @@ where
where
build_either x y = GTSAppCons (KindArrow [KindConst, KindConst]) [x, y]
build_void = abort "sanity check: no alternatives in a type\n"
-
+
+/*
// build a product of types
buildProductType :: ![AType] !PredefinedSymbols -> AType
buildProductType types predefs
@@ -550,6 +511,7 @@ buildSumType types predefs
where
build_either x y = buildPredefTypeApp PD_TypeEITHER [x, y] predefs
build_void = abort "sum of zero types\n"
+*/
// build a binary representation of a list
listToBin :: (a a -> a) a [a] -> a
@@ -991,7 +953,6 @@ where
}
= (alg_pattern, heaps, error)
-
build_sum :: !Int !Int !Expression !PredefinedSymbols !*Heaps -> (!Expression, !*Heaps)
build_sum i n expr predefs heaps
| n == 0 = abort "build sum of zero elements\n"
@@ -1696,7 +1657,6 @@ where
#! st = build_main_instance module_index gc_index gencase st
#! st = build_shorthand_instances module_index gc_index gencase st
= st
- //---> ("convert gencase", gc_ident, gc_type)
build_main_instance module_index gc_index
gencase=:{gc_ident, gc_kind, gc_generic, gc_pos, gc_type, gc_type_cons, gc_body = GCB_FunIndex fun_index}
@@ -3019,13 +2979,10 @@ curryGenericArgType st=:{st_args, st_result, st_attr_env, st_attr_vars} attr_va
= (curried_st, {th & th_attrs = th_attrs})
//---> ("curryGenericArgType", st, curried_st)
-
curryGenericArgType1 :: !SymbolType !String !*TypeHeaps
-> (!SymbolType, !*TypeHeaps)
curryGenericArgType1 st=:{st_args, st_result, st_attr_env, st_attr_vars} attr_var_name th=:{th_attrs}
-
# (atype, attr_vars, av_num, th_attrs) = curry st_args st_result 1 th_attrs
-
# curried_st =
{ st
& st_args = []
@@ -3691,117 +3648,6 @@ foldExpr f EE st
foldExpr f expr st
= abort "generic.icl: foldExpr does not match\n"//f expr st
---> ("foldExpr does not match", expr)
-/*
-//-----------------------------------------------------------------------------
-// map expression applies a function to each node of an expression
-// recursively:
-// first recurse, then apply the function
-//-----------------------------------------------------------------------------
-mapExprSt ::
- !(Expression -> w:st -> u:(Expression, w:st))
- !Expression
- w:st
- ->
- v: ( Expression
- , w:st
- )
- , [v<=w,u<=v]
-mapExprSt f (App app=:{app_args}) st
- # (app_args, st) = mapSt (mapExprSt f) app_args st
- = f (App { app & app_args = app_args }) st
-
-mapExprSt f (Let lad=:{let_lazy_binds, let_strict_binds, let_expr}) st
- # (let_lazy_binds, st) = mapSt map_bind let_lazy_binds st
- # (let_strict_binds, st) = mapSt map_bind let_strict_binds st
- # (let_expr, st) = mapExprSt f let_expr st
- # lad =
- { lad
- & let_expr = let_expr
- , let_lazy_binds = let_lazy_binds
- , let_strict_binds = let_strict_binds
- }
- = f (Let lad) st
-where
- map_bind b=:{lb_src} st
- # (lb_src, st) = mapExprSt f lb_src st
- = ({b & lb_src = lb_src}, st)
-
-mapExprSt f (Selection a expr b) st
- # (expr, st) = mapExprSt f expr st
- = f (Selection a expr b) st
-
-mapExprSt f (Update e1 x e2) st
- # (e1, st) = mapExprSt f e1 st
- # (e2, st) = mapExprSt f e2 st
- = f (Update e1 x e2) st
-
-mapExprSt f (RecordUpdate x expr binds) st
- # (expr, st) = mapExprSt f expr st
- # (binds, st) = mapSt map_bind binds st
- = f (RecordUpdate x expr binds) st
-where
- map_bind b=:{bind_src} st
- # (bind_dst, st) = mapExprSt f bind_src st
- = ({b & bind_src = bind_src}, st)
-
-mapExprSt f (TupleSelect x y expr) st
- # (expr, st) = mapExprSt f expr st
- = f (TupleSelect x y expr) st
-
-mapExprSt f (Conditional cond=:{if_cond, if_then, if_else}) st
- # (if_cond, st) = mapExprSt f if_cond st
- # (if_then, st) = mapExprSt f if_then st
- # (if_else, st) = mapOptionalSt (mapExprSt f) if_else st
-/*
- # (if_else, st) = case if_else of
- (Yes x)
- # (x, st) = mapExprSt f x st
- -> (Yes x, st)
- No -> (No, st)
-*/
- = f (Conditional {cond & if_cond = if_cond, if_then = if_then, if_else = if_else}) st
-
-mapExprSt f (MatchExpr y expr) st
- # (expr, st) = mapExprSt f expr st
- = f (MatchExpr y expr) st
-
-mapExprSt f (DynamicExpr dyn=:{dyn_expr}) st
- # (dyn_expr, st) = mapExprSt f dyn_expr st
- = f (DynamicExpr {dyn& dyn_expr = dyn_expr}) st
-
-mapExprSt f (Case c=:{case_expr, case_guards, case_default=case_default}) st
- # (case_expr, st) = mapExprSt f case_expr st
- # (case_guards, st) = map_patterns case_guards st
- # (case_default, st) = case case_default of
- (Yes x)
- # (x, st) = mapExprSt f x st
- -> (Yes x, st)
- No -> (No, st)
- # new_case = {c & case_expr=case_expr, case_guards=case_guards, case_default=case_default}
- = f (Case new_case) st
-where
- map_patterns (AlgebraicPatterns index pats) st
- # (pats, st) = mapSt map_alg_pattern pats st
- = (AlgebraicPatterns index pats, st)
- map_patterns (BasicPatterns bt pats) st
- # (pats, st) = mapSt map_basic_pattern pats st
- = (BasicPatterns bt pats, st)
- map_patterns (DynamicPatterns pats) st
- # (pats, st) = mapSt map_dyn_pattern pats st
- = (DynamicPatterns pats, st)
-
- map_alg_pattern pat=:{ap_expr} st
- # (ap_expr, st) = mapExprSt f ap_expr st
- = ({pat & ap_expr = ap_expr}, st)
- map_basic_pattern pat=:{bp_expr} st
- # (bp_expr, st) = mapExprSt f bp_expr st
- = ({pat & bp_expr = bp_expr}, st)
- map_dyn_pattern pat=:{dp_rhs} st
- # (dp_rhs, st) = mapExprSt f dp_rhs st
- = ({pat & dp_rhs = dp_rhs}, st)
-
-mapExprSt f expr st = f expr st
-*/
// needed for collectCalls
instance == FunCall where (==) (FunCall x _) (FunCall y _) = x == y
@@ -3875,35 +3721,6 @@ where
// Array helpers
//****************************************************************************************
-//updateArray :: (Int a -> a) *{a} -> *{a}
-updateArray f xs
- = map_array 0 xs
-where
- map_array n xs
- #! (s, xs) = usize xs
- | n == s
- = xs
- # (x, xs) = xs ! [n]
- = map_array (inc n) {xs & [n] = f n x}
-
-//updateArray1 :: (Int .a -> .a) *{.a} .a -> *{.a}
-updateArray1 f xs dummy
- # (xs, _) = map_array 0 xs dummy
- = xs
-where
- map_array n xs d
- #! (s, xs) = usize xs
- | n == s
- = (xs, d)
- # (x, xs) = replace xs n d
- # x = f n x
- # (d, xs) = replace xs n x
- = map_array (inc n) xs d
-
-update2dArray f xss
- = updateArray1 (\n xs -> updateArray (f n) xs) xss {}
-
-
//updateArraySt :: (Int a .st -> (a, .st)) *{a} .st -> (*{a}, .st)
updateArraySt f xs st
= map_array 0 xs st
@@ -3916,24 +3733,6 @@ where
# (x, st) = f n x st
= map_array (inc n) {xs&[n]=x} st
-
-//updateArraySt :: (Int .a .st -> (.a, .st)) *{a} .a .st -> (*{a}, .st)
-updateArray1St f xs dummy st
- # (xs, _, st) = map_array 0 xs dummy st
- = (xs, st)
-where
- map_array n xs d st
- #! (s, xs) = usize xs
- | n == s
- = (xs, d, st)
- # (x, xs) = replace xs n d
- # (x, st) = f n x st
- # (d, xs) = replace xs n x
- = map_array (inc n) xs d st
-
-update2dArraySt f xss st
- = updateArray1St (\n xs st -> updateArraySt (f n) xs st) xss {} st
-
//foldArraySt :: (Int a .st -> .st) {a} .st -> .st
foldArraySt f xs st
= fold_array 0 xs st
@@ -3945,18 +3744,6 @@ where
# st = f n xs.[n] st
= fold_array (inc n) xs st
-//foldUArraySt :: (Int a .st -> .st) u:{a} .st -> (u:{a}, .st)
-foldUArraySt f array st
- = map_array 0 array st
-where
- map_array n array st
- # (s, array) = usize array
- | n == s
- = (array, st)
- # (x, array) = array ! [n]
- # st = f x st
- = map_array (inc n) array st
-
//****************************************************************************************
// General Helpers
//****************************************************************************************
@@ -3972,31 +3759,12 @@ transpose [[] : xss] = transpose xss
transpose [[x:xs] : xss] =
[[x : [hd l \\ l <- xss]] : transpose [xs : [ tl l \\ l <- xss]]]
-unzip3 [] = ([], [], [])
-unzip3 [(x1,x2,x3):xs]
- # (x1s, x2s, x3s) = unzip3 xs
- = ([x1:x1s], [x2:x2s], [x3:x3s])
-
foldOptional f No st = st
foldOptional f (Yes x) st = f x st
-mapOptional f No = No
-mapOptional f (Yes x) = Yes (f x)
-
-mapOptionalSt f No st = (No, st)
-mapOptionalSt f (Yes x) st
- # (y, st) = f x st
- = (Yes y, st)
-
filterOptionals [] = []
filterOptionals [No : xs] = filterOptionals xs
filterOptionals [Yes x : xs] = [x : filterOptionals xs]
-
-mapSt2 f [] st1 st2 = ([], st1, st2)
-mapSt2 f [x:xs] st1 st2
- # (y, st1, st2) = f x st1 st2
- # (ys, st1, st2) = mapSt2 f xs st1 st2
- = ([y:ys], st1, st2)
zipWith f [] [] = []
zipWith f [x:xs] [y:ys] = [f x y : zipWith f xs ys]