MessageNd.st
changeset 602 1be5dd333adc
parent 595 a90e8d8bf417
child 624 e71abe9654e6
equal deleted inserted replaced
601:1e05076a2dbb 602:1be5dd333adc
     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.1.9 on 29-aug-1997 at 8:24:43 pm'                  !
    12 
    14 
    13 ParseNode subclass:#MessageNode
    15 ParseNode subclass:#MessageNode
    14 	instanceVariableNames:'receiver selector argArray lineNr selectorPosition'
    16 	instanceVariableNames:'receiver selector argArray lineNr selectorPosition'
    15 	classVariableNames:''
    17 	classVariableNames:''
    16 	poolDictionaries:''
    18 	poolDictionaries:''
   304         (selector == #value) ifTrue:[
   306         (selector == #value) ifTrue:[
   305             receiver isBlock ifTrue:[
   307             receiver isBlock ifTrue:[
   306                 receiver possiblyInlined:true
   308                 receiver possiblyInlined:true
   307             ].
   309             ].
   308         ].
   310         ].
       
   311         (selector == #repeat) ifTrue:[
       
   312             receiver isBlock ifTrue:[
       
   313                 receiver possiblyInlined:true
       
   314             ].
       
   315         ].
   309     ].
   316     ].
   310 
   317 
   311     numArgs == 1 ifTrue:[
   318     numArgs == 1 ifTrue:[
   312         (selector == #or: 
   319         (selector == #or: 
   313         or:[selector == #and:]) ifTrue:[
   320         or:[selector == #and:]) ifTrue:[
   370         ^ self
   377         ^ self
   371     ].
   378     ].
   372     ^ self
   379     ^ self
   373 
   380 
   374     "Created: 2.7.1997 / 17:01:10 / cg"
   381     "Created: 2.7.1997 / 17:01:10 / cg"
   375     "Modified: 2.7.1997 / 18:26:45 / cg"
   382     "Modified: 29.8.1997 / 08:20:57 / cg"
   376 !
   383 !
   377 
   384 
   378 plausibilityCheck
   385 plausibilityCheck
   379     |rec arg operand|
   386     |rec arg operand|
   380 
   387 
   924             ((selector == #whileTrue) or:[selector == #whileFalse]) ifTrue:[
   931             ((selector == #whileTrue) or:[selector == #whileFalse]) ifTrue:[
   925                 receiver isInlinable ifTrue:[
   932                 receiver isInlinable ifTrue:[
   926                     ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
   933                     ^ self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
   927                 ]
   934                 ]
   928             ].
   935             ].
       
   936             (selector == #repeat) ifTrue:[
       
   937                 receiver isInlinable ifTrue:[
       
   938                     valueNeeded ifFalse:[
       
   939                         ^ self codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
       
   940                     ]
       
   941                 ]
       
   942             ].
   929         ].
   943         ].
   930 
   944 
   931         isBuiltIn := aCompiler isBuiltInUnarySelector:selector forReceiver:receiver.
   945         isBuiltIn := aCompiler isBuiltInUnarySelector:selector forReceiver:receiver.
   932     ].
   946     ].
   933 
   947 
  1171     valueNeeded ifFalse:[
  1185     valueNeeded ifFalse:[
  1172         aStream nextPut:#drop
  1186         aStream nextPut:#drop
  1173     ].
  1187     ].
  1174 
  1188 
  1175     "Modified: 3.9.1995 / 12:55:42 / claus"
  1189     "Modified: 3.9.1995 / 12:55:42 / claus"
  1176     "Modified: 2.7.1997 / 18:54:09 / cg"
  1190     "Modified: 29.8.1997 / 08:19:45 / cg"
  1177 !
  1191 !
  1178 
  1192 
  1179 codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1193 codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1180     "generate code for (x or:[y]) ifxxx:[ ... ] ifyyy:[ ... ]"
  1194     "generate code for (x or:[y]) ifxxx:[ ... ] ifyyy:[ ... ]"
  1181 
  1195 
  1372 
  1386 
  1373     code := aStream contents.
  1387     code := aStream contents.
  1374     code at:pos put:(aStream position)
  1388     code at:pos put:(aStream position)
  1375 
  1389 
  1376     "Created: 10.11.1996 / 18:28:57 / cg"
  1390     "Created: 10.11.1996 / 18:28:57 / cg"
       
  1391 !
       
  1392 
       
  1393 codeRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
       
  1394     "generate code for [ ... ] repeat"
       
  1395 
       
  1396     |pos|
       
  1397 
       
  1398     pos := aStream position.
       
  1399     receiver codeInlineOn:aStream inBlock:b valueNeeded:false for:aCompiler.
       
  1400     aStream nextPut:#jump; nextPut:pos.
       
  1401 
       
  1402     "Created: 29.8.1997 / 08:14:58 / cg"
  1377 !
  1403 !
  1378 
  1404 
  1379 codeSendOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1405 codeSendOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
  1380     "like code on, but assumes that receiver has already been
  1406     "like code on, but assumes that receiver has already been
  1381      coded onto stack - needed for cascade"
  1407      coded onto stack - needed for cascade"
  2229 ! !
  2255 ! !
  2230 
  2256 
  2231 !MessageNode class methodsFor:'documentation'!
  2257 !MessageNode class methodsFor:'documentation'!
  2232 
  2258 
  2233 version
  2259 version
  2234     ^ '$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.80 1997-08-05 14:34:57 cg Exp $'
  2260     ^ '$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.81 1997-09-02 18:17:10 cg Exp $'
  2235 ! !
  2261 ! !