Artifact
be01e8bc064b717765cb1ddc61a02f2f432a02699acb129423cfa1cc4a939e36 :
File
generic/tclOOStubLib.c
— part of check-in
[ccb5df9767]
at
2026-06-08 18:41:52
on branch main
— Small corrections to doc comments
(user:
dkf
size: 1960)
[more...]
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:. */.