[Tcl Java] RE: [Tcl Java] Converting Interp.getResult TclObject to Java

2000-04-19 Thread Paul Eng

Mo,

Thanks for the reply.

Suppose I want to use Jacl to process users' scripts so that I have no idea
what the return type is going to be.  I understand how I could check to see
if the return object is a ReflectObject and how I could unwrap it to get the
Java object if it was.  But, let's say a proc simply has "return 1".  This
comes back from interp.getResult() as a TclObject, but what I really want is
a java.lang.Integer.  Can I somehow convert it or is my only choice to get
it as a java.lang.String?

I'm new to Tcl/Jacl, so forgive me if this doesn't make sense.

Thanks,
Paul Eng


-Original Message-
From: Mo DeJong [mailto:[EMAIL PROTECTED]]
Sent: Friday, April 14, 2000 3:29 PM
To: Paul Eng
Cc: [EMAIL PROTECTED]
Subject: Re: [Tcl Java] Converting Interp.getResult TclObject to Java


On Fri, 14 Apr 2000, Paul Eng wrote:

> I am looking into using Jacl to call Tcl scripts.  I can call
interp.eval()
> and then interp.getResult() to get the return value, but the return value
is
> a TclObject.  What I would like to do is convert this TclObject result
into
> it's appropriate java object, so that if it's a reflected object, I would
> get the java object, if it's a TclString, I would get java.lang.String,
etc.
>
> I found the convertTclObject() method in JavaInvoke which looks like what
I
> want, but the method is not public.  Is there a way I can do this or am I
> missing something?
>
> Thanks,
> Paul Eng

The "trick" here is that Tcl objects have "internal representations",
that could be a float, a Java object, or whatever. Because a Tcl
object is a "wrapper" around an InternalRep, you need to "unwrap"
the TclObject in you Java code if you want to do something with it.
Lets say you invoke a Tcl proc that does some Java related stuff,
it sets the interp result to a ReflectObject, a Tcl "wrapper" for
a Java object.

interp.eval("some_java_func");

Now you can "unwrap" the Java object like so.

TclObject result = interp.getResult();

Object jobj = ReflectObject.get(interp, result);

If you want to know what the Java Class of the reflected
Java object is, you can find that out like this.

Class jcl = ReflectObject.getClass(interp, result);

(WARNING: YOU MUST GET THE REFLECTED CLASS TYPE LIKE THIS,
DO NOT CALL THE jobj.getClass() METHOD TO GET THE
REFLECTED CLASS TYPE, THEY ARE NOT THE SAME THINGS).

To get the "string rep" of a TclObject just call the
toString() method on the TclObject.

I hope that helps.
Mo Dejong
Red Hat Inc.


The TclJava mailing list is sponsored by Scriptics Corporation.
To subscribe:send mail to [EMAIL PROTECTED]  
 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
An archive is available at http://www.mail-archive.com/tcljava@scriptics.com




[Tcl Java] Re: [Tcl Java] Converting Interp.getResult TclObject to Java

2000-04-14 Thread Mo DeJong

On Fri, 14 Apr 2000, Paul Eng wrote:

> I am looking into using Jacl to call Tcl scripts.  I can call interp.eval()
> and then interp.getResult() to get the return value, but the return value is
> a TclObject.  What I would like to do is convert this TclObject result into
> it's appropriate java object, so that if it's a reflected object, I would
> get the java object, if it's a TclString, I would get java.lang.String, etc.
> 
> I found the convertTclObject() method in JavaInvoke which looks like what I
> want, but the method is not public.  Is there a way I can do this or am I
> missing something?
> 
> Thanks,
> Paul Eng

The "trick" here is that Tcl objects have "internal representations",
that could be a float, a Java object, or whatever. Because a Tcl
object is a "wrapper" around an InternalRep, you need to "unwrap"
the TclObject in you Java code if you want to do something with it.
Lets say you invoke a Tcl proc that does some Java related stuff,
it sets the interp result to a ReflectObject, a Tcl "wrapper" for
a Java object.

interp.eval("some_java_func");

Now you can "unwrap" the Java object like so.

TclObject result = interp.getResult();

Object jobj = ReflectObject.get(interp, result);

If you want to know what the Java Class of the reflected
Java object is, you can find that out like this.

Class jcl = ReflectObject.getClass(interp, result);

(WARNING: YOU MUST GET THE REFLECTED CLASS TYPE LIKE THIS,
DO NOT CALL THE jobj.getClass() METHOD TO GET THE
REFLECTED CLASS TYPE, THEY ARE NOT THE SAME THINGS).

To get the "string rep" of a TclObject just call the
toString() method on the TclObject.

I hope that helps.
Mo Dejong
Red Hat Inc.


The TclJava mailing list is sponsored by Scriptics Corporation.
To subscribe:send mail to [EMAIL PROTECTED]  
 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
An archive is available at http://www.mail-archive.com/tcljava@scriptics.com




[Tcl Java] Converting Interp.getResult TclObject to Java

2000-04-14 Thread Paul Eng

I am looking into using Jacl to call Tcl scripts.  I can call interp.eval()
and then interp.getResult() to get the return value, but the return value is
a TclObject.  What I would like to do is convert this TclObject result into
it's appropriate java object, so that if it's a reflected object, I would
get the java object, if it's a TclString, I would get java.lang.String, etc.

I found the convertTclObject() method in JavaInvoke which looks like what I
want, but the method is not public.  Is there a way I can do this or am I
missing something?

Thanks,
Paul Eng


The TclJava mailing list is sponsored by Scriptics Corporation.
To subscribe:send mail to [EMAIL PROTECTED]  
 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
An archive is available at http://www.mail-archive.com/tcljava@scriptics.com




[Tcl Java] Converting Interp.getResult TclObject to Java (fwd)

2000-04-14 Thread Brent Welch


I am looking into using Jacl to call Tcl scripts.  I can call interp.eval()
and then interp.getResult() to get the return value, but the return value is
a TclObject.  What I would like to do is convert this TclObject result into
it's appropriate java object, so that if it's a reflected object, I would
get the java object, if it's a TclString, I would get java.lang.String, etc.

I found the convertTclObject() method in JavaInvoke which looks like what I
want, but the method is not public.  Is there a way I can do this or am I
missing something?

Thanks,
Paul Eng


The TclJava mailing list is sponsored by Scriptics Corporation.
To subscribe:send mail to [EMAIL PROTECTED]  
 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
An archive is available at http://www.mail-archive.com/tcljava@scriptics.com