diff options
author | ronny | 2001-03-28 17:11:34 +0000 |
---|---|---|
committer | ronny | 2001-03-28 17:11:34 +0000 |
commit | 1f040ee7ac4716412302dca5ef94c3d0d56e8167 (patch) | |
tree | e7870c677bc2d42db49e19c43e8424b3852a8cd1 /backend/backendconvert.icl | |
parent | I 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.icl | 19 |
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) |