Artifact 5640a8acb3d4c31e4048e6605f041a5688448833:
- File
jim.h
-
2011-11-01 14:34:53
- part of checkin
[605d3a8958]
on branch trunk
- Bump version to 0.73
Signed-off-by: Steve Bennett <steveb@workware.net.au> (user: steveb@workware.net.au
-
2011-11-01 14:34:53
- part of checkin
[605d3a8958]
on branch trunk
- Bump version to 0.73
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 *. */.