Jim Tcl
Hex Artifact Content
Not logged in

Artifact 5640a8acb3d4c31e4048e6605f041a5688448833:


0000: 2f 2a 20 4a 69 6d 20 2d 20 41 20 73 6d 61 6c 6c  /* Jim - A small
0010: 20 65 6d 62 65 64 64 61 62 6c 65 20 54 63 6c 20   embeddable Tcl 
0020: 69 6e 74 65 72 70 72 65 74 65 72 0a 20 2a 0a 20  interpreter. *. 
0030: 2a 20 43 6f 70 79 72 69 67 68 74 20 32 30 30 35  * Copyright 2005
0040: 20 53 61 6c 76 61 74 6f 72 65 20 53 61 6e 66 69   Salvatore Sanfi
0050: 6c 69 70 70 6f 20 3c 61 6e 74 69 72 65 7a 40 69  lippo <antirez@i
0060: 6e 76 65 63 65 2e 6f 72 67 3e 0a 20 2a 20 43 6f  nvece.org>. * Co
0070: 70 79 72 69 67 68 74 20 32 30 30 35 20 43 6c 65  pyright 2005 Cle
0080: 6d 65 6e 73 20 48 69 6e 74 7a 65 20 3c 63 2e 68  mens Hintze <c.h
0090: 69 6e 74 7a 65 40 67 6d 78 2e 6e 65 74 3e 0a 20  intze@gmx.net>. 
00a0: 2a 20 43 6f 70 79 72 69 67 68 74 20 32 30 30 35  * Copyright 2005
00b0: 20 70 61 74 74 68 6f 79 74 73 20 2d 20 50 61 74   patthoyts - Pat
00c0: 20 54 68 6f 79 74 73 20 3c 70 61 74 74 68 6f 79   Thoyts <patthoy
00d0: 74 73 40 75 73 65 72 73 2e 73 66 2e 6e 65 74 3e  ts@users.sf.net>
00e0: 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 32 30  . * Copyright 20
00f0: 30 38 20 6f 68 61 72 62 6f 65 20 2d 20 d8 79 76  08 oharboe - .yv
0100: 69 6e 64 20 48 61 72 62 6f 65 20 2d 20 6f 79 76  ind Harboe - oyv
0110: 69 6e 64 2e 68 61 72 62 6f 65 40 7a 79 6c 69 6e  ind.harboe@zylin
0120: 2e 63 6f 6d 0a 20 2a 20 43 6f 70 79 72 69 67 68  .com. * Copyrigh
0130: 74 20 32 30 30 38 20 41 6e 64 72 65 77 20 4c 75  t 2008 Andrew Lu
0140: 6e 6e 20 3c 61 6e 64 72 65 77 40 6c 75 6e 6e 2e  nn <andrew@lunn.
0150: 63 68 3e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74  ch>. * Copyright
0160: 20 32 30 30 38 20 44 75 61 6e 65 20 45 6c 6c 69   2008 Duane Elli
0170: 73 20 3c 6f 70 65 6e 6f 63 64 40 64 75 61 6e 65  s <openocd@duane
0180: 65 6c 6c 69 73 2e 63 6f 6d 3e 0a 20 2a 20 43 6f  ellis.com>. * Co
0190: 70 79 72 69 67 68 74 20 32 30 30 38 20 55 77 65  pyright 2008 Uwe
01a0: 20 4b 6c 65 69 6e 20 3c 75 6b 6c 65 69 6e 40 6b   Klein <uklein@k
01b0: 6c 65 69 6e 2d 6d 65 73 73 67 65 72 61 65 74 65  lein-messgeraete
01c0: 2e 64 65 3e 0a 20 2a 0a 20 2a 20 52 65 64 69 73  .de>. *. * Redis
01d0: 74 72 69 62 75 74 69 6f 6e 20 61 6e 64 20 75 73  tribution and us
01e0: 65 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20  e in source and 
01f0: 62 69 6e 61 72 79 20 66 6f 72 6d 73 2c 20 77 69  binary forms, wi
0200: 74 68 20 6f 72 20 77 69 74 68 6f 75 74 0a 20 2a  th or without. *
0210: 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 61   modification, a
0220: 72 65 20 70 65 72 6d 69 74 74 65 64 20 70 72 6f  re permitted pro
0230: 76 69 64 65 64 20 74 68 61 74 20 74 68 65 20 66  vided that the f
0240: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69  ollowing conditi
0250: 6f 6e 73 0a 20 2a 20 61 72 65 20 6d 65 74 3a 0a  ons. * are met:.
0260: 20 2a 0a 20 2a 20 31 2e 20 52 65 64 69 73 74 72   *. * 1. Redistr
0270: 69 62 75 74 69 6f 6e 73 20 6f 66 20 73 6f 75 72  ibutions of sour
0280: 63 65 20 63 6f 64 65 20 6d 75 73 74 20 72 65 74  ce code must ret
0290: 61 69 6e 20 74 68 65 20 61 62 6f 76 65 20 63 6f  ain the above co
02a0: 70 79 72 69 67 68 74 0a 20 2a 20 20 20 20 6e 6f  pyright. *    no
02b0: 74 69 63 65 2c 20 74 68 69 73 20 6c 69 73 74 20  tice, this list 
02c0: 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e  of conditions an
02d0: 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  d the following 
02e0: 64 69 73 63 6c 61 69 6d 65 72 2e 0a 20 2a 20 32  disclaimer.. * 2
02f0: 2e 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e  . Redistribution
0300: 73 20 69 6e 20 62 69 6e 61 72 79 20 66 6f 72 6d  s in binary form
0310: 20 6d 75 73 74 20 72 65 70 72 6f 64 75 63 65 20   must reproduce 
0320: 74 68 65 20 61 62 6f 76 65 0a 20 2a 20 20 20 20  the above. *    
0330: 63 6f 70 79 72 69 67 68 74 20 6e 6f 74 69 63 65  copyright notice
0340: 2c 20 74 68 69 73 20 6c 69 73 74 20 6f 66 20 63  , this list of c
0350: 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64 20 74 68  onditions and th
0360: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20 2a 20 20  e following. *  
0370: 20 20 64 69 73 63 6c 61 69 6d 65 72 20 69 6e 20    disclaimer in 
0380: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
0390: 6e 20 61 6e 64 2f 6f 72 20 6f 74 68 65 72 20 6d  n and/or other m
03a0: 61 74 65 72 69 61 6c 73 0a 20 2a 20 20 20 20 70  aterials. *    p
03b0: 72 6f 76 69 64 65 64 20 77 69 74 68 20 74 68 65  rovided with the
03c0: 20 64 69 73 74 72 69 62 75 74 69 6f 6e 2e 0a 20   distribution.. 
03d0: 2a 0a 20 2a 20 54 48 49 53 20 53 4f 46 54 57 41  *. * THIS SOFTWA
03e0: 52 45 20 49 53 20 50 52 4f 56 49 44 45 44 20 42  RE IS PROVIDED B
03f0: 59 20 54 48 45 20 4a 49 4d 20 54 43 4c 20 50 52  Y THE JIM TCL PR
0400: 4f 4a 45 43 54 20 60 60 41 53 20 49 53 27 27 20  OJECT ``AS IS'' 
0410: 41 4e 44 20 41 4e 59 0a 20 2a 20 45 58 50 52 45  AND ANY. * EXPRE
0420: 53 53 20 4f 52 20 49 4d 50 4c 49 45 44 20 57 41  SS OR IMPLIED WA
0430: 52 52 41 4e 54 49 45 53 2c 20 49 4e 43 4c 55 44  RRANTIES, INCLUD
0440: 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20 4c 49 4d  ING, BUT NOT LIM
0450: 49 54 45 44 20 54 4f 2c 0a 20 2a 20 54 48 45 20  ITED TO,. * THE 
0460: 49 4d 50 4c 49 45 44 20 57 41 52 52 41 4e 54 49  IMPLIED WARRANTI
0470: 45 53 20 4f 46 20 4d 45 52 43 48 41 4e 54 41 42  ES OF MERCHANTAB
0480: 49 4c 49 54 59 20 41 4e 44 20 46 49 54 4e 45 53  ILITY AND FITNES
0490: 53 20 46 4f 52 20 41 0a 20 2a 20 50 41 52 54 49  S FOR A. * PARTI
04a0: 43 55 4c 41 52 20 50 55 52 50 4f 53 45 20 41 52  CULAR PURPOSE AR
04b0: 45 20 44 49 53 43 4c 41 49 4d 45 44 2e 20 49 4e  E DISCLAIMED. IN
04c0: 20 4e 4f 20 45 56 45 4e 54 20 53 48 41 4c 4c 20   NO EVENT SHALL 
04d0: 54 48 45 0a 20 2a 20 4a 49 4d 20 54 43 4c 20 50  THE. * JIM TCL P
04e0: 52 4f 4a 45 43 54 20 4f 52 20 43 4f 4e 54 52 49  ROJECT OR CONTRI
04f0: 42 55 54 4f 52 53 20 42 45 20 4c 49 41 42 4c 45  BUTORS BE LIABLE
0500: 20 46 4f 52 20 41 4e 59 20 44 49 52 45 43 54 2c   FOR ANY DIRECT,
0510: 0a 20 2a 20 49 4e 44 49 52 45 43 54 2c 20 49 4e  . * INDIRECT, IN
0520: 43 49 44 45 4e 54 41 4c 2c 20 53 50 45 43 49 41  CIDENTAL, SPECIA
0530: 4c 2c 20 45 58 45 4d 50 4c 41 52 59 2c 20 4f 52  L, EXEMPLARY, OR
0540: 20 43 4f 4e 53 45 51 55 45 4e 54 49 41 4c 20 44   CONSEQUENTIAL D
0550: 41 4d 41 47 45 53 0a 20 2a 20 28 49 4e 43 4c 55  AMAGES. * (INCLU
0560: 44 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20 4c 49  DING, BUT NOT LI
0570: 4d 49 54 45 44 20 54 4f 2c 20 50 52 4f 43 55 52  MITED TO, PROCUR
0580: 45 4d 45 4e 54 20 4f 46 20 53 55 42 53 54 49 54  EMENT OF SUBSTIT
0590: 55 54 45 20 47 4f 4f 44 53 0a 20 2a 20 4f 52 20  UTE GOODS. * OR 
05a0: 53 45 52 56 49 43 45 53 3b 20 4c 4f 53 53 20 4f  SERVICES; LOSS O
05b0: 46 20 55 53 45 2c 20 44 41 54 41 2c 20 4f 52 20  F USE, DATA, OR 
05c0: 50 52 4f 46 49 54 53 3b 20 4f 52 20 42 55 53 49  PROFITS; OR BUSI
05d0: 4e 45 53 53 20 49 4e 54 45 52 52 55 50 54 49 4f  NESS INTERRUPTIO
05e0: 4e 29 0a 20 2a 20 48 4f 57 45 56 45 52 20 43 41  N). * HOWEVER CA
05f0: 55 53 45 44 20 41 4e 44 20 4f 4e 20 41 4e 59 20  USED AND ON ANY 
0600: 54 48 45 4f 52 59 20 4f 46 20 4c 49 41 42 49 4c  THEORY OF LIABIL
0610: 49 54 59 2c 20 57 48 45 54 48 45 52 20 49 4e 20  ITY, WHETHER IN 
0620: 43 4f 4e 54 52 41 43 54 2c 0a 20 2a 20 53 54 52  CONTRACT,. * STR
0630: 49 43 54 20 4c 49 41 42 49 4c 49 54 59 2c 20 4f  ICT LIABILITY, O
0640: 52 20 54 4f 52 54 20 28 49 4e 43 4c 55 44 49 4e  R TORT (INCLUDIN
0650: 47 20 4e 45 47 4c 49 47 45 4e 43 45 20 4f 52 20  G NEGLIGENCE OR 
0660: 4f 54 48 45 52 57 49 53 45 29 0a 20 2a 20 41 52  OTHERWISE). * AR
0670: 49 53 49 4e 47 20 49 4e 20 41 4e 59 20 57 41 59  ISING IN ANY WAY
0680: 20 4f 55 54 20 4f 46 20 54 48 45 20 55 53 45 20   OUT OF THE USE 
0690: 4f 46 20 54 48 49 53 20 53 4f 46 54 57 41 52 45  OF THIS SOFTWARE
06a0: 2c 20 45 56 45 4e 20 49 46 0a 20 2a 20 41 44 56  , EVEN IF. * ADV
06b0: 49 53 45 44 20 4f 46 20 54 48 45 20 50 4f 53 53  ISED OF THE POSS
06c0: 49 42 49 4c 49 54 59 20 4f 46 20 53 55 43 48 20  IBILITY OF SUCH 
06d0: 44 41 4d 41 47 45 2e 0a 20 2a 0a 20 2a 20 54 68  DAMAGE.. *. * Th
06e0: 65 20 76 69 65 77 73 20 61 6e 64 20 63 6f 6e 63  e views and conc
06f0: 6c 75 73 69 6f 6e 73 20 63 6f 6e 74 61 69 6e 65  lusions containe
0700: 64 20 69 6e 20 74 68 65 20 73 6f 66 74 77 61 72  d in the softwar
0710: 65 20 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74  e and documentat
0720: 69 6f 6e 0a 20 2a 20 61 72 65 20 74 68 6f 73 65  ion. * are those
0730: 20 6f 66 20 74 68 65 20 61 75 74 68 6f 72 73 20   of the authors 
0740: 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  and should not b
0750: 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
0760: 20 72 65 70 72 65 73 65 6e 74 69 6e 67 0a 20 2a   representing. *
0770: 20 6f 66 66 69 63 69 61 6c 20 70 6f 6c 69 63 69   official polici
0780: 65 73 2c 20 65 69 74 68 65 72 20 65 78 70 72 65  es, either expre
0790: 73 73 65 64 20 6f 72 20 69 6d 70 6c 69 65 64 2c  ssed or implied,
07a0: 20 6f 66 20 74 68 65 20 4a 69 6d 20 54 63 6c 20   of the Jim Tcl 
07b0: 50 72 6f 6a 65 63 74 2e 0a 20 2a 0a 20 2a 2d 2d  Project.. *. *--
07c0: 2d 20 49 6e 6c 69 6e 65 20 48 65 61 64 65 72 20  - Inline Header 
07d0: 46 69 6c 65 20 44 6f 63 75 6d 65 6e 74 61 74 69  File Documentati
07e0: 6f 6e 20 2d 2d 2d 0a 20 2a 20 20 20 20 5b 42 79  on ---. *    [By
07f0: 20 44 75 61 6e 65 20 45 6c 6c 69 73 2c 20 6f 70   Duane Ellis, op
0800: 65 6e 6f 63 64 40 64 75 61 6e 65 65 6c 6c 69 73  enocd@duaneellis
0810: 2e 63 6f 6d 2c 20 38 2f 31 38 2f 38 5d 0a 20 2a  .com, 8/18/8]. *
0820: 0a 20 2a 20 42 65 6c 69 65 66 20 69 73 20 22 4a  . * Belief is "J
0830: 69 6d 22 20 77 6f 75 6c 64 20 67 72 65 61 74 6c  im" would greatl
0840: 79 20 62 65 6e 69 66 69 74 20 69 66 20 4a 69 6d  y benifit if Jim
0850: 20 49 6e 74 65 72 6e 61 6c 73 20 77 68 65 72 65   Internals where
0860: 0a 20 2a 20 64 6f 63 75 6d 65 6e 74 65 64 20 69  . * documented i
0870: 6e 20 73 6f 6d 65 20 77 61 79 20 2d 20 66 6f 72  n some way - for
0880: 6d 20 77 68 61 74 65 76 65 72 2c 20 61 6e 64 20  m whatever, and 
0890: 70 65 72 68 61 70 73 20 2d 20 74 68 65 20 70 61  perhaps - the pa
08a0: 63 6b 61 67 65 3a 0a 20 2a 20 27 64 6f 78 79 67  ckage:. * 'doxyg
08b0: 65 6e 27 20 69 73 20 74 68 65 20 63 6f 72 72 65  en' is the corre
08c0: 63 74 20 61 70 70 72 6f 61 63 68 20 74 6f 20 64  ct approach to d
08d0: 6f 20 74 68 61 74 2e 0a 20 2a 0a 20 2a 20 20 20  o that.. *. *   
08e0: 44 65 74 61 69 6c 73 2c 20 73 65 65 3a 20 68 74  Details, see: ht
08f0: 74 70 3a 2f 2f 77 77 77 2e 73 74 61 63 6b 2e 6e  tp://www.stack.n
0900: 6c 2f 7e 64 69 6d 69 74 72 69 2f 64 6f 78 79 67  l/~dimitri/doxyg
0910: 65 6e 2f 0a 20 2a 0a 20 2a 20 54 6f 20 74 68 61  en/. *. * To tha
0920: 74 20 65 6e 64 20 70 6c 65 61 73 65 20 66 6f 6c  t end please fol
0930: 6c 6f 77 20 74 68 65 73 65 20 67 75 69 64 65 20  low these guide 
0940: 6c 69 6e 65 73 3a 0a 20 2a 0a 20 2a 20 20 20 20  lines:. *. *    
0950: 28 41 29 20 44 6f 63 75 6d 65 6e 74 20 74 68 65  (A) Document the
0960: 20 50 55 42 4c 49 43 20 61 70 69 20 69 6e 20 74   PUBLIC api in t
0970: 68 65 20 2e 48 20 66 69 6c 65 2e 0a 20 2a 0a 20  he .H file.. *. 
0980: 2a 20 20 20 20 28 42 29 20 44 6f 63 75 6d 65 6e  *    (B) Documen
0990: 74 20 4a 49 4d 20 49 6e 74 65 72 6e 61 6c 73 2c  t JIM Internals,
09a0: 20 69 6e 20 74 68 65 20 2e 43 20 66 69 6c 65 2e   in the .C file.
09b0: 0a 20 2a 0a 20 2a 20 20 20 20 28 43 29 20 52 65  . *. *    (C) Re
09c0: 6d 65 6d 62 65 72 20 4a 49 4d 20 69 73 20 65 6d  member JIM is em
09d0: 62 65 64 64 65 64 20 69 6e 20 6f 74 68 65 72 20  bedded in other 
09e0: 70 61 63 6b 61 67 65 73 2c 20 74 6f 20 74 68 61  packages, to tha
09f0: 74 20 65 6e 64 20 64 6f 0a 20 2a 20 20 20 20 6e  t end do. *    n
0a00: 6f 74 20 61 73 73 75 6d 65 20 74 68 61 74 20 79  ot assume that y
0a10: 6f 75 72 20 77 61 79 20 6f 66 20 64 6f 63 75 6d  our way of docum
0a20: 65 6e 74 69 6e 67 20 69 73 20 74 68 65 20 72 69  enting is the ri
0a30: 67 68 74 20 77 61 79 2c 20 4a 69 6d 27 73 0a 20  ght way, Jim's. 
0a40: 2a 20 20 20 20 70 75 62 6c 69 63 20 64 6f 63 75  *    public docu
0a50: 6d 65 6e 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  mentation should
0a60: 20 62 65 20 61 67 6e 6f 73 74 69 63 2c 20 73 75   be agnostic, su
0a70: 63 68 20 74 68 61 74 20 69 74 20 69 73 20 73 6f  ch that it is so
0a80: 6d 65 0a 20 2a 20 20 20 20 77 68 61 74 20 61 67  me. *    what ag
0a90: 72 65 65 61 62 6c 65 20 77 69 74 68 20 74 68 65  reeable with the
0aa0: 20 22 70 61 63 6b 61 67 65 22 20 74 68 61 74 20   "package" that 
0ab0: 69 73 20 65 6d 62 65 64 64 69 6e 67 20 4a 49 4d  is embedding JIM
0ac0: 20 69 6e 73 69 64 65 0a 20 2a 20 20 20 20 6f 66   inside. *    of
0ad0: 20 69 74 27 73 20 6f 77 6e 20 64 6f 78 79 67 65   it's own doxyge
0ae0: 6e 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2e  n documentation.
0af0: 0a 20 2a 0a 20 2a 20 20 20 20 28 44 29 20 55 73  . *. *    (D) Us
0b00: 65 20 6d 69 6e 69 6d 61 6c 20 44 6f 78 79 67 65  e minimal Doxyge
0b10: 6e 20 74 61 67 73 2e 0a 20 2a 0a 20 2a 20 54 68  n tags.. *. * Th
0b20: 69 73 20 77 69 6c 6c 20 62 65 20 61 6e 20 22 6f  is will be an "o
0b30: 6e 67 6f 69 6e 67 20 77 6f 72 6b 20 69 6e 20 70  ngoing work in p
0b40: 72 6f 67 72 65 73 73 22 20 66 6f 72 20 73 6f 6d  rogress" for som
0b50: 65 20 74 69 6d 65 2e 0a 20 2a 2a 2f 0a 0a 23 69  e time.. **/..#i
0b60: 66 6e 64 65 66 20 5f 5f 4a 49 4d 5f 5f 48 0a 23  fndef __JIM__H.#
0b70: 64 65 66 69 6e 65 20 5f 5f 4a 49 4d 5f 5f 48 0a  define __JIM__H.
0b80: 0a 23 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70  .#ifdef __cplusp
0b90: 6c 75 73 0a 65 78 74 65 72 6e 20 22 43 22 20 7b  lus.extern "C" {
0ba0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
0bb0: 65 20 3c 74 69 6d 65 2e 68 3e 0a 23 69 6e 63 6c  e <time.h>.#incl
0bc0: 75 64 65 20 3c 6c 69 6d 69 74 73 2e 68 3e 0a 23  ude <limits.h>.#
0bd0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
0be0: 3e 20 20 2f 2a 20 66 6f 72 20 74 68 65 20 46 49  >  /* for the FI
0bf0: 4c 45 20 74 79 70 65 64 65 66 20 64 65 66 69 6e  LE typedef defin
0c00: 69 74 69 6f 6e 20 2a 2f 0a 23 69 6e 63 6c 75 64  ition */.#includ
0c10: 65 20 3c 73 74 64 6c 69 62 2e 68 3e 20 2f 2a 20  e <stdlib.h> /* 
0c20: 49 6e 20 6f 72 64 65 72 20 74 6f 20 65 78 70 6f  In order to expo
0c30: 72 74 20 74 68 65 20 4a 69 6d 5f 46 72 65 65 28  rt the Jim_Free(
0c40: 29 20 6d 61 63 72 6f 20 2a 2f 0a 23 69 6e 63 6c  ) macro */.#incl
0c50: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 20 2f  ude <stdarg.h> /
0c60: 2a 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 67 65  * In order to ge
0c70: 74 20 74 79 70 65 20 76 61 5f 6c 69 73 74 20 2a  t type va_list *
0c80: 2f 0a 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /../* ----------
0c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cd0: 2d 2d 2d 0a 20 2a 20 53 79 73 74 65 6d 20 63 6f  ---. * System co
0ce0: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 20 2a 20 61  nfiguration. * a
0cf0: 75 74 6f 63 6f 6e 66 20 28 63 6f 6e 66 69 67 75  utoconf (configu
0d00: 72 65 29 20 77 69 6c 6c 20 73 65 74 20 74 68 65  re) will set the
0d10: 73 65 0a 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  se. * ----------
0d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d60: 2d 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 6a 69  -*/.#include <ji
0d70: 6d 2d 77 69 6e 33 32 63 6f 6d 70 61 74 2e 68 3e  m-win32compat.h>
0d80: 0a 0a 23 69 66 6e 64 65 66 20 48 41 56 45 5f 4e  ..#ifndef HAVE_N
0d90: 4f 5f 41 55 54 4f 43 4f 4e 46 0a 23 69 6e 63 6c  O_AUTOCONF.#incl
0da0: 75 64 65 20 3c 6a 69 6d 2d 63 6f 6e 66 69 67 2e  ude <jim-config.
0db0: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 2d 2d  h>.#endif../* --
0dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 43  -----------. * C
0e10: 6f 6d 70 69 6c 65 72 20 73 70 65 63 69 66 69 63  ompiler specific
0e20: 20 66 69 78 65 73 2e 0a 20 2a 20 2d 2d 2d 2d 2d   fixes.. * -----
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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e70: 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 2f 2a 20 4c 6f 6e  ------*/../* Lon
0e80: 67 20 4c 6f 6e 67 20 74 79 70 65 20 61 6e 64 20  g Long type and 
0e90: 72 65 6c 61 74 65 64 20 69 73 73 75 65 73 20 2a  related issues *
0ea0: 2f 0a 23 69 66 6e 64 65 66 20 6a 69 6d 5f 77 69  /.#ifndef jim_wi
0eb0: 64 65 0a 23 20 20 69 66 64 65 66 20 48 41 56 45  de.#  ifdef HAVE
0ec0: 5f 4c 4f 4e 47 5f 4c 4f 4e 47 0a 23 20 20 20 20  _LONG_LONG.#    
0ed0: 64 65 66 69 6e 65 20 6a 69 6d 5f 77 69 64 65 20  define jim_wide 
0ee0: 6c 6f 6e 67 20 6c 6f 6e 67 0a 23 20 20 20 20 69  long long.#    i
0ef0: 66 6e 64 65 66 20 4c 4c 4f 4e 47 5f 4d 41 58 0a  fndef LLONG_MAX.
0f00: 23 20 20 20 20 20 20 64 65 66 69 6e 65 20 4c 4c  #      define LL
0f10: 4f 4e 47 5f 4d 41 58 20 20 20 20 39 32 32 33 33  ONG_MAX    92233
0f20: 37 32 30 33 36 38 35 34 37 37 35 38 30 37 4c 4c  72036854775807LL
0f30: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 20  .#    endif.#   
0f40: 20 69 66 6e 64 65 66 20 4c 4c 4f 4e 47 5f 4d 49   ifndef LLONG_MI
0f50: 4e 0a 23 20 20 20 20 20 20 64 65 66 69 6e 65 20  N.#      define 
0f60: 4c 4c 4f 4e 47 5f 4d 49 4e 20 20 20 20 28 2d 4c  LLONG_MIN    (-L
0f70: 4c 4f 4e 47 5f 4d 41 58 20 2d 20 31 4c 4c 29 0a  LONG_MAX - 1LL).
0f80: 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 20 20  #    endif.#    
0f90: 64 65 66 69 6e 65 20 4a 49 4d 5f 57 49 44 45 5f  define JIM_WIDE_
0fa0: 4d 49 4e 20 4c 4c 4f 4e 47 5f 4d 49 4e 0a 23 20  MIN LLONG_MIN.# 
0fb0: 20 20 20 64 65 66 69 6e 65 20 4a 49 4d 5f 57 49     define JIM_WI
0fc0: 44 45 5f 4d 41 58 20 4c 4c 4f 4e 47 5f 4d 41 58  DE_MAX LLONG_MAX
0fd0: 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 20 64 65  .#  else.#    de
0fe0: 66 69 6e 65 20 6a 69 6d 5f 77 69 64 65 20 6c 6f  fine jim_wide lo
0ff0: 6e 67 0a 23 20 20 20 20 64 65 66 69 6e 65 20 4a  ng.#    define J
1000: 49 4d 5f 57 49 44 45 5f 4d 49 4e 20 4c 4f 4e 47  IM_WIDE_MIN LONG
1010: 5f 4d 49 4e 0a 23 20 20 20 20 64 65 66 69 6e 65  _MIN.#    define
1020: 20 4a 49 4d 5f 57 49 44 45 5f 4d 41 58 20 4c 4f   JIM_WIDE_MAX LO
1030: 4e 47 5f 4d 41 58 0a 23 20 20 65 6e 64 69 66 0a  NG_MAX.#  endif.
1040: 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./* ------------
1050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1090: 2d 0a 20 2a 20 4c 49 42 43 20 73 70 65 63 69 66  -. * LIBC specif
10a0: 69 63 20 66 69 78 65 73 0a 20 2a 20 2d 2d 2d 2d  ic fixes. * ----
10b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10f0: 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 23 20 20 69 66  -------*/..#  if
1100: 64 65 66 20 48 41 56 45 5f 4c 4f 4e 47 5f 4c 4f  def HAVE_LONG_LO
1110: 4e 47 0a 23 20 20 20 20 64 65 66 69 6e 65 20 4a  NG.#    define J
1120: 49 4d 5f 57 49 44 45 5f 4d 4f 44 49 46 49 45 52  IM_WIDE_MODIFIER
1130: 20 22 6c 6c 64 22 0a 23 20 20 65 6c 73 65 0a 23   "lld".#  else.#
1140: 20 20 20 20 64 65 66 69 6e 65 20 4a 49 4d 5f 57      define JIM_W
1150: 49 44 45 5f 4d 4f 44 49 46 49 45 52 20 22 6c 64  IDE_MODIFIER "ld
1160: 22 0a 23 20 20 20 20 64 65 66 69 6e 65 20 73 74  ".#    define st
1170: 72 74 6f 75 6c 6c 20 73 74 72 74 6f 75 6c 0a 23  rtoull strtoul.#
1180: 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a    endif.#endif..
1190: 23 64 65 66 69 6e 65 20 55 43 48 41 52 28 63 29  #define UCHAR(c)
11a0: 20 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72   ((unsigned char
11b0: 29 28 63 29 29 0a 0a 2f 2a 20 2d 2d 2d 2d 2d 2d  )(c))../* ------
11c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1200: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 45 78 70 6f 72  -------. * Expor
1210: 74 65 64 20 64 65 66 69 6e 65 73 0a 20 2a 20 2d  ted defines. * -
1220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 2f 2a  ----------*/../*
1270: 20 4a 69 6d 20 76 65 72 73 69 6f 6e 20 6e 75 6d   Jim version num
1280: 62 65 72 69 6e 67 3a 20 65 76 65 72 79 20 76 65  bering: every ve
1290: 72 73 69 6f 6e 20 6f 66 20 6a 69 6d 20 69 73 20  rsion of jim is 
12a0: 6d 61 72 6b 65 64 20 77 69 74 68 20 61 0a 20 2a  marked with a. *
12b0: 20 73 75 63 63 65 73 73 69 76 65 20 69 6e 74 65   successive inte
12c0: 67 65 72 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ger number. This
12d0: 20 69 73 20 76 65 72 73 69 6f 6e 20 30 2e 20 54   is version 0. T
12e0: 68 65 20 66 69 72 73 74 0a 20 2a 20 73 74 61 62  he first. * stab
12f0: 6c 65 20 76 65 72 73 69 6f 6e 20 77 69 6c 6c 20  le version will 
1300: 62 65 20 31 2c 20 74 68 65 6e 20 32 2c 20 33 2c  be 1, then 2, 3,
1310: 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 2a 2f 0a 23   and so on. */.#
1320: 64 65 66 69 6e 65 20 4a 49 4d 5f 56 45 52 53 49  define JIM_VERSI
1330: 4f 4e 20 37 33 0a 0a 23 64 65 66 69 6e 65 20 4a  ON 73..#define J
1340: 49 4d 5f 4f 4b 20 30 0a 23 64 65 66 69 6e 65 20  IM_OK 0.#define 
1350: 4a 49 4d 5f 45 52 52 20 31 0a 23 64 65 66 69 6e  JIM_ERR 1.#defin
1360: 65 20 4a 49 4d 5f 52 45 54 55 52 4e 20 32 0a 23  e JIM_RETURN 2.#
1370: 64 65 66 69 6e 65 20 4a 49 4d 5f 42 52 45 41 4b  define JIM_BREAK
1380: 20 33 0a 23 64 65 66 69 6e 65 20 4a 49 4d 5f 43   3.#define JIM_C
1390: 4f 4e 54 49 4e 55 45 20 34 0a 23 64 65 66 69 6e  ONTINUE 4.#defin
13a0: 65 20 4a 49 4d 5f 53 49 47 4e 41 4c 20 35 0a 23  e JIM_SIGNAL 5.#
13b0: 64 65 66 69 6e 65 20 4a 49 4d 5f 45 58 49 54 20  define JIM_EXIT 
13c0: 36 0a 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  6./* The followi
13d0: 6e 67 20 61 72 65 20 69 6e 74 65 72 6e 61 6c 20  ng are internal 
13e0: 63 6f 64 65 73 20 61 6e 64 20 73 68 6f 75 6c 64  codes and should
13f0: 20 6e 65 76 65 72 20 62 65 65 6e 20 73 65 65 6e   never been seen
1400: 2f 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  /used */.#define
1410: 20 4a 49 4d 5f 45 56 41 4c 20 37 0a 0a 23 64 65   JIM_EVAL 7..#de
1420: 66 69 6e 65 20 4a 49 4d 5f 4d 41 58 5f 4e 45 53  fine JIM_MAX_NES
1430: 54 49 4e 47 5f 44 45 50 54 48 20 31 30 30 30 20  TING_DEPTH 1000 
1440: 2f 2a 20 64 65 66 61 75 6c 74 20 6d 61 78 20 6e  /* default max n
1450: 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
1460: 0a 2f 2a 20 53 6f 6d 65 20 66 75 6e 63 74 69 6f  ./* Some functio
1470: 6e 20 67 65 74 20 61 6e 20 69 6e 74 65 67 65 72  n get an integer
1480: 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 66   argument with f
1490: 6c 61 67 73 20 74 6f 20 63 68 61 6e 67 65 0a 20  lags to change. 
14a0: 2a 20 74 68 65 20 62 65 68 61 76 69 6f 75 72 2e  * the behaviour.
14b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 49 4d 5f   */.#define JIM_
14c0: 4e 4f 4e 45 20 30 20 20 20 20 2f 2a 20 6e 6f 20  NONE 0    /* no 
14d0: 66 6c 61 67 73 20 73 65 74 20 2a 2f 0a 23 64 65  flags set */.#de
14e0: 66 69 6e 65 20 4a 49 4d 5f 45 52 52 4d 53 47 20  fine JIM_ERRMSG 
14f0: 31 20 20 20 20 2f 2a 20 73 65 74 20 61 6e 20 65  1    /* set an e
1500: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 20  rror message in 
1510: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  the interpreter.
1520: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4a 49 4d   */..#define JIM
1530: 5f 55 4e 53 48 41 52 45 44 20 34 20 2f 2a 20 46  _UNSHARED 4 /* F
1540: 6c 61 67 20 74 6f 20 4a 69 6d 5f 47 65 74 56 61  lag to Jim_GetVa
1550: 72 69 61 62 6c 65 28 29 20 2a 2f 0a 0a 2f 2a 20  riable() */../* 
1560: 46 6c 61 67 73 20 66 6f 72 20 4a 69 6d 5f 53 75  Flags for Jim_Su
1570: 62 73 74 4f 62 6a 28 29 20 2a 2f 0a 23 64 65 66  bstObj() */.#def
1580: 69 6e 65 20 4a 49 4d 5f 53 55 42 53 54 5f 4e 4f  ine JIM_SUBST_NO
1590: 56 41 52 20 31 20 2f 2a 20 64 6f 6e 27 74 20 70  VAR 1 /* don't p
15a0: 65 72 66 6f 72 6d 20 76 61 72 69 61 62 6c 65 73  erform variables
15b0: 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20 2a   substitutions *
15c0: 2f 0a 23 64 65 66 69 6e 65 20 4a 49 4d 5f 53 55  /.#define JIM_SU
15d0: 42 53 54 5f 4e 4f 43 4d 44 20 32 20 2f 2a 20 64  BST_NOCMD 2 /* d
15e0: 6f 6e 27 74 20 70 65 72 66 6f 72 6d 20 63 6f 6d  on't perform com
15f0: 6d 61 6e 64 20 73 75 62 73 74 69 74 75 74 69 6f  mand substitutio
1600: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 49  ns */.#define JI
1610: 4d 5f 53 55 42 53 54 5f 4e 4f 45 53 43 20 34 20  M_SUBST_NOESC 4 
1620: 2f 2a 20 64 6f 6e 27 74 20 70 65 72 66 6f 72 6d  /* don't perform
1630: 20 65 73 63 61 70 65 73 20 73 75 62 73 74 69 74   escapes substit
1640: 75 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  utions */.#defin
1650: 65 20 4a 49 4d 5f 53 55 42 53 54 5f 46 4c 41 47  e JIM_SUBST_FLAG
1660: 20 31 32 38 20 2f 2a 20 66 6c 61 67 20 74 6f 20   128 /* flag to 
1670: 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74 68  indicate that th
1680: 69 73 20 69 73 20 61 20 72 65 61 6c 20 73 75 62  is is a real sub
1690: 73 74 69 74 69 6f 6e 20 6f 62 6a 65 63 74 20 2a  stition object *
16a0: 2f 0a 0a 2f 2a 20 55 6e 75 73 65 64 20 61 72 67  /../* Unused arg
16b0: 75 6d 65 6e 74 73 20 67 65 6e 65 72 61 74 65 20  uments generate 
16c0: 61 6e 6e 6f 79 69 6e 67 20 77 61 72 6e 69 6e 67  annoying warning
16d0: 73 2e 2e 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s... */.#define 
16e0: 4a 49 4d 5f 4e 4f 54 55 53 45 44 28 56 29 20 28  JIM_NOTUSED(V) (
16f0: 28 76 6f 69 64 29 20 56 29 0a 0a 2f 2a 20 46 6c  (void) V)../* Fl
1700: 61 67 73 20 66 6f 72 20 4a 69 6d 5f 47 65 74 45  ags for Jim_GetE
1710: 6e 75 6d 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  num() */.#define
1720: 20 4a 49 4d 5f 45 4e 55 4d 5f 41 42 42 52 45 56   JIM_ENUM_ABBREV
1730: 20 32 20 20 20 20 2f 2a 20 41 6c 6c 6f 77 20 75   2    /* Allow u
1740: 6e 61 6d 62 69 67 75 6f 75 73 20 61 62 62 72 65  nambiguous abbre
1750: 76 69 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 20 46  viation */../* F
1760: 6c 61 67 73 20 75 73 65 64 20 62 79 20 41 50 49  lags used by API
1770: 20 63 61 6c 6c 73 20 67 65 74 74 69 6e 67 20 61   calls getting a
1780: 20 27 6e 6f 63 61 73 65 27 20 61 72 67 75 6d 65   'nocase' argume
1790: 6e 74 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  nt. */.#define J
17a0: 49 4d 5f 43 41 53 45 53 45 4e 53 20 20 20 20 30  IM_CASESENS    0
17b0: 20 20 20 2f 2a 20 63 61 73 65 20 73 65 6e 73 69     /* case sensi
17c0: 74 69 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tive */.#define 
17d0: 4a 49 4d 5f 4e 4f 43 41 53 45 20 20 20 20 20 20  JIM_NOCASE      
17e0: 31 20 20 20 2f 2a 20 6e 6f 20 63 61 73 65 20 2a  1   /* no case *
17f0: 2f 0a 0a 2f 2a 20 46 69 6c 65 73 79 73 74 65 6d  /../* Filesystem
1800: 20 72 65 6c 61 74 65 64 20 2a 2f 0a 23 64 65 66   related */.#def
1810: 69 6e 65 20 4a 49 4d 5f 50 41 54 48 5f 4c 45 4e  ine JIM_PATH_LEN
1820: 20 31 30 32 34 0a 0a 2f 2a 20 4e 65 77 6c 69 6e   1024../* Newlin
1830: 65 2c 20 73 6f 6d 65 20 65 6d 62 65 64 64 65 64  e, some embedded
1840: 20 73 79 73 74 65 6d 20 6d 61 79 20 6e 65 65 64   system may need
1850: 20 2d 44 4a 49 4d 5f 43 52 4c 46 20 2a 2f 0a 23   -DJIM_CRLF */.#
1860: 69 66 64 65 66 20 4a 49 4d 5f 43 52 4c 46 0a 23  ifdef JIM_CRLF.#
1870: 64 65 66 69 6e 65 20 4a 49 4d 5f 4e 4c 20 22 5c  define JIM_NL "\
1880: 72 5c 6e 22 0a 23 65 6c 73 65 0a 23 64 65 66 69  r\n".#else.#defi
1890: 6e 65 20 4a 49 4d 5f 4e 4c 20 22 5c 6e 22 0a 23  ne JIM_NL "\n".#
18a0: 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 4a  endif..#define J
18b0: 49 4d 5f 4c 49 42 50 41 54 48 20 22 61 75 74 6f  IM_LIBPATH "auto
18c0: 5f 70 61 74 68 22 0a 23 64 65 66 69 6e 65 20 4a  _path".#define J
18d0: 49 4d 5f 49 4e 54 45 52 41 43 54 49 56 45 20 22  IM_INTERACTIVE "
18e0: 74 63 6c 5f 69 6e 74 65 72 61 63 74 69 76 65 22  tcl_interactive"
18f0: 0a 0a 2f 2a 20 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 2d 2d 2d 2d 2d 2d  ----------------
1930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1940: 2d 2d 0a 20 2a 20 53 74 61 63 6b 0a 20 2a 20 2d  --. * Stack. * -
1950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 74 79  ----------*/..ty
19a0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4a 69 6d  pedef struct Jim
19b0: 5f 53 74 61 63 6b 20 7b 0a 20 20 20 20 69 6e 74  _Stack {.    int
19c0: 20 6c 65 6e 3b 0a 20 20 20 20 69 6e 74 20 6d 61   len;.    int ma
19d0: 78 6c 65 6e 3b 0a 20 20 20 20 76 6f 69 64 20 2a  xlen;.    void *
19e0: 2a 76 65 63 74 6f 72 3b 0a 7d 20 4a 69 6d 5f 53  *vector;.} Jim_S
19f0: 74 61 63 6b 3b 0a 0a 2f 2a 20 2d 2d 2d 2d 2d 2d  tack;../* ------
1a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a40: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 48 61 73 68 20  -------. * Hash 
1a50: 74 61 62 6c 65 0a 20 2a 20 2d 2d 2d 2d 2d 2d 2d  table. * -------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1aa0: 2d 2d 2d 2d 2a 2f 0a 0a 74 79 70 65 64 65 66 20  ----*/..typedef 
1ab0: 73 74 72 75 63 74 20 4a 69 6d 5f 48 61 73 68 45  struct Jim_HashE
1ac0: 6e 74 72 79 20 7b 0a 20 20 20 20 63 6f 6e 73 74  ntry {.    const
1ad0: 20 76 6f 69 64 20 2a 6b 65 79 3b 0a 20 20 20 20   void *key;.    
1ae0: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20  union {.        
1af0: 76 6f 69 64 20 2a 76 61 6c 3b 0a 20 20 20 20 20  void *val;.     
1b00: 20 20 20 69 6e 74 20 69 6e 74 76 61 6c 3b 0a 20     int intval;. 
1b10: 20 20 20 7d 20 75 3b 0a 20 20 20 20 73 74 72 75     } u;.    stru
1b20: 63 74 20 4a 69 6d 5f 48 61 73 68 45 6e 74 72 79  ct Jim_HashEntry
1b30: 20 2a 6e 65 78 74 3b 0a 7d 20 4a 69 6d 5f 48 61   *next;.} Jim_Ha
1b40: 73 68 45 6e 74 72 79 3b 0a 0a 74 79 70 65 64 65  shEntry;..typede
1b50: 66 20 73 74 72 75 63 74 20 4a 69 6d 5f 48 61 73  f struct Jim_Has
1b60: 68 54 61 62 6c 65 54 79 70 65 20 7b 0a 20 20 20  hTableType {.   
1b70: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 28 2a   unsigned int (*
1b80: 68 61 73 68 46 75 6e 63 74 69 6f 6e 29 28 63 6f  hashFunction)(co
1b90: 6e 73 74 20 76 6f 69 64 20 2a 6b 65 79 29 3b 0a  nst void *key);.
1ba0: 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a      const void *
1bb0: 28 2a 6b 65 79 44 75 70 29 28 76 6f 69 64 20 2a  (*keyDup)(void *
1bc0: 70 72 69 76 64 61 74 61 2c 20 63 6f 6e 73 74 20  privdata, const 
1bd0: 76 6f 69 64 20 2a 6b 65 79 29 3b 0a 20 20 20 20  void *key);.    
1be0: 76 6f 69 64 20 2a 28 2a 76 61 6c 44 75 70 29 28  void *(*valDup)(
1bf0: 76 6f 69 64 20 2a 70 72 69 76 64 61 74 61 2c 20  void *privdata, 
1c00: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6f 62 6a 29  const void *obj)
1c10: 3b 0a 20 20 20 20 69 6e 74 20 28 2a 6b 65 79 43  ;.    int (*keyC
1c20: 6f 6d 70 61 72 65 29 28 76 6f 69 64 20 2a 70 72  ompare)(void *pr
1c30: 69 76 64 61 74 61 2c 20 63 6f 6e 73 74 20 76 6f  ivdata, const vo
1c40: 69 64 20 2a 6b 65 79 31 2c 20 63 6f 6e 73 74 20  id *key1, const 
1c50: 76 6f 69 64 20 2a 6b 65 79 32 29 3b 0a 20 20 20  void *key2);.   
1c60: 20 76 6f 69 64 20 28 2a 6b 65 79 44 65 73 74 72   void (*keyDestr
1c70: 75 63 74 6f 72 29 28 76 6f 69 64 20 2a 70 72 69  uctor)(void *pri
1c80: 76 64 61 74 61 2c 20 63 6f 6e 73 74 20 76 6f 69  vdata, const voi
1c90: 64 20 2a 6b 65 79 29 3b 0a 20 20 20 20 76 6f 69  d *key);.    voi
1ca0: 64 20 28 2a 76 61 6c 44 65 73 74 72 75 63 74 6f  d (*valDestructo
1cb0: 72 29 28 76 6f 69 64 20 2a 70 72 69 76 64 61 74  r)(void *privdat
1cc0: 61 2c 20 76 6f 69 64 20 2a 6f 62 6a 29 3b 0a 7d  a, void *obj);.}
1cd0: 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65 54 79   Jim_HashTableTy
1ce0: 70 65 3b 0a 0a 74 79 70 65 64 65 66 20 73 74 72  pe;..typedef str
1cf0: 75 63 74 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c  uct Jim_HashTabl
1d00: 65 20 7b 0a 20 20 20 20 4a 69 6d 5f 48 61 73 68  e {.    Jim_Hash
1d10: 45 6e 74 72 79 20 2a 2a 74 61 62 6c 65 3b 0a 20  Entry **table;. 
1d20: 20 20 20 63 6f 6e 73 74 20 4a 69 6d 5f 48 61 73     const Jim_Has
1d30: 68 54 61 62 6c 65 54 79 70 65 20 2a 74 79 70 65  hTableType *type
1d40: 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  ;.    unsigned i
1d50: 6e 74 20 73 69 7a 65 3b 0a 20 20 20 20 75 6e 73  nt size;.    uns
1d60: 69 67 6e 65 64 20 69 6e 74 20 73 69 7a 65 6d 61  igned int sizema
1d70: 73 6b 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64  sk;.    unsigned
1d80: 20 69 6e 74 20 75 73 65 64 3b 0a 20 20 20 20 75   int used;.    u
1d90: 6e 73 69 67 6e 65 64 20 69 6e 74 20 63 6f 6c 6c  nsigned int coll
1da0: 69 73 69 6f 6e 73 3b 0a 20 20 20 20 76 6f 69 64  isions;.    void
1db0: 20 2a 70 72 69 76 64 61 74 61 3b 0a 7d 20 4a 69   *privdata;.} Ji
1dc0: 6d 5f 48 61 73 68 54 61 62 6c 65 3b 0a 0a 74 79  m_HashTable;..ty
1dd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4a 69 6d  pedef struct Jim
1de0: 5f 48 61 73 68 54 61 62 6c 65 49 74 65 72 61 74  _HashTableIterat
1df0: 6f 72 20 7b 0a 20 20 20 20 4a 69 6d 5f 48 61 73  or {.    Jim_Has
1e00: 68 54 61 62 6c 65 20 2a 68 74 3b 0a 20 20 20 20  hTable *ht;.    
1e10: 69 6e 74 20 69 6e 64 65 78 3b 0a 20 20 20 20 4a  int index;.    J
1e20: 69 6d 5f 48 61 73 68 45 6e 74 72 79 20 2a 65 6e  im_HashEntry *en
1e30: 74 72 79 2c 20 2a 6e 65 78 74 45 6e 74 72 79 3b  try, *nextEntry;
1e40: 0a 7d 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65  .} Jim_HashTable
1e50: 49 74 65 72 61 74 6f 72 3b 0a 0a 2f 2a 20 54 68  Iterator;../* Th
1e60: 69 73 20 69 73 20 74 68 65 20 69 6e 69 74 69 61  is is the initia
1e70: 6c 20 73 69 7a 65 20 6f 66 20 65 76 65 72 79 20  l size of every 
1e80: 68 61 73 68 20 74 61 62 6c 65 20 2a 2f 0a 23 64  hash table */.#d
1e90: 65 66 69 6e 65 20 4a 49 4d 5f 48 54 5f 49 4e 49  efine JIM_HT_INI
1ea0: 54 49 41 4c 5f 53 49 5a 45 20 20 20 20 20 31 36  TIAL_SIZE     16
1eb0: 0a 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ../* -----------
1ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ed0: 2d 2d 2d 2d 20 4d 61 63 72 6f 73 20 2d 2d 2d 2d  ---- Macros ----
1ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f00: 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 46  */.#define Jim_F
1f10: 72 65 65 45 6e 74 72 79 56 61 6c 28 68 74 2c 20  reeEntryVal(ht, 
1f20: 65 6e 74 72 79 29 20 5c 0a 20 20 20 20 69 66 20  entry) \.    if 
1f30: 28 28 68 74 29 2d 3e 74 79 70 65 2d 3e 76 61 6c  ((ht)->type->val
1f40: 44 65 73 74 72 75 63 74 6f 72 29 20 5c 0a 20 20  Destructor) \.  
1f50: 20 20 20 20 20 20 28 68 74 29 2d 3e 74 79 70 65        (ht)->type
1f60: 2d 3e 76 61 6c 44 65 73 74 72 75 63 74 6f 72 28  ->valDestructor(
1f70: 28 68 74 29 2d 3e 70 72 69 76 64 61 74 61 2c 20  (ht)->privdata, 
1f80: 28 65 6e 74 72 79 29 2d 3e 75 2e 76 61 6c 29 0a  (entry)->u.val).
1f90: 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 53 65 74  .#define Jim_Set
1fa0: 48 61 73 68 56 61 6c 28 68 74 2c 20 65 6e 74 72  HashVal(ht, entr
1fb0: 79 2c 20 5f 76 61 6c 5f 29 20 64 6f 20 7b 20 5c  y, _val_) do { \
1fc0: 0a 20 20 20 20 69 66 20 28 28 68 74 29 2d 3e 74  .    if ((ht)->t
1fd0: 79 70 65 2d 3e 76 61 6c 44 75 70 29 20 5c 0a 20  ype->valDup) \. 
1fe0: 20 20 20 20 20 20 20 65 6e 74 72 79 2d 3e 75 2e         entry->u.
1ff0: 76 61 6c 20 3d 20 28 68 74 29 2d 3e 74 79 70 65  val = (ht)->type
2000: 2d 3e 76 61 6c 44 75 70 28 28 68 74 29 2d 3e 70  ->valDup((ht)->p
2010: 72 69 76 64 61 74 61 2c 20 5f 76 61 6c 5f 29 3b  rivdata, _val_);
2020: 20 5c 0a 20 20 20 20 65 6c 73 65 20 5c 0a 20 20   \.    else \.  
2030: 20 20 20 20 20 20 65 6e 74 72 79 2d 3e 75 2e 76        entry->u.v
2040: 61 6c 20 3d 20 28 5f 76 61 6c 5f 29 3b 20 5c 0a  al = (_val_); \.
2050: 7d 20 77 68 69 6c 65 28 30 29 0a 0a 23 64 65 66  } while(0)..#def
2060: 69 6e 65 20 4a 69 6d 5f 46 72 65 65 45 6e 74 72  ine Jim_FreeEntr
2070: 79 4b 65 79 28 68 74 2c 20 65 6e 74 72 79 29 20  yKey(ht, entry) 
2080: 5c 0a 20 20 20 20 69 66 20 28 28 68 74 29 2d 3e  \.    if ((ht)->
2090: 74 79 70 65 2d 3e 6b 65 79 44 65 73 74 72 75 63  type->keyDestruc
20a0: 74 6f 72 29 20 5c 0a 20 20 20 20 20 20 20 20 28  tor) \.        (
20b0: 68 74 29 2d 3e 74 79 70 65 2d 3e 6b 65 79 44 65  ht)->type->keyDe
20c0: 73 74 72 75 63 74 6f 72 28 28 68 74 29 2d 3e 70  structor((ht)->p
20d0: 72 69 76 64 61 74 61 2c 20 28 65 6e 74 72 79 29  rivdata, (entry)
20e0: 2d 3e 6b 65 79 29 0a 0a 23 64 65 66 69 6e 65 20  ->key)..#define 
20f0: 4a 69 6d 5f 53 65 74 48 61 73 68 4b 65 79 28 68  Jim_SetHashKey(h
2100: 74 2c 20 65 6e 74 72 79 2c 20 5f 6b 65 79 5f 29  t, entry, _key_)
2110: 20 64 6f 20 7b 20 5c 0a 20 20 20 20 69 66 20 28   do { \.    if (
2120: 28 68 74 29 2d 3e 74 79 70 65 2d 3e 6b 65 79 44  (ht)->type->keyD
2130: 75 70 29 20 5c 0a 20 20 20 20 20 20 20 20 65 6e  up) \.        en
2140: 74 72 79 2d 3e 6b 65 79 20 3d 20 28 68 74 29 2d  try->key = (ht)-
2150: 3e 74 79 70 65 2d 3e 6b 65 79 44 75 70 28 28 68  >type->keyDup((h
2160: 74 29 2d 3e 70 72 69 76 64 61 74 61 2c 20 5f 6b  t)->privdata, _k
2170: 65 79 5f 29 3b 20 5c 0a 20 20 20 20 65 6c 73 65  ey_); \.    else
2180: 20 5c 0a 20 20 20 20 20 20 20 20 65 6e 74 72 79   \.        entry
2190: 2d 3e 6b 65 79 20 3d 20 28 5f 6b 65 79 5f 29 3b  ->key = (_key_);
21a0: 20 5c 0a 7d 20 77 68 69 6c 65 28 30 29 0a 0a 23   \.} while(0)..#
21b0: 64 65 66 69 6e 65 20 4a 69 6d 5f 43 6f 6d 70 61  define Jim_Compa
21c0: 72 65 48 61 73 68 4b 65 79 73 28 68 74 2c 20 6b  reHashKeys(ht, k
21d0: 65 79 31 2c 20 6b 65 79 32 29 20 5c 0a 20 20 20  ey1, key2) \.   
21e0: 20 28 28 28 68 74 29 2d 3e 74 79 70 65 2d 3e 6b   (((ht)->type->k
21f0: 65 79 43 6f 6d 70 61 72 65 29 20 3f 20 5c 0a 20  eyCompare) ? \. 
2200: 20 20 20 20 20 20 20 28 68 74 29 2d 3e 74 79 70         (ht)->typ
2210: 65 2d 3e 6b 65 79 43 6f 6d 70 61 72 65 28 28 68  e->keyCompare((h
2220: 74 29 2d 3e 70 72 69 76 64 61 74 61 2c 20 6b 65  t)->privdata, ke
2230: 79 31 2c 20 6b 65 79 32 29 20 3a 20 5c 0a 20 20  y1, key2) : \.  
2240: 20 20 20 20 20 20 28 6b 65 79 31 29 20 3d 3d 20        (key1) == 
2250: 28 6b 65 79 32 29 29 0a 0a 23 64 65 66 69 6e 65  (key2))..#define
2260: 20 4a 69 6d 5f 48 61 73 68 4b 65 79 28 68 74 2c   Jim_HashKey(ht,
2270: 20 6b 65 79 29 20 28 68 74 29 2d 3e 74 79 70 65   key) (ht)->type
2280: 2d 3e 68 61 73 68 46 75 6e 63 74 69 6f 6e 28 6b  ->hashFunction(k
2290: 65 79 29 0a 0a 23 64 65 66 69 6e 65 20 4a 69 6d  ey)..#define Jim
22a0: 5f 47 65 74 48 61 73 68 45 6e 74 72 79 4b 65 79  _GetHashEntryKey
22b0: 28 68 65 29 20 28 28 68 65 29 2d 3e 6b 65 79 29  (he) ((he)->key)
22c0: 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 47 65 74  .#define Jim_Get
22d0: 48 61 73 68 45 6e 74 72 79 56 61 6c 28 68 65 29  HashEntryVal(he)
22e0: 20 28 28 68 65 29 2d 3e 76 61 6c 29 0a 23 64 65   ((he)->val).#de
22f0: 66 69 6e 65 20 4a 69 6d 5f 47 65 74 48 61 73 68  fine Jim_GetHash
2300: 54 61 62 6c 65 43 6f 6c 6c 69 73 69 6f 6e 73 28  TableCollisions(
2310: 68 74 29 20 28 28 68 74 29 2d 3e 63 6f 6c 6c 69  ht) ((ht)->colli
2320: 73 69 6f 6e 73 29 0a 23 64 65 66 69 6e 65 20 4a  sions).#define J
2330: 69 6d 5f 47 65 74 48 61 73 68 54 61 62 6c 65 53  im_GetHashTableS
2340: 69 7a 65 28 68 74 29 20 28 28 68 74 29 2d 3e 73  ize(ht) ((ht)->s
2350: 69 7a 65 29 0a 23 64 65 66 69 6e 65 20 4a 69 6d  ize).#define Jim
2360: 5f 47 65 74 48 61 73 68 54 61 62 6c 65 55 73 65  _GetHashTableUse
2370: 64 28 68 74 29 20 28 28 68 74 29 2d 3e 75 73 65  d(ht) ((ht)->use
2380: 64 29 0a 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  d)../* ---------
2390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23d0: 2d 2d 2d 2d 0a 20 2a 20 4a 69 6d 5f 4f 62 6a 20  ----. * Jim_Obj 
23e0: 73 74 72 75 63 74 75 72 65 0a 20 2a 20 2d 2d 2d  structure. * ---
23f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2430: 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 2f 2a 20 2d  --------*/../* -
2440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20  ------------. * 
2490: 4a 69 6d 20 6f 62 6a 65 63 74 2e 20 54 68 69 73  Jim object. This
24a0: 20 69 73 20 6d 6f 73 74 6c 79 20 74 68 65 20 73   is mostly the s
24b0: 61 6d 65 20 61 73 20 54 63 6c 5f 4f 62 6a 20 69  ame as Tcl_Obj i
24c0: 74 73 65 6c 66 2c 0a 20 2a 20 77 69 74 68 20 74  tself,. * with t
24d0: 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 74  he addition of t
24e0: 68 65 20 27 70 72 65 76 27 20 61 6e 64 20 27 6e  he 'prev' and 'n
24f0: 65 78 74 27 20 70 6f 69 6e 74 65 72 73 2e 0a 20  ext' pointers.. 
2500: 2a 20 49 6e 20 4a 69 6d 20 61 6c 6c 20 74 68 65  * In Jim all the
2510: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
2520: 72 65 64 20 69 6e 74 6f 20 61 20 6c 69 6e 6b 65  red into a linke
2530: 64 20 6c 69 73 74 20 66 6f 72 20 47 43 20 70 75  d list for GC pu
2540: 72 70 6f 73 65 73 2c 0a 20 2a 20 73 6f 20 74 68  rposes,. * so th
2550: 61 74 20 69 74 27 73 20 70 6f 73 73 69 62 6c 65  at it's possible
2560: 20 74 6f 20 61 63 63 65 73 73 20 65 76 65 72 79   to access every
2570: 20 6f 62 6a 65 63 74 20 6c 69 76 69 6e 67 20 69   object living i
2580: 6e 20 61 20 67 69 76 65 6e 20 69 6e 74 65 72 70  n a given interp
2590: 72 65 74 65 72 0a 20 2a 20 73 65 71 75 65 6e 74  reter. * sequent
25a0: 69 61 6c 6c 79 2e 20 57 68 65 6e 20 61 6e 20 6f  ially. When an o
25b0: 62 6a 65 63 74 20 69 73 20 66 72 65 65 64 2c 20  bject is freed, 
25c0: 69 74 27 73 20 6d 6f 76 65 64 20 69 6e 74 6f 20  it's moved into 
25d0: 61 20 64 69 66 66 65 72 65 6e 74 0a 20 2a 20 6c  a different. * l
25e0: 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 65 64  inked list, used
25f0: 20 61 73 20 6f 62 6a 65 63 74 20 70 6f 6f 6c 2e   as object pool.
2600: 0a 20 2a 0a 20 2a 20 54 68 65 20 72 65 66 63 6f  . *. * The refco
2610: 75 6e 74 20 6f 66 20 61 20 66 72 65 65 64 20 6f  unt of a freed o
2620: 62 6a 65 63 74 20 69 73 20 61 6c 77 61 79 73 20  bject is always 
2630: 2d 31 2e 0a 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  -1.. * ---------
2640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2680: 2d 2d 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  --*/.typedef str
2690: 75 63 74 20 4a 69 6d 5f 4f 62 6a 20 7b 0a 20 20  uct Jim_Obj {.  
26a0: 20 20 69 6e 74 20 72 65 66 43 6f 75 6e 74 3b 20    int refCount; 
26b0: 2f 2a 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75  /* reference cou
26c0: 6e 74 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  nt */.    char *
26d0: 62 79 74 65 73 3b 20 2f 2a 20 73 74 72 69 6e 67  bytes; /* string
26e0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
26f0: 62 75 66 66 65 72 2e 20 4e 55 4c 4c 20 3d 20 6e  buffer. NULL = n
2700: 6f 20 73 74 72 69 6e 67 20 72 65 70 72 2e 20 2a  o string repr. *
2710: 2f 0a 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68  /.    int length
2720: 3b 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  ; /* number of b
2730: 79 74 65 73 20 69 6e 20 27 62 79 74 65 73 27 2c  ytes in 'bytes',
2740: 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20 74   not including t
2750: 68 65 20 6e 75 6d 74 65 72 6d 2e 20 2a 2f 0a 20  he numterm. */. 
2760: 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
2770: 4a 69 6d 5f 4f 62 6a 54 79 70 65 20 2a 74 79 70  Jim_ObjType *typ
2780: 65 50 74 72 3b 20 2f 2a 20 6f 62 6a 65 63 74 20  ePtr; /* object 
2790: 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20 2f 2a 20  type. */.    /* 
27a0: 49 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  Internal represe
27b0: 6e 74 61 74 69 6f 6e 20 75 6e 69 6f 6e 20 2a 2f  ntation union */
27c0: 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
27d0: 20 20 20 20 20 2f 2a 20 69 6e 74 65 67 65 72 20       /* integer 
27e0: 6e 75 6d 62 65 72 20 74 79 70 65 20 2a 2f 0a 20  number type */. 
27f0: 20 20 20 20 20 20 20 6a 69 6d 5f 77 69 64 65 20         jim_wide 
2800: 77 69 64 65 56 61 6c 75 65 3b 0a 20 20 20 20 20  wideValue;.     
2810: 20 20 20 2f 2a 20 68 61 73 68 65 64 20 6f 62 6a     /* hashed obj
2820: 65 63 74 20 74 79 70 65 20 76 61 6c 75 65 20 2a  ect type value *
2830: 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 68 61  /.        int ha
2840: 73 68 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  shValue;.       
2850: 20 2f 2a 20 69 6e 64 65 78 20 74 79 70 65 20 2a   /* index type *
2860: 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e  /.        int in
2870: 64 65 78 56 61 6c 75 65 3b 0a 20 20 20 20 20 20  dexValue;.      
2880: 20 20 2f 2a 20 72 65 74 75 72 6e 20 63 6f 64 65    /* return code
2890: 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 20 20 20   type */.       
28a0: 20 69 6e 74 20 72 65 74 75 72 6e 43 6f 64 65 3b   int returnCode;
28b0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 64 6f 75 62  .        /* doub
28c0: 6c 65 20 6e 75 6d 62 65 72 20 74 79 70 65 20 2a  le number type *
28d0: 2f 0a 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65  /.        double
28e0: 20 64 6f 75 62 6c 65 56 61 6c 75 65 3b 0a 20 20   doubleValue;.  
28f0: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 69 63        /* Generic
2900: 20 70 6f 69 6e 74 65 72 20 2a 2f 0a 20 20 20 20   pointer */.    
2910: 20 20 20 20 76 6f 69 64 20 2a 70 74 72 3b 0a 20      void *ptr;. 
2920: 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 69         /* Generi
2930: 63 20 74 77 6f 20 70 6f 69 6e 74 65 72 73 20 76  c two pointers v
2940: 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  alue */.        
2950: 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
2960: 20 20 20 20 20 76 6f 69 64 20 2a 70 74 72 31 3b       void *ptr1;
2970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69  .            voi
2980: 64 20 2a 70 74 72 32 3b 0a 20 20 20 20 20 20 20  d *ptr2;.       
2990: 20 7d 20 74 77 6f 50 74 72 56 61 6c 75 65 3b 0a   } twoPtrValue;.
29a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 61          /* Varia
29b0: 62 6c 65 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ble object */.  
29c0: 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
29d0: 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67             unsig
29e0: 6e 65 64 20 6a 69 6d 5f 77 69 64 65 20 63 61 6c  ned jim_wide cal
29f0: 6c 46 72 61 6d 65 49 64 3b 0a 20 20 20 20 20 20  lFrameId;.      
2a00: 20 20 20 20 20 20 73 74 72 75 63 74 20 4a 69 6d        struct Jim
2a10: 5f 56 61 72 20 2a 76 61 72 50 74 72 3b 0a 20 20  _Var *varPtr;.  
2a20: 20 20 20 20 20 20 7d 20 76 61 72 56 61 6c 75 65        } varValue
2a30: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ;.        /* Com
2a40: 6d 61 6e 64 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  mand object */. 
2a50: 20 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a         struct {.
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69              unsi
2a70: 67 6e 65 64 20 6a 69 6d 5f 77 69 64 65 20 70 72  gned jim_wide pr
2a80: 6f 63 45 70 6f 63 68 3b 0a 20 20 20 20 20 20 20  ocEpoch;.       
2a90: 20 20 20 20 20 73 74 72 75 63 74 20 4a 69 6d 5f       struct Jim_
2aa0: 43 6d 64 20 2a 63 6d 64 50 74 72 3b 0a 20 20 20  Cmd *cmdPtr;.   
2ab0: 20 20 20 20 20 7d 20 63 6d 64 56 61 6c 75 65 3b       } cmdValue;
2ac0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  .        /* List
2ad0: 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 20   object */.     
2ae0: 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
2af0: 20 20 20 20 20 20 20 20 73 74 72 75 63 74 20 4a          struct J
2b00: 69 6d 5f 4f 62 6a 20 2a 2a 65 6c 65 3b 20 20 20  im_Obj **ele;   
2b10: 20 2f 2a 20 45 6c 65 6d 65 6e 74 73 20 76 65 63   /* Elements vec
2b20: 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  tor */.         
2b30: 20 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20     int len;     
2b40: 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 2a 2f 0a     /* Length */.
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
2b60: 6d 61 78 4c 65 6e 3b 20 20 20 20 20 20 20 20 2f  maxLen;        /
2b70: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 27 65 6c 65  * Allocated 'ele
2b80: 27 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 20 20  ' length */.    
2b90: 20 20 20 20 7d 20 6c 69 73 74 56 61 6c 75 65 3b      } listValue;
2ba0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  .        /* Stri
2bb0: 6e 67 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 20  ng type */.     
2bc0: 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
2bd0: 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 78 4c          int maxL
2be0: 65 6e 67 74 68 3b 0a 20 20 20 20 20 20 20 20 20  ength;.         
2bf0: 20 20 20 69 6e 74 20 63 68 61 72 4c 65 6e 67 74     int charLengt
2c00: 68 3b 20 20 20 20 20 2f 2a 20 75 74 66 2d 38 20  h;     /* utf-8 
2c10: 63 68 61 72 20 6c 65 6e 67 74 68 2e 20 2d 31 20  char length. -1 
2c20: 69 66 20 75 6e 6b 6e 6f 77 6e 20 2a 2f 0a 20 20  if unknown */.  
2c30: 20 20 20 20 20 20 7d 20 73 74 72 56 61 6c 75 65        } strValue
2c40: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 65 66  ;.        /* Ref
2c50: 65 72 65 6e 63 65 20 74 79 70 65 20 2a 2f 0a 20  erence type */. 
2c60: 20 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a         struct {.
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 6a 69 6d 5f              jim_
2c80: 77 69 64 65 20 69 64 3b 0a 20 20 20 20 20 20 20  wide id;.       
2c90: 20 20 20 20 20 73 74 72 75 63 74 20 4a 69 6d 5f       struct Jim_
2ca0: 52 65 66 65 72 65 6e 63 65 20 2a 72 65 66 50 74  Reference *refPt
2cb0: 72 3b 0a 20 20 20 20 20 20 20 20 7d 20 72 65 66  r;.        } ref
2cc0: 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 2f  Value;.        /
2cd0: 2a 20 53 6f 75 72 63 65 20 74 79 70 65 20 2a 2f  * Source type */
2ce0: 0a 20 20 20 20 20 20 20 20 73 74 72 75 63 74 20  .        struct 
2cf0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  {.            st
2d00: 72 75 63 74 20 4a 69 6d 5f 4f 62 6a 20 2a 66 69  ruct Jim_Obj *fi
2d10: 6c 65 4e 61 6d 65 4f 62 6a 3b 0a 20 20 20 20 20  leNameObj;.     
2d20: 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6e 65 4e         int lineN
2d30: 75 6d 62 65 72 3b 0a 20 20 20 20 20 20 20 20 7d  umber;.        }
2d40: 20 73 6f 75 72 63 65 56 61 6c 75 65 3b 0a 20 20   sourceValue;.  
2d50: 20 20 20 20 20 20 2f 2a 20 44 69 63 74 20 73 75        /* Dict su
2d60: 62 73 74 69 74 75 74 69 6f 6e 20 74 79 70 65 20  bstitution type 
2d70: 2a 2f 0a 20 20 20 20 20 20 20 20 73 74 72 75 63  */.        struc
2d80: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t {.            
2d90: 73 74 72 75 63 74 20 4a 69 6d 5f 4f 62 6a 20 2a  struct Jim_Obj *
2da0: 76 61 72 4e 61 6d 65 4f 62 6a 50 74 72 3b 0a 20  varNameObjPtr;. 
2db0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 75 63             struc
2dc0: 74 20 4a 69 6d 5f 4f 62 6a 20 2a 69 6e 64 65 78  t Jim_Obj *index
2dd0: 4f 62 6a 50 74 72 3b 0a 20 20 20 20 20 20 20 20  ObjPtr;.        
2de0: 7d 20 64 69 63 74 53 75 62 73 74 56 61 6c 75 65  } dictSubstValue
2df0: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 74 61 67  ;.        /* tag
2e00: 67 65 64 20 62 69 6e 61 72 79 20 74 79 70 65 20  ged binary type 
2e10: 2a 2f 0a 20 20 20 20 20 20 20 20 73 74 72 75 63  */.        struc
2e20: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t {.            
2e30: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 64  unsigned char *d
2e40: 61 74 61 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ata;.           
2e50: 20 73 69 7a 65 5f 74 20 20 20 20 20 20 20 20 20   size_t         
2e60: 6c 65 6e 3b 0a 20 20 20 20 20 20 20 20 7d 20 62  len;.        } b
2e70: 69 6e 61 72 79 56 61 6c 75 65 3b 0a 20 20 20 20  inaryValue;.    
2e80: 20 20 20 20 2f 2a 20 52 65 67 75 6c 61 72 20 65      /* Regular e
2e90: 78 70 72 65 73 73 69 6f 6e 20 70 61 74 74 65 72  xpression patter
2ea0: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 74 72  n */.        str
2eb0: 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20  uct {.          
2ec0: 20 20 75 6e 73 69 67 6e 65 64 20 66 6c 61 67 73    unsigned flags
2ed0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 6f  ;.            vo
2ee0: 69 64 20 2a 63 6f 6d 70 72 65 3b 20 20 20 20 20  id *compre;     
2ef0: 20 20 2f 2a 20 72 65 61 6c 6c 79 20 61 6e 20 61    /* really an a
2f00: 6c 6c 6f 63 61 74 65 64 20 28 72 65 67 65 78 5f  llocated (regex_
2f10: 74 20 2a 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  t *) */.        
2f20: 7d 20 72 65 67 65 78 70 56 61 6c 75 65 3b 0a 20  } regexpValue;. 
2f30: 20 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a         struct {.
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
2f50: 6c 69 6e 65 3b 0a 20 20 20 20 20 20 20 20 20 20  line;.          
2f60: 20 20 69 6e 74 20 61 72 67 63 3b 0a 20 20 20 20    int argc;.    
2f70: 20 20 20 20 7d 20 73 63 72 69 70 74 4c 69 6e 65      } scriptLine
2f80: 56 61 6c 75 65 3b 0a 20 20 20 20 7d 20 69 6e 74  Value;.    } int
2f90: 65 72 6e 61 6c 52 65 70 3b 0a 20 20 20 20 2f 2a  ernalRep;.    /*
2fa0: 20 54 68 69 73 20 61 72 65 20 38 20 6f 72 20 31   This are 8 or 1
2fb0: 36 20 62 79 74 65 73 20 6d 6f 72 65 20 66 6f 72  6 bytes more for
2fc0: 20 65 76 65 72 79 20 6f 62 6a 65 63 74 0a 20 20   every object.  
2fd0: 20 20 20 2a 20 62 75 74 20 74 68 69 73 20 69 73     * but this is
2fe0: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 66   required for ef
2ff0: 66 69 63 69 65 6e 74 20 67 61 72 62 61 67 65 20  ficient garbage 
3000: 63 6f 6c 6c 65 63 74 69 6f 6e 0a 20 20 20 20 20  collection.     
3010: 2a 20 6f 66 20 4a 69 6d 20 72 65 66 65 72 65 6e  * of Jim referen
3020: 63 65 73 2e 20 2a 2f 0a 20 20 20 20 73 74 72 75  ces. */.    stru
3030: 63 74 20 4a 69 6d 5f 4f 62 6a 20 2a 70 72 65 76  ct Jim_Obj *prev
3040: 4f 62 6a 50 74 72 3b 20 2f 2a 20 70 6f 69 6e 74  ObjPtr; /* point
3050: 65 72 20 74 6f 20 74 68 65 20 70 72 65 76 20 6f  er to the prev o
3060: 62 6a 65 63 74 2e 20 2a 2f 0a 20 20 20 20 73 74  bject. */.    st
3070: 72 75 63 74 20 4a 69 6d 5f 4f 62 6a 20 2a 6e 65  ruct Jim_Obj *ne
3080: 78 74 4f 62 6a 50 74 72 3b 20 2f 2a 20 70 6f 69  xtObjPtr; /* poi
3090: 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  nter to the next
30a0: 20 6f 62 6a 65 63 74 2e 20 2a 2f 0a 7d 20 4a 69   object. */.} Ji
30b0: 6d 5f 4f 62 6a 3b 0a 0a 2f 2a 20 4a 69 6d 5f 4f  m_Obj;../* Jim_O
30c0: 62 6a 20 72 65 6c 61 74 65 64 20 6d 61 63 72 6f  bj related macro
30d0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 69 6d  s */.#define Jim
30e0: 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 6f 62  _IncrRefCount(ob
30f0: 6a 50 74 72 29 20 5c 0a 20 20 20 20 2b 2b 28 6f  jPtr) \.    ++(o
3100: 62 6a 50 74 72 29 2d 3e 72 65 66 43 6f 75 6e 74  bjPtr)->refCount
3110: 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 44 65 63  .#define Jim_Dec
3120: 72 52 65 66 43 6f 75 6e 74 28 69 6e 74 65 72 70  rRefCount(interp
3130: 2c 20 6f 62 6a 50 74 72 29 20 5c 0a 20 20 20 20  , objPtr) \.    
3140: 69 66 20 28 2d 2d 28 6f 62 6a 50 74 72 29 2d 3e  if (--(objPtr)->
3150: 72 65 66 43 6f 75 6e 74 20 3c 3d 20 30 29 20 4a  refCount <= 0) J
3160: 69 6d 5f 46 72 65 65 4f 62 6a 28 69 6e 74 65 72  im_FreeObj(inter
3170: 70 2c 20 6f 62 6a 50 74 72 29 0a 23 64 65 66 69  p, objPtr).#defi
3180: 6e 65 20 4a 69 6d 5f 49 73 53 68 61 72 65 64 28  ne Jim_IsShared(
3190: 6f 62 6a 50 74 72 29 20 5c 0a 20 20 20 20 28 28  objPtr) \.    ((
31a0: 6f 62 6a 50 74 72 29 2d 3e 72 65 66 43 6f 75 6e  objPtr)->refCoun
31b0: 74 20 3e 20 31 29 0a 0a 2f 2a 20 54 68 69 73 20  t > 1)../* This 
31c0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 77 68  macro is used wh
31d0: 65 6e 20 77 65 20 61 6c 6c 6f 63 61 74 65 20 61  en we allocate a
31e0: 20 6e 65 77 20 6f 62 6a 65 63 74 20 75 73 69 6e   new object usin
31f0: 67 0a 20 2a 20 4a 69 6d 5f 4e 65 77 2e 2e 2e 4f  g. * Jim_New...O
3200: 62 6a 28 29 2c 20 62 75 74 20 66 6f 72 20 73 6f  bj(), but for so
3210: 6d 65 20 65 72 72 6f 72 20 77 65 20 6e 65 65 64  me error we need
3220: 20 74 6f 20 64 65 73 74 72 6f 79 20 69 74 2e 0a   to destroy it..
3230: 20 2a 20 49 6e 73 74 65 61 64 20 74 6f 20 75 73   * Instead to us
3240: 65 20 4a 69 6d 5f 49 6e 63 72 52 65 66 43 6f 75  e Jim_IncrRefCou
3250: 6e 74 28 29 20 2b 20 4a 69 6d 5f 44 65 63 72 52  nt() + Jim_DecrR
3260: 65 66 43 6f 75 6e 74 28 29 20 77 65 0a 20 2a 20  efCount() we. * 
3270: 63 61 6e 20 6a 75 73 74 20 63 61 6c 6c 20 4a 69  can just call Ji
3280: 6d 5f 46 72 65 65 4e 65 77 4f 62 6a 2e 20 54 6f  m_FreeNewObj. To
3290: 20 63 61 6c 6c 20 4a 69 6d 5f 46 72 65 65 20 64   call Jim_Free d
32a0: 69 72 65 63 74 6c 79 0a 20 2a 20 73 65 65 6d 73  irectly. * seems
32b0: 20 74 6f 6f 20 72 61 77 2c 20 74 68 65 20 6f 62   too raw, the ob
32c0: 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 6d 61  ject handling ma
32d0: 79 20 63 68 61 6e 67 65 20 61 6e 64 20 77 65 20  y change and we 
32e0: 77 61 6e 74 0a 20 2a 20 74 68 61 74 20 4a 69 6d  want. * that Jim
32f0: 5f 46 72 65 65 4e 65 77 4f 62 6a 28 29 20 63 61  _FreeNewObj() ca
3300: 6e 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79  n be called only
3310: 20 61 67 61 69 6e 73 74 20 6f 62 6a 65 63 74 73   against objects
3320: 0a 20 2a 20 74 68 61 74 20 61 72 65 20 62 65 6c  . * that are bel
3330: 69 76 65 64 20 74 6f 20 68 61 76 65 20 72 65 66  ived to have ref
3340: 63 6f 75 6e 74 20 3d 3d 20 30 2e 20 2a 2f 0a 23  count == 0. */.#
3350: 64 65 66 69 6e 65 20 4a 69 6d 5f 46 72 65 65 4e  define Jim_FreeN
3360: 65 77 4f 62 6a 20 4a 69 6d 5f 46 72 65 65 4f 62  ewObj Jim_FreeOb
3370: 6a 0a 0a 2f 2a 20 46 72 65 65 20 74 68 65 20 69  j../* Free the i
3380: 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
3390: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 62  tation of the ob
33a0: 6a 65 63 74 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  ject. */.#define
33b0: 20 4a 69 6d 5f 46 72 65 65 49 6e 74 52 65 70 28   Jim_FreeIntRep(
33c0: 69 2c 6f 29 20 5c 0a 20 20 20 20 69 66 20 28 28  i,o) \.    if ((
33d0: 6f 29 2d 3e 74 79 70 65 50 74 72 20 26 26 20 28  o)->typePtr && (
33e0: 6f 29 2d 3e 74 79 70 65 50 74 72 2d 3e 66 72 65  o)->typePtr->fre
33f0: 65 49 6e 74 52 65 70 50 72 6f 63 29 20 5c 0a 20  eIntRepProc) \. 
3400: 20 20 20 20 20 20 20 28 6f 29 2d 3e 74 79 70 65         (o)->type
3410: 50 74 72 2d 3e 66 72 65 65 49 6e 74 52 65 70 50  Ptr->freeIntRepP
3420: 72 6f 63 28 69 2c 20 6f 29 0a 0a 2f 2a 20 47 65  roc(i, o)../* Ge
3430: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  t the internal r
3440: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 6f  epresentation po
3450: 69 6e 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  inter */.#define
3460: 20 4a 69 6d 5f 47 65 74 49 6e 74 52 65 70 50 74   Jim_GetIntRepPt
3470: 72 28 6f 29 20 28 6f 29 2d 3e 69 6e 74 65 72 6e  r(o) (o)->intern
3480: 61 6c 52 65 70 2e 70 74 72 0a 0a 2f 2a 20 53 65  alRep.ptr../* Se
3490: 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  t the internal r
34a0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 6f  epresentation po
34b0: 69 6e 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  inter */.#define
34c0: 20 4a 69 6d 5f 53 65 74 49 6e 74 52 65 70 50 74   Jim_SetIntRepPt
34d0: 72 28 6f 2c 20 70 29 20 5c 0a 20 20 20 20 28 6f  r(o, p) \.    (o
34e0: 29 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 70  )->internalRep.p
34f0: 74 72 20 3d 20 28 70 29 0a 0a 2f 2a 20 54 68 65  tr = (p)../* The
3500: 20 6f 62 6a 65 63 74 20 74 79 70 65 20 73 74 72   object type str
3510: 75 63 74 75 72 65 2e 0a 20 2a 20 54 68 65 72 65  ucture.. * There
3520: 20 61 72 65 20 66 6f 75 72 20 6d 65 74 68 6f 64   are four method
3530: 73 2e 0a 20 2a 0a 20 2a 20 2d 20 46 72 65 65 49  s.. *. * - FreeI
3540: 6e 74 52 65 70 20 69 73 20 75 73 65 64 20 74 6f  ntRep is used to
3550: 20 66 72 65 65 20 74 68 65 20 69 6e 74 65 72 6e   free the intern
3560: 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
3570: 6e 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 2e  n of the object.
3580: 0a 20 2a 20 20 20 43 61 6e 20 62 65 20 4e 55 4c  . *   Can be NUL
3590: 4c 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  L if there is no
35a0: 74 68 69 6e 67 20 74 6f 20 66 72 65 65 2e 0a 20  thing to free.. 
35b0: 2a 20 2d 20 44 75 70 49 6e 74 52 65 70 20 69 73  * - DupIntRep is
35c0: 20 75 73 65 64 20 74 6f 20 64 75 70 6c 69 63 61   used to duplica
35d0: 74 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  te the internal 
35e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
35f0: 66 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a 20 2a  f the object.. *
3600: 20 20 20 49 66 20 4e 55 4c 4c 2c 20 77 68 65 6e     If NULL, when
3610: 20 61 6e 20 6f 62 6a 65 63 74 20 69 73 20 64 75   an object is du
3620: 70 6c 69 63 61 74 65 64 2c 20 74 68 65 20 69 6e  plicated, the in
3630: 74 65 72 6e 61 6c 52 65 70 20 75 6e 69 6f 6e 20  ternalRep union 
3640: 69 73 0a 20 2a 20 20 20 64 69 72 65 63 74 6c 79  is. *   directly
3650: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 61 6e 20   copied from an 
3660: 6f 62 6a 65 63 74 20 74 6f 20 61 6e 6f 74 68 65  object to anothe
3670: 72 2e 0a 20 2a 20 20 20 4e 6f 74 65 20 74 68 61  r.. *   Note tha
3680: 74 20 69 74 27 73 20 75 70 20 74 6f 20 74 68 65  t it's up to the
3690: 20 63 61 6c 6c 65 72 20 74 6f 20 66 72 65 65 20   caller to free 
36a0: 74 68 65 20 6f 6c 64 20 69 6e 74 65 72 6e 61 6c  the old internal
36b0: 20 72 65 70 72 20 6f 66 20 74 68 65 0a 20 2a 20   repr of the. * 
36c0: 20 20 6f 62 6a 65 63 74 20 62 65 66 6f 72 65 20    object before 
36d0: 74 6f 20 63 61 6c 6c 20 74 68 65 20 44 75 70 20  to call the Dup 
36e0: 6d 65 74 68 6f 64 2e 0a 20 2a 20 2d 20 55 70 64  method.. * - Upd
36f0: 61 74 65 53 74 72 69 6e 67 20 69 73 20 75 73 65  ateString is use
3700: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
3710: 73 74 72 69 6e 67 20 66 72 6f 6d 20 74 68 65 20  string from the 
3720: 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 2e 0a 20  internal repr.. 
3730: 2a 20 2d 20 73 65 74 46 72 6f 6d 41 6e 79 20 69  * - setFromAny i
3740: 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72  s used to conver
3750: 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f 62  t the current ob
3760: 6a 65 63 74 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ject into one of
3770: 20 74 68 69 73 20 74 79 70 65 2e 0a 20 2a 2f 0a   this type.. */.
3780: 0a 73 74 72 75 63 74 20 4a 69 6d 5f 49 6e 74 65  .struct Jim_Inte
3790: 72 70 3b 0a 0a 74 79 70 65 64 65 66 20 76 6f 69  rp;..typedef voi
37a0: 64 20 28 4a 69 6d 5f 46 72 65 65 49 6e 74 65 72  d (Jim_FreeInter
37b0: 6e 61 6c 52 65 70 50 72 6f 63 29 28 73 74 72 75  nalRepProc)(stru
37c0: 63 74 20 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  ct Jim_Interp *i
37d0: 6e 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20 73  nterp,.        s
37e0: 74 72 75 63 74 20 4a 69 6d 5f 4f 62 6a 20 2a 6f  truct Jim_Obj *o
37f0: 62 6a 50 74 72 29 3b 0a 74 79 70 65 64 65 66 20  bjPtr);.typedef 
3800: 76 6f 69 64 20 28 4a 69 6d 5f 44 75 70 49 6e 74  void (Jim_DupInt
3810: 65 72 6e 61 6c 52 65 70 50 72 6f 63 29 28 73 74  ernalRepProc)(st
3820: 72 75 63 74 20 4a 69 6d 5f 49 6e 74 65 72 70 20  ruct Jim_Interp 
3830: 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20 20  *interp,.       
3840: 20 73 74 72 75 63 74 20 4a 69 6d 5f 4f 62 6a 20   struct Jim_Obj 
3850: 2a 73 72 63 50 74 72 2c 20 4a 69 6d 5f 4f 62 6a  *srcPtr, Jim_Obj
3860: 20 2a 64 75 70 50 74 72 29 3b 0a 74 79 70 65 64   *dupPtr);.typed
3870: 65 66 20 76 6f 69 64 20 28 4a 69 6d 5f 55 70 64  ef void (Jim_Upd
3880: 61 74 65 53 74 72 69 6e 67 50 72 6f 63 29 28 73  ateStringProc)(s
3890: 74 72 75 63 74 20 4a 69 6d 5f 4f 62 6a 20 2a 6f  truct Jim_Obj *o
38a0: 62 6a 50 74 72 29 3b 0a 0a 74 79 70 65 64 65 66  bjPtr);..typedef
38b0: 20 73 74 72 75 63 74 20 4a 69 6d 5f 4f 62 6a 54   struct Jim_ObjT
38c0: 79 70 65 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20  ype {.    const 
38d0: 63 68 61 72 20 2a 6e 61 6d 65 3b 20 2f 2a 20 54  char *name; /* T
38e0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
38f0: 79 70 65 2e 20 2a 2f 0a 20 20 20 20 4a 69 6d 5f  ype. */.    Jim_
3900: 46 72 65 65 49 6e 74 65 72 6e 61 6c 52 65 70 50  FreeInternalRepP
3910: 72 6f 63 20 2a 66 72 65 65 49 6e 74 52 65 70 50  roc *freeIntRepP
3920: 72 6f 63 3b 0a 20 20 20 20 4a 69 6d 5f 44 75 70  roc;.    Jim_Dup
3930: 49 6e 74 65 72 6e 61 6c 52 65 70 50 72 6f 63 20  InternalRepProc 
3940: 2a 64 75 70 49 6e 74 52 65 70 50 72 6f 63 3b 0a  *dupIntRepProc;.
3950: 20 20 20 20 4a 69 6d 5f 55 70 64 61 74 65 53 74      Jim_UpdateSt
3960: 72 69 6e 67 50 72 6f 63 20 2a 75 70 64 61 74 65  ringProc *update
3970: 53 74 72 69 6e 67 50 72 6f 63 3b 0a 20 20 20 20  StringProc;.    
3980: 69 6e 74 20 66 6c 61 67 73 3b 0a 7d 20 4a 69 6d  int flags;.} Jim
3990: 5f 4f 62 6a 54 79 70 65 3b 0a 0a 2f 2a 20 4a 69  _ObjType;../* Ji
39a0: 6d 5f 4f 62 6a 54 79 70 65 20 66 6c 61 67 73 20  m_ObjType flags 
39b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 49 4d 5f 54  */.#define JIM_T
39c0: 59 50 45 5f 4e 4f 4e 45 20 30 20 20 20 20 20 20  YPE_NONE 0      
39d0: 20 20 2f 2a 20 4e 6f 20 66 6c 61 67 73 20 2a 2f    /* No flags */
39e0: 0a 23 64 65 66 69 6e 65 20 4a 49 4d 5f 54 59 50  .#define JIM_TYP
39f0: 45 5f 52 45 46 45 52 45 4e 43 45 53 20 31 20 20  E_REFERENCES 1  
3a00: 20 20 2f 2a 20 54 68 65 20 6f 62 6a 65 63 74 20    /* The object 
3a10: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 65 66 65  may contain refe
3a20: 72 6e 65 63 65 73 2e 20 2a 2f 0a 0a 2f 2a 20 53  rneces. */../* S
3a30: 74 61 72 74 69 6e 67 20 66 72 6f 6d 20 31 20 3c  tarting from 1 <
3a40: 3c 20 32 30 20 66 6c 61 67 73 20 61 72 65 20 72  < 20 flags are r
3a50: 65 73 65 72 76 65 64 20 66 6f 72 20 70 72 69 76  eserved for priv
3a60: 61 74 65 20 75 73 65 73 20 6f 66 0a 20 2a 20 64  ate uses of. * d
3a70: 69 66 66 65 72 65 6e 74 20 63 61 6c 6c 73 2e 20  ifferent calls. 
3a80: 54 68 69 73 20 77 61 79 20 74 68 65 20 73 61 6d  This way the sam
3a90: 65 20 27 66 6c 61 67 73 27 20 61 72 67 75 6d 65  e 'flags' argume
3aa0: 6e 74 20 6d 61 79 20 62 65 20 75 73 65 64 0a 20  nt may be used. 
3ab0: 2a 20 74 6f 20 70 61 73 73 20 62 6f 74 68 20 67  * to pass both g
3ac0: 6c 6f 62 61 6c 20 66 6c 61 67 73 20 61 6e 64 20  lobal flags and 
3ad0: 70 72 69 76 61 74 65 20 66 6c 61 67 73 2e 20 2a  private flags. *
3ae0: 2f 0a 23 64 65 66 69 6e 65 20 4a 49 4d 5f 50 52  /.#define JIM_PR
3af0: 49 56 5f 46 4c 41 47 5f 53 48 49 46 54 20 32 30  IV_FLAG_SHIFT 20
3b00: 0a 0a 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ../* -----------
3b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b50: 2d 2d 0a 20 2a 20 43 61 6c 6c 20 66 72 61 6d 65  --. * Call frame
3b60: 2c 20 76 61 72 73 2c 20 63 6f 6d 6d 61 6e 64 73  , vars, commands
3b70: 20 73 74 72 75 63 74 75 72 65 73 0a 20 2a 20 2d   structures. * -
3b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 2a 2f 0a 0a 2f 2a  ----------*/../*
3bd0: 20 43 61 6c 6c 20 66 72 61 6d 65 20 2a 2f 0a 74   Call frame */.t
3be0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4a 69  ypedef struct Ji
3bf0: 6d 5f 43 61 6c 6c 46 72 61 6d 65 20 7b 0a 20 20  m_CallFrame {.  
3c00: 20 20 75 6e 73 69 67 6e 65 64 20 6a 69 6d 5f 77    unsigned jim_w
3c10: 69 64 65 20 69 64 3b 20 2f 2a 20 43 61 6c 6c 20  ide id; /* Call 
3c20: 46 72 61 6d 65 20 49 44 2e 20 55 73 65 64 20 66  Frame ID. Used f
3c30: 6f 72 20 63 61 63 68 69 6e 67 2e 20 2a 2f 0a 20  or caching. */. 
3c40: 20 20 20 69 6e 74 20 6c 65 76 65 6c 3b 20 2f 2a     int level; /*
3c50: 20 4c 65 76 65 6c 20 6f 66 20 74 68 69 73 20 63   Level of this c
3c60: 61 6c 6c 20 66 72 61 6d 65 2e 20 30 20 3d 20 67  all frame. 0 = g
3c70: 6c 6f 62 61 6c 20 2a 2f 0a 20 20 20 20 73 74 72  lobal */.    str
3c80: 75 63 74 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c  uct Jim_HashTabl
3c90: 65 20 76 61 72 73 3b 20 2f 2a 20 57 68 65 72 65  e vars; /* Where
3ca0: 20 6c 6f 63 61 6c 20 76 61 72 73 20 61 72 65 20   local vars are 
3cb0: 73 74 6f 72 65 64 20 2a 2f 0a 20 20 20 20 73 74  stored */.    st
3cc0: 72 75 63 74 20 4a 69 6d 5f 48 61 73 68 54 61 62  ruct Jim_HashTab
3cd0: 6c 65 20 2a 73 74 61 74 69 63 56 61 72 73 3b 20  le *staticVars; 
3ce0: 2f 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 70 72  /* pointer to pr
3cf0: 6f 63 65 64 75 72 65 20 73 74 61 74 69 63 20 76  ocedure static v
3d00: 61 72 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ars */.    struc
3d10: 74 20 4a 69 6d 5f 43 61 6c 6c 46 72 61 6d 65 20  t Jim_CallFrame 
3d20: 2a 70 61 72 65 6e 74 43 61 6c 6c 46 72 61 6d 65  *parentCallFrame
3d30: 3b 0a 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 63  ;.    Jim_Obj *c
3d40: 6f 6e 73 74 20 2a 61 72 67 76 3b 20 2f 2a 20 6f  onst *argv; /* o
3d50: 62 6a 65 63 74 20 76 65 63 74 6f 72 20 6f 66 20  bject vector of 
3d60: 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
3d70: 65 64 75 72 65 20 63 61 6c 6c 2e 20 2a 2f 0a 20  edure call. */. 
3d80: 20 20 20 69 6e 74 20 61 72 67 63 3b 20 2f 2a 20     int argc; /* 
3d90: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 73 20 6f  number of args o
3da0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
3db0: 6f 63 65 64 75 72 65 20 63 61 6c 6c 2e 20 2a 2f  ocedure call. */
3dc0: 0a 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 70 72  .    Jim_Obj *pr
3dd0: 6f 63 41 72 67 73 4f 62 6a 50 74 72 3b 20 2f 2a  ocArgsObjPtr; /*
3de0: 20 61 72 67 6c 69 73 74 20 6f 62 6a 65 63 74 20   arglist object 
3df0: 6f 66 20 74 68 65 20 72 75 6e 6e 69 6e 67 20 70  of the running p
3e00: 72 6f 63 65 64 75 72 65 20 2a 2f 0a 20 20 20 20  rocedure */.    
3e10: 4a 69 6d 5f 4f 62 6a 20 2a 70 72 6f 63 42 6f 64  Jim_Obj *procBod
3e20: 79 4f 62 6a 50 74 72 3b 20 2f 2a 20 62 6f 64 79  yObjPtr; /* body
3e30: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 65 20 72   object of the r
3e40: 75 6e 6e 69 6e 67 20 70 72 6f 63 65 64 75 72 65  unning procedure
3e50: 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 4a   */.    struct J
3e60: 69 6d 5f 43 61 6c 6c 46 72 61 6d 65 20 2a 6e 65  im_CallFrame *ne
3e70: 78 74 46 72 61 6d 65 50 74 72 3b 0a 20 20 20 20  xtFramePtr;.    
3e80: 4a 69 6d 5f 4f 62 6a 20 2a 66 69 6c 65 4e 61 6d  Jim_Obj *fileNam
3e90: 65 4f 62 6a 3b 20 20 20 20 20 20 20 2f 2a 20 66  eObj;       /* f
3ea0: 69 6c 65 20 61 6e 64 20 6c 69 6e 65 20 6f 66 20  ile and line of 
3eb0: 63 61 6c 6c 65 72 20 6f 66 20 74 68 69 73 20 70  caller of this p
3ec0: 72 6f 63 20 28 69 66 20 61 76 61 69 6c 61 62 6c  roc (if availabl
3ed0: 65 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 69  e) */.    int li
3ee0: 6e 65 3b 0a 7d 20 4a 69 6d 5f 43 61 6c 6c 46 72  ne;.} Jim_CallFr
3ef0: 61 6d 65 3b 0a 0a 2f 2a 20 54 68 65 20 76 61 72  ame;../* The var
3f00: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 6a   structure. It j
3f10: 75 73 74 20 68 6f 6c 64 73 20 74 68 65 20 70 6f  ust holds the po
3f20: 69 6e 74 65 72 20 6f 66 20 74 68 65 20 72 65 66  inter of the ref
3f30: 65 72 65 6e 63 65 64 0a 20 2a 20 6f 62 6a 65 63  erenced. * objec
3f40: 74 2e 20 49 66 20 6c 69 6e 6b 46 72 61 6d 65 50  t. If linkFrameP
3f50: 74 72 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  tr is not NULL t
3f60: 68 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 61  he variable is a
3f70: 20 6c 69 6e 6b 0a 20 2a 20 74 6f 20 61 20 76 61   link. * to a va
3f80: 72 69 61 62 6c 65 20 6f 66 20 6e 61 6d 65 20 73  riable of name s
3f90: 74 6f 72 65 20 6f 6e 20 6f 62 6a 50 74 72 20 6c  tore on objPtr l
3fa0: 69 76 69 6e 67 20 6f 6e 20 74 68 65 20 67 69 76  iving on the giv
3fb0: 65 6e 20 63 61 6c 6c 66 72 61 6d 65 0a 20 2a 20  en callframe. * 
3fc0: 28 74 68 69 73 20 68 61 70 70 65 6e 73 20 77 68  (this happens wh
3fd0: 65 6e 20 74 68 65 20 5b 67 6c 6f 62 61 6c 5d 20  en the [global] 
3fe0: 6f 72 20 5b 75 70 76 61 72 5d 20 63 6f 6d 6d 61  or [upvar] comma
3ff0: 6e 64 20 69 73 20 75 73 65 64 29 2e 0a 20 2a 20  nd is used).. * 
4000: 54 68 65 20 69 6e 74 65 72 70 20 69 6e 20 6f 72  The interp in or
4010: 64 65 72 20 74 6f 20 61 6c 77 61 79 73 20 6b 6e  der to always kn
4020: 6f 77 20 68 6f 77 20 74 6f 20 66 72 65 65 20 74  ow how to free t
4030: 68 65 20 4a 69 6d 5f 4f 62 6a 20 61 73 73 6f 63  he Jim_Obj assoc
4040: 69 61 74 65 64 0a 20 2a 20 77 69 74 68 20 61 20  iated. * with a 
4050: 67 69 76 65 6e 20 76 61 72 69 61 62 6c 65 20 62  given variable b
4060: 65 63 61 75 73 65 20 49 6e 20 4a 69 6d 20 6f 62  ecause In Jim ob
4070: 6a 65 63 74 73 20 6d 65 6d 6f 72 79 20 6d 61 6e  jects memory man
4080: 61 67 6d 65 6e 74 20 69 73 0a 20 2a 20 62 6f 75  agment is. * bou
4090: 6e 64 20 74 6f 20 69 6e 74 65 72 70 72 65 74 65  nd to interprete
40a0: 72 73 2e 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  rs. */.typedef s
40b0: 74 72 75 63 74 20 4a 69 6d 5f 56 61 72 20 7b 0a  truct Jim_Var {.
40c0: 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6f 62 6a      Jim_Obj *obj
40d0: 50 74 72 3b 0a 20 20 20 20 73 74 72 75 63 74 20  Ptr;.    struct 
40e0: 4a 69 6d 5f 43 61 6c 6c 46 72 61 6d 65 20 2a 6c  Jim_CallFrame *l
40f0: 69 6e 6b 46 72 61 6d 65 50 74 72 3b 0a 7d 20 4a  inkFramePtr;.} J
4100: 69 6d 5f 56 61 72 3b 0a 0a 2f 2a 20 54 68 65 20  im_Var;../* The 
4110: 63 6d 64 20 73 74 72 75 63 74 75 72 65 2e 20 2a  cmd structure. *
4120: 2f 0a 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a  /.typedef int (*
4130: 4a 69 6d 5f 43 6d 64 50 72 6f 63 29 28 73 74 72  Jim_CmdProc)(str
4140: 75 63 74 20 4a 69 6d 5f 49 6e 74 65 72 70 20 2a  uct Jim_Interp *
4150: 69 6e 74 65 72 70 2c 20 69 6e 74 20 61 72 67 63  interp, int argc
4160: 2c 0a 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 63  ,.    Jim_Obj *c
4170: 6f 6e 73 74 20 2a 61 72 67 76 29 3b 0a 74 79 70  onst *argv);.typ
4180: 65 64 65 66 20 76 6f 69 64 20 28 2a 4a 69 6d 5f  edef void (*Jim_
4190: 44 65 6c 43 6d 64 50 72 6f 63 29 28 73 74 72 75  DelCmdProc)(stru
41a0: 63 74 20 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  ct Jim_Interp *i
41b0: 6e 74 65 72 70 2c 20 76 6f 69 64 20 2a 70 72 69  nterp, void *pri
41c0: 76 44 61 74 61 29 3b 0a 0a 0a 0a 2f 2a 20 41 20  vData);..../* A 
41d0: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6d 70 6c 65  command is imple
41e0: 6d 65 6e 74 65 64 20 69 6e 20 43 20 69 66 20 66  mented in C if f
41f0: 75 6e 63 50 74 72 20 69 73 20 21 3d 20 4e 55 4c  uncPtr is != NUL
4200: 4c 2c 20 6f 74 68 65 72 77 69 73 65 0a 20 2a 20  L, otherwise. * 
4210: 69 74 27 73 20 61 20 54 63 6c 20 70 72 6f 63 65  it's a Tcl proce
4220: 64 75 72 65 20 77 69 74 68 20 74 68 65 20 61 72  dure with the ar
4230: 67 6c 69 73 74 20 61 6e 64 20 62 6f 64 79 20 72  glist and body r
4240: 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 74 68  epresented by th
4250: 65 0a 20 2a 20 74 77 6f 20 6f 62 6a 65 63 74 73  e. * two objects
4260: 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 61   referenced by a
4270: 72 67 6c 69 73 74 4f 62 6a 50 74 72 20 61 6e 64  rglistObjPtr and
4280: 20 62 6f 64 79 6f 4f 62 6a 50 74 72 2e 20 2a 2f   bodyoObjPtr. */
4290: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
42a0: 4a 69 6d 5f 43 6d 64 20 7b 0a 20 20 20 20 69 6e  Jim_Cmd {.    in
42b0: 74 20 69 6e 55 73 65 3b 20 20 20 20 20 20 20 20  t inUse;        
42c0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
42d0: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 69 6e 74  count */.    int
42e0: 20 69 73 70 72 6f 63 3b 20 20 20 20 20 20 20 20   isproc;        
42f0: 20 20 2f 2a 20 49 73 20 74 68 69 73 20 61 20 70    /* Is this a p
4300: 72 6f 63 65 64 75 72 65 3f 20 2a 2f 0a 20 20 20  rocedure? */.   
4310: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20   union {.       
4320: 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
4330: 20 20 20 20 20 20 2f 2a 20 6e 61 74 69 76 65 20        /* native 
4340: 28 43 29 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  (C) command */. 
4350: 20 20 20 20 20 20 20 20 20 20 20 4a 69 6d 5f 43             Jim_C
4360: 6d 64 50 72 6f 63 20 63 6d 64 50 72 6f 63 3b 20  mdProc cmdProc; 
4370: 2f 2a 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 69  /* The command i
4380: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
4390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4a 69 6d  .            Jim
43a0: 5f 44 65 6c 43 6d 64 50 72 6f 63 20 64 65 6c 50  _DelCmdProc delP
43b0: 72 6f 63 3b 20 2f 2a 20 43 61 6c 6c 65 64 20 77  roc; /* Called w
43c0: 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  hen the command 
43d0: 69 73 20 64 65 6c 65 74 65 64 20 69 66 20 21 3d  is deleted if !=
43e0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20   NULL */.       
43f0: 20 20 20 20 20 76 6f 69 64 20 2a 70 72 69 76 44       void *privD
4400: 61 74 61 3b 20 2f 2a 20 63 6f 6d 6d 61 6e 64 2d  ata; /* command-
4410: 70 72 69 76 61 74 65 20 64 61 74 61 20 61 76 61  private data ava
4420: 69 6c 61 62 6c 65 20 76 69 61 20 4a 69 6d 5f 43  ilable via Jim_C
4430: 6d 64 50 72 69 76 44 61 74 61 28 29 20 2a 2f 0a  mdPrivData() */.
4440: 20 20 20 20 20 20 20 20 7d 20 6e 61 74 69 76 65          } native
4450: 3b 0a 20 20 20 20 20 20 20 20 73 74 72 75 63 74  ;.        struct
4460: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f   {.            /
4470: 2a 20 54 63 6c 20 70 72 6f 63 65 64 75 72 65 20  * Tcl procedure 
4480: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 4a  */.            J
4490: 69 6d 5f 4f 62 6a 20 2a 61 72 67 4c 69 73 74 4f  im_Obj *argListO
44a0: 62 6a 50 74 72 3b 0a 20 20 20 20 20 20 20 20 20  bjPtr;.         
44b0: 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 62 6f 64 79     Jim_Obj *body
44c0: 4f 62 6a 50 74 72 3b 0a 20 20 20 20 20 20 20 20  ObjPtr;.        
44d0: 20 20 20 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c      Jim_HashTabl
44e0: 65 20 2a 73 74 61 74 69 63 56 61 72 73 3b 20 20  e *staticVars;  
44f0: 2f 2a 20 53 74 61 74 69 63 20 76 61 72 73 20 68  /* Static vars h
4500: 61 73 68 20 74 61 62 6c 65 2e 20 4e 55 4c 4c 20  ash table. NULL 
4510: 69 66 20 6e 6f 20 73 74 61 74 69 63 73 2e 20 2a  if no statics. *
4520: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  /.            st
4530: 72 75 63 74 20 4a 69 6d 5f 43 6d 64 20 2a 70 72  ruct Jim_Cmd *pr
4540: 65 76 43 6d 64 3b 20 20 20 20 2f 2a 20 50 72 65  evCmd;    /* Pre
4550: 76 69 6f 75 73 20 63 6f 6d 6d 61 6e 64 20 64 65  vious command de
4560: 66 6e 20 69 66 20 70 72 6f 63 20 63 72 65 61 74  fn if proc creat
4570: 65 64 20 27 6c 6f 63 61 6c 27 20 2a 2f 0a 20 20  ed 'local' */.  
4580: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
4590: 67 4c 69 73 74 4c 65 6e 3b 20 20 20 20 20 20 20  gListLen;       
45a0: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
45b0: 6f 66 20 61 72 67 4c 69 73 74 4f 62 6a 50 74 72  of argListObjPtr
45c0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
45d0: 69 6e 74 20 72 65 71 41 72 69 74 79 3b 20 20 20  int reqArity;   
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
45f0: 75 6d 62 65 72 20 6f 66 20 72 65 71 75 69 72 65  umber of require
4600: 64 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  d parameters */.
4610: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4620: 6f 70 74 41 72 69 74 79 3b 20 20 20 20 20 20 20  optArity;       
4630: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
4640: 72 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 70 61  r of optional pa
4650: 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 20 20  rameters */.    
4660: 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 73          int args
4670: 50 6f 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Pos;            
4680: 20 20 20 20 2f 2a 20 50 6f 73 69 74 69 6f 6e 20      /* Position 
4690: 6f 66 20 27 61 72 67 73 27 2c 20 69 66 20 73 70  of 'args', if sp
46a0: 65 63 69 66 69 65 64 2c 20 6f 72 20 2d 31 20 2a  ecified, or -1 *
46b0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  /.            in
46c0: 74 20 75 70 63 61 6c 6c 3b 20 20 20 20 20 20 20  t upcall;       
46d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
46e0: 65 20 69 66 20 70 72 6f 63 20 69 73 20 63 75 72  e if proc is cur
46f0: 72 65 6e 74 6c 79 20 69 6e 20 75 70 63 61 6c 6c  rently in upcall
4700: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
4710: 73 74 72 75 63 74 20 4a 69 6d 5f 50 72 6f 63 41  struct Jim_ProcA
4720: 72 67 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  rg {.           
4730: 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6e 61       Jim_Obj *na
4740: 6d 65 4f 62 6a 50 74 72 3b 20 20 20 20 2f 2a 20  meObjPtr;    /* 
4750: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 61 72 67  Name of this arg
4760: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
4770: 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 64 65 66      Jim_Obj *def
4780: 61 75 6c 74 4f 62 6a 50 74 72 3b 20 2f 2a 20 44  aultObjPtr; /* D
4790: 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 28 6f  efault value, (o
47a0: 72 20 72 65 6e 61 6d 65 20 66 6f 72 20 24 61 72  r rename for $ar
47b0: 67 73 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  gs) */.         
47c0: 20 20 20 7d 20 2a 61 72 67 6c 69 73 74 3b 0a 20     } *arglist;. 
47d0: 20 20 20 20 20 20 20 7d 20 70 72 6f 63 3b 0a 20         } proc;. 
47e0: 20 20 20 7d 20 75 3b 0a 7d 20 4a 69 6d 5f 43 6d     } u;.} Jim_Cm
47f0: 64 3b 0a 0a 2f 2a 20 50 73 65 75 64 6f 20 52 61  d;../* Pseudo Ra
4800: 6e 64 6f 6d 20 4e 75 6d 62 65 72 20 47 65 6e 65  ndom Number Gene
4810: 72 61 74 6f 72 20 53 74 61 74 65 20 73 74 72 75  rator State stru
4820: 63 74 75 72 65 20 2a 2f 0a 74 79 70 65 64 65 66  cture */.typedef
4830: 20 73 74 72 75 63 74 20 4a 69 6d 5f 50 72 6e 67   struct Jim_Prng
4840: 53 74 61 74 65 20 7b 0a 20 20 20 20 75 6e 73 69  State {.    unsi
4850: 67 6e 65 64 20 63 68 61 72 20 73 62 6f 78 5b 32  gned char sbox[2
4860: 35 36 5d 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65  56];.    unsigne
4870: 64 20 69 6e 74 20 69 2c 20 6a 3b 0a 7d 20 4a 69  d int i, j;.} Ji
4880: 6d 5f 50 72 6e 67 53 74 61 74 65 3b 0a 0a 2f 2a  m_PrngState;../*
4890: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
48a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
48b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
48c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
48d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
48e0: 2a 20 4a 69 6d 20 69 6e 74 65 72 70 72 65 74 65  * Jim interprete
48f0: 72 20 73 74 72 75 63 74 75 72 65 2e 0a 20 2a 20  r structure.. * 
4900: 46 69 65 6c 64 73 20 73 69 6d 69 6c 61 72 20 74  Fields similar t
4910: 6f 20 74 68 65 20 72 65 61 6c 20 54 63 6c 20 69  o the real Tcl i
4920: 6e 74 65 72 70 72 65 74 65 72 20 73 74 72 75 63  nterpreter struc
4930: 74 75 72 65 20 68 61 76 65 20 74 68 65 20 73 61  ture have the sa
4940: 6d 65 20 6e 61 6d 65 73 2e 0a 20 2a 20 2d 2d 2d  me names.. * ---
4950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4990: 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 74 79 70 65 64  --------*/.typed
49a0: 65 66 20 73 74 72 75 63 74 20 4a 69 6d 5f 49 6e  ef struct Jim_In
49b0: 74 65 72 70 20 7b 0a 20 20 20 20 4a 69 6d 5f 4f  terp {.    Jim_O
49c0: 62 6a 20 2a 72 65 73 75 6c 74 3b 20 2f 2a 20 6f  bj *result; /* o
49d0: 62 6a 65 63 74 20 72 65 74 75 72 6e 65 64 20 62  bject returned b
49e0: 79 20 74 68 65 20 6c 61 73 74 20 63 6f 6d 6d 61  y the last comma
49f0: 6e 64 20 63 61 6c 6c 65 64 2e 20 2a 2f 0a 20 20  nd called. */.  
4a00: 20 20 69 6e 74 20 65 72 72 6f 72 4c 69 6e 65 3b    int errorLine;
4a10: 20 2f 2a 20 45 72 72 6f 72 20 6c 69 6e 65 20 77   /* Error line w
4a20: 68 65 72 65 20 61 6e 20 65 72 72 6f 72 20 6f 63  here an error oc
4a30: 63 75 72 72 65 64 2e 20 2a 2f 0a 20 20 20 20 4a  curred. */.    J
4a40: 69 6d 5f 4f 62 6a 20 2a 65 72 72 6f 72 46 69 6c  im_Obj *errorFil
4a50: 65 4e 61 6d 65 4f 62 6a 3b 20 2f 2a 20 45 72 72  eNameObj; /* Err
4a60: 6f 72 20 66 69 6c 65 20 77 68 65 72 65 20 61 6e  or file where an
4a70: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2e   error occurred.
4a80: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 53   */.    int addS
4a90: 74 61 63 6b 54 72 61 63 65 3b 20 2f 2a 20 3e 20  tackTrace; /* > 
4aa0: 30 20 49 66 20 61 20 6c 65 76 65 6c 20 73 68 6f  0 If a level sho
4ab0: 75 6c 64 20 62 65 20 61 64 64 65 64 20 74 6f 20  uld be added to 
4ac0: 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20  the stack trace 
4ad0: 2a 2f 0a 20 20 20 20 69 6e 74 20 6d 61 78 4e 65  */.    int maxNe
4ae0: 73 74 69 6e 67 44 65 70 74 68 3b 20 2f 2a 20 55  stingDepth; /* U
4af0: 73 65 64 20 66 6f 72 20 69 6e 66 69 6e 69 74 65  sed for infinite
4b00: 20 6c 6f 6f 70 20 64 65 74 65 63 74 69 6f 6e 2e   loop detection.
4b10: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 74 75   */.    int retu
4b20: 72 6e 43 6f 64 65 3b 20 2f 2a 20 43 6f 6d 70 6c  rnCode; /* Compl
4b30: 65 74 69 6f 6e 20 63 6f 64 65 20 74 6f 20 72 65  etion code to re
4b40: 74 75 72 6e 20 6f 6e 20 4a 49 4d 5f 52 45 54 55  turn on JIM_RETU
4b50: 52 4e 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  RN. */.    int r
4b60: 65 74 75 72 6e 4c 65 76 65 6c 3b 20 2f 2a 20 43  eturnLevel; /* C
4b70: 75 72 72 65 6e 74 20 6c 65 76 65 6c 20 6f 66 20  urrent level of 
4b80: 27 72 65 74 75 72 6e 20 2d 6c 65 76 65 6c 27 20  'return -level' 
4b90: 2a 2f 0a 20 20 20 20 69 6e 74 20 65 78 69 74 43  */.    int exitC
4ba0: 6f 64 65 3b 20 2f 2a 20 43 6f 64 65 20 74 6f 20  ode; /* Code to 
4bb0: 72 65 74 75 72 6e 20 74 6f 20 74 68 65 20 4f 53  return to the OS
4bc0: 20 6f 6e 20 4a 49 4d 5f 45 58 49 54 2e 20 2a 2f   on JIM_EXIT. */
4bd0: 0a 20 20 20 20 6c 6f 6e 67 20 69 64 3b 20 2f 2a  .    long id; /*
4be0: 20 48 6f 6c 64 20 75 6e 69 71 75 65 20 69 64 20   Hold unique id 
4bf0: 66 6f 72 20 76 61 72 69 6f 75 73 20 70 75 72 70  for various purp
4c00: 6f 73 65 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oses */.    int 
4c10: 73 69 67 6e 61 6c 5f 6c 65 76 65 6c 3b 20 2f 2a  signal_level; /*
4c20: 20 41 20 6e 65 73 74 69 6e 67 20 6c 65 76 65 6c   A nesting level
4c30: 20 6f 66 20 63 61 74 63 68 20 2d 73 69 67 6e 61   of catch -signa
4c40: 6c 20 2a 2f 0a 20 20 20 20 6a 69 6d 5f 77 69 64  l */.    jim_wid
4c50: 65 20 73 69 67 6d 61 73 6b 3b 20 20 2f 2a 20 42  e sigmask;  /* B
4c60: 69 74 20 6d 61 73 6b 20 6f 66 20 63 61 75 67 68  it mask of caugh
4c70: 74 20 73 69 67 6e 61 6c 73 2c 20 6f 72 20 30 20  t signals, or 0 
4c80: 69 66 20 6e 6f 6e 65 20 2a 2f 0a 20 20 20 20 69  if none */.    i
4c90: 6e 74 20 28 2a 73 69 67 6e 61 6c 5f 73 65 74 5f  nt (*signal_set_
4ca0: 72 65 73 75 6c 74 29 28 73 74 72 75 63 74 20 4a  result)(struct J
4cb0: 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  im_Interp *inter
4cc0: 70 2c 20 6a 69 6d 5f 77 69 64 65 20 73 69 67 6d  p, jim_wide sigm
4cd0: 61 73 6b 29 3b 20 2f 2a 20 53 65 74 20 61 20 72  ask); /* Set a r
4ce0: 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 69  esult for the si
4cf0: 67 6d 61 73 6b 20 2a 2f 0a 20 20 20 20 4a 69 6d  gmask */.    Jim
4d00: 5f 43 61 6c 6c 46 72 61 6d 65 20 2a 66 72 61 6d  _CallFrame *fram
4d10: 65 50 74 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  ePtr; /* Pointer
4d20: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
4d30: 63 61 6c 6c 20 66 72 61 6d 65 20 2a 2f 0a 20 20  call frame */.  
4d40: 20 20 4a 69 6d 5f 43 61 6c 6c 46 72 61 6d 65 20    Jim_CallFrame 
4d50: 2a 74 6f 70 46 72 61 6d 65 50 74 72 3b 20 2f 2a  *topFramePtr; /*
4d60: 20 74 6f 70 6c 65 76 65 6c 2f 67 6c 6f 62 61 6c   toplevel/global
4d70: 20 66 72 61 6d 65 20 70 6f 69 6e 74 65 72 2e 20   frame pointer. 
4d80: 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 4a 69  */.    struct Ji
4d90: 6d 5f 48 61 73 68 54 61 62 6c 65 20 63 6f 6d 6d  m_HashTable comm
4da0: 61 6e 64 73 3b 20 2f 2a 20 43 6f 6d 6d 61 6e 64  ands; /* Command
4db0: 73 20 68 61 73 68 20 74 61 62 6c 65 20 2a 2f 0a  s hash table */.
4dc0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6a 69 6d      unsigned jim
4dd0: 5f 77 69 64 65 20 70 72 6f 63 45 70 6f 63 68 3b  _wide procEpoch;
4de0: 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20   /* Incremented 
4df0: 65 76 65 72 79 20 74 69 6d 65 20 74 68 65 20 72  every time the r
4e00: 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 20 20  esult.          
4e10: 20 20 20 20 20 20 6f 66 20 70 72 6f 63 65 64 75        of procedu
4e20: 72 65 73 20 6e 61 6d 65 73 20 6c 6f 6f 6b 75 70  res names lookup
4e30: 20 63 61 63 68 69 6e 67 0a 20 20 20 20 20 20 20   caching.       
4e40: 20 20 20 20 20 20 20 20 20 6d 61 79 20 6e 6f 20           may no 
4e50: 6c 6f 6e 67 65 72 20 62 65 20 76 61 6c 69 64 2e  longer be valid.
4e60: 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
4e70: 20 6a 69 6d 5f 77 69 64 65 20 63 61 6c 6c 46 72   jim_wide callFr
4e80: 61 6d 65 45 70 6f 63 68 3b 20 2f 2a 20 49 6e 63  ameEpoch; /* Inc
4e90: 72 65 6d 65 6e 74 65 64 20 65 76 65 72 79 20 74  remented every t
4ea0: 69 6d 65 20 61 20 6e 65 77 0a 20 20 20 20 20 20  ime a new.      
4eb0: 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 66 72            callfr
4ec0: 61 6d 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ame is created. 
4ed0: 54 68 69 73 20 69 64 20 69 73 20 75 73 65 64 20  This id is used 
4ee0: 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 20  for the.        
4ef0: 20 20 20 20 20 20 20 20 27 49 44 27 20 66 69 65          'ID' fie
4f00: 6c 64 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ld contained in 
4f10: 74 68 65 20 4a 69 6d 5f 43 61 6c 6c 46 72 61 6d  the Jim_CallFram
4f20: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
4f30: 20 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a    structure. */.
4f40: 20 20 20 20 69 6e 74 20 6c 6f 63 61 6c 3b 20 2f      int local; /
4f50: 2a 20 49 66 20 27 6c 6f 63 61 6c 27 20 69 73 20  * If 'local' is 
4f60: 69 6e 20 65 66 66 65 63 74 2c 20 6e 65 77 6c 79  in effect, newly
4f70: 20 64 65 66 69 6e 65 64 20 70 72 6f 63 73 20 6b   defined procs k
4f80: 65 65 70 20 61 20 72 65 66 65 72 65 6e 63 65 20  eep a reference 
4f90: 74 6f 20 74 68 65 20 6f 6c 64 20 64 65 66 6e 20  to the old defn 
4fa0: 2a 2f 0a 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a  */.    Jim_Obj *
4fb0: 6c 69 76 65 4c 69 73 74 3b 20 2f 2a 20 4c 69 6e  liveList; /* Lin
4fc0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
4fd0: 74 68 65 20 6c 69 76 65 20 6f 62 6a 65 63 74 73  the live objects
4fe0: 2e 20 2a 2f 0a 20 20 20 20 4a 69 6d 5f 4f 62 6a  . */.    Jim_Obj
4ff0: 20 2a 66 72 65 65 4c 69 73 74 3b 20 2f 2a 20 4c   *freeList; /* L
5000: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
5010: 6c 20 74 68 65 20 75 6e 75 73 65 64 20 6f 62 6a  l the unused obj
5020: 65 63 74 73 2e 20 2a 2f 0a 20 20 20 20 4a 69 6d  ects. */.    Jim
5030: 5f 4f 62 6a 20 2a 63 75 72 72 65 6e 74 53 63 72  _Obj *currentScr
5040: 69 70 74 4f 62 6a 3b 20 2f 2a 20 53 63 72 69 70  iptObj; /* Scrip
5050: 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 65  t currently in e
5060: 78 65 63 75 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  xecution. */.   
5070: 20 4a 69 6d 5f 4f 62 6a 20 2a 65 6d 70 74 79 4f   Jim_Obj *emptyO
5080: 62 6a 3b 20 2f 2a 20 53 68 61 72 65 64 20 65 6d  bj; /* Shared em
5090: 70 74 79 20 73 74 72 69 6e 67 20 6f 62 6a 65 63  pty string objec
50a0: 74 2e 20 2a 2f 0a 20 20 20 20 4a 69 6d 5f 4f 62  t. */.    Jim_Ob
50b0: 6a 20 2a 74 72 75 65 4f 62 6a 3b 20 2f 2a 20 53  j *trueObj; /* S
50c0: 68 61 72 65 64 20 74 72 75 65 20 69 6e 74 20 6f  hared true int o
50d0: 62 6a 65 63 74 2e 20 2a 2f 0a 20 20 20 20 4a 69  bject. */.    Ji
50e0: 6d 5f 4f 62 6a 20 2a 66 61 6c 73 65 4f 62 6a 3b  m_Obj *falseObj;
50f0: 20 2f 2a 20 53 68 61 72 65 64 20 66 61 6c 73 65   /* Shared false
5100: 20 69 6e 74 20 6f 62 6a 65 63 74 2e 20 2a 2f 0a   int object. */.
5110: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6a 69 6d      unsigned jim
5120: 5f 77 69 64 65 20 72 65 66 65 72 65 6e 63 65 4e  _wide referenceN
5130: 65 78 74 49 64 3b 20 2f 2a 20 4e 65 78 74 20 69  extId; /* Next i
5140: 64 20 66 6f 72 20 72 65 66 65 72 65 6e 63 65 2e  d for reference.
5150: 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 4a   */.    struct J
5160: 69 6d 5f 48 61 73 68 54 61 62 6c 65 20 72 65 66  im_HashTable ref
5170: 65 72 65 6e 63 65 73 3b 20 2f 2a 20 52 65 66 65  erences; /* Refe
5180: 72 65 6e 63 65 73 20 68 61 73 68 20 74 61 62 6c  rences hash tabl
5190: 65 2e 20 2a 2f 0a 20 20 20 20 6a 69 6d 5f 77 69  e. */.    jim_wi
51a0: 64 65 20 6c 61 73 74 43 6f 6c 6c 65 63 74 49 64  de lastCollectId
51b0: 3b 20 2f 2a 20 72 65 66 65 72 65 6e 63 65 20 6d  ; /* reference m
51c0: 61 78 20 49 64 20 6f 66 20 74 68 65 20 6c 61 73  ax Id of the las
51d0: 74 20 47 43 0a 20 20 20 20 20 20 20 20 20 20 20  t GC.           
51e0: 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 2e 20       execution. 
51f0: 49 74 27 73 20 73 65 74 20 74 6f 20 2d 31 20 77  It's set to -1 w
5200: 68 69 6c 65 20 74 68 65 20 63 6f 6c 6c 65 63 74  hile the collect
5210: 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ion.            
5220: 20 20 20 20 69 73 20 72 75 6e 6e 69 6e 67 20 61      is running a
5230: 73 20 73 65 6e 74 69 6e 65 6c 20 74 6f 20 61 76  s sentinel to av
5240: 6f 69 64 20 74 6f 20 72 65 63 75 72 73 69 76 65  oid to recursive
5250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5260: 20 63 61 6c 6c 73 20 76 69 61 20 74 68 65 20 5b   calls via the [
5270: 63 6f 6c 6c 65 63 74 5d 20 63 6f 6d 6d 61 6e 64  collect] command
5280: 20 69 6e 73 69 64 65 0a 20 20 20 20 20 20 20 20   inside.        
5290: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 69 7a 65          finalize
52a0: 72 73 2e 20 2a 2f 0a 20 20 20 20 74 69 6d 65 5f  rs. */.    time_
52b0: 74 20 6c 61 73 74 43 6f 6c 6c 65 63 74 54 69 6d  t lastCollectTim
52c0: 65 3b 20 2f 2a 20 75 6e 69 78 20 74 69 6d 65 20  e; /* unix time 
52d0: 6f 66 20 74 68 65 20 6c 61 73 74 20 47 43 20 65  of the last GC e
52e0: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  xecution */.    
52f0: 4a 69 6d 5f 4f 62 6a 20 2a 73 74 61 63 6b 54 72  Jim_Obj *stackTr
5300: 61 63 65 3b 20 2f 2a 20 53 74 61 63 6b 20 74 72  ace; /* Stack tr
5310: 61 63 65 20 6f 62 6a 65 63 74 2e 20 2a 2f 0a 20  ace object. */. 
5320: 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 65 72 72 6f     Jim_Obj *erro
5330: 72 50 72 6f 63 3b 20 2f 2a 20 4e 61 6d 65 20 6f  rProc; /* Name o
5340: 66 20 6c 61 73 74 20 70 72 6f 63 65 64 75 72 65  f last procedure
5350: 20 77 68 69 63 68 20 72 65 74 75 72 6e 65 64 20   which returned 
5360: 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 20  an error */.    
5370: 4a 69 6d 5f 4f 62 6a 20 2a 75 6e 6b 6e 6f 77 6e  Jim_Obj *unknown
5380: 3b 20 2f 2a 20 55 6e 6b 6e 6f 77 6e 20 63 6f 6d  ; /* Unknown com
5390: 6d 61 6e 64 20 63 61 63 68 65 20 2a 2f 0a 20 20  mand cache */.  
53a0: 20 20 69 6e 74 20 75 6e 6b 6e 6f 77 6e 5f 63 61    int unknown_ca
53b0: 6c 6c 65 64 3b 20 2f 2a 20 54 68 65 20 75 6e 6b  lled; /* The unk
53c0: 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20 68 61 73  nown command has
53d0: 20 62 65 65 6e 20 69 6e 76 6f 6b 65 64 20 2a 2f   been invoked */
53e0: 0a 20 20 20 20 69 6e 74 20 65 72 72 6f 72 46 6c  .    int errorFl
53f0: 61 67 3b 20 2f 2a 20 53 65 74 20 69 66 20 61 6e  ag; /* Set if an
5400: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
5410: 64 75 72 69 6e 67 20 65 78 65 63 75 74 69 6f 6e  during execution
5420: 2e 20 2a 2f 0a 20 20 20 20 76 6f 69 64 20 2a 63  . */.    void *c
5430: 6d 64 50 72 69 76 44 61 74 61 3b 20 2f 2a 20 55  mdPrivData; /* U
5440: 73 65 64 20 74 6f 20 70 61 73 73 20 74 68 65 20  sed to pass the 
5450: 70 72 69 76 61 74 65 20 64 61 74 61 20 70 6f 69  private data poi
5460: 6e 74 65 72 20 74 6f 0a 20 20 20 20 20 20 20 20  nter to.        
5470: 20 20 20 20 20 20 20 20 20 20 61 20 63 6f 6d 6d            a comm
5480: 61 6e 64 2e 20 49 74 20 69 73 20 73 65 74 20 74  and. It is set t
5490: 6f 20 77 68 61 74 20 74 68 65 20 75 73 65 72 20  o what the user 
54a0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 76 69 61 20              via 
54c0: 4a 69 6d 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e  Jim_CreateComman
54d0: 64 28 29 2e 20 2a 2f 0a 0a 20 20 20 20 73 74 72  d(). */..    str
54e0: 75 63 74 20 4a 69 6d 5f 43 61 6c 6c 46 72 61 6d  uct Jim_CallFram
54f0: 65 20 2a 66 72 65 65 46 72 61 6d 65 73 4c 69 73  e *freeFramesLis
5500: 74 3b 20 2f 2a 20 6c 69 73 74 20 6f 66 20 43 61  t; /* list of Ca
5510: 6c 6c 46 72 61 6d 65 20 73 74 72 75 63 74 75 72  llFrame structur
5520: 65 73 2e 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  es. */.    struc
5530: 74 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65 20  t Jim_HashTable 
5540: 61 73 73 6f 63 44 61 74 61 3b 20 2f 2a 20 70 65  assocData; /* pe
5550: 72 2d 69 6e 74 65 72 70 20 73 74 6f 72 61 67 65  r-interp storage
5560: 20 66 6f 72 20 75 73 65 20 62 79 20 70 61 63 6b   for use by pack
5570: 61 67 65 73 20 2a 2f 0a 20 20 20 20 4a 69 6d 5f  ages */.    Jim_
5580: 50 72 6e 67 53 74 61 74 65 20 2a 70 72 6e 67 53  PrngState *prngS
5590: 74 61 74 65 3b 20 2f 2a 20 70 65 72 20 69 6e 74  tate; /* per int
55a0: 65 72 70 72 65 74 65 72 20 52 61 6e 64 6f 6d 20  erpreter Random 
55b0: 4e 75 6d 62 65 72 20 47 65 6e 2e 20 73 74 61 74  Number Gen. stat
55c0: 65 2e 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  e. */.    struct
55d0: 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65 20 70   Jim_HashTable p
55e0: 61 63 6b 61 67 65 73 3b 20 2f 2a 20 50 72 6f 76  ackages; /* Prov
55f0: 69 64 65 64 20 70 61 63 6b 61 67 65 73 20 68 61  ided packages ha
5600: 73 68 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  sh table */.    
5610: 4a 69 6d 5f 53 74 61 63 6b 20 2a 6c 6f 63 61 6c  Jim_Stack *local
5620: 50 72 6f 63 73 3b 20 2f 2a 20 70 72 6f 63 73 20  Procs; /* procs 
5630: 74 6f 20 62 65 20 64 65 73 74 72 6f 79 65 64 20  to be destroyed 
5640: 6f 6e 20 65 6e 64 20 6f 66 20 65 76 61 6c 75 61  on end of evalua
5650: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 4a 69 6d 5f  tion */.    Jim_
5660: 53 74 61 63 6b 20 2a 6c 6f 61 64 48 61 6e 64 6c  Stack *loadHandl
5670: 65 73 3b 20 2f 2a 20 68 61 6e 64 6c 65 73 20 6f  es; /* handles o
5680: 66 20 6c 6f 61 64 65 64 20 6d 6f 64 75 6c 65 73  f loaded modules
5690: 20 5b 6c 6f 61 64 5d 20 2a 2f 0a 7d 20 4a 69 6d   [load] */.} Jim
56a0: 5f 49 6e 74 65 72 70 3b 0a 0a 2f 2a 20 43 75 72  _Interp;../* Cur
56b0: 72 65 6e 74 6c 79 20 70 72 6f 76 69 64 65 64 20  rently provided 
56c0: 61 73 20 6d 61 63 72 6f 20 74 68 61 74 20 70 65  as macro that pe
56d0: 72 66 6f 72 6d 73 20 74 68 65 20 69 6e 63 72 65  rforms the incre
56e0: 6d 65 6e 74 2e 0a 20 2a 20 41 74 20 73 6f 6d 65  ment.. * At some
56f0: 20 70 6f 69 6e 74 20 6d 61 79 20 62 65 20 61 20   point may be a 
5700: 72 65 61 6c 20 66 75 6e 63 74 69 6f 6e 20 64 6f  real function do
5710: 69 6e 67 20 6d 6f 72 65 20 77 6f 72 6b 2e 0a 20  ing more work.. 
5720: 2a 20 54 68 65 20 70 72 6f 63 20 65 70 6f 63 68  * The proc epoch
5730: 20 69 73 20 75 73 65 64 20 69 6e 20 6f 72 64 65   is used in orde
5740: 72 20 74 6f 20 6b 6e 6f 77 20 77 68 65 6e 20 61  r to know when a
5750: 20 63 6f 6d 6d 61 6e 64 20 6c 6f 6f 6b 75 70 0a   command lookup.
5760: 20 2a 20 63 61 63 68 65 64 20 63 61 6e 20 6e 6f   * cached can no
5770: 20 6c 6f 6e 67 65 72 20 63 6f 6e 73 69 64 65 72   longer consider
5780: 65 64 20 76 61 6c 69 64 2e 20 2a 2f 0a 23 64 65  ed valid. */.#de
5790: 66 69 6e 65 20 4a 69 6d 5f 49 6e 74 65 72 70 49  fine Jim_InterpI
57a0: 6e 63 72 50 72 6f 63 45 70 6f 63 68 28 69 29 20  ncrProcEpoch(i) 
57b0: 28 69 29 2d 3e 70 72 6f 63 45 70 6f 63 68 2b 2b  (i)->procEpoch++
57c0: 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 53 65 74  .#define Jim_Set
57d0: 52 65 73 75 6c 74 53 74 72 69 6e 67 28 69 2c 73  ResultString(i,s
57e0: 2c 6c 29 20 4a 69 6d 5f 53 65 74 52 65 73 75 6c  ,l) Jim_SetResul
57f0: 74 28 69 2c 20 4a 69 6d 5f 4e 65 77 53 74 72 69  t(i, Jim_NewStri
5800: 6e 67 4f 62 6a 28 69 2c 73 2c 6c 29 29 0a 23 64  ngObj(i,s,l)).#d
5810: 65 66 69 6e 65 20 4a 69 6d 5f 53 65 74 52 65 73  efine Jim_SetRes
5820: 75 6c 74 49 6e 74 28 69 2c 69 6e 74 76 61 6c 29  ultInt(i,intval)
5830: 20 4a 69 6d 5f 53 65 74 52 65 73 75 6c 74 28 69   Jim_SetResult(i
5840: 2c 20 4a 69 6d 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Jim_NewIntObj(
5850: 69 2c 69 6e 74 76 61 6c 29 29 0a 2f 2a 20 4e 6f  i,intval))./* No
5860: 74 65 3a 20 55 73 69 6e 67 20 74 72 75 65 4f 62  te: Using trueOb
5870: 6a 20 61 6e 64 20 66 61 6c 73 65 4f 62 6a 20 68  j and falseObj h
5880: 65 72 65 20 6d 61 6b 65 73 20 73 6f 6d 65 20 74  ere makes some t
5890: 68 69 6e 67 73 20 73 6c 6f 77 65 72 2e 2e 2e 2a  hings slower...*
58a0: 2f 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 53 65  /.#define Jim_Se
58b0: 74 52 65 73 75 6c 74 42 6f 6f 6c 28 69 2c 62 29  tResultBool(i,b)
58c0: 20 4a 69 6d 5f 53 65 74 52 65 73 75 6c 74 49 6e   Jim_SetResultIn
58d0: 74 28 69 2c 20 62 29 0a 23 64 65 66 69 6e 65 20  t(i, b).#define 
58e0: 4a 69 6d 5f 53 65 74 45 6d 70 74 79 52 65 73 75  Jim_SetEmptyResu
58f0: 6c 74 28 69 29 20 4a 69 6d 5f 53 65 74 52 65 73  lt(i) Jim_SetRes
5900: 75 6c 74 28 69 2c 20 28 69 29 2d 3e 65 6d 70 74  ult(i, (i)->empt
5910: 79 4f 62 6a 29 0a 23 64 65 66 69 6e 65 20 4a 69  yObj).#define Ji
5920: 6d 5f 47 65 74 52 65 73 75 6c 74 28 69 29 20 28  m_GetResult(i) (
5930: 28 69 29 2d 3e 72 65 73 75 6c 74 29 0a 23 64 65  (i)->result).#de
5940: 66 69 6e 65 20 4a 69 6d 5f 43 6d 64 50 72 69 76  fine Jim_CmdPriv
5950: 44 61 74 61 28 69 29 20 28 28 69 29 2d 3e 63 6d  Data(i) ((i)->cm
5960: 64 50 72 69 76 44 61 74 61 29 0a 23 64 65 66 69  dPrivData).#defi
5970: 6e 65 20 4a 69 6d 5f 53 74 72 69 6e 67 28 6f 29  ne Jim_String(o)
5980: 20 4a 69 6d 5f 47 65 74 53 74 72 69 6e 67 28 28   Jim_GetString((
5990: 6f 29 2c 20 4e 55 4c 4c 29 0a 0a 2f 2a 20 4e 6f  o), NULL)../* No
59a0: 74 65 20 74 68 61 74 20 27 6f 27 20 69 73 20 65  te that 'o' is e
59b0: 78 70 61 6e 64 65 64 20 6f 6e 6c 79 20 6f 6e 65  xpanded only one
59c0: 20 74 69 6d 65 20 69 6e 73 69 64 65 20 74 68 69   time inside thi
59d0: 73 20 6d 61 63 72 6f 2c 0a 20 2a 20 73 6f 20 69  s macro,. * so i
59e0: 74 27 73 20 73 61 66 65 20 74 6f 20 75 73 65 20  t's safe to use 
59f0: 73 69 64 65 20 65 66 66 65 63 74 73 2e 20 2a 2f  side effects. */
5a00: 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 53 65 74  .#define Jim_Set
5a10: 52 65 73 75 6c 74 28 69 2c 6f 29 20 64 6f 20 7b  Result(i,o) do {
5a20: 20 20 20 20 20 5c 0a 20 20 20 20 4a 69 6d 5f 4f       \.    Jim_O
5a30: 62 6a 20 2a 5f 72 65 73 75 6c 74 4f 62 6a 50 74  bj *_resultObjPt
5a40: 72 5f 20 3d 20 28 6f 29 3b 20 20 20 20 5c 0a 20  r_ = (o);    \. 
5a50: 20 20 20 4a 69 6d 5f 49 6e 63 72 52 65 66 43 6f     Jim_IncrRefCo
5a60: 75 6e 74 28 5f 72 65 73 75 6c 74 4f 62 6a 50 74  unt(_resultObjPt
5a70: 72 5f 29 3b 20 5c 0a 20 20 20 20 4a 69 6d 5f 44  r_); \.    Jim_D
5a80: 65 63 72 52 65 66 43 6f 75 6e 74 28 69 2c 28 69  ecrRefCount(i,(i
5a90: 29 2d 3e 72 65 73 75 6c 74 29 3b 20 20 5c 0a 20  )->result);  \. 
5aa0: 20 20 20 28 69 29 2d 3e 72 65 73 75 6c 74 20 3d     (i)->result =
5ab0: 20 5f 72 65 73 75 6c 74 4f 62 6a 50 74 72 5f 3b   _resultObjPtr_;
5ac0: 20 20 20 20 20 5c 0a 7d 20 77 68 69 6c 65 28 30       \.} while(0
5ad0: 29 0a 0a 2f 2a 20 55 73 65 20 74 68 69 73 20 66  )../* Use this f
5ae0: 6f 72 20 66 69 6c 65 68 61 6e 64 6c 65 73 2c 20  or filehandles, 
5af0: 65 74 63 2e 20 77 68 69 63 68 20 6e 65 65 64 20  etc. which need 
5b00: 61 20 75 6e 69 71 75 65 20 69 64 20 2a 2f 0a 23  a unique id */.#
5b10: 64 65 66 69 6e 65 20 4a 69 6d 5f 47 65 74 49 64  define Jim_GetId
5b20: 28 69 29 20 28 2b 2b 28 69 29 2d 3e 69 64 29 0a  (i) (++(i)->id).
5b30: 0a 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 73 74  ./* Reference st
5b40: 72 75 63 74 75 72 65 2e 20 54 68 65 20 69 6e 74  ructure. The int
5b50: 65 72 70 72 65 74 65 72 20 70 6f 69 6e 74 65 72  erpreter pointer
5b60: 20 69 73 20 68 65 6c 64 20 77 69 74 68 69 6e 20   is held within 
5b70: 70 72 69 76 64 61 74 61 20 6d 65 6d 62 65 72 20  privdata member 
5b80: 69 6e 20 48 61 73 68 54 61 62 6c 65 20 2a 2f 0a  in HashTable */.
5b90: 23 64 65 66 69 6e 65 20 4a 49 4d 5f 52 45 46 45  #define JIM_REFE
5ba0: 52 45 4e 43 45 5f 54 41 47 4c 45 4e 20 37 20 2f  RENCE_TAGLEN 7 /
5bb0: 2a 20 54 68 65 20 74 61 67 20 69 73 20 66 69 78  * The tag is fix
5bc0: 65 64 2d 6c 65 6e 67 74 68 2c 20 62 65 63 61 75  ed-length, becau
5bd0: 73 65 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  se the reference
5be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c00: 20 20 20 73 74 72 69 6e 67 20 72 65 70 72 65 73     string repres
5c10: 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 62 65  entation must be
5c20: 20 66 69 78 65 64 20 6c 65 6e 67 74 68 2e 20 2a   fixed length. *
5c30: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5c40: 20 4a 69 6d 5f 52 65 66 65 72 65 6e 63 65 20 7b   Jim_Reference {
5c50: 0a 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6f 62  .    Jim_Obj *ob
5c60: 6a 50 74 72 3b 0a 20 20 20 20 4a 69 6d 5f 4f 62  jPtr;.    Jim_Ob
5c70: 6a 20 2a 66 69 6e 61 6c 69 7a 65 72 43 6d 64 4e  j *finalizerCmdN
5c80: 61 6d 65 50 74 72 3b 0a 20 20 20 20 63 68 61 72  amePtr;.    char
5c90: 20 74 61 67 5b 4a 49 4d 5f 52 45 46 45 52 45 4e   tag[JIM_REFEREN
5ca0: 43 45 5f 54 41 47 4c 45 4e 2b 31 5d 3b 0a 7d 20  CE_TAGLEN+1];.} 
5cb0: 4a 69 6d 5f 52 65 66 65 72 65 6e 63 65 3b 0a 0a  Jim_Reference;..
5cc0: 2f 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /* -------------
5cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d10: 0a 20 2a 20 45 78 70 6f 72 74 65 64 20 41 50 49  . * Exported API
5d20: 20 70 72 6f 74 6f 74 79 70 65 73 2e 0a 20 2a 20   prototypes.. * 
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 2d 2d  ----------------
5d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2a 2f 0a 0a 2f  -----------*/../
5d80: 2a 20 4d 61 63 72 6f 73 20 74 68 61 74 20 61 72  * Macros that ar
5d90: 65 20 63 6f 6d 6d 6f 6e 20 66 6f 72 20 65 78 74  e common for ext
5da0: 65 6e 73 69 6f 6e 73 20 61 6e 64 20 63 6f 72 65  ensions and core
5db0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 69 6d  . */.#define Jim
5dc0: 5f 4e 65 77 45 6d 70 74 79 53 74 72 69 6e 67 4f  _NewEmptyStringO
5dd0: 62 6a 28 69 29 20 4a 69 6d 5f 4e 65 77 53 74 72  bj(i) Jim_NewStr
5de0: 69 6e 67 4f 62 6a 28 69 2c 20 22 22 2c 20 30 29  ingObj(i, "", 0)
5df0: 0a 0a 2f 2a 20 54 68 65 20 63 6f 72 65 20 69 6e  ../* The core in
5e00: 63 6c 75 64 65 73 20 72 65 61 6c 20 70 72 6f 74  cludes real prot
5e10: 6f 74 79 70 65 73 2c 20 65 78 74 65 6e 73 69 6f  otypes, extensio
5e20: 6e 73 20 69 6e 73 74 65 61 64 0a 20 2a 20 69 6e  ns instead. * in
5e30: 63 6c 75 64 65 20 61 20 67 6c 6f 62 61 6c 20 66  clude a global f
5e40: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
5e50: 66 6f 72 20 65 76 65 72 79 20 66 75 6e 63 74 69  for every functi
5e60: 6f 6e 20 65 78 70 6f 72 74 65 64 2e 0a 20 2a 20  on exported.. * 
5e70: 4f 6e 63 65 20 74 68 65 20 65 78 74 65 6e 73 69  Once the extensi
5e80: 6f 6e 20 63 61 6c 6c 73 20 4a 69 6d 5f 49 6e 69  on calls Jim_Ini
5e90: 74 45 78 74 65 6e 73 69 6f 6e 28 29 2c 20 74 68  tExtension(), th
5ea0: 65 20 67 6c 6f 62 61 6c 0a 20 2a 20 66 75 6e 63  e global. * func
5eb0: 74 6f 6e 20 70 6f 69 6e 74 65 72 73 20 61 72 65  ton pointers are
5ec0: 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
5ed0: 65 20 6f 66 20 74 68 65 20 53 54 55 42 20 74 61  e of the STUB ta
5ee0: 62 6c 65 0a 20 2a 20 63 6f 6e 74 61 69 6e 65 64  ble. * contained
5ef0: 20 69 6e 20 74 68 65 20 4a 69 6d 5f 49 6e 74 65   in the Jim_Inte
5f00: 72 70 20 73 74 72 75 63 74 75 72 65 2e 0a 20 2a  rp structure.. *
5f10: 0a 20 2a 20 54 68 69 73 20 6d 61 6b 65 73 20 4a  . * This makes J
5f20: 69 6d 20 61 62 6c 65 20 74 6f 20 6c 6f 61 64 20  im able to load 
5f30: 65 78 74 65 6e 73 69 6f 6e 73 20 65 76 65 6e 20  extensions even 
5f40: 69 66 20 69 74 20 69 73 20 73 74 61 74 69 63 61  if it is statica
5f50: 6c 6c 79 0a 20 2a 20 6c 69 6e 6b 65 64 20 69 74  lly. * linked it
5f60: 73 65 6c 66 2c 20 61 6e 64 20 74 6f 20 6c 6f 61  self, and to loa
5f70: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 6f 6d  d extensions com
5f80: 70 69 6c 65 64 20 77 69 74 68 20 64 69 66 66 65  piled with diffe
5f90: 72 65 6e 74 0a 20 2a 20 76 65 72 73 69 6f 6e 73  rent. * versions
5fa0: 20 6f 66 20 4a 69 6d 20 28 61 73 20 6c 6f 6e 67   of Jim (as long
5fb0: 20 61 73 20 74 68 65 20 41 50 49 20 69 73 20 73   as the API is s
5fc0: 74 69 6c 6c 20 63 6f 6d 70 61 74 69 62 6c 65 2e  till compatible.
5fd0: 29 20 2a 2f 0a 0a 2f 2a 20 4d 61 63 72 6f 73 20  ) */../* Macros 
5fe0: 61 72 65 20 63 6f 6d 6d 6f 6e 20 66 6f 72 20 63  are common for c
5ff0: 6f 72 65 20 61 6e 64 20 65 78 74 65 6e 73 69 6f  ore and extensio
6000: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 69  ns */.#define Ji
6010: 6d 5f 46 72 65 65 48 61 73 68 54 61 62 6c 65 49  m_FreeHashTableI
6020: 74 65 72 61 74 6f 72 28 69 74 65 72 29 20 4a 69  terator(iter) Ji
6030: 6d 5f 46 72 65 65 28 69 74 65 72 29 0a 0a 23 64  m_Free(iter)..#d
6040: 65 66 69 6e 65 20 4a 49 4d 5f 45 58 50 4f 52 54  efine JIM_EXPORT
6050: 0a 0a 2f 2a 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f  ../* Memory allo
6060: 63 61 74 69 6f 6e 20 2a 2f 0a 4a 49 4d 5f 45 58  cation */.JIM_EX
6070: 50 4f 52 54 20 76 6f 69 64 20 2a 4a 69 6d 5f 41  PORT void *Jim_A
6080: 6c 6c 6f 63 20 28 69 6e 74 20 73 69 7a 65 29 3b  lloc (int size);
6090: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 76 6f 69 64  .JIM_EXPORT void
60a0: 20 2a 4a 69 6d 5f 52 65 61 6c 6c 6f 63 28 76 6f   *Jim_Realloc(vo
60b0: 69 64 20 2a 70 74 72 2c 20 69 6e 74 20 73 69 7a  id *ptr, int siz
60c0: 65 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 76  e);.JIM_EXPORT v
60d0: 6f 69 64 20 4a 69 6d 5f 46 72 65 65 20 28 76 6f  oid Jim_Free (vo
60e0: 69 64 20 2a 70 74 72 29 3b 0a 4a 49 4d 5f 45 58  id *ptr);.JIM_EX
60f0: 50 4f 52 54 20 63 68 61 72 20 2a 20 4a 69 6d 5f  PORT char * Jim_
6100: 53 74 72 44 75 70 20 28 63 6f 6e 73 74 20 63 68  StrDup (const ch
6110: 61 72 20 2a 73 29 3b 0a 4a 49 4d 5f 45 58 50 4f  ar *s);.JIM_EXPO
6120: 52 54 20 63 68 61 72 20 2a 4a 69 6d 5f 53 74 72  RT char *Jim_Str
6130: 44 75 70 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  DupLen(const cha
6140: 72 20 2a 73 2c 20 69 6e 74 20 6c 29 3b 0a 0a 2f  r *s, int l);../
6150: 2a 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 2a 2f  * environment */
6160: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 63 68 61 72  .JIM_EXPORT char
6170: 20 2a 2a 4a 69 6d 5f 47 65 74 45 6e 76 69 72 6f   **Jim_GetEnviro
6180: 6e 28 76 6f 69 64 29 3b 0a 4a 49 4d 5f 45 58 50  n(void);.JIM_EXP
6190: 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 53 65 74  ORT void Jim_Set
61a0: 45 6e 76 69 72 6f 6e 28 63 68 61 72 20 2a 2a 65  Environ(char **e
61b0: 6e 76 29 3b 0a 0a 2f 2a 20 65 76 61 6c 75 61 74  nv);../* evaluat
61c0: 69 6f 6e 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52  ion */.JIM_EXPOR
61d0: 54 20 69 6e 74 20 4a 69 6d 5f 45 76 61 6c 28 4a  T int Jim_Eval(J
61e0: 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  im_Interp *inter
61f0: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  p, const char *s
6200: 63 72 69 70 74 29 3b 0a 2f 2a 20 69 6e 20 43 20  cript);./* in C 
6210: 63 6f 64 65 2c 20 79 6f 75 20 63 61 6e 20 64 6f  code, you can do
6220: 20 74 68 69 73 20 61 6e 64 20 67 65 74 20 62 65   this and get be
6230: 74 74 65 72 20 65 72 72 6f 72 20 6d 65 73 73 61  tter error messa
6240: 67 65 73 20 2a 2f 0a 2f 2a 20 20 20 4a 69 6d 5f  ges */./*   Jim_
6250: 45 76 61 6c 53 6f 75 72 63 65 28 20 69 6e 74 65  EvalSource( inte
6260: 72 70 2c 20 5f 5f 46 49 4c 45 5f 5f 2c 20 5f 5f  rp, __FILE__, __
6270: 4c 49 4e 45 5f 5f 20 2c 20 22 73 6f 6d 65 20 74  LINE__ , "some t
6280: 63 6c 20 63 6f 6d 6d 61 6e 64 73 22 29 3b 20 2a  cl commands"); *
6290: 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74  /.JIM_EXPORT int
62a0: 20 4a 69 6d 5f 45 76 61 6c 53 6f 75 72 63 65 28   Jim_EvalSource(
62b0: 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Jim_Interp *inte
62c0: 72 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  rp, const char *
62d0: 66 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 6c 69  filename, int li
62e0: 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61 72  neno, const char
62f0: 20 2a 73 63 72 69 70 74 29 3b 0a 2f 2a 20 42 61   *script);./* Ba
6300: 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
6310: 69 6c 69 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  ility */.#define
6320: 20 4a 69 6d 5f 45 76 61 6c 5f 4e 61 6d 65 64 28   Jim_Eval_Named(
6330: 49 2c 20 53 2c 20 46 2c 20 4c 29 20 4a 69 6d 5f  I, S, F, L) Jim_
6340: 45 76 61 6c 53 6f 75 72 63 65 28 28 49 29 2c 20  EvalSource((I), 
6350: 28 46 29 2c 20 28 4c 29 2c 20 28 53 29 29 0a 0a  (F), (L), (S))..
6360: 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a  JIM_EXPORT int J
6370: 69 6d 5f 45 76 61 6c 47 6c 6f 62 61 6c 28 4a 69  im_EvalGlobal(Ji
6380: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
6390: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 63  , const char *sc
63a0: 72 69 70 74 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52  ript);.JIM_EXPOR
63b0: 54 20 69 6e 74 20 4a 69 6d 5f 45 76 61 6c 46 69  T int Jim_EvalFi
63c0: 6c 65 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  le(Jim_Interp *i
63d0: 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20 63 68 61  nterp, const cha
63e0: 72 20 2a 66 69 6c 65 6e 61 6d 65 29 3b 0a 4a 49  r *filename);.JI
63f0: 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d  M_EXPORT int Jim
6400: 5f 45 76 61 6c 46 69 6c 65 47 6c 6f 62 61 6c 28  _EvalFileGlobal(
6410: 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Jim_Interp *inte
6420: 72 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  rp, const char *
6430: 66 69 6c 65 6e 61 6d 65 29 3b 0a 4a 49 4d 5f 45  filename);.JIM_E
6440: 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 45 76  XPORT int Jim_Ev
6450: 61 6c 4f 62 6a 20 28 4a 69 6d 5f 49 6e 74 65 72  alObj (Jim_Inter
6460: 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f  p *interp, Jim_O
6470: 62 6a 20 2a 73 63 72 69 70 74 4f 62 6a 50 74 72  bj *scriptObjPtr
6480: 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e  );.JIM_EXPORT in
6490: 74 20 4a 69 6d 5f 45 76 61 6c 4f 62 6a 56 65 63  t Jim_EvalObjVec
64a0: 74 6f 72 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20  tor (Jim_Interp 
64b0: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
64c0: 63 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f  c,.        Jim_O
64d0: 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29  bj *const *objv)
64e0: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74  ;.JIM_EXPORT int
64f0: 20 4a 69 6d 5f 45 76 61 6c 4f 62 6a 50 72 65 66   Jim_EvalObjPref
6500: 69 78 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  ix(Jim_Interp *i
6510: 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20 2a  nterp, Jim_Obj *
6520: 70 72 65 66 69 78 2c 0a 20 20 20 20 20 20 20 20  prefix,.        
6530: 69 6e 74 20 6f 62 6a 63 2c 20 4a 69 6d 5f 4f 62  int objc, Jim_Ob
6540: 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b  j *const *objv);
6550: 0a 23 64 65 66 69 6e 65 20 4a 69 6d 5f 45 76 61  .#define Jim_Eva
6560: 6c 50 72 65 66 69 78 28 69 2c 20 70 2c 20 6f 63  lPrefix(i, p, oc
6570: 2c 20 6f 76 29 20 4a 69 6d 5f 45 76 61 6c 4f 62  , ov) Jim_EvalOb
6580: 6a 50 72 65 66 69 78 28 28 69 29 2c 20 4a 69 6d  jPrefix((i), Jim
6590: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 69  _NewStringObj((i
65a0: 29 2c 20 28 70 29 2c 20 2d 31 29 2c 20 28 6f 63  ), (p), -1), (oc
65b0: 29 2c 20 28 6f 76 29 29 0a 4a 49 4d 5f 45 58 50  ), (ov)).JIM_EXP
65c0: 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 53 75 62 73  ORT int Jim_Subs
65d0: 74 4f 62 6a 20 28 4a 69 6d 5f 49 6e 74 65 72 70  tObj (Jim_Interp
65e0: 20 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62   *interp, Jim_Ob
65f0: 6a 20 2a 73 75 62 73 74 4f 62 6a 50 74 72 2c 0a  j *substObjPtr,.
6600: 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20          Jim_Obj 
6610: 2a 2a 72 65 73 4f 62 6a 50 74 72 50 74 72 2c 20  **resObjPtrPtr, 
6620: 69 6e 74 20 66 6c 61 67 73 29 3b 0a 0a 2f 2a 20  int flags);../* 
6630: 73 74 61 63 6b 20 2a 2f 0a 4a 49 4d 5f 45 58 50  stack */.JIM_EXP
6640: 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 49 6e 69  ORT void Jim_Ini
6650: 74 53 74 61 63 6b 28 4a 69 6d 5f 53 74 61 63 6b  tStack(Jim_Stack
6660: 20 2a 73 74 61 63 6b 29 3b 0a 4a 49 4d 5f 45 58   *stack);.JIM_EX
6670: 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 46 72  PORT void Jim_Fr
6680: 65 65 53 74 61 63 6b 28 4a 69 6d 5f 53 74 61 63  eeStack(Jim_Stac
6690: 6b 20 2a 73 74 61 63 6b 29 3b 0a 4a 49 4d 5f 45  k *stack);.JIM_E
66a0: 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 53 74  XPORT int Jim_St
66b0: 61 63 6b 4c 65 6e 28 4a 69 6d 5f 53 74 61 63 6b  ackLen(Jim_Stack
66c0: 20 2a 73 74 61 63 6b 29 3b 0a 4a 49 4d 5f 45 58   *stack);.JIM_EX
66d0: 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 53 74  PORT void Jim_St
66e0: 61 63 6b 50 75 73 68 28 4a 69 6d 5f 53 74 61 63  ackPush(Jim_Stac
66f0: 6b 20 2a 73 74 61 63 6b 2c 20 76 6f 69 64 20 2a  k *stack, void *
6700: 65 6c 65 6d 65 6e 74 29 3b 0a 4a 49 4d 5f 45 58  element);.JIM_EX
6710: 50 4f 52 54 20 76 6f 69 64 20 2a 20 4a 69 6d 5f  PORT void * Jim_
6720: 53 74 61 63 6b 50 6f 70 28 4a 69 6d 5f 53 74 61  StackPop(Jim_Sta
6730: 63 6b 20 2a 73 74 61 63 6b 29 3b 0a 4a 49 4d 5f  ck *stack);.JIM_
6740: 45 58 50 4f 52 54 20 76 6f 69 64 20 2a 20 4a 69  EXPORT void * Ji
6750: 6d 5f 53 74 61 63 6b 50 65 65 6b 28 4a 69 6d 5f  m_StackPeek(Jim_
6760: 53 74 61 63 6b 20 2a 73 74 61 63 6b 29 3b 0a 4a  Stack *stack);.J
6770: 49 4d 5f 45 58 50 4f 52 54 20 76 6f 69 64 20 4a  IM_EXPORT void J
6780: 69 6d 5f 46 72 65 65 53 74 61 63 6b 45 6c 65 6d  im_FreeStackElem
6790: 65 6e 74 73 28 4a 69 6d 5f 53 74 61 63 6b 20 2a  ents(Jim_Stack *
67a0: 73 74 61 63 6b 2c 20 76 6f 69 64 20 28 2a 66 72  stack, void (*fr
67b0: 65 65 46 75 6e 63 29 28 76 6f 69 64 20 2a 70 74  eeFunc)(void *pt
67c0: 72 29 29 3b 0a 0a 2f 2a 20 68 61 73 68 20 74 61  r));../* hash ta
67d0: 62 6c 65 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52  ble */.JIM_EXPOR
67e0: 54 20 69 6e 74 20 4a 69 6d 5f 49 6e 69 74 48 61  T int Jim_InitHa
67f0: 73 68 54 61 62 6c 65 20 28 4a 69 6d 5f 48 61 73  shTable (Jim_Has
6800: 68 54 61 62 6c 65 20 2a 68 74 2c 0a 20 20 20 20  hTable *ht,.    
6810: 20 20 20 20 63 6f 6e 73 74 20 4a 69 6d 5f 48 61      const Jim_Ha
6820: 73 68 54 61 62 6c 65 54 79 70 65 20 2a 74 79 70  shTableType *typ
6830: 65 2c 20 76 6f 69 64 20 2a 70 72 69 76 64 61 74  e, void *privdat
6840: 61 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69  a);.JIM_EXPORT i
6850: 6e 74 20 4a 69 6d 5f 45 78 70 61 6e 64 48 61 73  nt Jim_ExpandHas
6860: 68 54 61 62 6c 65 20 28 4a 69 6d 5f 48 61 73 68  hTable (Jim_Hash
6870: 54 61 62 6c 65 20 2a 68 74 2c 0a 20 20 20 20 20  Table *ht,.     
6880: 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20     unsigned int 
6890: 73 69 7a 65 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52  size);.JIM_EXPOR
68a0: 54 20 69 6e 74 20 4a 69 6d 5f 41 64 64 48 61 73  T int Jim_AddHas
68b0: 68 45 6e 74 72 79 20 28 4a 69 6d 5f 48 61 73 68  hEntry (Jim_Hash
68c0: 54 61 62 6c 65 20 2a 68 74 2c 20 63 6f 6e 73 74  Table *ht, const
68d0: 20 76 6f 69 64 20 2a 6b 65 79 2c 0a 20 20 20 20   void *key,.    
68e0: 20 20 20 20 76 6f 69 64 20 2a 76 61 6c 29 3b 0a      void *val);.
68f0: 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a  JIM_EXPORT int J
6900: 69 6d 5f 52 65 70 6c 61 63 65 48 61 73 68 45 6e  im_ReplaceHashEn
6910: 74 72 79 20 28 4a 69 6d 5f 48 61 73 68 54 61 62  try (Jim_HashTab
6920: 6c 65 20 2a 68 74 2c 0a 20 20 20 20 20 20 20 20  le *ht,.        
6930: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6b 65 79 2c  const void *key,
6940: 20 76 6f 69 64 20 2a 76 61 6c 29 3b 0a 4a 49 4d   void *val);.JIM
6950: 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f  _EXPORT int Jim_
6960: 44 65 6c 65 74 65 48 61 73 68 45 6e 74 72 79 20  DeleteHashEntry 
6970: 28 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65 20 2a  (Jim_HashTable *
6980: 68 74 2c 0a 20 20 20 20 20 20 20 20 63 6f 6e 73  ht,.        cons
6990: 74 20 76 6f 69 64 20 2a 6b 65 79 29 3b 0a 4a 49  t void *key);.JI
69a0: 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d  M_EXPORT int Jim
69b0: 5f 46 72 65 65 48 61 73 68 54 61 62 6c 65 20 28  _FreeHashTable (
69c0: 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65 20 2a 68  Jim_HashTable *h
69d0: 74 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a  t);.JIM_EXPORT J
69e0: 69 6d 5f 48 61 73 68 45 6e 74 72 79 20 2a 20 4a  im_HashEntry * J
69f0: 69 6d 5f 46 69 6e 64 48 61 73 68 45 6e 74 72 79  im_FindHashEntry
6a00: 20 28 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65 20   (Jim_HashTable 
6a10: 2a 68 74 2c 0a 20 20 20 20 20 20 20 20 63 6f 6e  *ht,.        con
6a20: 73 74 20 76 6f 69 64 20 2a 6b 65 79 29 3b 0a 4a  st void *key);.J
6a30: 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69  IM_EXPORT int Ji
6a40: 6d 5f 52 65 73 69 7a 65 48 61 73 68 54 61 62 6c  m_ResizeHashTabl
6a50: 65 20 28 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65  e (Jim_HashTable
6a60: 20 2a 68 74 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52   *ht);.JIM_EXPOR
6a70: 54 20 4a 69 6d 5f 48 61 73 68 54 61 62 6c 65 49  T Jim_HashTableI
6a80: 74 65 72 61 74 6f 72 20 2a 4a 69 6d 5f 47 65 74  terator *Jim_Get
6a90: 48 61 73 68 54 61 62 6c 65 49 74 65 72 61 74 6f  HashTableIterato
6aa0: 72 0a 20 20 20 20 20 20 20 20 28 4a 69 6d 5f 48  r.        (Jim_H
6ab0: 61 73 68 54 61 62 6c 65 20 2a 68 74 29 3b 0a 4a  ashTable *ht);.J
6ac0: 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d 5f 48 61  IM_EXPORT Jim_Ha
6ad0: 73 68 45 6e 74 72 79 20 2a 20 4a 69 6d 5f 4e 65  shEntry * Jim_Ne
6ae0: 78 74 48 61 73 68 45 6e 74 72 79 0a 20 20 20 20  xtHashEntry.    
6af0: 20 20 20 20 28 4a 69 6d 5f 48 61 73 68 54 61 62      (Jim_HashTab
6b00: 6c 65 49 74 65 72 61 74 6f 72 20 2a 69 74 65 72  leIterator *iter
6b10: 29 3b 0a 0a 2f 2a 20 6f 62 6a 65 63 74 73 20 2a  );../* objects *
6b20: 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d  /.JIM_EXPORT Jim
6b30: 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 4e 65 77 4f 62  _Obj * Jim_NewOb
6b40: 6a 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  j (Jim_Interp *i
6b50: 6e 74 65 72 70 29 3b 0a 4a 49 4d 5f 45 58 50 4f  nterp);.JIM_EXPO
6b60: 52 54 20 76 6f 69 64 20 4a 69 6d 5f 46 72 65 65  RT void Jim_Free
6b70: 4f 62 6a 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20  Obj (Jim_Interp 
6b80: 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a  *interp, Jim_Obj
6b90: 20 2a 6f 62 6a 50 74 72 29 3b 0a 4a 49 4d 5f 45   *objPtr);.JIM_E
6ba0: 58 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 49  XPORT void Jim_I
6bb0: 6e 76 61 6c 69 64 61 74 65 53 74 72 69 6e 67 52  nvalidateStringR
6bc0: 65 70 20 28 4a 69 6d 5f 4f 62 6a 20 2a 6f 62 6a  ep (Jim_Obj *obj
6bd0: 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54  Ptr);.JIM_EXPORT
6be0: 20 76 6f 69 64 20 4a 69 6d 5f 49 6e 69 74 53 74   void Jim_InitSt
6bf0: 72 69 6e 67 52 65 70 20 28 4a 69 6d 5f 4f 62 6a  ringRep (Jim_Obj
6c00: 20 2a 6f 62 6a 50 74 72 2c 20 63 6f 6e 73 74 20   *objPtr, const 
6c10: 63 68 61 72 20 2a 62 79 74 65 73 2c 0a 20 20 20  char *bytes,.   
6c20: 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 29       int length)
6c30: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d  ;.JIM_EXPORT Jim
6c40: 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 44 75 70 6c 69  _Obj * Jim_Dupli
6c50: 63 61 74 65 4f 62 6a 20 28 4a 69 6d 5f 49 6e 74  cateObj (Jim_Int
6c60: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20  erp *interp,.   
6c70: 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6f 62       Jim_Obj *ob
6c80: 6a 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52  jPtr);.JIM_EXPOR
6c90: 54 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 4a  T const char * J
6ca0: 69 6d 5f 47 65 74 53 74 72 69 6e 67 28 4a 69 6d  im_GetString(Jim
6cb0: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 0a 20 20  _Obj *objPtr,.  
6cc0: 20 20 20 20 20 20 69 6e 74 20 2a 6c 65 6e 50 74        int *lenPt
6cd0: 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69  r);.JIM_EXPORT i
6ce0: 6e 74 20 4a 69 6d 5f 4c 65 6e 67 74 68 28 4a 69  nt Jim_Length(Ji
6cf0: 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 3b 0a  m_Obj *objPtr);.
6d00: 0a 2f 2a 20 73 74 72 69 6e 67 20 6f 62 6a 65 63  ./* string objec
6d10: 74 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54 20  t */.JIM_EXPORT 
6d20: 4a 69 6d 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 4e 65  Jim_Obj * Jim_Ne
6d30: 77 53 74 72 69 6e 67 4f 62 6a 20 28 4a 69 6d 5f  wStringObj (Jim_
6d40: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
6d50: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
6d60: 61 72 20 2a 73 2c 20 69 6e 74 20 6c 65 6e 29 3b  ar *s, int len);
6d70: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d 5f  .JIM_EXPORT Jim_
6d80: 4f 62 6a 20 2a 4a 69 6d 5f 4e 65 77 53 74 72 69  Obj *Jim_NewStri
6d90: 6e 67 4f 62 6a 55 74 66 38 28 4a 69 6d 5f 49 6e  ngObjUtf8(Jim_In
6da0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
6db0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
6dc0: 20 2a 73 2c 20 69 6e 74 20 63 68 61 72 6c 65 6e   *s, int charlen
6dd0: 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69  );.JIM_EXPORT Ji
6de0: 6d 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 4e 65 77 53  m_Obj * Jim_NewS
6df0: 74 72 69 6e 67 4f 62 6a 4e 6f 41 6c 6c 6f 63 20  tringObjNoAlloc 
6e00: 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Jim_Interp *int
6e10: 65 72 70 2c 0a 20 20 20 20 20 20 20 20 63 68 61  erp,.        cha
6e20: 72 20 2a 73 2c 20 69 6e 74 20 6c 65 6e 29 3b 0a  r *s, int len);.
6e30: 4a 49 4d 5f 45 58 50 4f 52 54 20 76 6f 69 64 20  JIM_EXPORT void 
6e40: 4a 69 6d 5f 41 70 70 65 6e 64 53 74 72 69 6e 67  Jim_AppendString
6e50: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
6e60: 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 6f  terp, Jim_Obj *o
6e70: 62 6a 50 74 72 2c 0a 20 20 20 20 20 20 20 20 63  bjPtr,.        c
6e80: 6f 6e 73 74 20 63 68 61 72 20 2a 73 74 72 2c 20  onst char *str, 
6e90: 69 6e 74 20 6c 65 6e 29 3b 0a 4a 49 4d 5f 45 58  int len);.JIM_EX
6ea0: 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 41 70  PORT void Jim_Ap
6eb0: 70 65 6e 64 4f 62 6a 20 28 4a 69 6d 5f 49 6e 74  pendObj (Jim_Int
6ec0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69 6d  erp *interp, Jim
6ed0: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 0a 20 20  _Obj *objPtr,.  
6ee0: 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 61        Jim_Obj *a
6ef0: 70 70 65 6e 64 4f 62 6a 50 74 72 29 3b 0a 4a 49  ppendObjPtr);.JI
6f00: 4d 5f 45 58 50 4f 52 54 20 76 6f 69 64 20 4a 69  M_EXPORT void Ji
6f10: 6d 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73 20  m_AppendStrings 
6f20: 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Jim_Interp *int
6f30: 65 72 70 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d  erp,.        Jim
6f40: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 20 2e 2e  _Obj *objPtr, ..
6f50: 2e 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69  .);.JIM_EXPORT i
6f60: 6e 74 20 4a 69 6d 5f 53 74 72 69 6e 67 45 71 4f  nt Jim_StringEqO
6f70: 62 6a 28 4a 69 6d 5f 4f 62 6a 20 2a 61 4f 62 6a  bj(Jim_Obj *aObj
6f80: 50 74 72 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 62 4f  Ptr, Jim_Obj *bO
6f90: 62 6a 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f  bjPtr);.JIM_EXPO
6fa0: 52 54 20 69 6e 74 20 4a 69 6d 5f 53 74 72 69 6e  RT int Jim_Strin
6fb0: 67 4d 61 74 63 68 4f 62 6a 20 28 4a 69 6d 5f 49  gMatchObj (Jim_I
6fc0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 4a  nterp *interp, J
6fd0: 69 6d 5f 4f 62 6a 20 2a 70 61 74 74 65 72 6e 4f  im_Obj *patternO
6fe0: 62 6a 50 74 72 2c 0a 20 20 20 20 20 20 20 20 4a  bjPtr,.        J
6ff0: 69 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 20  im_Obj *objPtr, 
7000: 69 6e 74 20 6e 6f 63 61 73 65 29 3b 0a 4a 49 4d  int nocase);.JIM
7010: 5f 45 58 50 4f 52 54 20 4a 69 6d 5f 4f 62 6a 20  _EXPORT Jim_Obj 
7020: 2a 20 4a 69 6d 5f 53 74 72 69 6e 67 52 61 6e 67  * Jim_StringRang
7030: 65 4f 62 6a 20 28 4a 69 6d 5f 49 6e 74 65 72 70  eObj (Jim_Interp
7040: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20   *interp,.      
7050: 20 20 4a 69 6d 5f 4f 62 6a 20 2a 73 74 72 4f 62    Jim_Obj *strOb
7060: 6a 50 74 72 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 66  jPtr, Jim_Obj *f
7070: 69 72 73 74 4f 62 6a 50 74 72 2c 0a 20 20 20 20  irstObjPtr,.    
7080: 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6c 61 73      Jim_Obj *las
7090: 74 4f 62 6a 50 74 72 29 3b 0a 4a 49 4d 5f 45 58  tObjPtr);.JIM_EX
70a0: 50 4f 52 54 20 4a 69 6d 5f 4f 62 6a 20 2a 20 4a  PORT Jim_Obj * J
70b0: 69 6d 5f 46 6f 72 6d 61 74 53 74 72 69 6e 67 20  im_FormatString 
70c0: 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Jim_Interp *int
70d0: 65 72 70 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d  erp,.        Jim
70e0: 5f 4f 62 6a 20 2a 66 6d 74 4f 62 6a 50 74 72 2c  _Obj *fmtObjPtr,
70f0: 20 69 6e 74 20 6f 62 6a 63 2c 20 4a 69 6d 5f 4f   int objc, Jim_O
7100: 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29  bj *const *objv)
7110: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d  ;.JIM_EXPORT Jim
7120: 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 53 63 61 6e 53  _Obj * Jim_ScanS
7130: 74 72 69 6e 67 20 28 4a 69 6d 5f 49 6e 74 65 72  tring (Jim_Inter
7140: 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f  p *interp, Jim_O
7150: 62 6a 20 2a 73 74 72 4f 62 6a 50 74 72 2c 0a 20  bj *strObjPtr,. 
7160: 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a         Jim_Obj *
7170: 66 6d 74 4f 62 6a 50 74 72 2c 20 69 6e 74 20 66  fmtObjPtr, int f
7180: 6c 61 67 73 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52  lags);.JIM_EXPOR
7190: 54 20 69 6e 74 20 4a 69 6d 5f 43 6f 6d 70 61 72  T int Jim_Compar
71a0: 65 53 74 72 69 6e 67 49 6d 6d 65 64 69 61 74 65  eStringImmediate
71b0: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
71c0: 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20 4a 69  terp,.        Ji
71d0: 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 20 63  m_Obj *objPtr, c
71e0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 74 72 29 3b  onst char *str);
71f0: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20  .JIM_EXPORT int 
7200: 4a 69 6d 5f 53 74 72 69 6e 67 43 6f 6d 70 61 72  Jim_StringCompar
7210: 65 4f 62 6a 28 4a 69 6d 5f 49 6e 74 65 72 70 20  eObj(Jim_Interp 
7220: 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a  *interp, Jim_Obj
7230: 20 2a 66 69 72 73 74 4f 62 6a 50 74 72 2c 0a 20   *firstObjPtr,. 
7240: 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a         Jim_Obj *
7250: 73 65 63 6f 6e 64 4f 62 6a 50 74 72 2c 20 69 6e  secondObjPtr, in
7260: 74 20 6e 6f 63 61 73 65 29 3b 0a 4a 49 4d 5f 45  t nocase);.JIM_E
7270: 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 55 74  XPORT int Jim_Ut
7280: 66 38 4c 65 6e 67 74 68 28 4a 69 6d 5f 49 6e 74  f8Length(Jim_Int
7290: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69 6d  erp *interp, Jim
72a0: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 3b 0a 0a  _Obj *objPtr);..
72b0: 2f 2a 20 72 65 66 65 72 65 6e 63 65 20 6f 62 6a  /* reference obj
72c0: 65 63 74 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52  ect */.JIM_EXPOR
72d0: 54 20 4a 69 6d 5f 4f 62 6a 20 2a 20 4a 69 6d 5f  T Jim_Obj * Jim_
72e0: 4e 65 77 52 65 66 65 72 65 6e 63 65 20 28 4a 69  NewReference (Ji
72f0: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
7300: 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62  ,.        Jim_Ob
7310: 6a 20 2a 6f 62 6a 50 74 72 2c 20 4a 69 6d 5f 4f  j *objPtr, Jim_O
7320: 62 6a 20 2a 74 61 67 50 74 72 2c 20 4a 69 6d 5f  bj *tagPtr, Jim_
7330: 4f 62 6a 20 2a 63 6d 64 4e 61 6d 65 50 74 72 29  Obj *cmdNamePtr)
7340: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d  ;.JIM_EXPORT Jim
7350: 5f 52 65 66 65 72 65 6e 63 65 20 2a 20 4a 69 6d  _Reference * Jim
7360: 5f 47 65 74 52 65 66 65 72 65 6e 63 65 20 28 4a  _GetReference (J
7370: 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  im_Interp *inter
7380: 70 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f  p,.        Jim_O
7390: 62 6a 20 2a 6f 62 6a 50 74 72 29 3b 0a 4a 49 4d  bj *objPtr);.JIM
73a0: 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f  _EXPORT int Jim_
73b0: 53 65 74 46 69 6e 61 6c 69 7a 65 72 20 28 4a 69  SetFinalizer (Ji
73c0: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
73d0: 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74  , Jim_Obj *objPt
73e0: 72 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 63 6d 64 4e  r, Jim_Obj *cmdN
73f0: 61 6d 65 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50  amePtr);.JIM_EXP
7400: 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 47 65 74 46  ORT int Jim_GetF
7410: 69 6e 61 6c 69 7a 65 72 20 28 4a 69 6d 5f 49 6e  inalizer (Jim_In
7420: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69  terp *interp, Ji
7430: 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 20 4a  m_Obj *objPtr, J
7440: 69 6d 5f 4f 62 6a 20 2a 2a 63 6d 64 4e 61 6d 65  im_Obj **cmdName
7450: 50 74 72 50 74 72 29 3b 0a 0a 2f 2a 20 69 6e 74  PtrPtr);../* int
7460: 65 72 70 72 65 74 65 72 20 2a 2f 0a 4a 49 4d 5f  erpreter */.JIM_
7470: 45 58 50 4f 52 54 20 4a 69 6d 5f 49 6e 74 65 72  EXPORT Jim_Inter
7480: 70 20 2a 20 4a 69 6d 5f 43 72 65 61 74 65 49 6e  p * Jim_CreateIn
7490: 74 65 72 70 20 28 76 6f 69 64 29 3b 0a 4a 49 4d  terp (void);.JIM
74a0: 5f 45 58 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d  _EXPORT void Jim
74b0: 5f 46 72 65 65 49 6e 74 65 72 70 20 28 4a 69 6d  _FreeInterp (Jim
74c0: 5f 49 6e 74 65 72 70 20 2a 69 29 3b 0a 4a 49 4d  _Interp *i);.JIM
74d0: 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f  _EXPORT int Jim_
74e0: 47 65 74 45 78 69 74 43 6f 64 65 20 28 4a 69 6d  GetExitCode (Jim
74f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29  _Interp *interp)
7500: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 63 6f 6e  ;.JIM_EXPORT con
7510: 73 74 20 63 68 61 72 20 2a 4a 69 6d 5f 52 65 74  st char *Jim_Ret
7520: 75 72 6e 43 6f 64 65 28 69 6e 74 20 63 6f 64 65  urnCode(int code
7530: 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 76 6f  );.JIM_EXPORT vo
7540: 69 64 20 4a 69 6d 5f 53 65 74 52 65 73 75 6c 74  id Jim_SetResult
7550: 46 6f 72 6d 61 74 74 65 64 28 4a 69 6d 5f 49 6e  Formatted(Jim_In
7560: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 6f  terp *interp, co
7570: 6e 73 74 20 63 68 61 72 20 2a 66 6f 72 6d 61 74  nst char *format
7580: 2c 20 2e 2e 2e 29 3b 0a 0a 2f 2a 20 63 6f 6d 6d  , ...);../* comm
7590: 61 6e 64 73 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f  ands */.JIM_EXPO
75a0: 52 54 20 76 6f 69 64 20 4a 69 6d 5f 52 65 67 69  RT void Jim_Regi
75b0: 73 74 65 72 43 6f 72 65 43 6f 6d 6d 61 6e 64 73  sterCoreCommands
75c0: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
75d0: 74 65 72 70 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52  terp);.JIM_EXPOR
75e0: 54 20 69 6e 74 20 4a 69 6d 5f 43 72 65 61 74 65  T int Jim_Create
75f0: 43 6f 6d 6d 61 6e 64 20 28 4a 69 6d 5f 49 6e 74  Command (Jim_Int
7600: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20  erp *interp,.   
7610: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
7620: 2a 63 6d 64 4e 61 6d 65 2c 20 4a 69 6d 5f 43 6d  *cmdName, Jim_Cm
7630: 64 50 72 6f 63 20 63 6d 64 50 72 6f 63 2c 20 76  dProc cmdProc, v
7640: 6f 69 64 20 2a 70 72 69 76 44 61 74 61 2c 0a 20  oid *privData,. 
7650: 20 20 20 20 20 20 20 20 4a 69 6d 5f 44 65 6c 43          Jim_DelC
7660: 6d 64 50 72 6f 63 20 64 65 6c 50 72 6f 63 29 3b  mdProc delProc);
7670: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20  .JIM_EXPORT int 
7680: 4a 69 6d 5f 44 65 6c 65 74 65 43 6f 6d 6d 61 6e  Jim_DeleteComman
7690: 64 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  d (Jim_Interp *i
76a0: 6e 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20 63  nterp,.        c
76b0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6d 64 4e 61  onst char *cmdNa
76c0: 6d 65 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20  me);.JIM_EXPORT 
76d0: 69 6e 74 20 4a 69 6d 5f 52 65 6e 61 6d 65 43 6f  int Jim_RenameCo
76e0: 6d 6d 61 6e 64 20 28 4a 69 6d 5f 49 6e 74 65 72  mmand (Jim_Inter
76f0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20  p *interp,.     
7700: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6f     const char *o
7710: 6c 64 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68  ldName, const ch
7720: 61 72 20 2a 6e 65 77 4e 61 6d 65 29 3b 0a 4a 49  ar *newName);.JI
7730: 4d 5f 45 58 50 4f 52 54 20 4a 69 6d 5f 43 6d 64  M_EXPORT Jim_Cmd
7740: 20 2a 20 4a 69 6d 5f 47 65 74 43 6f 6d 6d 61 6e   * Jim_GetComman
7750: 64 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  d (Jim_Interp *i
7760: 6e 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20 4a  nterp,.        J
7770: 69 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 20  im_Obj *objPtr, 
7780: 69 6e 74 20 66 6c 61 67 73 29 3b 0a 4a 49 4d 5f  int flags);.JIM_
7790: 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 53  EXPORT int Jim_S
77a0: 65 74 56 61 72 69 61 62 6c 65 20 28 4a 69 6d 5f  etVariable (Jim_
77b0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
77c0: 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20          Jim_Obj 
77d0: 2a 6e 61 6d 65 4f 62 6a 50 74 72 2c 20 4a 69 6d  *nameObjPtr, Jim
77e0: 5f 4f 62 6a 20 2a 76 61 6c 4f 62 6a 50 74 72 29  _Obj *valObjPtr)
77f0: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74  ;.JIM_EXPORT int
7800: 20 4a 69 6d 5f 53 65 74 56 61 72 69 61 62 6c 65   Jim_SetVariable
7810: 53 74 72 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20  Str (Jim_Interp 
7820: 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20 20  *interp,.       
7830: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d   const char *nam
7840: 65 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 6f 62 6a 50  e, Jim_Obj *objP
7850: 74 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20  tr);.JIM_EXPORT 
7860: 69 6e 74 20 4a 69 6d 5f 53 65 74 47 6c 6f 62 61  int Jim_SetGloba
7870: 6c 56 61 72 69 61 62 6c 65 53 74 72 20 28 4a 69  lVariableStr (Ji
7880: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
7890: 2c 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  ,.        const 
78a0: 63 68 61 72 20 2a 6e 61 6d 65 2c 20 4a 69 6d 5f  char *name, Jim_
78b0: 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 3b 0a 4a 49  Obj *objPtr);.JI
78c0: 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d  M_EXPORT int Jim
78d0: 5f 53 65 74 56 61 72 69 61 62 6c 65 53 74 72 57  _SetVariableStrW
78e0: 69 74 68 53 74 72 20 28 4a 69 6d 5f 49 6e 74 65  ithStr (Jim_Inte
78f0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20  rp *interp,.    
7900: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
7910: 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  name, const char
7920: 20 2a 76 61 6c 29 3b 0a 4a 49 4d 5f 45 58 50 4f   *val);.JIM_EXPO
7930: 52 54 20 69 6e 74 20 4a 69 6d 5f 53 65 74 56 61  RT int Jim_SetVa
7940: 72 69 61 62 6c 65 4c 69 6e 6b 20 28 4a 69 6d 5f  riableLink (Jim_
7950: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
7960: 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20          Jim_Obj 
7970: 2a 6e 61 6d 65 4f 62 6a 50 74 72 2c 20 4a 69 6d  *nameObjPtr, Jim
7980: 5f 4f 62 6a 20 2a 74 61 72 67 65 74 4e 61 6d 65  _Obj *targetName
7990: 4f 62 6a 50 74 72 2c 0a 20 20 20 20 20 20 20 20  ObjPtr,.        
79a0: 4a 69 6d 5f 43 61 6c 6c 46 72 61 6d 65 20 2a 74  Jim_CallFrame *t
79b0: 61 72 67 65 74 43 61 6c 6c 46 72 61 6d 65 29 3b  argetCallFrame);
79c0: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d 5f  .JIM_EXPORT Jim_
79d0: 4f 62 6a 20 2a 20 4a 69 6d 5f 47 65 74 56 61 72  Obj * Jim_GetVar
79e0: 69 61 62 6c 65 20 28 4a 69 6d 5f 49 6e 74 65 72  iable (Jim_Inter
79f0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20  p *interp,.     
7a00: 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6e 61 6d 65     Jim_Obj *name
7a10: 4f 62 6a 50 74 72 2c 20 69 6e 74 20 66 6c 61 67  ObjPtr, int flag
7a20: 73 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 4a  s);.JIM_EXPORT J
7a30: 69 6d 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 47 65 74  im_Obj * Jim_Get
7a40: 47 6c 6f 62 61 6c 56 61 72 69 61 62 6c 65 20 28  GlobalVariable (
7a50: 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Jim_Interp *inte
7a60: 72 70 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f  rp,.        Jim_
7a70: 4f 62 6a 20 2a 6e 61 6d 65 4f 62 6a 50 74 72 2c  Obj *nameObjPtr,
7a80: 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a 4a 49 4d   int flags);.JIM
7a90: 5f 45 58 50 4f 52 54 20 4a 69 6d 5f 4f 62 6a 20  _EXPORT Jim_Obj 
7aa0: 2a 20 4a 69 6d 5f 47 65 74 56 61 72 69 61 62 6c  * Jim_GetVariabl
7ab0: 65 53 74 72 20 28 4a 69 6d 5f 49 6e 74 65 72 70  eStr (Jim_Interp
7ac0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20   *interp,.      
7ad0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61    const char *na
7ae0: 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a  me, int flags);.
7af0: 4a 49 4d 5f 45 58 50 4f 52 54 20 4a 69 6d 5f 4f  JIM_EXPORT Jim_O
7b00: 62 6a 20 2a 20 4a 69 6d 5f 47 65 74 47 6c 6f 62  bj * Jim_GetGlob
7b10: 61 6c 56 61 72 69 61 62 6c 65 53 74 72 20 28 4a  alVariableStr (J
7b20: 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  im_Interp *inter
7b30: 70 2c 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  p,.        const
7b40: 20 63 68 61 72 20 2a 6e 61 6d 65 2c 20 69 6e 74   char *name, int
7b50: 20 66 6c 61 67 73 29 3b 0a 4a 49 4d 5f 45 58 50   flags);.JIM_EXP
7b60: 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 55 6e 73 65  ORT int Jim_Unse
7b70: 74 56 61 72 69 61 62 6c 65 20 28 4a 69 6d 5f 49  tVariable (Jim_I
7b80: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
7b90: 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a         Jim_Obj *
7ba0: 6e 61 6d 65 4f 62 6a 50 74 72 2c 20 69 6e 74 20  nameObjPtr, int 
7bb0: 66 6c 61 67 73 29 3b 0a 0a 2f 2a 20 63 61 6c 6c  flags);../* call
7bc0: 20 66 72 61 6d 65 20 2a 2f 0a 4a 49 4d 5f 45 58   frame */.JIM_EX
7bd0: 50 4f 52 54 20 4a 69 6d 5f 43 61 6c 6c 46 72 61  PORT Jim_CallFra
7be0: 6d 65 20 2a 4a 69 6d 5f 47 65 74 43 61 6c 6c 46  me *Jim_GetCallF
7bf0: 72 61 6d 65 42 79 4c 65 76 65 6c 28 4a 69 6d 5f  rameByLevel(Jim_
7c00: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
7c10: 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20          Jim_Obj 
7c20: 2a 6c 65 76 65 6c 4f 62 6a 50 74 72 29 3b 0a 0a  *levelObjPtr);..
7c30: 2f 2a 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65  /* garbage colle
7c40: 63 74 69 6f 6e 20 2a 2f 0a 4a 49 4d 5f 45 58 50  ction */.JIM_EXP
7c50: 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 43 6f 6c 6c  ORT int Jim_Coll
7c60: 65 63 74 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20  ect (Jim_Interp 
7c70: 2a 69 6e 74 65 72 70 29 3b 0a 4a 49 4d 5f 45 58  *interp);.JIM_EX
7c80: 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 43 6f  PORT void Jim_Co
7c90: 6c 6c 65 63 74 49 66 4e 65 65 64 65 64 20 28 4a  llectIfNeeded (J
7ca0: 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  im_Interp *inter
7cb0: 70 29 3b 0a 0a 2f 2a 20 69 6e 64 65 78 20 6f 62  p);../* index ob
7cc0: 6a 65 63 74 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f  ject */.JIM_EXPO
7cd0: 52 54 20 69 6e 74 20 4a 69 6d 5f 47 65 74 49 6e  RT int Jim_GetIn
7ce0: 64 65 78 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20  dex (Jim_Interp 
7cf0: 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a  *interp, Jim_Obj
7d00: 20 2a 6f 62 6a 50 74 72 2c 0a 20 20 20 20 20 20   *objPtr,.      
7d10: 20 20 69 6e 74 20 2a 69 6e 64 65 78 50 74 72 29    int *indexPtr)
7d20: 3b 0a 0a 2f 2a 20 6c 69 73 74 20 6f 62 6a 65 63  ;../* list objec
7d30: 74 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54 20  t */.JIM_EXPORT 
7d40: 4a 69 6d 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 4e 65  Jim_Obj * Jim_Ne
7d50: 77 4c 69 73 74 4f 62 6a 20 28 4a 69 6d 5f 49 6e  wListObj (Jim_In
7d60: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
7d70: 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 63        Jim_Obj *c
7d80: 6f 6e 73 74 20 2a 65 6c 65 6d 65 6e 74 73 2c 20  onst *elements, 
7d90: 69 6e 74 20 6c 65 6e 29 3b 0a 4a 49 4d 5f 45 58  int len);.JIM_EX
7da0: 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 4c 69  PORT void Jim_Li
7db0: 73 74 49 6e 73 65 72 74 45 6c 65 6d 65 6e 74 73  stInsertElements
7dc0: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
7dd0: 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20 4a 69  terp,.        Ji
7de0: 6d 5f 4f 62 6a 20 2a 6c 69 73 74 50 74 72 2c 20  m_Obj *listPtr, 
7df0: 69 6e 74 20 6c 69 73 74 69 6e 64 65 78 2c 20 69  int listindex, i
7e00: 6e 74 20 6f 62 6a 63 2c 20 4a 69 6d 5f 4f 62 6a  nt objc, Jim_Obj
7e10: 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 56 65 63 29   *const *objVec)
7e20: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 76 6f 69  ;.JIM_EXPORT voi
7e30: 64 20 4a 69 6d 5f 4c 69 73 74 41 70 70 65 6e 64  d Jim_ListAppend
7e40: 45 6c 65 6d 65 6e 74 20 28 4a 69 6d 5f 49 6e 74  Element (Jim_Int
7e50: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20  erp *interp,.   
7e60: 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6c 69       Jim_Obj *li
7e70: 73 74 50 74 72 2c 20 4a 69 6d 5f 4f 62 6a 20 2a  stPtr, Jim_Obj *
7e80: 6f 62 6a 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50  objPtr);.JIM_EXP
7e90: 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f 4c 69 73  ORT void Jim_Lis
7ea0: 74 41 70 70 65 6e 64 4c 69 73 74 20 28 4a 69 6d  tAppendList (Jim
7eb0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
7ec0: 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a  .        Jim_Obj
7ed0: 20 2a 6c 69 73 74 50 74 72 2c 20 4a 69 6d 5f 4f   *listPtr, Jim_O
7ee0: 62 6a 20 2a 61 70 70 65 6e 64 4c 69 73 74 50 74  bj *appendListPt
7ef0: 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69  r);.JIM_EXPORT i
7f00: 6e 74 20 4a 69 6d 5f 4c 69 73 74 4c 65 6e 67 74  nt Jim_ListLengt
7f10: 68 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  h (Jim_Interp *i
7f20: 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20 2a  nterp, Jim_Obj *
7f30: 6f 62 6a 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50  objPtr);.JIM_EXP
7f40: 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 4c 69 73 74  ORT int Jim_List
7f50: 49 6e 64 65 78 20 28 4a 69 6d 5f 49 6e 74 65 72  Index (Jim_Inter
7f60: 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f  p *interp, Jim_O
7f70: 62 6a 20 2a 6c 69 73 74 50 72 74 2c 0a 20 20 20  bj *listPrt,.   
7f80: 20 20 20 20 20 69 6e 74 20 6c 69 73 74 69 6e 64       int listind
7f90: 65 78 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 2a 6f 62  ex, Jim_Obj **ob
7fa0: 6a 50 74 72 50 74 72 2c 20 69 6e 74 20 73 65 74  jPtrPtr, int set
7fb0: 65 72 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54  err);.JIM_EXPORT
7fc0: 20 69 6e 74 20 4a 69 6d 5f 53 65 74 4c 69 73 74   int Jim_SetList
7fd0: 49 6e 64 65 78 20 28 4a 69 6d 5f 49 6e 74 65 72  Index (Jim_Inter
7fe0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20  p *interp,.     
7ff0: 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 76 61 72 4e     Jim_Obj *varN
8000: 61 6d 65 50 74 72 2c 20 4a 69 6d 5f 4f 62 6a 20  amePtr, Jim_Obj 
8010: 2a 63 6f 6e 73 74 20 2a 69 6e 64 65 78 76 2c 20  *const *indexv, 
8020: 69 6e 74 20 69 6e 64 65 78 63 2c 0a 20 20 20 20  int indexc,.    
8030: 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6e 65 77      Jim_Obj *new
8040: 4f 62 6a 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50  ObjPtr);.JIM_EXP
8050: 4f 52 54 20 4a 69 6d 5f 4f 62 6a 20 2a 20 4a 69  ORT Jim_Obj * Ji
8060: 6d 5f 43 6f 6e 63 61 74 4f 62 6a 20 28 4a 69 6d  m_ConcatObj (Jim
8070: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
8080: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 20 20 20   int objc,.     
8090: 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 63 6f 6e 73     Jim_Obj *cons
80a0: 74 20 2a 6f 62 6a 76 29 3b 0a 0a 2f 2a 20 64 69  t *objv);../* di
80b0: 63 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 4a 49 4d  ct object */.JIM
80c0: 5f 45 58 50 4f 52 54 20 4a 69 6d 5f 4f 62 6a 20  _EXPORT Jim_Obj 
80d0: 2a 20 4a 69 6d 5f 4e 65 77 44 69 63 74 4f 62 6a  * Jim_NewDictObj
80e0: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
80f0: 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20 4a 69  terp,.        Ji
8100: 6d 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 65 6c  m_Obj *const *el
8110: 65 6d 65 6e 74 73 2c 20 69 6e 74 20 6c 65 6e 29  ements, int len)
8120: 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74  ;.JIM_EXPORT int
8130: 20 4a 69 6d 5f 44 69 63 74 4b 65 79 20 28 4a 69   Jim_DictKey (Ji
8140: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
8150: 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 64 69 63 74 50  , Jim_Obj *dictP
8160: 74 72 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f  tr,.        Jim_
8170: 4f 62 6a 20 2a 6b 65 79 50 74 72 2c 20 4a 69 6d  Obj *keyPtr, Jim
8180: 5f 4f 62 6a 20 2a 2a 6f 62 6a 50 74 72 50 74 72  _Obj **objPtrPtr
8190: 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a 4a 49  , int flags);.JI
81a0: 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d  M_EXPORT int Jim
81b0: 5f 44 69 63 74 4b 65 79 73 56 65 63 74 6f 72 20  _DictKeysVector 
81c0: 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Jim_Interp *int
81d0: 65 72 70 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d  erp,.        Jim
81e0: 5f 4f 62 6a 20 2a 64 69 63 74 50 74 72 2c 20 4a  _Obj *dictPtr, J
81f0: 69 6d 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6b  im_Obj *const *k
8200: 65 79 76 2c 20 69 6e 74 20 6b 65 79 63 2c 0a 20  eyv, int keyc,. 
8210: 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a         Jim_Obj *
8220: 2a 6f 62 6a 50 74 72 50 74 72 2c 20 69 6e 74 20  *objPtrPtr, int 
8230: 66 6c 61 67 73 29 3b 0a 4a 49 4d 5f 45 58 50 4f  flags);.JIM_EXPO
8240: 52 54 20 69 6e 74 20 4a 69 6d 5f 53 65 74 44 69  RT int Jim_SetDi
8250: 63 74 4b 65 79 73 56 65 63 74 6f 72 20 28 4a 69  ctKeysVector (Ji
8260: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
8270: 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62  ,.        Jim_Ob
8280: 6a 20 2a 76 61 72 4e 61 6d 65 50 74 72 2c 20 4a  j *varNamePtr, J
8290: 69 6d 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6b  im_Obj *const *k
82a0: 65 79 76 2c 20 69 6e 74 20 6b 65 79 63 2c 0a 20  eyv, int keyc,. 
82b0: 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a         Jim_Obj *
82c0: 6e 65 77 4f 62 6a 50 74 72 2c 20 69 6e 74 20 66  newObjPtr, int f
82d0: 6c 61 67 73 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52  lags);.JIM_EXPOR
82e0: 54 20 69 6e 74 20 4a 69 6d 5f 44 69 63 74 50 61  T int Jim_DictPa
82f0: 69 72 73 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a  irs(Jim_Interp *
8300: 69 6e 74 65 72 70 2c 0a 20 20 20 20 20 20 20 20  interp,.        
8310: 4a 69 6d 5f 4f 62 6a 20 2a 64 69 63 74 50 74 72  Jim_Obj *dictPtr
8320: 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 2a 2a 6f 62 6a  , Jim_Obj ***obj
8330: 50 74 72 50 74 72 2c 20 69 6e 74 20 2a 6c 65 6e  PtrPtr, int *len
8340: 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e  );.JIM_EXPORT in
8350: 74 20 4a 69 6d 5f 44 69 63 74 41 64 64 45 6c 65  t Jim_DictAddEle
8360: 6d 65 6e 74 28 4a 69 6d 5f 49 6e 74 65 72 70 20  ment(Jim_Interp 
8370: 2a 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a  *interp, Jim_Obj
8380: 20 2a 6f 62 6a 50 74 72 2c 0a 20 20 20 20 20 20   *objPtr,.      
8390: 20 20 4a 69 6d 5f 4f 62 6a 20 2a 6b 65 79 4f 62    Jim_Obj *keyOb
83a0: 6a 50 74 72 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 76  jPtr, Jim_Obj *v
83b0: 61 6c 75 65 4f 62 6a 50 74 72 29 3b 0a 4a 49 4d  alueObjPtr);.JIM
83c0: 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f  _EXPORT int Jim_
83d0: 44 69 63 74 4b 65 79 73 28 4a 69 6d 5f 49 6e 74  DictKeys(Jim_Int
83e0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69 6d  erp *interp, Jim
83f0: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 20 4a 69  _Obj *objPtr, Ji
8400: 6d 5f 4f 62 6a 20 2a 70 61 74 74 65 72 6e 4f 62  m_Obj *patternOb
8410: 6a 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69  j);.JIM_EXPORT i
8420: 6e 74 20 4a 69 6d 5f 44 69 63 74 53 69 7a 65 28  nt Jim_DictSize(
8430: 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Jim_Interp *inte
8440: 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 6f 62 6a  rp, Jim_Obj *obj
8450: 50 74 72 29 3b 0a 0a 2f 2a 20 72 65 74 75 72 6e  Ptr);../* return
8460: 20 63 6f 64 65 20 6f 62 6a 65 63 74 20 2a 2f 0a   code object */.
8470: 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a  JIM_EXPORT int J
8480: 69 6d 5f 47 65 74 52 65 74 75 72 6e 43 6f 64 65  im_GetReturnCode
8490: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
84a0: 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 6f  terp, Jim_Obj *o
84b0: 62 6a 50 74 72 2c 0a 20 20 20 20 20 20 20 20 69  bjPtr,.        i
84c0: 6e 74 20 2a 69 6e 74 50 74 72 29 3b 0a 0a 2f 2a  nt *intPtr);../*
84d0: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 62 6a 65   expression obje
84e0: 63 74 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54  ct */.JIM_EXPORT
84f0: 20 69 6e 74 20 4a 69 6d 5f 45 76 61 6c 45 78 70   int Jim_EvalExp
8500: 72 65 73 73 69 6f 6e 20 28 4a 69 6d 5f 49 6e 74  ression (Jim_Int
8510: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20  erp *interp,.   
8520: 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a 65 78       Jim_Obj *ex
8530: 70 72 4f 62 6a 50 74 72 2c 20 4a 69 6d 5f 4f 62  prObjPtr, Jim_Ob
8540: 6a 20 2a 2a 65 78 70 72 52 65 73 75 6c 74 50 74  j **exprResultPt
8550: 72 50 74 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52  rPtr);.JIM_EXPOR
8560: 54 20 69 6e 74 20 4a 69 6d 5f 47 65 74 42 6f 6f  T int Jim_GetBoo
8570: 6c 46 72 6f 6d 45 78 70 72 20 28 4a 69 6d 5f 49  lFromExpr (Jim_I
8580: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
8590: 20 20 20 20 20 20 20 4a 69 6d 5f 4f 62 6a 20 2a         Jim_Obj *
85a0: 65 78 70 72 4f 62 6a 50 74 72 2c 20 69 6e 74 20  exprObjPtr, int 
85b0: 2a 62 6f 6f 6c 50 74 72 29 3b 0a 0a 2f 2a 20 69  *boolPtr);../* i
85c0: 6e 74 65 67 65 72 20 6f 62 6a 65 63 74 20 2a 2f  nteger object */
85d0: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20  .JIM_EXPORT int 
85e0: 4a 69 6d 5f 47 65 74 57 69 64 65 20 28 4a 69 6d  Jim_GetWide (Jim
85f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
8600: 20 4a 69 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72   Jim_Obj *objPtr
8610: 2c 0a 20 20 20 20 20 20 20 20 6a 69 6d 5f 77 69  ,.        jim_wi
8620: 64 65 20 2a 77 69 64 65 50 74 72 29 3b 0a 4a 49  de *widePtr);.JI
8630: 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d  M_EXPORT int Jim
8640: 5f 47 65 74 4c 6f 6e 67 20 28 4a 69 6d 5f 49 6e  _GetLong (Jim_In
8650: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 4a 69  terp *interp, Ji
8660: 6d 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 0a 20  m_Obj *objPtr,. 
8670: 20 20 20 20 20 20 20 6c 6f 6e 67 20 2a 6c 6f 6e         long *lon
8680: 67 50 74 72 29 3b 0a 23 64 65 66 69 6e 65 20 4a  gPtr);.#define J
8690: 69 6d 5f 4e 65 77 57 69 64 65 4f 62 6a 20 20 4a  im_NewWideObj  J
86a0: 69 6d 5f 4e 65 77 49 6e 74 4f 62 6a 0a 4a 49 4d  im_NewIntObj.JIM
86b0: 5f 45 58 50 4f 52 54 20 4a 69 6d 5f 4f 62 6a 20  _EXPORT Jim_Obj 
86c0: 2a 20 4a 69 6d 5f 4e 65 77 49 6e 74 4f 62 6a 20  * Jim_NewIntObj 
86d0: 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Jim_Interp *int
86e0: 65 72 70 2c 0a 20 20 20 20 20 20 20 20 6a 69 6d  erp,.        jim
86f0: 5f 77 69 64 65 20 77 69 64 65 56 61 6c 75 65 29  _wide wideValue)
8700: 3b 0a 0a 2f 2a 20 64 6f 75 62 6c 65 20 6f 62 6a  ;../* double obj
8710: 65 63 74 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52  ect */.JIM_EXPOR
8720: 54 20 69 6e 74 20 4a 69 6d 5f 47 65 74 44 6f 75  T int Jim_GetDou
8730: 62 6c 65 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a  ble(Jim_Interp *
8740: 69 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20  interp, Jim_Obj 
8750: 2a 6f 62 6a 50 74 72 2c 0a 20 20 20 20 20 20 20  *objPtr,.       
8760: 20 64 6f 75 62 6c 65 20 2a 64 6f 75 62 6c 65 50   double *doubleP
8770: 74 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20  tr);.JIM_EXPORT 
8780: 76 6f 69 64 20 4a 69 6d 5f 53 65 74 44 6f 75 62  void Jim_SetDoub
8790: 6c 65 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  le(Jim_Interp *i
87a0: 6e 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20 2a  nterp, Jim_Obj *
87b0: 6f 62 6a 50 74 72 2c 0a 20 20 20 20 20 20 20 20  objPtr,.        
87c0: 64 6f 75 62 6c 65 20 64 6f 75 62 6c 65 56 61 6c  double doubleVal
87d0: 75 65 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20  ue);.JIM_EXPORT 
87e0: 4a 69 6d 5f 4f 62 6a 20 2a 20 4a 69 6d 5f 4e 65  Jim_Obj * Jim_Ne
87f0: 77 44 6f 75 62 6c 65 4f 62 6a 28 4a 69 6d 5f 49  wDoubleObj(Jim_I
8800: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 64  nterp *interp, d
8810: 6f 75 62 6c 65 20 64 6f 75 62 6c 65 56 61 6c 75  ouble doubleValu
8820: 65 29 3b 0a 0a 2f 2a 20 73 68 61 72 65 64 20 73  e);../* shared s
8830: 74 72 69 6e 67 73 20 2a 2f 0a 4a 49 4d 5f 45 58  trings */.JIM_EX
8840: 50 4f 52 54 20 63 6f 6e 73 74 20 63 68 61 72 20  PORT const char 
8850: 2a 20 4a 69 6d 5f 47 65 74 53 68 61 72 65 64 53  * Jim_GetSharedS
8860: 74 72 69 6e 67 20 28 4a 69 6d 5f 49 6e 74 65 72  tring (Jim_Inter
8870: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 20  p *interp,.     
8880: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73     const char *s
8890: 74 72 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20  tr);.JIM_EXPORT 
88a0: 76 6f 69 64 20 4a 69 6d 5f 52 65 6c 65 61 73 65  void Jim_Release
88b0: 53 68 61 72 65 64 53 74 72 69 6e 67 20 28 4a 69  SharedString (Ji
88c0: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
88d0: 2c 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  ,.        const 
88e0: 63 68 61 72 20 2a 73 74 72 29 3b 0a 0a 2f 2a 20  char *str);../* 
88f0: 63 6f 6d 6d 61 6e 64 73 20 75 74 69 6c 69 74 69  commands utiliti
8900: 65 73 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54  es */.JIM_EXPORT
8910: 20 76 6f 69 64 20 4a 69 6d 5f 57 72 6f 6e 67 4e   void Jim_WrongN
8920: 75 6d 41 72 67 73 20 28 4a 69 6d 5f 49 6e 74 65  umArgs (Jim_Inte
8930: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
8940: 61 72 67 63 2c 0a 20 20 20 20 20 20 20 20 4a 69  argc,.        Ji
8950: 6d 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 61 72  m_Obj *const *ar
8960: 67 76 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  gv, const char *
8970: 6d 73 67 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54  msg);.JIM_EXPORT
8980: 20 69 6e 74 20 4a 69 6d 5f 47 65 74 45 6e 75 6d   int Jim_GetEnum
8990: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
89a0: 74 65 72 70 2c 20 4a 69 6d 5f 4f 62 6a 20 2a 6f  terp, Jim_Obj *o
89b0: 62 6a 50 74 72 2c 0a 20 20 20 20 20 20 20 20 63  bjPtr,.        c
89c0: 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73  onst char * cons
89d0: 74 20 2a 74 61 62 6c 65 50 74 72 2c 20 69 6e 74  t *tablePtr, int
89e0: 20 2a 69 6e 64 65 78 50 74 72 2c 20 63 6f 6e 73   *indexPtr, cons
89f0: 74 20 63 68 61 72 20 2a 6e 61 6d 65 2c 20 69 6e  t char *name, in
8a00: 74 20 66 6c 61 67 73 29 3b 0a 4a 49 4d 5f 45 58  t flags);.JIM_EX
8a10: 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 53 63 72  PORT int Jim_Scr
8a20: 69 70 74 49 73 43 6f 6d 70 6c 65 74 65 20 28 63  iptIsComplete (c
8a30: 6f 6e 73 74 20 63 68 61 72 20 2a 73 2c 20 69 6e  onst char *s, in
8a40: 74 20 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 63  t len,.        c
8a50: 68 61 72 20 2a 73 74 61 74 65 43 68 61 72 50 74  har *stateCharPt
8a60: 72 29 3b 0a 2f 2a 2a 0a 20 2a 20 46 69 6e 64 20  r);./**. * Find 
8a70: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20  a matching name 
8a80: 69 6e 20 74 68 65 20 61 72 72 61 79 20 6f 66 20  in the array of 
8a90: 74 68 65 20 67 69 76 65 6e 20 6c 65 6e 67 74 68  the given length
8aa0: 2e 0a 20 2a 0a 20 2a 20 4e 55 4c 4c 20 65 6e 74  .. *. * NULL ent
8ab0: 72 69 65 73 20 61 72 65 20 69 67 6e 6f 72 65 64  ries are ignored
8ac0: 2e 0a 20 2a 0a 20 2a 20 52 65 74 75 72 6e 73 20  .. *. * Returns 
8ad0: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 69 6e 64  the matching ind
8ae0: 65 78 20 69 66 20 66 6f 75 6e 64 2c 20 6f 72 20  ex if found, or 
8af0: 2d 31 20 69 66 20 6e 6f 74 2e 0a 20 2a 2f 0a 4a  -1 if not.. */.J
8b00: 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69  IM_EXPORT int Ji
8b10: 6d 5f 46 69 6e 64 42 79 4e 61 6d 65 28 63 6f 6e  m_FindByName(con
8b20: 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 2c 20 63  st char *name, c
8b30: 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73  onst char * cons
8b40: 74 20 61 72 72 61 79 5b 5d 2c 20 73 69 7a 65 5f  t array[], size_
8b50: 74 20 6c 65 6e 29 3b 0a 0a 2f 2a 20 70 61 63 6b  t len);../* pack
8b60: 61 67 65 20 75 74 69 6c 69 74 69 65 73 20 2a 2f  age utilities */
8b70: 0a 74 79 70 65 64 65 66 20 76 6f 69 64 20 28 4a  .typedef void (J
8b80: 69 6d 5f 49 6e 74 65 72 70 44 65 6c 65 74 65 50  im_InterpDeleteP
8b90: 72 6f 63 29 28 4a 69 6d 5f 49 6e 74 65 72 70 20  roc)(Jim_Interp 
8ba0: 2a 69 6e 74 65 72 70 2c 20 76 6f 69 64 20 2a 64  *interp, void *d
8bb0: 61 74 61 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54  ata);.JIM_EXPORT
8bc0: 20 76 6f 69 64 20 2a 20 4a 69 6d 5f 47 65 74 41   void * Jim_GetA
8bd0: 73 73 6f 63 44 61 74 61 28 4a 69 6d 5f 49 6e 74  ssocData(Jim_Int
8be0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 6f 6e  erp *interp, con
8bf0: 73 74 20 63 68 61 72 20 2a 6b 65 79 29 3b 0a 4a  st char *key);.J
8c00: 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69  IM_EXPORT int Ji
8c10: 6d 5f 53 65 74 41 73 73 6f 63 44 61 74 61 28 4a  m_SetAssocData(J
8c20: 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  im_Interp *inter
8c30: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6b  p, const char *k
8c40: 65 79 2c 0a 20 20 20 20 20 20 20 20 4a 69 6d 5f  ey,.        Jim_
8c50: 49 6e 74 65 72 70 44 65 6c 65 74 65 50 72 6f 63  InterpDeleteProc
8c60: 20 2a 64 65 6c 50 72 6f 63 2c 20 76 6f 69 64 20   *delProc, void 
8c70: 2a 64 61 74 61 29 3b 0a 4a 49 4d 5f 45 58 50 4f  *data);.JIM_EXPO
8c80: 52 54 20 69 6e 74 20 4a 69 6d 5f 44 65 6c 65 74  RT int Jim_Delet
8c90: 65 41 73 73 6f 63 44 61 74 61 28 4a 69 6d 5f 49  eAssocData(Jim_I
8ca0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63  nterp *interp, c
8cb0: 6f 6e 73 74 20 63 68 61 72 20 2a 6b 65 79 29 3b  onst char *key);
8cc0: 0a 0a 2f 2a 20 50 61 63 6b 61 67 65 73 20 43 20  ../* Packages C 
8cd0: 41 50 49 20 2a 2f 0a 2f 2a 20 6a 69 6d 2d 70 61  API */./* jim-pa
8ce0: 63 6b 61 67 65 2e 63 20 2a 2f 0a 4a 49 4d 5f 45  ckage.c */.JIM_E
8cf0: 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 50 61  XPORT int Jim_Pa
8d00: 63 6b 61 67 65 50 72 6f 76 69 64 65 20 28 4a 69  ckageProvide (Ji
8d10: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
8d20: 2c 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  ,.        const 
8d30: 63 68 61 72 20 2a 6e 61 6d 65 2c 20 63 6f 6e 73  char *name, cons
8d40: 74 20 63 68 61 72 20 2a 76 65 72 2c 20 69 6e 74  t char *ver, int
8d50: 20 66 6c 61 67 73 29 3b 0a 4a 49 4d 5f 45 58 50   flags);.JIM_EXP
8d60: 4f 52 54 20 69 6e 74 20 4a 69 6d 5f 50 61 63 6b  ORT int Jim_Pack
8d70: 61 67 65 52 65 71 75 69 72 65 20 28 4a 69 6d 5f  ageRequire (Jim_
8d80: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
8d90: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
8da0: 61 72 20 2a 6e 61 6d 65 2c 20 69 6e 74 20 66 6c  ar *name, int fl
8db0: 61 67 73 29 3b 0a 0a 2f 2a 20 65 72 72 6f 72 20  ags);../* error 
8dc0: 6d 65 73 73 61 67 65 73 20 2a 2f 0a 4a 49 4d 5f  messages */.JIM_
8dd0: 45 58 50 4f 52 54 20 76 6f 69 64 20 4a 69 6d 5f  EXPORT void Jim_
8de0: 4d 61 6b 65 45 72 72 6f 72 4d 65 73 73 61 67 65  MakeErrorMessage
8df0: 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e   (Jim_Interp *in
8e00: 74 65 72 70 29 3b 0a 0a 2f 2a 20 69 6e 74 65 72  terp);../* inter
8e10: 61 63 74 69 76 65 20 6d 6f 64 65 20 2a 2f 0a 4a  active mode */.J
8e20: 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69  IM_EXPORT int Ji
8e30: 6d 5f 49 6e 74 65 72 61 63 74 69 76 65 50 72 6f  m_InteractivePro
8e40: 6d 70 74 20 28 4a 69 6d 5f 49 6e 74 65 72 70 20  mpt (Jim_Interp 
8e50: 2a 69 6e 74 65 72 70 29 3b 0a 0a 2f 2a 20 4d 69  *interp);../* Mi
8e60: 73 63 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54  sc */.JIM_EXPORT
8e70: 20 69 6e 74 20 4a 69 6d 5f 49 6e 69 74 53 74 61   int Jim_InitSta
8e80: 74 69 63 45 78 74 65 6e 73 69 6f 6e 73 28 4a 69  ticExtensions(Ji
8e90: 6d 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  m_Interp *interp
8ea0: 29 3b 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e  );.JIM_EXPORT in
8eb0: 74 20 4a 69 6d 5f 53 74 72 69 6e 67 54 6f 57 69  t Jim_StringToWi
8ec0: 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  de(const char *s
8ed0: 74 72 2c 20 6a 69 6d 5f 77 69 64 65 20 2a 77 69  tr, jim_wide *wi
8ee0: 64 65 50 74 72 2c 20 69 6e 74 20 62 61 73 65 29  dePtr, int base)
8ef0: 3b 0a 0a 2f 2a 20 6a 69 6d 2d 6c 6f 61 64 2e 63  ;../* jim-load.c
8f00: 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69   */.JIM_EXPORT i
8f10: 6e 74 20 4a 69 6d 5f 4c 6f 61 64 4c 69 62 72 61  nt Jim_LoadLibra
8f20: 72 79 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69  ry(Jim_Interp *i
8f30: 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20 63 68 61  nterp, const cha
8f40: 72 20 2a 70 61 74 68 4e 61 6d 65 29 3b 0a 4a 49  r *pathName);.JI
8f50: 4d 5f 45 58 50 4f 52 54 20 76 6f 69 64 20 4a 69  M_EXPORT void Ji
8f60: 6d 5f 46 72 65 65 4c 6f 61 64 48 61 6e 64 6c 65  m_FreeLoadHandle
8f70: 73 28 4a 69 6d 5f 49 6e 74 65 72 70 20 2a 69 6e  s(Jim_Interp *in
8f80: 74 65 72 70 29 3b 0a 0a 2f 2a 20 6a 69 6d 2d 61  terp);../* jim-a
8f90: 69 6f 2e 63 20 2a 2f 0a 4a 49 4d 5f 45 58 50 4f  io.c */.JIM_EXPO
8fa0: 52 54 20 46 49 4c 45 20 2a 4a 69 6d 5f 41 69 6f  RT FILE *Jim_Aio
8fb0: 46 69 6c 65 68 61 6e 64 6c 65 28 4a 69 6d 5f 49  Filehandle(Jim_I
8fc0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 4a  nterp *interp, J
8fd0: 69 6d 5f 4f 62 6a 20 2a 63 6f 6d 6d 61 6e 64 29  im_Obj *command)
8fe0: 3b 0a 0a 0a 2f 2a 20 74 79 70 65 20 69 6e 73 70  ;.../* type insp
8ff0: 65 63 74 69 6f 6e 20 2d 20 61 76 6f 69 64 20 77  ection - avoid w
9000: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 20 2a 2f  here possible */
9010: 0a 4a 49 4d 5f 45 58 50 4f 52 54 20 69 6e 74 20  .JIM_EXPORT int 
9020: 4a 69 6d 5f 49 73 44 69 63 74 28 4a 69 6d 5f 4f  Jim_IsDict(Jim_O
9030: 62 6a 20 2a 6f 62 6a 50 74 72 29 3b 0a 4a 49 4d  bj *objPtr);.JIM
9040: 5f 45 58 50 4f 52 54 20 69 6e 74 20 4a 69 6d 5f  _EXPORT int Jim_
9050: 49 73 4c 69 73 74 28 4a 69 6d 5f 4f 62 6a 20 2a  IsList(Jim_Obj *
9060: 6f 62 6a 50 74 72 29 3b 0a 0a 23 69 66 64 65 66  objPtr);..#ifdef
9070: 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 7d 0a 23   __cplusplus.}.#
9080: 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
9090: 20 5f 5f 4a 49 4d 5f 5f 48 20 2a 2f 0a 0a 2f 2a   __JIM__H */../*
90a0: 0a 20 2a 20 4c 6f 63 61 6c 20 56 61 72 69 61 62  . * Local Variab
90b0: 6c 65 73 3a 20 2a 2a 2a 0a 20 2a 20 63 2d 62 61  les: ***. * c-ba
90c0: 73 69 63 2d 6f 66 66 73 65 74 3a 20 34 20 2a 2a  sic-offset: 4 **
90d0: 2a 0a 20 2a 20 74 61 62 2d 77 69 64 74 68 3a 20  *. * tab-width: 
90e0: 34 20 2a 2a 2a 0a 20 2a 20 45 6e 64 3a 20 2a 2a  4 ***. * End: **
90f0: 2a 0a 20 2a 2f 0a                                *. */.