Hex Artifact Content

Artifact aa505b066cd263b7f6a8a93889b83977c74521d6:


0000: 2f 2a 0a 20 2a 20 20 54 63 6c 54 43 43 20 2d 20  /*. *  TclTCC - 
0010: 54 63 6c 20 62 69 6e 64 69 6e 67 20 74 6f 20 54  Tcl binding to T
0020: 69 6e 79 20 43 20 43 6f 6d 70 69 6c 65 72 0a 20  iny C Compiler. 
0030: 2a 20 0a 20 2a 20 20 43 6f 70 79 72 69 67 68 74  * . *  Copyright
0040: 20 28 63 29 20 32 30 30 37 20 4d 61 72 6b 20 4a   (c) 2007 Mark J
0050: 61 6e 73 73 65 6e 0a 20 2a 20 20 43 6f 70 79 72  anssen. *  Copyr
0060: 69 67 68 74 20 28 63 29 20 32 30 31 34 20 52 6f  ight (c) 2014 Ro
0070: 79 20 4b 65 65 6e 65 0a 20 2a 0a 20 2a 20 54 68  y Keene. *. * Th
0080: 69 73 20 6c 69 62 72 61 72 79 20 69 73 20 66 72  is library is fr
0090: 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75  ee software; you
00a0: 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74   can redistribut
00b0: 65 20 69 74 20 61 6e 64 2f 6f 72 0a 20 2a 20 6d  e it and/or. * m
00c0: 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 74  odify it under t
00d0: 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  he terms of the 
00e0: 47 4e 55 20 4c 65 73 73 65 72 20 47 65 6e 65 72  GNU Lesser Gener
00f0: 61 6c 20 50 75 62 6c 69 63 0a 20 2a 20 4c 69 63  al Public. * Lic
0100: 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65  ense as publishe
0110: 64 20 62 79 20 74 68 65 20 46 72 65 65 20 53 6f  d by the Free So
0120: 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f  ftware Foundatio
0130: 6e 3b 20 65 69 74 68 65 72 0a 20 2a 20 76 65 72  n; either. * ver
0140: 73 69 6f 6e 20 32 20 6f 66 20 74 68 65 20 4c 69  sion 2 of the Li
0150: 63 65 6e 73 65 2c 20 6f 72 20 28 61 74 20 79 6f  cense, or (at yo
0160: 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c  ur option) any l
0170: 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 20 2a  ater version.. *
0180: 0a 20 2a 20 54 68 69 73 20 6c 69 62 72 61 72 79  . * This library
0190: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20   is distributed 
01a0: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74  in the hope that
01b0: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66   it will be usef
01c0: 75 6c 2c 0a 20 2a 20 62 75 74 20 57 49 54 48 4f  ul,. * but WITHO
01d0: 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  UT ANY WARRANTY;
01e0: 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68   without even th
01f0: 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  e implied warran
0200: 74 79 20 6f 66 0a 20 2a 20 4d 45 52 43 48 41 4e  ty of. * MERCHAN
0210: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
0220: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
0230: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
0240: 65 65 20 74 68 65 20 47 4e 55 0a 20 2a 20 4c 65  ee the GNU. * Le
0250: 73 73 65 72 20 47 65 6e 65 72 61 6c 20 50 75 62  sser General Pub
0260: 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20  lic License for 
0270: 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 20 2a  more details.. *
0280: 0a 20 2a 20 59 6f 75 20 73 68 6f 75 6c 64 20 68  . * You should h
0290: 61 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63  ave received a c
02a0: 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 4c  opy of the GNU L
02b0: 65 73 73 65 72 20 47 65 6e 65 72 61 6c 20 50 75  esser General Pu
02c0: 62 6c 69 63 0a 20 2a 20 4c 69 63 65 6e 73 65 20  blic. * License 
02d0: 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73 20  along with this 
02e0: 6c 69 62 72 61 72 79 3b 20 69 66 20 6e 6f 74 2c  library; if not,
02f0: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 46 72   write to the Fr
0300: 65 65 20 53 6f 66 74 77 61 72 65 0a 20 2a 20 46  ee Software. * F
0310: 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c  oundation, Inc.,
0320: 20 35 39 20 54 65 6d 70 6c 65 20 50 6c 61 63 65   59 Temple Place
0330: 2c 20 53 75 69 74 65 20 33 33 30 2c 20 42 6f 73  , Suite 330, Bos
0340: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31  ton, MA  02111-1
0350: 33 30 37 20 20 55 53 41 0a 20 2a 2f 0a 0a 23 69  307  USA. */..#i
0360: 6e 63 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23  nclude <tcl.h>.#
0370: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
0380: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 74 63 63  h>.#include "tcc
0390: 2e 68 22 0a 0a 73 74 72 75 63 74 20 54 63 6c 54  .h"..struct TclT
03a0: 43 43 53 74 61 74 65 20 7b 0a 09 54 43 43 53 74  CCState {..TCCSt
03b0: 61 74 65 20 2a 73 3b 0a 09 69 6e 74 20 72 65 6c  ate *s;..int rel
03c0: 6f 63 61 74 65 64 3b 0a 7d 3b 0a 0a 73 74 61 74  ocated;.};..stat
03d0: 69 63 20 76 6f 69 64 20 54 63 63 34 74 63 6c 45  ic void Tcc4tclE
03e0: 72 72 6f 72 46 75 6e 63 28 54 63 6c 5f 49 6e 74  rrorFunc(Tcl_Int
03f0: 65 72 70 20 2a 20 69 6e 74 65 72 70 2c 20 63 68  erp * interp, ch
0400: 61 72 20 2a 20 6d 73 67 29 20 7b 0a 09 54 63 6c  ar * msg) {..Tcl
0410: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
0420: 74 65 72 70 2c 20 6d 73 67 2c 20 22 5c 6e 22 2c  terp, msg, "\n",
0430: 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a 73 74 61 74 69   NULL);.}..stati
0440: 63 20 76 6f 69 64 20 54 63 63 34 74 63 6c 43 43  c void Tcc4tclCC
0450: 6f 6d 6d 61 6e 64 44 65 6c 65 74 65 50 72 6f 63  ommandDeleteProc
0460: 20 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 61   (ClientData cda
0470: 74 61 29 20 7b 0a 09 73 74 72 75 63 74 20 54 63  ta) {..struct Tc
0480: 6c 54 43 43 53 74 61 74 65 20 2a 74 73 3b 0a 09  lTCCState *ts;..
0490: 54 43 43 53 74 61 74 65 20 2a 73 20 3b 0a 0a 09  TCCState *s ;...
04a0: 74 73 20 3d 20 28 73 74 72 75 63 74 20 54 63 6c  ts = (struct Tcl
04b0: 54 43 43 53 74 61 74 65 20 2a 29 20 63 64 61 74  TCCState *) cdat
04c0: 61 3b 0a 09 73 20 3d 20 74 73 2d 3e 73 3b 0a 0a  a;..s = ts->s;..
04d0: 09 2f 2a 20 57 65 20 63 61 6e 20 64 65 6c 65 74  ./* We can delet
04e0: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69  e the compiler i
04f0: 66 20 74 68 65 20 6f 75 74 70 75 74 20 77 61 73  f the output was
0500: 20 6e 6f 74 20 74 6f 20 6d 65 6d 6f 72 79 20 2a   not to memory *
0510: 2f 0a 09 69 66 20 28 73 2d 3e 6f 75 74 70 75 74  /..if (s->output
0520: 5f 74 79 70 65 20 21 3d 20 54 43 43 5f 4f 55 54  _type != TCC_OUT
0530: 50 55 54 5f 4d 45 4d 4f 52 59 29 20 7b 0a 09 09  PUT_MEMORY) {...
0540: 74 63 63 5f 64 65 6c 65 74 65 28 73 29 3b 0a 09  tcc_delete(s);..
0550: 09 74 73 2d 3e 73 20 3d 20 4e 55 4c 4c 3b 0a 09  .ts->s = NULL;..
0560: 7d 0a 0a 09 63 6b 66 72 65 65 28 28 76 6f 69 64  }...ckfree((void
0570: 20 2a 29 20 74 73 29 3b 0a 7d 0a 0a 73 74 61 74   *) ts);.}..stat
0580: 69 63 20 69 6e 74 20 54 63 63 34 74 63 6c 48 61  ic int Tcc4tclHa
0590: 6e 64 6c 65 43 6d 64 20 28 20 43 6c 69 65 6e 74  ndleCmd ( Client
05a0: 44 61 74 61 20 63 64 61 74 61 2c 20 54 63 6c 5f  Data cdata, Tcl_
05b0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
05c0: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
05d0: 6a 20 2a 20 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  j * CONST objv[]
05e0: 29 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ){..unsigned lon
05f0: 67 20 76 61 6c 3b 0a 09 76 6f 69 64 20 2a 76 61  g val;..void *va
0600: 6c 5f 70 3b 0a 09 69 6e 74 20 69 6e 64 65 78 3b  l_p;..int index;
0610: 0a 09 69 6e 74 20 72 65 73 3b 0a 09 73 74 72 75  ..int res;..stru
0620: 63 74 20 54 63 6c 54 43 43 53 74 61 74 65 20 2a  ct TclTCCState *
0630: 74 73 3b 0a 09 54 43 43 53 74 61 74 65 20 2a 73  ts;..TCCState *s
0640: 3b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 73 79 6d 5f  ;..Tcl_Obj *sym_
0650: 61 64 64 72 3b 0a 09 73 74 61 74 69 63 20 43 4f  addr;..static CO
0660: 4e 53 54 20 63 68 61 72 20 2a 6f 70 74 69 6f 6e  NST char *option
0670: 73 5b 5d 20 3d 20 7b 0a 09 09 22 61 64 64 5f 69  s[] = {..."add_i
0680: 6e 63 6c 75 64 65 5f 70 61 74 68 22 2c 20 22 61  nclude_path", "a
0690: 64 64 5f 66 69 6c 65 22 2c 20 20 22 61 64 64 5f  dd_file",  "add_
06a0: 6c 69 62 72 61 72 79 22 2c 20 0a 09 09 22 61 64  library", ..."ad
06b0: 64 5f 6c 69 62 72 61 72 79 5f 70 61 74 68 22 2c  d_library_path",
06c0: 20 22 61 64 64 5f 73 79 6d 62 6f 6c 22 2c 20 22   "add_symbol", "
06d0: 63 6f 6d 6d 61 6e 64 22 2c 20 22 63 6f 6d 70 69  command", "compi
06e0: 6c 65 22 2c 0a 09 09 22 64 65 66 69 6e 65 22 2c  le",..."define",
06f0: 20 22 67 65 74 5f 73 79 6d 62 6f 6c 22 2c 20 22   "get_symbol", "
0700: 6f 75 74 70 75 74 5f 66 69 6c 65 22 2c 20 22 75  output_file", "u
0710: 6e 64 65 66 69 6e 65 22 2c 20 20 20 20 28 63 68  ndefine",    (ch
0720: 61 72 20 2a 29 20 4e 55 4c 4c 0a 09 7d 3b 0a 09  ar *) NULL..};..
0730: 65 6e 75 6d 20 6f 70 74 69 6f 6e 73 20 7b 0a 09  enum options {..
0740: 09 54 43 4c 54 43 43 5f 41 44 44 5f 49 4e 43 4c  .TCLTCC_ADD_INCL
0750: 55 44 45 2c 20 54 43 4c 54 43 43 5f 41 44 44 5f  UDE, TCLTCC_ADD_
0760: 46 49 4c 45 2c 20 54 43 4c 54 43 43 5f 41 44 44  FILE, TCLTCC_ADD
0770: 5f 4c 49 42 52 41 52 59 2c 20 0a 09 09 54 43 4c  _LIBRARY, ...TCL
0780: 54 43 43 5f 41 44 44 5f 4c 49 42 52 41 52 59 5f  TCC_ADD_LIBRARY_
0790: 50 41 54 48 2c 20 54 43 4c 54 43 43 5f 41 44 44  PATH, TCLTCC_ADD
07a0: 5f 53 59 4d 42 4f 4c 2c 20 54 43 4c 54 43 43 5f  _SYMBOL, TCLTCC_
07b0: 43 4f 4d 4d 41 4e 44 2c 20 54 43 4c 54 43 43 5f  COMMAND, TCLTCC_
07c0: 43 4f 4d 50 49 4c 45 2c 0a 09 09 54 43 4c 54 43  COMPILE,...TCLTC
07d0: 43 5f 44 45 46 49 4e 45 2c 20 54 43 4c 54 43 43  C_DEFINE, TCLTCC
07e0: 5f 47 45 54 5f 53 59 4d 42 4f 4c 2c 20 54 43 4c  _GET_SYMBOL, TCL
07f0: 54 43 43 5f 4f 55 54 50 55 54 5f 46 49 4c 45 2c  TCC_OUTPUT_FILE,
0800: 20 54 43 4c 54 43 43 5f 55 4e 44 45 46 49 4e 45   TCLTCC_UNDEFINE
0810: 0a 09 7d 3b 0a 0a 09 74 73 20 3d 20 28 73 74 72  ..};...ts = (str
0820: 75 63 74 20 54 63 6c 54 43 43 53 74 61 74 65 20  uct TclTCCState 
0830: 2a 29 20 63 64 61 74 61 3b 0a 09 73 20 3d 20 74  *) cdata;..s = t
0840: 73 2d 3e 73 3b 0a 0a 20 20 20 20 69 66 20 28 6f  s->s;..    if (o
0850: 62 6a 63 20 3c 20 32 29 20 7b 0a 20 20 20 20 20  bjc < 2) {.     
0860: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
0870: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
0880: 62 6a 76 2c 20 22 73 75 62 63 6f 6d 6d 61 6e 64  bjv, "subcommand
0890: 20 61 72 67 20 3f 61 72 67 20 2e 2e 2e 3f 22 29   arg ?arg ...?")
08a0: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
08b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
08c0: 7d 0a 0a 20 20 20 20 69 66 20 28 54 63 6c 5f 47  }..    if (Tcl_G
08d0: 65 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a 28 69  etIndexFromObj(i
08e0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
08f0: 6f 70 74 69 6f 6e 73 2c 20 22 6f 70 74 69 6f 6e  options, "option
0900: 22 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  ", 0,.          
0910: 20 20 20 20 20 20 26 69 6e 64 65 78 29 20 21 3d        &index) !=
0920: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 20 20 20 20   TCL_OK) {.     
0930: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
0940: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ROR;.    }.    s
0950: 77 69 74 63 68 20 28 69 6e 64 65 78 29 20 7b 0a  witch (index) {.
0960: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c          case TCL
0970: 54 43 43 5f 41 44 44 5f 49 4e 43 4c 55 44 45 3a  TCC_ADD_INCLUDE:
0980: 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20     .            
0990: 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b  if (objc != 3) {
09a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
09b0: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
09c0: 73 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a  s(interp, 2, obj
09d0: 76 2c 20 22 70 61 74 68 22 29 3b 0a 20 20 20 20  v, "path");.    
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
09f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
0a00: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
0a10: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0a20: 20 20 20 74 63 63 5f 61 64 64 5f 69 6e 63 6c 75     tcc_add_inclu
0a30: 64 65 5f 70 61 74 68 28 73 2c 20 54 63 6c 5f 47  de_path(s, Tcl_G
0a40: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
0a50: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
0a60: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f      return TCL_O
0a70: 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  K;.            }
0a80: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43  .        case TC
0a90: 4c 54 43 43 5f 41 44 44 5f 46 49 4c 45 3a 20 20  LTCC_ADD_FILE:  
0aa0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66   .            if
0ab0: 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a 20   (objc != 3) {. 
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
0ad0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
0ae0: 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c  interp, 2, objv,
0af0: 20 22 66 69 6c 65 6e 61 6d 65 22 29 3b 0a 20 20   "filename");.  
0b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
0b10: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
0b30: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
0b40: 20 20 20 20 20 69 66 28 74 63 63 5f 61 64 64 5f       if(tcc_add_
0b50: 66 69 6c 65 28 73 2c 20 54 63 6c 5f 47 65 74 53  file(s, Tcl_GetS
0b60: 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 21  tring(objv[2]))!
0b70: 3d 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  =0) {.          
0b80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0b90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
0ba0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
0bb0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
0bc0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
0bd0: 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20  TCL_OK;.        
0be0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0bf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0c00: 63 61 73 65 20 54 43 4c 54 43 43 5f 41 44 44 5f  case TCLTCC_ADD_
0c10: 4c 49 42 52 41 52 59 3a 0a 20 20 20 20 20 20 20  LIBRARY:.       
0c20: 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d       if (objc !=
0c30: 20 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20   3) {.          
0c40: 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e        Tcl_WrongN
0c50: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32  umArgs(interp, 2
0c60: 2c 20 6f 62 6a 76 2c 20 22 6c 69 62 22 29 3b 0a  , objv, "lib");.
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
0c90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ;.            } 
0ca0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
0cb0: 20 20 20 20 20 20 20 74 63 63 5f 61 64 64 5f 6c         tcc_add_l
0cc0: 69 62 72 61 72 79 28 73 2c 20 54 63 6c 5f 47 65  ibrary(s, Tcl_Ge
0cd0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
0ce0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
0cf0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
0d00: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
0d10: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 43 4c          case TCL
0d20: 54 43 43 5f 41 44 44 5f 4c 49 42 52 41 52 59 5f  TCC_ADD_LIBRARY_
0d30: 50 41 54 48 3a 0a 20 20 20 20 20 20 20 20 20 20  PATH:.          
0d40: 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29    if (objc != 3)
0d50: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0d60: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
0d70: 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f  rgs(interp, 2, o
0d80: 62 6a 76 2c 20 22 70 61 74 68 22 29 3b 0a 20 20  bjv, "path");.  
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
0da0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
0dc0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
0dd0: 20 20 20 20 20 74 63 63 5f 61 64 64 5f 6c 69 62       tcc_add_lib
0de0: 72 61 72 79 5f 70 61 74 68 28 73 2c 20 54 63 6c  rary_path(s, Tcl
0df0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
0e00: 32 5d 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  2]));.          
0e10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
0e20: 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  _OK;.           
0e30: 20 7d 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20   }.#if 0.       
0e40: 20 63 61 73 65 20 54 43 4c 54 43 43 5f 41 44 44   case TCLTCC_ADD
0e50: 5f 53 59 4d 42 4f 4c 3a 0a 20 20 20 20 20 20 20  _SYMBOL:.       
0e60: 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d       if (objc !=
0e70: 20 34 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20   4) {.          
0e80: 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e        Tcl_WrongN
0e90: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32  umArgs(interp, 2
0ea0: 2c 20 6f 62 6a 76 2c 20 22 73 79 6d 62 6f 6c 20  , objv, "symbol 
0eb0: 76 61 6c 75 65 22 29 3b 0a 20 20 20 20 20 20 20  value");.       
0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
0ed0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  TCL_ERROR;.     
0ee0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0ef0: 20 20 20 20 20 54 63 6c 5f 47 65 74 4c 6f 6e 67       Tcl_GetLong
0f00: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 6f  FromObj(interp,o
0f10: 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 29 3b 0a 0a  bjv[3], &val);..
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 74 63 63 5f              tcc_
0f30: 61 64 64 5f 73 79 6d 62 6f 6c 28 73 2c 54 63 6c  add_symbol(s,Tcl
0f40: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
0f50: 32 5d 29 2c 76 61 6c 29 3b 20 0a 20 20 20 20 20  2]),val); .     
0f60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
0f70: 4c 5f 4f 4b 3b 20 0a 23 65 6e 64 69 66 0a 20 20  L_OK; .#endif.  
0f80: 20 20 20 20 20 20 63 61 73 65 20 54 43 4c 54 43        case TCLTC
0f90: 43 5f 43 4f 4d 4d 41 4e 44 3a 0a 20 20 20 20 20  C_COMMAND:.     
0fa0: 20 20 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20         if (objc 
0fb0: 21 3d 20 34 29 20 7b 0a 20 20 20 20 20 20 20 20  != 4) {.        
0fc0: 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e          Tcl_Wron
0fd0: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
0fe0: 20 32 2c 20 6f 62 6a 76 2c 20 22 74 63 6c 6e 61   2, objv, "tclna
0ff0: 6d 65 20 63 6e 61 6d 65 22 29 3b 0a 20 20 20 20  me cname");.    
1000: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1010: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1020: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1030: 20 20 20 20 20 20 20 20 69 66 20 28 21 74 73 2d          if (!ts-
1040: 3e 72 65 6c 6f 63 61 74 65 64 29 20 7b 20 20 20  >relocated) {   
1050: 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    .             
1060: 20 20 20 69 66 28 74 63 63 5f 72 65 6c 6f 63 61     if(tcc_reloca
1070: 74 65 28 73 2c 20 54 43 43 5f 52 45 4c 4f 43 41  te(s, TCC_RELOCA
1080: 54 45 5f 41 55 54 4f 29 21 3d 30 29 20 7b 0a 20  TE_AUTO)!=0) {. 
1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 72 65 6c  ult(interp, "rel
10c0: 6f 63 61 74 69 6e 67 20 66 61 69 6c 65 64 22 2c  ocating failed",
10d0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20   NULL);.        
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                } 
1110: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
1120: 20 20 20 20 20 20 20 20 20 20 20 74 73 2d 3e 72             ts->r
1130: 65 6c 6f 63 61 74 65 64 3d 31 3b 0a 20 20 20 20  elocated=1;.    
1140: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1150: 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
1160: 20 20 20 20 20 20 20 20 20 76 61 6c 5f 70 20 3d           val_p =
1170: 20 74 63 63 5f 67 65 74 5f 73 79 6d 62 6f 6c 28   tcc_get_symbol(
1180: 73 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  s, Tcl_GetString
1190: 28 6f 62 6a 76 5b 33 5d 29 29 3b 0a 20 20 20 20  (objv[3]));.    
11a0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 5f          if (val_
11b0: 70 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 20  p == NULL) {... 
11c0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
11d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 73 79 6d  ult(interp, "sym
11e0: 62 6f 6c 20 27 22 2c 20 54 63 6c 5f 47 65 74 53  bol '", Tcl_GetS
11f0: 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 2c 22  tring(objv[3]),"
1200: 27 20 6e 6f 74 20 66 6f 75 6e 64 22 2c 20 4e 55  ' not found", NU
1210: 4c 4c 29 3b 0a 09 09 20 20 20 20 72 65 74 75 72  LL);...    retur
1220: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20  n TCL_ERROR;..  
1230: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1240: 20 2f 2a 70 72 69 6e 74 66 28 22 73 79 6d 62 6f   /*printf("symbo
1250: 6c 3a 20 25 78 5c 6e 22 2c 76 61 6c 29 3b 20 2a  l: %x\n",val); *
1260: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 63  /.            Tc
1270: 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61  l_CreateObjComma
1280: 6e 64 28 69 6e 74 65 72 70 2c 54 63 6c 5f 47 65  nd(interp,Tcl_Ge
1290: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
12a0: 2c 76 61 6c 5f 70 2c 4e 55 4c 4c 2c 4e 55 4c 4c  ,val_p,NULL,NULL
12b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
12c0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20  eturn TCL_OK;.  
12d0: 20 20 20 20 20 20 63 61 73 65 20 54 43 4c 54 43        case TCLTC
12e0: 43 5f 43 4f 4d 50 49 4c 45 3a 0a 20 20 20 20 20  C_COMPILE:.     
12f0: 20 20 20 20 20 20 20 69 66 28 74 73 2d 3e 72 65         if(ts->re
1300: 6c 6f 63 61 74 65 64 20 3d 3d 20 31 29 20 7b 0a  located == 1) {.
1310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1320: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1330: 28 69 6e 74 65 72 70 2c 20 22 63 6f 64 65 20 61  (interp, "code a
1340: 6c 72 65 61 64 79 20 72 65 6c 6f 63 61 74 65 64  lready relocated
1350: 2c 20 63 61 6e 6e 6f 74 20 63 6f 6d 70 69 6c 65  , cannot compile
1360: 20 6d 6f 72 65 22 2c 4e 55 4c 4c 29 3b 0a 20 20   more",NULL);.  
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1380: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1390: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
13a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 62            if (ob
13b0: 6a 63 20 21 3d 20 33 29 20 7b 0a 20 20 20 20 20  jc != 3) {.     
13c0: 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57             Tcl_W
13d0: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
13e0: 72 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 63 63  rp, 2, objv, "cc
13f0: 6f 64 65 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ode");.         
1400: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
1410: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20  L_ERROR;.       
1420: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 0a 20       } else {.. 
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1440: 6e 74 20 69 3b 0a 20 20 20 20 20 20 20 20 20 20  nt i;.          
1450: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
1460: 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20  ing(objv[2]);.  
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 20                i 
1480: 3d 20 74 63 63 5f 63 6f 6d 70 69 6c 65 5f 73 74  = tcc_compile_st
1490: 72 69 6e 67 28 73 2c 54 63 6c 5f 47 65 74 53 74  ring(s,Tcl_GetSt
14a0: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 3b 0a  ring(objv[2]));.
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c0: 69 66 20 28 69 21 3d 30 29 20 7b 0a 20 20 20 20  if (i!=0) {.    
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
14f0: 28 69 6e 74 65 72 70 2c 22 63 6f 6d 70 69 6c 61  (interp,"compila
1500: 74 69 6f 6e 20 66 61 69 6c 65 64 22 2c 4e 55 4c  tion failed",NUL
1510: 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  L);.            
1520: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
1530: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  CL_ERROR;.      
1540: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1550: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1560: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
1570: 4c 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20  L_OK;.          
1580: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1590: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61      }.        ca
15a0: 73 65 20 54 43 4c 54 43 43 5f 44 45 46 49 4e 45  se TCLTCC_DEFINE
15b0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  :.            if
15c0: 20 28 6f 62 6a 63 20 21 3d 20 34 29 20 7b 0a 20   (objc != 4) {. 
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15e0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
15f0: 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76 2c  interp, 2, objv,
1600: 20 22 73 79 6d 62 6f 6c 20 76 61 6c 75 65 22 29   "symbol value")
1610: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1620: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1630: 4f 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  OR;.            
1640: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 63  }.            tc
1650: 63 5f 64 65 66 69 6e 65 5f 73 79 6d 62 6f 6c 28  c_define_symbol(
1660: 73 2c 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  s,Tcl_GetString(
1670: 6f 62 6a 76 5b 32 5d 29 2c 54 63 6c 5f 47 65 74  objv[2]),Tcl_Get
1680: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 29  String(objv[3]))
1690: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ;.            re
16a0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20  turn TCL_OK;.   
16b0: 20 20 20 20 20 63 61 73 65 20 54 43 4c 54 43 43       case TCLTCC
16c0: 5f 47 45 54 5f 53 59 4d 42 4f 4c 3a 0a 20 20 20  _GET_SYMBOL:.   
16d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 62 6a           if (obj
16e0: 63 20 21 3d 20 33 29 20 7b 0a 20 20 20 20 20 20  c != 3) {.      
16f0: 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 57 72            Tcl_Wr
1700: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
1710: 70 2c 20 32 2c 20 6f 62 6a 76 2c 20 22 73 79 6d  p, 2, objv, "sym
1720: 62 6f 6c 22 29 3b 0a 20 20 20 20 20 20 20 20 20  bol");.         
1730: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
1740: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20  L_ERROR;.       
1750: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1760: 20 20 20 69 66 20 28 21 74 73 2d 3e 72 65 6c 6f     if (!ts->relo
1770: 63 61 74 65 64 29 20 7b 20 20 20 20 20 0a 20 20  cated) {     .  
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1790: 28 74 63 63 5f 72 65 6c 6f 63 61 74 65 28 73 2c  (tcc_relocate(s,
17a0: 20 54 43 43 5f 52 45 4c 4f 43 41 54 45 5f 41 55   TCC_RELOCATE_AU
17b0: 54 4f 29 21 3d 30 29 20 7b 0a 20 20 20 20 20 20  TO)!=0) {.      
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
17d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
17e0: 6e 74 65 72 70 2c 20 22 72 65 6c 6f 63 61 74 69  nterp, "relocati
17f0: 6e 67 20 66 61 69 6c 65 64 22 2c 20 4e 55 4c 4c  ng failed", NULL
1800: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
1810: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
1820: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20  L_ERROR;.       
1830: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
1840: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1850: 20 20 20 20 20 20 74 73 2d 3e 72 65 6c 6f 63 61        ts->reloca
1860: 74 65 64 3d 31 3b 0a 20 20 20 20 20 20 20 20 20  ted=1;.         
1870: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1880: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1890: 20 20 20 76 61 6c 5f 70 20 3d 20 74 63 63 5f 67     val_p = tcc_g
18a0: 65 74 5f 73 79 6d 62 6f 6c 28 73 2c 54 63 6c 5f  et_symbol(s,Tcl_
18b0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
18c0: 5d 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ]));.           
18d0: 20 69 66 28 76 61 6c 5f 70 20 3d 3d 20 4e 55 4c   if(val_p == NUL
18e0: 4c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  L) {.           
18f0: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
1900: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 73  esult(interp, "s
1910: 79 6d 62 6f 6c 20 27 22 2c 20 54 63 6c 5f 47 65  ymbol '", Tcl_Ge
1920: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
1930: 2c 22 27 20 6e 6f 74 20 66 6f 75 6e 64 22 2c 20  ,"' not found", 
1940: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20  NULL);.         
1950: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43         return TC
1960: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20  L_ERROR;.       
1970: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1980: 20 20 20 73 79 6d 5f 61 64 64 72 20 3d 20 54 63     sym_addr = Tc
1990: 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28  l_NewWideIntObj(
19a0: 28 54 63 6c 5f 57 69 64 65 49 6e 74 29 20 76 61  (Tcl_WideInt) va
19b0: 6c 5f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20  l_p);.          
19c0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
19d0: 6c 74 28 69 6e 74 65 72 70 2c 20 73 79 6d 5f 61  lt(interp, sym_a
19e0: 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ddr);.          
19f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1a00: 20 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54   .        case T
1a10: 43 4c 54 43 43 5f 4f 55 54 50 55 54 5f 46 49 4c  CLTCC_OUTPUT_FIL
1a20: 45 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  E:.            i
1a30: 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a  f (objc != 3) {.
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a50: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
1a60: 28 69 6e 74 65 72 70 2c 20 32 2c 20 6f 62 6a 76  (interp, 2, objv
1a70: 2c 20 22 66 69 6c 65 6e 61 6d 65 22 29 3b 0a 20  , "filename");. 
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a90: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1ab0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
1ac0: 73 2d 3e 72 65 6c 6f 63 61 74 65 64 29 20 7b 20  s->relocated) { 
1ad0: 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20      .           
1ae0: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
1af0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63  esult(interp, "c
1b00: 6f 64 65 20 61 6c 72 65 61 64 79 20 72 65 6c 6f  ode already relo
1b10: 63 61 74 65 64 2c 20 63 61 6e 6e 6f 74 20 6f 75  cated, cannot ou
1b20: 74 70 75 74 20 74 6f 20 66 69 6c 65 22 2c 20 4e  tput to file", N
1b30: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ULL);.          
1b40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
1b50: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20  _ERROR;.        
1b60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1b70: 20 20 69 66 20 28 73 2d 3e 6f 75 74 70 75 74 5f    if (s->output_
1b80: 74 79 70 65 20 3d 3d 20 54 43 43 5f 4f 55 54 50  type == TCC_OUTP
1b90: 55 54 5f 4d 45 4d 4f 52 59 29 20 7b 20 20 20 20  UT_MEMORY) {    
1ba0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1bb0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
1bc0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 6f 75 74 70  lt(interp, "outp
1bd0: 75 74 5f 74 79 70 65 20 6d 65 6d 6f 72 79 20 6e  ut_type memory n
1be0: 6f 74 20 76 61 6c 69 64 20 66 6f 72 20 6f 75 74  ot valid for out
1bf0: 70 75 74 20 74 6f 20 66 69 6c 65 22 2c 20 4e 55  put to file", NU
1c00: 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  LL);.           
1c10: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
1c20: 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 20  ERROR;.         
1c30: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
1c40: 20 72 65 73 20 3d 20 74 63 63 5f 6f 75 74 70 75   res = tcc_outpu
1c50: 74 5f 66 69 6c 65 28 73 2c 54 63 6c 5f 47 65 74  t_file(s,Tcl_Get
1c60: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29  String(objv[2]))
1c70: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
1c80: 66 20 28 72 65 73 21 3d 30 29 20 7b 0a 20 20 20  f (res!=0) {.   
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c               Tcl
1ca0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1cb0: 74 65 72 70 2c 20 22 6f 75 74 70 75 74 20 74 6f  terp, "output to
1cc0: 20 66 69 6c 65 20 66 61 69 6c 65 64 22 2c 20 4e   file failed", N
1cd0: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ULL);.          
1ce0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
1cf0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20  _ERROR;.        
1d00: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d20: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20  urn TCL_OK;.    
1d30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1d40: 20 20 63 61 73 65 20 54 43 4c 54 43 43 5f 55 4e    case TCLTCC_UN
1d50: 44 45 46 49 4e 45 3a 0a 20 20 20 20 20 20 20 20  DEFINE:.        
1d60: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20      if (objc != 
1d70: 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  3) {.           
1d80: 20 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75       Tcl_WrongNu
1d90: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 32 2c  mArgs(interp, 2,
1da0: 20 6f 62 6a 76 2c 20 22 73 79 6d 62 6f 6c 22 29   objv, "symbol")
1db0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1dc0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1dd0: 4f 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  OR;.            
1de0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 63  }.            tc
1df0: 63 5f 75 6e 64 65 66 69 6e 65 5f 73 79 6d 62 6f  c_undefine_symbo
1e00: 6c 28 73 2c 54 63 6c 5f 47 65 74 53 74 72 69 6e  l(s,Tcl_GetStrin
1e10: 67 28 6f 62 6a 76 5b 32 5d 29 29 3b 0a 20 20 20  g(objv[2]));.   
1e20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e30: 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20  TCL_OK;.        
1e40: 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20  default:.       
1e50: 20 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 22       Tcl_Panic("
1e60: 69 6e 74 65 72 6e 61 6c 20 65 72 72 6f 72 20 64  internal error d
1e70: 75 72 69 6e 67 20 6f 70 74 69 6f 6e 20 6c 6f 6f  uring option loo
1e80: 6b 75 70 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20  kup");.    }.   
1e90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1ea0: 7d 20 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 54  } ..static int T
1eb0: 63 63 34 74 63 6c 43 72 65 61 74 65 43 6d 64 28  cc4tclCreateCmd(
1ec0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 64 61 74   ClientData cdat
1ed0: 61 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  a, Tcl_Interp *i
1ee0: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
1ef0: 20 54 63 6c 5f 4f 62 6a 20 2a 20 43 4f 4e 53 54   Tcl_Obj * CONST
1f00: 20 6f 62 6a 76 5b 5d 29 7b 0a 09 73 74 72 75 63   objv[]){..struc
1f10: 74 20 54 63 6c 54 43 43 53 74 61 74 65 20 2a 74  t TclTCCState *t
1f20: 73 3b 0a 09 54 43 43 53 74 61 74 65 20 2a 73 3b  s;..TCCState *s;
1f30: 0a 20 20 20 20 09 69 6e 74 20 69 6e 64 65 78 3b  .    .int index;
1f40: 0a 09 73 74 61 74 69 63 20 43 4f 4e 53 54 20 63  ..static CONST c
1f50: 68 61 72 20 2a 74 79 70 65 73 5b 5d 20 3d 20 7b  har *types[] = {
1f60: 0a 09 09 22 6d 65 6d 6f 72 79 22 2c 20 22 65 78  ..."memory", "ex
1f70: 65 22 2c 20 22 64 6c 6c 22 2c 20 22 6f 62 6a 22  e", "dll", "obj"
1f80: 2c 20 22 70 72 65 70 72 6f 63 65 73 73 22 2c 20  , "preprocess", 
1f90: 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c     (char *) NULL
1fa0: 0a 09 7d 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20  ..};...if (objc 
1fb0: 3c 20 33 20 7c 7c 20 6f 62 6a 63 20 3e 20 34 29  < 3 || objc > 4)
1fc0: 20 7b 0a 09 09 54 63 6c 5f 57 72 6f 6e 67 4e 75   {...Tcl_WrongNu
1fd0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
1fe0: 20 6f 62 6a 76 2c 20 22 74 63 63 5f 6c 69 62 61   objv, "tcc_liba
1ff0: 72 79 5f 70 61 74 68 20 3f 6f 75 74 70 75 74 5f  ry_path ?output_
2000: 74 79 70 65 3f 20 68 61 6e 64 6c 65 22 29 3b 0a  type? handle");.
2010: 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ..return TCL_ERR
2020: 4f 52 3b 0a 09 7d 0a 0a 09 69 66 20 28 6f 62 6a  OR;..}...if (obj
2030: 63 20 3d 3d 20 33 29 20 7b 0a 09 09 69 6e 64 65  c == 3) {...inde
2040: 78 20 3d 20 54 43 43 5f 4f 55 54 50 55 54 5f 4d  x = TCC_OUTPUT_M
2050: 45 4d 4f 52 59 3b 0a 09 7d 20 65 6c 73 65 20 7b  EMORY;..} else {
2060: 0a 09 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e  ...if (Tcl_GetIn
2070: 64 65 78 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  dexFromObj(inter
2080: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 74 79 70 65  p, objv[2], type
2090: 73 2c 20 22 74 79 70 65 22 2c 20 30 2c 20 26 69  s, "type", 0, &i
20a0: 6e 64 65 78 29 20 21 3d 20 54 43 4c 5f 4f 4b 29  ndex) != TCL_OK)
20b0: 20 7b 0a 09 09 09 72 65 74 75 72 6e 20 54 43 4c   {....return TCL
20c0: 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a 09 7d 0a 0a  _ERROR;...}..}..
20d0: 09 73 20 3d 20 74 63 63 5f 6e 65 77 28 54 63 6c  .s = tcc_new(Tcl
20e0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
20f0: 31 5d 29 29 3b 0a 09 69 66 20 28 73 20 3d 3d 20  1]));..if (s == 
2100: 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e  NULL) {...return
2110: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
2120: 0a 09 74 63 63 5f 73 65 74 5f 65 72 72 6f 72 5f  ..tcc_set_error_
2130: 66 75 6e 63 28 73 2c 20 69 6e 74 65 72 70 2c 20  func(s, interp, 
2140: 28 76 6f 69 64 20 2a 29 26 54 63 63 34 74 63 6c  (void *)&Tcc4tcl
2150: 45 72 72 6f 72 46 75 6e 63 29 3b 0a 0a 09 74 73  ErrorFunc);...ts
2160: 20 3d 20 28 76 6f 69 64 20 2a 29 20 63 6b 61 6c   = (void *) ckal
2170: 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 74 73 29 29  loc(sizeof(*ts))
2180: 3b 0a 09 74 73 2d 3e 73 20 3d 20 73 3b 0a 20 20  ;..ts->s = s;.  
2190: 20 20 09 74 73 2d 3e 72 65 6c 6f 63 61 74 65 64    .ts->relocated
21a0: 20 3d 20 30 3b 0a 0a 09 2f 2a 70 72 69 6e 74 66   = 0;.../*printf
21b0: 28 22 74 79 70 65 3a 20 25 64 5c 6e 22 2c 20 69  ("type: %d\n", i
21c0: 6e 64 65 78 29 3b 20 2a 2f 0a 09 74 63 63 5f 73  ndex); */..tcc_s
21d0: 65 74 5f 6f 75 74 70 75 74 5f 74 79 70 65 28 73  et_output_type(s
21e0: 2c 69 6e 64 65 78 29 3b 0a 09 54 63 6c 5f 43 72  ,index);..Tcl_Cr
21f0: 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
2200: 6e 74 65 72 70 2c 54 63 6c 5f 47 65 74 53 74 72  nterp,Tcl_GetStr
2210: 69 6e 67 28 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d  ing(objv[objc-1]
2220: 29 2c 54 63 63 34 74 63 6c 48 61 6e 64 6c 65 43  ),Tcc4tclHandleC
2230: 6d 64 2c 74 73 2c 54 63 63 34 74 63 6c 43 43 6f  md,ts,Tcc4tclCCo
2240: 6d 6d 61 6e 64 44 65 6c 65 74 65 50 72 6f 63 29  mmandDeleteProc)
2250: 3b 0a 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;...return TCL_O
2260: 4b 3b 0a 7d 0a 0a 69 6e 74 20 54 63 63 34 74 63  K;.}..int Tcc4tc
2270: 6c 5f 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72  l_Init(Tcl_Inter
2280: 70 20 2a 69 6e 74 65 72 70 29 20 7b 0a 23 69 66  p *interp) {.#if
2290: 64 65 66 20 55 53 45 5f 54 43 4c 5f 53 54 55 42  def USE_TCL_STUB
22a0: 53 0a 09 69 66 20 28 54 63 6c 5f 49 6e 69 74 53  S..if (Tcl_InitS
22b0: 74 75 62 73 28 69 6e 74 65 72 70 2c 20 22 38 2e  tubs(interp, "8.
22c0: 34 22 20 2c 20 30 29 20 3d 3d 20 30 4c 29 20 7b  4" , 0) == 0L) {
22d0: 0a 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  ...return TCL_ER
22e0: 52 4f 52 3b 0a 09 7d 0a 23 65 6e 64 69 66 0a 0a  ROR;..}.#endif..
22f0: 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f  .Tcl_CreateObjCo
2300: 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 50 41  mmand(interp, PA
2310: 43 4b 41 47 45 5f 4e 41 4d 45 2c 20 54 63 63 34  CKAGE_NAME, Tcc4
2320: 74 63 6c 43 72 65 61 74 65 43 6d 64 2c 20 4e 55  tclCreateCmd, NU
2330: 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f  LL, NULL);..Tcl_
2340: 50 6b 67 50 72 6f 76 69 64 65 28 69 6e 74 65 72  PkgProvide(inter
2350: 70 2c 20 50 41 43 4b 41 47 45 5f 4e 41 4d 45 2c  p, PACKAGE_NAME,
2360: 20 50 41 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e   PACKAGE_VERSION
2370: 29 3b 0a 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f  );...return TCL_
2380: 4f 4b 3b 0a 7d 0a                                OK;.}.