Re: [tcljava-dev] Re: [tcljava-user] Tcl/Java 1.3.0 release is online.
Brought to you by:
mdejong
|
From: Mo D. <md...@un...> - 2003-03-18 23:21:27
|
On Tue, 18 Mar 2003 14:25:07 -0800
Mo DeJong <md...@un...> wrote:
> On Tue, 18 Mar 2003 14:48:59 -0700
> Tom Poindexter <tpo...@ny...> wrote:
>
> > > > tcljava/JavaDefineClassCmd.test
> >
> > I'm also failing on this test, but it is dependent on the value of the
> > LANG environment variable:
> >
> > Running with:
> > LANG=en_US.iso885915 make test_jacl.exec
> >
> > fails on:
> >
> > ==== java::defineclass-2.1 loading a class FAILED
> > ..
> > ---- Result was:
> > 1
> > ---- Result should have been:
> > 0
> > ==== java::defineclass-2.1 FAILED
>
> ...
>
> > As I reported earlier, I believe it has to do with various .toString()
> > methods.
>
> How very odd. I would think that a toString() would not get called here
> since we are dealing with binary data. Doh! I just opened up the src
> for JavaDefineClassCmd.java and found this:
Well, I could not resist trying one simple thing. Does this patch fix the
problem for you?
Index: src/tcljava/tcl/lang/JavaDefineClassCmd.java
===================================================================
RCS file: /cvsroot/tcljava/tcljava/src/tcljava/tcl/lang/JavaDefineClassCmd.java,v
retrieving revision 1.2
diff -u -r1.2 JavaDefineClassCmd.java
--- src/tcljava/tcl/lang/JavaDefineClassCmd.java 30 Dec 2002 02:30:54 -0000 1.2
+++ src/tcljava/tcl/lang/JavaDefineClassCmd.java 18 Mar 2003 23:19:52 -0000
@@ -43,17 +43,22 @@
byte[] classData;
Class result;
TclClassLoader tclClassLoader;
-
+
if (argv.length != 2) {
throw new TclNumArgsException(interp, 1, argv,
"classbytes");
}
- classData = argv[1].toString().getBytes();
+ String str = argv[1].toString();
+ final int str_length = str.length();
+ classData = new byte[str_length];
+ for (int i=0; i < str_length; i++) {
+ classData[i] = (byte) str.charAt(i);
+ }
tclClassLoader = new TclClassLoader(interp, null);
result = tclClassLoader.defineClass(null, classData);
-
+
interp.setResult(ReflectObject.newInstance(interp,
Class.class, result));
}
cheers
Mo
|