aboutsummaryrefslogtreecommitdiff
path: root/backend/backendconvert.icl
diff options
context:
space:
mode:
authorjohnvg2002-02-28 14:03:07 +0000
committerjohnvg2002-02-28 14:03:07 +0000
commitfa9111ecf7a8d7a2f49242bcbc3535db44b22ffa (patch)
tree55fa0b1d97ac8bc3a8eb6948a4d4e4a60d7b2009 /backend/backendconvert.icl
parentfix bug in computing the conversion table for macros that appear (diff)
convert record updates of multiple records into one update node
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1033 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'backend/backendconvert.icl')
-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 _ _