JavaLookup.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 26 Apr 2015 21:07:30 +0100
changeset 3442 e59716e00703
parent 3041 7a326f9f8aad
child 3360 1a8899091305
permissions -rw-r--r--
Oops, fix for commit 48320b2d4: Use first element of binding to read bound value For workspace variables it does not matter much as both values are valueholders, however in inspector and for debugger, binding contains block with fixed number of arguments.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     1
"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
     2
 Copyright (c) 2010-2011 Jan Vrany, Jan Kurs & Marcel Hlopko,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
     3
                         SWING Research Group, Czech Technical University 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
     4
                         in Prague
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     5
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     6
 Permission is hereby granted, free of charge, to any person
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     7
 obtaining a copy of this software and associated documentation
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     8
 files (the 'Software'), to deal in the Software without
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
     9
 restriction, including without limitation the rights to use,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    10
 copy, modify, merge, publish, distribute, sublicense, and/or sell
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    11
 copies of the Software, and to permit persons to whom the
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    12
 Software is furnished to do so, subject to the following
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    13
 conditions:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    14
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    15
 The above copyright notice and this permission notice shall be
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    16
 included in all copies or substantial portions of the Software.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    17
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    18
 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    19
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    20
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    21
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    22
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    23
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    24
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    25
 OTHER DEALINGS IN THE SOFTWARE.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    26
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    27
"{ Package: 'stx:libjava' }"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    28
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    29
Lookup subclass:#JavaLookup
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    30
	instanceVariableNames:'s2j j2s'
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    31
	classVariableNames:'Instance InvokeRSelectors'
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    32
	poolDictionaries:''
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    33
	category:'Languages-Java-Interop'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    34
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    35
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    36
Lookup subclass:#Java2Smalltalk
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    37
	instanceVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    38
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    39
	poolDictionaries:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    40
	privateIn:JavaLookup
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    41
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    42
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    43
Lookup subclass:#Smalltalk2Java
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    44
	instanceVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    45
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    46
	poolDictionaries:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    47
	privateIn:JavaLookup
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    48
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    49
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    50
!JavaLookup class methodsFor:'documentation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    51
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    52
copyright
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    53
"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    54
 Copyright (c) 2010-2011 Jan Vrany, Jan Kurs & Marcel Hlopko,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    55
                         SWING Research Group, Czech Technical University 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
    56
                         in Prague
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    57
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    58
 Permission is hereby granted, free of charge, to any person
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    59
 obtaining a copy of this software and associated documentation
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    60
 files (the 'Software'), to deal in the Software without
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    61
 restriction, including without limitation the rights to use,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    62
 copy, modify, merge, publish, distribute, sublicense, and/or sell
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    63
 copies of the Software, and to permit persons to whom the
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    64
 Software is furnished to do so, subject to the following
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    65
 conditions:
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    66
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    67
 The above copyright notice and this permission notice shall be
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    68
 included in all copies or substantial portions of the Software.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    69
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    70
 THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    71
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    72
 OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    73
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    74
 HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    75
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    76
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    77
 OTHER DEALINGS IN THE SOFTWARE.
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    78
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    79
"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    80
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
    81
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    82
!JavaLookup class methodsFor:'initialization'!
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    83
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    84
initialize
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    85
    "Invoked at system start or when the class is dynamically loaded."
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    86
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    87
    "/ please change as required (and remove this comment)
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    88
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    89
    InvokeRSelectors := 
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    90
        #(
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    91
            " 0" #'_INVOKEVIRTUAL_R:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    92
            " 1" #'_INVOKEVIRTUAL_R:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    93
            " 2" #'_INVOKEVIRTUAL_R:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    94
            " 3" #'_INVOKEVIRTUAL_R:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    95
            " 4" #'_INVOKEVIRTUAL_R:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    96
            " 5" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    97
            " 6" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    98
            " 7" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
    99
            " 8" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   100
            " 9" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   101
            "10" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   102
            "11" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   103
            "12" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   104
            "13" #'_INVOKEVIRTUAL_R:_:_:_:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   105
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   106
            " 0" #'_INVOKEINTERFACE_R:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   107
            " 1" #'_INVOKEINTERFACE_R:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   108
            " 2" #'_INVOKEINTERFACE_R:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   109
            " 3" #'_INVOKEINTERFACE_R:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   110
            " 4" #'_INVOKEINTERFACE_R:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   111
            " 5" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   112
            " 6" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   113
            " 7" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   114
            " 8" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   115
            " 9" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   116
            "10" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   117
            "11" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   118
            "12" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   119
            "13" #'_INVOKEINTERFACE_R:_:_:_:_:_:_:_:_:_:_:_:_:_:_:'
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   120
        )
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   121
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   122
    "Modified (format): / 20-01-2014 / 13:50:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   123
