Lookup.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 02 Oct 2011 17:42:05 +0100
branchjv
changeset 17875 76b088500bd1
parent 17870 989a52aa1a13
child 17879 4ed4eb60a67e
permissions -rw-r--r--
First (unchecked) try for bind:to: method in PolymorphicInlineCache
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17761
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
              All Rights Reserved
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
 hereby transferred.
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
"
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
Object subclass:#Lookup
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
	instanceVariableNames:''
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
	classVariableNames:''
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	poolDictionaries:''
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
	category:'Kernel-Classes'
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
!
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!Lookup class methodsFor:'documentation'!
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
copyright
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
 COPYRIGHT (c) 2006 by eXept Software AG
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
              All Rights Reserved
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
 This software is furnished under a license and may be used
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
 hereby transferred.
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
"
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
! !
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
17762
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    37
!Lookup class methodsFor:'initialization'!
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    38
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    39
initialize
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    40
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    41
    self lookupObject: Lookup builtin
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    42
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    43
    "Created: / 26-04-2010 / 21:15:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    44
! !
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    45
17761
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
!Lookup class methodsFor:'accessing'!
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
builtin
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    ^BuiltinLookup instance
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    "Created: / 26-04-2010 / 19:26:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
! !
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
!Lookup methodsFor:'lookup'!
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
17792
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    57
lookupMethodForSelector: selector directedTo: initialSearchClass
17762
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    58
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    59
     |cls md method|
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    60
17792
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    61
	"Following C code is just a performance optimization.
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    62
	 It is not neccessary, however it speeds up UI code,
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    63
	 since it heavily uses perform:"
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    64
%{
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    65
	RETURN (  __lookup(initialSearchClass, selector) );
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    66
%}.
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    67
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    68
     cls := initialSearchClass.
17762
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    69
     [ cls notNil ] whileTrue:[
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    70
        md := cls methodDictionary.
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    71
        method := md at:selector ifAbsent:nil.
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    72
        method notNil ifTrue:[^ method ].
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    73
        cls := cls superclass.
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    74
     ].
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    75
     ^ nil
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    76
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    77
    "Created: / 27-04-2010 / 15:30:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    78
!
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
    79
17792
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    80
lookupMethodForSelector:selector directedTo:initialSearchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext
17761
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    "invoked by the VM to ask me for a method to call.
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
     The arguments are: the selector, receiver and arguments,
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
     the class to start the search in (for here-, super and directed sends)
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
     the sending context.
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
     The returned method object will be put into the inline- and polyCache
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
     at the call site; it might therefore be called more than once for the
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
     same receiver-class/selector combination (once for each call site).
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
     If I return nil, a doesNotUnderstand will be invoked."
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
     |cls md method|
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
17792
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    93
	"Following C code is just a performance optimization.
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    94
	 It is not neccessary, however it speeds up UI code,
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    95
	 since it heavily uses perform:"
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    96
%{
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    97
	RETURN (  __lookup(initialSearchClass, selector) );
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    98
%}.
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
    99
    ^ self lookupMethodForSelector: selector 
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
   100
		   directedTo: initialSearchClass
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
   101
0254c771237a - support for tracing/profiling ILC misses
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17762
diff changeset
   102
17870
989a52aa1a13 Lookup accepts new argument -> reference to ILC
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   103
!
989a52aa1a13 Lookup accepts new argument -> reference to ILC
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   104
989a52aa1a13 Lookup accepts new argument -> reference to ILC
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   105
lookupMethodForSelector:selector directedTo:initialSearchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext ilc: ilcCache
17875
76b088500bd1 First (unchecked) try for bind:to: method in PolymorphicInlineCache
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17870
diff changeset
   106
    | method |
76b088500bd1 First (unchecked) try for bind:to: method in PolymorphicInlineCache
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17870
diff changeset
   107
76b088500bd1 First (unchecked) try for bind:to: method in PolymorphicInlineCache
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17870
diff changeset
   108
    method := self lookupMethodForSelector:selector directedTo:initialSearchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext.
76b088500bd1 First (unchecked) try for bind:to: method in PolymorphicInlineCache
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17870
diff changeset
   109
    ilcCache bind: method to: initialSearchClass.
76b088500bd1 First (unchecked) try for bind:to: method in PolymorphicInlineCache
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17870
diff changeset
   110
    ^ method.
17870
989a52aa1a13 Lookup accepts new argument -> reference to ILC
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   111
989a52aa1a13 Lookup accepts new argument -> reference to ILC
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   112
    "Created: / 01-10-2011 / 13:18:40 / Jan Kurs <kursjan@fit.cvut.cz>"
17761
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
! !
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
!Lookup class methodsFor:'documentation'!
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
version_SVN
17875
76b088500bd1 First (unchecked) try for bind:to: method in PolymorphicInlineCache
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17870
diff changeset
   118
    ^ '$Id: Lookup.st 10707 2011-10-02 16:42:05Z kursjan $'
17761
b0e5971141bc Added Lookup and BuiltinLookup classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
! !
17762
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
   120
6eb4414e6a31 Selector namespaces support
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17761
diff changeset
   121
Lookup initialize!