/* * IntNullConvertCmd.java -- * * Create two different TclObjects that have * the same CObject internal rep. Then, * try to convert them both to ReflectObjects. * This is a really twisted case, but the * makeRef method of the CObjet class should * not crash when running into this. * * Copyright (c) 2002 by Mo DeJong * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: IntNullConvertCmd.java,v 1.1 2002/12/31 05:22:16 mdejong Exp $ */ package tcl.lang; public class IntNullConvertCmd implements Command { public void cmdProc( Interp interp, TclObject[] objv) throws TclException { if (objv.length != 2) { throw new TclNumArgsException(interp, 1, objv, "java_null_string"); } // This should be a CObject, with a string rep of "java0x0" TclObject nullstr = objv[1]; if (!nullstr.toString().equals("java0x0")) { throw new TclRuntimeError("should be string \"java0x0\""); } if (!(nullstr.getInternalRep() instanceof CObject)) { throw new TclRuntimeError("should be CObject"); } TclObject dup = new TclObject(nullstr.getInternalRep().duplicate()); Object ret1 = ReflectObject.get(interp, nullstr); // This second call will try to convert the internal CObject // into a ref to a Java object type, but the earlier call to get() // already did that. The best we can do here is just to free the // internal rep from the first call and move on. Object ret2 = ReflectObject.get(interp, dup); if ((ret1 == null) && (ret2 == null)) interp.setResult("ok"); else interp.setResult("ERROR"); } }