! !
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   124
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   125
!JavaLookup class methodsFor:'instance creation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   126
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   127
cleanup
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   128
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   129
    Instance := nil.
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   130
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   131
    "Modified: / 25-02-2011 / 14:45:03 / kursjan <kursjan@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   132
    "Created: / 19-09-2011 / 23:25:08 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   133
    "Modified: / 15-12-2011 / 23:05:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   134
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   135
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   136
instance
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   137
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   138
    Instance isNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   139
        Instance := self basicNew initialize
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   140
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   141
    ^Instance
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   142
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   143
    "Modified: / 25-02-2011 / 14:45:03 / kursjan <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   144
    "Created: / 19-09-2011 / 23:20:49 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   145
    "Modified: / 15-12-2011 / 23:05:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   146
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   147
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   148
new
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   149
    ^ self shouldNeverBeSent.
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   150
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   151
    "Created: / 25-02-2011 / 14:44:43 / kursjan <kursjan@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   152
    "Modified: / 29-08-2011 / 21:10:12 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   153
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   154
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   155
!JavaLookup methodsFor:'initialization'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   156
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   157
initialize
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   158
    "Invoked when a new instance is created."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   159
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   160
    s2j := Smalltalk2Java new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   161
    j2s := Java2Smalltalk new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   162
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   163
    "Modified: / 15-12-2011 / 23:06:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   164
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   165
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   166
!JavaLookup methodsFor:'lookup'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   167
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   168
lookupMethodForSelector: selector directedTo: initialSearchClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   169
    "This method performs standard Java lookup as required JVM spec. See 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   170
        - JVM spec, 5.4.2.1 Method overriding
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   171
        - JVM spec, 6.4 invokevirtual
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   172
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   173
     This is hacky because of those stupid package-private methods. Sigh."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   174
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   175
    | method superMethod |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   176
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   177
    method := super lookupMethodForSelector: selector directedTo: initialSearchClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   178
    method isNil ifTrue:[ ^ nil ].
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   179
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   180
    superMethod := super lookupMethodForSelector: selector directedTo: method mclass superclass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   181
    [ superMethod notNil ] whileTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   182
        (method overrides: superMethod) ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   183
            method := superMethod
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   184
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   185
        superMethod := super lookupMethodForSelector: selector directedTo: superMethod mclass superclass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   186
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   187
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   188
    ^method
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   189
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   190
    "Created: / 05-07-2012 / 11:06:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   191
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   192
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   193
lookupMethodForSelector:selector directedTo:initialSearchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext ilc: ilcCache
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   194
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   195
    "Invoked by the VM to ask me for a method to call.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   196
     The arguments are: the selector, receiver and arguments,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   197
     the class to start the search in (for here-, super and directed sends)
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   198
     the sending context and the inline/poly cache (instance of
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   199
     PolymorphicInlineCache). "
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   200
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   201
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   202
     "JV@2012-08-21: Following C code speeds up Java<->Smalltalk interop by
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   203
      order of 2 magnitudes. However, it breaks Java reflection. 
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   204
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   205
      This is because it does not handle package private methods correctly.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   206
      On the other hand, PP methods are not handled correctly when not using 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   207
      reflection anyway, so lets keep the optimization here.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   208
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   209
      Once we will have functinal JIT compiler, we can remove it and Java
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   210
      package-private method will be supported correctly in all cases.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   211
     "
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   212
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   213
     | sender |
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   214
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   215
%{
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   216
    OBJ method;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   217
    method = __lookup(initialSearchClass, selector);
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   218
    if ( method ) {
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   219
        if ( ilcCache ) {
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   220
            __ilcBind(ilcCache, initialSearchClass, method, selector);
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   221
        }
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   222
        RETURN (method);
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   223
    }
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   224
%}.
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   225
    "/ Sigh, here we have to care about different code paths. The new JIT compilation scheme
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   226
    "/ sends JavaVM>>_INVOKE*R:... for sends whose methodref is not yet resolved. Thus the stack
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   227
    "/ (starting with sendingContext) may look like:
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   228
    "/ 
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   229
    "/ (0) real sending context - whoever it is
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   230
    "/ 
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   231
    "/ for resolved/interpreted sends or:
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   232
    "/ 
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   233
    "/ (0) performWith:withArguments:
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   234
    "/ (1) _INVOKEVIRTUAL_R:* / _INVOKEINTERFACE_R:*
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   235
    "/ (2) real sending context - whoever it is
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   236
    "/ 
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   237
    "/ for unresolved sends from JIT-compiled code.
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   238
    "/ In tha latter case we have to skip those 2 'implementation' contexts:
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   239
    sender := sendingContext.
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   240
    sender selector == #perform:withArguments: ifTrue:[
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   241
        sender := sender sender.
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   242
        (sender receiver == JavaVM and: [ InvokeRSelectors includes: sender selector ]) ifTrue:[
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   243
            sender := sender sender.
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   244
        ] ifFalse:[
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   245
            sender := sendingContext.
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   246
        ].
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   247
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   248
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   249
    sender programmingLanguage isSmalltalk ifTrue:[
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   250
        aReceiver class theNonMetaclass programmingLanguage isJavaLike ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   251
            ^s2j lookupMethodForSelector:selector directedTo:initialSearchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext ilc: ilcCache.
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   252
        ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   253
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   254
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   255
    sender programmingLanguage isJavaLike ifTrue:[
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   256
        initialSearchClass programmingLanguage isSmalltalk ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   257
            "Java to Smalltalk send"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   258
            ^j2s lookupMethodForSelector:selector directedTo:initialSearchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext ilc: ilcCache.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   259
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   260
        initialSearchClass programmingLanguage isJavaLike ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   261
            "Java to Java send"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   262
            | m |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   263
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   264
            m := self lookupMethodForSelector: selector directedTo: initialSearchClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   265
            m notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   266
                ilcCache notNil ifTrue:[ ilcCache bindTo: m forClass: aReceiver class ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   267
                ^m.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   268
            ]
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   269
        ].
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   270
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   271
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   272
    ^super lookupMethodForSelector:selector directedTo:initialSearchClass for:aReceiver withArguments:argArrayOrNil from:sendingContext ilc: ilcCache.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   273
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   274
    "Created: / 01-10-2011 / 13:18:40 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   275
    "Created: / 15-12-2011 / 23:11:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   276
    "Modified: / 20-01-2014 / 13:27:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   277
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   278
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   279
!JavaLookup::Java2Smalltalk methodsFor:'lookup'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   280
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   281
lookupMethodForSelector:selector directedTo:initialSearchClass for:receiver withArguments:argArrayOrNil from:sendingContext ilc: ilc
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   282
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   283
    | d m |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   284
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   285
    d := JavaDescriptor readFrom: (selector readStream skipThrough: $(; backStep; yourself).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   286
    m := self lookupMethodForSelector: selector directedTo: initialSearchClass numArguments: d numArgs.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   287
    m notNil ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   288
        m := self compileProxyWithSelector: selector descriptor: d in: receiver class calling: m.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   289
        ilc notNil ifTrue:[ilc bindTo: m forClass: receiver class].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   290
        ^m.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   291
    ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   292
        ^ nil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   293
    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   294
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   295
    "Created: / 06-09-2011 / 22:04:04 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   296
    "Modified: / 09-10-2011 / 22:59:18 / kursjan <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   297
    "Created: / 19-11-2011 / 12:37:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   298
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   299
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   300
lookupMethodForSelector:jselector directedTo:initialSearchClass numArguments: nArgs
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   301
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   302
    | name cls |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   303
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   304
    name := jselector upTo: $(.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   305
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   306
    "Pass 1: Search for explicitly annotated method"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   307
    cls := initialSearchClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   308
    [ cls notNil ] whileTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   309
        cls methodDictionary keysAndValuesDo:[:sel :mthd|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   310
            | jdescriptor |
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   311
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   312
            mthd numArgs == nArgs ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   313
                (jdescriptor := mthd annotationAt: #javaselector:) notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   314
                    jdescriptor arguments first == jselector ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   315
                        ^mthd    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   316
                    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   317
                ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   318
            ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   319
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   320
        cls := cls superclass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   321
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   322
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   323
    "Pass 2: Search for method with matching name"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   324
    cls := initialSearchClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   325
    [ cls notNil ] whileTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   326
        cls methodDictionary keysAndValuesDo:[:sel :mthd|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   327
            mthd numArgs == nArgs ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   328
                (sel startsWith: name) ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   329
                    ^mthd
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   330
                ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   331
            ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   332
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   333
        cls := cls superclass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   334
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   335
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   336
    ^nil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   337
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   338
    "Created: / 16-12-2011 / 00:00:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   339
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   340
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   341
!JavaLookup::Java2Smalltalk methodsFor:'utilities'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   342
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   343
addSelector:selector withMethod:proxy toClass:class 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   344
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   345
    ProxyMethod installProxies ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   346
        Class withoutUpdatingChangesDo:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   347
            class addSelector:selector withMethod:proxy.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   348
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   349
    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   350
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   351
    "Modified: / 23-12-2011 / 13:09:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   352
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   353
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   354
compileProxyWithSelector:selector descriptor:descriptor in:class calling:callee 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   355
    |compiler proxy body|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   356
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   357
    compiler := ProxyMethodCompiler new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   358
    body := compiler newJavaMethodInvocation: callee.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   359
    body descriptor:descriptor.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   360
    proxy := compiler 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   361
                compile:body 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   362
                arguments:callee numArgs 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   363
                selector: selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   364
"/    JK: do nod add here
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   365
"/    JV: Why?
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   366
    self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   367
        addSelector:selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   368
        withMethod:proxy
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   369
        toClass:class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   370
    ^ proxy
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   371
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   372
    "Created: / 14-12-2011 / 20:48:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   373
    "Modified: / 01-01-2012 / 19:33:45 / kursjan <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   374
    "Modified: / 24-02-2012 / 20:36:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   375
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   376
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   377
!JavaLookup::Smalltalk2Java methodsFor:'lookup'!
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   378
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   379
lookupMethodForSelector: selector directedTo: initialSearchClass for: receiver withArguments: argArrayOrNil from: sendingContext ilc: ilc 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   380
    "
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   381
     As a courtesy to a Smalltalker, try to map smalltalk selectors to a java ones.
2791
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   382
     Returns a method or nil"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   383
    
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   384
    | name candidates m |
2791
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   385
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   386
    name := selector upTo: $:.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   387
    candidates := OrderedCollection new.
2792
662204c99509 Oops, fixed interop for extensions defined on interfaces.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2791
diff changeset
   388
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   389
    candidates := self lookupMethodsForSelector: selector in: initialSearchClass ? receiver class static: receiver isBehavior.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   390
    candidates notEmpty ifTrue: [
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   391
        "/ If candidates contains only one method that is not Java method,
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   392
        "/ then return this method. It's either a smalltalk extension or
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   393
        "/ ambiguous method trampoline...
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   394
        (candidates size == 1 and:[ (m := candidates anElement) isJavaMethod not]) ifTrue:[ 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   395
            ilc notNil ifTrue: [ ilc bindTo: m forClass: receiver class ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   396
            ^ m.
2792
662204c99509 Oops, fixed interop for extensions defined on interfaces.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2791
diff changeset
   397
        ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   398
        m := self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   399
                compileProxyWithSelector: selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   400
                in: receiver class
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   401
                candidates: candidates.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   402
        ilc notNil ifTrue: [ ilc bindTo: m forClass: receiver class ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   403
         "Install the proxy"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   404
        self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   405
            addSelector: selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   406
            withMethod: m
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   407
            toClass: receiver class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   408
        ^ m.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   409
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   410
     "Hmm, hmm, maybe a public field?"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   411
    (argArrayOrNil size < 2) ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   412
        | field |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   413
        field := initialSearchClass theNonMetaclass 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   414
                lookupFieldFor: name
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   415
                static: initialSearchClass isMetaclass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   416
                onlyPublic: true.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   417
        field notNil ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   418
            m := self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   419
                    compileProxyWithSelector: selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   420
                    in: receiver class
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   421
                    accessing: field.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   422
            ilc notNil ifTrue: [ ilc bindTo: m forClass: receiver class ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   423
             "Install the proxy"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   424
            self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   425
                addSelector: selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   426
                withMethod: m
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   427
                toClass: receiver class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   428
            ^ m.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   429
        ]
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   430
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   431
    ^ nil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   432
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   433
    "Created: / 21-02-2011 / 13:38:55 / kursjan <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   434
    "Modified: / 29-08-2011 / 20:38:21 / kursjan"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   435
    "Modified: / 20-09-2011 / 00:03:48 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   436
    "Modified (format): / 25-09-2011 / 21:08:45 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   437
    "Created: / 19-11-2011 / 13:03:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   438
    "Modified: / 01-01-2012 / 19:58:59 / kursjan <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   439
    "Modified (comment): / 02-01-2012 / 10:35:25 / kursjan <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   440
    "Modified: / 18-11-2012 / 18:17:28 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   441
    "Modified: / 16-12-2012 / 13:59:55 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   442
    "Modified: / 19-03-2014 / 17:27:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   443
!
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   444
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   445
lookupMethodsForSelector: selector in: initialSearchClass static: static
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   446
    "Lookup all matching methods for given (Smalltalk) selector starting with
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   447
     `initialSearchClass`. If `static` is true, then search for static methods,
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   448
     otherwise for search instance methods.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   449
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   450
     Returns a list of method candidates that match given selector.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   451
    "
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   452
    
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   453
    | name nameSizePlusOne numArgs candidates  finder1 finder2  cls ifacesQ ifacesSeen |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   454
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   455
    name := selector upTo: $:.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   456
    nameSizePlusOne := name size + 1.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   457
    numArgs := selector numArgs.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   458
    candidates := OrderedCollection new.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   459
    ifacesSeen := Set new.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   460
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   461
    "/ Method finder to lookup extension methods in interfaces...
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   462
    finder1 := [:cls |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   463
        cls interfaces notEmptyOrNil ifTrue:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   464
            ifacesQ := OrderedCollection with: (cls interfaces).
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   465
            [ ifacesQ notEmpty ] whileTrue:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   466
                | ifaces newIfaces extension |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   467
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   468
                ifaces := ifacesQ removeFirst.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   469
                extension := nil.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   470
                ifaces do:[:iface |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   471
                    (ifacesSeen includes: iface) ifFalse:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   472
                        | m |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   473
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   474
                        ifacesSeen add: iface.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   475
                        m := iface compiledMethodAt: selector.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   476
                        m notNil ifTrue:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   477
                            extension notNil ifTrue:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   478
                                "/ Ambiguous, return error trampoline
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   479
                                | sel |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   480
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   481
                                sel :=
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   482
                                    #(  ambiguousMessageSend
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   483
                                        ambiguousMessageSendWith:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   484
                                        ambiguousMessageSendWith:With:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   485
                                        ambiguousMessageSendWith:With:With:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   486
                                        ambiguousMessageSendWith:With:With:With:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   487
                                        ambiguousMessageSendWith:With:With:With:With:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   488
                                        ambiguousMessageSendWith:With:With:With:With:With:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   489
                                        ambiguousMessageSendWith:With:With:With:With:With:With:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   490
                                        ambiguousMessageSendWith:With:With:With:With:With:With:With:
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   491
                                    ) at: selector numArgs + 1.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   492
                                ^ Array with: (self class compiledMethodAt: sel).
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   493
                            ] ifFalse:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   494
                                extension := m.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   495
                            ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   496
                        ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   497
                    ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   498
                ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   499
                extension notNil ifTrue:[ ^ Array with: extension ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   500
                newIfaces := Set new.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   501
                ifaces do:[:iface| newIfaces addAll: iface interfaces ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   502
                newIfaces notEmpty ifTrue:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   503
                    ifacesQ add: newIfaces.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   504
                ].        
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   505
            ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   506
        ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   507
    ]. 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   508
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   509
    "/ Method finder to map Java methods to smalltalk selectors...
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   510
    finder2 := [:cls |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   511
        cls methodDictionary keysAndValuesDo: [:sel :mthd | 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   512
            "candidates may contain a method with same selector ->
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   513
             do not add super-class's method"
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   514
            (candidates contains: [:each | each selector == sel ]) ifFalse: [
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   515
                (mthd mclass ~~ ProxyMethod 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   516
                    and: [
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   517
                        ((sel size >= nameSizePlusOne) 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   518
                            and: [ (sel at: nameSizePlusOne) == $( and: [ (sel startsWith: name) ] ]) 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   519
                                and: [ mthd descriptor numArgs == numArgs ]
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   520
                    ]) 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   521
                        ifTrue: [ candidates add: mthd ]
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   522
            ]
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   523
        ]
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   524
    ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   525
    "Search class for method candidates"
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   526
    cls := initialSearchClass theNonMetaclass.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   527
    static ifTrue: [ 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   528
        finder2 value: cls 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   529
    ] ifFalse: [
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   530
        [ cls notNil and: [ cls ~~ JavaObject ] ] whileTrue: [
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   531
            finder1 value: cls.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   532
            finder2 value: cls.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   533
            cls := cls superclass.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   534
        ]
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   535
    ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   536
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   537
    candidates notEmpty ifTrue:[ 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   538
        "because java compiler generates synthetic method, when overriden
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   539
         method has narrows return type than method from superclass/interface,
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   540
         we don't take these particular synthetic methods as candidates, they just
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   541
         delegate to overridden methods."
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   542
        ((candidates size > 1) and:[candidates anySatisfy:[:each|each isSynthetic]]) ifTrue:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   543
            | candidatesPerNameAndArg |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   544
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   545
            candidatesPerNameAndArg := Dictionary new.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   546
            candidates do:[:each|
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   547
                | nameAndArgs |
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   548
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   549
                nameAndArgs := each selector upTo:$).
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   550
                candidatesPerNameAndArg at: nameAndArgs ifAbsentPut:[each]. 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   551
            ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   552
            candidates := candidatesPerNameAndArg values.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   553
        ].        
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   554
    ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   555
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   556
    ^ candidates.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   557
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   558
    "Created: / 19-03-2014 / 16:24:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   559
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   560
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   561
!JavaLookup::Smalltalk2Java methodsFor:'lookup (old)'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   562
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   563
old_lookupMethodForSelector:selector directedTo:initialSearchClass for:receiver withArguments:argArrayOrNil from:sendingContext ilc: ilc
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   564
    "
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   565
    As a courtesy to a Smalltalker, try to map smalltalk selectors to a java ones.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   566
    Returns JavaMethodDescriptor or nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   567
    "
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   568
    |descriptor candidate static cls m |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   569
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   570
    static := receiver isBehavior.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   571
    descriptor := JavaMethodDescriptor 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   572
            name: (selector upTo:$:) 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   573
            parameters: (argArrayOrNil ? #() collect:[:a|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   574
                (a class isString and: [JavaVM booted]) ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   575
                    JavaFieldDescriptorWithUnionType new
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   576
                        addDescriptor: (JavaFieldDescriptor javaClass: a class);
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   577
                        addDescriptor: (JavaFieldDescriptor javaClass: (JavaVM classForName: 'java.lang.String'));
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   578
                        yourself.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   579
                ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   580
                    JavaFieldDescriptor javaClass: a class
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   581
                ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   582
            ]).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   583
    cls := initialSearchClass theNonMetaclass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   584
    [ cls notNil and:[cls ~~ JavaObject] ] whileTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   585
        cls methodsDo:[:mthd|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   586
            "/(mthd selector startsWith: 'foo') ifTrue:[self breakPoint: #jv]. 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   587
            (mthd class ~~ ProxyMethod and:[mthd isStatic == static and:[descriptor match: mthd descriptor]]) ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   588
                candidate isNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   589
                    candidate := mthd
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   590
                ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   591
                    candidate descriptorSymbol ~~ mthd descriptorSymbol ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   592
                        "Hm, hm, two matching methods with different descriptors means
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   593
                         ambiguity...raise an error"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   594
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   595
                        "Bit hacky - NamespaceAwareLookup already has method to generate
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   596
                         ambigouous send trampouline..."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   597
                        ^NamespaceAwareLookup instance ambiguousMessageSend: selector withArgs: argArrayOrNil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   598
                    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   599
                ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   600
            ]                                                                 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   601
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   602
        cls := cls superclass.                
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   603
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   604
    candidate notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   605
        m := self compileProxyWithSelector: selector descriptor: descriptor in: receiver class calling: candidate.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   606
        ilc notNil ifTrue:[ilc bindTo: m forClass: receiver class].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   607
        ^m.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   608
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   609
    ^nil
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   610
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   611
    "Created: / 21-02-2011 / 13:38:55 / kursjan <kursjan@fit.cvut.cz>"
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   612
    "Modified: / 11-04-2011 / 20:19:50 / kursjan <kursjan@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   613
    "Modified: / 29-08-2011 / 20:38:21 / kursjan"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   614
    "Modified: / 20-09-2011 / 00:03:48 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   615
    "Modified (format): / 25-09-2011 / 21:08:45 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   616
    "Created: / 16-12-2011 / 23:05:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
   617
    "Modified: / 07-05-2013 / 11:19:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   618
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   619
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   620
!JavaLookup::Smalltalk2Java methodsFor:'matching'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   621
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   622
descriptorForJavaSelector:arg
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   623
    ^ MessageDescription new 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   624
        parserClass: JavaSelectorParser;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   625
        selector: arg;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   626
        yourself.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   627
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   628
    "Created: / 29-08-2011 / 20:41:48 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   629
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   630
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   631
descriptorForSmalltalkSelector:selector arguments: args
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   632
    ^ MessageDescription new 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   633
        parserClass: SmalltalkSelectorParser;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   634
        runtimeArguments: args;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   635
        selector: selector;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   636
        yourself.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   637
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   638
    "Created: / 29-08-2011 / 21:44:06 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   639
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   640
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   641
findBestMatchOf: smalltalkMethod in: javaMethods
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   642
    | methods |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   643
    javaMethods size = 1 ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   644
        ^ javaMethods first.    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   645
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   646
    javaMethods size = 0 ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   647
        ^ nil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   648
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   649
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   650
    methods := javaMethods select: [:m |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   651
        m argSize = smalltalkMethod argSize.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   652
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   653
    methods size = 1 ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   654
        ^ methods first.    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   655
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   656
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   657
    methods := methods select: [:m |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   658
        self javaMatches: m argTypes to: smalltalkMethod args.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   659
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   660
    methods size = 1 ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   661
        ^ methods first.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   662
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   663
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   664
    methods size = 0 ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   665
        ^ nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   666
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   667
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   668
    ^ Error raiseErrorString: 'Ambiguous selector: ', smalltalkMethod name.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   669
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   670
    "Created: / 29-08-2011 / 20:50:14 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   671
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   672
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   673
javaMatches: jArgs to: sArgs
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   674
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   675
    1 to: jArgs size do: [ :i |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   676
        ((JavaTypeBox typeBoxForJava: (jArgs at: i)) smalltalkType = ((sArgs at: i) className)) ifFalse: [ ^ false ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   677
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   678
    ^ true.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   679
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   680
    "Created: / 29-08-2011 / 21:21:37 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   681
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   682
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   683
javaSelectorsFor:class
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   684
    | selectors cls static |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   685
    cls := class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   686
    selectors := IdentitySet new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   687
    self breakPoint: #jk info: 'determine static based on class'.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   688
    static := false.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   689
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   690
    [cls = JavaObject] whileFalse: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   691
        cls methodDictionary keysAndValuesDo: [:k :v |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   692
            (v isJavaMethod and: [v isStatic = static]) ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   693
                selectors add: k.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   694
            ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   695
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   696
        cls := cls superclass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   697
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   698
    ^ selectors.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   699
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   700
    "Created: / 06-09-2011 / 22:20:34 / Jan Kurs <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   701
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   702
2791
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   703
!JavaLookup::Smalltalk2Java methodsFor:'trampolines'!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   704
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   705
ambiguousMessageSend
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   706
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   707
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   708
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   709
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   710
            arguments: #()
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   711
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   712
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   713
    "Created: / 19-08-2010 / 22:05:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   714
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   715
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   716
ambiguousMessageSendWith: a1
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   717
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   718
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   719
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   720
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   721
            arguments: (Array with: a1)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   722
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   723
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   724
    "Created: / 19-08-2010 / 22:06:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   725
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   726
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   727
ambiguousMessageSendWith: a1 with: a2
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   728
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   729
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   730
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   731
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   732
            arguments: (Array with: a1 with: a2)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   733
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   734
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   735
    "Created: / 19-08-2010 / 22:06:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   736
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   737
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   738
ambiguousMessageSendWith: a1 with: a2 with: a3
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   739
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   740
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   741
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   742
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   743
            arguments: (Array with: a1 with: a2 with: a3)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   744
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   745
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   746
    "Created: / 19-08-2010 / 22:06:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   747
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   748
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   749
ambiguousMessageSendWith: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   750
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   751
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   752
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   753
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   754
            arguments: (Array with: a1 with: a2 with: a3 with: a4)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   755
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   756
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   757
    "Created: / 19-08-2010 / 22:06:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   758
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   759
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   760
ambiguousMessageSendWith: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   761
                    with: a5
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   762
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   763
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   764
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   765
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   766
            arguments: (Array with: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   767
                              with: a5)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   768
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   769
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   770
    "Created: / 19-08-2010 / 22:07:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   771
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   772
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   773
ambiguousMessageSendWith: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   774
                    with: a5 with: a6
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   775
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   776
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   777
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   778
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   779
            arguments: (Array with: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   780
                              with: a5 with: a6)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   781
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   782
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   783
    "Created: / 19-08-2010 / 22:07:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   784
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   785
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   786
ambiguousMessageSendWith: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   787
                    with: a5 with: a6 with: a7
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   788
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   789
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   790
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   791
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   792
            arguments: (Array with: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   793
                              with: a5 with: a6 with: a7)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   794
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   795
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   796
    "Created: / 19-08-2010 / 22:07:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   797
!
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   798
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   799
ambiguousMessageSendWith: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   800
                    with: a5 with: a6 with: a7 with: a8
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   801
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   802
    ^self ambiguousMessage:
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   803
        (Message 
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   804
            selector: thisContext selector
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   805
            arguments: (Array with: a1 with: a2 with: a3 with: a4
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   806
                              with: a5 with: a6 with: a7 with: a8)
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   807
        )
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   808
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   809
    "Created: / 19-08-2010 / 22:08:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   810
! !
6a57107d168a Improvement in interop/java extensions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
   811
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   812
!JavaLookup::Smalltalk2Java methodsFor:'utilities'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   813
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   814
addSelector:selector withMethod:proxy toClass:class 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   815
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   816
    ProxyMethod installProxies ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   817
        Class withoutUpdatingChangesDo:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   818
            class addSelector:selector withMethod:proxy.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   819
            proxy mclass: class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   820
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   821
    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   822
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   823
    "Created: / 01-01-2012 / 17:41:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   824
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   825
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   826
compileProxyWithSelector:selector in:class accessing: field
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   827
    "For given field, create a proxy getter/setter"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   828
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   829
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   830
    |compiler proxy body isSetter |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   831
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   832
    class theNonMetaclass classInit.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   833
    isSetter := selector last == $:.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   834
    compiler := ProxyMethodCompiler new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   835
    isSetter ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   836
        body := compiler newJavaFieldSetter: field.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   837
        proxy := compiler 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   838
                compile:body
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   839
                arguments: 1
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   840
                selector:selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   841
    ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   842
        body := compiler newJavaFieldGetter: field.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   843
        proxy := compiler 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   844
                compile:body
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   845
                arguments: 0
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   846
                selector:selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   847
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   848
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   849
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   850
    ^ proxy
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   851
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   852
    "Modified: / 30-12-2011 / 14:44:11 / kursjan <kursjan@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   853
    "Created: / 17-03-2012 / 16:54:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   854
!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   855
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   856
compileProxyWithSelector:selector in:class candidates:candidates 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   857
    "For given set of methods, create a dispatching proxy with given selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   858
     This method performs typechecks on arguments and dispatch to proper method"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   859
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   860
    |compiler proxy body fallback|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   861
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   862
    compiler := ProxyMethodCompiler new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   863
    fallback := self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   864
                fallbackWithSelector:selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   865
                in:class
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   866
                compiler:compiler.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   867
     "Generate and install dispatching tree..."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   868
    selector numArgs == 0 ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   869
        "If method has no arguments, no dynamic method dispatch is
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   870
         required (method cannot be overloaded)  Therefore, no fallback is 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   871
         needed. In theory, there is no need for proxy method at all..."
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   872
        self assert:candidates size == 1.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   873
        body := compiler newJavaMethodInvocation:candidates anyOne.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   874
    ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   875
        "JV@2012-01-01: Based on discussion with JK, if there is no overloaded method
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   876
         DO NOT compile guard, call the method directly. We'll see..."
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   877
        "JV@2014-03-19: NO, DON'T DO THAT, that's fundamentally wrong.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   878
         A new overloaded method may come in future, for example
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   879
         a new subclass may get loaded or a new method is added to
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   880
         some class along the chain..."
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   881
"/        methods size == 1 ifTrue:[
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   882
"/            body := (compiler newJavaMethodInvocation:methods anElement).
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   883
"/        ] ifFalse:[
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   884
            "For every method, create a guard and add it"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   885
            body := fallback.
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   886
"/        ]
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   887
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   888
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   889
    "/Create and install proxy
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   890
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   891
    proxy := compiler 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   892
                compile:body
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   893
                arguments:selector numArgs
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   894
                selector:selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   895
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   896
"/    self halt.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   897
"/    JK: do NOT install here, just compile and return the proxy. Let someone else to install
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   898
"/    self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   899
"/        addSelector:selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   900
"/        withMethod:proxy
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   901
"/        toClasS:class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   902
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   903
    ^ proxy
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   904
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   905
    "Created: / 19-03-2014 / 17:28:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   906
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   907
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   908
compileProxyWithSelector: selector in: class receiver: receiver arguments: arguments
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   909
    "For given receiver and arguments, selects apropriate method from methods
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   910
     and compile guard"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   911
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   912
    | compiler candidates method proxy condition invocation fallback guard |
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   913
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   914
    compiler := ProxyMethodCompiler new.    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   915
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   916
    proxy := class compiledMethodAt: selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   917
    proxy notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   918
        fallback := proxy body    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   919
    ] ifFalse:[
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   920
        fallback := self fallbackWithSelector: selector in: class compiler: compiler.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   921
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   922
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   923
    candidates := self lookupMethodsForSelector: selector in: receiver class static: receiver isBehavior.    
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   924
    method := self selectMethodFrom: candidates arguments: arguments.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   925
    invocation := compiler newJavaMethodInvocation:method.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   926
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   927
    condition := nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   928
    arguments withIndexDo:[:arg :index|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   929
        condition isNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   930
            condition := compiler newTypeCheck: arg class argument: index.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   931
        ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   932
            condition := condition and: (compiler newTypeCheck: arg class argument: index).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   933
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   934
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   935
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   936
    guard := compiler newGuard
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   937
                condition: condition;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   938
                action: invocation; 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   939
                fallback: fallback;
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   940
                yourself.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   941
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   942
    proxy := compiler 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   943
                compile:guard
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   944
                arguments:selector numArgs
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   945
                selector:selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   946
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   947
    self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   948
        addSelector:selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   949
        withMethod:proxy
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   950
        toClass:receiver class.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   951
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   952
    "Created: / 19-03-2014 / 17:27:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   953
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   954
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   955
fallbackWithSelector:selector in:class compiler:compiler 
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   956
    ^ compiler 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   957
        newJavaBlockInvocation:[:receiver :arguments | 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   958
            self 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   959
                compileProxyWithSelector:selector
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   960
                in:class
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   961
                receiver:receiver
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   962
                arguments:arguments.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   963
            "/self breakPoint:#jv.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   964
            receiver perform:selector withArguments:arguments.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   965
        ]
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
   966
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   967
    "Created: / 19-03-2014 / 17:25:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   968
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   969
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   970
selectMethodFrom: methods arguments: arguments
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   971
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   972
    | candidates |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   973
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   974
    methods size == 1 ifTrue:[ 
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   975
        ^ methods anElement.
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   976
    ].
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   977
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   978
    candidates := methods.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   979
    arguments withIndexDo:[:arg :index|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   980
        | cls |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   981
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   982
        cls := arg class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   983
        candidates := candidates select:[:m|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   984
            self breakPoint:#mh.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   985
            self type: cls matches: (m descriptor parameters at: index) javaClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   986
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   987
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   988
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   989
    candidates size == 0 ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   990
        self halt: 'Unfinished - no matching method'        
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   991
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   992
    candidates size == 1 ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   993
        ^candidates anElement
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   994
    ].
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
   995
    self breakPoint: #jv."/ This is a timed bomb...
2729
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
   996
    ^ candidates first
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   997
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   998
    "Created: / 03-01-2012 / 21:40:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
   999
    "Modified: / 03-04-2012 / 13:59:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3041
7a326f9f8aad Bug fix in interop with respect to overloaded methods in subclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2981
diff changeset
  1000
    "Modified: / 19-03-2014 / 16:41:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1001
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1002
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1003
type: actual matches: formal 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1004
    "Return true, if actual (parameter) type matches given formal (parameter) type"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1005
    
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1006
    formal isJavaPrimitiveType ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1007
        actual == SmallInteger ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1008
            ^ formal == Integer or: [ actual == formal ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1009
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1010
        formal == Boolean ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1011
            ^ actual == True or: [ actual == False or: [ actual == Boolean ] ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1012
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1013
        ^ actual == formal.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1014
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1015
     "nil matches any formal type (to follow undocumented
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1016
     feature of JVM (also seen in CHECKCAST instruction :))" 
2729
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
  1017
    actual == UndefinedObject ifTrue: [ ^ true ].
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
  1018
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
  1019
    "char[] matches smalltal string..."
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
  1020
    formal == Unicode16String ifTrue:[
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
  1021
        ^ actual inheritsFrom: CharacterArray
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
  1022
    ].
ac412f6ea6d4 More support for method's source display. Not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2588
diff changeset
  1023
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1024
    actual isJavaPrimitiveType ifTrue: [
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1025
        ^ formal isJavaWrapperClass and: [ formal == actual javaWrapperClass ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1026
    ].
2981
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1027
    (actual includesBehavior: String) ifTrue: [
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2792
diff changeset
  1028
        ^ formal binaryName == #'java/lang/String'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1029
    ].
2981
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1030
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1031
    (actual includesBehavior: Unicode16String) ifTrue: [
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1032
        ^ formal binaryName == #'java/lang/String'
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1033
    ].
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1034
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1035
    (actual includesBehavior: Unicode32String) ifTrue: [
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1036
        ^ formal binaryName == #'java/lang/String'
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1037
    ].
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1038
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1039
    ^ JavaVM canCast: actual to: formal
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1040
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1041
    "Created: / 03-01-2012 / 22:36:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1042
    "Modified: / 03-04-2012 / 13:59:28 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1043
    "Modified: / 16-12-2012 / 11:44:17 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
2981
5c86c719a79b Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2976
diff changeset
  1044
    "Modified: / 21-01-2014 / 14:42:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1045
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1046
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1047
!JavaLookup::Smalltalk2Java methodsFor:'utilities (old)'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1048
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1049
old_compileProxyWithSelector: selector descriptor: descriptor in: class calling: callee
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1050
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1051
    | proxy invocation fallback |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1052
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1053
    "This method might (indirectly) be invoked by guarded method itself,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1054
     when all guards fails and method gets recompiled during fallback action.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1055
     In that case, we should not throw away existing proxy, but just extend it."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1056
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1057
    proxy := class compiledMethodAt: selector.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1058
    proxy isNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1059
        "No method exists, create one..."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1060
        proxy := ProxyMethod new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1061
        proxy numberOfArgs: callee descriptor numPhysicalArgs.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1062
        proxy source:'I''m a proxy method, please inspect my body'.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1063
        "Create default fallback"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1064
        fallback := ProxyMethod newJavaBlockInvocation: [ self halt: 'Launch recompile, not yet implemented'].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1065
        "Install it..."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1066
        Class withoutUpdatingChangesDo:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1067
            class addSelector: selector withMethod: proxy.        
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1068
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1069
    ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1070
        "Method already exists, then the fallback is currently 
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1071
         installed body"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1072
        fallback := proxy body.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1073
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1074
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1075
    "Now, create and install a node that invokes given method"   
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1076
    callee numArgs == 0 ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1077
        "If method has no arguments, no dynamic method dispatch is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1078
        required. Therefore, no fallback is needed. In theory, there is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1079
        no need for proxy method at all..."
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1080
        self assert: descriptor numArgs size == 0.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1081
        invocation := ProxyMethod newJavaMethodInvocation: callee.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1082
        "Install it"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1083
        proxy body: invocation
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1084
    ] ifFalse:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1085
        "Create a guard"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1086
        invocation := ProxyMethod newGuard.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1087
        invocation condition: callee descriptor guardCondition.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1088
        invocation action: (ProxyMethod newJavaMethodInvocation: callee).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1089
        invocation fallback: fallback.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1090
        "Install it"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1091
        proxy addGuard: invocation.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1092
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1093
    "/Finally, return the method                                
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1094
    ^ proxy
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1095
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1096
    "Created: / 16-12-2011 / 23:06:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
  1097
! !
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
  1098
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
  1099
!JavaLookup class methodsFor:'documentation'!
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
  1100
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1101
version_CVS
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2396
diff changeset
  1102
    ^ '$Header: /cvs/stx/stx/libjava/JavaLookup.st,v 1.6 2013-09-06 00:41:24 vrany Exp $'
2293
d272dc6897a6 fixed: #version_SVN ($ to §)
Claus Gittinger <cg@exept.de>
parents: 2224
diff changeset
  1103
!
d272dc6897a6 fixed: #version_SVN ($ to §)
Claus Gittinger <cg@exept.de>
parents: 2224
diff changeset
  1104
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1105
version_HG
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1106
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1107
    ^ '$Changeset: <not expanded> $'
2224
03ad71af7cf0 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
  1108
!
03ad71af7cf0 added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 2152
diff changeset
  1109
749
e898eaeff091 Synchronized with CVS repository at:
vranyj1
parents:
diff changeset
  1110
version_SVN
2731
13f5be2bf83b Merged d87e89dd5276 and fe83a843a7bf (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2711 2678
diff changeset
  1111
    ^ 'Id'
2152
1cbdfbcc685c Jan's version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 749
diff changeset
  1112
! !
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2293
diff changeset
  1113
2976
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
  1114
a384a02381c0 Update JavaLookup to work with new JIT-compilation scheme...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
  1115
JavaLookup initialize!