Tcl Source Code

Hex Artifact Content
Login

Artifact be01e8bc064b717765cb1ddc61a02f2f432a02699acb129423cfa1cc4a939e36:


0000: 2f 2a 0a 20 2a 20 4f 52 49 47 49 4e 41 4c 20 53  /*. * ORIGINAL S
0010: 4f 55 52 43 45 3a 20 74 6b 2f 67 65 6e 65 72 69  OURCE: tk/generi
0020: 63 2f 74 6b 53 74 75 62 4c 69 62 2e 63 2c 20 76  c/tkStubLib.c, v
0030: 65 72 73 69 6f 6e 20 31 2e 39 20 32 30 30 34 2f  ersion 1.9 2004/
0040: 30 33 2f 31 37 0a 20 2a 2f 0a 0a 23 69 6e 63 6c  03/17. */..#incl
0050: 75 64 65 20 22 74 63 6c 4f 4f 49 6e 74 2e 68 22  ude "tclOOInt.h"
0060: 0a 0a 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 63  ..MODULE_SCOPE c
0070: 6f 6e 73 74 20 54 63 6c 4f 4f 53 74 75 62 73 20  onst TclOOStubs 
0080: 2a 74 63 6c 4f 4f 53 74 75 62 73 50 74 72 3b 0a  *tclOOStubsPtr;.
0090: 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 63 6f 6e  MODULE_SCOPE con
00a0: 73 74 20 54 63 6c 4f 4f 49 6e 74 53 74 75 62 73  st TclOOIntStubs
00b0: 20 2a 74 63 6c 4f 4f 49 6e 74 53 74 75 62 73 50   *tclOOIntStubsP
00c0: 74 72 3b 0a 0a 63 6f 6e 73 74 20 54 63 6c 4f 4f  tr;..const TclOO
00d0: 53 74 75 62 73 20 2a 74 63 6c 4f 4f 53 74 75 62  Stubs *tclOOStub
00e0: 73 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 63 6f 6e  sPtr = NULL;.con
00f0: 73 74 20 54 63 6c 4f 4f 49 6e 74 53 74 75 62 73  st TclOOIntStubs
0100: 20 2a 74 63 6c 4f 4f 49 6e 74 53 74 75 62 73 50   *tclOOIntStubsP
0110: 74 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 2f 2a 0a 20  tr = NULL;../*. 
0120: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
0130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 63  -------. *. * Tc
0170: 6c 4f 4f 49 6e 69 74 69 61 6c 69 7a 65 53 74 75  lOOInitializeStu
0180: 62 73 20 2d 2d 0a 20 2a 0a 20 2a 09 4c 6f 61 64  bs --. *. *.Load
0190: 20 74 68 65 20 74 63 6c 4f 4f 20 70 61 63 6b 61   the tclOO packa
01a0: 67 65 2c 20 69 6e 69 74 69 61 6c 69 7a 65 20 73  ge, initialize s
01b0: 74 75 62 20 74 61 62 6c 65 20 70 6f 69 6e 74 65  tub table pointe
01c0: 72 2e 20 44 6f 20 6e 6f 74 20 63 61 6c 6c 0a 20  r. Do not call. 
01d0: 2a 09 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  *.this function 
01e0: 64 69 72 65 63 74 6c 79 2c 20 75 73 65 20 54 63  directly, use Tc
01f0: 6c 5f 4f 4f 49 6e 69 74 53 74 75 62 73 28 29 20  l_OOInitStubs() 
0200: 6d 61 63 72 6f 20 69 6e 73 74 65 61 64 2e 0a 20  macro instead.. 
0210: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
0220: 09 54 68 65 20 61 63 74 75 61 6c 20 76 65 72 73  .The actual vers
0230: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 63 6b 61  ion of the packa
0240: 67 65 20 74 68 61 74 20 73 61 74 69 73 66 69 65  ge that satisfie
0250: 73 20 74 68 65 20 72 65 71 75 65 73 74 2c 20 6f  s the request, o
0260: 72 20 4e 55 4c 4c 0a 20 2a 09 74 6f 20 69 6e 64  r NULL. *.to ind
0270: 69 63 61 74 65 20 74 68 61 74 20 61 6e 20 65 72  icate that an er
0280: 72 6f 72 20 6f 63 63 75 72 72 65 64 2e 0a 20 2a  ror occurred.. *
0290: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
02a0: 3a 0a 20 2a 09 53 65 74 73 20 74 68 65 20 73 74  :. *.Sets the st
02b0: 75 62 20 74 61 62 6c 65 20 70 6f 69 6e 74 65 72  ub table pointer
02c0: 73 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  s.. *. *--------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
0310: 2a 2f 0a 0a 23 75 6e 64 65 66 20 54 63 6c 4f 4f  */..#undef TclOO
0320: 49 6e 69 74 69 61 6c 69 7a 65 53 74 75 62 73 0a  InitializeStubs.
0330: 0a 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 63 6f  .MODULE_SCOPE co
0340: 6e 73 74 20 63 68 61 72 20 2a 0a 54 63 6c 4f 4f  nst char *.TclOO
0350: 49 6e 69 74 69 61 6c 69 7a 65 53 74 75 62 73 28  InitializeStubs(
0360: 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  .    Tcl_Interp 
0370: 2a 69 6e 74 65 72 70 2c 0a 20 20 20 20 63 6f 6e  *interp,.    con
0380: 73 74 20 63 68 61 72 20 2a 76 65 72 73 69 6f 6e  st char *version
0390: 29 0a 7b 0a 20 20 20 20 69 6e 74 20 65 78 61 63  ).{.    int exac
03a0: 74 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  t = 0;.    const
03b0: 20 63 68 61 72 20 2a 70 61 63 6b 61 67 65 4e 61   char *packageNa
03c0: 6d 65 20 3d 20 22 74 63 6c 3a 3a 6f 6f 22 3b 0a  me = "tcl::oo";.
03d0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
03e0: 65 72 72 4d 73 67 20 3d 20 4e 55 4c 4c 3b 0a 20  errMsg = NULL;. 
03f0: 20 20 20 54 63 6c 4f 4f 53 74 75 62 73 20 2a 73     TclOOStubs *s
0400: 74 75 62 73 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a  tubsPtr = NULL;.
0410: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
0420: 61 63 74 75 61 6c 56 65 72 73 69 6f 6e 20 3d 20  actualVersion = 
0430: 74 63 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c  tclStubsPtr->tcl
0440: 5f 50 6b 67 52 65 71 75 69 72 65 45 78 28 69 6e  _PkgRequireEx(in
0450: 74 65 72 70 2c 0a 09 20 20 20 20 70 61 63 6b 61  terp,..    packa
0460: 67 65 4e 61 6d 65 2c 20 76 65 72 73 69 6f 6e 2c  geName, version,
0470: 20 65 78 61 63 74 2c 20 26 73 74 75 62 73 50 74   exact, &stubsPt
0480: 72 29 3b 0a 0a 20 20 20 20 69 66 20 28 61 63 74  r);..    if (act
0490: 75 61 6c 56 65 72 73 69 6f 6e 20 3d 3d 20 4e 55  ualVersion == NU
04a0: 4c 4c 29 20 7b 0a 09 70 61 63 6b 61 67 65 4e 61  LL) {..packageNa
04b0: 6d 65 20 3d 20 22 54 63 6c 4f 4f 22 3b 0a 09 61  me = "TclOO";..a
04c0: 63 74 75 61 6c 56 65 72 73 69 6f 6e 20 3d 20 74  ctualVersion = t
04d0: 63 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f  clStubsPtr->tcl_
04e0: 50 6b 67 52 65 71 75 69 72 65 45 78 28 69 6e 74  PkgRequireEx(int
04f0: 65 72 70 2c 0a 09 09 70 61 63 6b 61 67 65 4e 61  erp,...packageNa
0500: 6d 65 2c 20 76 65 72 73 69 6f 6e 2c 20 65 78 61  me, version, exa
0510: 63 74 2c 20 26 73 74 75 62 73 50 74 72 29 3b 0a  ct, &stubsPtr);.
0520: 09 69 66 20 28 61 63 74 75 61 6c 56 65 72 73 69  .if (actualVersi
0530: 6f 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20  on == NULL) {.. 
0540: 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a     return NULL;.
0550: 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  .}.    }.    if 
0560: 28 73 74 75 62 73 50 74 72 20 3d 3d 20 4e 55 4c  (stubsPtr == NUL
0570: 4c 29 20 7b 0a 09 65 72 72 4d 73 67 20 3d 20 22  L) {..errMsg = "
0580: 6d 69 73 73 69 6e 67 20 73 74 75 62 20 74 61 62  missing stub tab
0590: 6c 65 20 70 6f 69 6e 74 65 72 22 3b 0a 20 20 20  le pointer";.   
05a0: 20 7d 20 65 6c 73 65 20 7b 0a 09 74 63 6c 4f 4f   } else {..tclOO
05b0: 53 74 75 62 73 50 74 72 20 3d 20 73 74 75 62 73  StubsPtr = stubs
05c0: 50 74 72 3b 0a 09 69 66 20 28 73 74 75 62 73 50  Ptr;..if (stubsP
05d0: 74 72 2d 3e 68 6f 6f 6b 73 29 20 7b 0a 09 20 20  tr->hooks) {..  
05e0: 20 20 74 63 6c 4f 4f 49 6e 74 53 74 75 62 73 50    tclOOIntStubsP
05f0: 74 72 20 3d 20 73 74 75 62 73 50 74 72 2d 3e 68  tr = stubsPtr->h
0600: 6f 6f 6b 73 2d 3e 74 63 6c 4f 4f 49 6e 74 53 74  ooks->tclOOIntSt
0610: 75 62 73 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  ubs;..} else {..
0620: 20 20 20 20 74 63 6c 4f 4f 49 6e 74 53 74 75 62      tclOOIntStub
0630: 73 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a  sPtr = NULL;..}.
0640: 09 72 65 74 75 72 6e 20 61 63 74 75 61 6c 56 65  .return actualVe
0650: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  rsion;.    }.   
0660: 20 74 63 6c 53 74 75 62 73 50 74 72 2d 3e 74 63   tclStubsPtr->tc
0670: 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e  l_ResetResult(in
0680: 74 65 72 70 29 3b 0a 20 20 20 20 74 63 6c 53 74  terp);.    tclSt
0690: 75 62 73 50 74 72 2d 3e 74 63 6c 5f 41 70 70 65  ubsPtr->tcl_Appe
06a0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
06b0: 20 22 45 72 72 6f 72 20 6c 6f 61 64 69 6e 67 20   "Error loading 
06c0: 22 2c 20 70 61 63 6b 61 67 65 4e 61 6d 65 2c 0a  ", packageName,.
06d0: 09 20 20 20 20 22 20 28 72 65 71 75 65 73 74 65  .    " (requeste
06e0: 64 20 76 65 72 73 69 6f 6e 20 22 2c 20 76 65 72  d version ", ver
06f0: 73 69 6f 6e 2c 20 22 2c 20 61 63 74 75 61 6c 20  sion, ", actual 
0700: 76 65 72 73 69 6f 6e 20 22 2c 0a 09 20 20 20 20  version ",..    
0710: 61 63 74 75 61 6c 56 65 72 73 69 6f 6e 2c 20 22  actualVersion, "
0720: 29 3a 20 22 2c 20 65 72 72 4d 73 67 2c 20 28 63  ): ", errMsg, (c
0730: 68 61 72 20 2a 29 4e 55 4c 4c 29 3b 0a 20 20 20  har *)NULL);.   
0740: 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 7d 0a   return NULL;.}.
0750: 0c 0a 2f 2a 0a 20 2a 20 4c 6f 63 61 6c 20 56 61  ../*. * Local Va
0760: 72 69 61 62 6c 65 73 3a 0a 20 2a 20 6d 6f 64 65  riables:. * mode
0770: 3a 20 63 0a 20 2a 20 63 2d 62 61 73 69 63 2d 6f  : c. * c-basic-o
0780: 66 66 73 65 74 3a 20 34 0a 20 2a 20 66 69 6c 6c  ffset: 4. * fill
0790: 2d 63 6f 6c 75 6d 6e 3a 20 37 38 0a 20 2a 20 45  -column: 78. * E
07a0: 6e 64 3a 0a 20 2a 2f 0a                          nd:. */.