MessageSend.st
author claus
Thu, 09 Mar 1995 00:40:27 +0100
changeset 302 1f76060d58a4
parent 160 5dae57a490bd
child 344 4b35f99afefb
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
     1
"
4da5558d8141 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
4da5558d8141 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
4da5558d8141 Initial revision
claus
parents:
diff changeset
     4
4da5558d8141 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
4da5558d8141 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
4da5558d8141 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
4da5558d8141 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
4da5558d8141 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
4da5558d8141 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    11
"
4da5558d8141 Initial revision
claus
parents:
diff changeset
    12
4da5558d8141 Initial revision
claus
parents:
diff changeset
    13
Message subclass:#MessageSend
4da5558d8141 Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:'receiver'
4da5558d8141 Initial revision
claus
parents:
diff changeset
    15
         classVariableNames:''
4da5558d8141 Initial revision
claus
parents:
diff changeset
    16
         poolDictionaries:''
4da5558d8141 Initial revision
claus
parents:
diff changeset
    17
         category:'Kernel-Methods'
4da5558d8141 Initial revision
claus
parents:
diff changeset
    18
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
    19
4da5558d8141 Initial revision
claus
parents:
diff changeset
    20
MessageSend comment:'
4da5558d8141 Initial revision
claus
parents:
diff changeset
    21
COPYRIGHT (c) 1994 by Claus Gittinger
4da5558d8141 Initial revision
claus
parents:
diff changeset
    22
              All Rights Reserved
4da5558d8141 Initial revision
claus
parents:
diff changeset
    23
160
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
    24
$Header: /cvs/stx/stx/libbasic/MessageSend.st,v 1.2 1994-10-10 00:53:52 claus Exp $
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
    25
'!
4da5558d8141 Initial revision
claus
parents:
diff changeset
    26
4da5558d8141 Initial revision
claus
parents:
diff changeset
    27
!MessageSend class methodsFor:'documentation'!
4da5558d8141 Initial revision
claus
parents:
diff changeset
    28
4da5558d8141 Initial revision
claus
parents:
diff changeset
    29
copyright
4da5558d8141 Initial revision
claus
parents:
diff changeset
    30
"
4da5558d8141 Initial revision
claus
parents:
diff changeset
    31
 COPYRIGHT (c) 1994 by Claus Gittinger
4da5558d8141 Initial revision
claus
parents:
diff changeset
    32
              All Rights Reserved
4da5558d8141 Initial revision
claus
parents:
diff changeset
    33
4da5558d8141 Initial revision
claus
parents:
diff changeset
    34
 This software is furnished under a license and may be used
4da5558d8141 Initial revision
claus
parents:
diff changeset
    35
 only in accordance with the terms of that license and with the
4da5558d8141 Initial revision
claus
parents:
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
4da5558d8141 Initial revision
claus
parents:
diff changeset
    37
 be provided or otherwise made available to, or used by, any
4da5558d8141 Initial revision
claus
parents:
diff changeset
    38
 other person.  No title to or ownership of the software is
4da5558d8141 Initial revision
claus
parents:
diff changeset
    39
 hereby transferred.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    40
"
4da5558d8141 Initial revision
claus
parents:
diff changeset
    41
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
    42
4da5558d8141 Initial revision
claus
parents:
diff changeset
    43
version
4da5558d8141 Initial revision
claus
parents:
diff changeset
    44
"
160
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
    45
$Header: /cvs/stx/stx/libbasic/MessageSend.st,v 1.2 1994-10-10 00:53:52 claus Exp $
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
    46
"
4da5558d8141 Initial revision
claus
parents:
diff changeset
    47
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
    48
4da5558d8141 Initial revision
claus
parents:
diff changeset
    49
documentation
4da5558d8141 Initial revision
claus
parents:
diff changeset
    50
"
4da5558d8141 Initial revision
claus
parents:
diff changeset
    51
    Instances of MessageSend can be used for simulation programs.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    52
    They keep some receiver, selector and arguments and can be evaluated
4da5558d8141 Initial revision
claus
parents:
diff changeset
    53
    at any time later.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    54
    They can also be used as replacement for simple [self foo]-blocks.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    55
    Of course, they could also be replaced by blocks such as
