aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/backendconvert.icl23
1 files changed, 11 insertions, 12 deletions
diff --git a/backend/backendconvert.icl b/backend/backendconvert.icl
index 6921312..a0fc460 100644
--- a/backend/backendconvert.icl
+++ b/backend/backendconvert.icl
@@ -1858,19 +1858,18 @@ where
addKinds _ []
= []
convertExpr (RecordUpdate _ expr updates)
- = foldl (convertUpdate) (convertExpr expr) updates
+ = beUpdateNode (beArgs (convertExpr expr) (convertUpdates updates))
where
- convertUpdate expr {bind_src=NoBind _}
- = expr
- convertUpdate expr {bind_src, bind_dst=bind_dst=:{glob_module, glob_object={fs_index}}}
- = beUpdateNode
- (beArgs
- expr
- (beArgs
- (beSelectorNode BESelector (beFieldSymbol fs_index glob_module)
- (beArgs (convertExpr bind_src)
- beNoArgs))
- beNoArgs))
+ convertUpdates []
+ = beNoArgs
+ convertUpdates [{bind_src=NoBind _}:updates]
+ = convertUpdates updates
+ convertUpdates [{bind_src, bind_dst=bind_dst=:{glob_module, glob_object={fs_index}}}:updates]
+ = (beArgs
+ (beSelectorNode BESelector (beFieldSymbol fs_index glob_module)
+ (beArgs (convertExpr bind_src)
+ beNoArgs))
+ (convertUpdates updates))
convertExpr (Update expr1 [singleSelection] expr2)
= case singleSelection of
RecordSelection _ _