--- 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