--- a/ReturnNode.st Thu Apr 22 14:07:18 1999 +0200
+++ b/ReturnNode.st Sat Apr 24 23:39:42 1999 +0200
@@ -46,86 +46,12 @@
!ReturnNode class methodsFor:'code generation helper'!
codeSimpleReturnFor:expression inBlock:b on:aStream inLine:lineNrOrNil for:aCompiler
- |type value index code code2|
-
- expression isPrimary ifTrue:[
- type := expression type.
- (type == #Nil) ifTrue:[
- code := #retNil
- ] ifFalse:[
- (type == #True) ifTrue:[
- code := #retTrue
- ] ifFalse:[
- (type == #False) ifTrue:[
- code := #retFalse
- ] ifFalse:[
- (type == #Self) ifTrue:[
- code := #retSelf
- ] ifFalse:[
- (type == #Integer) ifTrue:[
- value := expression evaluate.
- (value between: -128 and:127) ifTrue:[
- (value == 0) ifTrue:[
- code := #ret0
- ] ifFalse:[
- code := #retNum.
- code2 := value.
- ]
- ]
- ] ifFalse:[
- (type == #InstanceVariable) ifTrue:[
- index := expression index.
- (index <= 8) ifTrue:[
- code := #( retInstVar1
- retInstVar2
- retInstVar3
- retInstVar4
- retInstVar5
- retInstVar6
- retInstVar7
- retInstVar8) at:index
- ]
- ] ifFalse:[
- (type == #MethodVariable) ifTrue:[
- index := expression index.
- (index <= 6) ifTrue:[
- code := #( retMethodVar1
- retMethodVar2
- retMethodVar3
- retMethodVar4
- retMethodVar5
- retMethodVar6) at:index
- ]
- ] ifFalse:[
- (type == #MethodArg) ifTrue:[
- index := expression index.
- (index <= 2) ifTrue:[
- code := #(retMethodArg1
- retMethodArg2) at:index
- ]
- ]
- ]
- ]
- ]
- ]
- ]
- ]
- ]
- ].
-
- code isNil ifTrue:[
- expression codeOn:aStream inBlock:b for:aCompiler.
- code := #retTop
- ].
-
- lineNrOrNil notNil ifTrue:[
- self codeLineNumber:lineNrOrNil on:aStream for:aCompiler
- ].
-
- aStream nextPut:code.
- code2 notNil ifTrue:[
- aStream nextPut:code2
- ].
+ "/ let expression decide how to do it efficiently.
+ expression
+ codeForSimpleReturnOn:aStream
+ inBlock:b
+ lineNumber:lineNrOrNil
+ for:aCompiler
"Created: 21.10.1996 / 14:37:35 / cg"
"Modified: 21.10.1996 / 14:43:11 / cg"
@@ -211,5 +137,5 @@
!ReturnNode class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.21 1999-02-25 14:49:00 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.22 1999-04-24 21:38:55 cg Exp $'
! !