diff -r 9705847df22f -r 55c8ae8f88e6 MessageNode.st --- 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