MessageNode.st
changeset 3317 55c8ae8f88e6
parent 3313 860a2a61cbde
child 3330 6abed184183c
--- a/MessageNode.st	Wed Sep 04 00:35:40 2013 +0200
+++ b/MessageNode.st	Wed Sep 04 19:32:01 2013 +0200
@@ -1393,24 +1393,33 @@
 codeAndOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for (x and:[y])"
 
-    |pos1 rightExpr|
+    |jumpTarget1 rightExpr|
 
     aCompiler addLiteral:#and:.
 
-    receiver codeOn:aStream inBlock:b for:aCompiler.
-    valueNeeded ifTrue:[
-        aStream nextPut:#dup.
+    (receiver isConstant and:[receiver value == true ]) ifTrue:[
+        "/ happens when code is "commented" i.e. true and:[ ... ]
+        
+    ] ifFalse:[
+
+        receiver codeOn:aStream inBlock:b for:aCompiler.
+        valueNeeded ifTrue:[
+            aStream nextPut:#dup.
+        ].
+        aStream nextPut:#falseJump.
+        jumpTarget1 := aStream position + 1.
+        aStream nextPut:0.
+        valueNeeded ifTrue:[
+            aStream nextPut:#drop.
+        ].
     ].
-    aStream nextPut:#falseJump.
-    pos1 := aStream position + 1.
-    aStream nextPut:0.
-    valueNeeded ifTrue:[
-        aStream nextPut:#drop.
-    ].
+
     rightExpr := argArray at:1.
     rightExpr codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
-    (aStream contents) at:pos1 put:(aStream position + 1)
+    jumpTarget1 notNil ifTrue:[
+        (aStream contents) at:jumpTarget1 put:(aStream position + 1)
+    ].
 
     "Created: 17.6.1996 / 15:46:42 / cg"
     "Modified: 17.6.1996 / 15:47:44 / cg"
@@ -2201,24 +2210,33 @@
 codeOrOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for (x or:[y])"
 
-    |pos1 rightExpr|
+    |jumpTarget1 rightExpr|
 
     aCompiler addLiteral:#or:.
 
-    receiver codeOn:aStream inBlock:b for:aCompiler.
-    valueNeeded ifTrue:[
-        aStream nextPut:#dup.
+    (receiver isConstant and:[receiver value == false ]) ifTrue:[
+        "/ happens when code is "commented" i.e. false or:[ ... ]
+
+    ] ifFalse:[
+
+        receiver codeOn:aStream inBlock:b for:aCompiler.
+        valueNeeded ifTrue:[
+            aStream nextPut:#dup.
+        ].
+        aStream nextPut:#trueJump.
+        jumpTarget1 := aStream position + 1.
+        aStream nextPut:0.
+        valueNeeded ifTrue:[
+            aStream nextPut:#drop.
+        ].
     ].
-    aStream nextPut:#trueJump.
-    pos1 := aStream position + 1.
-    aStream nextPut:0.
-    valueNeeded ifTrue:[
-        aStream nextPut:#drop.
-    ].
+
     rightExpr := argArray at:1.
     rightExpr codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
-    (aStream contents) at:pos1 put:(aStream position + 1)
+    jumpTarget1 notNil ifTrue:[
+        (aStream contents) at:jumpTarget1 put:(aStream position + 1)
+    ].
 
     "Created: 17.6.1996 / 15:40:22 / cg"
     "Modified: 17.6.1996 / 15:47:22 / cg"
@@ -3364,11 +3382,11 @@
 !MessageNode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.203 2013-09-03 22:35:31 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.204 2013-09-04 17:32:01 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.203 2013-09-03 22:35:31 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.204 2013-09-04 17:32:01 cg Exp $'
 !
 
 version_SVN