return from outer method
authorClaus Gittinger <cg@exept.de>
Wed, 04 May 2005 12:03:12 +0200
changeset 1593 40c32bd334d9
parent 1592 413a9144fc03
child 1594 d99ea853d052
return from outer method
ReturnNode.st
--- a/ReturnNode.st	Wed Apr 20 21:48:16 2005 +0200
+++ b/ReturnNode.st	Wed May 04 12:03:12 2005 +0200
@@ -79,25 +79,32 @@
 "/    aStream nextPut:#retTop.
 !
 
+codeLocalReturnOn:aStream inBlock:b for:aCompiler
+    expression isNil ifTrue:[
+        aStream nextPut:#retNil.
+        ^ self.
+    ].
+    expression
+        codeForSimpleReturnOn:aStream 
+        inBlock:b 
+        lineNumber:lineNr
+        for:aCompiler.
+!
+
 codeOn:aStream inBlock:b for:aCompiler
-    (b isNil or:[b isJavaScriptBlock]) ifTrue:[
-        expression isNil ifTrue:[
-            aStream nextPut:#retNil.
-            ^ self.
-        ] ifFalse:[
-            expression
-                codeForSimpleReturnOn:aStream 
-                inBlock:b 
-                lineNumber:lineNr
-                for:aCompiler.
-            ^ self.
-        ].
-        "/ not reached
+    b isNil ifTrue:[
+        self codeLocalReturnOn:aStream inBlock:b for:aCompiler.
+        ^ self.
     ].
 
-    "special: return from homeContext in a block"
-    expression codeOn:aStream inBlock:b for:aCompiler.
-
+    "return from homeContext in a block"
+    expression isNil ifTrue:[
+        "/ nil-expression is not possible in smalltalk;
+        "/ however, it might be in a subclass (i.e. JavaScript)
+        aStream nextPut:#pushNil.
+    ] ifFalse:[
+        expression codeOn:aStream inBlock:b for:aCompiler.
+    ].
     lineNr notNil ifTrue:[
         self codeLineNumber:lineNr on:aStream for:aCompiler
     ].
@@ -151,5 +158,5 @@
 !ReturnNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.31 2005-04-14 12:58:39 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.32 2005-05-04 10:03:12 cg Exp $'
 ! !