JavaMethodref.st
author cg
Mon, 12 Jan 1998 14:24:47 +0000
changeset 255 2d8b3948a08a
parent 252 04b330744577
child 264 44aedfcd08d1
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
255
2d8b3948a08a *** empty log message ***
cg
parents: 252
diff changeset
     1
'From Smalltalk/X, Version:3.3.1 on 8-jan-1998 at 9:38:10 pm'                   !
2d8b3948a08a *** empty log message ***
cg
parents: 252
diff changeset
     2
1
083530508d9c intitial checkin
cg
parents:
diff changeset
     3
JavaRef subclass:#JavaMethodref
120
6493fa59d355 added slots for an inline cache
cg
parents: 114
diff changeset
     4
	instanceVariableNames:'method sel lastClass lastMethod'
1
083530508d9c intitial checkin
cg
parents:
diff changeset
     5
	classVariableNames:''
083530508d9c intitial checkin
cg
parents:
diff changeset
     6
	poolDictionaries:''
4
07264ed96b97 checkin from browser
cg
parents: 1
diff changeset
     7
	category:'Java-Reader-Support'
1
083530508d9c intitial checkin
cg
parents:
diff changeset
     8
!
083530508d9c intitial checkin
cg
parents:
diff changeset
     9
083530508d9c intitial checkin
cg
parents:
diff changeset
    10
152
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    11
!JavaMethodref class methodsFor:'flushing'!
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    12
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    13
flushCaches
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    14
    self allInstancesDo:[:ref |
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    15
        ref flush
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    16
    ].
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    17
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    18
    "
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    19
     JavaMethodref flushCaches
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    20
    "
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    21
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    22
    "Modified: 20.3.1997 / 00:10:24 / cg"
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    23
! !
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    24
41
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    25
!JavaMethodref methodsFor:'accessing'!
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    26
163
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    27
argSignature
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    28
    ^ JavaMethod argSigArrayFromSignature:(self signature)
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    29
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    30
    "Created: 24.3.1997 / 12:22:50 / cg"
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    31
!
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    32
122
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    33
lastClass
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    34
    "return lastClass"
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    35
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    36
    ^ lastClass!
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    37
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    38
lastClass:something
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    39
    "set lastClass"
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    40
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    41
    lastClass := something.!
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    42
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    43
lastMethod
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    44
    "return lastMethod"
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    45
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    46
    ^ lastMethod!
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    47
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    48
lastMethod:something
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    49
    "set lastMethod"
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    50
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    51
    lastMethod := something.!
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
    52
198
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    53
lastMethod:someMethod lastClass:someClass
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    54
    "set lastMethod & lastClass"
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    55
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    56
    lastMethod := someMethod.
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    57
    lastClass := someClass.
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    58
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    59
    "Created: 4.8.1997 / 18:21:11 / cg"
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    60
!
5543d1079a4a *** empty log message ***
cg
parents: 180
diff changeset
    61
41
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    62
name
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    63
    ^ nameandType name.
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    64
!
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    65
163
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    66
returnType
255
2d8b3948a08a *** empty log message ***
cg
parents: 252
diff changeset
    67
    ^ JavaMethod returnTypeFromSignature:(self signature) in:nil.
163
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    68
255
2d8b3948a08a *** empty log message ***
cg
parents: 252
diff changeset
    69
    "Modified: / 8.1.1998 / 19:07:41 / cg"
163
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    70
!
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
    71
41
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    72
selector
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    73
    sel isNil ifTrue:[
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    74
        sel := (nameandType name , nameandType signature) asSymbol.
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    75
    ].
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    76
    ^ sel
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    77
!
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    78
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    79
signature
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    80
    ^ nameandType signature.
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    81
! !
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    82
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    83
!JavaMethodref methodsFor:'printing & storing'!
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    84
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    85
displayString
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    86
    ^ 'JavaMethodRef (' , class displayString , ' ' 
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    87
                        , '''' , nameandType name , '''' , nameandType signature , ')'
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    88
! !
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
    89
27
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
    90
!JavaMethodref methodsFor:'resolving'!
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
    91
152
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    92
flush
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    93
    method := nil.
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    94
    lastClass := nil.
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    95
    lastMethod := nil
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    96
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    97
    "Created: 20.3.1997 / 00:10:01 / cg"
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    98
!
db8e2bfe92f6 *** empty log message ***
cg
parents: 150
diff changeset
    99
27
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   100
method
87
e9d58a151a63 *** empty log message ***
cg
parents: 71
diff changeset
   101
    |nm sig mthd cls|
27
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   102
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   103
    method notNil ifTrue:[^ method].
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   104
90
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   105
    cls := class javaClass.
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   106
    cls ~~ class ifTrue:[
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   107
        class := cls.
27
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   108
    ].
90
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   109
252
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   110
"/    (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   111
"/        cls := class resolve.
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   112
"/        cls notNil ifTrue:[
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   113
"/            class := cls
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   114
"/        ]
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   115
"/    ].
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   116
"/    (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   117
"/        self halt:'unresolved class'.
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   118
"/    ].
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   119
29
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   120
    sel isNil ifTrue:[
252
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   121
        nm := nameandType name asSymbol.
29
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   122
        sig := nameandType signature.
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   123
        sel := (nm , sig) asSymbol.
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   124
    ].
27
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   125
29
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   126
"/ 'search in: ' print. class fullName print. ' for ' print. nm print. ' sig: ' print. sig printNL.
41
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
   127