4da5558d8141 Initial revision
claus
parents:
diff changeset
    56
    '[receiver perform:selector withArguments:arguments]', 
4da5558d8141 Initial revision
claus
parents:
diff changeset
    57
    but blocks are somewhat more expensive in their creation and use.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    58
    However, the send-operation itself is faster in a block, since it
4da5558d8141 Initial revision
claus
parents:
diff changeset
    59
    will use a better caching scheme (inline-cache) for its send, while
4da5558d8141 Initial revision
claus
parents:
diff changeset
    60
    sending here is done with a #perform:, which is not inline-cached. 
160
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
    61
    Thus it is not sure, which one is faster in the end ...
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
    62
4da5558d8141 Initial revision
claus
parents:
diff changeset
    63
    Example:
4da5558d8141 Initial revision
claus
parents:
diff changeset
    64
4da5558d8141 Initial revision
claus
parents:
diff changeset
    65
       |m|
4da5558d8141 Initial revision
claus
parents:
diff changeset
    66
4da5558d8141 Initial revision
claus
parents:
diff changeset
    67
       m := MessageSend receiver:1 selector:#+ arguments:#(2).
4da5558d8141 Initial revision
claus
parents:
diff changeset
    68
       m value.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    69
4da5558d8141 Initial revision
claus
parents:
diff changeset
    70
    Example2 (a simulation)
4da5558d8141 Initial revision
claus
parents:
diff changeset
    71
	|q|
4da5558d8141 Initial revision
claus
parents:
diff changeset
    72
4da5558d8141 Initial revision
claus
parents:
diff changeset
    73
	q := Queue new.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    74
	...
4da5558d8141 Initial revision
claus
parents:
diff changeset
    75
	'put some action into the queue'
