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 |