equal
deleted
inserted
replaced
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 ! ! |