"
COPYRIGHT (c) 2006 by eXept Software AG
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
"{ Package: 'stx:libbasic' }"
Object subclass:#PrototypeLookupAlgorithm
instanceVariableNames:''
classVariableNames:'TheOneAndOnlyInstance'
poolDictionaries:''
category:'Kernel-Classes'
!
!PrototypeLookupAlgorithm class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 2006 by eXept Software AG
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
!
documentation
"
this is a dummy lookupAlgorithm class to demonstrate the meta-object-protoocol support.
Create a sumclass of me, redefine the lookupmethod to return a method proper.
If it returns nil, a doesNotUnderstand will be sent, as usual.
This class does nothing real - it duplicates the algorithm as found in the VM.
[author:]
cg (cg@CG-PC)
[see also:]
jan Vrany's paper on Smalltalk's Meta-Object-Protocol proposal.
"
!
examples
"
this is only a test for the lookup; when installed as a class's lookupObject,
the lookup will be called from the VM for instances of that class.
|mthd|
mthd := self new
lookupMethodForSelector:#squared
directedTo:nil
for:100
withArguments:nil
from:nil.
mthd valueWithReceiver:100 arguments:#().
"
! !
!PrototypeLookupAlgorithm class methodsFor:'instance creation'!
new
TheOneAndOnlyInstance isNil ifTrue: [
TheOneAndOnlyInstance := super new.
].
^ TheOneAndOnlyInstance
! !
!PrototypeLookupAlgorithm methodsFor:'lookup'!
lookupMethodForSelector:aSelector directedTo:searchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext
"invoked by the VM to ask me for a method to call.
The arguments are: the selector, receiver and arguments,
the class to start the search in (for here-, super and directed sends)
the sending context.
The returned method object will be put into the inline- and polyCache
at the call site; it might therefore be called more than once for the
same receiver-class/selector combination (once for each call site).
If I return nil, a doesNotUnderstand will be invoked."
|cls md method|
cls := searchClass.
cls isNil ifTrue:[ cls := aReceiver class ].
[ cls notNil ] whileTrue:[
md := cls methodDictionary.
method := md at:aSelector ifAbsent:nil.
method notNil ifTrue:[^ method ].
cls := cls superclass.
].
^ nil
! !
!PrototypeLookupAlgorithm class methodsFor:'documentation'!
version_CVS
^ 'Header: /cvs/stx/stx/libbasic/PrototypeLookupAlgorithm.st,v 1.3 2010/04/07 16:39:47 cg Exp '
!
version_SVN
^ '$Id$'
! !