252
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   128
    mthd := class compiledMethodAt:sel.
148
db560ebab8b5 *** empty log message ***
cg
parents: 135
diff changeset
   129
    mthd isNil ifTrue:[
163
43e2f021c562 *** empty log message ***
cg
parents: 156
diff changeset
   130
"/        self halt:'no method found for: ' , self displayString.
180
b77168d0e07c checkin from browser
cg
parents: 167
diff changeset
   131
        ^ nil.
252
04b330744577 new javaVM stuff & back to pre-stefans changes
cg
parents: 250
diff changeset
   132
"/ old:        ^ self.
148
db560ebab8b5 *** empty log message ***
cg
parents: 135
diff changeset
   133
    ].
db560ebab8b5 *** empty log message ***
cg
parents: 135
diff changeset
   134
    mthd checkForNOOPMethod.
db560ebab8b5 *** empty log message ***
cg
parents: 135
diff changeset
   135
    ^ mthd
db560ebab8b5 *** empty log message ***
cg
parents: 135
diff changeset
   136
180
b77168d0e07c checkin from browser
cg
parents: 167
diff changeset
   137
    "Modified: 31.7.1997 / 22:16:24 / cg"
29
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   138
!
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   139
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   140
methodFor:aClass
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   141
    |nm sig mthd cls|
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   142
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   143
    cls := aClass.
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   144
71
feb1b4907dd4 *** empty log message ***
cg
parents: 63
diff changeset
   145
    cls == Array ifTrue:[
feb1b4907dd4 *** empty log message ***
cg
parents: 63
diff changeset
   146
        cls := Java classNamed:'java.lang.Object'.
90
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   147
    ] ifFalse:[
100
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   148
        cls == UndefinedObject ifTrue:[
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   149
            cls := Java classNamed:'java.lang.Object'.
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   150
        ] ifFalse:[
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   151
            cls isBehavior ifTrue:[
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   152
                cls isMeta ifTrue:[
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   153
                    cls := cls soleInstance.
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   154
                ].
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   155
                (cls isKindOf:JavaClass) ifFalse:[
167
77dcbc4b2201 *** empty log message ***
cg
parents: 163
diff changeset
   156
"/                    self halt:'not a javaClass'.
125
c99addd65f73 *** empty log message ***
cg
parents: 122
diff changeset
   157
                    ^ nil
100
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   158
                ]
90
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   159
            ].
100
4b0da648dcc5 *** empty log message ***
cg
parents: 90
diff changeset
   160
    "/        cls := cls javaClass.
90
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   161
        ].
71
feb1b4907dd4 *** empty log message ***
cg
parents: 63
diff changeset
   162
    ].
feb1b4907dd4 *** empty log message ***
cg
parents: 63
diff changeset
   163
90
918e2740098c resolve rewritten
cg
parents: 87
diff changeset
   164
    cls isUnresolved ifTrue:[
87
e9d58a151a63 *** empty log message ***
cg
parents: 71
diff changeset
   165
        self halt:'unresolved class'.
29
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   166
    ].
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   167
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   168
    sel isNil ifTrue:[
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   169
        nm := nameandType name asSymbol.
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   170
        sig := nameandType signature.
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   171
        sel := (nm , sig) asSymbol.
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   172
    ].
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   173
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   174
    [cls notNil] whileTrue:[
63
74442cd26c02 changes for new methodDict
cg
parents: 52
diff changeset
   175
        mthd := cls compiledMethodAt:sel.
122
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
   176
        mthd notNil ifTrue:[
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
   177
            lastClass := aClass.
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
   178
            lastMethod := mthd.
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
   179
            ^ mthd
e731a1c1d499 *** empty log message ***
cg
parents: 120
diff changeset
   180
        ].
41
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
   181
29
eb3367f8fb9b checkin from browser
cg
parents: 27
diff changeset
   182
        cls := cls superclass
27
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   183
    ].
71
feb1b4907dd4 *** empty log message ***
cg
parents: 63
diff changeset
   184
41
eb7974d88088 checkin from browser
cg
parents: 29
diff changeset
   185
    ^ nil
150
11386844330f checkin from browser
cg
parents: 148
diff changeset
   186
167
77dcbc4b2201 *** empty log message ***
cg
parents: 163
diff changeset
   187
    "Modified: 26.3.1997 / 13:32:39 / cg"
27
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   188
! !
4560bb77bb36 checkin from browser
cg
parents: 13
diff changeset
   189
203
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   190
!JavaMethodref methodsFor:'special'!
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   191
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   192
updateClassRefsFrom:oldClass to:newClass
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   193
    lastClass := nil.
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   194
    lastMethod := nil.
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   195
    super updateClassRefsFrom:oldClass to:newClass
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   196
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   197
    "Created: 7.8.1997 / 15:00:46 / cg"
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   198
! !
67af98594672 *** empty log message ***
cg
parents: 198
diff changeset
   199
135
098936234135 *** empty log message ***
cg
parents: 125
diff changeset
   200
!JavaMethodref class methodsFor:'documentation'!
1
083530508d9c intitial checkin
cg
parents:
diff changeset
   201
083530508d9c intitial checkin
cg
parents:
diff changeset
   202
version
255
2d8b3948a08a *** empty log message ***
cg
parents: 252
diff changeset
   203
    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethodref.st,v 1.30 1998/01/12 14:24:36 cg Exp $'
1
083530508d9c intitial checkin
cg
parents:
diff changeset
   204
! !