MessageNode.st
changeset 627 b29a02258247
parent 624 e71abe9654e6
child 639 f3dce3a697f0
equal deleted inserted replaced
626:7192fcd0a851 627:b29a02258247
     7  inclusion of the above copyright notice.   This software may not
     7  inclusion of the above copyright notice.   This software may not
     8  be provided or otherwise made available to, or used by, any
     8  be provided or otherwise made available to, or used by, any
     9  other person.  No title to or ownership of the software is
     9  other person.  No title to or ownership of the software is
    10  hereby transferred.
    10  hereby transferred.
    11 "
    11 "
    12 
       
    13 'From Smalltalk/X, Version:3.2.1 on 19-oct-1997 at 2:50:36 pm'                  !
       
    14 
    12 
    15 ParseNode subclass:#MessageNode
    13 ParseNode subclass:#MessageNode
    16 	instanceVariableNames:'receiver selector argArray lineNr selectorPosition'
    14 	instanceVariableNames:'receiver selector argArray lineNr selectorPosition'
    17 	classVariableNames:''
    15 	classVariableNames:''
    18 	poolDictionaries:''
    16 	poolDictionaries:''
   819         (subsel == #or:) ifTrue:[
   817         (subsel == #or:) ifTrue:[
   820             theReceiver arg1 isBlock ifTrue:[
   818             theReceiver arg1 isBlock ifTrue:[
   821                 self codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
   819                 self codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
   822                 ^ self
   820                 ^ self
   823             ]
   821             ]
   824         ]
   822         ].
   825     ].
   823     ].
   826     (selector == #ifTrue:) ifTrue:[
   824     (selector == #ifTrue:) ifTrue:[
   827         theByteCode := #falseJump
   825         theByteCode := #falseJump
   828     ] ifFalse:[
   826     ] ifFalse:[
   829         theByteCode := #trueJump
   827         theByteCode := #trueJump
   875         code at:pos2 put:(aStream position)
   873         code at:pos2 put:(aStream position)
   876     ] ifFalse:[
   874     ] ifFalse:[
   877         code at:pos put:(aStream position)
   875         code at:pos put:(aStream position)
   878     ]
   876     ]
   879 
   877 
   880     "Modified: 18.7.1996 / 10:04:13 / cg"
   878     "Modified: / 28.10.1997 / 18:33:42 / cg"
   881 !
   879 !
   882 
   880 
   883 codeOn:aStream inBlock:b for:aCompiler
   881 codeOn:aStream inBlock:b for:aCompiler
   884     self codeOn:aStream inBlock:b valueNeeded:true for:aCompiler
   882     self codeOn:aStream inBlock:b valueNeeded:true for:aCompiler
   885 !
   883 !
   984                 ]
   982                 ]
   985             ]
   983             ]
   986         ].
   984         ].
   987 
   985 
   988         selector == #? ifTrue:[
   986         selector == #? ifTrue:[
       
   987             "/ only do short-circuit optimization, if arg is not a message;
       
   988             "/ (could have side-effects)
       
   989             "/
   989             arg1 isMessage ifFalse:[
   990             arg1 isMessage ifFalse:[
   990                 ^ self codeQuestOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
   991                 ^ self codeQuestOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
   991             ]
   992             ]
   992         ].
   993         ].
   993 
   994 
  1184     ].
  1185     ].
  1185     valueNeeded ifFalse:[
  1186     valueNeeded ifFalse:[
  1186         aStream nextPut:#drop
  1187         aStream nextPut:#drop
  1187     ].
  1188     ].
  1188 
  1189 
  1189     "Modified: 3.9.1995 / 12:55:42 / claus"
  1190     "Modified: / 3.9.1995 / 12:55:42 / claus"
  1190     "Modified: 29.8.1997 / 08:19:45 / cg"
  1191     "Modified: / 28.10.1997 / 18:15:33 / cg"
  1191 !
  1192 !
  1192 
  1193 
  1193 codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1194 codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1194     "generate code for (x or:[y]) ifxxx:[ ... ] ifyyy:[ ... ]"
  1195     "generate code for (x or:[y]) ifxxx:[ ... ] ifyyy:[ ... ]"
  1195 
  1196 
  1368     "Created: 17.6.1996 / 15:40:22 / cg"
  1369     "Created: 17.6.1996 / 15:40:22 / cg"
  1369     "Modified: 17.6.1996 / 15:47:22 / cg"
  1370     "Modified: 17.6.1996 / 15:47:22 / cg"
  1370 !
  1371 !
  1371 
  1372 
  1372 codeQuestOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1373 codeQuestOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1373     "generate code for x ? y. However, this is only done for non-send
  1374     "generate code for x ? y. 
  1374      args."
  1375      However, this is only done for non-send args."
  1375 
  1376 
  1376     |pos code|
  1377     |pos code|
  1377 
  1378 
  1378     receiver codeOn:aStream inBlock:b for:aCompiler.
  1379     receiver codeOn:aStream inBlock:b for:aCompiler.
  1379     aStream nextPut:#dup.
  1380     aStream nextPut:#dup.
  1385     (argArray at: 1) codeOn:aStream inBlock:b for:aCompiler.
  1386     (argArray at: 1) codeOn:aStream inBlock:b for:aCompiler.
  1386 
  1387 
  1387     code := aStream contents.
  1388     code := aStream contents.
  1388     code at:pos put:(aStream position)
  1389     code at:pos put:(aStream position)
  1389 
  1390 
  1390     "Created: 10.11.1996 / 18:28:57 / cg"
  1391     "Created: / 10.11.1996 / 18:28:57 / cg"
       
  1392     "Modified: / 28.10.1997 / 18:16:20 / cg"
  1391 !
  1393 !
  1392 
  1394 
  1393 codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1395 codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1394     "generate code for [ ... ] repeat"
  1396     "generate code for [ ... ] repeat"
  1395 
  1397 
  2257 ! !
  2259 ! !
  2258 
  2260 
  2259 !MessageNode class methodsFor:'documentation'!
  2261 !MessageNode class methodsFor:'documentation'!
  2260 
  2262 
  2261 version
  2263 version
  2262     ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.82 1997-10-21 17:32:52 cg Exp $'
  2264     ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.83 1997-10-28 18:16:37 cg Exp $'
  2263 ! !
  2265 ! !