"====================================================================== | | Message Method Definitions | | $Revision: 1.7.5$ | $Date: 2000/05/28 16:56:52$ | $Author: pb$ | ======================================================================" "====================================================================== | | Copyright 1988-92, 1994-95, 1999, 2000 Free Software Foundation, Inc. | Written by Steve Byrne. | | This file is part of the GNU Smalltalk class library. | | The GNU Smalltalk class library is free software; you can redistribute it | and/or modify it under the terms of the GNU Lesser General Public License | as published by the Free Software Foundation; either version 2.1, or (at | your option) any later version. | | The GNU Smalltalk class library is distributed in the hope that it will be | useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser | General Public License for more details. | | You should have received a copy of the GNU Lesser General Public License | along with the GNU Smalltalk class library; see the file COPYING.LESSER. | If not, write to the Free Software Foundation, 59 Temple Place - Suite | 330, Boston, MA 02111-1307, USA. | ======================================================================" Object subclass: #Message instanceVariableNames: 'selector args' classVariableNames: '' poolDictionaries: '' category: 'Language-Implementation' ! Message comment: 'I am a virtually existent class. By that I mean that logically instances of my class are created whenever a message is sent to an object, but in reality my instances are only created to hold a message that has failed, so that error reporting methods can examine the sender and arguments.' ! !Message methodsFor: 'basic'! printOn: aStream "Print a representation of the receiver on aStream" (self selector occurrencesOf: $:) = 0 ifTrue: [ self selector printOn: aStream. self selector first isLetter ifFalse: [ self arguments first printOn: aStream ] ] ifFalse: [ (self selector substrings: $:) with: self arguments do: [:sel :arg | sel printOn: aStream. ': <' printOn: aStream. arg printOn: aStream. '> ' printOn: aStream ] ] ! sendTo: aReceiver "Resend to aReceiver" ^aReceiver perform: selector withArguments: args ! reinvokeFor: aReceiver "Resend to aReceiver - present for compatibility" ^aReceiver perform: selector withArguments: args ! ! !Message methodsFor: 'accessing'! selector: aSymbol "Set the receiver's selector" selector := aSymbol ! arguments: anArray "Set the receiver's arguments" args := anArray ! selector "Answer the receiver's selector" ^selector ! argument "Answer the first of the receiver's arguments" ^args at: 1 ! arguments "Answer the receiver's arguments" ^args ! ! !Message class methodsFor: 'creating instances'! selector: aSymbol arguments: anArray "Create a new Message with the given selector and arguments" ^self new selector: aSymbol; arguments: anArray ! !