ProxyMethodJavaFieldSetter.st
changeset 3602 e35b48285df7
parent 3412 df11bb428463
equal deleted inserted replaced
3601:4f1b473722cb 3602:e35b48285df7
    17      of one of the above copright owners. For exact set of such code,
    17      of one of the above copright owners. For exact set of such code,
    18      see the differences between this version and version stx:libjava
    18      see the differences between this version and version stx:libjava
    19      as of 1.9.2010
    19      as of 1.9.2010
    20 "
    20 "
    21 "{ Package: 'stx:libjava' }"
    21 "{ Package: 'stx:libjava' }"
       
    22 
       
    23 "{ NameSpace: Smalltalk }"
    22 
    24 
    23 ProxyMethodJavaFieldAccessor subclass:#ProxyMethodJavaFieldSetter
    25 ProxyMethodJavaFieldAccessor subclass:#ProxyMethodJavaFieldSetter
    24 	instanceVariableNames:''
    26 	instanceVariableNames:''
    25 	classVariableNames:''
    27 	classVariableNames:''
    26 	poolDictionaries:''
    28 	poolDictionaries:''
    54 ! !
    56 ! !
    55 
    57 
    56 !ProxyMethodJavaFieldSetter methodsFor:'evaluating'!
    58 !ProxyMethodJavaFieldSetter methodsFor:'evaluating'!
    57 
    59 
    58 evaluateWithReceiver:receiver arguments:arguments
    60 evaluateWithReceiver:receiver arguments:arguments
    59 
    61     field isFinal ifTrue:[ 
       
    62         NoModificationError raiseErrorString:'Field ', field name , ' is final'.
       
    63     ].
    60     self assert: arguments size == 1.
    64     self assert: arguments size == 1.
    61     ^receiver instVarAt: field index put: arguments first.
    65     ^receiver instVarAt: field index put: arguments first.
    62 
    66 
    63     "Modified: / 17-03-2012 / 16:57:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    67     "Modified: / 26-07-2016 / 20:50:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    64 ! !
    68 ! !
    65 
    69 
    66 !ProxyMethodJavaFieldSetter methodsFor:'generating'!
    70 !ProxyMethodJavaFieldSetter methodsFor:'generating'!
    67 
    71 
    68 generate:compiler
    72 generate:compiler
    69     "Generate a ParseNode that evaluate myself. Used for
    73     "Generate a ParseNode that evaluate myself. Used for
    70      byte-compiling the proxies"
    74      byte-compiling the proxies"
    71 
    75 
    72     ^ self shouldImplement
    76     | valueNode |
       
    77 
       
    78     field isFinal ifTrue:[ 
       
    79         ^ MessageNode receiver: (VariableNode globalNamed: NoModificationError name)
       
    80                       selector: #raiseErrorString:
       
    81                            arg: (ConstantNode value: 'Field ', field name , ' is final')          
       
    82     ].
       
    83     valueNode := MessageNode receiver: (VariableNode globalNamed: self fieldType name)
       
    84                   selector: #javaWrap:
       
    85                        arg: (compiler args at: 1).
       
    86     ^ AssignmentNode 
       
    87         variable: ((VariableNode type: #InstanceVariable name: field name)
       
    88                     index: field index)
       
    89       expression:  valueNode
       
    90 
       
    91     "Modified: / 26-07-2016 / 20:51:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    73 ! !
    92 ! !
    74 
    93 
    75 !ProxyMethodJavaFieldSetter class methodsFor:'documentation'!
    94 !ProxyMethodJavaFieldSetter class methodsFor:'documentation'!
    76 
    95 
    77 version_CVS
    96 version_CVS