aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohnvg2001-05-30 10:34:13 +0000
committerjohnvg2001-05-30 10:34:13 +0000
commitda3a1cbb75b2d2034a9f743d932ff52f4f213f32 (patch)
tree7806a8176f30cd9fe3f28ddaceca5e3422dab3d4
parentrevision 1.31 was stupid nonsense (diff)
added alternatives to function 'transform' for Update,RecordUpdate,TupleSelect and MatchExpr
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@436 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r--frontend/trans.icl22
1 files changed, 21 insertions, 1 deletions
diff --git a/frontend/trans.icl b/frontend/trans.icl
index 829532d..689a24c 100644
--- a/frontend/trans.icl
+++ b/frontend/trans.icl
@@ -666,10 +666,30 @@ where
store_type_info_of_alg_pattern (var_types,{ap_vars}) var_heap
= foldSt (\(var_type, {fv_info_ptr}) var_heap
->setExtendedVarInfo fv_info_ptr (EVI_VarType var_type) var_heap) (zip2 var_types ap_vars) var_heap
-
transform (Selection opt_type expr selectors) ro ti
# (expr, ti) = transform expr ro ti
= transformSelection opt_type selectors expr ti
+ transform (Update expr1 selectors expr2) ro ti
+ # (expr1,ti) = transform expr1 ro ti
+ # (expr2,ti) = transform expr2 ro ti
+ = (Update expr1 selectors expr2,ti)
+ transform (RecordUpdate cons_symbol expr exprs) ro ti
+ # (expr,ti) = transform expr ro ti
+ # (exprs,ti) = transform_fields exprs ro ti
+ =(RecordUpdate cons_symbol expr exprs,ti)
+ where
+ transform_fields [] ro ti
+ = ([],ti)
+ transform_fields [bind=:{bind_src} : fields] ro ti
+ # (bind_src,ti) = transform bind_src ro ti
+ # (fields,ti) = transform_fields fields ro ti
+ = ([{bind & bind_src=bind_src} : fields],ti)
+ transform (TupleSelect a1 arg_nr expr) ro ti
+ # (expr,ti) = transform expr ro ti
+ = (TupleSelect a1 arg_nr expr,ti)
+ transform (MatchExpr a1 a2 expr) ro ti
+ # (expr,ti) = transform expr ro ti
+ = (MatchExpr a1 a2 expr,ti)
transform (DynamicExpr dynamic_expr) ro ti
# (dynamic_expr, ti) = transform dynamic_expr ro ti
= (DynamicExpr dynamic_expr, ti)