aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartijnv2002-01-21 13:48:19 +0000
committermartijnv2002-01-21 13:48:19 +0000
commita718b2098d78a54a984b4886004a3c8437ac6c8e (patch)
tree30b07a7ea50cd3a88f73d6d42228190799c0cda5
parentbug fix: fold2St cannot deal with inifinite lists (diff)
bug fix: unused dynamics were not recursively removed from fi_dynamics
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@973 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r--frontend/transform.icl16
1 files changed, 13 insertions, 3 deletions
diff --git a/frontend/transform.icl b/frontend/transform.icl
index f583bca..356e2af 100644
--- a/frontend/transform.icl
+++ b/frontend/transform.icl
@@ -1492,6 +1492,8 @@ where
_
-> (fun_defs, symbol_table)
+import RWSDebug
+
expandMacrosInBody :: [.FunCall] CheckedBody ![ExprInfoPtr] PredefSymbolsForTransform *ExpandState -> ([FreeVar],Expression,[FreeVar],[FunCall],![ExprInfoPtr],.ExpandState);
expandMacrosInBody fi_calls {cb_args,cb_rhs} fi_dynamics predef_symbols_for_transform es=:{es_symbol_table,es_symbol_heap,es_fun_defs,es_macro_defs}
# (prev_calls, fun_defs, macro_defs,es_symbol_table)
@@ -1517,10 +1519,18 @@ where
= case expr_info of
EI_UnmarkedDynamic _ _
-> (used_dynamics, symbol_heap)
- _
+ EI_Dynamic opt_dyn_type ptrs
+ # (new_ptrs,cos_symbol_heap)
+ = foldSt collect_used_dynmic ptrs ([], cos_symbol_heap)
+ # cos_symbol_heap
+ = writePtr dyn_expr_ptr (EI_Dynamic opt_dyn_type new_ptrs)
-> ([dyn_expr_ptr : used_dynamics], symbol_heap)
-
-
+ EI_DynamicTypeWithVars type_vars dyn_type ptrs
+ # (new_ptrs,cos_symbol_heap)
+ = foldSt collect_used_dynmic ptrs ([], cos_symbol_heap)
+ # cos_symbol_heap
+ = writePtr dyn_expr_ptr (EI_DynamicTypeWithVars type_vars dyn_type new_ptrs)
+ -> (used_dynamics, symbol_heap)
expandCheckedAlternative {ca_rhs, ca_position} ei
# (ca_rhs, ei) = expand ca_rhs ei