aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartijnv2001-04-02 12:07:55 +0000
committermartijnv2001-04-02 12:07:55 +0000
commit412f60627d680c0b7a0f9505c345d8fb5980b470 (patch)
tree56a7b60fe10f0a79c1363acb4928a1acf2bd9948
parentno message (diff)
bug fix in convertTypeCode2
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@356 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r--frontend/convertDynamics.icl16
1 files changed, 15 insertions, 1 deletions
diff --git a/frontend/convertDynamics.icl b/frontend/convertDynamics.icl
index 1ac9847..a91ad2a 100644
--- a/frontend/convertDynamics.icl
+++ b/frontend/convertDynamics.icl
@@ -382,7 +382,21 @@ convertTypecode2 cinp=:{cinp_st_args} t=:(TCE_Var var_info_ptr) replace_tc_args
= (True,Var {var_name = a_ij_var_name, var_info_ptr = var_info_ptr, var_expr_ptr = nilPtr},binds,placeholders_and_tc_args,ci)
convertTypecode2 cinp=:{cinp_st_args} t=:(TCE_TypeTerm var_info_ptr) replace_tc_args binds placeholders_and_tc_args ci
- = convertTypecode2 cinp t replace_tc_args binds placeholders_and_tc_args ci
+ #! cinp_st_args
+ = filter (\{fv_info_ptr} -> fv_info_ptr == var_info_ptr) cinp_st_args
+ | isEmpty cinp_st_args
+ #! (e,binds,placeholders_and_tc_args,ci)
+ = convertTypecode cinp t replace_tc_args binds placeholders_and_tc_args ci
+ = (False,e,binds,placeholders_and_tc_args,ci)
+
+ /*
+ ** the TCE_VAR is a TC argument and it is not part of a larger type expression. It
+ ** later suffices to generate a coerce instead of an application. This is an
+ ** optimization.
+ */
+ = (True,Var {var_name = a_ij_var_name, var_info_ptr = var_info_ptr, var_expr_ptr = nilPtr},binds,placeholders_and_tc_args,ci)
+
+// = convertTypecode2 cinp t replace_tc_args binds placeholders_and_tc_args ci
convertTypecode2 cinp t replace_tc_args binds placeholders_and_tc_args ci
#! (e,binds,placeholders_and_tc_args,ci)