JavaObject.st
changeset 206 2200b9091b9e
parent 202 59b27ac31896
child 229 b91c9462ac83
equal deleted inserted replaced
205:11cd2ad78854 206:2200b9091b9e
    16 
    16 
    17 !JavaObject class methodsFor:'smalltalk interface'!
    17 !JavaObject class methodsFor:'smalltalk interface'!
    18 
    18 
    19 convertJavaObject:val signature:retValSignature
    19 convertJavaObject:val signature:retValSignature
    20 ^ val.
    20 ^ val.
       
    21 
    21     retValSignature = 'void' ifTrue:[
    22     retValSignature = 'void' ifTrue:[
    22         ^ #void
    23         ^ #void
    23     ].
    24     ].
    24     retValSignature = 'boolean' ifTrue:[
    25     retValSignature = 'boolean' ifTrue:[
    25         val == 0 ifTrue:[^ false].
    26         val == 0 ifTrue:[^ false].
    48     retValSignature = 'Object' ifTrue:[
    49     retValSignature = 'Object' ifTrue:[
    49         ^ val
    50         ^ val
    50     ].
    51     ].
    51 
    52 
    52     retValSignature = 'String' ifTrue:[
    53     retValSignature = 'String' ifTrue:[
    53         ^ self stringFromJavaString:val
    54         ^ Java as_ST_String:val
    54     ].
    55     ].
    55 
    56 
    56     'no conversion for: ' print. val class name print. ' to: ' print. retValSignature printNL.
    57     'no conversion for: ' print. val class name print. ' to: ' print. retValSignature printNL.
    57     ^ val.
    58     ^ val.
    58 
    59 
    59 
    60     "Modified: 8.8.1997 / 12:07:23 / cg"
    60 !
    61 !
    61 
    62 
    62 javaStringFrom:aString
    63 javaStringFrom:aString
    63     "hard-coding internas of java.lang.String here is bad ..."
    64     "hard-coding internas of java.lang.String here is bad ..."
    64 
    65 
    65     |s|
    66     self halt.
    66 
    67     ^ Java as_String:aString
    67     s := Java java_lang_String basicNew.
    68 
    68     s instVarNamed:'value'  put: aString.
    69     "Modified: 7.8.1997 / 21:17:32 / cg"
    69     s instVarNamed:'offset' put: 0.
       
    70     s instVarNamed:'count'  put: aString size.
       
    71     ^ s
       
    72 
       
    73     "Modified: 26.3.1997 / 13:43:54 / cg"
       
    74 !
    70 !
    75 
    71 
    76 stringFromJavaString:aJavaString
    72 stringFromJavaString:aJavaString
    77     "hard-coding internas of java.lang.String here is bad ..."
    73     "hard-coding internas of java.lang.String here is bad ..."
    78 
    74 
    79     |start stop|
    75     self halt.
    80 
    76     ^ Java as_ST_String:aJavaString
    81     "/ start := (aJavaString instVarNamed:'offset') + 1.
    77 
    82     start := (aJavaString instVarAt:(JavaSlotIndexCache string_slot_offset)) + 1.
    78     "Modified: 8.8.1997 / 12:07:29 / cg"
    83 
       
    84     "/ stop := start + (aJavaString instVarNamed:'count') - 1.
       
    85     stop := start + (aJavaString instVarAt:(JavaSlotIndexCache string_slot_count)) - 1.
       
    86 
       
    87     "/ ^ ((aJavaString instVarNamed:'value') copyFrom:start to:stop) asString
       
    88     ^ ((aJavaString instVarAt:(JavaSlotIndexCache string_slot_value)) 
       
    89                 copyFrom:start to:stop) asString
       
    90 
       
    91     "Modified: 8.2.1997 / 13:46:22 / cg"
       
    92 ! !
    79 ! !
    93 
    80 
    94 !JavaObject methodsFor:'initialization'!
    81 !JavaObject methodsFor:'initialization'!
    95 
    82 
    96 initializeFields:initialValues
    83 initializeFields:initialValues
   327     ^ super doesNotUnderstand:(Message selector:selector)
   314     ^ super doesNotUnderstand:(Message selector:selector)
   328 
   315 
   329     "Modified: 3.8.1997 / 20:31:03 / cg"
   316     "Modified: 3.8.1997 / 20:31:03 / cg"
   330 !
   317 !
   331 
   318 
       
   319 invoke:selector interpreter:i sender:aContext with:arg1 with:arg2 with:arg3 with:arg4 with:arg5 with:arg6
       
   320     "send a message, with 6 arguments. 
       
   321      TEMPORARY: This method needs more work."
       
   322 
       
   323     |sel method cls argClass jSel|
       
   324 
       
   325     sel := selector asSymbolIfInterned.
       
   326     sel notNil ifTrue:[
       
   327         method := self lookupMethod:sel numArgs:6.
       
   328         method notNil ifTrue:[
       
   329             ^ self 
       
   330                 invokeJavaMethod:method 
       
   331                 interpreter:i 
       
   332                 sender:aContext 
       
   333                 selector:selector
       
   334                 with:arg1 with:arg2 with:arg3 with:arg4 with:arg5 with:arg6
       
   335         ].
       
   336     ].
       
   337 
       
   338     ^ super doesNotUnderstand:(Message selector:selector)
       
   339 
       
   340     "Modified: 3.8.1997 / 20:31:03 / cg"
       
   341     "Created: 7.8.1997 / 20:57:12 / cg"
       
   342 !
       
   343 
   332 invoke:selector interpreter:i sender:aContext withAll:arguments
   344 invoke:selector interpreter:i sender:aContext withAll:arguments
   333     "send a message, with arguments. 
   345     "send a message, with arguments. 
   334      TEMPORARY: This method needs more work."
   346      TEMPORARY: This method needs more work."
   335 
   347 
   336     |sel method cls argClass jSel|
   348     |sel method cls argClass jSel|
   517 
   529 
   518     "Modified: 30.7.1997 / 13:20:35 / cg"
   530     "Modified: 30.7.1997 / 13:20:35 / cg"
   519     "Created: 3.8.1997 / 20:32:03 / cg"
   531     "Created: 3.8.1997 / 20:32:03 / cg"
   520 !
   532 !
   521 
   533 
       
   534 invokeJavaMethod:aJavaMethod interpreter:i sender:s selector:sel with:arg1 with:arg2 with:arg3 with:arg4 with:arg5 with:arg6
       
   535     "invoke a java method, with 6 arguments.
       
   536      CAVEAT: these cannot be long or doubles currently."
       
   537 
       
   538     |val|
       
   539 
       
   540     aJavaMethod numArgs ~~ 6 ifTrue:[
       
   541         self halt:'argument count'
       
   542     ].
       
   543     aJavaMethod isStatic ifTrue:[
       
   544         self halt:'static function'
       
   545     ].
       
   546 
       
   547     val := aJavaMethod valueWithReceiver:self arguments:(Array with:arg1 with:arg2 with:arg3 with:arg4 with:arg5 with:arg6) selector:sel.
       
   548     val notNil ifTrue:[^ val].
       
   549 
       
   550     i push:self.
       
   551     i push:arg1.
       
   552     i push:arg2.
       
   553     i push:arg3.
       
   554     i push:arg4.
       
   555     i push:arg5.
       
   556     i push:arg6.
       
   557 
       
   558     val := i interpret:aJavaMethod sender:s.
       
   559 
       
   560     ^ JavaObject convertJavaObject:val signature:(aJavaMethod retValSignature)
       
   561 
       
   562     "Modified: 30.7.1997 / 13:20:35 / cg"
       
   563     "Created: 7.8.1997 / 20:57:55 / cg"
       
   564 !
       
   565 
   522 invokeJavaMethod:aJavaMethod interpreter:i sender:s with:arg1 with:arg2
   566 invokeJavaMethod:aJavaMethod interpreter:i sender:s with:arg1 with:arg2
   523     "invoke a java method, with two arguments.
   567     "invoke a java method, with two arguments.
   524      CAVEAT: these cannot be long or doubles currently."
   568      CAVEAT: these cannot be long or doubles currently."
   525 
   569 
   526     |val|
   570     |val|
   647 
   691 
   648 !JavaObject methodsFor:'printing & storing'!
   692 !JavaObject methodsFor:'printing & storing'!
   649 
   693 
   650 displayString
   694 displayString
   651     self class == Java java_lang_String ifTrue:[
   695     self class == Java java_lang_String ifTrue:[
   652         ^ '''' , (JavaObject stringFromJavaString:self) , ''''
   696         ^ '''' , (Java as_ST_String:self) , ''''
   653     ].
   697     ].
   654 
   698 
   655     ^ super displayString.
   699     ^ super displayString.
   656 
   700 
   657     Object errorSignal handle:[:ex |
   701     Object errorSignal handle:[:ex |
   658         ^ super displayString.
   702         ^ super displayString.
   659     ] do:[
   703     ] do:[
   660         ^ JavaObject stringFromJavaString:(self invoke:#toString).
   704         ^ Java as_ST_String:(self invoke:#toString).
   661     ].
   705     ].
   662 
   706 
   663     ^ super displayString. "/ ^ 'a JavaObject(' , self class name , ')'
   707     ^ super displayString. "/ ^ 'a JavaObject(' , self class name , ')'
   664 
   708 
   665     "Modified: 26.3.1997 / 13:44:04 / cg"
   709     "Modified: 8.8.1997 / 12:07:36 / cg"
   666 !
   710 !
   667 
   711 
   668 javaDisplayString
   712 javaDisplayString
   669     Object errorSignal handle:[:ex |
   713     Object errorSignal handle:[:ex |
   670         ex return.
   714         ex return.
   671     ] do:[
   715     ] do:[
   672         ^ JavaObject stringFromJavaString:(self invoke:#toString).
   716         ^ Java as_ST_String:(self invoke:#toString).
   673     ].
   717     ].
   674 
   718 
   675     ^ super displayString.
   719     ^ super displayString.
   676 
   720 
   677     "Created: 7.4.1997 / 17:38:13 / cg"
   721     "Created: 7.4.1997 / 17:38:13 / cg"
       
   722     "Modified: 8.8.1997 / 12:07:39 / cg"
   678 ! !
   723 ! !
   679 
   724 
   680 !JavaObject methodsFor:'queries'!
   725 !JavaObject methodsFor:'queries'!
   681 
   726 
   682 isJavaObject
   727 isJavaObject
   819         with:arg4
   864         with:arg4
   820         with:arg5
   865         with:arg5
   821 
   866 
   822     "Modified: 30.7.1997 / 13:44:58 / cg"
   867     "Modified: 30.7.1997 / 13:44:58 / cg"
   823     "Created: 3.8.1997 / 20:30:22 / cg"
   868     "Created: 3.8.1997 / 20:30:22 / cg"
       
   869 !
       
   870 
       
   871 invoke:selector with:arg1 with:arg2 with:arg3 with:arg4 with:arg5 with:arg6
       
   872     "send a message, with 6 argument. 
       
   873      TEMPORARY: This method needs more work."
       
   874 
       
   875     ^ self 
       
   876         invoke:selector 
       
   877         interpreter:JavaInterpreter new 
       
   878         sender:thisContext sender 
       
   879         with:arg1
       
   880         with:arg2
       
   881         with:arg3
       
   882         with:arg4
       
   883         with:arg5
       
   884         with:arg6
       
   885 
       
   886     "Modified: 30.7.1997 / 13:44:58 / cg"
       
   887     "Created: 7.8.1997 / 20:56:49 / cg"
   824 !
   888 !
   825 
   889 
   826 invoke:selector withAll:args
   890 invoke:selector withAll:args
   827     "send a message, with anumber of arguments. 
   891     "send a message, with anumber of arguments. 
   828      TEMPORARY: This method needs more work."
   892      TEMPORARY: This method needs more work."
   893 ! !
   957 ! !
   894 
   958 
   895 !JavaObject class methodsFor:'documentation'!
   959 !JavaObject class methodsFor:'documentation'!
   896 
   960 
   897 version
   961 version
   898     ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaObject.st,v 1.31 1997/08/06 00:52:47 cg Exp $'
   962     ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaObject.st,v 1.32 1997/08/08 11:34:22 cg Exp $'
   899 ! !
   963 ! !