4da5558d8141 Initial revision
claus
parents:
diff changeset
    76
	q nextPut:(MessageSend receiver:something selector:#foo arguments:#().
4da5558d8141 Initial revision
claus
parents:
diff changeset
    77
	...
4da5558d8141 Initial revision
claus
parents:
diff changeset
    78
	'evaluate next action from the queue'
4da5558d8141 Initial revision
claus
parents:
diff changeset
    79
	q next value
4da5558d8141 Initial revision
claus
parents:
diff changeset
    80
	...
4da5558d8141 Initial revision
claus
parents:
diff changeset
    81
"
4da5558d8141 Initial revision
claus
parents:
diff changeset
    82
! !
4da5558d8141 Initial revision
claus
parents:
diff changeset
    83
4da5558d8141 Initial revision
claus
parents:
diff changeset
    84
!MessageSend class methodsFor:'instance creation'!
4da5558d8141 Initial revision
claus
parents:
diff changeset
    85
4da5558d8141 Initial revision
claus
parents:
diff changeset
    86
receiver:r selector:sel arguments:argArray
4da5558d8141 Initial revision
claus
parents:
diff changeset
    87
    |newMessage|
4da5558d8141 Initial revision
claus
parents:
diff changeset
    88
160
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
    89
    newMessage := super setSelector:sel arguments:argArray.
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
    90
    newMessage receiver:r.
4da5558d8141 Initial revision
claus
parents:
diff changeset
    91
    ^ newMessage
4da5558d8141 Initial revision
claus
parents:
diff changeset
    92
! !
4da5558d8141 Initial revision
claus
parents:
diff changeset
    93
4da5558d8141 Initial revision
claus
parents:
diff changeset
    94
!MessageSend methodsFor:'evaluation'!
4da5558d8141 Initial revision
claus
parents:
diff changeset
    95
4da5558d8141 Initial revision
claus
parents:
diff changeset
    96
value
160
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
    97
    "evaluate the messagesend with the original arguments"
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
    98
4da5558d8141 Initial revision
claus
parents:
diff changeset
    99
    ^ receiver perform:selector withArguments:args
4da5558d8141 Initial revision
claus
parents:
diff changeset
   100
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
   101
4da5558d8141 Initial revision
claus
parents:
diff changeset
   102
value:someArgument
4da5558d8141 Initial revision
claus
parents:
diff changeset
   103
    "evaluate the messagesend, with someArgument instead of the original"
4da5558d8141 Initial revision
claus
parents:
diff changeset
   104
 
4da5558d8141 Initial revision
claus
parents:
diff changeset
   105
    ^ receiver perform:selector with:someArgument
4da5558d8141 Initial revision
claus
parents:
diff changeset
   106
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
   107
4da5558d8141 Initial revision
claus
parents:
diff changeset
   108
value:arg1 value:arg2
160
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
   109
    "evaluate the messagesend, with arg1 and arg2 instead of the original
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
   110
     arguments"
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
   111
4da5558d8141 Initial revision
claus
parents:
diff changeset
   112
    ^  receiver perform:selector with:arg1 with:arg2
4da5558d8141 Initial revision
claus
parents:
diff changeset
   113
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
   114
4da5558d8141 Initial revision
claus
parents:
diff changeset
   115
value:arg1 value:arg2 value:arg3
160
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
   116
    "evaluate the messagesend, with arg1, arg2 and arg3 instead of the original
5dae57a490bd *** empty log message ***
claus
parents: 96
diff changeset
   117
     arguments"
96
4da5558d8141 Initial revision
claus
parents:
diff changeset
   118
4da5558d8141 Initial revision
claus
parents:
diff changeset
   119
    ^  receiver perform:selector with:arg1 with:arg2 with:arg3
4da5558d8141 Initial revision
claus
parents:
diff changeset
   120
! !
4da5558d8141 Initial revision
claus
parents:
diff changeset
   121
4da5558d8141 Initial revision
claus
parents:
diff changeset
   122
!MessageSend methodsFor:'accessing'!
4da5558d8141 Initial revision
claus
parents:
diff changeset
   123
4da5558d8141 Initial revision
claus
parents:
diff changeset
   124
receiver:r
4da5558d8141 Initial revision
claus
parents:
diff changeset
   125
    "set the receiver"
4da5558d8141 Initial revision
claus
parents:
diff changeset
   126
4da5558d8141 Initial revision
claus
parents:
diff changeset
   127
    receiver := r
4da5558d8141 Initial revision
claus
parents:
diff changeset
   128
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
   129
4da5558d8141 Initial revision
claus
parents:
diff changeset
   130
receiver
4da5558d8141 Initial revision
claus
parents:
diff changeset
   131
    "return the receiver"
4da5558d8141 Initial revision
claus
parents:
diff changeset
   132
4da5558d8141 Initial revision
claus
parents:
diff changeset
   133
    ^ receiver
4da5558d8141 Initial revision
claus
parents:
diff changeset
   134
! !
4da5558d8141 Initial revision
claus
parents:
diff changeset
   135
4da5558d8141 Initial revision
claus
parents:
diff changeset
   136
!MessageSend methodsFor:'printing & storing'!
4da5558d8141 Initial revision
claus
parents:
diff changeset
   137
4da5558d8141 Initial revision
claus
parents:
diff changeset
   138
displayString
4da5558d8141 Initial revision
claus
parents:
diff changeset
   139
    "return a string for display in inspectors etc."
4da5558d8141 Initial revision
claus
parents:
diff changeset
   140
4da5558d8141 Initial revision
claus
parents:
diff changeset
   141
    ^ 'MessageSend(' , receiver displayString , '>>' , selector , ')'
4da5558d8141 Initial revision
claus
parents:
diff changeset
   142
!
4da5558d8141 Initial revision
claus
parents:
diff changeset
   143
4da5558d8141 Initial revision
claus
parents:
diff changeset
   144
printOn:aStream
4da5558d8141 Initial revision
claus
parents:
diff changeset
   145
    "return a string for printing the receiver"
4da5558d8141 Initial revision
claus
parents:
diff changeset
   146
4da5558d8141 Initial revision
claus
parents:
diff changeset
   147
    receiver printOn:aStream.
4da5558d8141 Initial revision
claus
parents:
diff changeset
   148
    aStream nextPutAll:'>>'.
4da5558d8141 Initial revision
claus
parents:
diff changeset
   149
    selector printOn:aStream
4da5558d8141 Initial revision
claus
parents:
diff changeset
   150
! !