ReturnNode.st
changeset 843 522c116f86d9
parent 817 8de90dbed4bb
child 882 0bc2a6ecdfad
--- 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 $'
 ! !