aboutsummaryrefslogtreecommitdiff
path: root/backend/backendconvert.icl
diff options
context:
space:
mode:
authorronny2001-03-28 17:11:34 +0000
committerronny2001-03-28 17:11:34 +0000
commit1f040ee7ac4716412302dca5ef94c3d0d56e8167 (patch)
treee7870c677bc2d42db49e19c43e8424b3852a8cd1 /backend/backendconvert.icl
parentI hope it is binary now (diff)
Convert Conditionals in the conditional expression of another Conditional to BEGuardNodes
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@352 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'backend/backendconvert.icl')
-rw-r--r--backend/backendconvert.icl19
1 files changed, 17 insertions, 2 deletions
diff --git a/backend/backendconvert.icl b/backend/backendconvert.icl
index bef3523..401f824 100644
--- a/backend/backendconvert.icl
+++ b/backend/backendconvert.icl
@@ -1237,7 +1237,7 @@ convertRootExpr aliasDummyId (Let {let_expr}) main_dcl_module_n varHeap
= convertRootExpr aliasDummyId let_expr main_dcl_module_n varHeap
convertRootExpr aliasDummyId (Conditional {if_cond=cond, if_then=then, if_else=Yes else}) main_dcl_module_n varHeap
= beGuardNode
- (convertExpr cond main_dcl_module_n varHeap)
+ (convertCondExpr cond main_dcl_module_n varHeap)
(convertRhsNodeDefs aliasDummyId then main_dcl_module_n varHeap)
(convertRhsStrictNodeIds then varHeap)
(convertRootExpr aliasDummyId then main_dcl_module_n varHeap)
@@ -1246,7 +1246,7 @@ convertRootExpr aliasDummyId (Conditional {if_cond=cond, if_then=then, if_else=Y
(convertRootExpr aliasDummyId else main_dcl_module_n varHeap)
convertRootExpr aliasDummyId (Conditional {if_cond=cond, if_then=then, if_else=No}) main_dcl_module_n varHeap
= beGuardNode
- (convertExpr cond main_dcl_module_n varHeap)
+ (convertCondExpr cond main_dcl_module_n varHeap)
(convertRhsNodeDefs aliasDummyId then main_dcl_module_n varHeap)
(convertRhsStrictNodeIds then varHeap)
(convertRootExpr aliasDummyId then main_dcl_module_n varHeap)
@@ -1256,6 +1256,19 @@ convertRootExpr aliasDummyId (Conditional {if_cond=cond, if_then=then, if_else=N
convertRootExpr _ expr main_dcl_module_n varHeap
= convertExpr expr main_dcl_module_n varHeap
+convertCondExpr :: Expression Int VarHeap -> BEMonad BENodeP
+convertCondExpr (Conditional {if_cond=cond, if_then=then, if_else=Yes else}) main_dcl_module_n varHeap
+ = beGuardNode
+ (convertCondExpr cond main_dcl_module_n varHeap)
+ beNoNodeDefs
+ beNoStrictNodeIds
+ (convertCondExpr then main_dcl_module_n varHeap)
+ beNoNodeDefs
+ beNoStrictNodeIds
+ (convertCondExpr else main_dcl_module_n varHeap)
+convertCondExpr expr main_dcl_module_n varHeap
+ = convertExpr expr main_dcl_module_n varHeap
+
// RWS +++ rewrite
convertLhsNodeDefs :: [FunctionPattern] BENodeDefP VarHeap -> BEMonad BENodeDefP
convertLhsNodeDefs [FP_Basic value (Yes freeVar) : patterns] nodeDefs varHeap
@@ -1463,8 +1476,10 @@ where
= 1
arity (Yes {glob_object={ds_arity}})
= ds_arity
+ // this alternative should be deleted (can't occur)
convertExpr (Conditional {if_cond=cond, if_then, if_else=Yes else}) varHeap
= beIfNode (convertExpr cond varHeap) (convertExpr if_then varHeap) (convertExpr else varHeap)
+
convertExpr expr _
= undef <<- ("backendconvert, convertExpr: unknown expression", expr)