Hex Artifact Content
Not logged in

Artifact 9d2f560834702f4d4881c982ccc2bc2ed036b177:


0000: 2f 2a 0a 20 2a 20 6a 61 76 61 4f 62 6a 2e 63 20  /*. * javaObj.c 
0010: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 66 69  --. *. *.This fi
0020: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  le implements th
0030: 65 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  e routines that 
0040: 6d 61 69 6e 74 61 69 6e 20 74 68 65 20 63 6f 72  maintain the cor
0050: 72 65 73 70 6f 6e 64 65 6e 63 65 0a 20 2a 09 62  respondence. *.b
0060: 65 74 77 65 65 6e 20 54 63 6c 4f 62 6a 65 63 74  etween TclObject
0070: 20 69 6e 73 74 61 6e 63 65 73 20 61 6e 64 20 54   instances and T
0080: 63 6c 5f 4f 62 6a 20 2a 20 72 65 66 65 72 65 6e  cl_Obj * referen
0090: 63 65 73 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79 72  ces.. *. * Copyr
00a0: 69 67 68 74 20 28 63 29 20 31 39 39 37 20 62 79  ight (c) 1997 by
00b0: 20 53 75 6e 20 4d 69 63 72 6f 73 79 73 74 65 6d   Sun Microsystem
00c0: 73 2c 20 49 6e 63 2e 0a 20 2a 0a 20 2a 20 53 65  s, Inc.. *. * Se
00d0: 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65  e the file "lice
00e0: 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69  nse.terms" for i
00f0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73  nformation on us
0100: 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69  age and redistri
0110: 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69  bution. * of thi
0120: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
0130: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
0140: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a  ALL WARRANTIES..
0150: 20 2a 0a 20 2a 20 52 43 53 3a 20 40 28 23 29 20   *. * RCS: @(#) 
0160: 24 49 64 3a 20 6a 61 76 61 4f 62 6a 2e 63 2c 76  $Id: javaObj.c,v
0170: 20 31 2e 31 37 20 32 30 30 32 2f 31 32 2f 33 31   1.17 2002/12/31
0180: 20 32 30 3a 31 36 3a 32 37 20 6d 64 65 6a 6f 6e   20:16:27 mdejon
0190: 67 20 45 78 70 20 24 0a 20 2a 2f 0a 0a 23 69 6e  g Exp $. */..#in
01a0: 63 6c 75 64 65 20 22 6a 61 76 61 2e 68 22 0a 23  clude "java.h".#
01b0: 69 6e 63 6c 75 64 65 20 22 6a 61 76 61 4e 61 74  include "javaNat
01c0: 69 76 65 2e 68 22 0a 0a 73 74 61 74 69 63 20 76  ive.h"..static v
01d0: 6f 69 64 09 09 44 75 70 4a 61 76 61 43 6d 64 49  oid..DupJavaCmdI
01e0: 6e 74 65 72 6e 61 6c 52 65 70 28 54 63 6c 5f 4f  nternalRep(Tcl_O
01f0: 62 6a 20 2a 73 72 63 50 74 72 2c 0a 09 09 09 20  bj *srcPtr,.... 
0200: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 64 75 70 50     Tcl_Obj *dupP
0210: 74 72 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  tr);.static void
0220: 09 09 44 75 70 54 63 6c 4f 62 6a 65 63 74 28 54  ..DupTclObject(T
0230: 63 6c 5f 4f 62 6a 20 2a 73 72 63 50 74 72 2c 20  cl_Obj *srcPtr, 
0240: 54 63 6c 5f 4f 62 6a 20 2a 64 65 73 74 50 74 72  Tcl_Obj *destPtr
0250: 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09  );.static void..
0260: 46 72 65 65 4a 61 76 61 43 6d 64 49 6e 74 65 72  FreeJavaCmdInter
0270: 6e 61 6c 52 65 70 28 54 63 6c 5f 4f 62 6a 20 2a  nalRep(Tcl_Obj *
0280: 6f 62 6a 50 74 72 29 3b 0a 73 74 61 74 69 63 20  objPtr);.static 
0290: 76 6f 69 64 09 09 46 72 65 65 54 63 6c 4f 62 6a  void..FreeTclObj
02a0: 65 63 74 28 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a  ect(Tcl_Obj *obj
02b0: 50 74 72 29 3b 0a 73 74 61 74 69 63 20 69 6e 74  Ptr);.static int
02c0: 09 09 53 65 74 4a 61 76 61 43 6d 64 46 72 6f 6d  ..SetJavaCmdFrom
02d0: 41 6e 79 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  Any(Tcl_Interp *
02e0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20  interp, Tcl_Obj 
02f0: 2a 6f 62 6a 50 74 72 29 3b 0a 73 74 61 74 69 63  *objPtr);.static
0300: 20 69 6e 74 09 09 53 65 74 54 63 6c 4f 62 6a 65   int..SetTclObje
0310: 63 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  ct(Tcl_Interp *i
0320: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a  nterp, Tcl_Obj *
0330: 6f 62 6a 50 74 72 29 3b 0a 73 74 61 74 69 63 20  objPtr);.static 
0340: 76 6f 69 64 09 09 55 70 64 61 74 65 54 63 6c 4f  void..UpdateTclO
0350: 62 6a 65 63 74 28 54 63 6c 5f 4f 62 6a 20 2a 6f  bject(Tcl_Obj *o
0360: 62 6a 50 74 72 29 3b 0a 0a 73 74 61 74 69 63 20  bjPtr);..static 
0370: 76 6f 69 64 0a 54 68 72 6f 77 4e 75 6c 6c 50 6f  void.ThrowNullPo
0380: 69 6e 74 65 72 45 78 63 65 70 74 69 6f 6e 28 0a  interException(.
0390: 20 20 20 20 4a 4e 49 45 6e 76 20 2a 65 6e 76 2c      JNIEnv *env,
03a0: 09 09 2f 2a 20 4a 61 76 61 20 65 6e 76 69 72 6f  ../* Java enviro
03b0: 6e 6d 65 6e 74 20 70 6f 69 6e 74 65 72 2e 20 2a  nment pointer. *
03c0: 2f 0a 20 20 20 20 63 68 61 72 20 2a 6d 73 67 29  /.    char *msg)
03d0: 09 09 09 2f 2a 20 4d 65 73 73 61 67 65 20 74 6f  .../* Message to
03e0: 20 69 6e 63 6c 75 64 65 20 69 6e 20 65 78 63 65   include in exce
03f0: 70 74 69 6f 6e 2e 20 2a 2f 0a 7b 0a 20 20 20 20  ption. */.{.    
0400: 6a 63 6c 61 73 73 20 6e 75 6c 6c 43 6c 61 73 73  jclass nullClass
0410: 20 3d 20 28 2a 65 6e 76 29 2d 3e 46 69 6e 64 43   = (*env)->FindC
0420: 6c 61 73 73 28 65 6e 76 2c 0a 09 20 20 20 20 22  lass(env,..    "
0430: 6a 61 76 61 2f 6c 61 6e 67 2f 4e 75 6c 6c 50 6f  java/lang/NullPo
0440: 69 6e 74 65 72 45 78 63 65 70 74 69 6f 6e 22 29  interException")
0450: 3b 0a 20 20 20 20 69 66 20 28 21 6d 73 67 29 20  ;.    if (!msg) 
0460: 7b 0a 09 6d 73 67 20 3d 20 22 49 6e 76 61 6c 69  {..msg = "Invali
0470: 64 20 43 4f 62 6a 65 63 74 2e 22 3b 0a 20 20 20  d CObject.";.   
0480: 20 7d 0a 20 20 20 20 28 2a 65 6e 76 29 2d 3e 54   }.    (*env)->T
0490: 68 72 6f 77 4e 65 77 28 65 6e 76 2c 20 6e 75 6c  hrowNew(env, nul
04a0: 6c 43 6c 61 73 73 2c 20 6d 73 67 29 3b 0a 20 20  lClass, msg);.  
04b0: 20 20 28 2a 65 6e 76 29 2d 3e 44 65 6c 65 74 65    (*env)->Delete
04c0: 4c 6f 63 61 6c 52 65 66 28 65 6e 76 2c 20 6e 75  LocalRef(env, nu
04d0: 6c 6c 43 6c 61 73 73 29 3b 0a 7d 0a 0a 2f 2a 0a  llClass);.}../*.
04e0: 20 2a 20 54 63 6c 4f 62 6a 65 63 74 20 74 79 70   * TclObject typ
04f0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 20  e information.. 
0500: 2a 2f 0a 0a 54 63 6c 5f 4f 62 6a 54 79 70 65 20  */..Tcl_ObjType 
0510: 74 63 6c 4f 62 6a 65 63 74 54 79 70 65 20 3d 20  tclObjectType = 
0520: 7b 0a 20 20 20 20 20 22 54 63 6c 4f 62 6a 65 63  {.     "TclObjec
0530: 74 22 2c 0a 20 20 20 20 20 46 72 65 65 54 63 6c  t",.     FreeTcl
0540: 4f 62 6a 65 63 74 2c 0a 20 20 20 20 20 44 75 70  Object,.     Dup
0550: 54 63 6c 4f 62 6a 65 63 74 2c 0a 20 20 20 20 20  TclObject,.     
0560: 55 70 64 61 74 65 54 63 6c 4f 62 6a 65 63 74 2c  UpdateTclObject,
0570: 0a 20 20 20 20 20 53 65 74 54 63 6c 4f 62 6a 65  .     SetTclObje
0580: 63 74 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 50 6f 69  ct.};../*. * Poi
0590: 6e 74 65 72 20 74 6f 20 6f 6c 64 20 63 6d 64 54  nter to old cmdT
05a0: 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ype information.
05b0: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 54 63 6c  . */..static Tcl
05c0: 5f 4f 62 6a 54 79 70 65 20 6f 6c 64 43 6d 64 54  _ObjType oldCmdT
05d0: 79 70 65 3b 0a 73 74 61 74 69 63 20 54 63 6c 5f  ype;.static Tcl_
05e0: 4f 62 6a 54 79 70 65 20 2a 63 6d 64 54 79 70 65  ObjType *cmdType
05f0: 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74  Ptr = NULL;.stat
0600: 69 63 20 54 63 6c 5f 4f 62 6a 54 79 70 65 20 2a  ic Tcl_ObjType *
0610: 6c 69 73 74 54 79 70 65 50 74 72 20 3d 20 4e 55  listTypePtr = NU
0620: 4c 4c 3b 0a 0a 2f 2a 0a 20 2a 20 4d 75 74 65 78  LL;../*. * Mutex
0630: 20 74 6f 20 73 65 72 69 61 6c 69 7a 65 20 61 63   to serialize ac
0640: 63 65 73 73 20 74 6f 20 63 6d 64 54 79 70 65 50  cess to cmdTypeP
0650: 74 72 2e 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20  tr.. */..static 
0660: 54 63 6c 5f 4d 75 74 65 78 20 63 6d 64 54 79 70  Tcl_Mutex cmdTyp
0670: 65 50 74 72 4c 6f 63 6b 3b 0a 0a 0c 0a 2f 2a 0a  ePtrLock;..../*.
0680: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06c0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4a  --------. *. * J
06d0: 61 76 61 4f 62 6a 49 6e 69 74 20 2d 2d 0a 20 2a  avaObjInit --. *
06e0: 0a 20 2a 09 49 6e 69 74 69 61 6c 69 7a 65 20 74  . *.Initialize t
06f0: 68 65 20 4a 61 76 61 4f 62 6a 20 6d 6f 64 75 6c  he JavaObj modul
0700: 65 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  e.. *. * Results
0710: 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a  :. *.None.. *. *
0720: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
0730: 2a 09 52 65 67 69 73 74 65 72 73 20 74 68 65 20  *.Registers the 
0740: 54 63 6c 4f 62 6a 65 63 74 20 74 79 70 65 20 61  TclObject type a
0750: 6e 64 20 68 69 6a 61 63 6b 73 20 74 68 65 20 63  nd hijacks the c
0760: 6d 64 4e 61 6d 65 20 74 79 70 65 2e 0a 20 2a 0a  mdName type.. *.
0770: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
0780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07b0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f  --------. */..vo
07c0: 69 64 0a 4a 61 76 61 4f 62 6a 49 6e 69 74 28 29  id.JavaObjInit()
07d0: 0a 7b 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  .{.    /*.     *
07e0: 20 54 68 65 20 4a 61 76 61 4f 62 6a 49 6e 69 74   The JavaObjInit
07f0: 20 6d 65 74 68 6f 64 20 63 6f 75 6c 64 20 67 65   method could ge
0800: 74 20 63 61 6c 6c 65 64 0a 20 20 20 20 20 2a 20  t called.     * 
0810: 66 72 6f 6d 20 6d 75 6c 74 69 70 6c 65 20 74 68  from multiple th
0820: 72 65 61 64 73 2e 20 57 65 20 6f 6e 6c 79 20 77  reads. We only w
0830: 61 6e 74 20 74 6f 0a 20 20 20 20 20 2a 20 69 6e  ant to.     * in
0840: 69 74 20 74 68 65 20 6f 62 6a 65 63 74 20 74 79  it the object ty
0850: 70 65 20 6f 6e 63 65 2e 0a 20 20 20 20 20 2a 2f  pe once..     */
0860: 0a 0a 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 4c  ..    Tcl_MutexL
0870: 6f 63 6b 28 26 63 6d 64 54 79 70 65 50 74 72 4c  ock(&cmdTypePtrL
0880: 6f 63 6b 29 3b 0a 0a 20 20 20 20 69 66 20 28 63  ock);..    if (c
0890: 6d 64 54 79 70 65 50 74 72 20 3d 3d 20 4e 55 4c  mdTypePtr == NUL
08a0: 4c 29 20 7b 0a 20 20 20 20 20 20 20 20 54 63 6c  L) {.        Tcl
08b0: 5f 52 65 67 69 73 74 65 72 4f 62 6a 54 79 70 65  _RegisterObjType
08c0: 28 26 74 63 6c 4f 62 6a 65 63 74 54 79 70 65 29  (&tclObjectType)
08d0: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20  ;..        /*.  
08e0: 20 20 20 20 20 20 20 2a 20 49 6e 74 65 72 70 6f         * Interpo
08f0: 73 65 20 6f 6e 20 74 68 65 20 22 63 6d 64 4e 61  se on the "cmdNa
0900: 6d 65 22 20 74 79 70 65 20 74 6f 20 70 72 65 73  me" type to pres
0910: 65 72 76 65 0a 20 20 20 20 20 20 20 20 20 2a 20  erve.         * 
0920: 6a 61 76 61 20 6f 62 6a 65 63 74 73 2e 0a 20 20  java objects..  
0930: 20 20 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 20         */..     
0940: 20 20 20 63 6d 64 54 79 70 65 50 74 72 20 3d 20     cmdTypePtr = 
0950: 28 54 63 6c 5f 4f 62 6a 54 79 70 65 20 2a 29 20  (Tcl_ObjType *) 
0960: 54 63 6c 5f 47 65 74 4f 62 6a 54 79 70 65 28 22  Tcl_GetObjType("
0970: 63 6d 64 4e 61 6d 65 22 29 3b 0a 20 20 20 20 20  cmdName");.     
0980: 20 20 20 6f 6c 64 43 6d 64 54 79 70 65 20 3d 20     oldCmdType = 
0990: 2a 63 6d 64 54 79 70 65 50 74 72 3b 0a 20 20 20  *cmdTypePtr;.   
09a0: 20 20 20 20 20 63 6d 64 54 79 70 65 50 74 72 2d       cmdTypePtr-
09b0: 3e 66 72 65 65 49 6e 74 52 65 70 50 72 6f 63 20  >freeIntRepProc 
09c0: 3d 20 46 72 65 65 4a 61 76 61 43 6d 64 49 6e 74  = FreeJavaCmdInt
09d0: 65 72 6e 61 6c 52 65 70 3b 0a 20 20 20 20 20 20  ernalRep;.      
09e0: 20 20 63 6d 64 54 79 70 65 50 74 72 2d 3e 64 75    cmdTypePtr->du
09f0: 70 49 6e 74 52 65 70 50 72 6f 63 20 3d 20 44 75  pIntRepProc = Du
0a00: 70 4a 61 76 61 43 6d 64 49 6e 74 65 72 6e 61 6c  pJavaCmdInternal
0a10: 52 65 70 3b 0a 20 20 20 20 20 20 20 20 63 6d 64  Rep;.        cmd
0a20: 54 79 70 65 50 74 72 2d 3e 73 65 74 46 72 6f 6d  TypePtr->setFrom
0a30: 41 6e 79 50 72 6f 63 20 3d 20 53 65 74 4a 61 76  AnyProc = SetJav
0a40: 61 43 6d 64 46 72 6f 6d 41 6e 79 3b 0a 0a 20 20  aCmdFromAny;..  
0a50: 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20        /*.       
0a60: 20 20 2a 20 47 72 61 62 20 61 20 70 6f 69 6e 74    * Grab a point
0a70: 65 72 20 74 6f 20 74 68 65 20 54 63 6c 20 6c 69  er to the Tcl li
0a80: 73 74 20 74 79 70 65 2e 0a 20 20 20 20 20 20 20  st type..       
0a90: 20 20 2a 2f 0a 0a 20 20 20 20 20 20 20 20 6c 69    */..        li
0aa0: 73 74 54 79 70 65 50 74 72 20 3d 20 28 54 63 6c  stTypePtr = (Tcl
0ab0: 5f 4f 62 6a 54 79 70 65 20 2a 29 20 54 63 6c 5f  _ObjType *) Tcl_
0ac0: 47 65 74 4f 62 6a 54 79 70 65 28 22 6c 69 73 74  GetObjType("list
0ad0: 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 54  ");.    }..    T
0ae0: 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26  cl_MutexUnlock(&
0af0: 63 6d 64 54 79 70 65 50 74 72 4c 6f 63 6b 29 3b  cmdTypePtrLock);
0b00: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b50: 0a 20 2a 0a 20 2a 20 70 72 69 6e 74 53 74 72 69  . *. * printStri
0b60: 6e 67 20 2d 2d 0a 20 2a 0a 20 2a 09 44 75 6d 70  ng --. *. *.Dump
0b70: 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 72   the string repr
0b80: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e  esentation of an
0b90: 20 6f 62 6a 65 63 74 20 74 6f 20 73 74 64 6f 75   object to stdou
0ba0: 74 2e 20 54 68 69 73 0a 20 2a 09 66 75 6e 63 74  t. This. *.funct
0bb0: 69 6f 6e 20 69 73 20 70 75 72 65 6c 79 20 66 6f  ion is purely fo
0bc0: 72 20 64 65 62 75 67 67 69 6e 67 20 70 75 72 70  r debugging purp
0bd0: 6f 73 65 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  oses.. *. * Resu
0be0: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
0bf0: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
0c00: 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a  :. *.None.. *. *
0c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c50: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64  ------. */..void
0c60: 0a 70 72 69 6e 74 53 74 72 69 6e 67 28 0a 20 20  .printString(.  
0c70: 20 20 4a 4e 49 45 6e 76 20 2a 65 6e 76 2c 09 09    JNIEnv *env,..
0c80: 2f 2a 20 4a 61 76 61 20 65 6e 76 69 72 6f 6e 6d  /* Java environm
0c90: 65 6e 74 2e 20 2a 2f 0a 20 20 20 20 6a 6f 62 6a  ent. */.    jobj
0ca0: 65 63 74 20 6f 62 6a 65 63 74 29 0a 7b 0a 20 20  ect object).{.  
0cb0: 20 20 4a 61 76 61 49 6e 66 6f 2a 20 6a 63 61 63    JavaInfo* jcac
0cc0: 68 65 20 3d 20 4a 61 76 61 47 65 74 43 61 63 68  he = JavaGetCach
0cd0: 65 28 29 3b 0a 20 20 20 20 6a 73 74 72 69 6e 67  e();.    jstring
0ce0: 20 73 74 72 69 6e 67 20 3d 20 28 2a 65 6e 76 29   string = (*env)
0cf0: 2d 3e 43 61 6c 6c 4f 62 6a 65 63 74 4d 65 74 68  ->CallObjectMeth
0d00: 6f 64 28 65 6e 76 2c 20 6f 62 6a 65 63 74 2c 20  od(env, object, 
0d10: 6a 63 61 63 68 65 2d 3e 74 6f 53 74 72 69 6e 67  jcache->toString
0d20: 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  );.    const cha
0d30: 72 20 2a 73 74 72 20 3d 20 28 2a 65 6e 76 29 2d  r *str = (*env)-
0d40: 3e 47 65 74 53 74 72 69 6e 67 55 54 46 43 68 61  >GetStringUTFCha
0d50: 72 73 28 65 6e 76 2c 20 73 74 72 69 6e 67 2c 20  rs(env, string, 
0d60: 4e 55 4c 4c 29 3b 0a 20 20 20 20 70 72 69 6e 74  NULL);.    print
0d70: 66 28 22 74 6f 53 74 72 69 6e 67 3a 20 25 78 20  f("toString: %x 
0d80: 27 25 73 27 5c 6e 22 2c 20 28 75 6e 73 69 67 6e  '%s'\n", (unsign
0d90: 65 64 20 69 6e 74 29 20 6f 62 6a 65 63 74 2c 20  ed int) object, 
0da0: 73 74 72 29 3b 0a 20 20 20 20 28 2a 65 6e 76 29  str);.    (*env)
0db0: 2d 3e 52 65 6c 65 61 73 65 53 74 72 69 6e 67 55  ->ReleaseStringU
0dc0: 54 46 43 68 61 72 73 28 65 6e 76 2c 20 73 74 72  TFChars(env, str
0dd0: 69 6e 67 2c 20 73 74 72 29 3b 0a 20 20 20 20 28  ing, str);.    (
0de0: 2a 65 6e 76 29 2d 3e 44 65 6c 65 74 65 4c 6f 63  *env)->DeleteLoc
0df0: 61 6c 52 65 66 28 65 6e 76 2c 20 73 74 72 69 6e  alRef(env, strin
0e00: 67 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d  g);.}.../*. *---
0e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e50: 2d 2d 2d 0a 20 2a 0a 20 2a 20 44 75 70 54 63 6c  ---. *. * DupTcl
0e60: 4f 62 6a 65 63 74 20 2d 2d 0a 20 2a 0a 20 2a 09  Object --. *. *.
0e70: 43 6f 70 79 20 74 68 65 20 69 6e 74 65 72 6e 61  Copy the interna
0e80: 6c 20 72 65 70 20 66 6f 72 20 61 20 54 63 6c 4f  l rep for a TclO
0e90: 62 6a 65 63 74 2e 0a 20 2a 0a 20 2a 20 52 65 73  bject.. *. * Res
0ea0: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
0eb0: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
0ec0: 73 3a 0a 20 2a 09 49 6e 63 72 65 6d 65 6e 74 73  s:. *.Increments
0ed0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 63   the reference c
0ee0: 6f 75 6e 74 20 6f 6e 20 74 68 65 20 54 63 6c 4f  ount on the TclO
0ef0: 62 6a 65 63 74 2e 20 20 43 72 65 61 74 65 73 20  bject.  Creates 
0f00: 61 0a 20 2a 09 6e 65 77 20 67 6c 6f 62 61 6c 20  a. *.new global 
0f10: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  reference to the
0f20: 20 6f 62 6a 65 63 74 2e 0a 20 2a 0a 20 2a 2d 2d   object.. *. *--
0f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f70: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63  ----. */..static
0f80: 20 76 6f 69 64 0a 44 75 70 54 63 6c 4f 62 6a 65   void.DupTclObje
0f90: 63 74 28 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20  ct(.    Tcl_Obj 
0fa0: 2a 73 72 63 50 74 72 2c 0a 20 20 20 20 54 63 6c  *srcPtr,.    Tcl
0fb0: 5f 4f 62 6a 20 2a 64 65 73 74 50 74 72 29 0a 7b  _Obj *destPtr).{
0fc0: 0a 20 20 20 20 6a 6f 62 6a 65 63 74 20 6f 62 6a  .    jobject obj
0fd0: 65 63 74 20 3d 20 28 6a 6f 62 6a 65 63 74 29 28  ect = (jobject)(
0fe0: 73 72 63 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c  srcPtr->internal
0ff0: 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e  Rep.twoPtrValue.
1000: 70 74 72 32 29 3b 0a 20 20 20 20 4a 4e 49 45 6e  ptr2);.    JNIEn
1010: 76 20 2a 65 6e 76 20 3d 20 4a 61 76 61 47 65 74  v *env = JavaGet
1020: 45 6e 76 28 29 3b 0a 20 20 20 20 4a 61 76 61 49  Env();.    JavaI
1030: 6e 66 6f 2a 20 6a 63 61 63 68 65 20 3d 20 4a 61  nfo* jcache = Ja
1040: 76 61 47 65 74 43 61 63 68 65 28 29 3b 0a 20 20  vaGetCache();.  
1050: 20 20 6a 6f 62 6a 65 63 74 20 65 78 63 65 70 74    jobject except
1060: 69 6f 6e 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  ion;..    /*.   
1070: 20 20 2a 20 43 6c 65 61 72 20 70 65 6e 64 69 6e    * Clear pendin
1080: 67 20 4a 61 76 61 20 65 78 63 65 70 74 69 6f 6e  g Java exception
1090: 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 65  ..     */..    e
10a0: 78 63 65 70 74 69 6f 6e 20 3d 20 28 2a 65 6e 76  xception = (*env
10b0: 29 2d 3e 45 78 63 65 70 74 69 6f 6e 4f 63 63 75  )->ExceptionOccu
10c0: 72 72 65 64 28 65 6e 76 29 3b 0a 20 20 20 20 69  rred(env);.    i
10d0: 66 20 28 65 78 63 65 70 74 69 6f 6e 29 0a 20 20  f (exception).  
10e0: 20 20 20 20 20 20 28 2a 65 6e 76 29 2d 3e 45 78        (*env)->Ex
10f0: 63 65 70 74 69 6f 6e 43 6c 65 61 72 28 65 6e 76  ceptionClear(env
1100: 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  );..    /*.     
1110: 2a 20 41 64 64 20 61 20 67 6c 6f 62 61 6c 20 72  * Add a global r
1120: 65 66 65 72 65 6e 63 65 20 74 6f 20 72 65 70 72  eference to repr
1130: 65 73 65 6e 74 20 74 68 65 20 6e 65 77 20 63 6f  esent the new co
1140: 70 79 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  py..     */..   
1150: 20 6f 62 6a 65 63 74 20 3d 20 28 2a 65 6e 76 29   object = (*env)
1160: 2d 3e 4e 65 77 47 6c 6f 62 61 6c 52 65 66 28 65  ->NewGlobalRef(e
1170: 6e 76 2c 20 6f 62 6a 65 63 74 29 3b 0a 20 20 20  nv, object);.   
1180: 20 64 65 73 74 50 74 72 2d 3e 74 79 70 65 50 74   destPtr->typePt
1190: 72 20 3d 20 73 72 63 50 74 72 2d 3e 74 79 70 65  r = srcPtr->type
11a0: 50 74 72 3b 0a 20 20 20 20 64 65 73 74 50 74 72  Ptr;.    destPtr
11b0: 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77  ->internalRep.tw
11c0: 6f 50 74 72 56 61 6c 75 65 2e 70 74 72 32 20 3d  oPtrValue.ptr2 =
11d0: 20 28 56 4f 49 44 2a 29 20 6f 62 6a 65 63 74 3b   (VOID*) object;
11e0: 0a 20 20 20 20 28 2a 65 6e 76 29 2d 3e 43 61 6c  .    (*env)->Cal
11f0: 6c 56 6f 69 64 4d 65 74 68 6f 64 28 65 6e 76 2c  lVoidMethod(env,
1200: 20 6f 62 6a 65 63 74 2c 20 6a 63 61 63 68 65 2d   object, jcache-
1210: 3e 70 72 65 73 65 72 76 65 29 3b 0a 20 20 20 20  >preserve);.    
1220: 69 66 20 28 28 2a 65 6e 76 29 2d 3e 45 78 63 65  if ((*env)->Exce
1230: 70 74 69 6f 6e 4f 63 63 75 72 72 65 64 28 65 6e  ptionOccurred(en
1240: 76 29 29 20 7b 0a 20 20 20 20 20 20 20 20 28 2a  v)) {.        (*
1250: 65 6e 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e 44  env)->ExceptionD
1260: 65 73 63 72 69 62 65 28 65 6e 76 29 3b 0a 09 54  escribe(env);..T
1270: 63 6c 5f 50 61 6e 69 63 28 22 44 75 70 54 63 6c  cl_Panic("DupTcl
1280: 4f 62 6a 65 63 74 20 3a 20 65 78 63 65 70 74 69  Object : excepti
1290: 6f 6e 20 69 6e 20 54 63 6c 4f 62 6a 65 63 74 2e  on in TclObject.
12a0: 5f 70 72 65 73 65 72 76 65 28 29 22 29 3b 0a 20  _preserve()");. 
12b0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20     }..    /*.   
12c0: 20 20 2a 20 52 65 74 68 72 6f 77 20 70 65 6e 64    * Rethrow pend
12d0: 69 6e 67 20 4a 61 76 61 20 65 78 63 65 70 74 69  ing Java excepti
12e0: 6f 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  on..     */..   
12f0: 20 69 66 20 28 65 78 63 65 70 74 69 6f 6e 29 20   if (exception) 
1300: 7b 0a 20 20 20 20 20 20 20 20 28 2a 65 6e 76 29  {.        (*env)
1310: 2d 3e 54 68 72 6f 77 28 65 6e 76 2c 20 65 78 63  ->Throw(env, exc
1320: 65 70 74 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20  eption);.       
1330: 20 28 2a 65 6e 76 29 2d 3e 44 65 6c 65 74 65 4c   (*env)->DeleteL
1340: 6f 63 61 6c 52 65 66 28 65 6e 76 2c 20 65 78 63  ocalRef(env, exc
1350: 65 70 74 69 6f 6e 29 3b 0a 20 20 20 20 7d 0a 7d  eption);.    }.}
1360: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
1370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
13b0: 2a 0a 20 2a 20 46 72 65 65 54 63 6c 4f 62 6a 65  *. * FreeTclObje
13c0: 63 74 20 2d 2d 0a 20 2a 0a 20 2a 09 46 72 65 65  ct --. *. *.Free
13d0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
13e0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72  presentation for
13f0: 20 61 20 54 63 6c 4f 62 6a 65 63 74 2e 0a 20 2a   a TclObject.. *
1400: 09 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20  .This method is 
1410: 69 6e 76 6f 6b 65 64 20 62 79 20 54 63 6c 20 77  invoked by Tcl w
1420: 68 65 6e 20 61 20 54 63 6c 5f 4f 62 6a 20 74 68  hen a Tcl_Obj th
1430: 61 74 0a 20 2a 09 77 72 61 70 73 20 61 20 54 63  at. *.wraps a Tc
1440: 6c 4f 62 6a 65 63 74 20 68 61 73 20 69 74 73 20  lObject has its 
1450: 72 65 66 20 63 6f 75 6e 74 20 64 65 63 72 65 6d  ref count decrem
1460: 65 6e 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 20  ented to zero.. 
1470: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
1480: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64  .None.. *. * Sid
1490: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 44 65  e effects:. *.De
14a0: 63 72 65 6d 65 6e 74 73 20 74 68 65 20 72 65 66  crements the ref
14b0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 20 6f 66 20  erence count of 
14c0: 74 68 65 20 54 63 6c 4f 62 6a 65 63 74 20 61 6e  the TclObject an
14d0: 64 20 66 72 65 65 73 20 74 68 65 0a 20 2a 09 67  d frees the. *.g
14e0: 6c 6f 62 61 6c 20 6f 62 6a 65 63 74 20 72 65 66  lobal object ref
14f0: 65 72 65 6e 63 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d  erence.. *. *---
1500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1540: 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20  ---. */..static 
1550: 76 6f 69 64 0a 46 72 65 65 54 63 6c 4f 62 6a 65  void.FreeTclObje
1560: 63 74 28 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20  ct(.    Tcl_Obj 
1570: 2a 6f 62 6a 50 74 72 29 09 09 2f 2a 20 4f 62 6a  *objPtr)../* Obj
1580: 65 63 74 20 74 6f 20 66 72 65 65 2e 20 2a 2f 0a  ect to free. */.
1590: 7b 0a 20 20 20 20 6a 6f 62 6a 65 63 74 20 6f 62  {.    jobject ob
15a0: 6a 65 63 74 20 3d 20 28 6a 6f 62 6a 65 63 74 29  ject = (jobject)
15b0: 28 6f 62 6a 50 74 72 2d 3e 69 6e 74 65 72 6e 61  (objPtr->interna
15c0: 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65  lRep.twoPtrValue
15d0: 2e 70 74 72 32 29 3b 0a 20 20 20 20 4a 4e 49 45  .ptr2);.    JNIE
15e0: 6e 76 20 2a 65 6e 76 20 3d 20 4a 61 76 61 47 65  nv *env = JavaGe
15f0: 74 45 6e 76 28 29 3b 0a 20 20 20 20 4a 61 76 61  tEnv();.    Java
1600: 49 6e 66 6f 2a 20 6a 63 61 63 68 65 20 3d 20 4a  Info* jcache = J
1610: 61 76 61 47 65 74 43 61 63 68 65 28 29 3b 0a 20  avaGetCache();. 
1620: 20 20 20 6a 6f 62 6a 65 63 74 20 65 78 63 65 70     jobject excep
1630: 74 69 6f 6e 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20  tion;..    /*.  
1640: 20 20 20 2a 20 43 6c 65 61 72 20 70 65 6e 64 69     * Clear pendi
1650: 6e 67 20 4a 61 76 61 20 65 78 63 65 70 74 69 6f  ng Java exceptio
1660: 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  n..     */..    
1670: 65 78 63 65 70 74 69 6f 6e 20 3d 20 28 2a 65 6e  exception = (*en
1680: 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e 4f 63 63  v)->ExceptionOcc
1690: 75 72 72 65 64 28 65 6e 76 29 3b 0a 20 20 20 20  urred(env);.    
16a0: 69 66 20 28 65 78 63 65 70 74 69 6f 6e 29 0a 20  if (exception). 
16b0: 20 20 20 20 20 20 20 28 2a 65 6e 76 29 2d 3e 45         (*env)->E
16c0: 78 63 65 70 74 69 6f 6e 43 6c 65 61 72 28 65 6e  xceptionClear(en
16d0: 76 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  v);..    /*.    
16e0: 20 2a 20 44 65 6c 65 74 65 20 74 68 65 20 67 6c   * Delete the gl
16f0: 6f 62 61 6c 20 72 65 66 2e 0a 20 20 20 20 20 2a  obal ref..     *
1700: 2f 0a 0a 20 20 20 20 28 2a 65 6e 76 29 2d 3e 43  /..    (*env)->C
1710: 61 6c 6c 56 6f 69 64 4d 65 74 68 6f 64 28 65 6e  allVoidMethod(en
1720: 76 2c 20 6f 62 6a 65 63 74 2c 20 6a 63 61 63 68  v, object, jcach
1730: 65 2d 3e 72 65 6c 65 61 73 65 29 3b 0a 20 20 20  e->release);.   
1740: 20 69 66 20 28 28 2a 65 6e 76 29 2d 3e 45 78 63   if ((*env)->Exc
1750: 65 70 74 69 6f 6e 4f 63 63 75 72 72 65 64 28 65  eptionOccurred(e
1760: 6e 76 29 29 20 7b 0a 20 20 20 20 20 20 20 20 28  nv)) {.        (
1770: 2a 65 6e 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e  *env)->Exception
1780: 44 65 73 63 72 69 62 65 28 65 6e 76 29 3b 0a 09  Describe(env);..
1790: 54 63 6c 5f 50 61 6e 69 63 28 22 46 72 65 65 54  Tcl_Panic("FreeT
17a0: 63 6c 4f 62 6a 65 63 74 20 3a 20 65 78 63 65 70  clObject : excep
17b0: 74 69 6f 6e 20 69 6e 20 54 63 6c 4f 62 6a 65 63  tion in TclObjec
17c0: 74 2e 5f 72 65 6c 65 61 73 65 28 29 22 29 3b 0a  t._release()");.
17d0: 20 20 20 20 7d 0a 20 20 20 20 28 2a 65 6e 76 29      }.    (*env)
17e0: 2d 3e 44 65 6c 65 74 65 47 6c 6f 62 61 6c 52 65  ->DeleteGlobalRe
17f0: 66 28 65 6e 76 2c 20 6f 62 6a 65 63 74 29 3b 0a  f(env, object);.
1800: 20 20 20 20 6f 62 6a 50 74 72 2d 3e 69 6e 74 65      objPtr->inte
1810: 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74 72 56 61  rnalRep.twoPtrVa
1820: 6c 75 65 2e 70 74 72 32 20 3d 20 4e 55 4c 4c 3b  lue.ptr2 = NULL;
1830: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20  ..    /*.     * 
1840: 52 65 74 68 72 6f 77 20 70 65 6e 64 69 6e 67 20  Rethrow pending 
1850: 4a 61 76 61 20 65 78 63 65 70 74 69 6f 6e 2e 0a  Java exception..
1860: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69 66 20       */..    if 
1870: 28 65 78 63 65 70 74 69 6f 6e 29 20 7b 0a 20 20  (exception) {.  
1880: 20 20 20 20 20 20 28 2a 65 6e 76 29 2d 3e 54 68        (*env)->Th
1890: 72 6f 77 28 65 6e 76 2c 20 65 78 63 65 70 74 69  row(env, excepti
18a0: 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 28 2a 65  on);.        (*e
18b0: 6e 76 29 2d 3e 44 65 6c 65 74 65 4c 6f 63 61 6c  nv)->DeleteLocal
18c0: 52 65 66 28 65 6e 76 2c 20 65 78 63 65 70 74 69  Ref(env, excepti
18d0: 6f 6e 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f  on);.    }.}.../
18e0: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
18f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
1930: 20 53 65 74 54 63 6c 4f 62 6a 65 63 74 20 2d 2d   SetTclObject --
1940: 0a 20 2a 0a 20 2a 09 4e 6f 20 63 6f 6e 76 65 72  . *. *.No conver
1950: 73 69 6f 6e 20 74 6f 20 61 20 54 63 6c 4f 62 6a  sion to a TclObj
1960: 65 63 74 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ect is possible.
1970: 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a  . *. * Results:.
1980: 20 2a 09 41 6c 77 61 79 73 20 72 65 74 75 72 6e   *.Always return
1990: 73 20 54 43 4c 5f 45 52 52 4f 52 2e 0a 20 2a 0a  s TCL_ERROR.. *.
19a0: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
19b0: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d  . *.None.. *. *-
19c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a00: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
1a10: 63 20 69 6e 74 0a 53 65 74 54 63 6c 4f 62 6a 65  c int.SetTclObje
1a20: 63 74 28 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65  ct(.    Tcl_Inte
1a30: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20  rp *interp,.    
1a40: 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29  Tcl_Obj *objPtr)
1a50: 0a 7b 0a 20 20 20 20 69 66 20 28 69 6e 74 65 72  .{.    if (inter
1a60: 70 29 20 7b 0a 09 54 63 6c 5f 52 65 73 65 74 52  p) {..Tcl_ResetR
1a70: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 09  esult(interp);..
1a80: 54 63 6c 5f 53 65 74 53 74 72 69 6e 67 4f 62 6a  Tcl_SetStringObj
1a90: 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c  (Tcl_GetObjResul
1aa0: 74 28 69 6e 74 65 72 70 29 2c 0a 09 09 22 63 61  t(interp),..."ca
1ab0: 6e 6e 6f 74 20 63 6f 6e 76 65 72 74 20 74 6f 20  nnot convert to 
1ac0: 54 63 6c 4f 62 6a 65 63 74 22 2c 20 2d 31 29 3b  TclObject", -1);
1ad0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
1ae0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0c  n TCL_ERROR;.}..
1af0: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
1b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
1b40: 20 2a 20 55 70 64 61 74 65 54 63 6c 4f 62 6a 65   * UpdateTclObje
1b50: 63 74 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 74 72  ct --. *. *.Retr
1b60: 69 65 76 65 20 74 68 65 20 73 74 72 69 6e 67 20  ieve the string 
1b70: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
1b80: 72 6f 6d 20 74 68 65 20 54 63 6c 4f 62 6a 65 63  rom the TclObjec
1b90: 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  t.. *. * Results
1ba0: 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a  :. *.None.. *. *
1bb0: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
1bc0: 2a 09 55 70 64 61 74 65 73 20 74 68 65 20 73 74  *.Updates the st
1bd0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
1be0: 69 6f 6e 20 6f 66 20 74 68 65 20 54 63 6c 5f 4f  ion of the Tcl_O
1bf0: 62 6a 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  bj.. *. *-------
1c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1c40: 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64   */..static void
1c50: 0a 55 70 64 61 74 65 54 63 6c 4f 62 6a 65 63 74  .UpdateTclObject
1c60: 28 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72  (Tcl_Obj *objPtr
1c70: 29 0a 7b 0a 20 20 20 20 6a 73 74 72 69 6e 67 20  ).{.    jstring 
1c80: 73 74 72 69 6e 67 3b 0a 20 20 20 20 6a 6f 62 6a  string;.    jobj
1c90: 65 63 74 20 6f 62 6a 65 63 74 20 3d 20 28 6a 6f  ect object = (jo
1ca0: 62 6a 65 63 74 29 28 6f 62 6a 50 74 72 2d 3e 69  bject)(objPtr->i
1cb0: 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74  nternalRep.twoPt
1cc0: 72 56 61 6c 75 65 2e 70 74 72 32 29 3b 0a 20 20  rValue.ptr2);.  
1cd0: 20 20 4a 4e 49 45 6e 76 20 2a 65 6e 76 20 3d 20    JNIEnv *env = 
1ce0: 4a 61 76 61 47 65 74 45 6e 76 28 29 3b 0a 20 20  JavaGetEnv();.  
1cf0: 20 20 4a 61 76 61 49 6e 66 6f 2a 20 6a 63 61 63    JavaInfo* jcac
1d00: 68 65 20 3d 20 4a 61 76 61 47 65 74 43 61 63 68  he = JavaGetCach
1d10: 65 28 29 3b 0a 20 20 20 20 6a 6f 62 6a 65 63 74  e();.    jobject
1d20: 20 65 78 63 65 70 74 69 6f 6e 3b 0a 0a 20 20 20   exception;..   
1d30: 20 2f 2a 0a 20 20 20 20 20 2a 20 43 6c 65 61 72   /*.     * Clear
1d40: 20 70 65 6e 64 69 6e 67 20 4a 61 76 61 20 65 78   pending Java ex
1d50: 63 65 70 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 2f  ception..     */
1d60: 0a 0a 20 20 20 20 65 78 63 65 70 74 69 6f 6e 20  ..    exception 
1d70: 3d 20 28 2a 65 6e 76 29 2d 3e 45 78 63 65 70 74  = (*env)->Except
1d80: 69 6f 6e 4f 63 63 75 72 72 65 64 28 65 6e 76 29  ionOccurred(env)
1d90: 3b 0a 20 20 20 20 69 66 20 28 65 78 63 65 70 74  ;.    if (except
1da0: 69 6f 6e 29 0a 20 20 20 20 20 20 20 20 28 2a 65  ion).        (*e
1db0: 6e 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e 43 6c  nv)->ExceptionCl
1dc0: 65 61 72 28 65 6e 76 29 3b 0a 0a 20 20 20 20 2f  ear(env);..    /
1dd0: 2a 0a 20 20 20 20 20 2a 20 55 70 64 61 74 65 20  *.     * Update 
1de0: 54 63 6c 5f 4f 62 6a 2e 62 79 74 65 73 20 74 6f  Tcl_Obj.bytes to
1df0: 20 72 65 73 75 6c 74 20 6f 66 20 54 63 6c 4f 62   result of TclOb
1e00: 6a 65 63 74 2e 74 6f 53 74 72 69 6e 67 28 29 20  ject.toString() 
1e10: 63 61 6c 6c 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20  call..     */.. 
1e20: 20 20 20 73 74 72 69 6e 67 20 3d 20 28 2a 65 6e     string = (*en
1e30: 76 29 2d 3e 43 61 6c 6c 4f 62 6a 65 63 74 4d 65  v)->CallObjectMe
1e40: 74 68 6f 64 28 65 6e 76 2c 20 6f 62 6a 65 63 74  thod(env, object
1e50: 2c 20 6a 63 61 63 68 65 2d 3e 74 6f 53 74 72 69  , jcache->toStri
1e60: 6e 67 29 3b 0a 20 20 20 20 69 66 20 28 28 2a 65  ng);.    if ((*e
1e70: 6e 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e 4f 63  nv)->ExceptionOc
1e80: 63 75 72 72 65 64 28 65 6e 76 29 29 20 7b 0a 20  curred(env)) {. 
1e90: 20 20 20 20 20 20 20 28 2a 65 6e 76 29 2d 3e 45         (*env)->E
1ea0: 78 63 65 70 74 69 6f 6e 44 65 73 63 72 69 62 65  xceptionDescribe
1eb0: 28 65 6e 76 29 3b 0a 09 54 63 6c 5f 50 61 6e 69  (env);..Tcl_Pani
1ec0: 63 28 22 55 70 64 61 74 65 54 63 6c 4f 62 6a 65  c("UpdateTclObje
1ed0: 63 74 20 3a 20 65 78 63 65 70 74 69 6f 6e 20 69  ct : exception i
1ee0: 6e 20 54 63 6c 4f 62 6a 65 63 74 2e 74 6f 53 74  n TclObject.toSt
1ef0: 72 69 6e 67 28 29 22 29 3b 0a 20 20 20 20 7d 0a  ring()");.    }.
1f00: 20 20 20 20 6f 62 6a 50 74 72 2d 3e 62 79 74 65      objPtr->byte
1f10: 73 20 3d 20 4a 61 76 61 47 65 74 53 74 72 69 6e  s = JavaGetStrin
1f20: 67 28 65 6e 76 2c 20 73 74 72 69 6e 67 2c 20 26  g(env, string, &
1f30: 6f 62 6a 50 74 72 2d 3e 6c 65 6e 67 74 68 29 3b  objPtr->length);
1f40: 0a 20 20 20 20 28 2a 65 6e 76 29 2d 3e 44 65 6c  .    (*env)->Del
1f50: 65 74 65 4c 6f 63 61 6c 52 65 66 28 65 6e 76 2c  eteLocalRef(env,
1f60: 20 73 74 72 69 6e 67 29 3b 0a 0a 20 20 20 20 2f   string);..    /
1f70: 2a 0a 20 20 20 20 20 2a 20 52 65 74 68 72 6f 77  *.     * Rethrow
1f80: 20 70 65 6e 64 69 6e 67 20 4a 61 76 61 20 65 78   pending Java ex
1f90: 63 65 70 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 2f  ception..     */
1fa0: 0a 0a 20 20 20 20 69 66 20 28 65 78 63 65 70 74  ..    if (except
1fb0: 69 6f 6e 29 20 7b 0a 20 20 20 20 20 20 20 20 28  ion) {.        (
1fc0: 2a 65 6e 76 29 2d 3e 54 68 72 6f 77 28 65 6e 76  *env)->Throw(env
1fd0: 2c 20 65 78 63 65 70 74 69 6f 6e 29 3b 0a 20 20  , exception);.  
1fe0: 20 20 20 20 20 20 28 2a 65 6e 76 29 2d 3e 44 65        (*env)->De
1ff0: 6c 65 74 65 4c 6f 63 61 6c 52 65 66 28 65 6e 76  leteLocalRef(env
2000: 2c 20 65 78 63 65 70 74 69 6f 6e 29 3b 0a 20 20  , exception);.  
2010: 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d    }.}.../*. *---
2020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2060: 2d 2d 2d 0a 20 2a 0a 20 2a 20 4a 61 76 61 47 65  ---. *. * JavaGe
2070: 74 54 63 6c 4f 62 6a 20 2d 2d 0a 20 2a 0a 20 2a  tTclObj --. *. *
2080: 09 52 65 74 72 69 65 76 65 20 74 68 65 20 54 63  .Retrieve the Tc
2090: 6c 5f 4f 62 6a 20 74 68 61 74 20 63 6f 72 72 65  l_Obj that corre
20a0: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 67 69  sponds to the gi
20b0: 76 65 6e 20 4a 61 76 61 0a 20 2a 09 54 63 6c 4f  ven Java. *.TclO
20c0: 62 6a 65 63 74 2e 20 43 72 65 61 74 65 73 20 61  bject. Creates a
20d0: 20 6e 65 77 20 54 63 6c 5f 4f 62 6a 20 6f 66 20   new Tcl_Obj of 
20e0: 74 79 70 65 20 54 63 6c 4f 62 6a 65 63 74 20 77  type TclObject w
20f0: 69 74 68 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a  ith an internal.
2100: 20 2a 09 72 65 70 72 65 73 65 6e 74 61 74 69 6f   *.representatio
2110: 6e 20 74 68 61 74 20 70 6f 69 6e 74 73 20 61 74  n that points at
2120: 20 74 68 65 20 4a 61 76 61 20 6f 62 6a 65 63 74   the Java object
2130: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
2140: 0a 20 2a 09 52 65 74 75 72 6e 73 20 74 68 65 20  . *.Returns the 
2150: 54 63 6c 5f 4f 62 6a 20 74 68 61 74 20 63 6f 72  Tcl_Obj that cor
2160: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
2170: 54 63 6c 4f 62 6a 65 63 74 2e 0a 20 2a 0a 20 2a  TclObject.. *. *
2180: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
2190: 2a 09 41 64 64 73 20 61 20 72 65 66 65 72 65 6e  *.Adds a referen
21a0: 63 65 20 74 6f 20 74 68 65 20 54 63 6c 4f 62 6a  ce to the TclObj
21b0: 65 63 74 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  ect.. *. *------
21c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2200: 0a 20 2a 2f 0a 0a 54 63 6c 5f 4f 62 6a 2a 0a 4a  . */..Tcl_Obj*.J
2210: 61 76 61 47 65 74 54 63 6c 4f 62 6a 28 0a 20 20  avaGetTclObj(.  
2220: 20 20 4a 4e 49 45 6e 76 20 2a 65 6e 76 2c 09 09    JNIEnv *env,..
2230: 2f 2a 20 4a 61 76 61 20 65 6e 76 69 72 6f 6e 6d  /* Java environm
2240: 65 6e 74 2e 20 2a 2f 0a 20 20 20 20 6a 6f 62 6a  ent. */.    jobj
2250: 65 63 74 20 6f 62 6a 65 63 74 29 09 09 2f 2a 20  ect object)../* 
2260: 54 63 6c 4f 62 6a 65 63 74 2e 20 2a 2f 0a 7b 0a  TclObject. */.{.
2270: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a      Tcl_Obj *obj
2280: 50 74 72 3b 0a 20 20 20 20 6a 6c 6f 6e 67 20 6f  Ptr;.    jlong o
2290: 62 6a 52 65 66 3b 0a 20 20 20 20 4a 61 76 61 49  bjRef;.    JavaI
22a0: 6e 66 6f 2a 20 6a 63 61 63 68 65 20 3d 20 4a 61  nfo* jcache = Ja
22b0: 76 61 47 65 74 43 61 63 68 65 28 29 3b 0a 0a 20  vaGetCache();.. 
22c0: 20 20 20 69 66 20 28 28 2a 65 6e 76 29 2d 3e 45     if ((*env)->E
22d0: 78 63 65 70 74 69 6f 6e 4f 63 63 75 72 72 65 64  xceptionOccurred
22e0: 28 65 6e 76 29 29 20 7b 0a 09 28 2a 65 6e 76 29  (env)) {..(*env)
22f0: 2d 3e 45 78 63 65 70 74 69 6f 6e 44 65 73 63 72  ->ExceptionDescr
2300: 69 62 65 28 65 6e 76 29 3b 0a 09 54 63 6c 5f 50  ibe(env);..Tcl_P
2310: 61 6e 69 63 28 22 4a 61 76 61 47 65 74 54 63 6c  anic("JavaGetTcl
2320: 4f 62 6a 20 3a 20 75 6e 65 78 70 65 63 74 65 64  Obj : unexpected
2330: 20 70 65 6e 64 69 6e 67 20 65 78 63 65 70 74 69   pending excepti
2340: 6f 6e 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  on");.    }..   
2350: 20 6f 62 6a 52 65 66 20 3d 20 28 2a 65 6e 76 29   objRef = (*env)
2360: 2d 3e 43 61 6c 6c 4c 6f 6e 67 4d 65 74 68 6f 64  ->CallLongMethod
2370: 28 65 6e 76 2c 20 6f 62 6a 65 63 74 2c 20 6a 63  (env, object, jc
2380: 61 63 68 65 2d 3e 67 65 74 43 4f 62 6a 65 63 74  ache->getCObject
2390: 50 74 72 29 3b 0a 20 20 20 20 69 66 20 28 28 2a  Ptr);.    if ((*
23a0: 65 6e 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e 4f  env)->ExceptionO
23b0: 63 63 75 72 72 65 64 28 65 6e 76 29 29 20 7b 0a  ccurred(env)) {.
23c0: 09 28 2a 65 6e 76 29 2d 3e 45 78 63 65 70 74 69  .(*env)->Excepti
23d0: 6f 6e 44 65 73 63 72 69 62 65 28 65 6e 76 29 3b  onDescribe(env);
23e0: 0a 09 54 63 6c 5f 50 61 6e 69 63 28 22 4a 61 76  ..Tcl_Panic("Jav
23f0: 61 47 65 74 54 63 6c 4f 62 6a 20 3a 20 65 78 63  aGetTclObj : exc
2400: 65 70 74 69 6f 6e 20 69 6e 20 54 63 6c 4f 62 6a  eption in TclObj
2410: 65 63 74 2e 67 65 74 43 4f 62 6a 65 63 74 50 74  ect.getCObjectPt
2420: 72 28 29 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  r()");.    }..  
2430: 20 20 69 66 20 28 6f 62 6a 52 65 66 20 21 3d 20    if (objRef != 
2440: 30 29 20 7b 0a 09 2f 2a 0a 09 20 2a 20 54 68 69  0) {../*.. * Thi
2450: 73 20 69 73 20 65 69 74 68 65 72 20 61 20 54 63  s is either a Tc
2460: 6c 4c 69 73 74 20 6f 72 20 61 20 43 4f 62 6a 65  lList or a CObje
2470: 63 74 2c 20 63 6f 6e 76 65 72 74 20 74 6f 20 54  ct, convert to T
2480: 63 6c 5f 4f 62 6a 2a 2e 0a 09 20 2a 2f 0a 0a 09  cl_Obj*... */...
2490: 6f 62 6a 50 74 72 20 3d 20 2a 28 54 63 6c 5f 4f  objPtr = *(Tcl_O
24a0: 62 6a 2a 2a 29 26 6f 62 6a 52 65 66 3b 0a 0a 23  bj**)&objRef;..#
24b0: 69 66 64 65 66 20 54 43 4c 5f 4d 45 4d 5f 44 45  ifdef TCL_MEM_DE
24c0: 42 55 47 0a 09 69 66 20 28 6f 62 6a 50 74 72 2d  BUG..if (objPtr-
24d0: 3e 72 65 66 43 6f 75 6e 74 20 3d 3d 20 30 78 36  >refCount == 0x6
24e0: 31 36 31 36 31 36 31 29 20 7b 0a 09 20 20 20 20  1616161) {..    
24f0: 54 63 6c 5f 50 61 6e 69 63 28 22 4a 61 76 61 47  Tcl_Panic("JavaG
2500: 65 74 54 63 6c 4f 62 6a 20 3a 20 64 69 73 70 6f  etTclObj : dispo
2510: 73 65 64 20 6f 62 6a 65 63 74 22 29 3b 0a 09 7d  sed object");..}
2520: 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 20 65 6c  .#endif.    } el
2530: 73 65 20 7b 0a 09 2f 2a 0a 09 20 2a 20 54 68 69  se {../*.. * Thi
2540: 73 20 6f 62 6a 65 63 74 20 69 73 20 6f 66 20 61  s object is of a
2550: 6e 20 75 6e 6b 6e 6f 77 6e 20 74 79 70 65 20 73  n unknown type s
2560: 6f 20 77 65 20 63 72 65 61 74 65 20 61 20 6e 65  o we create a ne
2570: 77 20 54 63 6c 20 6f 62 6a 65 63 74 20 74 6f 0a  w Tcl object to.
2580: 09 20 2a 20 68 6f 6c 64 20 74 68 65 20 6f 62 6a  . * hold the obj
2590: 65 63 74 20 72 65 66 65 72 65 6e 63 65 2e 0a 09  ect reference...
25a0: 20 2a 2f 0a 0a 09 6f 62 6a 65 63 74 20 3d 20 28   */...object = (
25b0: 2a 65 6e 76 29 2d 3e 4e 65 77 47 6c 6f 62 61 6c  *env)->NewGlobal
25c0: 52 65 66 28 65 6e 76 2c 20 6f 62 6a 65 63 74 29  Ref(env, object)
25d0: 3b 0a 09 6f 62 6a 50 74 72 20 3d 20 54 63 6c 5f  ;..objPtr = Tcl_
25e0: 4e 65 77 4f 62 6a 28 29 3b 0a 09 6f 62 6a 50 74  NewObj();..objPt
25f0: 72 2d 3e 62 79 74 65 73 20 3d 20 4e 55 4c 4c 3b  r->bytes = NULL;
2600: 0a 09 6f 62 6a 50 74 72 2d 3e 74 79 70 65 50 74  ..objPtr->typePt
2610: 72 20 3d 20 26 74 63 6c 4f 62 6a 65 63 74 54 79  r = &tclObjectTy
2620: 70 65 3b 0a 09 6f 62 6a 50 74 72 2d 3e 69 6e 74  pe;..objPtr->int
2630: 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74 72 56  ernalRep.twoPtrV
2640: 61 6c 75 65 2e 70 74 72 32 20 3d 20 28 56 4f 49  alue.ptr2 = (VOI
2650: 44 2a 29 20 6f 62 6a 65 63 74 3b 0a 0a 09 2f 2a  D*) object;.../*
2660: 0a 09 20 2a 20 49 6e 63 72 65 6d 65 6e 74 20 74  .. * Increment t
2670: 68 65 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75  he reference cou
2680: 6e 74 20 6f 6e 20 74 68 65 20 54 63 6c 4f 62 6a  nt on the TclObj
2690: 65 63 74 2e 0a 09 20 2a 2f 0a 0a 09 28 2a 65 6e  ect... */...(*en
26a0: 76 29 2d 3e 43 61 6c 6c 56 6f 69 64 4d 65 74 68  v)->CallVoidMeth
26b0: 6f 64 28 65 6e 76 2c 20 6f 62 6a 65 63 74 2c 20  od(env, object, 
26c0: 6a 63 61 63 68 65 2d 3e 70 72 65 73 65 72 76 65  jcache->preserve
26d0: 29 3b 0a 09 69 66 20 28 28 2a 65 6e 76 29 2d 3e  );..if ((*env)->
26e0: 45 78 63 65 70 74 69 6f 6e 4f 63 63 75 72 72 65  ExceptionOccurre
26f0: 64 28 65 6e 76 29 29 20 7b 0a 09 20 20 20 20 28  d(env)) {..    (
2700: 2a 65 6e 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e  *env)->Exception
2710: 44 65 73 63 72 69 62 65 28 65 6e 76 29 3b 0a 09  Describe(env);..
2720: 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 22 4a      Tcl_Panic("J
2730: 61 76 61 47 65 74 54 63 6c 4f 62 6a 20 3a 20 65  avaGetTclObj : e
2740: 78 63 65 70 74 69 6f 6e 20 69 6e 20 54 63 6c 4f  xception in TclO
2750: 62 6a 65 63 74 2e 5f 70 72 65 73 65 72 76 65 28  bject._preserve(
2760: 29 22 29 3b 0a 09 7d 0a 20 20 20 20 7d 0a 20 20  )");..}.    }.  
2770: 20 20 72 65 74 75 72 6e 20 6f 62 6a 50 74 72 3b    return objPtr;
2780: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
2790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27d0: 0a 20 2a 0a 20 2a 20 4a 61 76 61 5f 74 63 6c 5f  . *. * Java_tcl_
27e0: 6c 61 6e 67 5f 43 4f 62 6a 65 63 74 5f 67 65 74  lang_CObject_get
27f0: 53 74 72 69 6e 67 20 2d 2d 0a 20 2a 0a 20 2a 09  String --. *. *.
2800: 52 65 74 72 69 65 76 65 20 74 68 65 20 73 74 72  Retrieve the str
2810: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
2820: 6f 6e 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74  on for an object
2830: 2e 0a 20 2a 0a 20 2a 20 43 6c 61 73 73 3a 20 20  .. *. * Class:  
2840: 20 20 20 74 63 6c 5f 6c 61 6e 67 5f 43 4f 62 6a     tcl_lang_CObj
2850: 65 63 74 0a 20 2a 20 4d 65 74 68 6f 64 3a 20 20  ect. * Method:  
2860: 20 20 67 65 74 53 74 72 69 6e 67 0a 20 2a 20 53    getString. * S
2870: 69 67 6e 61 74 75 72 65 3a 20 28 4a 29 4c 6a 61  ignature: (J)Lja
2880: 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 0a  va/lang/String;.
2890: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20   *. * Results:. 
28a0: 2a 09 52 65 74 75 72 6e 73 20 61 20 6e 65 77 20  *.Returns a new 
28b0: 4a 61 76 61 20 73 74 72 69 6e 67 2e 0a 20 2a 0a  Java string.. *.
28c0: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
28d0: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d  . *.None.. *. *-
28e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2920: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 6a 73 74 72 69  -----. */..jstri
2930: 6e 67 20 4a 4e 49 43 41 4c 4c 0a 4a 61 76 61 5f  ng JNICALL.Java_
2940: 74 63 6c 5f 6c 61 6e 67 5f 43 4f 62 6a 65 63 74  tcl_lang_CObject
2950: 5f 67 65 74 53 74 72 69 6e 67 28 0a 20 20 20 20  _getString(.    
2960: 4a 4e 49 45 6e 76 20 2a 65 6e 76 2c 09 09 2f 2a  JNIEnv *env,../*
2970: 20 4a 61 76 61 20 65 6e 76 69 72 6f 6e 6d 65 6e   Java environmen
2980: 74 2e 20 2a 2f 0a 20 20 20 20 6a 63 6c 61 73 73  t. */.    jclass
2990: 20 63 6c 61 73 73 2c 09 09 2f 2a 20 48 61 6e 64   class,../* Hand
29a0: 6c 65 20 74 6f 20 43 4f 62 6a 65 63 74 20 63 6c  le to CObject cl
29b0: 61 73 73 2e 20 2a 2f 0a 20 20 20 20 6a 6c 6f 6e  ass. */.    jlon
29c0: 67 20 6f 62 6a 29 09 09 09 2f 2a 20 56 61 6c 75  g obj).../* Valu
29d0: 65 20 6f 66 20 43 4f 62 6a 65 63 74 2e 6f 62 6a  e of CObject.obj
29e0: 50 74 72 2e 20 2a 2f 0a 7b 0a 20 20 20 20 54 63  Ptr. */.{.    Tc
29f0: 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 20 3d 20  l_Obj *objPtr = 
2a00: 2a 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 26 6f  *(Tcl_Obj **) &o
2a10: 62 6a 3b 0a 20 20 20 20 63 68 61 72 20 2a 73 74  bj;.    char *st
2a20: 72 3b 0a 20 20 20 20 6a 73 74 72 69 6e 67 20 72  r;.    jstring r
2a30: 65 73 75 6c 74 3b 0a 20 20 20 20 69 6e 74 20 6c  esult;.    int l
2a40: 65 6e 67 74 68 3b 0a 0a 20 20 20 20 69 66 20 28  ength;..    if (
2a50: 21 6f 62 6a 50 74 72 29 20 7b 0a 09 54 68 72 6f  !objPtr) {..Thro
2a60: 77 4e 75 6c 6c 50 6f 69 6e 74 65 72 45 78 63 65  wNullPointerExce
2a70: 70 74 69 6f 6e 28 65 6e 76 2c 20 4e 55 4c 4c 29  ption(env, NULL)
2a80: 3b 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a  ;..return NULL;.
2a90: 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 54 43      }..#ifdef TC
2aa0: 4c 5f 4d 45 4d 5f 44 45 42 55 47 0a 20 20 20 20  L_MEM_DEBUG.    
2ab0: 69 66 20 28 6f 62 6a 50 74 72 2d 3e 72 65 66 43  if (objPtr->refC
2ac0: 6f 75 6e 74 20 3d 3d 20 30 78 36 31 36 31 36 31  ount == 0x616161
2ad0: 36 31 29 20 7b 0a 09 54 63 6c 5f 50 61 6e 69 63  61) {..Tcl_Panic
2ae0: 28 22 4a 61 76 61 5f 74 63 6c 5f 6c 61 6e 67 5f  ("Java_tcl_lang_
2af0: 43 4f 62 6a 65 63 74 5f 67 65 74 53 74 72 69 6e  CObject_getStrin
2b00: 67 20 3a 20 64 69 73 70 6f 73 65 64 20 6f 62 6a  g : disposed obj
2b10: 65 63 74 22 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  ect");.    }.#en
2b20: 64 69 66 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  dif..    /*.    
2b30: 20 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 73   * Convert the s
2b40: 74 72 69 6e 67 20 72 65 70 20 69 6e 74 6f 20 61  tring rep into a
2b50: 20 55 6e 69 63 6f 64 65 20 73 74 72 69 6e 67 2e   Unicode string.
2b60: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 73 74  .     */..    st
2b70: 72 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  r = Tcl_GetStrin
2b80: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 50 74 72 2c  gFromObj(objPtr,
2b90: 20 26 6c 65 6e 67 74 68 29 3b 0a 20 20 20 20 69   &length);.    i
2ba0: 66 20 28 6c 65 6e 67 74 68 20 3e 20 30 29 20 7b  f (length > 0) {
2bb0: 0a 09 72 65 73 75 6c 74 20 3d 20 28 2a 65 6e 76  ..result = (*env
2bc0: 29 2d 3e 4e 65 77 53 74 72 69 6e 67 55 54 46 28  )->NewStringUTF(
2bd0: 65 6e 76 2c 20 73 74 72 29 3b 0a 20 20 20 20 7d  env, str);.    }
2be0: 20 65 6c 73 65 20 7b 0a 09 72 65 73 75 6c 74 20   else {..result 
2bf0: 3d 20 28 2a 65 6e 76 29 2d 3e 4e 65 77 53 74 72  = (*env)->NewStr
2c00: 69 6e 67 28 65 6e 76 2c 20 4e 55 4c 4c 2c 20 30  ing(env, NULL, 0
2c10: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
2c20: 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0c 0a  urn result;.}...
2c30: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
2c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
2c80: 2a 20 4a 61 76 61 5f 74 63 6c 5f 6c 61 6e 67 5f  * Java_tcl_lang_
2c90: 43 4f 62 6a 65 63 74 5f 69 6e 63 72 52 65 66 43  CObject_incrRefC
2ca0: 6f 75 6e 74 20 2d 2d 0a 20 2a 0a 20 2a 09 49 6e  ount --. *. *.In
2cb0: 63 72 65 6d 65 6e 74 20 74 68 65 20 72 65 66 65  crement the refe
2cc0: 72 65 6e 63 65 20 63 6f 75 6e 74 20 6f 66 20 74  rence count of t
2cd0: 68 65 20 67 69 76 65 6e 20 6f 62 6a 65 63 74 2e  he given object.
2ce0: 0a 20 2a 0a 20 2a 20 43 6c 61 73 73 3a 20 20 20  . *. * Class:   
2cf0: 20 20 74 63 6c 5f 6c 61 6e 67 5f 43 4f 62 6a 65    tcl_lang_CObje
2d00: 63 74 0a 20 2a 20 4d 65 74 68 6f 64 3a 20 20 20  ct. * Method:   
2d10: 20 69 6e 63 72 52 65 66 43 6f 75 6e 74 0a 20 2a   incrRefCount. *
2d20: 20 53 69 67 6e 61 74 75 72 65 3a 20 28 4a 29 56   Signature: (J)V
2d30: 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a  . *. * Results:.
2d40: 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53   *.None.. *. * S
2d50: 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09  ide effects:. *.
2d60: 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  None.. *. *-----
2d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2db0: 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 20 4a 4e 49 43  -. */..void JNIC
2dc0: 41 4c 4c 0a 4a 61 76 61 5f 74 63 6c 5f 6c 61 6e  ALL.Java_tcl_lan
2dd0: 67 5f 43 4f 62 6a 65 63 74 5f 69 6e 63 72 52 65  g_CObject_incrRe
2de0: 66 43 6f 75 6e 74 28 0a 20 20 20 20 4a 4e 49 45  fCount(.    JNIE
2df0: 6e 76 20 2a 65 6e 76 2c 09 09 2f 2a 20 4a 61 76  nv *env,../* Jav
2e00: 61 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 20 2a  a environment. *
2e10: 2f 0a 20 20 20 20 6a 63 6c 61 73 73 20 63 6c 61  /.    jclass cla
2e20: 73 73 2c 09 09 2f 2a 20 48 61 6e 64 6c 65 20 74  ss,../* Handle t
2e30: 6f 20 43 4f 62 6a 65 63 74 20 63 6c 61 73 73 2e  o CObject class.
2e40: 20 2a 2f 0a 20 20 20 20 6a 6c 6f 6e 67 20 6f 62   */.    jlong ob
2e50: 6a 29 09 09 09 2f 2a 20 56 61 6c 75 65 20 6f 66  j).../* Value of
2e60: 20 43 4f 62 6a 65 63 74 2e 6f 62 6a 50 74 72 2e   CObject.objPtr.
2e70: 20 2a 2f 0a 7b 0a 20 20 20 20 54 63 6c 5f 4f 62   */.{.    Tcl_Ob
2e80: 6a 20 2a 6f 62 6a 50 74 72 20 3d 20 2a 28 54 63  j *objPtr = *(Tc
2e90: 6c 5f 4f 62 6a 20 2a 2a 29 20 26 6f 62 6a 3b 0a  l_Obj **) &obj;.
2ea0: 0a 20 20 20 20 69 66 20 28 21 6f 62 6a 50 74 72  .    if (!objPtr
2eb0: 29 20 7b 0a 09 54 68 72 6f 77 4e 75 6c 6c 50 6f  ) {..ThrowNullPo
2ec0: 69 6e 74 65 72 45 78 63 65 70 74 69 6f 6e 28 65  interException(e
2ed0: 6e 76 2c 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75  nv, NULL);..retu
2ee0: 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63  rn;.    }.    Tc
2ef0: 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 6f  l_IncrRefCount(o
2f00: 62 6a 50 74 72 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20  bjPtr);.}.../*. 
2f10: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
2f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f50: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4a 61  -------. *. * Ja
2f60: 76 61 5f 74 63 6c 5f 6c 61 6e 67 5f 43 4f 62 6a  va_tcl_lang_CObj
2f70: 65 63 74 5f 64 65 63 72 52 65 66 43 6f 75 6e 74  ect_decrRefCount
2f80: 20 2d 2d 0a 20 2a 0a 20 2a 09 44 65 63 72 65 6d   --. *. *.Decrem
2f90: 65 6e 74 20 74 68 65 20 72 65 66 65 72 65 6e 63  ent the referenc
2fa0: 65 20 63 6f 75 6e 74 20 66 6f 72 20 74 68 65 20  e count for the 
2fb0: 67 69 76 65 6e 20 6f 62 6a 65 63 74 2e 0a 20 2a  given object.. *
2fc0: 0a 20 2a 20 43 6c 61 73 73 3a 20 20 20 20 20 74  . * Class:     t
2fd0: 63 6c 5f 6c 61 6e 67 5f 43 4f 62 6a 65 63 74 0a  cl_lang_CObject.
2fe0: 20 2a 20 4d 65 74 68 6f 64 3a 20 20 20 20 64 65   * Method:    de
2ff0: 63 72 52 65 66 43 6f 75 6e 74 0a 20 2a 20 53 69  crRefCount. * Si
3000: 67 6e 61 74 75 72 65 3a 20 28 4a 29 56 0a 20 2a  gnature: (J)V. *
3010: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09  . * Results:. *.
3020: 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  None.. *. * Side
3030: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e   effects:. *.Non
3040: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  e.. *. *--------
3050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
3090: 2a 2f 0a 0a 76 6f 69 64 20 4a 4e 49 43 41 4c 4c  */..void JNICALL
30a0: 20 4a 61 76 61 5f 74 63 6c 5f 6c 61 6e 67 5f 43   Java_tcl_lang_C
30b0: 4f 62 6a 65 63 74 5f 64 65 63 72 52 65 66 43 6f  Object_decrRefCo
30c0: 75 6e 74 28 0a 20 20 20 20 4a 4e 49 45 6e 76 20  unt(.    JNIEnv 
30d0: 2a 65 6e 76 2c 09 09 2f 2a 20 4a 61 76 61 20 65  *env,../* Java e
30e0: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 20 2a 2f 0a 20  nvironment. */. 
30f0: 20 20 20 6a 63 6c 61 73 73 20 63 6c 61 73 73 2c     jclass class,
3100: 09 09 2f 2a 20 48 61 6e 64 6c 65 20 74 6f 20 43  ../* Handle to C
3110: 4f 62 6a 65 63 74 20 63 6c 61 73 73 2e 20 2a 2f  Object class. */
3120: 0a 20 20 20 20 6a 6c 6f 6e 67 20 6f 62 6a 29 09  .    jlong obj).
3130: 09 09 2f 2a 20 56 61 6c 75 65 20 6f 66 20 43 4f  ../* Value of CO
3140: 62 6a 65 63 74 2e 6f 62 6a 50 74 72 2e 20 2a 2f  bject.objPtr. */
3150: 0a 7b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  .{.    Tcl_Obj *
3160: 6f 62 6a 50 74 72 20 3d 20 2a 28 54 63 6c 5f 4f  objPtr = *(Tcl_O
3170: 62 6a 20 2a 2a 29 20 26 6f 62 6a 3b 0a 0a 20 20  bj **) &obj;..  
3180: 20 20 69 66 20 28 21 6f 62 6a 50 74 72 29 20 7b    if (!objPtr) {
3190: 0a 09 54 68 72 6f 77 4e 75 6c 6c 50 6f 69 6e 74  ..ThrowNullPoint
31a0: 65 72 45 78 63 65 70 74 69 6f 6e 28 65 6e 76 2c  erException(env,
31b0: 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e 3b   NULL);..return;
31c0: 0a 20 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 44  .    }.    Tcl_D
31d0: 65 63 72 52 65 66 43 6f 75 6e 74 28 6f 62 6a 50  ecrRefCount(objP
31e0: 74 72 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  tr);.}.../*. *--
31f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3230: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4a 61 76 61 5f  ----. *. * Java_
3240: 74 63 6c 5f 6c 61 6e 67 5f 43 4f 62 6a 65 63 74  tcl_lang_CObject
3250: 5f 6d 61 6b 65 52 65 66 20 2d 2d 0a 20 2a 0a 20  _makeRef --. *. 
3260: 2a 09 43 6f 6e 76 65 72 74 20 74 68 65 20 54 63  *.Convert the Tc
3270: 6c 5f 4f 62 6a 20 69 6e 74 6f 20 61 20 54 63 6c  l_Obj into a Tcl
3280: 4f 62 6a 65 63 74 2e 0a 20 2a 0a 20 2a 20 43 6c  Object.. *. * Cl
3290: 61 73 73 3a 20 20 20 20 20 74 63 6c 5f 6c 61 6e  ass:     tcl_lan
32a0: 67 5f 43 4f 62 6a 65 63 74 0a 20 2a 20 4d 65 74  g_CObject. * Met
32b0: 68 6f 64 3a 20 20 20 20 6d 61 6b 65 52 65 66 0a  hod:    makeRef.
32c0: 20 2a 20 53 69 67 6e 61 74 75 72 65 3a 20 28 4a   * Signature: (J
32d0: 4c 74 63 6c 2f 6c 61 6e 67 2f 54 63 6c 4f 62 6a  Ltcl/lang/TclObj
32e0: 65 63 74 3b 29 56 0a 20 2a 0a 20 2a 20 52 65 73  ect;)V. *. * Res
32f0: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
3300: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
3310: 73 3a 0a 20 2a 09 4d 6f 64 69 66 69 65 73 20 74  s:. *.Modifies t
3320: 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
3330: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
3340: 65 20 6f 62 6a 65 63 74 2e 0a 20 2a 0a 20 2a 2d  e object.. *. *-
3350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3390: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 20  -----. */..void 
33a0: 4a 4e 49 43 41 4c 4c 0a 4a 61 76 61 5f 74 63 6c  JNICALL.Java_tcl
33b0: 5f 6c 61 6e 67 5f 43 4f 62 6a 65 63 74 5f 6d 61  _lang_CObject_ma
33c0: 6b 65 52 65 66 28 0a 20 20 20 20 4a 4e 49 45 6e  keRef(.    JNIEn
33d0: 76 20 2a 65 6e 76 2c 09 09 2f 2a 20 4a 61 76 61  v *env,../* Java
33e0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 20 2a 2f   environment. */
33f0: 0a 20 20 20 20 6a 63 6c 61 73 73 20 63 6c 61 73  .    jclass clas
3400: 73 2c 09 09 2f 2a 20 48 61 6e 64 6c 65 20 74 6f  s,../* Handle to
3410: 20 43 4f 62 6a 65 63 74 20 63 6c 61 73 73 2e 20   CObject class. 
3420: 2a 2f 0a 20 20 20 20 6a 6c 6f 6e 67 20 6f 62 6a  */.    jlong obj
3430: 2c 09 09 09 2f 2a 20 56 61 6c 75 65 20 6f 66 20  ,.../* Value of 
3440: 43 4f 62 6a 65 63 74 2e 6f 62 6a 50 74 72 2e 20  CObject.objPtr. 
3450: 2a 2f 0a 20 20 20 20 6a 6f 62 6a 65 63 74 20 6f  */.    jobject o
3460: 62 6a 65 63 74 29 09 09 2f 2a 20 48 61 6e 64 6c  bject)../* Handl
3470: 65 20 74 6f 20 74 68 65 20 54 63 6c 4f 62 6a 65  e to the TclObje
3480: 63 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 54 63 6c  ct. */.{.    Tcl
3490: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 20 3d 20 2a  _Obj *objPtr = *
34a0: 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 20 26 6f 62  (Tcl_Obj **) &ob
34b0: 6a 3b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 54 79  j;.    Tcl_ObjTy
34c0: 70 65 20 2a 6f 6c 64 54 79 70 65 50 74 72 3b 0a  pe *oldTypePtr;.
34d0: 20 20 20 20 69 6e 74 20 6e 6f 6e 5f 74 63 6c 6f      int non_tclo
34e0: 62 6a 65 63 74 5f 63 6d 64 20 3d 20 30 3b 0a 0a  bject_cmd = 0;..
34f0: 20 20 20 20 69 66 20 28 21 6f 62 6a 50 74 72 29      if (!objPtr)
3500: 20 7b 0a 09 54 68 72 6f 77 4e 75 6c 6c 50 6f 69   {..ThrowNullPoi
3510: 6e 74 65 72 45 78 63 65 70 74 69 6f 6e 28 65 6e  nterException(en
3520: 76 2c 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72  v, NULL);..retur
3530: 6e 3b 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  n;.    }..#ifdef
3540: 20 54 43 4c 5f 4d 45 4d 5f 44 45 42 55 47 0a 20   TCL_MEM_DEBUG. 
3550: 20 20 20 69 66 20 28 6f 62 6a 50 74 72 2d 3e 72     if (objPtr->r
3560: 65 66 43 6f 75 6e 74 20 3d 3d 20 30 78 36 31 36  efCount == 0x616
3570: 31 36 31 36 31 29 20 7b 0a 09 54 63 6c 5f 50 61  16161) {..Tcl_Pa
3580: 6e 69 63 28 22 4a 61 76 61 5f 74 63 6c 5f 6c 61  nic("Java_tcl_la
3590: 6e 67 5f 43 4f 62 6a 65 63 74 5f 6d 61 6b 65 52  ng_CObject_makeR
35a0: 65 66 20 3a 20 64 69 73 70 6f 73 65 64 20 6f 62  ef : disposed ob
35b0: 6a 65 63 74 22 29 3b 0a 20 20 20 20 7d 0a 23 65  ject");.    }.#e
35c0: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  ndif..    /*.   
35d0: 20 20 2a 20 46 72 65 65 20 74 68 65 20 6f 6c 64    * Free the old
35e0: 20 69 6e 74 65 72 6e 61 6c 52 65 70 20 62 65 66   internalRep bef
35f0: 6f 72 65 20 73 65 74 74 69 6e 67 20 74 68 65 20  ore setting the 
3600: 6e 65 77 20 6f 6e 65 2e 0a 20 20 20 20 20 2a 20  new one..     * 
3610: 57 61 74 63 68 20 66 6f 72 20 74 68 65 20 73 70  Watch for the sp
3620: 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 61 20  ecial case of a 
3630: 63 6f 6d 6d 61 6e 64 20 69 6e 74 65 72 6e 61 6c  command internal
3640: 20 72 65 70 0a 20 20 20 20 20 2a 20 74 68 61 74   rep.     * that
3650: 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
3660: 20 72 65 66 20 74 6f 20 61 20 54 63 6c 4f 62 6a   ref to a TclObj
3670: 65 63 74 2e 20 57 65 20 61 76 6f 69 64 0a 20 20  ect. We avoid.  
3680: 20 20 20 2a 20 66 72 65 65 69 6e 67 20 74 68 65     * freeing the
3690: 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 20 61 6e   internal rep an
36a0: 64 20 61 64 64 20 61 20 72 65 66 20 69 6e 20 74  d add a ref in t
36b0: 68 61 74 20 63 61 73 65 2e 0a 20 20 20 20 20 2a  hat case..     *
36c0: 2f 0a 0a 20 20 20 20 69 66 20 28 28 6f 62 6a 50  /..    if ((objP
36d0: 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 63  tr->typePtr == c
36e0: 6d 64 54 79 70 65 50 74 72 29 20 26 26 0a 09 20  mdTypePtr) &&.. 
36f0: 20 20 20 28 6f 62 6a 50 74 72 2d 3e 69 6e 74 65     (objPtr->inte
3700: 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74 72 56 61  rnalRep.twoPtrVa
3710: 6c 75 65 2e 70 74 72 32 20 3d 3d 20 4e 55 4c 4c  lue.ptr2 == NULL
3720: 29 29 20 7b 0a 09 6e 6f 6e 5f 74 63 6c 6f 62 6a  )) {..non_tclobj
3730: 65 63 74 5f 63 6d 64 20 3d 20 31 3b 0a 20 20 20  ect_cmd = 1;.   
3740: 20 7d 0a 0a 20 20 20 20 6f 6c 64 54 79 70 65 50   }..    oldTypeP
3750: 74 72 20 3d 20 28 54 63 6c 5f 4f 62 6a 54 79 70  tr = (Tcl_ObjTyp
3760: 65 20 2a 29 20 6f 62 6a 50 74 72 2d 3e 74 79 70  e *) objPtr->typ
3770: 65 50 74 72 3b 0a 20 20 20 20 69 66 20 28 28 6f  ePtr;.    if ((o
3780: 6c 64 54 79 70 65 50 74 72 20 21 3d 20 4e 55 4c  ldTypePtr != NUL
3790: 4c 29 20 26 26 0a 09 20 20 20 20 28 6f 6c 64 54  L) &&..    (oldT
37a0: 79 70 65 50 74 72 2d 3e 66 72 65 65 49 6e 74 52  ypePtr->freeIntR
37b0: 65 70 50 72 6f 63 20 21 3d 20 4e 55 4c 4c 29 20  epProc != NULL) 
37c0: 26 26 0a 09 20 20 20 20 21 6e 6f 6e 5f 74 63 6c  &&..    !non_tcl
37d0: 6f 62 6a 65 63 74 5f 63 6d 64 29 20 7b 0a 09 6f  object_cmd) {..o
37e0: 6c 64 54 79 70 65 50 74 72 2d 3e 66 72 65 65 49  ldTypePtr->freeI
37f0: 6e 74 52 65 70 50 72 6f 63 28 6f 62 6a 50 74 72  ntRepProc(objPtr
3800: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6f 62  );.    }..    ob
3810: 6a 65 63 74 20 3d 20 28 2a 65 6e 76 29 2d 3e 4e  ject = (*env)->N
3820: 65 77 47 6c 6f 62 61 6c 52 65 66 28 65 6e 76 2c  ewGlobalRef(env,
3830: 20 6f 62 6a 65 63 74 29 3b 0a 20 20 20 20 69 66   object);.    if
3840: 20 28 21 6e 6f 6e 5f 74 63 6c 6f 62 6a 65 63 74   (!non_tclobject
3850: 5f 63 6d 64 29 0a 09 6f 62 6a 50 74 72 2d 3e 74  _cmd)..objPtr->t
3860: 79 70 65 50 74 72 20 3d 20 26 74 63 6c 4f 62 6a  ypePtr = &tclObj
3870: 65 63 74 54 79 70 65 3b 0a 20 20 20 20 6f 62 6a  ectType;.    obj
3880: 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70  Ptr->internalRep
3890: 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e 70 74 72  .twoPtrValue.ptr
38a0: 32 20 3d 20 28 56 4f 49 44 2a 29 20 6f 62 6a 65  2 = (VOID*) obje
38b0: 63 74 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  ct;..    /*.    
38c0: 20 2a 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20   * Note that we 
38d0: 64 6f 6e 27 74 20 63 68 61 6e 67 65 20 74 68 65  don't change the
38e0: 20 54 63 6c 4f 62 6a 65 63 74 20 72 65 66 20 63   TclObject ref c
38f0: 6f 75 6e 74 20 6f 72 0a 20 20 20 20 20 2a 20 74  ount or.     * t
3900: 68 65 20 54 63 6c 5f 4f 62 6a 20 72 65 66 20 63  he Tcl_Obj ref c
3910: 6f 75 6e 74 20 68 65 72 65 2e 20 57 65 20 65 78  ount here. We ex
3920: 70 65 63 74 20 74 68 61 74 20 46 72 65 65 54 63  pect that FreeTc
3930: 6c 4f 62 6a 65 63 74 0a 20 20 20 20 20 2a 20 77  lObject.     * w
3940: 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 20 77  ill be invoked w
3950: 68 65 6e 20 74 68 65 20 72 65 66 20 63 6f 75 6e  hen the ref coun
3960: 74 20 6f 66 20 74 68 69 73 20 54 63 6c 5f 4f 62  t of this Tcl_Ob
3970: 6a 0a 20 20 20 20 20 2a 20 72 65 61 63 68 65 73  j.     * reaches
3980: 20 7a 65 72 6f 2c 20 61 6e 64 20 61 20 43 4f 62   zero, and a COb
3990: 6a 65 63 74 20 62 65 67 69 6e 73 20 6c 69 66 65  ject begins life
39a0: 20 77 69 74 68 20 61 0a 20 20 20 20 20 2a 20 72   with a.     * r
39b0: 65 66 20 63 6f 75 6e 74 20 6f 66 20 31 2c 20 73  ef count of 1, s
39c0: 6f 20 77 65 20 61 72 65 20 63 6f 76 65 72 65 64  o we are covered
39d0: 2e 0a 20 20 20 20 20 2a 2f 0a 7d 0a 0c 0a 2f 2a  ..     */.}.../*
39e0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
39f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
3a30: 4a 61 76 61 42 72 65 61 6b 52 65 66 20 2d 2d 0a  JavaBreakRef --.
3a40: 20 2a 0a 20 2a 09 43 68 65 63 6b 20 74 6f 20 73   *. *.Check to s
3a50: 65 65 20 69 66 20 61 20 54 63 6c 5f 4f 62 6a 20  ee if a Tcl_Obj 
3a60: 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 76 61  contains an inva
3a70: 6c 69 64 0a 20 2a 09 72 65 66 20 74 6f 20 61 20  lid. *.ref to a 
3a80: 54 63 6c 4f 62 6a 65 63 74 20 74 68 61 74 20 68  TclObject that h
3a90: 61 73 20 61 20 43 4f 62 6a 65 63 74 20 6f 72 20  as a CObject or 
3aa0: 54 63 6c 4c 69 73 74 0a 20 2a 09 69 6e 74 65 72  TclList. *.inter
3ab0: 6e 61 6c 20 72 65 70 2e 20 54 68 69 73 20 6d 65  nal rep. This me
3ac0: 74 68 6f 64 20 62 72 65 61 6b 73 20 73 75 63 68  thod breaks such
3ad0: 20 61 20 72 65 66 20 62 79 0a 20 2a 09 73 65 74   a ref by. *.set
3ae0: 74 69 6e 67 20 74 68 65 20 69 6e 74 65 72 6e 61  ting the interna
3af0: 6c 20 72 65 70 20 66 6f 72 20 74 68 65 20 54 63  l rep for the Tc
3b00: 6c 5f 4f 62 6a 20 74 6f 0a 20 2a 09 61 20 73 74  l_Obj to. *.a st
3b10: 72 69 6e 67 20 6f 72 20 6c 69 73 74 20 72 65 70  ring or list rep
3b20: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
3b30: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20  . *.None.. *. * 
3b40: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
3b50: 09 4d 6f 64 69 66 69 65 73 20 74 68 65 20 69 6e  .Modifies the in
3b60: 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
3b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 63 6c  ation of the Tcl
3b80: 5f 4f 62 6a 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  _Obj.. *. *-----
3b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bd0: 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 4a 61 76 61  -. */..void.Java
3be0: 42 72 65 61 6b 52 65 66 28 0a 20 20 20 20 4a 4e  BreakRef(.    JN
3bf0: 49 45 6e 76 20 2a 65 6e 76 2c 09 09 2f 2a 20 4a  IEnv *env,../* J
3c00: 61 76 61 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e  ava environment.
3c10: 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20   */.    Tcl_Obj 
3c20: 2a 6f 62 6a 50 74 72 29 09 09 2f 2a 20 4f 62 6a  *objPtr)../* Obj
3c30: 65 63 74 20 74 6f 20 63 68 65 63 6b 2e 20 2a 2f  ect to check. */
3c40: 0a 7b 0a 20 20 20 20 6a 6f 62 6a 65 63 74 20 6f  .{.    jobject o
3c50: 62 6a 65 63 74 3b 0a 20 20 20 20 69 6e 74 20 69  bject;.    int i
3c60: 73 54 63 6c 4c 69 73 74 2c 20 69 73 43 4f 62 6a  sTclList, isCObj
3c70: 65 63 74 2c 20 64 75 6d 6d 79 3b 0a 20 20 20 20  ect, dummy;.    
3c80: 69 6e 74 20 69 6e 73 74 3b 0a 20 20 20 20 4a 61  int inst;.    Ja
3c90: 76 61 49 6e 66 6f 2a 20 6a 63 61 63 68 65 20 3d  vaInfo* jcache =
3ca0: 20 4a 61 76 61 47 65 74 43 61 63 68 65 28 29 3b   JavaGetCache();
3cb0: 0a 0a 23 69 66 64 65 66 20 54 43 4c 5f 4d 45 4d  ..#ifdef TCL_MEM
3cc0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 20 28 6f  _DEBUG.    if (o
3cd0: 62 6a 50 74 72 2d 3e 72 65 66 43 6f 75 6e 74 20  bjPtr->refCount 
3ce0: 3d 3d 20 30 78 36 31 36 31 36 31 36 31 29 20 7b  == 0x61616161) {
3cf0: 0a 09 54 63 6c 5f 50 61 6e 69 63 28 22 4a 61 76  ..Tcl_Panic("Jav
3d00: 61 42 72 65 61 6b 52 65 66 20 3a 20 64 69 73 70  aBreakRef : disp
3d10: 6f 73 65 64 20 6f 62 6a 65 63 74 22 29 3b 0a 20  osed object");. 
3d20: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
3d30: 20 69 66 20 28 28 6f 62 6a 50 74 72 2d 3e 74 79   if ((objPtr->ty
3d40: 70 65 50 74 72 20 3d 3d 20 26 74 63 6c 4f 62 6a  pePtr == &tclObj
3d50: 65 63 74 54 79 70 65 29 0a 20 20 20 20 20 20 20  ectType).       
3d60: 20 20 20 20 20 7c 7c 20 28 28 6f 62 6a 50 74 72       || ((objPtr
3d70: 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 63 6d 64  ->typePtr == cmd
3d80: 54 79 70 65 50 74 72 29 20 26 26 0a 20 20 20 20  TypePtr) &&.    
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da0: 28 6f 62 6a 50 74 72 2d 3e 69 6e 74 65 72 6e 61  (objPtr->interna
3db0: 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65  lRep.twoPtrValue
3dc0: 2e 70 74 72 32 29 20 21 3d 20 4e 55 4c 4c 29 29  .ptr2) != NULL))
3dd0: 20 7b 0a 09 6f 62 6a 65 63 74 20 3d 20 28 6a 6f   {..object = (jo
3de0: 62 6a 65 63 74 29 28 6f 62 6a 50 74 72 2d 3e 69  bject)(objPtr->i
3df0: 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74  nternalRep.twoPt
3e00: 72 56 61 6c 75 65 2e 70 74 72 32 29 3b 0a 09 69  rValue.ptr2);..i
3e10: 6e 73 74 20 3d 20 28 2a 65 6e 76 29 2d 3e 43 61  nst = (*env)->Ca
3e20: 6c 6c 49 6e 74 4d 65 74 68 6f 64 28 65 6e 76 2c  llIntMethod(env,
3e30: 20 6f 62 6a 65 63 74 2c 20 6a 63 61 63 68 65 2d   object, jcache-
3e40: 3e 67 65 74 43 4f 62 6a 65 63 74 49 6e 73 74 29  >getCObjectInst)
3e50: 3b 0a 09 69 66 20 28 28 2a 65 6e 76 29 2d 3e 45  ;..if ((*env)->E
3e60: 78 63 65 70 74 69 6f 6e 4f 63 63 75 72 72 65 64  xceptionOccurred
3e70: 28 65 6e 76 29 29 20 7b 0a 09 20 20 20 20 28 2a  (env)) {..    (*
3e80: 65 6e 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e 44  env)->ExceptionD
3e90: 65 73 63 72 69 62 65 28 65 6e 76 29 3b 0a 09 20  escribe(env);.. 
3ea0: 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 22 4a 61     Tcl_Panic("Ja
3eb0: 76 61 42 72 65 61 6b 52 65 66 20 3a 20 65 78 63  vaBreakRef : exc
3ec0: 65 70 74 69 6f 6e 20 69 6e 20 54 63 6c 4f 62 6a  eption in TclObj
3ed0: 65 63 74 2e 67 65 74 43 4f 62 6a 65 63 74 49 6e  ect.getCObjectIn
3ee0: 73 74 28 29 22 29 3b 0a 09 7d 0a 09 2f 2a 20 43  st()");..}../* C
3ef0: 6f 6e 73 74 61 6e 74 73 20 72 65 74 75 72 6e 65  onstants returne
3f00: 64 20 62 79 20 67 65 74 43 4f 62 6a 65 63 74 49  d by getCObjectI
3f10: 6e 73 74 28 29 20 74 6f 20 69 6e 64 69 63 61 74  nst() to indicat
3f20: 65 20 74 79 70 65 2e 20 2a 2f 0a 09 69 73 43 4f  e type. */..isCO
3f30: 62 6a 65 63 74 20 3d 20 28 69 6e 73 74 20 3d 3d  bject = (inst ==
3f40: 20 31 29 3b 0a 09 69 73 54 63 6c 4c 69 73 74 20   1);..isTclList 
3f50: 3d 20 28 69 6e 73 74 20 3d 3d 20 32 29 3b 0a 0a  = (inst == 2);..
3f60: 09 69 66 20 28 69 73 54 63 6c 4c 69 73 74 29 20  .if (isTclList) 
3f70: 7b 0a 09 20 20 20 20 2f 2a 66 70 72 69 6e 74 66  {..    /*fprintf
3f80: 28 73 74 64 65 72 72 2c 20 22 62 72 65 61 6b 69  (stderr, "breaki
3f90: 6e 67 20 72 65 66 20 66 6f 72 20 54 63 6c 4c 69  ng ref for TclLi
3fa0: 73 74 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 54 63  st \"%s\"\n", Tc
3fb0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 50  l_GetString(objP
3fc0: 74 72 29 29 3b 2a 2f 0a 09 20 20 20 20 54 63 6c  tr));*/..    Tcl
3fd0: 5f 4c 69 73 74 4f 62 6a 4c 65 6e 67 74 68 28 28  _ListObjLength((
3fe0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 20 4e 55  Tcl_Interp *) NU
3ff0: 4c 4c 2c 20 6f 62 6a 50 74 72 2c 20 26 64 75 6d  LL, objPtr, &dum
4000: 6d 79 29 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20  my);..} else if 
4010: 28 69 73 43 4f 62 6a 65 63 74 29 20 7b 0a 09 20  (isCObject) {.. 
4020: 20 20 20 2f 2a 66 70 72 69 6e 74 66 28 73 74 64     /*fprintf(std
4030: 65 72 72 2c 20 22 62 72 65 61 6b 69 6e 67 20 72  err, "breaking r
4040: 65 66 20 66 6f 72 20 53 74 72 69 6e 67 20 5c 22  ef for String \"
4050: 25 73 5c 22 5c 6e 22 2c 20 54 63 6c 5f 47 65 74  %s\"\n", Tcl_Get
4060: 53 74 72 69 6e 67 28 6f 62 6a 50 74 72 29 29 3b  String(objPtr));
4070: 2a 2f 0a 09 20 20 20 20 54 63 6c 5f 47 65 74 43  */..    Tcl_GetC
4080: 68 61 72 4c 65 6e 67 74 68 28 6f 62 6a 50 74 72  harLength(objPtr
4090: 29 3b 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0c 0a  );..}.    }.}...
40a0: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
40b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
40c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
40d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
40e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
40f0: 2a 20 4a 61 76 61 5f 74 63 6c 5f 6c 61 6e 67 5f  * Java_tcl_lang_
4100: 43 4f 62 6a 65 63 74 5f 6e 65 77 43 4f 62 6a 65  CObject_newCObje
4110: 63 74 20 2d 2d 0a 20 2a 0a 20 2a 09 41 6c 6c 6f  ct --. *. *.Allo
4120: 63 61 74 65 20 61 20 6e 65 77 20 54 63 6c 5f 4f  cate a new Tcl_O
4130: 62 6a 20 77 69 74 68 20 74 68 65 20 67 69 76 65  bj with the give
4140: 6e 20 73 74 72 69 6e 67 20 72 65 70 2e 0a 20 2a  n string rep.. *
4150: 0a 20 2a 20 43 6c 61 73 73 3a 20 20 20 20 20 74  . * Class:     t
4160: 63 6c 5f 6c 61 6e 67 5f 43 4f 62 6a 65 63 74 0a  cl_lang_CObject.
4170: 20 2a 20 4d 65 74 68 6f 64 3a 20 20 20 20 6e 65   * Method:    ne
4180: 77 43 4f 62 6a 65 63 74 0a 20 2a 20 53 69 67 6e  wCObject. * Sign
4190: 61 74 75 72 65 3a 20 28 4c 6a 61 76 61 2f 6c 61  ature: (Ljava/la
41a0: 6e 67 2f 53 74 72 69 6e 67 3b 29 4a 0a 20 2a 0a  ng/String;)J. *.
41b0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 52   * Results:. *.R
41c0: 65 74 75 72 6e 73 20 74 68 65 20 61 64 64 72 65  eturns the addre
41d0: 73 73 20 6f 66 20 74 68 65 20 6e 65 77 20 54 63  ss of the new Tc
41e0: 6c 5f 4f 62 6a 20 77 69 74 68 20 72 65 66 63 6f  l_Obj with refco
41f0: 75 6e 74 20 6f 66 20 30 2e 0a 20 2a 0a 20 2a 20  unt of 0.. *. * 
4200: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
4210: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d  .None.. *. *----
4220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4260: 2d 2d 0a 20 2a 2f 0a 0a 6a 6c 6f 6e 67 20 4a 4e  --. */..jlong JN
4270: 49 43 41 4c 4c 0a 4a 61 76 61 5f 74 63 6c 5f 6c  ICALL.Java_tcl_l
4280: 61 6e 67 5f 43 4f 62 6a 65 63 74 5f 6e 65 77 43  ang_CObject_newC
4290: 4f 62 6a 65 63 74 28 0a 20 20 20 20 4a 4e 49 45  Object(.    JNIE
42a0: 6e 76 20 2a 65 6e 76 2c 09 09 2f 2a 20 4a 61 76  nv *env,../* Jav
42b0: 61 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 20 2a  a environment. *
42c0: 2f 0a 20 20 20 20 6a 63 6c 61 73 73 20 63 6c 61  /.    jclass cla
42d0: 73 73 2c 09 09 2f 2a 20 48 61 6e 64 6c 65 20 74  ss,../* Handle t
42e0: 6f 20 43 4f 62 6a 65 63 74 20 63 6c 61 73 73 2e  o CObject class.
42f0: 20 2a 2f 0a 20 20 20 20 6a 73 74 72 69 6e 67 20   */.    jstring 
4300: 73 74 72 69 6e 67 29 09 09 2f 2a 20 49 6e 69 74  string)../* Init
4310: 69 61 6c 20 73 74 72 69 6e 67 20 72 65 70 2e 20  ial string rep. 
4320: 2a 2f 0a 7b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a  */.{.    Tcl_Obj
4330: 20 2a 6f 62 6a 50 74 72 3b 0a 20 20 20 20 6a 6c   *objPtr;.    jl
4340: 6f 6e 67 20 6f 62 6a 3b 0a 0a 20 20 20 20 6f 62  ong obj;..    ob
4350: 6a 50 74 72 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  jPtr = Tcl_NewOb
4360: 6a 28 29 3b 0a 20 20 20 20 69 66 20 28 73 74 72  j();.    if (str
4370: 69 6e 67 29 20 7b 0a 09 6f 62 6a 50 74 72 2d 3e  ing) {..objPtr->
4380: 62 79 74 65 73 20 3d 20 4a 61 76 61 47 65 74 53  bytes = JavaGetS
4390: 74 72 69 6e 67 28 65 6e 76 2c 20 73 74 72 69 6e  tring(env, strin
43a0: 67 2c 20 26 6f 62 6a 50 74 72 2d 3e 6c 65 6e 67  g, &objPtr->leng
43b0: 74 68 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f  th);.    }.    o
43c0: 62 6a 20 3d 20 30 3b 0a 20 20 20 20 2a 28 54 63  bj = 0;.    *(Tc
43d0: 6c 5f 4f 62 6a 20 2a 2a 29 26 6f 62 6a 20 3d 20  l_Obj **)&obj = 
43e0: 6f 62 6a 50 74 72 3b 0a 20 20 20 20 72 65 74 75  objPtr;.    retu
43f0: 72 6e 20 6f 62 6a 3b 0a 7d 0a 0c 0a 2f 2a 0a 20  rn obj;.}.../*. 
4400: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
4410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4440: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4a 61  -------. *. * Ja
4450: 76 61 47 65 74 54 63 6c 4f 62 6a 65 63 74 20 2d  vaGetTclObject -
4460: 2d 0a 20 2a 0a 20 2a 09 52 65 74 72 69 65 76 65  -. *. *.Retrieve
4470: 20 74 68 65 20 4a 61 76 61 20 54 63 6c 4f 62 6a   the Java TclObj
4480: 65 63 74 20 74 68 61 74 20 73 68 61 64 6f 77 73  ect that shadows
4490: 20 74 68 65 20 67 69 76 65 6e 20 54 63 6c 5f 4f   the given Tcl_O
44a0: 62 6a 2e 0a 20 2a 09 43 72 65 61 74 65 73 20 61  bj.. *.Creates a
44b0: 20 6e 65 77 20 54 63 6c 4f 62 6a 65 63 74 20 6f   new TclObject o
44c0: 66 20 74 79 70 65 20 43 4f 62 6a 65 63 74 20 6f  f type CObject o
44d0: 72 20 54 63 6c 4f 62 6a 65 63 74 20 74 68 61 74  r TclObject that
44e0: 20 72 65 66 65 72 73 0a 20 2a 09 74 6f 20 74 68   refers. *.to th
44f0: 65 20 67 69 76 65 6e 20 54 63 6c 5f 4f 62 6a 2c  e given Tcl_Obj,
4500: 20 75 6e 6c 65 73 73 20 74 68 65 20 54 63 6c 5f   unless the Tcl_
4510: 4f 62 6a 20 69 73 20 61 20 54 63 6c 4f 62 6a 65  Obj is a TclObje
4520: 63 74 20 61 6c 72 65 61 64 79 2e 0a 20 2a 0a 20  ct already.. *. 
4530: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 52 65  * Results:. *.Re
4540: 74 75 72 6e 73 20 61 20 54 63 6c 4f 62 6a 65 63  turns a TclObjec
4550: 74 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  t associated wit
4560: 68 20 74 68 65 20 54 63 6c 5f 4f 62 6a 2e 0a 20  h the Tcl_Obj.. 
4570: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
4580: 73 3a 0a 20 2a 09 4d 61 79 20 61 6c 6c 6f 63 61  s:. *.May alloca
4590: 74 65 20 61 20 6e 65 77 20 6c 6f 63 61 6c 20 72  te a new local r
45a0: 65 66 65 72 65 6e 63 65 20 69 6e 20 74 68 65 20  eference in the 
45b0: 4a 56 4d 2e 20 4e 6f 74 65 20 74 68 61 74 0a 20  JVM. Note that. 
45c0: 2a 09 69 66 20 74 68 69 73 20 72 6f 75 74 69 6e  *.if this routin
45d0: 65 20 69 73 20 6e 6f 74 20 63 61 6c 6c 65 64 20  e is not called 
45e0: 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61  as a result of a
45f0: 20 6e 61 74 69 76 65 20 6d 65 74 68 6f 64 0a 20   native method. 
4600: 2a 09 69 6e 76 6f 63 61 74 69 6f 6e 2c 20 74 68  *.invocation, th
4610: 65 20 63 61 6c 6c 65 72 20 69 73 20 72 65 73 70  e caller is resp
4620: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 6c 65  onsible for dele
4630: 74 69 6e 67 20 74 68 65 20 6c 6f 63 61 6c 0a 20  ting the local. 
4640: 2a 09 72 65 66 65 72 65 6e 63 65 20 65 78 70 6c  *.reference expl
4650: 69 63 69 74 6c 79 2e 20 57 69 6c 6c 20 69 6e 63  icitly. Will inc
4660: 72 65 6d 65 6e 74 20 74 68 65 20 54 63 6c 4f 62  rement the TclOb
4670: 6a 65 63 74 2e 72 65 66 43 6f 75 6e 74 0a 20 2a  ject.refCount. *
4680: 09 66 6f 72 20 61 20 6e 65 77 65 6c 79 20 63 72  .for a newely cr
4690: 65 61 74 65 64 20 43 4f 62 6a 65 63 74 20 77 72  eated CObject wr
46a0: 61 70 70 65 72 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d  apper.. *. *----
46b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46f0: 2d 2d 0a 20 2a 2f 0a 0a 6a 6f 62 6a 65 63 74 0a  --. */..jobject.
4700: 4a 61 76 61 47 65 74 54 63 6c 4f 62 6a 65 63 74  JavaGetTclObject
4710: 28 0a 20 20 20 20 4a 4e 49 45 6e 76 20 2a 65 6e  (.    JNIEnv *en
4720: 76 2c 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  v,.    Tcl_Obj *
4730: 6f 62 6a 50 74 72 2c 09 09 2f 2a 20 4f 62 6a 65  objPtr,../* Obje
4740: 63 74 20 74 6f 20 67 65 74 20 6a 6f 62 6a 65 63  ct to get jobjec
4750: 74 20 66 6f 72 2e 20 2a 2f 0a 20 20 20 20 69 6e  t for. */.    in
4760: 74 20 2a 69 73 4c 6f 63 61 6c 50 74 72 29 09 09  t *isLocalPtr)..
4770: 2f 2a 20 31 20 69 66 20 72 65 74 75 72 6e 65 64  /* 1 if returned
4780: 20 68 61 6e 64 6c 65 20 69 73 20 61 20 6c 6f 63   handle is a loc
4790: 61 6c 20 72 65 66 2e 20 2a 2f 0a 7b 0a 20 20 20  al ref. */.{.   
47a0: 20 6a 6f 62 6a 65 63 74 20 6f 62 6a 65 63 74 3b   jobject object;
47b0: 0a 20 20 20 20 6a 6c 6f 6e 67 20 6c 76 61 6c 75  .    jlong lvalu
47c0: 65 3b 0a 20 20 20 20 4a 61 76 61 49 6e 66 6f 2a  e;.    JavaInfo*
47d0: 20 6a 63 61 63 68 65 20 3d 20 4a 61 76 61 47 65   jcache = JavaGe
47e0: 74 43 61 63 68 65 28 29 3b 0a 0a 20 20 20 20 69  tCache();..    i
47f0: 66 20 28 21 6f 62 6a 50 74 72 29 20 7b 0a 09 72  f (!objPtr) {..r
4800: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20  eturn NULL;.    
4810: 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  }..    /*.     *
4820: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 54   Make sure the T
4830: 63 6c 5f 4f 62 6a 20 64 6f 65 73 20 6e 6f 74 20  cl_Obj does not 
4840: 68 61 76 65 0a 20 20 20 20 20 2a 20 61 6e 20 69  have.     * an i
4850: 6e 76 61 6c 69 64 20 72 65 66 20 74 6f 20 61 20  nvalid ref to a 
4860: 54 63 6c 4f 62 6a 65 63 74 20 74 68 61 74 20 68  TclObject that h
4870: 61 73 20 61 0a 20 20 20 20 20 2a 20 43 4f 62 6a  as a.     * CObj
4880: 65 63 74 20 6f 72 20 54 63 6c 4c 69 73 74 20 69  ect or TclList i
4890: 6e 74 65 72 6e 61 6c 20 72 65 70 2e 0a 20 20 20  nternal rep..   
48a0: 20 20 2a 2f 0a 0a 20 20 20 20 4a 61 76 61 42 72    */..    JavaBr
48b0: 65 61 6b 52 65 66 28 65 6e 76 2c 20 6f 62 6a 50  eakRef(env, objP
48c0: 74 72 29 3b 0a 0a 20 20 20 20 69 66 20 28 28 6f  tr);..    if ((o
48d0: 62 6a 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d  bjPtr->typePtr =
48e0: 3d 20 26 74 63 6c 4f 62 6a 65 63 74 54 79 70 65  = &tclObjectType
48f0: 29 0a 09 20 20 20 20 7c 7c 20 28 28 6f 62 6a 50  )..    || ((objP
4900: 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 63  tr->typePtr == c
4910: 6d 64 54 79 70 65 50 74 72 29 20 26 26 0a 09 09  mdTypePtr) &&...
4920: 20 20 20 20 28 6f 62 6a 50 74 72 2d 3e 69 6e 74      (objPtr->int
4930: 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74 72 56  ernalRep.twoPtrV
4940: 61 6c 75 65 2e 70 74 72 32 29 20 21 3d 20 4e 55  alue.ptr2) != NU
4950: 4c 4c 29 29 20 7b 0a 09 2f 2a 0a 09 20 2a 20 54  LL)) {../*.. * T
4960: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 61 20  his object is a 
4970: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20 54  reference to a T
4980: 63 6c 4f 62 6a 65 63 74 2c 20 73 6f 20 77 65 20  clObject, so we 
4990: 65 78 74 72 61 63 74 20 74 68 65 0a 09 20 2a 20  extract the.. * 
49a0: 6a 6f 62 6a 65 63 74 2e 0a 09 20 2a 2f 0a 0a 09  jobject... */...
49b0: 6f 62 6a 65 63 74 20 3d 20 28 6a 6f 62 6a 65 63  object = (jobjec
49c0: 74 29 28 6f 62 6a 50 74 72 2d 3e 69 6e 74 65 72  t)(objPtr->inter
49d0: 6e 61 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c  nalRep.twoPtrVal
49e0: 75 65 2e 70 74 72 32 29 3b 0a 09 69 66 20 28 69  ue.ptr2);..if (i
49f0: 73 4c 6f 63 61 6c 50 74 72 29 20 7b 0a 09 20 20  sLocalPtr) {..  
4a00: 20 20 2a 69 73 4c 6f 63 61 6c 50 74 72 20 3d 20    *isLocalPtr = 
4a10: 30 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65  0;..}.    } else
4a20: 20 7b 0a 09 2f 2a 0a 09 20 2a 0a 09 20 2a 20 57   {../*.. *.. * W
4a30: 65 20 73 68 6f 75 6c 64 20 62 65 20 61 62 6c 65  e should be able
4a40: 20 74 6f 20 75 73 65 20 74 68 65 20 66 6f 6c 6c   to use the foll
4a50: 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  owing statement 
4a60: 62 65 6c 6f 77 3a 0a 09 20 2a 0a 09 20 2a 20 20  below:.. *.. *  
4a70: 20 20 20 6c 76 61 6c 75 65 20 3d 20 28 6a 6c 6f     lvalue = (jlo
4a80: 6e 67 29 20 6f 62 6a 50 74 72 3b 0a 09 20 2a 0a  ng) objPtr;.. *.
4a90: 09 20 2a 20 42 75 74 20 67 63 63 20 77 61 72 6e  . * But gcc warn
4aa0: 73 20 22 63 61 73 74 20 74 6f 20 70 6f 69 6e 74  s "cast to point
4ab0: 65 72 20 66 72 6f 6d 20 69 6e 74 65 67 65 72 20  er from integer 
4ac0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a  of different siz
4ad0: 65 22 0a 09 20 2a 20 73 6f 20 75 73 65 20 61 6e  e".. * so use an
4ae0: 20 75 67 6c 79 20 77 6f 72 6b 61 72 6f 75 6e 64   ugly workaround
4af0: 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 63 6f   to avoid the co
4b00: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 0a  mpiler warning..
4b10: 09 20 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  . * Note that th
4b20: 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 65  e value is zeroe
4b30: 64 20 6f 75 74 20 62 65 66 6f 72 65 20 61 73 73  d out before ass
4b40: 69 67 6e 69 6e 67 20 74 6f 0a 09 20 2a 20 68 61  igning to.. * ha
4b50: 6e 64 6c 65 20 74 68 65 20 63 61 73 65 20 77 68  ndle the case wh
4b60: 65 72 65 20 6a 6c 6f 6e 67 20 69 73 20 36 34 20  ere jlong is 64 
4b70: 77 68 69 6c 65 20 61 20 70 74 72 20 69 73 20 33  while a ptr is 3
4b80: 32 20 62 69 74 73 2e 0a 09 20 2a 2f 0a 0a 09 6c  2 bits... */...l
4b90: 76 61 6c 75 65 20 3d 20 30 3b 0a 09 2a 28 54 63  value = 0;..*(Tc
4ba0: 6c 5f 4f 62 6a 20 2a 2a 29 26 6c 76 61 6c 75 65  l_Obj **)&lvalue
4bb0: 20 3d 20 6f 62 6a 50 74 72 3b 0a 0a 09 2f 2a 0a   = objPtr;.../*.
4bc0: 09 20 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  . * This object 
4bd0: 69 73 20 6f 66 20 61 6e 20 75 6e 6b 6e 6f 77 6e  is of an unknown
4be0: 20 74 79 70 65 2c 20 73 6f 20 63 72 65 61 74 65   type, so create
4bf0: 20 61 20 6e 65 77 20 54 63 6c 4f 62 6a 65 63 74   a new TclObject
4c00: 2e 0a 09 20 2a 20 49 66 20 74 68 65 20 54 63 6c  ... * If the Tcl
4c10: 20 6f 62 6a 65 63 74 20 69 73 20 61 20 6c 69 73   object is a lis
4c20: 74 2c 20 74 68 65 6e 20 63 72 65 61 74 65 20 61  t, then create a
4c30: 20 54 63 6c 4c 69 73 74 2e 0a 09 20 2a 0a 09 20   TclList... *.. 
4c40: 2a 20 20 20 20 54 63 6c 4f 62 6a 65 63 74 20 74  *    TclObject t
4c50: 6f 62 6a 20 3d 20 54 63 6c 4c 69 73 74 2e 6e 65  obj = TclList.ne
4c60: 77 49 6e 73 74 61 6e 63 65 28 6c 6f 6e 67 20 6f  wInstance(long o
4c70: 62 6a 50 74 72 29 3b 0a 09 20 2a 0a 09 20 2a 20  bjPtr);.. *.. * 
4c80: 4f 74 68 65 72 77 69 73 65 20 77 65 20 64 6f 6e  Otherwise we don
4c90: 27 74 20 6b 6e 6f 77 20 74 68 65 20 74 79 70 65  't know the type
4ca0: 20 73 6f 20 63 72 65 61 74 65 20 61 20 43 4f 62   so create a COb
4cb0: 6a 65 63 74 2e 0a 09 20 2a 0a 09 20 2a 20 20 20  ject... *.. *   
4cc0: 20 54 63 6c 4f 62 6a 65 63 74 20 74 6f 62 6a 20   TclObject tobj 
4cd0: 3d 20 43 4f 62 6a 65 63 74 2e 6e 65 77 49 6e 73  = CObject.newIns
4ce0: 74 61 6e 63 65 28 6c 6f 6e 67 20 6f 62 6a 50 74  tance(long objPt
4cf0: 72 29 3b 0a 09 20 2a 0a 09 20 2a 2f 0a 0a 09 69  r);.. *.. */...i
4d00: 66 20 28 6f 62 6a 50 74 72 2d 3e 74 79 70 65 50  f (objPtr->typeP
4d10: 74 72 20 3d 3d 20 6c 69 73 74 54 79 70 65 50 74  tr == listTypePt
4d20: 72 29 20 7b 0a 09 20 20 20 20 6f 62 6a 65 63 74  r) {..    object
4d30: 20 3d 20 28 2a 65 6e 76 29 2d 3e 43 61 6c 6c 53   = (*env)->CallS
4d40: 74 61 74 69 63 4f 62 6a 65 63 74 4d 65 74 68 6f  taticObjectMetho
4d50: 64 28 65 6e 76 2c 20 6a 63 61 63 68 65 2d 3e 54  d(env, jcache->T
4d60: 63 6c 4c 69 73 74 2c 0a 09 20 20 20 20 20 20 20  clList,..       
4d70: 20 6a 63 61 63 68 65 2d 3e 6e 65 77 54 63 6c 4c   jcache->newTclL
4d80: 69 73 74 49 6e 73 74 61 6e 63 65 2c 20 6c 76 61  istInstance, lva
4d90: 6c 75 65 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a  lue);..} else {.
4da0: 09 20 20 20 20 6f 62 6a 65 63 74 20 3d 20 28 2a  .    object = (*
4db0: 65 6e 76 29 2d 3e 43 61 6c 6c 53 74 61 74 69 63  env)->CallStatic
4dc0: 4f 62 6a 65 63 74 4d 65 74 68 6f 64 28 65 6e 76  ObjectMethod(env
4dd0: 2c 20 6a 63 61 63 68 65 2d 3e 43 4f 62 6a 65 63  , jcache->CObjec
4de0: 74 2c 0a 09 20 20 20 20 20 20 20 20 6a 63 61 63  t,..        jcac
4df0: 68 65 2d 3e 6e 65 77 43 4f 62 6a 65 63 74 49 6e  he->newCObjectIn
4e00: 73 74 61 6e 63 65 2c 20 6c 76 61 6c 75 65 29 3b  stance, lvalue);
4e10: 0a 09 7d 0a 0a 09 69 66 20 28 28 2a 65 6e 76 29  ..}...if ((*env)
4e20: 2d 3e 45 78 63 65 70 74 69 6f 6e 4f 63 63 75 72  ->ExceptionOccur
4e30: 72 65 64 28 65 6e 76 29 29 20 7b 0a 09 20 20 20  red(env)) {..   
4e40: 20 28 2a 65 6e 76 29 2d 3e 45 78 63 65 70 74 69   (*env)->Excepti
4e50: 6f 6e 44 65 73 63 72 69 62 65 28 65 6e 76 29 3b  onDescribe(env);
4e60: 0a 09 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28  ..    Tcl_Panic(
4e70: 22 4a 61 76 61 47 65 74 54 63 6c 4f 62 6a 65 63  "JavaGetTclObjec
4e80: 74 20 3a 20 65 78 63 65 70 74 69 6f 6e 20 69 6e  t : exception in
4e90: 20 6e 65 77 49 6e 73 74 61 6e 63 65 28 29 22 29   newInstance()")
4ea0: 3b 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 49 6e  ;..}.../*.. * In
4eb0: 63 72 65 6d 65 6e 74 20 74 68 65 20 72 65 66 20  crement the ref 
4ec0: 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 65 77  count of the new
4ed0: 20 54 63 6c 4f 62 6a 65 63 74 20 73 6f 20 74 68   TclObject so th
4ee0: 61 74 0a 09 20 2a 20 69 74 20 73 74 61 72 74 73  at.. * it starts
4ef0: 20 6c 69 66 65 20 77 69 74 68 20 61 20 72 65 66   life with a ref
4f00: 20 63 6f 75 6e 74 20 6f 66 20 31 2e 20 54 68 69   count of 1. Thi
4f10: 73 20 6f 70 65 72 61 74 69 6f 6e 0a 09 20 2a 20  s operation.. * 
4f20: 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 20  does not change 
4f30: 74 68 65 20 72 65 66 20 63 6f 75 6e 74 20 6f 66  the ref count of
4f40: 20 74 68 65 20 54 63 6c 5f 4f 62 6a 2e 0a 09 20   the Tcl_Obj... 
4f50: 2a 20 57 65 20 65 78 70 65 63 74 20 74 6f 20 62  * We expect to b
4f60: 65 20 61 62 6c 65 20 74 6f 20 64 72 6f 70 20 61  e able to drop a
4f70: 20 72 65 66 20 74 6f 20 61 20 43 4f 62 6a 65 63   ref to a CObjec
4f80: 74 0a 09 20 2a 20 77 69 74 68 20 61 20 72 65 66  t.. * with a ref
4f90: 20 63 6f 75 6e 74 20 6f 66 20 31 20 77 69 74 68   count of 1 with
4fa0: 6f 75 74 20 6c 65 61 6b 69 6e 67 20 6d 65 6d 6f  out leaking memo
4fb0: 72 79 20 69 6e 20 43 2e 0a 09 20 2a 2f 0a 0a 09  ry in C... */...
4fc0: 28 2a 65 6e 76 29 2d 3e 43 61 6c 6c 56 6f 69 64  (*env)->CallVoid
4fd0: 4d 65 74 68 6f 64 28 65 6e 76 2c 20 6f 62 6a 65  Method(env, obje
4fe0: 63 74 2c 20 6a 63 61 63 68 65 2d 3e 70 72 65 73  ct, jcache->pres
4ff0: 65 72 76 65 29 3b 0a 09 69 66 20 28 28 2a 65 6e  erve);..if ((*en
5000: 76 29 2d 3e 45 78 63 65 70 74 69 6f 6e 4f 63 63  v)->ExceptionOcc
5010: 75 72 72 65 64 28 65 6e 76 29 29 20 7b 0a 09 20  urred(env)) {.. 
5020: 20 20 20 28 2a 65 6e 76 29 2d 3e 45 78 63 65 70     (*env)->Excep
5030: 74 69 6f 6e 44 65 73 63 72 69 62 65 28 65 6e 76  tionDescribe(env
5040: 29 3b 0a 09 20 20 20 20 54 63 6c 5f 50 61 6e 69  );..    Tcl_Pani
5050: 63 28 22 4a 61 76 61 47 65 74 54 63 6c 4f 62 6a  c("JavaGetTclObj
5060: 65 63 74 20 3a 20 65 78 63 65 70 74 69 6f 6e 20  ect : exception 
5070: 69 6e 20 54 63 6c 4f 62 6a 65 63 74 2e 5f 70 72  in TclObject._pr
5080: 65 73 65 72 76 65 28 29 22 29 3b 0a 09 7d 0a 0a  eserve()");..}..
5090: 09 69 66 20 28 69 73 4c 6f 63 61 6c 50 74 72 29  .if (isLocalPtr)
50a0: 20 7b 0a 09 20 20 20 20 2a 69 73 4c 6f 63 61 6c   {..    *isLocal
50b0: 50 74 72 20 3d 20 31 3b 0a 09 7d 0a 20 20 20 20  Ptr = 1;..}.    
50c0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 62 6a  }.    return obj
50d0: 65 63 74 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  ect;.}.../*. *--
50e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5120: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 46 72 65 65 4a  ----. *. * FreeJ
5130: 61 76 61 43 6d 64 49 6e 74 65 72 6e 61 6c 52 65  avaCmdInternalRe
5140: 70 20 2d 2d 0a 20 2a 0a 20 2a 09 46 72 65 65 20  p --. *. *.Free 
5150: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
5160: 20 66 6f 72 20 61 20 6a 61 76 61 20 6f 62 6a 65   for a java obje
5170: 63 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  ct.. *. * Result
5180: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
5190: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
51a0: 20 2a 09 44 65 63 72 65 6d 65 6e 74 73 20 74 68   *.Decrements th
51b0: 65 20 72 65 66 63 6f 75 6e 74 20 6f 6e 20 61 20  e refcount on a 
51c0: 6a 61 76 61 20 6f 62 6a 65 63 74 2c 20 61 6e 64  java object, and
51d0: 20 66 72 65 65 73 20 69 74 20 69 66 0a 20 2a 09   frees it if. *.
51e0: 74 68 65 20 6c 61 73 74 20 72 65 66 65 72 65 6e  the last referen
51f0: 63 65 20 69 73 20 67 6f 6e 65 2e 0a 20 2a 0a 20  ce is gone.. *. 
5200: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
5210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5240: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
5250: 74 69 63 20 76 6f 69 64 0a 46 72 65 65 4a 61 76  tic void.FreeJav
5260: 61 43 6d 64 49 6e 74 65 72 6e 61 6c 52 65 70 28  aCmdInternalRep(
5270: 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 62  .    Tcl_Obj *ob
5280: 6a 50 74 72 29 0a 7b 0a 20 20 20 20 6a 6f 62 6a  jPtr).{.    jobj
5290: 65 63 74 20 6a 6f 62 6a 20 3d 20 28 6a 6f 62 6a  ect jobj = (jobj
52a0: 65 63 74 29 20 6f 62 6a 50 74 72 2d 3e 69 6e 74  ect) objPtr->int
52b0: 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74 72 56  ernalRep.twoPtrV
52c0: 61 6c 75 65 2e 70 74 72 32 3b 0a 0a 20 20 20 20  alue.ptr2;..    
52d0: 69 66 20 28 6a 6f 62 6a 29 20 7b 0a 09 46 72 65  if (jobj) {..Fre
52e0: 65 54 63 6c 4f 62 6a 65 63 74 28 6f 62 6a 50 74  eTclObject(objPt
52f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 28 6f  r);.    }.    (o
5300: 6c 64 43 6d 64 54 79 70 65 2e 66 72 65 65 49 6e  ldCmdType.freeIn
5310: 74 52 65 70 50 72 6f 63 29 28 6f 62 6a 50 74 72  tRepProc)(objPtr
5320: 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  );.}.../*. *----
5330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5370: 2d 2d 0a 20 2a 0a 20 2a 20 44 75 70 4a 61 76 61  --. *. * DupJava
5380: 43 6d 64 49 6e 74 65 72 6e 61 6c 52 65 70 20 2d  CmdInternalRep -
5390: 2d 0a 20 2a 0a 20 2a 09 49 6e 69 74 69 61 6c 69  -. *. *.Initiali
53a0: 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ze the internal 
53b0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
53c0: 66 20 61 20 6a 61 76 61 20 54 63 6c 5f 4f 62 6a  f a java Tcl_Obj
53d0: 20 74 6f 20 61 0a 20 2a 09 63 6f 70 79 20 6f 66   to a. *.copy of
53e0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
53f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
5400: 61 6e 20 65 78 69 73 74 69 6e 67 20 6a 61 76 61  an existing java
5410: 20 6f 62 6a 65 63 74 2e 0a 20 2a 0a 20 2a 20 52   object.. *. * R
5420: 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  esults:. *.None.
5430: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65  . *. * Side effe
5440: 63 74 73 3a 0a 20 2a 09 22 64 75 70 50 74 72 22  cts:. *."dupPtr"
5450: 73 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 20 69  s internal rep i
5460: 73 20 73 65 74 20 74 6f 20 74 68 65 20 6a 61 76  s set to the jav
5470: 61 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70  a object corresp
5480: 6f 6e 64 69 6e 67 20 74 6f 0a 20 2a 09 22 73 72  onding to. *."sr
5490: 63 50 74 72 22 73 20 69 6e 74 65 72 6e 61 6c 20  cPtr"s internal 
54a0: 72 65 70 20 61 6e 64 20 74 68 65 20 72 65 66 63  rep and the refc
54b0: 6f 75 6e 74 20 6f 6e 20 74 68 65 20 6a 61 76 61  ount on the java
54c0: 20 6f 62 6a 65 63 74 0a 20 2a 09 69 6e 20 69 6e   object. *.in in
54d0: 63 72 65 6d 65 6e 74 65 64 2e 0a 20 2a 0a 20 2a  cremented.. *. *
54e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5520: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
5530: 69 63 20 76 6f 69 64 0a 44 75 70 4a 61 76 61 43  ic void.DupJavaC
5540: 6d 64 49 6e 74 65 72 6e 61 6c 52 65 70 28 0a 20  mdInternalRep(. 
5550: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 73 72 63 50     Tcl_Obj *srcP
5560: 74 72 2c 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20  tr,.    Tcl_Obj 
5570: 2a 64 75 70 50 74 72 29 0a 7b 0a 20 20 20 20 6a  *dupPtr).{.    j
5580: 6f 62 6a 65 63 74 20 6a 6f 62 6a 20 3d 20 28 6a  object jobj = (j
5590: 6f 62 6a 65 63 74 29 20 73 72 63 50 74 72 2d 3e  object) srcPtr->
55a0: 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50  internalRep.twoP
55b0: 74 72 56 61 6c 75 65 2e 70 74 72 32 3b 0a 20 20  trValue.ptr2;.  
55c0: 20 20 28 6f 6c 64 43 6d 64 54 79 70 65 2e 64 75    (oldCmdType.du
55d0: 70 49 6e 74 52 65 70 50 72 6f 63 29 28 73 72 63  pIntRepProc)(src
55e0: 50 74 72 2c 20 64 75 70 50 74 72 29 3b 0a 20 20  Ptr, dupPtr);.  
55f0: 20 20 64 75 70 50 74 72 2d 3e 69 6e 74 65 72 6e    dupPtr->intern
5600: 61 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75  alRep.twoPtrValu
5610: 65 2e 70 74 72 32 20 3d 20 6a 6f 62 6a 3b 0a 20  e.ptr2 = jobj;. 
5620: 20 20 20 69 66 20 28 6a 6f 62 6a 29 20 7b 0a 09     if (jobj) {..
5630: 44 75 70 54 63 6c 4f 62 6a 65 63 74 28 73 72 63  DupTclObject(src
5640: 50 74 72 2c 20 64 75 70 50 74 72 29 3b 0a 20 20  Ptr, dupPtr);.  
5650: 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d    }.}.../*. *---
5660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56a0: 2d 2d 2d 0a 20 2a 0a 20 2a 20 53 65 74 4a 61 76  ---. *. * SetJav
56b0: 61 43 6d 64 46 72 6f 6d 41 6e 79 20 2d 2d 0a 20  aCmdFromAny --. 
56c0: 2a 0a 20 2a 09 41 74 74 65 6d 70 74 20 74 6f 20  *. *.Attempt to 
56d0: 67 65 6e 65 72 61 74 65 20 61 20 63 6f 6d 6d 61  generate a comma
56e0: 6e 64 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 61  nd object from a
56f0: 6e 20 61 72 62 69 74 72 61 72 79 20 74 79 70 65  n arbitrary type
5700: 2e 0a 20 2a 09 54 68 69 73 20 72 6f 75 74 69 6e  .. *.This routin
5710: 65 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  e is a wrapper a
5720: 72 6f 75 6e 64 20 74 68 65 20 73 74 61 6e 64 61  round the standa
5730: 72 64 20 63 6d 64 4e 61 6d 65 20 73 65 74 46 72  rd cmdName setFr
5740: 6f 6d 41 6e 79 0a 20 2a 09 70 72 6f 63 65 64 75  omAny. *.procedu
5750: 72 65 2e 20 20 49 66 20 74 68 65 20 6f 62 6a 65  re.  If the obje
5760: 63 74 20 68 6f 6c 64 73 20 61 20 72 65 66 65 72  ct holds a refer
5770: 65 6e 63 65 20 74 6f 20 61 20 54 63 6c 4f 62 6a  ence to a TclObj
5780: 65 63 74 2c 0a 20 2a 09 73 61 76 65 20 61 6e 64  ect,. *.save and
5790: 20 72 65 73 74 6f 72 65 20 74 68 65 20 72 65 66   restore the ref
57a0: 65 72 65 6e 63 65 20 61 66 74 65 72 20 74 68 65  erence after the
57b0: 20 6f 62 6a 65 63 74 20 69 73 20 63 6f 6e 76 65   object is conve
57c0: 72 74 65 64 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  rted.. *. * Resu
57d0: 6c 74 73 3a 0a 20 2a 09 54 68 65 20 72 65 74 75  lts:. *.The retu
57e0: 72 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  rn value is a st
57f0: 61 6e 64 61 72 64 20 6f 62 6a 65 63 74 20 54 63  andard object Tc
5800: 6c 20 72 65 73 75 6c 74 2e 20 49 66 20 61 6e 20  l result. If an 
5810: 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 20 2a 09  error occurs. *.
5820: 64 75 72 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f  during conversio
5830: 6e 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  n, an error mess
5840: 61 67 65 20 69 73 20 6c 65 66 74 20 69 6e 20 74  age is left in t
5850: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 27 73  he interpreter's
5860: 0a 20 2a 09 72 65 73 75 6c 74 20 75 6e 6c 65 73  . *.result unles
5870: 73 20 22 69 6e 74 65 72 70 22 20 69 73 20 4e 55  s "interp" is NU
5880: 4c 4c 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65  LL.. *. * Side e
5890: 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  ffects:. *.None.
58a0: 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *. *----------
58b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
58f0: 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 53 65 74  ..static int.Set
5900: 4a 61 76 61 43 6d 64 46 72 6f 6d 41 6e 79 28 0a  JavaCmdFromAny(.
5910: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a      Tcl_Interp *
5920: 69 6e 74 65 72 70 2c 0a 20 20 20 20 54 63 6c 5f  interp,.    Tcl_
5930: 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 0a 7b 0a 20  Obj *objPtr).{. 
5940: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 3b 0a 0a     int result;..
5950: 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 49 6e      /*.     * In
5960: 76 6f 6b 65 20 74 68 65 20 6e 6f 72 6d 61 6c 20  voke the normal 
5970: 63 6f 6d 6d 61 6e 64 20 74 79 70 65 20 72 6f 75  command type rou
5980: 74 69 6e 65 2c 20 62 75 74 20 6d 61 6b 65 20 73  tine, but make s
5990: 75 72 65 0a 20 20 20 20 20 2a 20 69 74 20 64 6f  ure.     * it do
59a0: 65 73 6e 27 74 20 66 72 65 65 20 74 68 65 20 6a  esn't free the j
59b0: 61 76 61 20 6f 62 6a 65 63 74 20 62 79 20 73 65  ava object by se
59c0: 74 74 69 6e 67 20 74 68 65 20 74 79 70 65 50 74  tting the typePt
59d0: 72 0a 20 20 20 20 20 2a 20 74 6f 20 4e 55 4c 4c  r.     * to NULL
59e0: 2e 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 68  . Note that we h
59f0: 61 76 65 20 74 6f 20 72 65 73 74 6f 72 65 20 74  ave to restore t
5a00: 68 65 20 70 74 72 32 20 76 61 6c 75 65 20 61 66  he ptr2 value af
5a10: 74 65 72 0a 20 20 20 20 20 2a 20 74 68 65 20 63  ter.     * the c
5a20: 6f 6e 76 65 72 73 69 6f 6e 2c 20 73 69 6e 63 65  onversion, since
5a30: 20 69 74 20 67 65 74 73 20 73 65 74 20 74 6f 20   it gets set to 
5a40: 4e 55 4c 4c 20 62 79 20 73 65 74 46 72 6f 6d 41  NULL by setFromA
5a50: 6e 79 50 72 6f 63 2e 0a 20 20 20 20 20 2a 2f 0a  nyProc..     */.
5a60: 0a 20 20 20 20 69 66 20 28 28 6f 62 6a 50 74 72  .    if ((objPtr
5a70: 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 26 74 63  ->typePtr == &tc
5a80: 6c 4f 62 6a 65 63 74 54 79 70 65 29 20 7c 7c 0a  lObjectType) ||.
5a90: 09 20 20 20 20 28 28 6f 62 6a 50 74 72 2d 3e 74  .    ((objPtr->t
5aa0: 79 70 65 50 74 72 20 3d 3d 20 63 6d 64 54 79 70  ypePtr == cmdTyp
5ab0: 65 50 74 72 29 20 26 26 0a 09 09 20 20 20 20 28  ePtr) &&...    (
5ac0: 6f 62 6a 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c  objPtr->internal
5ad0: 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e  Rep.twoPtrValue.
5ae0: 70 74 72 32 20 21 3d 20 4e 55 4c 4c 29 29 29 20  ptr2 != NULL))) 
5af0: 7b 0a 09 56 4f 49 44 20 2a 70 74 72 32 3b 0a 09  {..VOID *ptr2;..
5b00: 69 66 20 28 6f 62 6a 50 74 72 2d 3e 62 79 74 65  if (objPtr->byte
5b10: 73 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20  s == NULL) {..  
5b20: 20 20 55 70 64 61 74 65 54 63 6c 4f 62 6a 65 63    UpdateTclObjec
5b30: 74 28 6f 62 6a 50 74 72 29 3b 0a 09 7d 0a 09 6f  t(objPtr);..}..o
5b40: 62 6a 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d  bjPtr->typePtr =
5b50: 20 4e 55 4c 4c 3b 0a 09 70 74 72 32 20 3d 20 6f   NULL;..ptr2 = o
5b60: 62 6a 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c 52  bjPtr->internalR
5b70: 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e 70  ep.twoPtrValue.p
5b80: 74 72 32 3b 0a 09 72 65 73 75 6c 74 20 3d 20 28  tr2;..result = (
5b90: 6f 6c 64 43 6d 64 54 79 70 65 2e 73 65 74 46 72  oldCmdType.setFr
5ba0: 6f 6d 41 6e 79 50 72 6f 63 29 28 69 6e 74 65 72  omAnyProc)(inter
5bb0: 70 2c 20 6f 62 6a 50 74 72 29 3b 0a 09 6f 62 6a  p, objPtr);..obj
5bc0: 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70  Ptr->internalRep
5bd0: 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e 70 74 72  .twoPtrValue.ptr
5be0: 32 20 3d 20 70 74 72 32 3b 0a 20 20 20 20 7d 20  2 = ptr2;.    } 
5bf0: 65 6c 73 65 20 7b 0a 09 72 65 73 75 6c 74 20 3d  else {..result =
5c00: 20 28 6f 6c 64 43 6d 64 54 79 70 65 2e 73 65 74   (oldCmdType.set
5c10: 46 72 6f 6d 41 6e 79 50 72 6f 63 29 28 69 6e 74  FromAnyProc)(int
5c20: 65 72 70 2c 20 6f 62 6a 50 74 72 29 3b 0a 20 20  erp, objPtr);.  
5c30: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 72    }.    return r
5c40: 65 73 75 6c 74 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a  esult;.}.../*. *
5c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c90: 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4a 61 76  ------. *. * Jav
5ca0: 61 49 73 52 65 66 20 2d 2d 0a 20 2a 0a 20 2a 09  aIsRef --. *. *.
5cb0: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74  Return true if t
5cc0: 68 69 73 20 54 63 6c 5f 4f 62 6a 2a 20 63 6f 6e  his Tcl_Obj* con
5cd0: 74 61 69 6e 73 20 61 20 72 65 66 20 74 6f 20 61  tains a ref to a
5ce0: 20 54 63 6c 4f 62 6a 65 63 74 2e 0a 20 2a 0a 20   TclObject.. *. 
5cf0: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 31 20  * Results:. *.1 
5d00: 6f 72 20 30 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  or 0.. *. * Side
5d10: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e   effects:. *.Non
5d20: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  e.. *. *--------
5d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
5d70: 2a 2f 0a 0a 69 6e 74 0a 4a 61 76 61 49 73 52 65  */..int.JavaIsRe
5d80: 66 28 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  f(.    Tcl_Obj *
5d90: 6f 62 6a 50 74 72 29 09 09 2f 2a 20 4f 62 6a 65  objPtr)../* Obje
5da0: 63 74 20 74 6f 20 63 68 65 63 6b 20 2e 2a 2f 0a  ct to check .*/.
5db0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 28 6f  {.    return ((o
5dc0: 62 6a 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d  bjPtr->typePtr =
5dd0: 3d 20 26 74 63 6c 4f 62 6a 65 63 74 54 79 70 65  = &tclObjectType
5de0: 29 20 7c 7c 0a 20 20 20 20 20 20 20 20 20 20 20  ) ||.           
5df0: 20 28 28 6f 62 6a 50 74 72 2d 3e 74 79 70 65 50   ((objPtr->typeP
5e00: 74 72 20 3d 3d 20 63 6d 64 54 79 70 65 50 74 72  tr == cmdTypePtr
5e10: 29 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20  ) &&.           
5e20: 20 20 20 20 20 20 20 20 20 28 6f 62 6a 50 74 72           (objPtr
5e30: 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77  ->internalRep.tw
5e40: 6f 50 74 72 56 61 6c 75 65 2e 70 74 72 32 29 20  oPtrValue.ptr2) 
5e50: 21 3d 20 4e 55 4c 4c 29 29 3b 0a 7d 0a 0c 0a 2f  != NULL));.}.../
5e60: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
5e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
5eb0: 20 4a 61 76 61 4f 62 6a 54 79 70 65 20 2d 2d 0a   JavaObjType --.
5ec0: 20 2a 0a 20 2a 09 52 65 74 75 72 6e 20 61 20 73   *. *.Return a s
5ed0: 74 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72  tring that descr
5ee0: 69 62 65 73 20 74 68 65 20 69 6e 74 65 72 6e 61  ibes the interna
5ef0: 6c 20 72 65 70 20 74 79 70 65 20 66 6f 72 20 6f  l rep type for o
5f00: 62 6a 50 74 72 2e 0a 20 2a 0a 20 2a 20 52 65 73  bjPtr.. *. * Res
5f10: 75 6c 74 73 3a 0a 20 2a 09 41 20 54 63 6c 5f 4f  ults:. *.A Tcl_O
5f20: 62 6a 2a 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20  bj*.. *. * Side 
5f30: 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65  effects:. *.None
5f40: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
5f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a  -------------. *
5f90: 2f 0a 0a 54 63 6c 5f 4f 62 6a 2a 0a 4a 61 76 61  /..Tcl_Obj*.Java
5fa0: 4f 62 6a 54 79 70 65 28 0a 20 20 20 20 54 63 6c  ObjType(.    Tcl
5fb0: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 09 09 2f  _Obj *objPtr)../
5fc0: 2a 20 4f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  * Object to chec
5fd0: 6b 20 2e 2a 2f 0a 7b 0a 20 20 20 20 63 68 61 72  k .*/.{.    char
5fe0: 20 2a 74 79 70 65 3b 0a 20 20 20 20 54 63 6c 5f   *type;.    Tcl_
5ff0: 4f 62 6a 54 79 70 65 20 2a 73 74 72 69 6e 67 54  ObjType *stringT
6000: 79 70 65 50 74 72 20 3d 20 28 54 63 6c 5f 4f 62  ypePtr = (Tcl_Ob
6010: 6a 54 79 70 65 20 2a 29 20 54 63 6c 5f 47 65 74  jType *) Tcl_Get
6020: 4f 62 6a 54 79 70 65 28 22 73 74 72 69 6e 67 22  ObjType("string"
6030: 29 3b 0a 0a 20 20 20 20 69 66 20 28 6f 62 6a 50  );..    if (objP
6040: 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 26  tr->typePtr == &
6050: 74 63 6c 4f 62 6a 65 63 74 54 79 70 65 29 0a 20  tclObjectType). 
6060: 20 20 20 20 20 20 20 74 79 70 65 20 3d 20 22 74         type = "t
6070: 63 6c 6f 62 6a 65 63 74 22 3b 0a 20 20 20 20 65  clobject";.    e
6080: 6c 73 65 20 69 66 20 28 28 6f 62 6a 50 74 72 2d  lse if ((objPtr-
6090: 3e 74 79 70 65 50 74 72 20 3d 3d 20 63 6d 64 54  >typePtr == cmdT
60a0: 79 70 65 50 74 72 29 20 26 26 0a 20 20 20 20 20  ypePtr) &&.     
60b0: 20 20 20 20 20 20 20 28 28 6f 62 6a 50 74 72 2d         ((objPtr-
60c0: 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f  >internalRep.two
60d0: 50 74 72 56 61 6c 75 65 2e 70 74 72 32 29 20 21  PtrValue.ptr2) !
60e0: 3d 20 4e 55 4c 4c 29 29 0a 20 20 20 20 20 20 20  = NULL)).       
60f0: 20 74 79 70 65 20 3d 20 22 63 6d 64 74 63 6c 6f   type = "cmdtclo
6100: 62 6a 65 63 74 22 3b 0a 20 20 20 20 65 6c 73 65  bject";.    else
6110: 20 69 66 20 28 6f 62 6a 50 74 72 2d 3e 74 79 70   if (objPtr->typ
6120: 65 50 74 72 20 3d 3d 20 63 6d 64 54 79 70 65 50  ePtr == cmdTypeP
6130: 74 72 29 0a 20 20 20 20 20 20 20 20 74 79 70 65  tr).        type
6140: 20 3d 20 22 63 6d 64 22 3b 0a 20 20 20 20 65 6c   = "cmd";.    el
6150: 73 65 20 69 66 20 28 6f 62 6a 50 74 72 2d 3e 74  se if (objPtr->t
6160: 79 70 65 50 74 72 20 3d 3d 20 6c 69 73 74 54 79  ypePtr == listTy
6170: 70 65 50 74 72 29 0a 20 20 20 20 20 20 20 20 74  pePtr).        t
6180: 79 70 65 20 3d 20 22 6c 69 73 74 22 3b 0a 20 20  ype = "list";.  
6190: 20 20 65 6c 73 65 20 69 66 20 28 6f 62 6a 50 74    else if (objPt
61a0: 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 73 74  r->typePtr == st
61b0: 72 69 6e 67 54 79 70 65 50 74 72 29 0a 20 20 20  ringTypePtr).   
61c0: 20 20 20 20 20 74 79 70 65 20 3d 20 22 73 74 72       type = "str
61d0: 69 6e 67 22 3b 0a 20 20 20 20 65 6c 73 65 0a 20  ing";.    else. 
61e0: 20 20 20 20 20 20 20 74 79 70 65 20 3d 20 22 75         type = "u
61f0: 6e 6b 6e 6f 77 6e 22 3b 0a 0a 20 20 20 20 72 65  nknown";..    re
6200: 74 75 72 6e 20 54 63 6c 5f 4e 65 77 53 74 72 69  turn Tcl_NewStri
6210: 6e 67 4f 62 6a 28 74 79 70 65 2c 20 2d 31 29 3b  ngObj(type, -1);
6220: 0a 7d 0a                                         .}.