--- 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 $'
! !