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." |