class: VSEFileSourceWriter
authorClaus Gittinger <cg@exept.de>
Wed, 28 Jan 2015 15:11:49 +0100
changeset 3725 723707412361
parent 3724 b29024117368
child 3726 6737e09bc2e0
class: VSEFileSourceWriter
VSEFileSourceWriter.st
--- a/VSEFileSourceWriter.st	Wed Jan 28 13:58:30 2015 +0100
+++ b/VSEFileSourceWriter.st	Wed Jan 28 15:11:49 2015 +0100
@@ -163,6 +163,7 @@
     self rewriteEOLComments.
     self rewriteGlobalsWithNamespace.
     self rewriteClassReferences.    
+    self rewriteExceptionHandlers.    
     ^ source.
 !
 
@@ -246,6 +247,43 @@
     ].
 !
 
+rewriteExceptionHandlers
+    |parser replacer newSource|
+
+    "/ all references to namespace variables
+    parser := Parser 
+                parseMethod:source 
+                in:methodClass
+                ignoreErrors:false
+                ignoreWarnings:false.
+
+    (parser messagesSent includesAny: #( 'answer:do:' 'ignoreIn:' )) ifTrue:[
+        self halt
+    ].
+
+    replacer := ParseTreeSourceRewriter new.
+    replacer alwaysPerformAllSearches:true.
+
+    replacer
+        replace: '[| `@temps | ``@.Statements. ] valueNowOrOnUnwindDo: ``@block'
+            "->"
+           with: '[| `@temps | ``@.Statements. ] ensure: ``@block';
+
+        replace: '[| `@temps | ``@.Statements. ] valueOnUnwindDo: ``@block'
+            "->"
+           with: '[| `@temps | ``@.Statements. ] ifCurtailed: ``@block';
+
+        replace:'``@err handle:``@handler do: ``@expr'
+            "->"
+           with: '``@expr on: ``@err do: ``@handler'.
+
+    (replacer executeTree: method parseTree) ifTrue:[
+        newSource := replacer executeReplacementsInSource:source.
+"/ self halt.
+        source := newSource.
+    ].
+!
+
 rewriteGlobalsWithNamespace
     |tree parser namesToRewrite|
 
@@ -298,10 +336,10 @@
 !VSEFileSourceWriter class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.2 2015-01-28 12:58:30 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.3 2015-01-28 14:11:49 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.2 2015-01-28 12:58:30 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.3 2015-01-28 14:11:49 cg Exp $'
 ! !