Attachment "slots.patch" to
ticket [3084339fff]
added by
dkf
2010-10-22 22:29:54.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 4f 4f 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d clOO.c.=========
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
0060: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
0070: 6c 2f 6f 6f 63 6f 72 65 2f 67 65 6e 65 72 69 63 l/oocore/generic
0080: 2f 74 63 6c 4f 4f 2e 63 2c 76 0a 72 65 74 72 69 /tclOO.c,v.retri
0090: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
00a0: 2e 37 31 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e .71.diff -u -r1.
00b0: 37 31 20 74 63 6c 4f 4f 2e 63 0a 2d 2d 2d 20 67 71 tclOO.c.--- g
00c0: 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 2e 63 09 35 eneric/tclOO.c.5
00d0: 20 4d 61 72 20 32 30 31 30 20 31 35 3a 33 39 3a Mar 2010 15:39:
00e0: 33 33 20 2d 30 30 30 30 09 31 2e 37 31 0a 2b 2b 33 -0000.1.71.++
00f0: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 2e + generic/tclOO.
0100: 63 09 32 32 20 4f 63 74 20 32 30 31 30 20 31 35 c.22 Oct 2010 15
0110: 3a 32 35 3a 33 32 20 2d 30 30 30 30 0a 40 40 20 :25:32 -0000.@@
0120: 2d 33 30 2c 32 37 20 2b 33 30 2c 32 30 20 40 40 -30,27 +30,20 @@
0130: 0a 20 20 20 20 20 7b 22 64 65 6c 65 74 65 6d 65 . {"deleteme
0140: 74 68 6f 64 22 2c 20 54 63 6c 4f 4f 44 65 66 69 thod", TclOODefi
0150: 6e 65 44 65 6c 65 74 65 4d 65 74 68 6f 64 4f 62 neDeleteMethodOb
0160: 6a 43 6d 64 2c 20 30 7d 2c 0a 20 20 20 20 20 7b jCmd, 0},. {
0170: 22 64 65 73 74 72 75 63 74 6f 72 22 2c 20 54 63 "destructor", Tc
0180: 6c 4f 4f 44 65 66 69 6e 65 44 65 73 74 72 75 63 lOODefineDestruc
0190: 74 6f 72 4f 62 6a 43 6d 64 2c 20 30 7d 2c 0a 20 torObjCmd, 0},.
01a0: 20 20 20 20 7b 22 65 78 70 6f 72 74 22 2c 20 54 {"export", T
01b0: 63 6c 4f 4f 44 65 66 69 6e 65 45 78 70 6f 72 74 clOODefineExport
01c0: 4f 62 6a 43 6d 64 2c 20 30 7d 2c 0a 2d 20 20 20 ObjCmd, 0},.-
01d0: 20 7b 22 66 69 6c 74 65 72 22 2c 20 54 63 6c 4f {"filter", TclO
01e0: 4f 44 65 66 69 6e 65 46 69 6c 74 65 72 4f 62 6a ODefineFilterObj
01f0: 43 6d 64 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 22 Cmd, 0},. {"
0200: 66 6f 72 77 61 72 64 22 2c 20 54 63 6c 4f 4f 44 forward", TclOOD
0210: 65 66 69 6e 65 46 6f 72 77 61 72 64 4f 62 6a 43 efineForwardObjC
0220: 6d 64 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 22 6d md, 0},. {"m
0230: 65 74 68 6f 64 22 2c 20 54 63 6c 4f 4f 44 65 66 ethod", TclOODef
0240: 69 6e 65 4d 65 74 68 6f 64 4f 62 6a 43 6d 64 2c ineMethodObjCmd,
0250: 20 30 7d 2c 0a 2d 20 20 20 20 7b 22 6d 69 78 69 0},.- {"mixi
0260: 6e 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e 65 4d n", TclOODefineM
0270: 69 78 69 6e 4f 62 6a 43 6d 64 2c 20 30 7d 2c 0a ixinObjCmd, 0},.
0280: 20 20 20 20 20 7b 22 72 65 6e 61 6d 65 6d 65 74 {"renamemet
0290: 68 6f 64 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e hod", TclOODefin
02a0: 65 52 65 6e 61 6d 65 4d 65 74 68 6f 64 4f 62 6a eRenameMethodObj
02b0: 43 6d 64 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 22 Cmd, 0},. {"
02c0: 73 65 6c 66 22 2c 20 54 63 6c 4f 4f 44 65 66 69 self", TclOODefi
02d0: 6e 65 53 65 6c 66 4f 62 6a 43 6d 64 2c 20 30 7d neSelfObjCmd, 0}
02e0: 2c 0a 2d 20 20 20 20 7b 22 73 75 70 65 72 63 6c ,.- {"supercl
02f0: 61 73 73 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e ass", TclOODefin
0300: 65 53 75 70 65 72 63 6c 61 73 73 4f 62 6a 43 6d eSuperclassObjCm
0310: 64 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 22 75 6e d, 0},. {"un
0320: 65 78 70 6f 72 74 22 2c 20 54 63 6c 4f 4f 44 65 export", TclOODe
0330: 66 69 6e 65 55 6e 65 78 70 6f 72 74 4f 62 6a 43 fineUnexportObjC
0340: 6d 64 2c 20 30 7d 2c 0a 2d 20 20 20 20 7b 22 76 md, 0},.- {"v
0350: 61 72 69 61 62 6c 65 22 2c 20 54 63 6c 4f 4f 44 ariable", TclOOD
0360: 65 66 69 6e 65 56 61 72 69 61 62 6c 65 73 4f 62 efineVariablesOb
0370: 6a 43 6d 64 2c 20 30 7d 2c 0a 20 20 20 20 20 7b jCmd, 0},. {
0380: 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 30 7d 0a 20 NULL, NULL, 0}.
0390: 7d 2c 20 6f 62 6a 64 65 66 43 6d 64 73 5b 5d 20 }, objdefCmds[]
03a0: 3d 20 7b 0a 20 20 20 20 20 7b 22 63 6c 61 73 73 = {. {"class
03b0: 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e 65 43 6c ", TclOODefineCl
03c0: 61 73 73 4f 62 6a 43 6d 64 2c 20 31 7d 2c 0a 20 assObjCmd, 1},.
03d0: 20 20 20 20 7b 22 64 65 6c 65 74 65 6d 65 74 68 {"deletemeth
03e0: 6f 64 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e 65 od", TclOODefine
03f0: 44 65 6c 65 74 65 4d 65 74 68 6f 64 4f 62 6a 43 DeleteMethodObjC
0400: 6d 64 2c 20 31 7d 2c 0a 20 20 20 20 20 7b 22 65 md, 1},. {"e
0410: 78 70 6f 72 74 22 2c 20 54 63 6c 4f 4f 44 65 66 xport", TclOODef
0420: 69 6e 65 45 78 70 6f 72 74 4f 62 6a 43 6d 64 2c ineExportObjCmd,
0430: 20 31 7d 2c 0a 2d 20 20 20 20 7b 22 66 69 6c 74 1},.- {"filt
0440: 65 72 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e 65 er", TclOODefine
0450: 46 69 6c 74 65 72 4f 62 6a 43 6d 64 2c 20 31 7d FilterObjCmd, 1}
0460: 2c 0a 20 20 20 20 20 7b 22 66 6f 72 77 61 72 64 ,. {"forward
0470: 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e 65 46 6f ", TclOODefineFo
0480: 72 77 61 72 64 4f 62 6a 43 6d 64 2c 20 31 7d 2c rwardObjCmd, 1},
0490: 0a 20 20 20 20 20 7b 22 6d 65 74 68 6f 64 22 2c . {"method",
04a0: 20 54 63 6c 4f 4f 44 65 66 69 6e 65 4d 65 74 68 TclOODefineMeth
04b0: 6f 64 4f 62 6a 43 6d 64 2c 20 31 7d 2c 0a 2d 20 odObjCmd, 1},.-
04c0: 20 20 20 7b 22 6d 69 78 69 6e 22 2c 20 54 63 6c {"mixin", Tcl
04d0: 4f 4f 44 65 66 69 6e 65 4d 69 78 69 6e 4f 62 6a OODefineMixinObj
04e0: 43 6d 64 2c 20 31 7d 2c 0a 20 20 20 20 20 7b 22 Cmd, 1},. {"
04f0: 72 65 6e 61 6d 65 6d 65 74 68 6f 64 22 2c 20 54 renamemethod", T
0500: 63 6c 4f 4f 44 65 66 69 6e 65 52 65 6e 61 6d 65 clOODefineRename
0510: 4d 65 74 68 6f 64 4f 62 6a 43 6d 64 2c 20 31 7d MethodObjCmd, 1}
0520: 2c 0a 20 20 20 20 20 7b 22 75 6e 65 78 70 6f 72 ,. {"unexpor
0530: 74 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e 65 55 t", TclOODefineU
0540: 6e 65 78 70 6f 72 74 4f 62 6a 43 6d 64 2c 20 31 nexportObjCmd, 1
0550: 7d 2c 0a 2d 20 20 20 20 7b 22 76 61 72 69 61 62 },.- {"variab
0560: 6c 65 22 2c 20 54 63 6c 4f 4f 44 65 66 69 6e 65 le", TclOODefine
0570: 56 61 72 69 61 62 6c 65 73 4f 62 6a 43 6d 64 2c VariablesObjCmd,
0580: 20 31 7d 2c 0a 20 20 20 20 20 7b 4e 55 4c 4c 2c 1},. {NULL,
0590: 20 4e 55 4c 4c 2c 20 30 7d 0a 20 7d 3b 0a 20 0a NULL, 0}. };. .
05a0: 40 40 20 2d 37 36 2c 37 20 2b 36 39 2c 37 20 40 @@ -76,7 +69,7 @
05b0: 40 0a 20 73 74 61 74 69 63 20 76 6f 69 64 09 09 @. static void..
05c0: 44 65 6c 65 74 65 64 44 65 66 69 6e 65 4e 61 6d DeletedDefineNam
05d0: 65 73 70 61 63 65 28 43 6c 69 65 6e 74 44 61 74 espace(ClientDat
05e0: 61 20 63 6c 69 65 6e 74 44 61 74 61 29 3b 0a 20 a clientData);.
05f0: 73 74 61 74 69 63 20 76 6f 69 64 09 09 44 65 6c static void..Del
0600: 65 74 65 64 4f 62 6a 64 65 66 4e 61 6d 65 73 70 etedObjdefNamesp
0610: 61 63 65 28 43 6c 69 65 6e 74 44 61 74 61 20 63 ace(ClientData c
0620: 6c 69 65 6e 74 44 61 74 61 29 3b 0a 20 73 74 61 lientData);. sta
0630: 74 69 63 20 76 6f 69 64 09 09 44 65 6c 65 74 65 tic void..Delete
0640: 64 48 65 6c 70 65 72 73 4e 61 6d 65 73 70 61 63 dHelpersNamespac
0650: 65 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 e(ClientData cli
0660: 65 6e 74 44 61 74 61 29 3b 0a 2d 73 74 61 74 69 entData);.-stati
0670: 63 20 76 6f 69 64 09 09 49 6e 69 74 46 6f 75 6e c void..InitFoun
0680: 64 61 74 69 6f 6e 28 54 63 6c 5f 49 6e 74 65 72 dation(Tcl_Inter
0690: 70 20 2a 69 6e 74 65 72 70 29 3b 0a 2b 73 74 61 p *interp);.+sta
06a0: 74 69 63 20 69 6e 74 09 09 49 6e 69 74 46 6f 75 tic int..InitFou
06b0: 6e 64 61 74 69 6f 6e 28 54 63 6c 5f 49 6e 74 65 ndation(Tcl_Inte
06c0: 72 70 20 2a 69 6e 74 65 72 70 29 3b 0a 20 73 74 rp *interp);. st
06d0: 61 74 69 63 20 76 6f 69 64 09 09 4b 69 6c 6c 46 atic void..KillF
06e0: 6f 75 6e 64 61 74 69 6f 6e 28 43 6c 69 65 6e 74 oundation(Client
06f0: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c Data clientData,
0700: 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 . ... Tcl_Int
0710: 65 72 70 20 2a 69 6e 74 65 72 70 29 3b 0a 20 73 erp *interp);. s
0720: 74 61 74 69 63 20 76 6f 69 64 09 09 4d 79 44 65 tatic void..MyDe
0730: 6c 65 74 65 64 28 43 6c 69 65 6e 74 44 61 74 61 leted(ClientData
0740: 20 63 6c 69 65 6e 74 44 61 74 61 29 3b 0a 40 40 clientData);.@@
0750: 20 2d 31 36 32 2c 37 20 2b 31 35 35 2c 39 20 40 -162,7 +155,9 @
0760: 40 0a 20 20 20 20 20 20 2a 20 42 75 69 6c 64 20 @. * Build
0770: 74 68 65 20 63 6f 72 65 20 6f 66 20 74 68 65 20 the core of the
0780: 4f 4f 20 73 79 73 74 65 6d 2e 0a 20 20 20 20 20 OO system..
0790: 20 2a 2f 0a 20 0a 2d 20 20 20 20 49 6e 69 74 46 */. .- InitF
07a0: 6f 75 6e 64 61 74 69 6f 6e 28 69 6e 74 65 72 70 oundation(interp
07b0: 29 3b 0a 2b 20 20 20 20 69 66 20 28 49 6e 69 74 );.+ if (Init
07c0: 46 6f 75 6e 64 61 74 69 6f 6e 28 69 6e 74 65 72 Foundation(inter
07d0: 70 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a p) != TCL_OK) {.
07e0: 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 +.return TCL_ERR
07f0: 4f 52 3b 0a 2b 20 20 20 20 7d 0a 20 0a 20 20 20 OR;.+ }. .
0800: 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 52 75 6e /*. * Run
0810: 20 6f 75 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 our initializat
0820: 69 6f 6e 20 73 63 72 69 70 74 20 61 6e 64 2c 20 ion script and,
0830: 69 66 20 74 68 61 74 20 77 6f 72 6b 73 2c 20 64 if that works, d
0840: 65 63 6c 61 72 65 20 74 68 65 20 70 61 63 6b 61 eclare the packa
0850: 67 65 0a 40 40 20 2d 32 31 33 2c 37 20 2b 32 30 ge.@@ -213,7 +20
0860: 38 2c 37 20 40 40 0a 20 20 2a 20 2d 2d 2d 2d 2d 8,7 @@. * -----
0870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
08a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
08b0: 2d 0a 20 20 2a 2f 0a 20 0a 2d 73 74 61 74 69 63 -. */. .-static
08c0: 20 76 6f 69 64 0a 2b 73 74 61 74 69 63 20 69 6e void.+static in
08d0: 74 0a 20 49 6e 69 74 46 6f 75 6e 64 61 74 69 6f t. InitFoundatio
08e0: 6e 28 0a 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 n(. Tcl_Inte
08f0: 72 70 20 2a 69 6e 74 65 72 70 29 0a 20 7b 0a 40 rp *interp). {.@
0900: 40 20 2d 33 35 35 2c 36 20 2b 33 35 30 2c 34 33 @ -355,6 +350,43
0910: 20 40 40 0a 20 09 20 20 20 20 4e 55 4c 4c 29 3b @@. . NULL);
0920: 0a 20 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 . Tcl_Create
0930: 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 ObjCommand(inter
0940: 70 2c 20 22 3a 3a 6f 6f 3a 3a 63 6f 70 79 22 2c p, "::oo::copy",
0950: 20 54 63 6c 4f 4f 43 6f 70 79 4f 62 6a 65 63 74 TclOOCopyObject
0960: 43 6d 64 2c 20 4e 55 4c 4c 2c 4e 55 4c 4c 29 3b Cmd, NULL,NULL);
0970: 0a 20 20 20 20 20 54 63 6c 4f 4f 49 6e 69 74 49 . TclOOInitI
0980: 6e 66 6f 28 69 6e 74 65 72 70 29 3b 0a 2b 0a 2b nfo(interp);.+.+
0990: 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 4e /*.+ * N
09a0: 6f 77 20 6d 61 6b 65 20 74 68 65 20 63 6c 61 73 ow make the clas
09b0: 73 20 6f 66 20 73 6c 6f 74 73 2e 0a 2b 20 20 20 s of slots..+
09c0: 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66 20 28 */.+.+ if (
09d0: 54 63 6c 4f 4f 44 65 66 69 6e 65 53 6c 6f 74 73 TclOODefineSlots
09e0: 28 66 50 74 72 29 20 21 3d 20 54 43 4c 5f 4f 4b (fPtr) != TCL_OK
09f0: 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c ) {.+.return TCL
0a00: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b _ERROR;.+ }.+
0a10: 20 20 20 20 72 65 74 75 72 6e 20 54 63 6c 5f 45 return Tcl_E
0a20: 76 61 6c 28 69 6e 74 65 72 70 2c 0a 2b 22 3a 3a val(interp,.+"::
0a30: 6f 6f 3a 3a 64 65 66 69 6e 65 20 3a 3a 6f 6f 3a oo::define ::oo:
0a40: 3a 53 6c 6f 74 20 7b 5c 6e 22 0a 2b 22 20 20 20 :Slot {\n".+"
0a50: 20 6d 65 74 68 6f 64 20 47 65 74 20 7b 7d 20 7b method Get {} {
0a60: 65 72 72 6f 72 20 75 6e 69 6d 70 6c 65 6d 65 6e error unimplemen
0a70: 74 65 64 7d 5c 6e 22 0a 2b 22 20 20 20 20 6d 65 ted}\n".+" me
0a80: 74 68 6f 64 20 53 65 74 20 6c 69 73 74 20 7b 65 thod Set list {e
0a90: 72 72 6f 72 20 75 6e 69 6d 70 6c 65 6d 65 6e 74 rror unimplement
0aa0: 65 64 7d 5c 6e 22 0a 2b 22 20 20 20 20 6d 65 74 ed}\n".+" met
0ab0: 68 6f 64 20 2d 73 65 74 20 61 72 67 73 20 7b 5c hod -set args {\
0ac0: 6e 22 0a 2b 22 20 20 20 20 20 20 20 20 75 70 6c n".+" upl
0ad0: 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 5b 6e 61 evel 1 [list [na
0ae0: 6d 65 73 70 61 63 65 20 77 68 69 63 68 20 6d 79 mespace which my
0af0: 5d 20 53 65 74 20 24 61 72 67 73 5d 5c 6e 22 0a ] Set $args]\n".
0b00: 2b 22 20 20 20 20 7d 5c 6e 22 0a 2b 22 20 20 20 +" }\n".+"
0b10: 20 6d 65 74 68 6f 64 20 2d 61 70 70 65 6e 64 20 method -append
0b20: 61 72 67 73 20 7b 5c 6e 22 0a 2b 22 20 20 20 20 args {\n".+"
0b30: 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l
0b40: 69 73 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 77 ist [namespace w
0b50: 68 69 63 68 20 6d 79 5d 20 53 65 74 20 5b 6c 69 hich my] Set [li
0b60: 73 74 22 0a 2b 22 20 20 20 20 20 20 20 20 20 20 st".+"
0b70: 20 20 20 20 20 20 7b 2a 7d 5b 75 70 6c 65 76 65 {*}[upleve
0b80: 6c 20 31 20 5b 6c 69 73 74 20 5b 6e 61 6d 65 73 l 1 [list [names
0b90: 70 61 63 65 20 77 68 69 63 68 20 6d 79 5d 20 47 pace which my] G
0ba0: 65 74 5d 5d 20 7b 2a 7d 24 61 72 67 73 5d 5d 5c et]] {*}$args]]\
0bb0: 6e 22 0a 2b 22 20 20 20 20 7d 5c 6e 22 0a 2b 22 n".+" }\n".+"
0bc0: 20 20 20 20 6d 65 74 68 6f 64 20 2d 63 6c 65 61 method -clea
0bd0: 72 20 7b 7d 20 7b 75 70 6c 65 76 65 6c 20 31 20 r {} {uplevel 1
0be0: 5b 6c 69 73 74 20 5b 6e 61 6d 65 73 70 61 63 65 [list [namespace
0bf0: 20 77 68 69 63 68 20 6d 79 5d 20 53 65 74 20 7b which my] Set {
0c00: 7d 5d 7d 5c 6e 22 0a 2b 22 20 20 20 20 66 6f 72 }]}\n".+" for
0c10: 77 61 72 64 20 2d 2d 64 65 66 61 75 6c 74 2d 6f ward --default-o
0c20: 70 65 72 61 74 69 6f 6e 20 6d 79 20 2d 61 70 70 peration my -app
0c30: 65 6e 64 5c 6e 22 0a 2b 22 20 20 20 20 6d 65 74 end\n".+" met
0c40: 68 6f 64 20 75 6e 6b 6e 6f 77 6e 20 7b 61 72 67 hod unknown {arg
0c50: 73 7d 20 7b 5c 6e 22 0a 2b 22 20 20 20 20 20 20 s} {\n".+"
0c60: 20 20 73 65 74 20 64 65 66 20 2d 2d 64 65 66 61 set def --defa
0c70: 75 6c 74 2d 6f 70 65 72 61 74 69 6f 6e 5c 6e 22 ult-operation\n"
0c80: 0a 2b 22 20 20 20 20 20 20 20 20 69 66 20 7b 5b .+" if {[
0c90: 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 20 3d llength $args] =
0ca0: 3d 20 30 7d 20 7b 5c 6e 22 0a 2b 22 20 20 20 20 = 0} {\n".+"
0cb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [
0cc0: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list
0cd0: 5b 6e 61 6d 65 73 70 61 63 65 20 77 68 69 63 68 [namespace which
0ce0: 20 6d 79 5d 20 24 64 65 66 5d 5d 5c 6e 22 0a 2b my] $def]]\n".+
0cf0: 22 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 " } elsei
0d00: 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 f {![string matc
0d10: 68 20 2d 2a 20 5b 6c 69 6e 64 65 78 20 24 61 72 h -* [lindex $ar
0d20: 67 73 20 30 5d 5d 7d 20 7b 5c 6e 22 0a 2b 22 20 gs 0]]} {\n".+"
0d30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
0d40: 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 n [uplevel 1 [li
0d50: 73 74 20 5b 6e 61 6d 65 73 70 61 63 65 20 77 68 st [namespace wh
0d60: 69 63 68 20 6d 79 5d 20 24 64 65 66 20 7b 2a 7d ich my] $def {*}
0d70: 24 61 72 67 73 5d 5d 5c 6e 22 0a 2b 22 20 20 20 $args]]\n".+"
0d80: 20 20 20 20 20 7d 5c 6e 22 0a 2b 22 20 20 20 20 }\n".+"
0d90: 20 20 20 20 6e 65 78 74 20 7b 2a 7d 24 61 72 67 next {*}$arg
0da0: 73 5c 6e 22 0a 2b 22 20 20 20 20 7d 5c 6e 22 0a s\n".+" }\n".
0db0: 2b 22 20 20 20 20 65 78 70 6f 72 74 20 2d 73 65 +" export -se
0dc0: 74 20 2d 61 70 70 65 6e 64 20 2d 63 6c 65 61 72 t -append -clear
0dd0: 5c 6e 22 0a 2b 22 20 20 20 20 75 6e 65 78 70 6f \n".+" unexpo
0de0: 72 74 20 75 6e 6b 6e 6f 77 6e 20 64 65 73 74 72 rt unknown destr
0df0: 6f 79 5c 6e 22 0a 2b 22 7d 5c 6e 22 0a 2b 22 3a oy\n".+"}\n".+":
0e00: 3a 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 3a :oo::objdefine :
0e10: 3a 6f 6f 3a 3a 64 65 66 69 6e 65 3a 3a 73 75 70 :oo::define::sup
0e20: 65 72 63 6c 61 73 73 20 66 6f 72 77 61 72 64 20 erclass forward
0e30: 2d 2d 64 65 66 61 75 6c 74 2d 6f 70 65 72 61 74 --default-operat
0e40: 69 6f 6e 20 6d 79 20 2d 73 65 74 5c 6e 22 0a 2b ion my -set\n".+
0e50: 22 3a 3a 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 "::oo::objdefine
0e60: 20 3a 3a 6f 6f 3a 3a 64 65 66 69 6e 65 3a 3a 6d ::oo::define::m
0e70: 69 78 69 6e 20 66 6f 72 77 61 72 64 20 2d 2d 64 ixin forward --d
0e80: 65 66 61 75 6c 74 2d 6f 70 65 72 61 74 69 6f 6e efault-operation
0e90: 20 6d 79 20 2d 73 65 74 5c 6e 22 0a 2b 22 3a 3a my -set\n".+"::
0ea0: 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 3a 3a oo::objdefine ::
0eb0: 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 3a 3a 6d oo::objdefine::m
0ec0: 69 78 69 6e 20 66 6f 72 77 61 72 64 20 2d 2d 64 ixin forward --d
0ed0: 65 66 61 75 6c 74 2d 6f 70 65 72 61 74 69 6f 6e efault-operation
0ee0: 20 6d 79 20 2d 73 65 74 5c 6e 22 0a 2b 29 3b 0a my -set\n".+);.
0ef0: 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 37 34 }. .. /*.@@ -74
0f00: 34 2c 37 20 2b 37 37 36 2c 32 33 20 40 40 0a 20 4,7 +776,23 @@.
0f10: 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 72 Object *oPtr
0f20: 29 09 09 2f 2a 20 54 68 65 20 6f 62 6a 65 63 74 )../* The object
0f30: 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 representing th
0f40: 65 20 63 6c 61 73 73 2e 20 2a 2f 0a 20 7b 0a 20 e class. */. {.
0f50: 20 20 20 20 69 6e 74 20 69 3b 0a 2d 20 20 20 20 int i;.-
0f60: 43 6c 61 73 73 20 2a 63 6c 73 50 74 72 20 3d 20 Class *clsPtr =
0f70: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 3b 0a oPtr->classPtr;.
0f80: 2b 20 20 20 20 43 6c 61 73 73 20 2a 63 6c 73 50 + Class *clsP
0f90: 74 72 20 3d 20 6f 50 74 72 2d 3e 63 6c 61 73 73 tr = oPtr->class
0fa0: 50 74 72 2c 20 2a 73 75 62 63 6c 61 73 73 50 74 Ptr, *subclassPt
0fb0: 72 3b 0a 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a r;.+ Object *
0fc0: 69 6e 73 74 61 6e 63 65 50 74 72 3b 0a 2b 0a 2b instancePtr;.+.+
0fd0: 20 20 20 20 46 4f 52 45 41 43 48 28 73 75 62 63 FOREACH(subc
0fe0: 6c 61 73 73 50 74 72 2c 20 63 6c 73 50 74 72 2d lassPtr, clsPtr-
0ff0: 3e 6d 69 78 69 6e 53 75 62 73 29 20 7b 0a 2b 09 >mixinSubs) {.+.
1000: 41 64 64 52 65 66 28 73 75 62 63 6c 61 73 73 50 AddRef(subclassP
1010: 74 72 29 3b 0a 2b 09 41 64 64 52 65 66 28 73 75 tr);.+.AddRef(su
1020: 62 63 6c 61 73 73 50 74 72 2d 3e 74 68 69 73 50 bclassPtr->thisP
1030: 74 72 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 tr);.+ }.+
1040: 20 46 4f 52 45 41 43 48 28 73 75 62 63 6c 61 73 FOREACH(subclas
1050: 73 50 74 72 2c 20 63 6c 73 50 74 72 2d 3e 73 75 sPtr, clsPtr->su
1060: 62 63 6c 61 73 73 65 73 29 20 7b 0a 2b 09 69 66 bclasses) {.+.if
1070: 20 28 21 28 6f 50 74 72 2d 3e 66 6c 61 67 73 20 (!(oPtr->flags
1080: 26 20 52 4f 4f 54 5f 4f 42 4a 45 43 54 29 0a 2b & ROOT_OBJECT).+
1090: 09 09 7c 7c 20 28 73 75 62 63 6c 61 73 73 50 74 ..|| (subclassPt
10a0: 72 2d 3e 74 68 69 73 50 74 72 2d 3e 66 6c 61 67 r->thisPtr->flag
10b0: 73 20 26 20 52 4f 4f 54 5f 43 4c 41 53 53 29 29 s & ROOT_CLASS))
10c0: 20 7b 0a 2b 09 20 20 20 20 41 64 64 52 65 66 28 {.+. AddRef(
10d0: 73 75 62 63 6c 61 73 73 50 74 72 29 3b 0a 2b 09 subclassPtr);.+.
10e0: 20 20 20 20 41 64 64 52 65 66 28 73 75 62 63 6c AddRef(subcl
10f0: 61 73 73 50 74 72 2d 3e 74 68 69 73 50 74 72 29 assPtr->thisPtr)
1100: 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 ;.+.}.+ }.+
1110: 20 20 46 4f 52 45 41 43 48 28 69 6e 73 74 61 6e FOREACH(instan
1120: 63 65 50 74 72 2c 20 63 6c 73 50 74 72 2d 3e 69 cePtr, clsPtr->i
1130: 6e 73 74 61 6e 63 65 73 29 20 7b 0a 2b 09 41 64 nstances) {.+.Ad
1140: 64 52 65 66 28 69 6e 73 74 61 6e 63 65 50 74 72 dRef(instancePtr
1150: 29 3b 0a 2b 20 20 20 20 7d 0a 20 0a 20 20 20 20 );.+ }. .
1160: 20 2f 2a 0a 20 20 20 20 20 20 2a 20 4d 75 73 74 /*. * Must
1170: 20 65 6d 70 74 79 20 6c 69 73 74 20 62 65 66 6f empty list befo
1180: 72 65 20 70 72 6f 63 65 73 73 69 6e 67 20 74 68 re processing th
1190: 65 20 6d 65 6d 62 65 72 73 20 6f 66 20 74 68 65 e members of the
11a0: 20 6c 69 73 74 20 73 6f 20 74 68 61 74 0a 40 40 list so that.@@
11b0: 20 2d 37 35 33 2c 31 35 20 2b 38 30 31 2c 31 30 -753,15 +801,10
11c0: 20 40 40 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 20 @@. */. .
11d0: 20 20 20 20 69 66 20 28 63 6c 73 50 74 72 2d 3e if (clsPtr->
11e0: 6d 69 78 69 6e 53 75 62 73 2e 73 69 7a 65 20 3e mixinSubs.size >
11f0: 20 30 29 20 7b 0a 2d 09 4c 49 53 54 5f 44 59 4e 0) {.-.LIST_DYN
1200: 41 4d 49 43 28 73 74 72 75 63 74 20 43 6c 61 73 AMIC(struct Clas
1210: 73 20 2a 29 20 73 75 62 63 6c 61 73 73 65 73 3b s *) subclasses;
1220: 0a 2d 09 43 6c 61 73 73 20 2a 73 75 62 63 6c 61 .-.Class *subcla
1230: 73 73 50 74 72 3b 0a 2b 09 4c 49 53 54 5f 44 59 ssPtr;.+.LIST_DY
1240: 4e 41 4d 49 43 28 73 74 72 75 63 74 20 43 6c 61 NAMIC(struct Cla
1250: 73 73 20 2a 29 20 6d 69 78 69 6e 53 75 62 73 3b ss *) mixinSubs;
1260: 0a 20 0a 2d 09 54 45 4d 50 5f 41 4e 44 5f 43 4c . .-.TEMP_AND_CL
1270: 45 41 52 28 73 75 62 63 6c 61 73 73 65 73 2c 20 EAR(subclasses,
1280: 63 6c 73 50 74 72 2d 3e 6d 69 78 69 6e 53 75 62 clsPtr->mixinSub
1290: 73 29 3b 0a 2d 09 46 4f 52 45 41 43 48 28 73 75 s);.-.FOREACH(su
12a0: 62 63 6c 61 73 73 50 74 72 2c 20 73 75 62 63 6c bclassPtr, subcl
12b0: 61 73 73 65 73 29 20 7b 0a 2d 09 20 20 20 20 41 asses) {.-. A
12c0: 64 64 52 65 66 28 73 75 62 63 6c 61 73 73 50 74 ddRef(subclassPt
12d0: 72 29 3b 0a 2d 09 20 20 20 20 41 64 64 52 65 66 r);.-. AddRef
12e0: 28 73 75 62 63 6c 61 73 73 50 74 72 2d 3e 74 68 (subclassPtr->th
12f0: 69 73 50 74 72 29 3b 0a 2d 09 7d 0a 2d 09 46 4f isPtr);.-.}.-.FO
1300: 52 45 41 43 48 28 73 75 62 63 6c 61 73 73 50 74 REACH(subclassPt
1310: 72 2c 20 73 75 62 63 6c 61 73 73 65 73 29 20 7b r, subclasses) {
1320: 0a 2b 09 54 45 4d 50 5f 41 4e 44 5f 43 4c 45 41 .+.TEMP_AND_CLEA
1330: 52 28 6d 69 78 69 6e 53 75 62 73 2c 20 63 6c 73 R(mixinSubs, cls
1340: 50 74 72 2d 3e 6d 69 78 69 6e 53 75 62 73 29 3b Ptr->mixinSubs);
1350: 0a 2b 09 46 4f 52 45 41 43 48 28 73 75 62 63 6c .+.FOREACH(subcl
1360: 61 73 73 50 74 72 2c 20 6d 69 78 69 6e 53 75 62 assPtr, mixinSub
1370: 73 29 20 7b 0a 20 09 20 20 20 20 72 65 67 69 73 s) {. . regis
1380: 74 65 72 20 4f 62 6a 65 63 74 20 2a 73 75 62 4f ter Object *subO
1390: 62 6a 20 3d 20 73 75 62 63 6c 61 73 73 50 74 72 bj = subclassPtr
13a0: 2d 3e 74 68 69 73 50 74 72 3b 0a 20 0a 20 09 20 ->thisPtr;. . .
13b0: 20 20 20 69 66 20 28 21 28 73 75 62 4f 62 6a 2d if (!(subObj-
13c0: 3e 66 6c 61 67 73 20 26 20 4f 42 4a 45 43 54 5f >flags & OBJECT_
13d0: 44 45 4c 45 54 45 44 29 29 20 7b 0a 40 40 20 2d DELETED)) {.@@ -
13e0: 37 37 31 2c 34 30 20 2b 38 31 34 2c 33 36 20 40 771,40 +814,36 @
13f0: 40 0a 20 09 20 20 20 20 44 65 6c 52 65 66 28 73 @. . DelRef(s
1400: 75 62 4f 62 6a 29 3b 0a 20 09 20 20 20 20 44 65 ubObj);. . De
1410: 6c 52 65 66 28 73 75 62 63 6c 61 73 73 50 74 72 lRef(subclassPtr
1420: 29 3b 0a 20 09 7d 0a 2d 09 63 6b 66 72 65 65 28 );. .}.-.ckfree(
1430: 28 63 68 61 72 20 2a 29 20 73 75 62 63 6c 61 73 (char *) subclas
1440: 73 65 73 2e 6c 69 73 74 29 3b 0a 2b 09 63 6b 66 ses.list);.+.ckf
1450: 72 65 65 28 28 63 68 61 72 20 2a 29 20 6d 69 78 ree((char *) mix
1460: 69 6e 53 75 62 73 2e 6c 69 73 74 29 3b 0a 20 20 inSubs.list);.
1470: 20 20 20 7d 0a 20 0a 20 20 20 20 20 69 66 20 28 }. . if (
1480: 63 6c 73 50 74 72 2d 3e 73 75 62 63 6c 61 73 73 clsPtr->subclass
1490: 65 73 2e 73 69 7a 65 20 3e 20 30 29 20 7b 0a 20 es.size > 0) {.
14a0: 09 4c 49 53 54 5f 44 59 4e 41 4d 49 43 28 43 6c .LIST_DYNAMIC(Cl
14b0: 61 73 73 20 2a 29 20 73 75 62 63 6c 61 73 73 65 ass *) subclasse
14c0: 73 3b 0a 2d 09 43 6c 61 73 73 20 2a 73 75 62 63 s;.-.Class *subc
14d0: 6c 61 73 73 50 74 72 3b 0a 20 0a 20 09 54 45 4d lassPtr;. . .TEM
14e0: 50 5f 41 4e 44 5f 43 4c 45 41 52 28 73 75 62 63 P_AND_CLEAR(subc
14f0: 6c 61 73 73 65 73 2c 20 63 6c 73 50 74 72 2d 3e lasses, clsPtr->
1500: 73 75 62 63 6c 61 73 73 65 73 29 3b 0a 20 09 46 subclasses);. .F
1510: 4f 52 45 41 43 48 28 73 75 62 63 6c 61 73 73 50 OREACH(subclassP
1520: 74 72 2c 20 73 75 62 63 6c 61 73 73 65 73 29 20 tr, subclasses)
1530: 7b 0a 2d 09 20 20 20 20 41 64 64 52 65 66 28 73 {.-. AddRef(s
1540: 75 62 63 6c 61 73 73 50 74 72 29 3b 0a 2d 09 20 ubclassPtr);.-.
1550: 20 20 20 41 64 64 52 65 66 28 73 75 62 63 6c 61 AddRef(subcla
1560: 73 73 50 74 72 2d 3e 74 68 69 73 50 74 72 29 3b ssPtr->thisPtr);
1570: 0a 2d 09 7d 0a 2d 09 46 4f 52 45 41 43 48 28 73 .-.}.-.FOREACH(s
1580: 75 62 63 6c 61 73 73 50 74 72 2c 20 73 75 62 63 ubclassPtr, subc
1590: 6c 61 73 73 65 73 29 20 7b 0a 20 09 20 20 20 20 lasses) {. .
15a0: 72 65 67 69 73 74 65 72 20 4f 62 6a 65 63 74 20 register Object
15b0: 2a 73 75 62 4f 62 6a 20 3d 20 73 75 62 63 6c 61 *subObj = subcla
15c0: 73 73 50 74 72 2d 3e 74 68 69 73 50 74 72 3b 0a ssPtr->thisPtr;.
15d0: 20 0a 20 09 20 20 20 20 69 66 20 28 21 28 73 75 . . if (!(su
15e0: 62 4f 62 6a 2d 3e 66 6c 61 67 73 20 26 20 4f 42 bObj->flags & OB
15f0: 4a 45 43 54 5f 44 45 4c 45 54 45 44 29 29 20 7b JECT_DELETED)) {
1600: 0a 20 09 09 73 75 62 4f 62 6a 2d 3e 66 6c 61 67 . ..subObj->flag
1610: 73 20 7c 3d 20 4f 42 4a 45 43 54 5f 44 45 4c 45 s |= OBJECT_DELE
1620: 54 45 44 3b 0a 20 09 09 54 63 6c 5f 44 65 6c 65 TED;. ..Tcl_Dele
1630: 74 65 43 6f 6d 6d 61 6e 64 46 72 6f 6d 54 6f 6b teCommandFromTok
1640: 65 6e 28 69 6e 74 65 72 70 2c 20 73 75 62 4f 62 en(interp, subOb
1650: 6a 2d 3e 63 6f 6d 6d 61 6e 64 29 3b 0a 20 09 20 j->command);. .
1660: 20 20 20 7d 0a 2d 09 20 20 20 20 44 65 6c 52 65 }.-. DelRe
1670: 66 28 73 75 62 4f 62 6a 29 3b 0a 2d 09 20 20 20 f(subObj);.-.
1680: 20 44 65 6c 52 65 66 28 73 75 62 63 6c 61 73 73 DelRef(subclass
1690: 50 74 72 29 3b 0a 2b 09 20 20 20 20 69 66 20 28 Ptr);.+. if (
16a0: 21 28 6f 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 !(oPtr->flags &
16b0: 52 4f 4f 54 5f 4f 42 4a 45 43 54 29 20 7c 7c 20 ROOT_OBJECT) ||
16c0: 28 73 75 62 4f 62 6a 2d 3e 66 6c 61 67 73 20 26 (subObj->flags &
16d0: 20 52 4f 4f 54 5f 43 4c 41 53 53 29 29 20 7b 0a ROOT_CLASS)) {.
16e0: 2b 09 09 44 65 6c 52 65 66 28 73 75 62 4f 62 6a +..DelRef(subObj
16f0: 29 3b 0a 2b 09 09 44 65 6c 52 65 66 28 73 75 62 );.+..DelRef(sub
1700: 63 6c 61 73 73 50 74 72 29 3b 0a 2b 09 20 20 20 classPtr);.+.
1710: 20 7d 0a 20 09 7d 0a 20 09 63 6b 66 72 65 65 28 }. .}. .ckfree(
1720: 28 63 68 61 72 20 2a 29 20 73 75 62 63 6c 61 73 (char *) subclas
1730: 73 65 73 2e 6c 69 73 74 29 3b 0a 20 20 20 20 20 ses.list);.
1740: 7d 0a 2b 20 20 20 20 69 66 20 28 6f 50 74 72 2d }.+ if (oPtr-
1750: 3e 66 6c 61 67 73 20 26 20 52 4f 4f 54 5f 43 4c >flags & ROOT_CL
1760: 41 53 53 29 20 7b 0a 2b 09 6f 50 74 72 2d 3e 66 ASS) {.+.oPtr->f
1770: 50 74 72 2d 3e 63 6c 61 73 73 43 6c 73 20 3d 20 Ptr->classCls =
1780: 4e 55 4c 4c 3b 0a 2b 20 20 20 20 7d 0a 20 0a 20 NULL;.+ }. .
1790: 20 20 20 20 69 66 20 28 63 6c 73 50 74 72 2d 3e if (clsPtr->
17a0: 69 6e 73 74 61 6e 63 65 73 2e 73 69 7a 65 20 3e instances.size >
17b0: 20 30 29 20 7b 0a 20 09 4c 49 53 54 5f 44 59 4e 0) {. .LIST_DYN
17c0: 41 4d 49 43 28 4f 62 6a 65 63 74 20 2a 29 20 69 AMIC(Object *) i
17d0: 6e 73 74 61 6e 63 65 73 3b 0a 2d 09 4f 62 6a 65 nstances;.-.Obje
17e0: 63 74 20 2a 69 6e 73 74 61 6e 63 65 50 74 72 3b ct *instancePtr;
17f0: 0a 20 0a 20 09 54 45 4d 50 5f 41 4e 44 5f 43 4c . . .TEMP_AND_CL
1800: 45 41 52 28 69 6e 73 74 61 6e 63 65 73 2c 20 63 EAR(instances, c
1810: 6c 73 50 74 72 2d 3e 69 6e 73 74 61 6e 63 65 73 lsPtr->instances
1820: 29 3b 0a 20 09 46 4f 52 45 41 43 48 28 69 6e 73 );. .FOREACH(ins
1830: 74 61 6e 63 65 50 74 72 2c 20 69 6e 73 74 61 6e tancePtr, instan
1840: 63 65 73 29 20 7b 0a 2d 09 20 20 20 20 41 64 64 ces) {.-. Add
1850: 52 65 66 28 69 6e 73 74 61 6e 63 65 50 74 72 29 Ref(instancePtr)
1860: 3b 0a 2d 09 7d 0a 2d 09 46 4f 52 45 41 43 48 28 ;.-.}.-.FOREACH(
1870: 69 6e 73 74 61 6e 63 65 50 74 72 2c 20 69 6e 73 instancePtr, ins
1880: 74 61 6e 63 65 73 29 20 7b 0a 20 09 20 20 20 20 tances) {. .
1890: 69 66 20 28 21 28 69 6e 73 74 61 6e 63 65 50 74 if (!(instancePt
18a0: 72 2d 3e 66 6c 61 67 73 20 26 20 4f 42 4a 45 43 r->flags & OBJEC
18b0: 54 5f 44 45 4c 45 54 45 44 29 29 20 7b 0a 20 09 T_DELETED)) {. .
18c0: 09 69 6e 73 74 61 6e 63 65 50 74 72 2d 3e 66 6c .instancePtr->fl
18d0: 61 67 73 20 7c 3d 20 4f 42 4a 45 43 54 5f 44 45 ags |= OBJECT_DE
18e0: 4c 45 54 45 44 3b 0a 20 09 09 54 63 6c 5f 44 65 LETED;. ..Tcl_De
18f0: 6c 65 74 65 43 6f 6d 6d 61 6e 64 46 72 6f 6d 54 leteCommandFromT
1900: 6f 6b 65 6e 28 69 6e 74 65 72 70 2c 20 69 6e 73 oken(interp, ins
1910: 74 61 6e 63 65 50 74 72 2d 3e 63 6f 6d 6d 61 6e tancePtr->comman
1920: 64 29 3b 0a 40 40 20 2d 38 34 34 2c 37 20 2b 38 d);.@@ -844,7 +8
1930: 38 33 2c 36 20 40 40 0a 20 09 63 6c 73 50 74 72 83,6 @@. .clsPtr
1940: 2d 3e 66 69 6c 74 65 72 73 2e 6e 75 6d 20 3d 20 ->filters.num =
1950: 30 3b 0a 20 20 20 20 20 7d 0a 20 0a 2d 0a 20 20 0;. }. .-.
1960: 20 20 20 69 66 20 28 63 6c 73 50 74 72 2d 3e 6d if (clsPtr->m
1970: 65 74 61 64 61 74 61 50 74 72 20 21 3d 20 4e 55 etadataPtr != NU
1980: 4c 4c 29 20 7b 0a 20 09 46 4f 52 45 41 43 48 5f LL) {. .FOREACH_
1990: 48 41 53 48 5f 44 45 43 4c 53 3b 0a 20 09 54 63 HASH_DECLS;. .Tc
19a0: 6c 5f 4f 62 6a 65 63 74 4d 65 74 61 64 61 74 61 l_ObjectMetadata
19b0: 54 79 70 65 20 2a 6d 65 74 61 64 61 74 61 54 79 Type *metadataTy
19c0: 70 65 50 74 72 3b 0a 40 40 20 2d 31 35 34 38 2c pePtr;.@@ -1548,
19d0: 37 20 2b 31 35 38 36 2c 37 20 40 40 0a 20 20 20 7 +1586,7 @@.
19e0: 20 20 20 2a 2f 0a 20 0a 20 20 20 20 20 6f 32 50 */. . o2P
19f0: 74 72 2d 3e 66 6c 61 67 73 20 3d 20 6f 50 74 72 tr->flags = oPtr
1a00: 2d 3e 66 6c 61 67 73 20 26 20 7e 28 0a 2d 09 20 ->flags & ~(.-.
1a10: 20 20 20 4f 42 4a 45 43 54 5f 44 45 4c 45 54 45 OBJECT_DELETE
1a20: 44 20 7c 20 52 4f 4f 54 5f 4f 42 4a 45 43 54 20 D | ROOT_OBJECT
1a30: 7c 20 46 49 4c 54 45 52 5f 48 41 4e 44 4c 49 4e | FILTER_HANDLIN
1a40: 47 29 3b 0a 2b 09 20 20 20 20 4f 42 4a 45 43 54 G);.+. OBJECT
1a50: 5f 44 45 4c 45 54 45 44 20 7c 20 52 4f 4f 54 5f _DELETED | ROOT_
1a60: 4f 42 4a 45 43 54 20 7c 20 52 4f 4f 54 5f 43 4c OBJECT | ROOT_CL
1a70: 41 53 53 20 7c 20 46 49 4c 54 45 52 5f 48 41 4e ASS | FILTER_HAN
1a80: 44 4c 49 4e 47 29 3b 0a 20 0a 20 20 20 20 20 2f DLING);. . /
1a90: 2a 0a 20 20 20 20 20 20 2a 20 43 6f 70 79 20 74 *. * Copy t
1aa0: 68 65 20 6f 62 6a 65 63 74 27 73 20 6d 65 74 61 he object's meta
1ab0: 64 61 74 61 2e 0a 40 40 20 2d 32 30 33 35 2c 38 data..@@ -2035,8
1ac0: 20 2b 32 30 37 33 2c 31 33 20 40 40 0a 20 20 20 +2073,13 @@.
1ad0: 20 20 69 6e 74 20 72 65 73 75 6c 74 3b 0a 20 0a int result;. .
1ae0: 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3c 20 if (objc <
1af0: 32 29 20 7b 0a 2d 09 54 63 6c 5f 57 72 6f 6e 67 2) {.-.Tcl_Wrong
1b00: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 NumArgs(interp,
1b10: 31 2c 20 6f 62 6a 76 2c 20 22 6d 65 74 68 6f 64 1, objv, "method
1b20: 20 3f 61 72 67 20 2e 2e 2e 3f 22 29 3b 0a 2d 09 ?arg ...?");.-.
1b30: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
1b40: 3b 0a 2b 09 63 6f 6e 74 65 78 74 50 74 72 20 3d ;.+.contextPtr =
1b50: 20 54 63 6c 4f 4f 47 65 74 43 61 6c 6c 43 6f 6e TclOOGetCallCon
1b60: 74 65 78 74 28 6f 50 74 72 2c 20 4e 55 4c 4c 2c text(oPtr, NULL,
1b70: 0a 2b 09 09 66 6c 61 67 73 20 7c 20 28 6f 50 74 .+..flags | (oPt
1b80: 72 2d 3e 66 6c 61 67 73 20 26 20 46 49 4c 54 45 r->flags & FILTE
1b90: 52 5f 48 41 4e 44 4c 49 4e 47 29 20 7c 20 46 4f R_HANDLING) | FO
1ba0: 52 43 45 5f 55 4e 4b 4e 4f 57 4e 29 3b 0a 2b 09 RCE_UNKNOWN);.+.
1bb0: 41 64 64 52 65 66 28 6f 50 74 72 29 3b 0a 2b 09 AddRef(oPtr);.+.
1bc0: 72 65 73 75 6c 74 20 3d 20 54 63 6c 4f 4f 49 6e result = TclOOIn
1bd0: 76 6f 6b 65 43 6f 6e 74 65 78 74 28 69 6e 74 65 vokeContext(inte
1be0: 72 70 2c 20 63 6f 6e 74 65 78 74 50 74 72 2c 20 rp, contextPtr,
1bf0: 6f 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a 2b 09 54 objc, objv);.+.T
1c00: 63 6c 4f 4f 44 65 6c 65 74 65 43 6f 6e 74 65 78 clOODeleteContex
1c10: 74 28 63 6f 6e 74 65 78 74 50 74 72 29 3b 0a 2b t(contextPtr);.+
1c20: 09 44 65 6c 52 65 66 28 6f 50 74 72 29 3b 0a 2b .DelRef(oPtr);.+
1c30: 09 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a .return result;.
1c40: 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 2f 2a }. . /*
1c50: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f .Index: generic/
1c60: 74 63 6c 4f 4f 42 61 73 69 63 2e 63 0a 3d 3d 3d tclOOBasic.c.===
1c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ca0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1cb0: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 .RCS file: /cvsr
1cc0: 6f 6f 74 2f 74 63 6c 2f 6f 6f 63 6f 72 65 2f 67 oot/tcl/oocore/g
1cd0: 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 42 61 73 69 eneric/tclOOBasi
1ce0: 63 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 c.c,v.retrieving
1cf0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 38 0a 64 69 revision 1.8.di
1d00: 66 66 20 2d 75 20 2d 72 31 2e 38 20 74 63 6c 4f ff -u -r1.8 tclO
1d10: 4f 42 61 73 69 63 2e 63 0a 2d 2d 2d 20 67 65 6e OBasic.c.--- gen
1d20: 65 72 69 63 2f 74 63 6c 4f 4f 42 61 73 69 63 2e eric/tclOOBasic.
1d30: 63 09 32 20 46 65 62 20 32 30 31 30 20 30 39 3a c.2 Feb 2010 09:
1d40: 31 31 3a 33 30 20 2d 30 30 30 30 09 31 2e 38 0a 11:30 -0000.1.8.
1d50: 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f +++ generic/tclO
1d60: 4f 42 61 73 69 63 2e 63 09 32 32 20 4f 63 74 20 OBasic.c.22 Oct
1d70: 32 30 31 30 20 31 35 3a 32 35 3a 33 32 20 2d 30 2010 15:25:32 -0
1d80: 30 30 30 0a 40 40 20 2d 33 36 34 2c 37 20 2b 33 000.@@ -364,7 +3
1d90: 36 34 2c 37 20 40 40 0a 20 20 20 20 20 69 6e 74 64,7 @@. int
1da0: 20 6e 75 6d 4d 65 74 68 6f 64 4e 61 6d 65 73 2c numMethodNames,
1db0: 20 69 2c 20 73 6b 69 70 20 3d 20 54 63 6c 5f 4f i, skip = Tcl_O
1dc0: 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 bjectContextSkip
1dd0: 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 pedArgs(context)
1de0: 3b 0a 20 0a 20 20 20 20 20 69 66 20 28 6f 62 6a ;. . if (obj
1df0: 63 20 3c 20 73 6b 69 70 2b 31 29 20 7b 0a 2d 09 c < skip+1) {.-.
1e00: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 Tcl_WrongNumArgs
1e10: 28 69 6e 74 65 72 70 2c 20 73 6b 69 70 2c 20 6f (interp, skip, o
1e20: 62 6a 76 2c 20 22 6d 65 74 68 6f 64 4e 61 6d 65 bjv, "methodName
1e30: 20 3f 61 72 67 20 2e 2e 2e 3f 22 29 3b 0a 2b 09 ?arg ...?");.+.
1e40: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 Tcl_WrongNumArgs
1e50: 28 69 6e 74 65 72 70 2c 20 73 6b 69 70 2c 20 6f (interp, skip, o
1e60: 62 6a 76 2c 20 22 6d 65 74 68 6f 64 20 3f 61 72 bjv, "method ?ar
1e70: 67 20 2e 2e 2e 3f 22 29 3b 0a 20 09 72 65 74 75 g ...?");. .retu
1e80: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 rn TCL_ERROR;.
1e90: 20 20 20 7d 0a 20 0a 49 6e 64 65 78 3a 20 67 65 }. .Index: ge
1ea0: 6e 65 72 69 63 2f 74 63 6c 4f 4f 43 61 6c 6c 2e neric/tclOOCall.
1eb0: 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d c.==============
1ec0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ed0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ee0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ef0: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 =====.RCS file:
1f00: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 6f 6f 63 /cvsroot/tcl/ooc
1f10: 6f 72 65 2f 67 65 6e 65 72 69 63 2f 74 63 6c 4f ore/generic/tclO
1f20: 4f 43 61 6c 6c 2e 63 2c 76 0a 72 65 74 72 69 65 OCall.c,v.retrie
1f30: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
1f40: 32 37 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 32 27.diff -u -r1.2
1f50: 37 20 74 63 6c 4f 4f 43 61 6c 6c 2e 63 0a 2d 2d 7 tclOOCall.c.--
1f60: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 43 - generic/tclOOC
1f70: 61 6c 6c 2e 63 09 31 34 20 4f 63 74 20 32 30 30 all.c.14 Oct 200
1f80: 38 20 30 38 3a 31 30 3a 35 39 20 2d 30 30 30 30 8 08:10:59 -0000
1f90: 09 31 2e 32 37 0a 2b 2b 2b 20 67 65 6e 65 72 69 .1.27.+++ generi
1fa0: 63 2f 74 63 6c 4f 4f 43 61 6c 6c 2e 63 09 32 32 c/tclOOCall.c.22
1fb0: 20 4f 63 74 20 32 30 31 30 20 31 35 3a 32 35 3a Oct 2010 15:25:
1fc0: 33 32 20 2d 30 30 30 30 0a 40 40 20 2d 33 39 2c 32 -0000.@@ -39,
1fd0: 37 20 2b 33 39 2c 37 20 40 40 0a 20 23 64 65 66 7 +39,7 @@. #def
1fe0: 69 6e 65 20 44 45 46 49 4e 49 54 45 5f 50 52 4f ine DEFINITE_PRO
1ff0: 54 45 43 54 45 44 20 30 78 31 30 30 30 30 30 0a TECTED 0x100000.
2000: 20 23 64 65 66 69 6e 65 20 44 45 46 49 4e 49 54 #define DEFINIT
2010: 45 5f 50 55 42 4c 49 43 20 20 20 20 30 78 32 30 E_PUBLIC 0x20
2020: 30 30 30 30 0a 20 23 64 65 66 69 6e 65 20 4b 4e 0000. #define KN
2030: 4f 57 4e 5f 53 54 41 54 45 09 20 20 20 28 44 45 OWN_STATE. (DE
2040: 46 49 4e 49 54 45 5f 50 52 4f 54 45 43 54 45 44 FINITE_PROTECTED
2050: 20 7c 20 44 45 46 49 4e 49 54 45 5f 50 55 42 4c | DEFINITE_PUBL
2060: 49 43 29 0a 2d 23 64 65 66 69 6e 65 20 53 50 45 IC).-#define SPE
2070: 43 49 41 4c 09 09 20 20 20 28 43 4f 4e 53 54 52 CIAL.. (CONSTR
2080: 55 43 54 4f 52 20 7c 20 44 45 53 54 52 55 43 54 UCTOR | DESTRUCT
2090: 4f 52 29 0a 2b 23 64 65 66 69 6e 65 20 53 50 45 OR).+#define SPE
20a0: 43 49 41 4c 09 09 20 20 20 28 43 4f 4e 53 54 52 CIAL.. (CONSTR
20b0: 55 43 54 4f 52 20 7c 20 44 45 53 54 52 55 43 54 UCTOR | DESTRUCT
20c0: 4f 52 20 7c 20 46 4f 52 43 45 5f 55 4e 4b 4e 4f OR | FORCE_UNKNO
20d0: 57 4e 29 0a 20 0a 20 2f 2a 0a 20 20 2a 20 46 75 WN). . /*. * Fu
20e0: 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72 61 74 69 nction declarati
20f0: 6f 6e 73 20 66 6f 72 20 74 68 69 6e 67 73 20 64 ons for things d
2100: 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 66 efined in this f
2110: 69 6c 65 2e 0a 40 40 20 2d 39 35 34 2c 36 20 2b ile..@@ -954,6 +
2120: 39 35 34 2c 32 32 20 40 40 0a 20 20 20 20 20 63 954,22 @@. c
2130: 62 2e 6f 50 74 72 20 3d 20 6f 50 74 72 3b 0a 20 b.oPtr = oPtr;.
2140: 0a 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a . /*.+ *
2150: 20 49 66 20 77 65 27 72 65 20 77 6f 72 6b 69 6e If we're workin
2160: 67 20 77 69 74 68 20 61 20 66 6f 72 63 65 64 20 g with a forced
2170: 75 73 65 20 6f 66 20 75 6e 6b 6e 6f 77 6e 2c 20 use of unknown,
2180: 64 6f 20 74 68 61 74 20 6e 6f 77 2e 0a 2b 20 20 do that now..+
2190: 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66 20 */.+.+ if
21a0: 28 66 6c 61 67 73 20 26 20 46 4f 52 43 45 5f 55 (flags & FORCE_U
21b0: 4e 4b 4e 4f 57 4e 29 20 7b 0a 2b 09 41 64 64 53 NKNOWN) {.+.AddS
21c0: 69 6d 70 6c 65 43 68 61 69 6e 54 6f 43 61 6c 6c impleChainToCall
21d0: 43 6f 6e 74 65 78 74 28 6f 50 74 72 2c 20 6f 50 Context(oPtr, oP
21e0: 74 72 2d 3e 66 50 74 72 2d 3e 75 6e 6b 6e 6f 77 tr->fPtr->unknow
21f0: 6e 4d 65 74 68 6f 64 4e 61 6d 65 4f 62 6a 2c 0a nMethodNameObj,.
2200: 2b 09 09 26 63 62 2c 20 4e 55 4c 4c 2c 20 30 2c +..&cb, NULL, 0,
2210: 20 4e 55 4c 4c 29 3b 0a 2b 09 63 61 6c 6c 50 74 NULL);.+.callPt
2220: 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 4f 4f 5f 55 r->flags |= OO_U
2230: 4e 4b 4e 4f 57 4e 5f 4d 45 54 48 4f 44 3b 0a 2b NKNOWN_METHOD;.+
2240: 09 63 61 6c 6c 50 74 72 2d 3e 65 70 6f 63 68 20 .callPtr->epoch
2250: 3d 20 2d 31 3b 0a 2b 09 69 66 20 28 63 6f 75 6e = -1;.+.if (coun
2260: 74 20 3d 3d 20 63 61 6c 6c 50 74 72 2d 3e 6e 75 t == callPtr->nu
2270: 6d 43 68 61 69 6e 29 20 7b 0a 2b 09 20 20 20 20 mChain) {.+.
2280: 54 63 6c 4f 4f 44 65 6c 65 74 65 43 68 61 69 6e TclOODeleteChain
2290: 28 63 61 6c 6c 50 74 72 29 3b 0a 2b 09 20 20 20 (callPtr);.+.
22a0: 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b 09 return NULL;.+.
22b0: 7d 0a 2b 09 67 6f 74 6f 20 72 65 74 75 72 6e 43 }.+.goto returnC
22c0: 6f 6e 74 65 78 74 3b 0a 2b 20 20 20 20 7d 0a 2b ontext;.+ }.+
22d0: 0a 2b 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a .+ /*. *
22e0: 20 41 64 64 20 61 6c 6c 20 64 65 66 69 6e 65 64 Add all defined
22f0: 20 66 69 6c 74 65 72 73 20 28 69 66 20 61 6e 79 filters (if any
2300: 2c 20 61 6e 64 20 69 66 20 77 65 27 72 65 20 67 , and if we're g
2310: 6f 69 6e 67 20 74 6f 20 62 65 20 70 72 6f 63 65 oing to be proce
2320: 73 73 69 6e 67 0a 20 20 20 20 20 20 2a 20 74 68 ssing. * th
2330: 65 6d 3b 20 74 68 65 79 27 72 65 20 6e 6f 74 20 em; they're not
2340: 70 72 6f 63 65 73 73 65 64 20 66 6f 72 20 63 6f processed for co
2350: 6e 73 74 72 75 63 74 6f 72 73 2c 20 64 65 73 74 nstructors, dest
2360: 72 75 63 74 6f 72 73 20 6f 72 20 77 68 65 6e 20 ructors or when
2370: 77 65 27 72 65 0a 20 20 20 20 20 20 2a 20 69 6e we're. * in
2380: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 70 the middle of p
2390: 72 6f 63 65 73 73 69 6e 67 20 61 20 66 69 6c 74 rocessing a filt
23a0: 65 72 29 2e 0a 49 6e 64 65 78 3a 20 67 65 6e 65 er)..Index: gene
23b0: 72 69 63 2f 74 63 6c 4f 4f 44 65 66 69 6e 65 43 ric/tclOODefineC
23c0: 6d 64 73 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d mds.c.==========
23d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2400: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 =========.RCS fi
2410: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c le: /cvsroot/tcl
2420: 2f 6f 6f 63 6f 72 65 2f 67 65 6e 65 72 69 63 2f /oocore/generic/
2430: 74 63 6c 4f 4f 44 65 66 69 6e 65 43 6d 64 73 2e tclOODefineCmds.
2440: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 c,v.retrieving r
2450: 65 76 69 73 69 6f 6e 20 31 2e 32 37 0a 64 69 66 evision 1.27.dif
2460: 66 20 2d 75 20 2d 72 31 2e 32 37 20 74 63 6c 4f f -u -r1.27 tclO
2470: 4f 44 65 66 69 6e 65 43 6d 64 73 2e 63 0a 2d 2d ODefineCmds.c.--
2480: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 44 - generic/tclOOD
2490: 65 66 69 6e 65 43 6d 64 73 2e 63 09 34 20 4d 61 efineCmds.c.4 Ma
24a0: 72 20 32 30 31 30 20 32 33 3a 35 31 3a 31 36 20 r 2010 23:51:16
24b0: 2d 30 30 30 30 09 31 2e 32 37 0a 2b 2b 2b 20 67 -0000.1.27.+++ g
24c0: 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 44 65 66 69 eneric/tclOODefi
24d0: 6e 65 43 6d 64 73 2e 63 09 32 32 20 4f 63 74 20 neCmds.c.22 Oct
24e0: 32 30 31 30 20 31 35 3a 32 35 3a 33 32 20 2d 30 2010 15:25:32 -0
24f0: 30 30 30 0a 40 40 20 2d 31 39 2c 36 20 2b 31 39 000.@@ -19,6 +19
2500: 2c 32 33 20 40 40 0a 20 23 69 6e 63 6c 75 64 65 ,23 @@. #include
2510: 20 22 74 63 6c 4f 4f 49 6e 74 2e 68 22 0a 20 0a "tclOOInt.h". .
2520: 20 2f 2a 0a 2b 20 2a 20 53 6f 6d 65 20 74 68 69 /*.+ * Some thi
2530: 6e 67 73 20 74 68 61 74 20 6d 61 6b 65 20 69 74 ngs that make it
2540: 20 65 61 73 69 65 72 20 74 6f 20 64 65 63 6c 61 easier to decla
2550: 72 65 20 61 20 73 6c 6f 74 2e 0a 2b 20 2a 2f 0a re a slot..+ */.
2560: 2b 0a 2b 73 74 72 75 63 74 20 44 65 63 6c 61 72 +.+struct Declar
2570: 65 64 53 6c 6f 74 20 7b 0a 2b 20 20 20 20 63 6f edSlot {.+ co
2580: 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 3b 0a nst char *name;.
2590: 2b 20 20 20 20 63 6f 6e 73 74 20 54 63 6c 5f 4d + const Tcl_M
25a0: 65 74 68 6f 64 54 79 70 65 20 67 65 74 74 65 72 ethodType getter
25b0: 54 79 70 65 3b 0a 2b 20 20 20 20 63 6f 6e 73 74 Type;.+ const
25c0: 20 54 63 6c 5f 4d 65 74 68 6f 64 54 79 70 65 20 Tcl_MethodType
25d0: 73 65 74 74 65 72 54 79 70 65 3b 0a 2b 7d 3b 0a setterType;.+};.
25e0: 2b 0a 2b 23 64 65 66 69 6e 65 20 53 4c 4f 54 28 +.+#define SLOT(
25f0: 6e 61 6d 65 2c 67 65 74 74 65 72 2c 73 65 74 74 name,getter,sett
2600: 65 72 29 09 09 09 09 09 5c 0a 2b 20 20 20 20 7b er).....\.+ {
2610: 22 3a 3a 6f 6f 3a 3a 22 20 6e 61 6d 65 2c 09 09 "::oo::" name,..
2620: 09 09 09 09 09 5c 0a 2b 09 20 20 20 20 7b 54 43 .....\.+. {TC
2630: 4c 5f 4f 4f 5f 4d 45 54 48 4f 44 5f 56 45 52 53 L_OO_METHOD_VERS
2640: 49 4f 4e 5f 43 55 52 52 45 4e 54 2c 20 22 63 6f ION_CURRENT, "co
2650: 72 65 20 6d 65 74 68 6f 64 3a 20 22 20 6e 61 6d re method: " nam
2660: 65 20 22 20 47 65 74 74 65 72 22 2c 20 5c 0a 2b e " Getter", \.+
2670: 09 09 20 20 20 20 67 65 74 74 65 72 2c 20 4e 55 .. getter, NU
2680: 4c 4c 2c 20 4e 55 4c 4c 7d 2c 09 09 09 09 5c 0a LL, NULL},....\.
2690: 2b 09 20 20 20 20 7b 54 43 4c 5f 4f 4f 5f 4d 45 +. {TCL_OO_ME
26a0: 54 48 4f 44 5f 56 45 52 53 49 4f 4e 5f 43 55 52 THOD_VERSION_CUR
26b0: 52 45 4e 54 2c 20 22 63 6f 72 65 20 6d 65 74 68 RENT, "core meth
26c0: 6f 64 3a 20 22 20 6e 61 6d 65 20 22 20 53 65 74 od: " name " Set
26d0: 74 65 72 22 2c 20 5c 0a 2b 09 09 20 20 20 20 73 ter", \.+.. s
26e0: 65 74 74 65 72 2c 20 4e 55 4c 4c 2c 20 4e 55 4c etter, NULL, NUL
26f0: 4c 7d 7d 0a 2b 0a 2b 2f 2a 0a 20 20 2a 20 46 6f L}}.+.+/*. * Fo
2700: 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f rward declaratio
2710: 6e 73 2e 0a 20 20 2a 2f 0a 20 0a 40 40 20 2d 33 ns.. */. .@@ -3
2720: 34 2c 36 20 2b 35 31 2c 36 33 20 40 40 0a 20 73 4,6 +51,63 @@. s
2730: 74 61 74 69 63 20 69 6e 74 09 09 52 65 6e 61 6d tatic int..Renam
2740: 65 44 65 6c 65 74 65 4d 65 74 68 6f 64 28 54 63 eDeleteMethod(Tc
2750: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
2760: 2c 20 4f 62 6a 65 63 74 20 2a 6f 50 74 72 2c 0a , Object *oPtr,.
2770: 20 09 09 09 20 20 20 20 69 6e 74 20 75 73 65 43 ... int useC
2780: 6c 61 73 73 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 lass, Tcl_Obj *c
2790: 6f 6e 73 74 20 66 72 6f 6d 50 74 72 2c 0a 20 09 onst fromPtr,. .
27a0: 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 .. Tcl_Obj *c
27b0: 6f 6e 73 74 20 74 6f 50 74 72 29 3b 0a 2b 73 74 onst toPtr);.+st
27c0: 61 74 69 63 20 69 6e 74 09 09 43 6c 61 73 73 46 atic int..ClassF
27d0: 69 6c 74 65 72 47 65 74 28 43 6c 69 65 6e 74 44 ilterGet(ClientD
27e0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a ata clientData,.
27f0: 2b 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 +... Tcl_Inte
2800: 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f rp *interp, Tcl_
2810: 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f ObjectContext co
2820: 6e 74 65 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 ntext,.+... i
2830: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a nt objc, Tcl_Obj
2840: 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a *const *objv);.
2850: 2b 73 74 61 74 69 63 20 69 6e 74 09 09 43 6c 61 +static int..Cla
2860: 73 73 46 69 6c 74 65 72 53 65 74 28 43 6c 69 65 ssFilterSet(Clie
2870: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 ntData clientDat
2880: 61 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f 49 a,.+... Tcl_I
2890: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 nterp *interp, T
28a0: 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 cl_ObjectContext
28b0: 20 63 6f 6e 74 65 78 74 2c 0a 2b 09 09 09 20 20 context,.+...
28c0: 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f int objc, Tcl_
28d0: 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 Obj *const *objv
28e0: 29 3b 0a 2b 73 74 61 74 69 63 20 69 6e 74 09 09 );.+static int..
28f0: 43 6c 61 73 73 4d 69 78 69 6e 47 65 74 28 43 6c ClassMixinGet(Cl
2900: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 ientData clientD
2910: 61 74 61 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c ata,.+... Tcl
2920: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
2930: 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 Tcl_ObjectConte
2940: 78 74 20 63 6f 6e 74 65 78 74 2c 0a 2b 09 09 09 xt context,.+...
2950: 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 int objc, Tc
2960: 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 l_Obj *const *ob
2970: 6a 76 29 3b 0a 2b 73 74 61 74 69 63 20 69 6e 74 jv);.+static int
2980: 09 09 43 6c 61 73 73 4d 69 78 69 6e 53 65 74 28 ..ClassMixinSet(
2990: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e ClientData clien
29a0: 74 44 61 74 61 2c 0a 2b 09 09 09 20 20 20 20 54 tData,.+... T
29b0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
29c0: 70 2c 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e p, Tcl_ObjectCon
29d0: 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 0a 2b 09 text context,.+.
29e0: 09 09 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 20 .. int objc,
29f0: 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a Tcl_Obj *const *
2a00: 6f 62 6a 76 29 3b 0a 2b 73 74 61 74 69 63 20 69 objv);.+static i
2a10: 6e 74 09 09 43 6c 61 73 73 53 75 70 65 72 47 65 nt..ClassSuperGe
2a20: 74 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 t(ClientData cli
2a30: 65 6e 74 44 61 74 61 2c 0a 2b 09 09 09 20 20 20 entData,.+...
2a40: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 Tcl_Interp *int
2a50: 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 65 63 74 43 erp, Tcl_ObjectC
2a60: 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 0a ontext context,.
2a70: 2b 09 09 09 20 20 20 20 69 6e 74 20 6f 62 6a 63 +... int objc
2a80: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 , Tcl_Obj *const
2a90: 20 2a 6f 62 6a 76 29 3b 0a 2b 73 74 61 74 69 63 *objv);.+static
2aa0: 20 69 6e 74 09 09 43 6c 61 73 73 53 75 70 65 72 int..ClassSuper
2ab0: 53 65 74 28 43 6c 69 65 6e 74 44 61 74 61 20 63 Set(ClientData c
2ac0: 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 09 09 09 20 lientData,.+...
2ad0: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 Tcl_Interp *i
2ae0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 65 63 nterp, Tcl_Objec
2af0: 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 tContext context
2b00: 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74 20 6f 62 ,.+... int ob
2b10: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e jc, Tcl_Obj *con
2b20: 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b 73 74 61 74 st *objv);.+stat
2b30: 69 63 20 69 6e 74 09 09 43 6c 61 73 73 56 61 72 ic int..ClassVar
2b40: 73 47 65 74 28 43 6c 69 65 6e 74 44 61 74 61 20 sGet(ClientData
2b50: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 09 09 09 clientData,.+...
2b60: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a Tcl_Interp *
2b70: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 65 interp, Tcl_Obje
2b80: 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 ctContext contex
2b90: 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74 20 6f t,.+... int o
2ba0: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f bjc, Tcl_Obj *co
2bb0: 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b 73 74 61 nst *objv);.+sta
2bc0: 74 69 63 20 69 6e 74 09 09 43 6c 61 73 73 56 61 tic int..ClassVa
2bd0: 72 73 53 65 74 28 43 6c 69 65 6e 74 44 61 74 61 rsSet(ClientData
2be0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 09 09 clientData,.+..
2bf0: 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 . Tcl_Interp
2c00: 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a *interp, Tcl_Obj
2c10: 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 ectContext conte
2c20: 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74 20 xt,.+... int
2c30: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 objc, Tcl_Obj *c
2c40: 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b 73 74 onst *objv);.+st
2c50: 61 74 69 63 20 69 6e 74 09 09 4f 62 6a 46 69 6c atic int..ObjFil
2c60: 74 65 72 47 65 74 28 43 6c 69 65 6e 74 44 61 74 terGet(ClientDat
2c70: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 09 a clientData,.+.
2c80: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 .. Tcl_Interp
2c90: 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 *interp, Tcl_Ob
2ca0: 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 jectContext cont
2cb0: 65 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74 ext,.+... int
2cc0: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a objc, Tcl_Obj *
2cd0: 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b 73 const *objv);.+s
2ce0: 74 61 74 69 63 20 69 6e 74 09 09 4f 62 6a 46 69 tatic int..ObjFi
2cf0: 6c 74 65 72 53 65 74 28 43 6c 69 65 6e 74 44 61 lterSet(ClientDa
2d00: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b ta clientData,.+
2d10: 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 ... Tcl_Inter
2d20: 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f p *interp, Tcl_O
2d30: 62 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e bjectContext con
2d40: 74 65 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e text,.+... in
2d50: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 t objc, Tcl_Obj
2d60: 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b *const *objv);.+
2d70: 73 74 61 74 69 63 20 69 6e 74 09 09 4f 62 6a 4d static int..ObjM
2d80: 69 78 69 6e 47 65 74 28 43 6c 69 65 6e 74 44 61 ixinGet(ClientDa
2d90: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b ta clientData,.+
2da0: 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 ... Tcl_Inter
2db0: 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f p *interp, Tcl_O
2dc0: 62 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e bjectContext con
2dd0: 74 65 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e text,.+... in
2de0: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 t objc, Tcl_Obj
2df0: 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b *const *objv);.+
2e00: 73 74 61 74 69 63 20 69 6e 74 09 09 4f 62 6a 4d static int..ObjM
2e10: 69 78 69 6e 53 65 74 28 43 6c 69 65 6e 74 44 61 ixinSet(ClientDa
2e20: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b ta clientData,.+
2e30: 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 ... Tcl_Inter
2e40: 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f p *interp, Tcl_O
2e50: 62 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e bjectContext con
2e60: 74 65 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e text,.+... in
2e70: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 t objc, Tcl_Obj
2e80: 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b *const *objv);.+
2e90: 73 74 61 74 69 63 20 69 6e 74 09 09 4f 62 6a 56 static int..ObjV
2ea0: 61 72 73 47 65 74 28 43 6c 69 65 6e 74 44 61 74 arsGet(ClientDat
2eb0: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 09 a clientData,.+.
2ec0: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 .. Tcl_Interp
2ed0: 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 *interp, Tcl_Ob
2ee0: 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 jectContext cont
2ef0: 65 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74 ext,.+... int
2f00: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a objc, Tcl_Obj *
2f10: 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b 73 const *objv);.+s
2f20: 74 61 74 69 63 20 69 6e 74 09 09 4f 62 6a 56 61 tatic int..ObjVa
2f30: 72 73 53 65 74 28 43 6c 69 65 6e 74 44 61 74 61 rsSet(ClientData
2f40: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 09 09 clientData,.+..
2f50: 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 . Tcl_Interp
2f60: 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a *interp, Tcl_Obj
2f70: 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 ectContext conte
2f80: 78 74 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74 20 xt,.+... int
2f90: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 objc, Tcl_Obj *c
2fa0: 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2b 0a 2b onst *objv);.+.+
2fb0: 2f 2a 0a 2b 20 2a 20 4e 6f 77 20 64 65 66 69 6e /*.+ * Now defin
2fc0: 65 20 74 68 65 20 73 6c 6f 74 73 20 75 73 65 64 e the slots used
2fd0: 20 69 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 in declarations
2fe0: 2e 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 ..+ */.+.+static
2ff0: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 44 65 const struct De
3000: 63 6c 61 72 65 64 53 6c 6f 74 20 73 6c 6f 74 73 claredSlot slots
3010: 5b 5d 20 3d 20 7b 0a 2b 20 20 20 20 53 4c 4f 54 [] = {.+ SLOT
3020: 28 22 64 65 66 69 6e 65 3a 3a 66 69 6c 74 65 72 ("define::filter
3030: 22 2c 20 20 20 20 20 20 43 6c 61 73 73 46 69 6c ", ClassFil
3040: 74 65 72 47 65 74 2c 20 43 6c 61 73 73 46 69 6c terGet, ClassFil
3050: 74 65 72 53 65 74 29 2c 0a 2b 20 20 20 20 53 4c terSet),.+ SL
3060: 4f 54 28 22 64 65 66 69 6e 65 3a 3a 6d 69 78 69 OT("define::mixi
3070: 6e 22 2c 20 20 20 20 20 20 20 43 6c 61 73 73 4d n", ClassM
3080: 69 78 69 6e 47 65 74 2c 20 20 43 6c 61 73 73 4d ixinGet, ClassM
3090: 69 78 69 6e 53 65 74 29 2c 0a 2b 20 20 20 20 53 ixinSet),.+ S
30a0: 4c 4f 54 28 22 64 65 66 69 6e 65 3a 3a 73 75 70 LOT("define::sup
30b0: 65 72 63 6c 61 73 73 22 2c 20 20 43 6c 61 73 73 erclass", Class
30c0: 53 75 70 65 72 47 65 74 2c 20 20 43 6c 61 73 73 SuperGet, Class
30d0: 53 75 70 65 72 53 65 74 29 2c 0a 2b 20 20 20 20 SuperSet),.+
30e0: 53 4c 4f 54 28 22 64 65 66 69 6e 65 3a 3a 76 61 SLOT("define::va
30f0: 72 69 61 62 6c 65 22 2c 20 20 20 20 43 6c 61 73 riable", Clas
3100: 73 56 61 72 73 47 65 74 2c 20 20 20 43 6c 61 73 sVarsGet, Clas
3110: 73 56 61 72 73 53 65 74 29 2c 0a 2b 20 20 20 20 sVarsSet),.+
3120: 53 4c 4f 54 28 22 6f 62 6a 64 65 66 69 6e 65 3a SLOT("objdefine:
3130: 3a 66 69 6c 74 65 72 22 2c 20 20 20 4f 62 6a 46 :filter", ObjF
3140: 69 6c 74 65 72 47 65 74 2c 20 20 20 4f 62 6a 46 ilterGet, ObjF
3150: 69 6c 74 65 72 53 65 74 29 2c 0a 2b 20 20 20 20 ilterSet),.+
3160: 53 4c 4f 54 28 22 6f 62 6a 64 65 66 69 6e 65 3a SLOT("objdefine:
3170: 3a 6d 69 78 69 6e 22 2c 20 20 20 20 4f 62 6a 4d :mixin", ObjM
3180: 69 78 69 6e 47 65 74 2c 20 20 20 20 4f 62 6a 4d ixinGet, ObjM
3190: 69 78 69 6e 53 65 74 29 2c 0a 2b 20 20 20 20 53 ixinSet),.+ S
31a0: 4c 4f 54 28 22 6f 62 6a 64 65 66 69 6e 65 3a 3a LOT("objdefine::
31b0: 76 61 72 69 61 62 6c 65 22 2c 20 4f 62 6a 56 61 variable", ObjVa
31c0: 72 73 47 65 74 2c 20 20 20 20 20 4f 62 6a 56 61 rsGet, ObjVa
31d0: 72 73 53 65 74 29 2c 0a 2b 20 20 20 20 7b 4e 55 rsSet),.+ {NU
31e0: 4c 4c 7d 0a 2b 7d 3b 0a 20 0c 0a 20 2f 2a 0a 20 LL}.+};. .. /*.
31f0: 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d * -------------
3200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 40 40 20 2d 31 33 ---------.@@ -13
3240: 38 30 2c 34 32 20 2b 31 34 35 34 2c 36 20 40 40 80,42 +1454,6 @@
3250: 0a 20 2f 2a 0a 20 20 2a 20 2d 2d 2d 2d 2d 2d 2d . /*. * -------
3260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
32a0: 20 20 2a 0a 2d 20 2a 20 54 63 6c 4f 4f 44 65 66 *.- * TclOODef
32b0: 69 6e 65 46 69 6c 74 65 72 4f 62 6a 43 6d 64 20 ineFilterObjCmd
32c0: 2d 2d 0a 2d 20 2a 09 49 6d 70 6c 65 6d 65 6e 74 --.- *.Implement
32d0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 22 66 69 ation of the "fi
32e0: 6c 74 65 72 22 20 73 75 62 63 6f 6d 6d 61 6e 64 lter" subcommand
32f0: 20 6f 66 20 74 68 65 20 22 6f 6f 3a 3a 64 65 66 of the "oo::def
3300: 69 6e 65 22 20 61 6e 64 0a 2d 20 2a 09 22 6f 6f ine" and.- *."oo
3310: 3a 3a 6f 62 6a 64 65 66 69 6e 65 22 20 63 6f 6d ::objdefine" com
3320: 6d 61 6e 64 73 2e 0a 2d 20 2a 0a 2d 20 2a 20 2d mands..- *.- * -
3330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3370: 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 69 6e -----.- */.-.-in
3380: 74 0a 2d 54 63 6c 4f 4f 44 65 66 69 6e 65 46 69 t.-TclOODefineFi
3390: 6c 74 65 72 4f 62 6a 43 6d 64 28 0a 2d 20 20 20 lterObjCmd(.-
33a0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 ClientData clie
33b0: 6e 74 44 61 74 61 2c 0a 2d 20 20 20 20 54 63 6c ntData,.- Tcl
33c0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
33d0: 0a 2d 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 0a .- int objc,.
33e0: 2d 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f - Tcl_Obj *co
33f0: 6e 73 74 20 2a 6f 62 6a 76 29 0a 2d 7b 0a 2d 20 nst *objv).-{.-
3400: 20 20 20 69 6e 74 20 69 73 49 6e 73 74 61 6e 63 int isInstanc
3410: 65 46 69 6c 74 65 72 20 3d 20 50 54 52 32 49 4e eFilter = PTR2IN
3420: 54 28 63 6c 69 65 6e 74 44 61 74 61 29 3b 0a 2d T(clientData);.-
3430: 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 72 Object *oPtr
3440: 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 20 54 63 = (Object *) Tc
3450: 6c 4f 4f 47 65 74 44 65 66 69 6e 65 43 6d 64 43 lOOGetDefineCmdC
3460: 6f 6e 74 65 78 74 28 69 6e 74 65 72 70 29 3b 0a ontext(interp);.
3470: 2d 0a 2d 20 20 20 20 69 66 20 28 6f 50 74 72 20 -.- if (oPtr
3480: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 72 65 74 == NULL) {.-.ret
3490: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d urn TCL_ERROR;.-
34a0: 20 20 20 20 7d 0a 2d 20 20 20 20 69 66 20 28 21 }.- if (!
34b0: 69 73 49 6e 73 74 61 6e 63 65 46 69 6c 74 65 72 isInstanceFilter
34c0: 20 26 26 20 21 6f 50 74 72 2d 3e 63 6c 61 73 73 && !oPtr->class
34d0: 50 74 72 29 20 7b 0a 2d 09 54 63 6c 5f 41 70 70 Ptr) {.-.Tcl_App
34e0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 endResult(interp
34f0: 2c 20 22 61 74 74 65 6d 70 74 20 74 6f 20 6d 69 , "attempt to mi
3500: 73 75 73 65 20 41 50 49 22 2c 20 4e 55 4c 4c 29 suse API", NULL)
3510: 3b 0a 2d 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 ;.-.return TCL_E
3520: 52 52 4f 52 3b 0a 2d 20 20 20 20 7d 0a 2d 0a 2d RROR;.- }.-.-
3530: 20 20 20 20 69 66 20 28 21 69 73 49 6e 73 74 61 if (!isInsta
3540: 6e 63 65 46 69 6c 74 65 72 29 20 7b 0a 2d 09 54 nceFilter) {.-.T
3550: 63 6c 4f 4f 43 6c 61 73 73 53 65 74 46 69 6c 74 clOOClassSetFilt
3560: 65 72 73 28 69 6e 74 65 72 70 2c 20 6f 50 74 72 ers(interp, oPtr
3570: 2d 3e 63 6c 61 73 73 50 74 72 2c 20 6f 62 6a 63 ->classPtr, objc
3580: 2d 31 2c 20 6f 62 6a 76 2b 31 29 3b 0a 2d 20 20 -1, objv+1);.-
3590: 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 54 63 6c } else {.-.Tcl
35a0: 4f 4f 4f 62 6a 65 63 74 53 65 74 46 69 6c 74 65 OOObjectSetFilte
35b0: 72 73 28 6f 50 74 72 2c 20 6f 62 6a 63 2d 31 2c rs(oPtr, objc-1,
35c0: 20 6f 62 6a 76 2b 31 29 3b 0a 2d 20 20 20 20 7d objv+1);.- }
35d0: 0a 2d 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c .- return TCL
35e0: 5f 4f 4b 3b 0a 2d 7d 0a 2d 0c 0a 2d 2f 2a 0a 2d _OK;.-}.-..-/*.-
35f0: 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d * -------------
3600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a 20 20 ---------.- *.
3640: 2a 20 54 63 6c 4f 4f 44 65 66 69 6e 65 46 6f 72 * TclOODefineFor
3650: 77 61 72 64 4f 62 6a 43 6d 64 20 2d 2d 0a 20 20 wardObjCmd --.
3660: 2a 09 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e *.Implementation
3670: 20 6f 66 20 74 68 65 20 22 66 6f 72 77 61 72 64 of the "forward
3680: 22 20 73 75 62 63 6f 6d 6d 61 6e 64 20 6f 66 20 " subcommand of
3690: 74 68 65 20 22 6f 6f 3a 3a 64 65 66 69 6e 65 22 the "oo::define"
36a0: 20 61 6e 64 0a 20 20 2a 09 22 6f 6f 3a 3a 6f 62 and. *."oo::ob
36b0: 6a 64 65 66 69 6e 65 22 20 63 6f 6d 6d 61 6e 64 jdefine" command
36c0: 73 2e 0a 40 40 20 2d 31 35 32 39 2c 36 35 20 2b s..@@ -1529,65 +
36d0: 31 35 36 37 2c 36 20 40 40 0a 20 2f 2a 0a 20 20 1567,6 @@. /*.
36e0: 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d * --------------
36f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3720: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2d 20 2a --------. *.- *
3730: 20 54 63 6c 4f 4f 44 65 66 69 6e 65 4d 69 78 69 TclOODefineMixi
3740: 6e 4f 62 6a 43 6d 64 20 2d 2d 0a 2d 20 2a 09 49 nObjCmd --.- *.I
3750: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 mplementation of
3760: 20 74 68 65 20 22 6d 69 78 69 6e 22 20 73 75 62 the "mixin" sub
3770: 63 6f 6d 6d 61 6e 64 20 6f 66 20 74 68 65 20 22 command of the "
3780: 6f 6f 3a 3a 64 65 66 69 6e 65 22 20 61 6e 64 0a oo::define" and.
3790: 2d 20 2a 09 22 6f 6f 3a 3a 6f 62 6a 64 65 66 69 - *."oo::objdefi
37a0: 6e 65 22 20 63 6f 6d 6d 61 6e 64 73 2e 0a 2d 20 ne" commands..-
37b0: 2a 0a 2d 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.- * ----------
37c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
37d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
37e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
37f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a ------------.- *
3800: 2f 0a 2d 0a 2d 69 6e 74 0a 2d 54 63 6c 4f 4f 44 /.-.-int.-TclOOD
3810: 65 66 69 6e 65 4d 69 78 69 6e 4f 62 6a 43 6d 64 efineMixinObjCmd
3820: 28 0a 2d 20 20 20 20 43 6c 69 65 6e 74 44 61 74 (.- ClientDat
3830: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2d 20 a clientData,.-
3840: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 Tcl_Interp *i
3850: 6e 74 65 72 70 2c 0a 2d 20 20 20 20 63 6f 6e 73 nterp,.- cons
3860: 74 20 69 6e 74 20 6f 62 6a 63 2c 0a 2d 20 20 20 t int objc,.-
3870: 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 Tcl_Obj *const
3880: 2a 6f 62 6a 76 29 0a 2d 7b 0a 2d 20 20 20 20 69 *objv).-{.- i
3890: 6e 74 20 69 73 49 6e 73 74 61 6e 63 65 4d 69 78 nt isInstanceMix
38a0: 69 6e 20 3d 20 50 54 52 32 49 4e 54 28 63 6c 69 in = PTR2INT(cli
38b0: 65 6e 74 44 61 74 61 29 3b 0a 2d 20 20 20 20 4f entData);.- O
38c0: 62 6a 65 63 74 20 2a 6f 50 74 72 20 3d 20 28 4f bject *oPtr = (O
38d0: 62 6a 65 63 74 20 2a 29 20 54 63 6c 4f 4f 47 65 bject *) TclOOGe
38e0: 74 44 65 66 69 6e 65 43 6d 64 43 6f 6e 74 65 78 tDefineCmdContex
38f0: 74 28 69 6e 74 65 72 70 29 3b 0a 2d 20 20 20 20 t(interp);.-
3900: 43 6c 61 73 73 20 2a 2a 6d 69 78 69 6e 73 3b 0a Class **mixins;.
3910: 2d 20 20 20 20 69 6e 74 20 69 3b 0a 2d 0a 2d 20 - int i;.-.-
3920: 20 20 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e if (oPtr == N
3930: 55 4c 4c 29 20 7b 0a 2d 09 72 65 74 75 72 6e 20 ULL) {.-.return
3940: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 20 20 20 20 TCL_ERROR;.-
3950: 7d 0a 2d 20 20 20 20 69 66 20 28 21 69 73 49 6e }.- if (!isIn
3960: 73 74 61 6e 63 65 4d 69 78 69 6e 20 26 26 20 21 stanceMixin && !
3970: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 29 20 oPtr->classPtr)
3980: 7b 0a 2d 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 {.-.Tcl_AppendRe
3990: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61 74 sult(interp, "at
39a0: 74 65 6d 70 74 20 74 6f 20 6d 69 73 75 73 65 20 tempt to misuse
39b0: 41 50 49 22 2c 20 4e 55 4c 4c 29 3b 0a 2d 09 72 API", NULL);.-.r
39c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
39d0: 0a 2d 20 20 20 20 7d 0a 2d 20 20 20 20 6d 69 78 .- }.- mix
39e0: 69 6e 73 20 3d 20 54 63 6c 53 74 61 63 6b 41 6c ins = TclStackAl
39f0: 6c 6f 63 28 69 6e 74 65 72 70 2c 20 73 69 7a 65 loc(interp, size
3a00: 6f 66 28 43 6c 61 73 73 20 2a 29 20 2a 20 28 6f of(Class *) * (o
3a10: 62 6a 63 2d 31 29 29 3b 0a 2d 0a 2d 20 20 20 20 bjc-1));.-.-
3a20: 66 6f 72 20 28 69 3d 31 20 3b 20 69 3c 6f 62 6a for (i=1 ; i<obj
3a30: 63 20 3b 20 69 2b 2b 29 20 7b 0a 2d 09 43 6c 61 c ; i++) {.-.Cla
3a40: 73 73 20 2a 63 6c 73 50 74 72 20 3d 20 47 65 74 ss *clsPtr = Get
3a50: 43 6c 61 73 73 49 6e 4f 75 74 65 72 43 6f 6e 74 ClassInOuterCont
3a60: 65 78 74 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 ext(interp, objv
3a70: 5b 69 5d 2c 0a 2d 09 09 22 6d 61 79 20 6f 6e 6c [i],.-.."may onl
3a80: 79 20 6d 69 78 20 69 6e 20 63 6c 61 73 73 65 73 y mix in classes
3a90: 22 29 3b 0a 2d 0a 2d 09 69 66 20 28 63 6c 73 50 ");.-.-.if (clsP
3aa0: 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 tr == NULL) {.-.
3ab0: 20 20 20 20 67 6f 74 6f 20 66 72 65 65 41 6e 64 goto freeAnd
3ac0: 45 72 72 6f 72 3b 0a 2d 09 7d 0a 2d 09 69 66 20 Error;.-.}.-.if
3ad0: 28 21 69 73 49 6e 73 74 61 6e 63 65 4d 69 78 69 (!isInstanceMixi
3ae0: 6e 20 26 26 20 54 63 6c 4f 4f 49 73 52 65 61 63 n && TclOOIsReac
3af0: 68 61 62 6c 65 28 6f 50 74 72 2d 3e 63 6c 61 73 hable(oPtr->clas
3b00: 73 50 74 72 2c 20 63 6c 73 50 74 72 29 29 20 7b sPtr, clsPtr)) {
3b10: 0a 2d 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e .-. Tcl_Appen
3b20: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 dResult(interp,
3b30: 22 6d 61 79 20 6e 6f 74 20 6d 69 78 20 61 20 63 "may not mix a c
3b40: 6c 61 73 73 20 69 6e 74 6f 20 69 74 73 65 6c 66 lass into itself
3b50: 22 2c 20 4e 55 4c 4c 29 3b 0a 2d 09 20 20 20 20 ", NULL);.-.
3b60: 67 6f 74 6f 20 66 72 65 65 41 6e 64 45 72 72 6f goto freeAndErro
3b70: 72 3b 0a 2d 09 7d 0a 2d 09 6d 69 78 69 6e 73 5b r;.-.}.-.mixins[
3b80: 69 2d 31 5d 20 3d 20 63 6c 73 50 74 72 3b 0a 2d i-1] = clsPtr;.-
3b90: 20 20 20 20 7d 0a 2d 0a 2d 20 20 20 20 69 66 20 }.-.- if
3ba0: 28 69 73 49 6e 73 74 61 6e 63 65 4d 69 78 69 6e (isInstanceMixin
3bb0: 29 20 7b 0a 2d 09 54 63 6c 4f 4f 4f 62 6a 65 63 ) {.-.TclOOObjec
3bc0: 74 53 65 74 4d 69 78 69 6e 73 28 6f 50 74 72 2c tSetMixins(oPtr,
3bd0: 20 6f 62 6a 63 2d 31 2c 20 6d 69 78 69 6e 73 29 objc-1, mixins)
3be0: 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a ;.- } else {.
3bf0: 2d 09 54 63 6c 4f 4f 43 6c 61 73 73 53 65 74 4d -.TclOOClassSetM
3c00: 69 78 69 6e 73 28 69 6e 74 65 72 70 2c 20 6f 50 ixins(interp, oP
3c10: 74 72 2d 3e 63 6c 61 73 73 50 74 72 2c 20 6f 62 tr->classPtr, ob
3c20: 6a 63 2d 31 2c 20 6d 69 78 69 6e 73 29 3b 0a 2d jc-1, mixins);.-
3c30: 20 20 20 20 7d 0a 2d 0a 2d 20 20 20 20 54 63 6c }.-.- Tcl
3c40: 53 74 61 63 6b 46 72 65 65 28 69 6e 74 65 72 70 StackFree(interp
3c50: 2c 20 6d 69 78 69 6e 73 29 3b 0a 2d 20 20 20 20 , mixins);.-
3c60: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2d return TCL_OK;.-
3c70: 0a 2d 20 20 66 72 65 65 41 6e 64 45 72 72 6f 72 .- freeAndError
3c80: 3a 0a 2d 20 20 20 20 54 63 6c 53 74 61 63 6b 46 :.- TclStackF
3c90: 72 65 65 28 69 6e 74 65 72 70 2c 20 6d 69 78 69 ree(interp, mixi
3ca0: 6e 73 29 3b 0a 2d 20 20 20 20 72 65 74 75 72 6e ns);.- return
3cb0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 7d 0a 2d TCL_ERROR;.-}.-
3cc0: 0c 0a 2d 2f 2a 0a 2d 20 2a 20 2d 2d 2d 2d 2d 2d ..-/*.- * ------
3cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d10: 0a 2d 20 2a 0a 20 20 2a 20 54 63 6c 4f 4f 44 65 .- *. * TclOODe
3d20: 66 69 6e 65 52 65 6e 61 6d 65 4d 65 74 68 6f 64 fineRenameMethod
3d30: 4f 62 6a 43 6d 64 20 2d 2d 0a 20 20 2a 09 49 6d ObjCmd --. *.Im
3d40: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 plementation of
3d50: 74 68 65 20 22 72 65 6e 61 6d 65 6d 65 74 68 6f the "renamemetho
3d60: 64 22 20 73 75 62 63 6f 6d 6d 61 6e 64 20 6f 66 d" subcommand of
3d70: 20 74 68 65 20 22 6f 6f 3a 3a 64 65 66 69 6e 65 the "oo::define
3d80: 22 0a 20 20 2a 09 61 6e 64 20 22 6f 6f 3a 3a 6f ". *.and "oo::o
3d90: 62 6a 64 65 66 69 6e 65 22 20 63 6f 6d 6d 61 6e bjdefine" comman
3da0: 64 73 2e 0a 40 40 20 2d 31 36 34 32 2c 31 30 39 ds..@@ -1642,109
3db0: 20 2b 31 36 32 31 2c 36 20 40 40 0a 20 2f 2a 0a +1621,6 @@. /*.
3dc0: 20 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d * ------------
3dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2d ----------. *.-
3e10: 20 2a 20 54 63 6c 4f 4f 44 65 66 69 6e 65 53 75 * TclOODefineSu
3e20: 70 65 72 63 6c 61 73 73 4f 62 6a 43 6d 64 20 2d perclassObjCmd -
3e30: 2d 0a 2d 20 2a 09 49 6d 70 6c 65 6d 65 6e 74 61 -.- *.Implementa
3e40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 22 73 75 70 tion of the "sup
3e50: 65 72 63 6c 61 73 73 22 20 73 75 62 63 6f 6d 6d erclass" subcomm
3e60: 61 6e 64 20 6f 66 20 74 68 65 20 22 6f 6f 3a 3a and of the "oo::
3e70: 64 65 66 69 6e 65 22 0a 2d 20 2a 09 63 6f 6d 6d define".- *.comm
3e80: 61 6e 64 2e 0a 2d 20 2a 0a 2d 20 2a 20 2d 2d 2d and..- *.- * ---
3e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ed0: 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 69 6e 74 0a ---.- */.-.-int.
3ee0: 2d 54 63 6c 4f 4f 44 65 66 69 6e 65 53 75 70 65 -TclOODefineSupe
3ef0: 72 63 6c 61 73 73 4f 62 6a 43 6d 64 28 0a 2d 20 rclassObjCmd(.-
3f00: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c ClientData cl
3f10: 69 65 6e 74 44 61 74 61 2c 0a 2d 20 20 20 20 54 ientData,.- T
3f20: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
3f30: 70 2c 0a 2d 20 20 20 20 69 6e 74 20 6f 62 6a 63 p,.- int objc
3f40: 2c 0a 2d 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a ,.- Tcl_Obj *
3f50: 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a 2d 7b 0a const *objv).-{.
3f60: 2d 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 - Object *oPt
3f70: 72 3b 0a 2d 20 20 20 20 46 6f 75 6e 64 61 74 69 r;.- Foundati
3f80: 6f 6e 20 2a 66 50 74 72 20 3d 20 54 63 6c 4f 4f on *fPtr = TclOO
3f90: 47 65 74 46 6f 75 6e 64 61 74 69 6f 6e 28 69 6e GetFoundation(in
3fa0: 74 65 72 70 29 3b 0a 2d 20 20 20 20 43 6c 61 73 terp);.- Clas
3fb0: 73 20 2a 2a 73 75 70 65 72 63 6c 61 73 73 65 73 s **superclasses
3fc0: 2c 20 2a 73 75 70 65 72 50 74 72 3b 0a 2d 20 20 , *superPtr;.-
3fd0: 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 2d 0a 2d 20 int i, j;.-.-
3fe0: 20 20 20 69 66 20 28 6f 62 6a 63 20 3c 20 32 29 if (objc < 2)
3ff0: 20 7b 0a 2d 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 {.-.Tcl_WrongNu
4000: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c mArgs(interp, 1,
4010: 20 6f 62 6a 76 2c 20 22 63 6c 61 73 73 4e 61 6d objv, "classNam
4020: 65 20 3f 63 6c 61 73 73 4e 61 6d 65 20 2e 2e 2e e ?className ...
4030: 3f 22 29 3b 0a 2d 09 72 65 74 75 72 6e 20 54 43 ?");.-.return TC
4040: 4c 5f 45 52 52 4f 52 3b 0a 2d 20 20 20 20 7d 0a L_ERROR;.- }.
4050: 2d 0a 2d 20 20 20 20 2f 2a 0a 2d 20 20 20 20 20 -.- /*.-
4060: 2a 20 47 65 74 20 74 68 65 20 63 6c 61 73 73 20 * Get the class
4070: 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 2d to operate on..-
4080: 20 20 20 20 20 2a 2f 0a 2d 0a 2d 20 20 20 20 6f */.-.- o
4090: 50 74 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 Ptr = (Object *)
40a0: 20 54 63 6c 4f 4f 47 65 74 44 65 66 69 6e 65 43 TclOOGetDefineC
40b0: 6d 64 43 6f 6e 74 65 78 74 28 69 6e 74 65 72 70 mdContext(interp
40c0: 29 3b 0a 2d 20 20 20 20 69 66 20 28 6f 50 74 72 );.- if (oPtr
40d0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 72 65 == NULL) {.-.re
40e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
40f0: 2d 20 20 20 20 7d 0a 2d 20 20 20 20 69 66 20 28 - }.- if (
4100: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 20 3d oPtr->classPtr =
4110: 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 54 63 6c 5f = NULL) {.-.Tcl_
4120: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 AppendResult(int
4130: 65 72 70 2c 20 22 6f 6e 6c 79 20 63 6c 61 73 73 erp, "only class
4140: 65 73 20 6d 61 79 20 68 61 76 65 20 73 75 70 65 es may have supe
4150: 72 63 6c 61 73 73 65 73 20 64 65 66 69 6e 65 64 rclasses defined
4160: 22 2c 0a 2d 09 09 4e 55 4c 4c 29 3b 0a 2d 09 72 ",.-..NULL);.-.r
4170: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
4180: 0a 2d 20 20 20 20 7d 0a 2d 20 20 20 20 69 66 20 .- }.- if
4190: 28 6f 50 74 72 20 3d 3d 20 66 50 74 72 2d 3e 6f (oPtr == fPtr->o
41a0: 62 6a 65 63 74 43 6c 73 2d 3e 74 68 69 73 50 74 bjectCls->thisPt
41b0: 72 29 20 7b 0a 2d 09 54 63 6c 5f 41 70 70 65 6e r) {.-.Tcl_Appen
41c0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a dResult(interp,.
41d0: 2d 09 09 22 6d 61 79 20 6e 6f 74 20 6d 6f 64 69 -.."may not modi
41e0: 66 79 20 74 68 65 20 73 75 70 65 72 63 6c 61 73 fy the superclas
41f0: 73 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 6f 62 s of the root ob
4200: 6a 65 63 74 22 2c 20 4e 55 4c 4c 29 3b 0a 2d 09 ject", NULL);.-.
4210: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
4220: 3b 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20 20 20 20 ;.- }.-.-
4230: 2f 2a 0a 2d 20 20 20 20 20 2a 20 41 6c 6c 6f 63 /*.- * Alloc
4240: 61 74 65 20 73 6f 6d 65 20 77 6f 72 6b 69 6e 67 ate some working
4250: 20 73 70 61 63 65 2e 0a 2d 20 20 20 20 20 2a 2f space..- */
4260: 0a 2d 0a 2d 20 20 20 20 73 75 70 65 72 63 6c 61 .-.- supercla
4270: 73 73 65 73 20 3d 20 28 43 6c 61 73 73 20 2a 2a sses = (Class **
4280: 29 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 ) ckalloc(sizeof
4290: 28 43 6c 61 73 73 20 2a 29 20 2a 20 28 6f 62 6a (Class *) * (obj
42a0: 63 2d 31 29 29 3b 0a 2d 0a 2d 20 20 20 20 2f 2a c-1));.-.- /*
42b0: 0a 2d 20 20 20 20 20 2a 20 50 61 72 73 65 20 74 .- * Parse t
42c0: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 he arguments to
42d0: 67 65 74 20 74 68 65 20 63 6c 61 73 73 20 74 6f get the class to
42e0: 20 75 73 65 20 61 73 20 73 75 70 65 72 63 6c 61 use as supercla
42f0: 73 73 65 73 2e 0a 2d 20 20 20 20 20 2a 2f 0a 2d sses..- */.-
4300: 0a 2d 20 20 20 20 66 6f 72 20 28 69 3d 30 20 3b .- for (i=0 ;
4310: 20 69 3c 6f 62 6a 63 2d 31 20 3b 20 69 2b 2b 29 i<objc-1 ; i++)
4320: 20 7b 0a 2d 09 43 6c 61 73 73 20 2a 63 6c 73 50 {.-.Class *clsP
4330: 74 72 20 3d 20 47 65 74 43 6c 61 73 73 49 6e 4f tr = GetClassInO
4340: 75 74 65 72 43 6f 6e 74 65 78 74 28 69 6e 74 65 uterContext(inte
4350: 72 70 2c 20 6f 62 6a 76 5b 69 2b 31 5d 2c 0a 2d rp, objv[i+1],.-
4360: 09 09 22 6f 6e 6c 79 20 61 20 63 6c 61 73 73 20 .."only a class
4370: 63 61 6e 20 62 65 20 61 20 73 75 70 65 72 63 6c can be a supercl
4380: 61 73 73 22 29 3b 0a 2d 0a 2d 09 69 66 20 28 63 ass");.-.-.if (c
4390: 6c 73 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b lsPtr == NULL) {
43a0: 0a 2d 09 20 20 20 20 67 6f 74 6f 20 66 61 69 6c .-. goto fail
43b0: 65 64 41 66 74 65 72 41 6c 6c 6f 63 3b 0a 2d 09 edAfterAlloc;.-.
43c0: 7d 0a 2d 09 66 6f 72 20 28 6a 3d 30 20 3b 20 6a }.-.for (j=0 ; j
43d0: 3c 69 20 3b 20 6a 2b 2b 29 20 7b 0a 2d 09 20 20 <i ; j++) {.-.
43e0: 20 20 69 66 20 28 73 75 70 65 72 63 6c 61 73 73 if (superclass
43f0: 65 73 5b 6a 5d 20 3d 3d 20 63 6c 73 50 74 72 29 es[j] == clsPtr)
4400: 20 7b 0a 2d 09 09 54 63 6c 5f 41 70 70 65 6e 64 {.-..Tcl_Append
4410: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a 2d Result(interp,.-
4420: 09 09 09 22 63 6c 61 73 73 20 73 68 6f 75 6c 64 ..."class should
4430: 20 6f 6e 6c 79 20 62 65 20 61 20 64 69 72 65 63 only be a direc
4440: 74 20 73 75 70 65 72 63 6c 61 73 73 20 6f 6e 63 t superclass onc
4450: 65 22 2c 4e 55 4c 4c 29 3b 0a 2d 09 09 67 6f 74 e",NULL);.-..got
4460: 6f 20 66 61 69 6c 65 64 41 66 74 65 72 41 6c 6c o failedAfterAll
4470: 6f 63 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09 7d 0a oc;.-. }.-.}.
4480: 2d 09 69 66 20 28 54 63 6c 4f 4f 49 73 52 65 61 -.if (TclOOIsRea
4490: 63 68 61 62 6c 65 28 6f 50 74 72 2d 3e 63 6c 61 chable(oPtr->cla
44a0: 73 73 50 74 72 2c 20 63 6c 73 50 74 72 29 29 20 ssPtr, clsPtr))
44b0: 7b 0a 2d 09 20 20 20 20 54 63 6c 5f 41 70 70 65 {.-. Tcl_Appe
44c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c ndResult(interp,
44d0: 0a 2d 09 09 20 20 20 20 22 61 74 74 65 6d 70 74 .-.. "attempt
44e0: 20 74 6f 20 66 6f 72 6d 20 63 69 72 63 75 6c 61 to form circula
44f0: 72 20 64 65 70 65 6e 64 65 6e 63 79 20 67 72 61 r dependency gra
4500: 70 68 22 2c 20 4e 55 4c 4c 29 3b 0a 2d 09 66 61 ph", NULL);.-.fa
4510: 69 6c 65 64 41 66 74 65 72 41 6c 6c 6f 63 3a 0a iledAfterAlloc:.
4520: 2d 09 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 -. ckfree((ch
4530: 61 72 20 2a 29 20 73 75 70 65 72 63 6c 61 73 73 ar *) superclass
4540: 65 73 29 3b 0a 2d 09 20 20 20 20 72 65 74 75 72 es);.-. retur
4550: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 09 7d n TCL_ERROR;.-.}
4560: 0a 2d 09 73 75 70 65 72 63 6c 61 73 73 65 73 5b .-.superclasses[
4570: 69 5d 20 3d 20 63 6c 73 50 74 72 3b 0a 2d 20 20 i] = clsPtr;.-
4580: 20 20 7d 0a 2d 0a 2d 20 20 20 20 2f 2a 0a 2d 20 }.-.- /*.-
4590: 20 20 20 20 2a 20 49 6e 73 74 61 6c 6c 20 74 68 * Install th
45a0: 65 20 6c 69 73 74 20 6f 66 20 73 75 70 65 72 63 e list of superc
45b0: 6c 61 73 73 65 73 20 69 6e 74 6f 20 74 68 65 20 lasses into the
45c0: 63 6c 61 73 73 2e 20 4e 6f 74 65 20 74 68 61 74 class. Note that
45d0: 20 74 68 69 73 20 61 6c 73 6f 0a 2d 20 20 20 20 this also.-
45e0: 20 2a 20 69 6e 76 6f 6c 76 65 73 20 73 70 6c 69 * involves spli
45f0: 63 69 6e 67 20 74 68 65 20 63 6c 61 73 73 20 6f cing the class o
4600: 75 74 20 6f 66 20 74 68 65 20 73 75 70 65 72 63 ut of the superc
4610: 6c 61 73 73 65 73 27 20 73 75 62 63 6c 61 73 73 lasses' subclass
4620: 20 6c 69 73 74 20 74 68 61 74 0a 2d 20 20 20 20 list that.-
4630: 20 2a 20 69 74 20 75 73 65 64 20 74 6f 20 62 65 * it used to be
4640: 20 61 20 6d 65 6d 62 65 72 20 6f 66 20 61 6e 64 a member of and
4650: 20 73 70 6c 69 63 69 6e 67 20 69 74 20 69 6e 74 splicing it int
4660: 6f 20 74 68 65 20 6e 65 77 20 73 75 70 65 72 63 o the new superc
4670: 6c 61 73 73 65 73 27 0a 2d 20 20 20 20 20 2a 20 lasses'.- *
4680: 73 75 62 63 6c 61 73 73 20 6c 69 73 74 2e 0a 2d subclass list..-
4690: 20 20 20 20 20 2a 2f 0a 2d 0a 2d 20 20 20 20 69 */.-.- i
46a0: 66 20 28 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 f (oPtr->classPt
46b0: 72 2d 3e 73 75 70 65 72 63 6c 61 73 73 65 73 2e r->superclasses.
46c0: 6e 75 6d 20 21 3d 20 30 29 20 7b 0a 2d 09 46 4f num != 0) {.-.FO
46d0: 52 45 41 43 48 28 73 75 70 65 72 50 74 72 2c 20 REACH(superPtr,
46e0: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d 3e oPtr->classPtr->
46f0: 73 75 70 65 72 63 6c 61 73 73 65 73 29 20 7b 0a superclasses) {.
4700: 2d 09 20 20 20 20 54 63 6c 4f 4f 52 65 6d 6f 76 -. TclOORemov
4710: 65 46 72 6f 6d 53 75 62 63 6c 61 73 73 65 73 28 eFromSubclasses(
4720: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2c 20 oPtr->classPtr,
4730: 73 75 70 65 72 50 74 72 29 3b 0a 2d 09 7d 0a 2d superPtr);.-.}.-
4740: 09 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 .ckfree((char *)
4750: 20 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d oPtr->classPtr-
4760: 3e 73 75 70 65 72 63 6c 61 73 73 65 73 2e 6c 69 >superclasses.li
4770: 73 74 29 3b 0a 2d 20 20 20 20 7d 0a 2d 20 20 20 st);.- }.-
4780: 20 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d oPtr->classPtr-
4790: 3e 73 75 70 65 72 63 6c 61 73 73 65 73 2e 6c 69 >superclasses.li
47a0: 73 74 20 3d 20 73 75 70 65 72 63 6c 61 73 73 65 st = superclasse
47b0: 73 3b 0a 2d 20 20 20 20 6f 50 74 72 2d 3e 63 6c s;.- oPtr->cl
47c0: 61 73 73 50 74 72 2d 3e 73 75 70 65 72 63 6c 61 assPtr->supercla
47d0: 73 73 65 73 2e 6e 75 6d 20 3d 20 6f 62 6a 63 2d sses.num = objc-
47e0: 31 3b 0a 2d 20 20 20 20 46 4f 52 45 41 43 48 28 1;.- FOREACH(
47f0: 73 75 70 65 72 50 74 72 2c 20 6f 50 74 72 2d 3e superPtr, oPtr->
4800: 63 6c 61 73 73 50 74 72 2d 3e 73 75 70 65 72 63 classPtr->superc
4810: 6c 61 73 73 65 73 29 20 7b 0a 2d 09 54 63 6c 4f lasses) {.-.TclO
4820: 4f 41 64 64 54 6f 53 75 62 63 6c 61 73 73 65 73 OAddToSubclasses
4830: 28 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2c (oPtr->classPtr,
4840: 20 73 75 70 65 72 50 74 72 29 3b 0a 2d 20 20 20 superPtr);.-
4850: 20 7d 0a 2d 20 20 20 20 42 75 6d 70 47 6c 6f 62 }.- BumpGlob
4860: 61 6c 45 70 6f 63 68 28 69 6e 74 65 72 70 2c 20 alEpoch(interp,
4870: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 29 3b oPtr->classPtr);
4880: 0a 2d 0a 2d 20 20 20 20 72 65 74 75 72 6e 20 54 .-.- return T
4890: 43 4c 5f 4f 4b 3b 0a 2d 7d 0a 2d 0c 0a 2d 2f 2a CL_OK;.-}.-..-/*
48a0: 0a 2d 20 2a 20 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 2d 2d ----------------
48e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a -----------.- *.
48f0: 20 20 2a 20 54 63 6c 4f 4f 44 65 66 69 6e 65 55 * TclOODefineU
4900: 6e 65 78 70 6f 72 74 4f 62 6a 43 6d 64 20 2d 2d nexportObjCmd --
4910: 0a 20 20 2a 09 49 6d 70 6c 65 6d 65 6e 74 61 74 . *.Implementat
4920: 69 6f 6e 20 6f 66 20 74 68 65 20 22 75 6e 65 78 ion of the "unex
4930: 70 6f 72 74 22 20 73 75 62 63 6f 6d 6d 61 6e 64 port" subcommand
4940: 20 6f 66 20 74 68 65 20 22 6f 6f 3a 3a 64 65 66 of the "oo::def
4950: 69 6e 65 22 20 61 6e 64 0a 20 20 2a 09 22 6f 6f ine" and. *."oo
4960: 3a 3a 6f 62 6a 64 65 66 69 6e 65 22 20 63 6f 6d ::objdefine" com
4970: 6d 61 6e 64 73 2e 0a 40 40 20 2d 31 38 33 35 2c mands..@@ -1835,
4980: 31 30 30 20 2b 31 37 31 31 2c 36 20 40 40 0a 20 100 +1711,6 @@.
4990: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f return TCL_O
49a0: 4b 3b 0a 20 7d 0a 20 0c 0a 2d 2f 2a 0a 2d 20 2a K;. }. ..-/*.- *
49b0: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------
49c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
49d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
49e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
49f0: 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a 2d 20 2a 20 -------.- *.- *
4a00: 54 63 6c 4f 4f 44 65 66 69 6e 65 56 61 72 69 61 TclOODefineVaria
4a10: 62 6c 65 73 4f 62 6a 43 6d 64 20 2d 2d 0a 2d 20 blesObjCmd --.-
4a20: 2a 09 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e *.Implementation
4a30: 20 6f 66 20 74 68 65 20 22 76 61 72 69 61 62 6c of the "variabl
4a40: 65 22 20 73 75 62 63 6f 6d 6d 61 6e 64 20 6f 66 e" subcommand of
4a50: 20 74 68 65 20 22 6f 6f 3a 3a 64 65 66 69 6e 65 the "oo::define
4a60: 22 20 61 6e 64 0a 2d 20 2a 09 22 6f 6f 3a 3a 6f " and.- *."oo::o
4a70: 62 6a 64 65 66 69 6e 65 22 20 63 6f 6d 6d 61 6e bjdefine" comman
4a80: 64 73 2e 0a 2d 20 2a 0a 2d 20 2a 20 2d 2d 2d 2d ds..- *.- * ----
4a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4ad0: 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 69 6e 74 0a 2d --.- */.-.-int.-
4ae0: 54 63 6c 4f 4f 44 65 66 69 6e 65 56 61 72 69 61 TclOODefineVaria
4af0: 62 6c 65 73 4f 62 6a 43 6d 64 28 0a 2d 20 20 20 blesObjCmd(.-
4b00: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 ClientData clie
4b10: 6e 74 44 61 74 61 2c 0a 2d 20 20 20 20 54 63 6c ntData,.- Tcl
4b20: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
4b30: 0a 2d 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 0a .- int objc,.
4b40: 2d 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f - Tcl_Obj *co
4b50: 6e 73 74 20 2a 6f 62 6a 76 29 0a 2d 7b 0a 2d 20 nst *objv).-{.-
4b60: 20 20 20 69 6e 74 20 69 73 49 6e 73 74 61 6e 63 int isInstanc
4b70: 65 56 61 72 73 20 3d 20 50 54 52 32 49 4e 54 28 eVars = PTR2INT(
4b80: 63 6c 69 65 6e 74 44 61 74 61 29 3b 0a 2d 20 20 clientData);.-
4b90: 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 72 20 3d Object *oPtr =
4ba0: 20 28 4f 62 6a 65 63 74 20 2a 29 20 54 63 6c 4f (Object *) TclO
4bb0: 4f 47 65 74 44 65 66 69 6e 65 43 6d 64 43 6f 6e OGetDefineCmdCon
4bc0: 74 65 78 74 28 69 6e 74 65 72 70 29 3b 0a 2d 20 text(interp);.-
4bd0: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 72 69 Tcl_Obj *vari
4be0: 61 62 6c 65 4f 62 6a 3b 0a 2d 20 20 20 20 69 6e ableObj;.- in
4bf0: 74 20 69 3b 0a 2d 0a 2d 20 20 20 20 69 66 20 28 t i;.-.- if (
4c00: 6f 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a oPtr == NULL) {.
4c10: 2d 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 -.return TCL_ERR
4c20: 4f 52 3b 0a 2d 20 20 20 20 7d 0a 2d 20 20 20 20 OR;.- }.-
4c30: 69 66 20 28 21 69 73 49 6e 73 74 61 6e 63 65 56 if (!isInstanceV
4c40: 61 72 73 20 26 26 20 21 6f 50 74 72 2d 3e 63 6c ars && !oPtr->cl
4c50: 61 73 73 50 74 72 29 20 7b 0a 2d 09 54 63 6c 5f assPtr) {.-.Tcl_
4c60: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 AppendResult(int
4c70: 65 72 70 2c 20 22 61 74 74 65 6d 70 74 20 74 6f erp, "attempt to
4c80: 20 6d 69 73 75 73 65 20 41 50 49 22 2c 20 4e 55 misuse API", NU
4c90: 4c 4c 29 3b 0a 2d 09 72 65 74 75 72 6e 20 54 43 LL);.-.return TC
4ca0: 4c 5f 45 52 52 4f 52 3b 0a 2d 20 20 20 20 7d 0a L_ERROR;.- }.
4cb0: 2d 0a 2d 20 20 20 20 66 6f 72 20 28 69 3d 31 20 -.- for (i=1
4cc0: 3b 20 69 3c 6f 62 6a 63 20 3b 20 69 2b 2b 29 20 ; i<objc ; i++)
4cd0: 7b 0a 2d 09 63 6f 6e 73 74 20 63 68 61 72 20 2a {.-.const char *
4ce0: 76 61 72 4e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 varName = Tcl_Ge
4cf0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 69 5d 29 tString(objv[i])
4d00: 3b 0a 2d 0a 2d 09 69 66 20 28 73 74 72 73 74 72 ;.-.-.if (strstr
4d10: 28 76 61 72 4e 61 6d 65 2c 20 22 3a 3a 22 29 20 (varName, "::")
4d20: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 20 20 20 != NULL) {.-.
4d30: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c Tcl_AppendResul
4d40: 74 28 69 6e 74 65 72 70 2c 20 22 69 6e 76 61 6c t(interp, "inval
4d50: 69 64 20 64 65 63 6c 61 72 65 64 20 76 61 72 69 id declared vari
4d60: 61 62 6c 65 20 6e 61 6d 65 20 5c 22 22 2c 0a 2d able name \"",.-
4d70: 09 09 20 20 20 20 76 61 72 4e 61 6d 65 2c 20 22 .. varName, "
4d80: 5c 22 3a 20 6d 75 73 74 20 6e 6f 74 20 63 6f 6e \": must not con
4d90: 74 61 69 6e 20 6e 61 6d 65 73 70 61 63 65 20 73 tain namespace s
4da0: 65 70 61 72 61 74 6f 72 73 22 2c 0a 2d 09 09 20 eparators",.-..
4db0: 20 20 20 4e 55 4c 4c 29 3b 0a 2d 09 20 20 20 20 NULL);.-.
4dc0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
4dd0: 3b 0a 2d 09 7d 0a 2d 09 69 66 20 28 54 63 6c 5f ;.-.}.-.if (Tcl_
4de0: 53 74 72 69 6e 67 4d 61 74 63 68 28 76 61 72 4e StringMatch(varN
4df0: 61 6d 65 2c 20 22 2a 28 2a 29 22 29 29 20 7b 0a ame, "*(*)")) {.
4e00: 2d 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 -. Tcl_Append
4e10: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 Result(interp, "
4e20: 69 6e 76 61 6c 69 64 20 64 65 63 6c 61 72 65 64 invalid declared
4e30: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 5c variable name \
4e40: 22 22 2c 0a 2d 09 09 20 20 20 20 76 61 72 4e 61 "",.-.. varNa
4e50: 6d 65 2c 20 22 5c 22 3a 20 6d 75 73 74 20 6e 6f me, "\": must no
4e60: 74 20 72 65 66 65 72 20 74 6f 20 61 6e 20 61 72 t refer to an ar
4e70: 72 61 79 20 65 6c 65 6d 65 6e 74 22 2c 20 4e 55 ray element", NU
4e80: 4c 4c 29 3b 0a 2d 09 20 20 20 20 72 65 74 75 72 LL);.-. retur
4e90: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 09 7d n TCL_ERROR;.-.}
4ea0: 0a 2d 20 20 20 20 7d 0a 2d 20 20 20 20 66 6f 72 .- }.- for
4eb0: 20 28 69 3d 31 20 3b 20 69 3c 6f 62 6a 63 20 3b (i=1 ; i<objc ;
4ec0: 20 69 2b 2b 29 20 7b 0a 2d 09 54 63 6c 5f 49 6e i++) {.-.Tcl_In
4ed0: 63 72 52 65 66 43 6f 75 6e 74 28 6f 62 6a 76 5b crRefCount(objv[
4ee0: 69 5d 29 3b 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20 i]);.- }.-.-
4ef0: 20 20 20 69 66 20 28 21 69 73 49 6e 73 74 61 6e if (!isInstan
4f00: 63 65 56 61 72 73 29 20 7b 0a 2d 09 46 4f 52 45 ceVars) {.-.FORE
4f10: 41 43 48 28 76 61 72 69 61 62 6c 65 4f 62 6a 2c ACH(variableObj,
4f20: 20 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d oPtr->classPtr-
4f30: 3e 76 61 72 69 61 62 6c 65 73 29 20 7b 0a 2d 09 >variables) {.-.
4f40: 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 Tcl_DecrRefC
4f50: 6f 75 6e 74 28 76 61 72 69 61 62 6c 65 4f 62 6a ount(variableObj
4f60: 29 3b 0a 2d 09 7d 0a 2d 09 69 66 20 28 69 20 21 );.-.}.-.if (i !
4f70: 3d 20 6f 62 6a 63 2d 31 29 20 7b 0a 2d 09 20 20 = objc-1) {.-.
4f80: 20 20 69 66 20 28 6f 62 6a 63 20 3d 3d 20 31 29 if (objc == 1)
4f90: 20 7b 0a 2d 09 09 63 6b 66 72 65 65 28 28 63 68 {.-..ckfree((ch
4fa0: 61 72 20 2a 29 20 6f 50 74 72 2d 3e 63 6c 61 73 ar *) oPtr->clas
4fb0: 73 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e sPtr->variables.
4fc0: 6c 69 73 74 29 3b 0a 2d 09 20 20 20 20 7d 20 65 list);.-. } e
4fd0: 6c 73 65 20 69 66 20 28 69 29 20 7b 0a 2d 09 09 lse if (i) {.-..
4fe0: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d 3e oPtr->classPtr->
4ff0: 76 61 72 69 61 62 6c 65 73 2e 6c 69 73 74 20 3d variables.list =
5000: 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 0a 2d 09 (Tcl_Obj **).-.
5010: 09 09 63 6b 72 65 61 6c 6c 6f 63 28 28 63 68 61 ..ckrealloc((cha
5020: 72 20 2a 29 20 6f 50 74 72 2d 3e 63 6c 61 73 73 r *) oPtr->class
5030: 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c Ptr->variables.l
5040: 69 73 74 2c 0a 2d 09 09 09 73 69 7a 65 6f 66 28 ist,.-...sizeof(
5050: 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 28 6f 62 Tcl_Obj *) * (ob
5060: 6a 63 2d 31 29 29 3b 0a 2d 09 20 20 20 20 7d 20 jc-1));.-. }
5070: 65 6c 73 65 20 7b 0a 2d 09 09 6f 50 74 72 2d 3e else {.-..oPtr->
5080: 63 6c 61 73 73 50 74 72 2d 3e 76 61 72 69 61 62 classPtr->variab
5090: 6c 65 73 2e 6c 69 73 74 20 3d 20 28 54 63 6c 5f les.list = (Tcl_
50a0: 4f 62 6a 20 2a 2a 29 0a 2d 09 09 09 63 6b 61 6c Obj **).-...ckal
50b0: 6c 6f 63 28 73 69 7a 65 6f 66 28 54 63 6c 5f 4f loc(sizeof(Tcl_O
50c0: 62 6a 20 2a 29 20 2a 20 28 6f 62 6a 63 2d 31 29 bj *) * (objc-1)
50d0: 29 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09 7d 0a 2d );.-. }.-.}.-
50e0: 09 69 66 20 28 6f 62 6a 63 20 3e 20 31 29 20 7b .if (objc > 1) {
50f0: 0a 2d 09 20 20 20 20 6d 65 6d 63 70 79 28 6f 50 .-. memcpy(oP
5100: 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 76 61 tr->classPtr->va
5110: 72 69 61 62 6c 65 73 2e 6c 69 73 74 2c 20 6f 62 riables.list, ob
5120: 6a 76 2b 31 2c 0a 2d 09 09 20 20 20 20 73 69 7a jv+1,.-.. siz
5130: 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a eof(Tcl_Obj *) *
5140: 20 28 6f 62 6a 63 2d 31 29 29 3b 0a 2d 09 7d 0a (objc-1));.-.}.
5150: 2d 09 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 -.oPtr->classPtr
5160: 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6e 75 6d 20 ->variables.num
5170: 3d 20 6f 62 6a 63 2d 31 3b 0a 2d 20 20 20 20 7d = objc-1;.- }
5180: 20 65 6c 73 65 20 7b 0a 2d 09 46 4f 52 45 41 43 else {.-.FOREAC
5190: 48 28 76 61 72 69 61 62 6c 65 4f 62 6a 2c 20 6f H(variableObj, o
51a0: 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 29 20 Ptr->variables)
51b0: 7b 0a 2d 09 20 20 20 20 54 63 6c 5f 44 65 63 72 {.-. Tcl_Decr
51c0: 52 65 66 43 6f 75 6e 74 28 76 61 72 69 61 62 6c RefCount(variabl
51d0: 65 4f 62 6a 29 3b 0a 2d 09 7d 0a 2d 09 69 66 20 eObj);.-.}.-.if
51e0: 28 69 20 21 3d 20 6f 62 6a 63 2d 31 29 20 7b 0a (i != objc-1) {.
51f0: 2d 09 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3d -. if (objc =
5200: 3d 20 31 29 20 7b 0a 2d 09 09 63 6b 66 72 65 65 = 1) {.-..ckfree
5210: 28 28 63 68 61 72 20 2a 29 20 6f 50 74 72 2d 3e ((char *) oPtr->
5220: 76 61 72 69 61 62 6c 65 73 2e 6c 69 73 74 29 3b variables.list);
5230: 0a 2d 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66 .-. } else if
5240: 20 28 69 29 20 7b 0a 2d 09 09 6f 50 74 72 2d 3e (i) {.-..oPtr->
5250: 76 61 72 69 61 62 6c 65 73 2e 6c 69 73 74 20 3d variables.list =
5260: 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 0a 2d 09 (Tcl_Obj **).-.
5270: 09 09 63 6b 72 65 61 6c 6c 6f 63 28 28 63 68 61 ..ckrealloc((cha
5280: 72 20 2a 29 20 6f 50 74 72 2d 3e 76 61 72 69 61 r *) oPtr->varia
5290: 62 6c 65 73 2e 6c 69 73 74 2c 0a 2d 09 09 09 73 bles.list,.-...s
52a0: 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 izeof(Tcl_Obj *)
52b0: 20 2a 20 28 6f 62 6a 63 2d 31 29 29 3b 0a 2d 09 * (objc-1));.-.
52c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 09 } else {.-..
52d0: 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e oPtr->variables.
52e0: 6c 69 73 74 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 list = (Tcl_Obj
52f0: 2a 2a 29 0a 2d 09 09 09 63 6b 61 6c 6c 6f 63 28 **).-...ckalloc(
5300: 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a sizeof(Tcl_Obj *
5310: 29 20 2a 20 28 6f 62 6a 63 2d 31 29 29 3b 0a 2d ) * (objc-1));.-
5320: 09 20 20 20 20 7d 0a 2d 09 7d 0a 2d 09 69 66 20 . }.-.}.-.if
5330: 28 6f 62 6a 63 20 3e 20 31 29 20 7b 0a 2d 09 20 (objc > 1) {.-.
5340: 20 20 20 6d 65 6d 63 70 79 28 6f 50 74 72 2d 3e memcpy(oPtr->
5350: 76 61 72 69 61 62 6c 65 73 2e 6c 69 73 74 2c 20 variables.list,
5360: 6f 62 6a 76 2b 31 2c 20 73 69 7a 65 6f 66 28 54 objv+1, sizeof(T
5370: 63 6c 5f 4f 62 6a 20 2a 29 2a 28 6f 62 6a 63 2d cl_Obj *)*(objc-
5380: 31 29 29 3b 0a 2d 09 7d 0a 2d 09 6f 50 74 72 2d 1));.-.}.-.oPtr-
5390: 3e 76 61 72 69 61 62 6c 65 73 2e 6e 75 6d 20 3d >variables.num =
53a0: 20 6f 62 6a 63 2d 31 3b 0a 2d 20 20 20 20 7d 0a objc-1;.- }.
53b0: 2d 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f - return TCL_
53c0: 4f 4b 3b 0a 2d 7d 0a 2d 0c 0a 20 76 6f 69 64 0a OK;.-}.-.. void.
53d0: 20 54 63 6c 5f 43 6c 61 73 73 53 65 74 43 6f 6e Tcl_ClassSetCon
53e0: 73 74 72 75 63 74 6f 72 28 0a 20 20 20 20 20 54 structor(. T
53f0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
5400: 70 2c 0a 40 40 20 2d 31 39 37 33 2c 36 20 2b 31 p,.@@ -1973,6 +1
5410: 37 35 35 2c 36 34 33 20 40 40 0a 20 20 20 20 20 755,643 @@.
5420: 7d 0a 20 7d 0a 20 0c 0a 2b 69 6e 74 0a 2b 54 63 }. }. ..+int.+Tc
5430: 6c 4f 4f 44 65 66 69 6e 65 53 6c 6f 74 73 28 0a lOODefineSlots(.
5440: 2b 20 20 20 20 46 6f 75 6e 64 61 74 69 6f 6e 20 + Foundation
5450: 2a 66 50 74 72 29 0a 2b 7b 0a 2b 20 20 20 20 63 *fPtr).+{.+ c
5460: 6f 6e 73 74 20 73 74 72 75 63 74 20 44 65 63 6c onst struct Decl
5470: 61 72 65 64 53 6c 6f 74 20 2a 73 6c 6f 74 49 6e aredSlot *slotIn
5480: 66 6f 50 74 72 3b 0a 2b 20 20 20 20 54 63 6c 5f foPtr;.+ Tcl_
5490: 4f 62 6a 20 2a 67 65 74 4e 61 6d 65 20 3d 20 54 Obj *getName = T
54a0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 cl_NewStringObj(
54b0: 22 47 65 74 22 2c 20 2d 31 29 3b 0a 2b 20 20 20 "Get", -1);.+
54c0: 20 54 63 6c 5f 4f 62 6a 20 2a 73 65 74 4e 61 6d Tcl_Obj *setNam
54d0: 65 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e e = Tcl_NewStrin
54e0: 67 4f 62 6a 28 22 53 65 74 22 2c 20 2d 31 29 3b gObj("Set", -1);
54f0: 0a 2b 20 20 20 20 43 6c 61 73 73 20 2a 73 6c 6f .+ Class *slo
5500: 74 43 6c 73 3b 0a 2b 0a 2b 20 20 20 20 73 6c 6f tCls;.+.+ slo
5510: 74 43 6c 73 20 3d 20 28 28 4f 62 6a 65 63 74 20 tCls = ((Object
5520: 2a 29 20 54 63 6c 5f 4e 65 77 4f 62 6a 65 63 74 *) Tcl_NewObject
5530: 49 6e 73 74 61 6e 63 65 28 66 50 74 72 2d 3e 69 Instance(fPtr->i
5540: 6e 74 65 72 70 2c 20 28 54 63 6c 5f 43 6c 61 73 nterp, (Tcl_Clas
5550: 73 29 0a 2b 09 20 20 20 20 66 50 74 72 2d 3e 63 s).+. fPtr->c
5560: 6c 61 73 73 43 6c 73 2c 20 22 3a 3a 6f 6f 3a 3a lassCls, "::oo::
5570: 53 6c 6f 74 22 2c 20 4e 55 4c 4c 2c 20 2d 31 2c Slot", NULL, -1,
5580: 20 4e 55 4c 4c 2c 20 30 29 29 2d 3e 63 6c 61 73 NULL, 0))->clas
5590: 73 50 74 72 3b 0a 2b 20 20 20 20 69 66 20 28 73 sPtr;.+ if (s
55a0: 6c 6f 74 43 6c 73 20 3d 3d 20 4e 55 4c 4c 29 20 lotCls == NULL)
55b0: 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 {.+.return TCL_E
55c0: 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 RROR;.+ }.+
55d0: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 Tcl_IncrRefCou
55e0: 6e 74 28 67 65 74 4e 61 6d 65 29 3b 0a 2b 20 20 nt(getName);.+
55f0: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 Tcl_IncrRefCou
5600: 6e 74 28 73 65 74 4e 61 6d 65 29 3b 0a 2b 20 20 nt(setName);.+
5610: 20 20 66 6f 72 20 28 73 6c 6f 74 49 6e 66 6f 50 for (slotInfoP
5620: 74 72 20 3d 20 73 6c 6f 74 73 20 3b 20 73 6c 6f tr = slots ; slo
5630: 74 49 6e 66 6f 50 74 72 2d 3e 6e 61 6d 65 20 3b tInfoPtr->name ;
5640: 20 73 6c 6f 74 49 6e 66 6f 50 74 72 2b 2b 29 20 slotInfoPtr++)
5650: 7b 0a 2b 09 54 63 6c 5f 4f 62 6a 65 63 74 20 73 {.+.Tcl_Object s
5660: 6c 6f 74 4f 62 6a 65 63 74 20 3d 20 54 63 6c 5f lotObject = Tcl_
5670: 4e 65 77 4f 62 6a 65 63 74 49 6e 73 74 61 6e 63 NewObjectInstanc
5680: 65 28 66 50 74 72 2d 3e 69 6e 74 65 72 70 2c 0a e(fPtr->interp,.
5690: 2b 09 09 28 54 63 6c 5f 43 6c 61 73 73 29 20 73 +..(Tcl_Class) s
56a0: 6c 6f 74 43 6c 73 2c 20 73 6c 6f 74 49 6e 66 6f lotCls, slotInfo
56b0: 50 74 72 2d 3e 6e 61 6d 65 2c 20 4e 55 4c 4c 2c Ptr->name, NULL,
56c0: 2d 31 2c 4e 55 4c 4c 2c 30 29 3b 0a 2b 0a 2b 09 -1,NULL,0);.+.+.
56d0: 69 66 20 28 73 6c 6f 74 4f 62 6a 65 63 74 20 3d if (slotObject =
56e0: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 = NULL) {.+.
56f0: 63 6f 6e 74 69 6e 75 65 3b 0a 2b 09 7d 0a 2b 09 continue;.+.}.+.
5700: 54 63 6c 5f 4e 65 77 49 6e 73 74 61 6e 63 65 4d Tcl_NewInstanceM
5710: 65 74 68 6f 64 28 66 50 74 72 2d 3e 69 6e 74 65 ethod(fPtr->inte
5720: 72 70 2c 20 73 6c 6f 74 4f 62 6a 65 63 74 2c 20 rp, slotObject,
5730: 67 65 74 4e 61 6d 65 2c 20 30 2c 0a 2b 09 09 26 getName, 0,.+..&
5740: 73 6c 6f 74 49 6e 66 6f 50 74 72 2d 3e 67 65 74 slotInfoPtr->get
5750: 74 65 72 54 79 70 65 2c 20 4e 55 4c 4c 29 3b 0a terType, NULL);.
5760: 2b 09 54 63 6c 5f 4e 65 77 49 6e 73 74 61 6e 63 +.Tcl_NewInstanc
5770: 65 4d 65 74 68 6f 64 28 66 50 74 72 2d 3e 69 6e eMethod(fPtr->in
5780: 74 65 72 70 2c 20 73 6c 6f 74 4f 62 6a 65 63 74 terp, slotObject
5790: 2c 20 73 65 74 4e 61 6d 65 2c 20 30 2c 0a 2b 09 , setName, 0,.+.
57a0: 09 26 73 6c 6f 74 49 6e 66 6f 50 74 72 2d 3e 73 .&slotInfoPtr->s
57b0: 65 74 74 65 72 54 79 70 65 2c 20 4e 55 4c 4c 29 etterType, NULL)
57c0: 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 54 63 ;.+ }.+ Tc
57d0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 67 l_DecrRefCount(g
57e0: 65 74 4e 61 6d 65 29 3b 0a 2b 20 20 20 20 54 63 etName);.+ Tc
57f0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 73 l_DecrRefCount(s
5800: 65 74 4e 61 6d 65 29 3b 0a 2b 20 20 20 20 72 65 etName);.+ re
5810: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a turn TCL_OK;.+}.
5820: 2b 0c 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b +..+static int.+
5830: 43 6c 61 73 73 46 69 6c 74 65 72 47 65 74 28 0a ClassFilterGet(.
5840: 2b 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 + ClientData
5850: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 20 20 20 clientData,.+
5860: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 Tcl_Interp *int
5870: 65 72 70 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 erp,.+ Tcl_Ob
5880: 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 jectContext cont
5890: 65 78 74 2c 0a 2b 20 20 20 20 69 6e 74 20 6f 62 ext,.+ int ob
58a0: 6a 63 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a jc,.+ Tcl_Obj
58b0: 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a 2b *const *objv).+
58c0: 7b 0a 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f {.+ Object *o
58d0: 50 74 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 Ptr = (Object *)
58e0: 20 54 63 6c 4f 4f 47 65 74 44 65 66 69 6e 65 43 TclOOGetDefineC
58f0: 6d 64 43 6f 6e 74 65 78 74 28 69 6e 74 65 72 70 mdContext(interp
5900: 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 );.+ Tcl_Obj
5910: 2a 72 65 73 75 6c 74 4f 62 6a 2c 20 2a 66 69 6c *resultObj, *fil
5920: 74 65 72 4f 62 6a 3b 0a 2b 20 20 20 20 69 6e 74 terObj;.+ int
5930: 20 69 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 54 i;.+.+ if (T
5940: 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 cl_ObjectContext
5950: 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e 74 SkippedArgs(cont
5960: 65 78 74 29 20 21 3d 20 6f 62 6a 63 29 20 7b 0a ext) != objc) {.
5970: 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 +.Tcl_WrongNumAr
5980: 67 73 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f gs(interp, Tcl_O
5990: 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 bjectContextSkip
59a0: 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 pedArgs(context)
59b0: 2c 20 6f 62 6a 76 2c 0a 2b 09 09 4e 55 4c 4c 29 , objv,.+..NULL)
59c0: 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 ;.+.return TCL_E
59d0: 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 RROR;.+ }.+
59e0: 20 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e 55 if (oPtr == NU
59f0: 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 LL) {.+.return T
5a00: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d CL_ERROR;.+ }
5a10: 20 65 6c 73 65 20 69 66 20 28 21 6f 50 74 72 2d else if (!oPtr-
5a20: 3e 63 6c 61 73 73 50 74 72 29 20 7b 0a 2b 09 54 >classPtr) {.+.T
5a30: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 cl_AppendResult(
5a40: 69 6e 74 65 72 70 2c 20 22 61 74 74 65 6d 70 74 interp, "attempt
5a50: 20 74 6f 20 6d 69 73 75 73 65 20 41 50 49 22 2c to misuse API",
5a60: 20 4e 55 4c 4c 29 3b 0a 2b 09 72 65 74 75 72 6e NULL);.+.return
5a70: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 TCL_ERROR;.+
5a80: 20 7d 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74 }.+.+ result
5a90: 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a Obj = Tcl_NewObj
5aa0: 28 29 3b 0a 2b 20 20 20 20 46 4f 52 45 41 43 48 ();.+ FOREACH
5ab0: 28 66 69 6c 74 65 72 4f 62 6a 2c 20 6f 50 74 72 (filterObj, oPtr
5ac0: 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 66 69 6c 74 ->classPtr->filt
5ad0: 65 72 73 29 20 7b 0a 2b 09 54 63 6c 5f 4c 69 73 ers) {.+.Tcl_Lis
5ae0: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e tObjAppendElemen
5af0: 74 28 4e 55 4c 4c 2c 20 72 65 73 75 6c 74 4f 62 t(NULL, resultOb
5b00: 6a 2c 20 66 69 6c 74 65 72 4f 62 6a 29 3b 0a 2b j, filterObj);.+
5b10: 20 20 20 20 7d 0a 2b 20 20 20 20 54 63 6c 5f 53 }.+ Tcl_S
5b20: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 etObjResult(inte
5b30: 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a rp, resultObj);.
5b40: 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f + return TCL_
5b50: 4f 4b 3b 0a 2b 7d 0a 2b 0a 2b 73 74 61 74 69 63 OK;.+}.+.+static
5b60: 20 69 6e 74 0a 2b 43 6c 61 73 73 46 69 6c 74 65 int.+ClassFilte
5b70: 72 53 65 74 28 0a 2b 20 20 20 20 43 6c 69 65 6e rSet(.+ Clien
5b80: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 tData clientData
5b90: 2c 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 ,.+ Tcl_Inter
5ba0: 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 20 20 20 20 p *interp,.+
5bb0: 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 Tcl_ObjectContex
5bc0: 74 20 63 6f 6e 74 65 78 74 2c 0a 2b 20 20 20 20 t context,.+
5bd0: 69 6e 74 20 6f 62 6a 63 2c 0a 2b 20 20 20 20 54 int objc,.+ T
5be0: 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f cl_Obj *const *o
5bf0: 62 6a 76 29 0a 2b 7b 0a 2b 20 20 20 20 4f 62 6a bjv).+{.+ Obj
5c00: 65 63 74 20 2a 6f 50 74 72 20 3d 20 28 4f 62 6a ect *oPtr = (Obj
5c10: 65 63 74 20 2a 29 20 54 63 6c 4f 4f 47 65 74 44 ect *) TclOOGetD
5c20: 65 66 69 6e 65 43 6d 64 43 6f 6e 74 65 78 74 28 efineCmdContext(
5c30: 69 6e 74 65 72 70 29 3b 0a 2b 20 20 20 20 69 6e interp);.+ in
5c40: 74 20 66 69 6c 74 65 72 63 3b 0a 2b 20 20 20 20 t filterc;.+
5c50: 54 63 6c 5f 4f 62 6a 20 2a 2a 66 69 6c 74 65 72 Tcl_Obj **filter
5c60: 76 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 54 63 v;.+.+ if (Tc
5c70: 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 l_ObjectContextS
5c80: 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 kippedArgs(conte
5c90: 78 74 29 2b 31 20 21 3d 20 6f 62 6a 63 29 20 7b xt)+1 != objc) {
5ca0: 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 .+.Tcl_WrongNumA
5cb0: 72 67 73 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f rgs(interp, Tcl_
5cc0: 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 ObjectContextSki
5cd0: 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 ppedArgs(context
5ce0: 29 2c 20 6f 62 6a 76 2c 0a 2b 09 09 22 66 69 6c ), objv,.+.."fil
5cf0: 74 65 72 4c 69 73 74 22 29 3b 0a 2b 09 72 65 74 terList");.+.ret
5d00: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b urn TCL_ERROR;.+
5d10: 20 20 20 20 7d 0a 2b 20 20 20 20 6f 62 6a 76 20 }.+ objv
5d20: 2b 3d 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e += Tcl_ObjectCon
5d30: 74 65 78 74 53 6b 69 70 70 65 64 41 72 67 73 28 textSkippedArgs(
5d40: 63 6f 6e 74 65 78 74 29 3b 0a 2b 0a 2b 20 20 20 context);.+.+
5d50: 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e 55 4c if (oPtr == NUL
5d60: 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 L) {.+.return TC
5d70: 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 20 L_ERROR;.+ }
5d80: 65 6c 73 65 20 69 66 20 28 21 6f 50 74 72 2d 3e else if (!oPtr->
5d90: 63 6c 61 73 73 50 74 72 29 20 7b 0a 2b 09 54 63 classPtr) {.+.Tc
5da0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 l_AppendResult(i
5db0: 6e 74 65 72 70 2c 20 22 61 74 74 65 6d 70 74 20 nterp, "attempt
5dc0: 74 6f 20 6d 69 73 75 73 65 20 41 50 49 22 2c 20 to misuse API",
5dd0: 4e 55 4c 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 NULL);.+.return
5de0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 TCL_ERROR;.+
5df0: 7d 20 65 6c 73 65 20 69 66 20 28 54 63 6c 5f 4c } else if (Tcl_L
5e00: 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 istObjGetElement
5e10: 73 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 30 s(interp, objv[0
5e20: 5d 2c 20 26 66 69 6c 74 65 72 63 2c 0a 2b 09 20 ], &filterc,.+.
5e30: 20 20 20 26 66 69 6c 74 65 72 76 29 20 21 3d 20 &filterv) !=
5e40: 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 72 65 74 75 TCL_OK) {.+.retu
5e50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 rn TCL_ERROR;.+
5e60: 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 54 63 6c 4f }.+.+ TclO
5e70: 4f 43 6c 61 73 73 53 65 74 46 69 6c 74 65 72 73 OClassSetFilters
5e80: 28 69 6e 74 65 72 70 2c 20 6f 50 74 72 2d 3e 63 (interp, oPtr->c
5e90: 6c 61 73 73 50 74 72 2c 20 66 69 6c 74 65 72 63 lassPtr, filterc
5ea0: 2c 20 66 69 6c 74 65 72 76 29 3b 0a 2b 20 20 20 , filterv);.+
5eb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a return TCL_OK;.
5ec0: 2b 7d 0a 2b 0c 0a 2b 73 74 61 74 69 63 20 69 6e +}.+..+static in
5ed0: 74 0a 2b 43 6c 61 73 73 4d 69 78 69 6e 47 65 74 t.+ClassMixinGet
5ee0: 28 0a 2b 20 20 20 20 43 6c 69 65 6e 74 44 61 74 (.+ ClientDat
5ef0: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 20 a clientData,.+
5f00: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 Tcl_Interp *i
5f10: 6e 74 65 72 70 2c 0a 2b 20 20 20 20 54 63 6c 5f nterp,.+ Tcl_
5f20: 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f ObjectContext co
5f30: 6e 74 65 78 74 2c 0a 2b 20 20 20 20 69 6e 74 20 ntext,.+ int
5f40: 6f 62 6a 63 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f objc,.+ Tcl_O
5f50: 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 bj *const *objv)
5f60: 0a 2b 7b 0a 2b 20 20 20 20 4f 62 6a 65 63 74 20 .+{.+ Object
5f70: 2a 6f 50 74 72 20 3d 20 28 4f 62 6a 65 63 74 20 *oPtr = (Object
5f80: 2a 29 20 54 63 6c 4f 4f 47 65 74 44 65 66 69 6e *) TclOOGetDefin
5f90: 65 43 6d 64 43 6f 6e 74 65 78 74 28 69 6e 74 65 eCmdContext(inte
5fa0: 72 70 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 rp);.+ Tcl_Ob
5fb0: 6a 20 2a 72 65 73 75 6c 74 4f 62 6a 3b 0a 2b 20 j *resultObj;.+
5fc0: 20 20 20 43 6c 61 73 73 20 2a 6d 69 78 69 6e 50 Class *mixinP
5fd0: 74 72 3b 0a 2b 20 20 20 20 69 6e 74 20 69 3b 0a tr;.+ int i;.
5fe0: 2b 0a 2b 20 20 20 20 69 66 20 28 54 63 6c 5f 4f +.+ if (Tcl_O
5ff0: 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 bjectContextSkip
6000: 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 pedArgs(context)
6010: 20 21 3d 20 6f 62 6a 63 29 20 7b 0a 2b 09 54 63 != objc) {.+.Tc
6020: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 l_WrongNumArgs(i
6030: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 65 63 nterp, Tcl_Objec
6040: 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 64 41 tContextSkippedA
6050: 72 67 73 28 63 6f 6e 74 65 78 74 29 2c 20 6f 62 rgs(context), ob
6060: 6a 76 2c 0a 2b 09 09 4e 55 4c 4c 29 3b 0a 2b 09 jv,.+..NULL);.+.
6070: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
6080: 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69 66 ;.+ }.+ if
6090: 20 28 6f 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 (oPtr == NULL)
60a0: 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 {.+.return TCL_E
60b0: 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 RROR;.+ } els
60c0: 65 20 69 66 20 28 21 6f 50 74 72 2d 3e 63 6c 61 e if (!oPtr->cla
60d0: 73 73 50 74 72 29 20 7b 0a 2b 09 54 63 6c 5f 41 ssPtr) {.+.Tcl_A
60e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
60f0: 72 70 2c 20 22 61 74 74 65 6d 70 74 20 74 6f 20 rp, "attempt to
6100: 6d 69 73 75 73 65 20 41 50 49 22 2c 20 4e 55 4c misuse API", NUL
6110: 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c L);.+.return TCL
6120: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b _ERROR;.+ }.+
6130: 0a 2b 20 20 20 20 72 65 73 75 6c 74 4f 62 6a 20 .+ resultObj
6140: 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a = Tcl_NewObj();.
6150: 2b 20 20 20 20 46 4f 52 45 41 43 48 28 6d 69 78 + FOREACH(mix
6160: 69 6e 50 74 72 2c 20 6f 50 74 72 2d 3e 63 6c 61 inPtr, oPtr->cla
6170: 73 73 50 74 72 2d 3e 6d 69 78 69 6e 73 29 20 7b ssPtr->mixins) {
6180: 0a 2b 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 .+.Tcl_ListObjAp
6190: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c pendElement(NULL
61a0: 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 0a 2b 09 09 , resultObj,.+..
61b0: 54 63 6c 4f 4f 4f 62 6a 65 63 74 4e 61 6d 65 28 TclOOObjectName(
61c0: 69 6e 74 65 72 70 2c 20 6d 69 78 69 6e 50 74 72 interp, mixinPtr
61d0: 2d 3e 74 68 69 73 50 74 72 29 29 3b 0a 2b 20 20 ->thisPtr));.+
61e0: 20 20 7d 0a 2b 20 20 20 20 54 63 6c 5f 53 65 74 }.+ Tcl_Set
61f0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 ObjResult(interp
6200: 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a 2b 20 , resultObj);.+
6210: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b return TCL_OK
6220: 3b 0a 2b 0a 2b 7d 0a 2b 0a 2b 73 74 61 74 69 63 ;.+.+}.+.+static
6230: 20 69 6e 74 0a 2b 43 6c 61 73 73 4d 69 78 69 6e int.+ClassMixin
6240: 53 65 74 28 0a 2b 20 20 20 20 43 6c 69 65 6e 74 Set(.+ Client
6250: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c Data clientData,
6260: 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 .+ Tcl_Interp
6270: 20 2a 69 6e 74 65 72 70 2c 0a 2b 20 20 20 20 54 *interp,.+ T
6280: 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 cl_ObjectContext
6290: 20 63 6f 6e 74 65 78 74 2c 0a 2b 20 20 20 20 69 context,.+ i
62a0: 6e 74 20 6f 62 6a 63 2c 0a 2b 20 20 20 20 54 63 nt objc,.+ Tc
62b0: 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 l_Obj *const *ob
62c0: 6a 76 29 0a 2b 7b 0a 2b 20 20 20 20 4f 62 6a 65 jv).+{.+ Obje
62d0: 63 74 20 2a 6f 50 74 72 20 3d 20 28 4f 62 6a 65 ct *oPtr = (Obje
62e0: 63 74 20 2a 29 20 54 63 6c 4f 4f 47 65 74 44 65 ct *) TclOOGetDe
62f0: 66 69 6e 65 43 6d 64 43 6f 6e 74 65 78 74 28 69 fineCmdContext(i
6300: 6e 74 65 72 70 29 3b 0a 2b 20 20 20 20 69 6e 74 nterp);.+ int
6310: 20 6d 69 78 69 6e 63 2c 20 69 3b 0a 2b 20 20 20 mixinc, i;.+
6320: 20 54 63 6c 5f 4f 62 6a 20 2a 2a 6d 69 78 69 6e Tcl_Obj **mixin
6330: 76 3b 0a 2b 20 20 20 20 43 6c 61 73 73 20 2a 2a v;.+ Class **
6340: 6d 69 78 69 6e 73 3b 0a 2b 0a 2b 20 20 20 20 69 mixins;.+.+ i
6350: 66 20 28 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e f (Tcl_ObjectCon
6360: 74 65 78 74 53 6b 69 70 70 65 64 41 72 67 73 28 textSkippedArgs(
6370: 63 6f 6e 74 65 78 74 29 2b 31 20 21 3d 20 6f 62 context)+1 != ob
6380: 6a 63 29 20 7b 0a 2b 09 54 63 6c 5f 57 72 6f 6e jc) {.+.Tcl_Wron
6390: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c gNumArgs(interp,
63a0: 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 Tcl_ObjectConte
63b0: 78 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f xtSkippedArgs(co
63c0: 6e 74 65 78 74 29 2c 20 6f 62 6a 76 2c 0a 2b 09 ntext), objv,.+.
63d0: 09 22 6d 69 78 69 6e 4c 69 73 74 22 29 3b 0a 2b ."mixinList");.+
63e0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f .return TCL_ERRO
63f0: 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 6f R;.+ }.+ o
6400: 62 6a 76 20 2b 3d 20 54 63 6c 5f 4f 62 6a 65 63 bjv += Tcl_Objec
6410: 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 64 41 tContextSkippedA
6420: 72 67 73 28 63 6f 6e 74 65 78 74 29 3b 0a 2b 0a rgs(context);.+.
6430: 2b 20 20 20 20 69 66 20 28 6f 50 74 72 20 3d 3d + if (oPtr ==
6440: 20 4e 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 NULL) {.+.retur
6450: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 n TCL_ERROR;.+
6460: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 21 6f 50 } else if (!oP
6470: 74 72 2d 3e 63 6c 61 73 73 50 74 72 29 20 7b 0a tr->classPtr) {.
6480: 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 +.Tcl_AppendResu
6490: 6c 74 28 69 6e 74 65 72 70 2c 20 22 61 74 74 65 lt(interp, "atte
64a0: 6d 70 74 20 74 6f 20 6d 69 73 75 73 65 20 41 50 mpt to misuse AP
64b0: 49 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 72 65 74 I", NULL);.+.ret
64c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b urn TCL_ERROR;.+
64d0: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 54 } else if (T
64e0: 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 cl_ListObjGetEle
64f0: 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 20 6f 62 ments(interp, ob
6500: 6a 76 5b 30 5d 2c 20 26 6d 69 78 69 6e 63 2c 0a jv[0], &mixinc,.
6510: 2b 09 20 20 20 20 26 6d 69 78 69 6e 76 29 20 21 +. &mixinv) !
6520: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 72 65 = TCL_OK) {.+.re
6530: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
6540: 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 6d 69 + }.+.+ mi
6550: 78 69 6e 73 20 3d 20 54 63 6c 53 74 61 63 6b 41 xins = TclStackA
6560: 6c 6c 6f 63 28 69 6e 74 65 72 70 2c 20 73 69 7a lloc(interp, siz
6570: 65 6f 66 28 43 6c 61 73 73 20 2a 29 20 2a 20 6d eof(Class *) * m
6580: 69 78 69 6e 63 29 3b 0a 2b 0a 2b 20 20 20 20 66 ixinc);.+.+ f
6590: 6f 72 20 28 69 3d 30 20 3b 20 69 3c 6d 69 78 69 or (i=0 ; i<mixi
65a0: 6e 63 20 3b 20 69 2b 2b 29 20 7b 0a 2b 09 6d 69 nc ; i++) {.+.mi
65b0: 78 69 6e 73 5b 69 5d 20 3d 20 47 65 74 43 6c 61 xins[i] = GetCla
65c0: 73 73 49 6e 4f 75 74 65 72 43 6f 6e 74 65 78 74 ssInOuterContext
65d0: 28 69 6e 74 65 72 70 2c 20 6d 69 78 69 6e 76 5b (interp, mixinv[
65e0: 69 5d 2c 0a 2b 09 09 22 6d 61 79 20 6f 6e 6c 79 i],.+.."may only
65f0: 20 6d 69 78 20 69 6e 20 63 6c 61 73 73 65 73 22 mix in classes"
6600: 29 3b 0a 2b 09 69 66 20 28 6d 69 78 69 6e 73 5b );.+.if (mixins[
6610: 69 5d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 i] == NULL) {.+.
6620: 20 20 20 20 67 6f 74 6f 20 66 72 65 65 41 6e 64 goto freeAnd
6630: 45 72 72 6f 72 3b 0a 2b 09 7d 0a 2b 09 69 66 20 Error;.+.}.+.if
6640: 28 54 63 6c 4f 4f 49 73 52 65 61 63 68 61 62 6c (TclOOIsReachabl
6650: 65 28 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 e(oPtr->classPtr
6660: 2c 20 6d 69 78 69 6e 73 5b 69 5d 29 29 20 7b 0a , mixins[i])) {.
6670: 2b 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 +. Tcl_Append
6680: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 Result(interp, "
6690: 6d 61 79 20 6e 6f 74 20 6d 69 78 20 61 20 63 6c may not mix a cl
66a0: 61 73 73 20 69 6e 74 6f 20 69 74 73 65 6c 66 22 ass into itself"
66b0: 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 20 20 20 20 67 , NULL);.+. g
66c0: 6f 74 6f 20 66 72 65 65 41 6e 64 45 72 72 6f 72 oto freeAndError
66d0: 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 0a 2b ;.+.}.+ }.+.+
66e0: 20 20 20 20 54 63 6c 4f 4f 43 6c 61 73 73 53 65 TclOOClassSe
66f0: 74 4d 69 78 69 6e 73 28 69 6e 74 65 72 70 2c 20 tMixins(interp,
6700: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2c 20 oPtr->classPtr,
6710: 6d 69 78 69 6e 63 2c 20 6d 69 78 69 6e 73 29 3b mixinc, mixins);
6720: 0a 2b 20 20 20 20 54 63 6c 53 74 61 63 6b 46 72 .+ TclStackFr
6730: 65 65 28 69 6e 74 65 72 70 2c 20 6d 69 78 69 6e ee(interp, mixin
6740: 73 29 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 s);.+ return
6750: 54 43 4c 5f 4f 4b 3b 0a 2b 0a 2b 20 20 66 72 65 TCL_OK;.+.+ fre
6760: 65 41 6e 64 45 72 72 6f 72 3a 0a 2b 20 20 20 20 eAndError:.+
6770: 54 63 6c 53 74 61 63 6b 46 72 65 65 28 69 6e 74 TclStackFree(int
6780: 65 72 70 2c 20 6d 69 78 69 6e 73 29 3b 0a 2b 20 erp, mixins);.+
6790: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 return TCL_ER
67a0: 52 4f 52 3b 0a 2b 7d 0a 2b 0c 0a 2b 73 74 61 74 ROR;.+}.+..+stat
67b0: 69 63 20 69 6e 74 0a 2b 43 6c 61 73 73 53 75 70 ic int.+ClassSup
67c0: 65 72 47 65 74 28 0a 2b 20 20 20 20 43 6c 69 65 erGet(.+ Clie
67d0: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 ntData clientDat
67e0: 61 2c 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 a,.+ Tcl_Inte
67f0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 20 20 20 rp *interp,.+
6800: 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 Tcl_ObjectConte
6810: 78 74 20 63 6f 6e 74 65 78 74 2c 0a 2b 20 20 20 xt context,.+
6820: 20 69 6e 74 20 6f 62 6a 63 2c 0a 2b 20 20 20 20 int objc,.+
6830: 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a Tcl_Obj *const *
6840: 6f 62 6a 76 29 0a 2b 7b 0a 2b 20 20 20 20 4f 62 objv).+{.+ Ob
6850: 6a 65 63 74 20 2a 6f 50 74 72 20 3d 20 28 4f 62 ject *oPtr = (Ob
6860: 6a 65 63 74 20 2a 29 20 54 63 6c 4f 4f 47 65 74 ject *) TclOOGet
6870: 44 65 66 69 6e 65 43 6d 64 43 6f 6e 74 65 78 74 DefineCmdContext
6880: 28 69 6e 74 65 72 70 29 3b 0a 2b 20 20 20 20 54 (interp);.+ T
6890: 63 6c 5f 4f 62 6a 20 2a 72 65 73 75 6c 74 4f 62 cl_Obj *resultOb
68a0: 6a 3b 0a 2b 20 20 20 20 43 6c 61 73 73 20 2a 73 j;.+ Class *s
68b0: 75 70 65 72 50 74 72 3b 0a 2b 20 20 20 20 69 6e uperPtr;.+ in
68c0: 74 20 69 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 t i;.+.+ if (
68d0: 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 Tcl_ObjectContex
68e0: 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e tSkippedArgs(con
68f0: 74 65 78 74 29 20 21 3d 20 6f 62 6a 63 29 20 7b text) != objc) {
6900: 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 .+.Tcl_WrongNumA
6910: 72 67 73 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f rgs(interp, Tcl_
6920: 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 ObjectContextSki
6930: 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 ppedArgs(context
6940: 29 2c 20 6f 62 6a 76 2c 0a 2b 09 09 4e 55 4c 4c ), objv,.+..NULL
6950: 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f );.+.return TCL_
6960: 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 ERROR;.+ }.+
6970: 20 20 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e if (oPtr == N
6980: 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 ULL) {.+.return
6990: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 TCL_ERROR;.+
69a0: 7d 20 65 6c 73 65 20 69 66 20 28 21 6f 50 74 72 } else if (!oPtr
69b0: 2d 3e 63 6c 61 73 73 50 74 72 29 20 7b 0a 2b 09 ->classPtr) {.+.
69c0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 Tcl_AppendResult
69d0: 28 69 6e 74 65 72 70 2c 20 22 61 74 74 65 6d 70 (interp, "attemp
69e0: 74 20 74 6f 20 6d 69 73 75 73 65 20 41 50 49 22 t to misuse API"
69f0: 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 72 65 74 75 72 , NULL);.+.retur
6a00: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 n TCL_ERROR;.+
6a10: 20 20 7d 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c }.+.+ resul
6a20: 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 tObj = Tcl_NewOb
6a30: 6a 28 29 3b 0a 2b 20 20 20 20 46 4f 52 45 41 43 j();.+ FOREAC
6a40: 48 28 73 75 70 65 72 50 74 72 2c 20 6f 50 74 72 H(superPtr, oPtr
6a50: 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 73 75 70 65 ->classPtr->supe
6a60: 72 63 6c 61 73 73 65 73 29 20 7b 0a 2b 09 54 63 rclasses) {.+.Tc
6a70: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 l_ListObjAppendE
6a80: 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 72 65 73 lement(NULL, res
6a90: 75 6c 74 4f 62 6a 2c 0a 2b 09 09 54 63 6c 4f 4f ultObj,.+..TclOO
6aa0: 4f 62 6a 65 63 74 4e 61 6d 65 28 69 6e 74 65 72 ObjectName(inter
6ab0: 70 2c 20 73 75 70 65 72 50 74 72 2d 3e 74 68 69 p, superPtr->thi
6ac0: 73 50 74 72 29 29 3b 0a 2b 20 20 20 20 7d 0a 2b sPtr));.+ }.+
6ad0: 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 Tcl_SetObjRe
6ae0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 73 sult(interp, res
6af0: 75 6c 74 4f 62 6a 29 3b 0a 2b 20 20 20 20 72 65 ultObj);.+ re
6b00: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a turn TCL_OK;.+}.
6b10: 2b 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 43 +.+static int.+C
6b20: 6c 61 73 73 53 75 70 65 72 53 65 74 28 0a 2b 20 lassSuperSet(.+
6b30: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c ClientData cl
6b40: 69 65 6e 74 44 61 74 61 2c 0a 2b 20 20 20 20 54 ientData,.+ T
6b50: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
6b60: 70 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 65 p,.+ Tcl_Obje
6b70: 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 ctContext contex
6b80: 74 2c 0a 2b 20 20 20 20 69 6e 74 20 6f 62 6a 63 t,.+ int objc
6b90: 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a ,.+ Tcl_Obj *
6ba0: 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a 2b 7b 0a const *objv).+{.
6bb0: 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 + Object *oPt
6bc0: 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 20 54 r = (Object *) T
6bd0: 63 6c 4f 4f 47 65 74 44 65 66 69 6e 65 43 6d 64 clOOGetDefineCmd
6be0: 43 6f 6e 74 65 78 74 28 69 6e 74 65 72 70 29 3b Context(interp);
6bf0: 0a 2b 20 20 20 20 69 6e 74 20 73 75 70 65 72 63 .+ int superc
6c00: 2c 20 69 2c 20 6a 3b 0a 2b 20 20 20 20 54 63 6c , i, j;.+ Tcl
6c10: 5f 4f 62 6a 20 2a 2a 73 75 70 65 72 76 3b 0a 2b _Obj **superv;.+
6c20: 20 20 20 20 43 6c 61 73 73 20 2a 2a 73 75 70 65 Class **supe
6c30: 72 63 6c 61 73 73 65 73 2c 20 2a 73 75 70 65 72 rclasses, *super
6c40: 50 74 72 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 Ptr;.+.+ if (
6c50: 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 Tcl_ObjectContex
6c60: 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e tSkippedArgs(con
6c70: 74 65 78 74 29 2b 31 20 21 3d 20 6f 62 6a 63 29 text)+1 != objc)
6c80: 20 7b 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 {.+.Tcl_WrongNu
6c90: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 54 63 mArgs(interp, Tc
6ca0: 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 l_ObjectContextS
6cb0: 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 kippedArgs(conte
6cc0: 78 74 29 2c 20 6f 62 6a 76 2c 0a 2b 09 09 22 73 xt), objv,.+.."s
6cd0: 75 70 65 72 63 6c 61 73 73 4c 69 73 74 22 29 3b uperclassList");
6ce0: 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 .+.return TCL_ER
6cf0: 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 ROR;.+ }.+
6d00: 20 6f 62 6a 76 20 2b 3d 20 54 63 6c 5f 4f 62 6a objv += Tcl_Obj
6d10: 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 ectContextSkippe
6d20: 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 3b 0a dArgs(context);.
6d30: 2b 0a 2b 20 20 20 20 69 66 20 28 6f 50 74 72 20 +.+ if (oPtr
6d40: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 == NULL) {.+.ret
6d50: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b urn TCL_ERROR;.+
6d60: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 21 } else if (!
6d70: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 29 20 oPtr->classPtr)
6d80: 7b 0a 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 {.+.Tcl_AppendRe
6d90: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61 74 sult(interp, "at
6da0: 74 65 6d 70 74 20 74 6f 20 6d 69 73 75 73 65 20 tempt to misuse
6db0: 41 50 49 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 72 API", NULL);.+.r
6dc0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
6dd0: 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 .+ } else if
6de0: 28 6f 50 74 72 20 3d 3d 20 6f 50 74 72 2d 3e 66 (oPtr == oPtr->f
6df0: 50 74 72 2d 3e 6f 62 6a 65 63 74 43 6c 73 2d 3e Ptr->objectCls->
6e00: 74 68 69 73 50 74 72 29 20 7b 0a 2b 09 54 63 6c thisPtr) {.+.Tcl
6e10: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
6e20: 74 65 72 70 2c 0a 2b 09 09 22 6d 61 79 20 6e 6f terp,.+.."may no
6e30: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 73 75 70 t modify the sup
6e40: 65 72 63 6c 61 73 73 20 6f 66 20 74 68 65 20 72 erclass of the r
6e50: 6f 6f 74 20 6f 62 6a 65 63 74 22 2c 20 4e 55 4c oot object", NUL
6e60: 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c L);.+.return TCL
6e70: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 20 65 _ERROR;.+ } e
6e80: 6c 73 65 20 69 66 20 28 54 63 6c 5f 4c 69 73 74 lse if (Tcl_List
6e90: 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 ObjGetElements(i
6ea0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 30 5d 2c 20 nterp, objv[0],
6eb0: 26 73 75 70 65 72 63 2c 0a 2b 09 20 20 20 20 26 &superc,.+. &
6ec0: 73 75 70 65 72 76 29 20 21 3d 20 54 43 4c 5f 4f superv) != TCL_O
6ed0: 4b 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 K) {.+.return TC
6ee0: 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a L_ERROR;.+ }.
6ef0: 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 +.+ /*.+
6f00: 2a 20 41 6c 6c 6f 63 61 74 65 20 73 6f 6d 65 20 * Allocate some
6f10: 77 6f 72 6b 69 6e 67 20 73 70 61 63 65 2e 0a 2b working space..+
6f20: 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 73 */.+.+ s
6f30: 75 70 65 72 63 6c 61 73 73 65 73 20 3d 20 28 43 uperclasses = (C
6f40: 6c 61 73 73 20 2a 2a 29 20 63 6b 61 6c 6c 6f 63 lass **) ckalloc
6f50: 28 73 69 7a 65 6f 66 28 43 6c 61 73 73 20 2a 29 (sizeof(Class *)
6f60: 20 2a 20 73 75 70 65 72 63 29 3b 0a 2b 0a 2b 20 * superc);.+.+
6f70: 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 50 61 /*.+ * Pa
6f80: 72 73 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 rse the argument
6f90: 73 20 74 6f 20 67 65 74 20 74 68 65 20 63 6c 61 s to get the cla
6fa0: 73 73 20 74 6f 20 75 73 65 20 61 73 20 73 75 70 ss to use as sup
6fb0: 65 72 63 6c 61 73 73 65 73 2e 0a 2b 20 20 20 20 erclasses..+
6fc0: 20 2a 2f 0a 2b 0a 2b 20 20 20 20 66 6f 72 20 28 */.+.+ for (
6fd0: 69 3d 30 20 3b 20 69 3c 73 75 70 65 72 63 20 3b i=0 ; i<superc ;
6fe0: 20 69 2b 2b 29 20 7b 0a 2b 09 73 75 70 65 72 63 i++) {.+.superc
6ff0: 6c 61 73 73 65 73 5b 69 5d 20 3d 20 47 65 74 43 lasses[i] = GetC
7000: 6c 61 73 73 49 6e 4f 75 74 65 72 43 6f 6e 74 65 lassInOuterConte
7010: 78 74 28 69 6e 74 65 72 70 2c 20 73 75 70 65 72 xt(interp, super
7020: 76 5b 69 5d 2c 0a 2b 09 09 22 6f 6e 6c 79 20 61 v[i],.+.."only a
7030: 20 63 6c 61 73 73 20 63 61 6e 20 62 65 20 61 20 class can be a
7040: 73 75 70 65 72 63 6c 61 73 73 22 29 3b 0a 2b 09 superclass");.+.
7050: 69 66 20 28 73 75 70 65 72 63 6c 61 73 73 65 73 if (superclasses
7060: 5b 69 5d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b [i] == NULL) {.+
7070: 09 20 20 20 20 67 6f 74 6f 20 66 61 69 6c 65 64 . goto failed
7080: 41 66 74 65 72 41 6c 6c 6f 63 3b 0a 2b 09 7d 0a AfterAlloc;.+.}.
7090: 2b 09 66 6f 72 20 28 6a 3d 30 20 3b 20 6a 3c 69 +.for (j=0 ; j<i
70a0: 20 3b 20 6a 2b 2b 29 20 7b 0a 2b 09 20 20 20 20 ; j++) {.+.
70b0: 69 66 20 28 73 75 70 65 72 63 6c 61 73 73 65 73 if (superclasses
70c0: 5b 6a 5d 20 3d 3d 20 73 75 70 65 72 63 6c 61 73 [j] == superclas
70d0: 73 65 73 5b 69 5d 29 20 7b 0a 2b 09 09 54 63 6c ses[i]) {.+..Tcl
70e0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
70f0: 74 65 72 70 2c 0a 2b 09 09 09 22 63 6c 61 73 73 terp,.+..."class
7100: 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 should only be
7110: 61 20 64 69 72 65 63 74 20 73 75 70 65 72 63 6c a direct supercl
7120: 61 73 73 20 6f 6e 63 65 22 2c 4e 55 4c 4c 29 3b ass once",NULL);
7130: 0a 2b 09 09 67 6f 74 6f 20 66 61 69 6c 65 64 41 .+..goto failedA
7140: 66 74 65 72 41 6c 6c 6f 63 3b 0a 2b 09 20 20 20 fterAlloc;.+.
7150: 20 7d 0a 2b 09 7d 0a 2b 09 69 66 20 28 54 63 6c }.+.}.+.if (Tcl
7160: 4f 4f 49 73 52 65 61 63 68 61 62 6c 65 28 6f 50 OOIsReachable(oP
7170: 74 72 2d 3e 63 6c 61 73 73 50 74 72 2c 20 73 75 tr->classPtr, su
7180: 70 65 72 63 6c 61 73 73 65 73 5b 69 5d 29 29 20 perclasses[i]))
7190: 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 41 70 70 65 {.+. Tcl_Appe
71a0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c ndResult(interp,
71b0: 0a 2b 09 09 20 20 20 20 22 61 74 74 65 6d 70 74 .+.. "attempt
71c0: 20 74 6f 20 66 6f 72 6d 20 63 69 72 63 75 6c 61 to form circula
71d0: 72 20 64 65 70 65 6e 64 65 6e 63 79 20 67 72 61 r dependency gra
71e0: 70 68 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 66 61 ph", NULL);.+.fa
71f0: 69 6c 65 64 41 66 74 65 72 41 6c 6c 6f 63 3a 0a iledAfterAlloc:.
7200: 2b 09 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 +. ckfree((ch
7210: 61 72 20 2a 29 20 73 75 70 65 72 63 6c 61 73 73 ar *) superclass
7220: 65 73 29 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 es);.+. retur
7230: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d n TCL_ERROR;.+.}
7240: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 2f .+ }.+.+ /
7250: 2a 0a 2b 20 20 20 20 20 2a 20 49 6e 73 74 61 6c *.+ * Instal
7260: 6c 20 74 68 65 20 6c 69 73 74 20 6f 66 20 73 75 l the list of su
7270: 70 65 72 63 6c 61 73 73 65 73 20 69 6e 74 6f 20 perclasses into
7280: 74 68 65 20 63 6c 61 73 73 2e 20 4e 6f 74 65 20 the class. Note
7290: 74 68 61 74 20 74 68 69 73 20 61 6c 73 6f 0a 2b that this also.+
72a0: 20 20 20 20 20 2a 20 69 6e 76 6f 6c 76 65 73 20 * involves
72b0: 73 70 6c 69 63 69 6e 67 20 74 68 65 20 63 6c 61 splicing the cla
72c0: 73 73 20 6f 75 74 20 6f 66 20 74 68 65 20 73 75 ss out of the su
72d0: 70 65 72 63 6c 61 73 73 65 73 27 20 73 75 62 63 perclasses' subc
72e0: 6c 61 73 73 20 6c 69 73 74 20 74 68 61 74 0a 2b lass list that.+
72f0: 20 20 20 20 20 2a 20 69 74 20 75 73 65 64 20 74 * it used t
7300: 6f 20 62 65 20 61 20 6d 65 6d 62 65 72 20 6f 66 o be a member of
7310: 20 61 6e 64 20 73 70 6c 69 63 69 6e 67 20 69 74 and splicing it
7320: 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 20 73 75 into the new su
7330: 70 65 72 63 6c 61 73 73 65 73 27 0a 2b 20 20 20 perclasses'.+
7340: 20 20 2a 20 73 75 62 63 6c 61 73 73 20 6c 69 73 * subclass lis
7350: 74 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 t..+ */.+.+
7360: 20 20 20 69 66 20 28 6f 50 74 72 2d 3e 63 6c 61 if (oPtr->cla
7370: 73 73 50 74 72 2d 3e 73 75 70 65 72 63 6c 61 73 ssPtr->superclas
7380: 73 65 73 2e 6e 75 6d 20 21 3d 20 30 29 20 7b 0a ses.num != 0) {.
7390: 2b 09 46 4f 52 45 41 43 48 28 73 75 70 65 72 50 +.FOREACH(superP
73a0: 74 72 2c 20 6f 50 74 72 2d 3e 63 6c 61 73 73 50 tr, oPtr->classP
73b0: 74 72 2d 3e 73 75 70 65 72 63 6c 61 73 73 65 73 tr->superclasses
73c0: 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 4f 4f 52 ) {.+. TclOOR
73d0: 65 6d 6f 76 65 46 72 6f 6d 53 75 62 63 6c 61 73 emoveFromSubclas
73e0: 73 65 73 28 6f 50 74 72 2d 3e 63 6c 61 73 73 50 ses(oPtr->classP
73f0: 74 72 2c 20 73 75 70 65 72 50 74 72 29 3b 0a 2b tr, superPtr);.+
7400: 09 7d 0a 2b 09 63 6b 66 72 65 65 28 28 63 68 61 .}.+.ckfree((cha
7410: 72 20 2a 29 20 6f 50 74 72 2d 3e 63 6c 61 73 73 r *) oPtr->class
7420: 50 74 72 2d 3e 73 75 70 65 72 63 6c 61 73 73 65 Ptr->superclasse
7430: 73 2e 6c 69 73 74 29 3b 0a 2b 20 20 20 20 7d 0a s.list);.+ }.
7440: 2b 20 20 20 20 6f 50 74 72 2d 3e 63 6c 61 73 73 + oPtr->class
7450: 50 74 72 2d 3e 73 75 70 65 72 63 6c 61 73 73 65 Ptr->superclasse
7460: 73 2e 6c 69 73 74 20 3d 20 73 75 70 65 72 63 6c s.list = supercl
7470: 61 73 73 65 73 3b 0a 2b 20 20 20 20 6f 50 74 72 asses;.+ oPtr
7480: 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 73 75 70 65 ->classPtr->supe
7490: 72 63 6c 61 73 73 65 73 2e 6e 75 6d 20 3d 20 73 rclasses.num = s
74a0: 75 70 65 72 63 3b 0a 2b 20 20 20 20 46 4f 52 45 uperc;.+ FORE
74b0: 41 43 48 28 73 75 70 65 72 50 74 72 2c 20 6f 50 ACH(superPtr, oP
74c0: 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 73 75 tr->classPtr->su
74d0: 70 65 72 63 6c 61 73 73 65 73 29 20 7b 0a 2b 09 perclasses) {.+.
74e0: 54 63 6c 4f 4f 41 64 64 54 6f 53 75 62 63 6c 61 TclOOAddToSubcla
74f0: 73 73 65 73 28 6f 50 74 72 2d 3e 63 6c 61 73 73 sses(oPtr->class
7500: 50 74 72 2c 20 73 75 70 65 72 50 74 72 29 3b 0a Ptr, superPtr);.
7510: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 42 75 6d 70 + }.+ Bump
7520: 47 6c 6f 62 61 6c 45 70 6f 63 68 28 69 6e 74 65 GlobalEpoch(inte
7530: 72 70 2c 20 6f 50 74 72 2d 3e 63 6c 61 73 73 50 rp, oPtr->classP
7540: 74 72 29 3b 0a 2b 0a 2b 20 20 20 20 72 65 74 75 tr);.+.+ retu
7550: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c rn TCL_OK;.+}.+.
7560: 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 43 6c .+static int.+Cl
7570: 61 73 73 56 61 72 73 47 65 74 28 0a 2b 20 20 20 assVarsGet(.+
7580: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 ClientData clie
7590: 6e 74 44 61 74 61 2c 0a 2b 20 20 20 20 54 63 6c ntData,.+ Tcl
75a0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
75b0: 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 65 63 74 .+ Tcl_Object
75c0: 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 2c Context context,
75d0: 0a 2b 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 0a .+ int objc,.
75e0: 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f + Tcl_Obj *co
75f0: 6e 73 74 20 2a 6f 62 6a 76 29 0a 2b 7b 0a 2b 20 nst *objv).+{.+
7600: 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 72 20 Object *oPtr
7610: 3d 20 28 4f 62 6a 65 63 74 20 2a 29 20 54 63 6c = (Object *) Tcl
7620: 4f 4f 47 65 74 44 65 66 69 6e 65 43 6d 64 43 6f OOGetDefineCmdCo
7630: 6e 74 65 78 74 28 69 6e 74 65 72 70 29 3b 0a 2b ntext(interp);.+
7640: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 72 65 73 Tcl_Obj *res
7650: 75 6c 74 4f 62 6a 2c 20 2a 76 61 72 69 61 62 6c ultObj, *variabl
7660: 65 4f 62 6a 3b 0a 2b 20 20 20 20 69 6e 74 20 69 eObj;.+ int i
7670: 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 54 63 6c ;.+.+ if (Tcl
7680: 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b _ObjectContextSk
7690: 69 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 ippedArgs(contex
76a0: 74 29 20 21 3d 20 6f 62 6a 63 29 20 7b 0a 2b 09 t) != objc) {.+.
76b0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 Tcl_WrongNumArgs
76c0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a (interp, Tcl_Obj
76d0: 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 ectContextSkippe
76e0: 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 2c 20 dArgs(context),
76f0: 6f 62 6a 76 2c 0a 2b 09 09 4e 55 4c 4c 29 3b 0a objv,.+..NULL);.
7700: 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 +.return TCL_ERR
7710: 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 OR;.+ }.+
7720: 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e 55 4c 4c if (oPtr == NULL
7730: 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c ) {.+.return TCL
7740: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 20 65 _ERROR;.+ } e
7750: 6c 73 65 20 69 66 20 28 21 6f 50 74 72 2d 3e 63 lse if (!oPtr->c
7760: 6c 61 73 73 50 74 72 29 20 7b 0a 2b 09 54 63 6c lassPtr) {.+.Tcl
7770: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
7780: 74 65 72 70 2c 20 22 61 74 74 65 6d 70 74 20 74 terp, "attempt t
7790: 6f 20 6d 69 73 75 73 65 20 41 50 49 22 2c 20 4e o misuse API", N
77a0: 55 4c 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 ULL);.+.return T
77b0: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d CL_ERROR;.+ }
77c0: 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74 4f 62 .+.+ resultOb
77d0: 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 j = Tcl_NewObj()
77e0: 3b 0a 2b 20 20 20 20 46 4f 52 45 41 43 48 28 76 ;.+ FOREACH(v
77f0: 61 72 69 61 62 6c 65 4f 62 6a 2c 20 6f 50 74 72 ariableObj, oPtr
7800: 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 76 61 72 69 ->classPtr->vari
7810: 61 62 6c 65 73 29 20 7b 0a 2b 09 54 63 6c 5f 4c ables) {.+.Tcl_L
7820: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d istObjAppendElem
7830: 65 6e 74 28 4e 55 4c 4c 2c 20 72 65 73 75 6c 74 ent(NULL, result
7840: 4f 62 6a 2c 20 76 61 72 69 61 62 6c 65 4f 62 6a Obj, variableObj
7850: 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 54 );.+ }.+ T
7860: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 cl_SetObjResult(
7870: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 interp, resultOb
7880: 6a 29 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 j);.+ return
7890: 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0a 2b 73 74 TCL_OK;.+}.+.+st
78a0: 61 74 69 63 20 69 6e 74 0a 2b 43 6c 61 73 73 56 atic int.+ClassV
78b0: 61 72 73 53 65 74 28 0a 2b 20 20 20 20 43 6c 69 arsSet(.+ Cli
78c0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
78d0: 74 61 2c 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 ta,.+ Tcl_Int
78e0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 20 20 erp *interp,.+
78f0: 20 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 Tcl_ObjectCont
7900: 65 78 74 20 63 6f 6e 74 65 78 74 2c 0a 2b 20 20 ext context,.+
7910: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 2b 20 20 20 int objc,.+
7920: 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 Tcl_Obj *const
7930: 2a 6f 62 6a 76 29 0a 2b 7b 0a 2b 20 20 20 20 4f *objv).+{.+ O
7940: 62 6a 65 63 74 20 2a 6f 50 74 72 20 3d 20 28 4f bject *oPtr = (O
7950: 62 6a 65 63 74 20 2a 29 20 54 63 6c 4f 4f 47 65 bject *) TclOOGe
7960: 74 44 65 66 69 6e 65 43 6d 64 43 6f 6e 74 65 78 tDefineCmdContex
7970: 74 28 69 6e 74 65 72 70 29 3b 0a 2b 20 20 20 20 t(interp);.+
7980: 69 6e 74 20 76 61 72 63 3b 0a 2b 20 20 20 20 54 int varc;.+ T
7990: 63 6c 5f 4f 62 6a 20 2a 2a 76 61 72 76 2c 20 2a cl_Obj **varv, *
79a0: 76 61 72 69 61 62 6c 65 4f 62 6a 3b 0a 2b 20 20 variableObj;.+
79b0: 20 20 69 6e 74 20 69 3b 0a 2b 0a 2b 20 20 20 20 int i;.+.+
79c0: 69 66 20 28 54 63 6c 5f 4f 62 6a 65 63 74 43 6f if (Tcl_ObjectCo
79d0: 6e 74 65 78 74 53 6b 69 70 70 65 64 41 72 67 73 ntextSkippedArgs
79e0: 28 63 6f 6e 74 65 78 74 29 2b 31 20 21 3d 20 6f (context)+1 != o
79f0: 62 6a 63 29 20 7b 0a 2b 09 54 63 6c 5f 57 72 6f bjc) {.+.Tcl_Wro
7a00: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 ngNumArgs(interp
7a10: 2c 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 , Tcl_ObjectCont
7a20: 65 78 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 extSkippedArgs(c
7a30: 6f 6e 74 65 78 74 29 2c 20 6f 62 6a 76 2c 0a 2b ontext), objv,.+
7a40: 09 09 22 66 69 6c 74 65 72 4c 69 73 74 22 29 3b .."filterList");
7a50: 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 .+.return TCL_ER
7a60: 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 ROR;.+ }.+
7a70: 20 6f 62 6a 76 20 2b 3d 20 54 63 6c 5f 4f 62 6a objv += Tcl_Obj
7a80: 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 ectContextSkippe
7a90: 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 3b 0a dArgs(context);.
7aa0: 2b 0a 2b 20 20 20 20 69 66 20 28 6f 50 74 72 20 +.+ if (oPtr
7ab0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 == NULL) {.+.ret
7ac0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b urn TCL_ERROR;.+
7ad0: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 21 } else if (!
7ae0: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 29 20 oPtr->classPtr)
7af0: 7b 0a 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 {.+.Tcl_AppendRe
7b00: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61 74 sult(interp, "at
7b10: 74 65 6d 70 74 20 74 6f 20 6d 69 73 75 73 65 20 tempt to misuse
7b20: 41 50 49 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 72 API", NULL);.+.r
7b30: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
7b40: 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 .+ } else if
7b50: 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 (Tcl_ListObjGetE
7b60: 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 20 lements(interp,
7b70: 6f 62 6a 76 5b 30 5d 2c 20 26 76 61 72 63 2c 0a objv[0], &varc,.
7b80: 2b 09 20 20 20 20 26 76 61 72 76 29 20 21 3d 20 +. &varv) !=
7b90: 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 72 65 74 75 TCL_OK) {.+.retu
7ba0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 rn TCL_ERROR;.+
7bb0: 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 66 6f 72 20 }.+.+ for
7bc0: 28 69 3d 30 20 3b 20 69 3c 76 61 72 63 20 3b 20 (i=0 ; i<varc ;
7bd0: 69 2b 2b 29 20 7b 0a 2b 09 63 6f 6e 73 74 20 63 i++) {.+.const c
7be0: 68 61 72 20 2a 76 61 72 4e 61 6d 65 20 3d 20 54 har *varName = T
7bf0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 76 61 72 cl_GetString(var
7c00: 76 5b 69 5d 29 3b 0a 2b 0a 2b 09 69 66 20 28 73 v[i]);.+.+.if (s
7c10: 74 72 73 74 72 28 76 61 72 4e 61 6d 65 2c 20 22 trstr(varName, "
7c20: 3a 3a 22 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a ::") != NULL) {.
7c30: 2b 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 +. Tcl_Append
7c40: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 Result(interp, "
7c50: 69 6e 76 61 6c 69 64 20 64 65 63 6c 61 72 65 64 invalid declared
7c60: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 5c variable name \
7c70: 22 22 2c 0a 2b 09 09 20 20 20 20 76 61 72 4e 61 "",.+.. varNa
7c80: 6d 65 2c 20 22 5c 22 3a 20 6d 75 73 74 20 6e 6f me, "\": must no
7c90: 74 20 63 6f 6e 74 61 69 6e 20 6e 61 6d 65 73 70 t contain namesp
7ca0: 61 63 65 20 73 65 70 61 72 61 74 6f 72 73 22 2c ace separators",
7cb0: 0a 2b 09 09 20 20 20 20 4e 55 4c 4c 29 3b 0a 2b .+.. NULL);.+
7cc0: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f . return TCL_
7cd0: 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b 09 69 66 20 ERROR;.+.}.+.if
7ce0: 28 54 63 6c 5f 53 74 72 69 6e 67 4d 61 74 63 68 (Tcl_StringMatch
7cf0: 28 76 61 72 4e 61 6d 65 2c 20 22 2a 28 2a 29 22 (varName, "*(*)"
7d00: 29 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 41 )) {.+. Tcl_A
7d10: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
7d20: 72 70 2c 20 22 69 6e 76 61 6c 69 64 20 64 65 63 rp, "invalid dec
7d30: 6c 61 72 65 64 20 76 61 72 69 61 62 6c 65 20 6e lared variable n
7d40: 61 6d 65 20 5c 22 22 2c 0a 2b 09 09 20 20 20 20 ame \"",.+..
7d50: 76 61 72 4e 61 6d 65 2c 20 22 5c 22 3a 20 6d 75 varName, "\": mu
7d60: 73 74 20 6e 6f 74 20 72 65 66 65 72 20 74 6f 20 st not refer to
7d70: 61 6e 20 61 72 72 61 79 20 65 6c 65 6d 65 6e 74 an array element
7d80: 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 20 20 20 20 ", NULL);.+.
7d90: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
7da0: 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 0a 2b ;.+.}.+ }.+.+
7db0: 20 20 20 20 66 6f 72 20 28 69 3d 30 20 3b 20 69 for (i=0 ; i
7dc0: 3c 76 61 72 63 20 3b 20 69 2b 2b 29 20 7b 0a 2b <varc ; i++) {.+
7dd0: 09 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e .Tcl_IncrRefCoun
7de0: 74 28 76 61 72 76 5b 69 5d 29 3b 0a 2b 20 20 20 t(varv[i]);.+
7df0: 20 7d 0a 2b 20 20 20 20 46 4f 52 45 41 43 48 28 }.+ FOREACH(
7e00: 76 61 72 69 61 62 6c 65 4f 62 6a 2c 20 6f 50 74 variableObj, oPt
7e10: 72 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 76 61 72 r->classPtr->var
7e20: 69 61 62 6c 65 73 29 20 7b 0a 2b 09 54 63 6c 5f iables) {.+.Tcl_
7e30: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 76 61 72 DecrRefCount(var
7e40: 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b 20 20 20 20 iableObj);.+
7e50: 7d 0a 2b 20 20 20 20 69 66 20 28 69 20 21 3d 20 }.+ if (i !=
7e60: 76 61 72 63 29 20 7b 0a 2b 09 69 66 20 28 76 61 varc) {.+.if (va
7e70: 72 63 20 3d 3d 20 30 29 20 7b 0a 2b 09 20 20 20 rc == 0) {.+.
7e80: 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 ckfree((char *)
7e90: 20 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d oPtr->classPtr-
7ea0: 3e 76 61 72 69 61 62 6c 65 73 2e 6c 69 73 74 29 >variables.list)
7eb0: 3b 0a 2b 09 7d 20 65 6c 73 65 20 69 66 20 28 69 ;.+.} else if (i
7ec0: 29 20 7b 0a 2b 09 20 20 20 20 6f 50 74 72 2d 3e ) {.+. oPtr->
7ed0: 63 6c 61 73 73 50 74 72 2d 3e 76 61 72 69 61 62 classPtr->variab
7ee0: 6c 65 73 2e 6c 69 73 74 20 3d 20 28 54 63 6c 5f les.list = (Tcl_
7ef0: 4f 62 6a 20 2a 2a 29 0a 2b 09 09 20 20 20 20 63 Obj **).+.. c
7f00: 6b 72 65 61 6c 6c 6f 63 28 28 63 68 61 72 20 2a krealloc((char *
7f10: 29 20 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 ) oPtr->classPtr
7f20: 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c 69 73 74 ->variables.list
7f30: 2c 0a 2b 09 09 20 20 20 20 73 69 7a 65 6f 66 28 ,.+.. sizeof(
7f40: 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 76 61 72 Tcl_Obj *) * var
7f50: 63 29 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a 2b c);.+.} else {.+
7f60: 09 20 20 20 20 6f 50 74 72 2d 3e 63 6c 61 73 73 . oPtr->class
7f70: 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c Ptr->variables.l
7f80: 69 73 74 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a ist = (Tcl_Obj *
7f90: 2a 29 0a 2b 09 09 20 20 20 20 63 6b 61 6c 6c 6f *).+.. ckallo
7fa0: 63 28 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a c(sizeof(Tcl_Obj
7fb0: 20 2a 29 20 2a 20 76 61 72 63 29 3b 0a 2b 09 7d *) * varc);.+.}
7fc0: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69 66 20 .+ }.+ if
7fd0: 28 76 61 72 63 20 3e 20 30 29 20 7b 0a 2b 09 6d (varc > 0) {.+.m
7fe0: 65 6d 63 70 79 28 6f 50 74 72 2d 3e 63 6c 61 73 emcpy(oPtr->clas
7ff0: 73 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e sPtr->variables.
8000: 6c 69 73 74 2c 20 76 61 72 76 2c 0a 2b 09 09 73 list, varv,.+..s
8010: 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 izeof(Tcl_Obj *)
8020: 20 2a 20 76 61 72 63 29 3b 0a 2b 20 20 20 20 7d * varc);.+ }
8030: 0a 2b 20 20 20 20 6f 50 74 72 2d 3e 63 6c 61 73 .+ oPtr->clas
8040: 73 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e sPtr->variables.
8050: 6e 75 6d 20 3d 20 76 61 72 63 3b 0a 2b 20 20 20 num = varc;.+
8060: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a return TCL_OK;.
8070: 2b 7d 0a 2b 0c 0a 2b 73 74 61 74 69 63 20 69 6e +}.+..+static in
8080: 74 0a 2b 4f 62 6a 46 69 6c 74 65 72 47 65 74 28 t.+ObjFilterGet(
8090: 0a 2b 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 .+ ClientData
80a0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 20 20 clientData,.+
80b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
80c0: 74 65 72 70 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f terp,.+ Tcl_O
80d0: 62 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e bjectContext con
80e0: 74 65 78 74 2c 0a 2b 20 20 20 20 69 6e 74 20 6f text,.+ int o
80f0: 62 6a 63 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 bjc,.+ Tcl_Ob
8100: 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a j *const *objv).
8110: 2b 7b 0a 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a +{.+ Object *
8120: 6f 50 74 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a oPtr = (Object *
8130: 29 20 54 63 6c 4f 4f 47 65 74 44 65 66 69 6e 65 ) TclOOGetDefine
8140: 43 6d 64 43 6f 6e 74 65 78 74 28 69 6e 74 65 72 CmdContext(inter
8150: 70 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a p);.+ Tcl_Obj
8160: 20 2a 72 65 73 75 6c 74 4f 62 6a 2c 20 2a 66 69 *resultObj, *fi
8170: 6c 74 65 72 4f 62 6a 3b 0a 2b 20 20 20 20 69 6e lterObj;.+ in
8180: 74 20 69 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 t i;.+.+ if (
8190: 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 Tcl_ObjectContex
81a0: 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e tSkippedArgs(con
81b0: 74 65 78 74 29 20 21 3d 20 6f 62 6a 63 29 20 7b text) != objc) {
81c0: 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 .+.Tcl_WrongNumA
81d0: 72 67 73 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f rgs(interp, Tcl_
81e0: 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 ObjectContextSki
81f0: 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 ppedArgs(context
8200: 29 2c 20 6f 62 6a 76 2c 0a 2b 09 09 4e 55 4c 4c ), objv,.+..NULL
8210: 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f );.+.return TCL_
8220: 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 20 65 6c ERROR;.+ } el
8230: 73 65 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e se if (oPtr == N
8240: 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 ULL) {.+.return
8250: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 TCL_ERROR;.+
8260: 7d 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74 4f }.+.+ resultO
8270: 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 bj = Tcl_NewObj(
8280: 29 3b 0a 2b 20 20 20 20 46 4f 52 45 41 43 48 28 );.+ FOREACH(
8290: 66 69 6c 74 65 72 4f 62 6a 2c 20 6f 50 74 72 2d filterObj, oPtr-
82a0: 3e 66 69 6c 74 65 72 73 29 20 7b 0a 2b 09 54 63 >filters) {.+.Tc
82b0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 l_ListObjAppendE
82c0: 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 72 65 73 lement(NULL, res
82d0: 75 6c 74 4f 62 6a 2c 20 66 69 6c 74 65 72 4f 62 ultObj, filterOb
82e0: 6a 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 j);.+ }.+
82f0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_SetObjResult
8300: 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f (interp, resultO
8310: 62 6a 29 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e bj);.+ return
8320: 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0a 2b 73 TCL_OK;.+}.+.+s
8330: 74 61 74 69 63 20 69 6e 74 0a 2b 4f 62 6a 46 69 tatic int.+ObjFi
8340: 6c 74 65 72 53 65 74 28 0a 2b 20 20 20 20 43 6c lterSet(.+ Cl
8350: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 ientData clientD
8360: 61 74 61 2c 0a 2b 20 20 20 20 54 63 6c 5f 49 6e ata,.+ Tcl_In
8370: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 20 terp *interp,.+
8380: 20 20 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e Tcl_ObjectCon
8390: 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 0a 2b 20 text context,.+
83a0: 20 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 2b 20 20 int objc,.+
83b0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 Tcl_Obj *const
83c0: 20 2a 6f 62 6a 76 29 0a 2b 7b 0a 2b 20 20 20 20 *objv).+{.+
83d0: 4f 62 6a 65 63 74 20 2a 6f 50 74 72 20 3d 20 28 Object *oPtr = (
83e0: 4f 62 6a 65 63 74 20 2a 29 20 54 63 6c 4f 4f 47 Object *) TclOOG
83f0: 65 74 44 65 66 69 6e 65 43 6d 64 43 6f 6e 74 65 etDefineCmdConte
8400: 78 74 28 69 6e 74 65 72 70 29 3b 0a 2b 20 20 20 xt(interp);.+
8410: 20 69 6e 74 20 66 69 6c 74 65 72 63 3b 0a 2b 20 int filterc;.+
8420: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a 66 69 6c Tcl_Obj **fil
8430: 74 65 72 76 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 terv;.+.+ if
8440: 28 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 (Tcl_ObjectConte
8450: 78 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f xtSkippedArgs(co
8460: 6e 74 65 78 74 29 2b 31 20 21 3d 20 6f 62 6a 63 ntext)+1 != objc
8470: 29 20 7b 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e ) {.+.Tcl_WrongN
8480: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 54 umArgs(interp, T
8490: 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 cl_ObjectContext
84a0: 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e 74 SkippedArgs(cont
84b0: 65 78 74 29 2c 20 6f 62 6a 76 2c 0a 2b 09 09 22 ext), objv,.+.."
84c0: 66 69 6c 74 65 72 4c 69 73 74 22 29 3b 0a 2b 09 filterList");.+.
84d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
84e0: 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66 ;.+ } else if
84f0: 20 28 6f 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 (oPtr == NULL)
8500: 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 {.+.return TCL_E
8510: 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 RROR;.+ }.+
8520: 20 20 6f 62 6a 76 20 2b 3d 20 54 63 6c 5f 4f 62 objv += Tcl_Ob
8530: 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 jectContextSkipp
8540: 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 3b edArgs(context);
8550: 0a 2b 20 20 20 20 69 66 20 28 54 63 6c 5f 4c 69 .+ if (Tcl_Li
8560: 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 stObjGetElements
8570: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 30 5d (interp, objv[0]
8580: 2c 20 26 66 69 6c 74 65 72 63 2c 0a 2b 09 20 20 , &filterc,.+.
8590: 20 20 26 66 69 6c 74 65 72 76 29 20 21 3d 20 54 &filterv) != T
85a0: 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 72 65 74 75 72 CL_OK) {.+.retur
85b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 n TCL_ERROR;.+
85c0: 20 20 7d 0a 2b 0a 2b 20 20 20 20 54 63 6c 4f 4f }.+.+ TclOO
85d0: 4f 62 6a 65 63 74 53 65 74 46 69 6c 74 65 72 73 ObjectSetFilters
85e0: 28 6f 50 74 72 2c 20 66 69 6c 74 65 72 63 2c 20 (oPtr, filterc,
85f0: 66 69 6c 74 65 72 76 29 3b 0a 2b 20 20 20 20 72 filterv);.+ r
8600: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d eturn TCL_OK;.+}
8610: 0a 2b 0c 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a .+..+static int.
8620: 2b 4f 62 6a 4d 69 78 69 6e 47 65 74 28 0a 2b 20 +ObjMixinGet(.+
8630: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c ClientData cl
8640: 69 65 6e 74 44 61 74 61 2c 0a 2b 20 20 20 20 54 ientData,.+ T
8650: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
8660: 70 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 65 p,.+ Tcl_Obje
8670: 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 ctContext contex
8680: 74 2c 0a 2b 20 20 20 20 69 6e 74 20 6f 62 6a 63 t,.+ int objc
8690: 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a ,.+ Tcl_Obj *
86a0: 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a 2b 7b 0a const *objv).+{.
86b0: 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 + Object *oPt
86c0: 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 20 54 r = (Object *) T
86d0: 63 6c 4f 4f 47 65 74 44 65 66 69 6e 65 43 6d 64 clOOGetDefineCmd
86e0: 43 6f 6e 74 65 78 74 28 69 6e 74 65 72 70 29 3b Context(interp);
86f0: 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 72 .+ Tcl_Obj *r
8700: 65 73 75 6c 74 4f 62 6a 3b 0a 2b 20 20 20 20 43 esultObj;.+ C
8710: 6c 61 73 73 20 2a 6d 69 78 69 6e 50 74 72 3b 0a lass *mixinPtr;.
8720: 2b 20 20 20 20 69 6e 74 20 69 3b 0a 2b 0a 2b 20 + int i;.+.+
8730: 20 20 20 69 66 20 28 54 63 6c 5f 4f 62 6a 65 63 if (Tcl_Objec
8740: 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 64 41 tContextSkippedA
8750: 72 67 73 28 63 6f 6e 74 65 78 74 29 20 21 3d 20 rgs(context) !=
8760: 6f 62 6a 63 29 20 7b 0a 2b 09 54 63 6c 5f 57 72 objc) {.+.Tcl_Wr
8770: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 ongNumArgs(inter
8780: 70 2c 20 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e p, Tcl_ObjectCon
8790: 74 65 78 74 53 6b 69 70 70 65 64 41 72 67 73 28 textSkippedArgs(
87a0: 63 6f 6e 74 65 78 74 29 2c 20 6f 62 6a 76 2c 0a context), objv,.
87b0: 2b 09 09 4e 55 4c 4c 29 3b 0a 2b 09 72 65 74 75 +..NULL);.+.retu
87c0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 rn TCL_ERROR;.+
87d0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 50 } else if (oP
87e0: 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 tr == NULL) {.+.
87f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
8800: 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 ;.+ }.+.+
8810: 72 65 73 75 6c 74 4f 62 6a 20 3d 20 54 63 6c 5f resultObj = Tcl_
8820: 4e 65 77 4f 62 6a 28 29 3b 0a 2b 20 20 20 20 46 NewObj();.+ F
8830: 4f 52 45 41 43 48 28 6d 69 78 69 6e 50 74 72 2c OREACH(mixinPtr,
8840: 20 6f 50 74 72 2d 3e 6d 69 78 69 6e 73 29 20 7b oPtr->mixins) {
8850: 0a 2b 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 .+.Tcl_ListObjAp
8860: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c pendElement(NULL
8870: 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 0a 2b 09 09 , resultObj,.+..
8880: 54 63 6c 4f 4f 4f 62 6a 65 63 74 4e 61 6d 65 28 TclOOObjectName(
8890: 69 6e 74 65 72 70 2c 20 6d 69 78 69 6e 50 74 72 interp, mixinPtr
88a0: 2d 3e 74 68 69 73 50 74 72 29 29 3b 0a 2b 20 20 ->thisPtr));.+
88b0: 20 20 7d 0a 2b 20 20 20 20 54 63 6c 5f 53 65 74 }.+ Tcl_Set
88c0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 ObjResult(interp
88d0: 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a 2b 20 , resultObj);.+
88e0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b return TCL_OK
88f0: 3b 0a 2b 7d 0a 2b 0a 2b 73 74 61 74 69 63 20 69 ;.+}.+.+static i
8900: 6e 74 0a 2b 4f 62 6a 4d 69 78 69 6e 53 65 74 28 nt.+ObjMixinSet(
8910: 0a 2b 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 .+ ClientData
8920: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 20 20 clientData,.+
8930: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
8940: 74 65 72 70 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f terp,.+ Tcl_O
8950: 62 6a 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e bjectContext con
8960: 74 65 78 74 2c 0a 2b 20 20 20 20 69 6e 74 20 6f text,.+ int o
8970: 62 6a 63 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 bjc,.+ Tcl_Ob
8980: 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a j *const *objv).
8990: 2b 7b 0a 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a +{.+ Object *
89a0: 6f 50 74 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a oPtr = (Object *
89b0: 29 20 54 63 6c 4f 4f 47 65 74 44 65 66 69 6e 65 ) TclOOGetDefine
89c0: 43 6d 64 43 6f 6e 74 65 78 74 28 69 6e 74 65 72 CmdContext(inter
89d0: 70 29 3b 0a 2b 20 20 20 20 69 6e 74 20 6d 69 78 p);.+ int mix
89e0: 69 6e 63 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 inc;.+ Tcl_Ob
89f0: 6a 20 2a 2a 6d 69 78 69 6e 76 3b 0a 2b 20 20 20 j **mixinv;.+
8a00: 20 43 6c 61 73 73 20 2a 2a 6d 69 78 69 6e 73 3b Class **mixins;
8a10: 0a 2b 20 20 20 20 69 6e 74 20 69 3b 0a 2b 0a 2b .+ int i;.+.+
8a20: 20 20 20 20 69 66 20 28 54 63 6c 5f 4f 62 6a 65 if (Tcl_Obje
8a30: 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 64 ctContextSkipped
8a40: 41 72 67 73 28 63 6f 6e 74 65 78 74 29 2b 31 20 Args(context)+1
8a50: 21 3d 20 6f 62 6a 63 29 20 7b 0a 2b 09 54 63 6c != objc) {.+.Tcl
8a60: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e _WrongNumArgs(in
8a70: 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 65 63 74 terp, Tcl_Object
8a80: 43 6f 6e 74 65 78 74 53 6b 69 70 70 65 64 41 72 ContextSkippedAr
8a90: 67 73 28 63 6f 6e 74 65 78 74 29 2c 20 6f 62 6a gs(context), obj
8aa0: 76 2c 0a 2b 09 09 22 6d 69 78 69 6e 4c 69 73 74 v,.+.."mixinList
8ab0: 22 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c ");.+.return TCL
8ac0: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 20 65 _ERROR;.+ } e
8ad0: 6c 73 65 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 lse if (oPtr ==
8ae0: 4e 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e NULL) {.+.return
8af0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 TCL_ERROR;.+
8b00: 20 7d 0a 2b 20 20 20 20 6f 62 6a 76 20 2b 3d 20 }.+ objv +=
8b10: 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 Tcl_ObjectContex
8b20: 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e tSkippedArgs(con
8b30: 74 65 78 74 29 3b 0a 2b 20 20 20 20 69 66 20 28 text);.+ if (
8b40: 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c Tcl_ListObjGetEl
8b50: 65 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 20 6f ements(interp, o
8b60: 62 6a 76 5b 30 5d 2c 20 26 6d 69 78 69 6e 63 2c bjv[0], &mixinc,
8b70: 0a 2b 09 20 20 20 20 26 6d 69 78 69 6e 76 29 20 .+. &mixinv)
8b80: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 72 != TCL_OK) {.+.r
8b90: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
8ba0: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 6d .+ }.+.+ m
8bb0: 69 78 69 6e 73 20 3d 20 54 63 6c 53 74 61 63 6b ixins = TclStack
8bc0: 41 6c 6c 6f 63 28 69 6e 74 65 72 70 2c 20 73 69 Alloc(interp, si
8bd0: 7a 65 6f 66 28 43 6c 61 73 73 20 2a 29 20 2a 20 zeof(Class *) *
8be0: 6d 69 78 69 6e 63 29 3b 0a 2b 0a 2b 20 20 20 20 mixinc);.+.+
8bf0: 66 6f 72 20 28 69 3d 30 20 3b 20 69 3c 6d 69 78 for (i=0 ; i<mix
8c00: 69 6e 63 20 3b 20 69 2b 2b 29 20 7b 0a 2b 09 6d inc ; i++) {.+.m
8c10: 69 78 69 6e 73 5b 69 5d 20 3d 20 47 65 74 43 6c ixins[i] = GetCl
8c20: 61 73 73 49 6e 4f 75 74 65 72 43 6f 6e 74 65 78 assInOuterContex
8c30: 74 28 69 6e 74 65 72 70 2c 20 6d 69 78 69 6e 76 t(interp, mixinv
8c40: 5b 69 5d 2c 0a 2b 09 09 22 6d 61 79 20 6f 6e 6c [i],.+.."may onl
8c50: 79 20 6d 69 78 20 69 6e 20 63 6c 61 73 73 65 73 y mix in classes
8c60: 22 29 3b 0a 2b 09 69 66 20 28 6d 69 78 69 6e 73 ");.+.if (mixins
8c70: 5b 69 5d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b [i] == NULL) {.+
8c80: 09 20 20 20 20 54 63 6c 53 74 61 63 6b 46 72 65 . TclStackFre
8c90: 65 28 69 6e 74 65 72 70 2c 20 6d 69 78 69 6e 73 e(interp, mixins
8ca0: 29 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 );.+. return
8cb0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b TCL_ERROR;.+.}.+
8cc0: 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 54 63 6c }.+.+ Tcl
8cd0: 4f 4f 4f 62 6a 65 63 74 53 65 74 4d 69 78 69 6e OOObjectSetMixin
8ce0: 73 28 6f 50 74 72 2c 20 6d 69 78 69 6e 63 2c 20 s(oPtr, mixinc,
8cf0: 6d 69 78 69 6e 73 29 3b 0a 2b 20 20 20 20 54 63 mixins);.+ Tc
8d00: 6c 53 74 61 63 6b 46 72 65 65 28 69 6e 74 65 72 lStackFree(inter
8d10: 70 2c 20 6d 69 78 69 6e 73 29 3b 0a 2b 20 20 20 p, mixins);.+
8d20: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a return TCL_OK;.
8d30: 2b 7d 0a 2b 0c 0a 2b 73 74 61 74 69 63 20 69 6e +}.+..+static in
8d40: 74 0a 2b 4f 62 6a 56 61 72 73 47 65 74 28 0a 2b t.+ObjVarsGet(.+
8d50: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 ClientData c
8d60: 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 20 20 20 20 lientData,.+
8d70: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
8d80: 72 70 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a rp,.+ Tcl_Obj
8d90: 65 63 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 ectContext conte
8da0: 78 74 2c 0a 2b 20 20 20 20 69 6e 74 20 6f 62 6a xt,.+ int obj
8db0: 63 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 c,.+ Tcl_Obj
8dc0: 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a 2b 7b *const *objv).+{
8dd0: 0a 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 .+ Object *oP
8de0: 74 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 20 tr = (Object *)
8df0: 54 63 6c 4f 4f 47 65 74 44 65 66 69 6e 65 43 6d TclOOGetDefineCm
8e00: 64 43 6f 6e 74 65 78 74 28 69 6e 74 65 72 70 29 dContext(interp)
8e10: 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a ;.+ Tcl_Obj *
8e20: 72 65 73 75 6c 74 4f 62 6a 2c 20 2a 76 61 72 69 resultObj, *vari
8e30: 61 62 6c 65 4f 62 6a 3b 0a 2b 20 20 20 20 69 6e ableObj;.+ in
8e40: 74 20 69 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 t i;.+.+ if (
8e50: 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 Tcl_ObjectContex
8e60: 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e tSkippedArgs(con
8e70: 74 65 78 74 29 20 21 3d 20 6f 62 6a 63 29 20 7b text) != objc) {
8e80: 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 .+.Tcl_WrongNumA
8e90: 72 67 73 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f rgs(interp, Tcl_
8ea0: 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 ObjectContextSki
8eb0: 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 ppedArgs(context
8ec0: 29 2c 20 6f 62 6a 76 2c 0a 2b 09 09 4e 55 4c 4c ), objv,.+..NULL
8ed0: 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f );.+.return TCL_
8ee0: 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 20 65 6c ERROR;.+ } el
8ef0: 73 65 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e se if (oPtr == N
8f00: 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 ULL) {.+.return
8f10: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 TCL_ERROR;.+
8f20: 7d 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74 4f }.+.+ resultO
8f30: 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 bj = Tcl_NewObj(
8f40: 29 3b 0a 2b 20 20 20 20 46 4f 52 45 41 43 48 28 );.+ FOREACH(
8f50: 76 61 72 69 61 62 6c 65 4f 62 6a 2c 20 6f 50 74 variableObj, oPt
8f60: 72 2d 3e 76 61 72 69 61 62 6c 65 73 29 20 7b 0a r->variables) {.
8f70: 2b 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 +.Tcl_ListObjApp
8f80: 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c endElement(NULL,
8f90: 20 72 65 73 75 6c 74 4f 62 6a 2c 20 76 61 72 69 resultObj, vari
8fa0: 61 62 6c 65 4f 62 6a 29 3b 0a 2b 20 20 20 20 7d ableObj);.+ }
8fb0: 0a 2b 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a .+ Tcl_SetObj
8fc0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 72 Result(interp, r
8fd0: 65 73 75 6c 74 4f 62 6a 29 3b 0a 2b 20 20 20 20 esultObj);.+
8fe0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b return TCL_OK;.+
8ff0: 7d 0a 2b 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a }.+.+static int.
9000: 2b 4f 62 6a 56 61 72 73 53 65 74 28 0a 2b 20 20 +ObjVarsSet(.+
9010: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 ClientData cli
9020: 65 6e 74 44 61 74 61 2c 0a 2b 20 20 20 20 54 63 entData,.+ Tc
9030: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
9040: 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 65 63 ,.+ Tcl_Objec
9050: 74 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 tContext context
9060: 2c 0a 2b 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c ,.+ int objc,
9070: 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 .+ Tcl_Obj *c
9080: 6f 6e 73 74 20 2a 6f 62 6a 76 29 0a 2b 7b 0a 2b onst *objv).+{.+
9090: 20 20 20 20 4f 62 6a 65 63 74 20 2a 6f 50 74 72 Object *oPtr
90a0: 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 20 54 63 = (Object *) Tc
90b0: 6c 4f 4f 47 65 74 44 65 66 69 6e 65 43 6d 64 43 lOOGetDefineCmdC
90c0: 6f 6e 74 65 78 74 28 69 6e 74 65 72 70 29 3b 0a ontext(interp);.
90d0: 2b 20 20 20 20 69 6e 74 20 76 61 72 63 2c 20 69 + int varc, i
90e0: 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a ;.+ Tcl_Obj *
90f0: 2a 76 61 72 76 2c 20 2a 76 61 72 69 61 62 6c 65 *varv, *variable
9100: 4f 62 6a 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 Obj;.+.+ if (
9110: 54 63 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 Tcl_ObjectContex
9120: 74 53 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e tSkippedArgs(con
9130: 74 65 78 74 29 2b 31 20 21 3d 20 6f 62 6a 63 29 text)+1 != objc)
9140: 20 7b 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 {.+.Tcl_WrongNu
9150: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 54 63 mArgs(interp, Tc
9160: 6c 5f 4f 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 l_ObjectContextS
9170: 6b 69 70 70 65 64 41 72 67 73 28 63 6f 6e 74 65 kippedArgs(conte
9180: 78 74 29 2c 20 6f 62 6a 76 2c 0a 2b 09 09 22 76 xt), objv,.+.."v
9190: 61 72 69 61 62 6c 65 4c 69 73 74 22 29 3b 0a 2b ariableList");.+
91a0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f .return TCL_ERRO
91b0: 52 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 R;.+ } else i
91c0: 66 20 28 6f 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 f (oPtr == NULL)
91d0: 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f {.+.return TCL_
91e0: 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 ERROR;.+ }.+
91f0: 20 20 20 6f 62 6a 76 20 2b 3d 20 54 63 6c 5f 4f objv += Tcl_O
9200: 62 6a 65 63 74 43 6f 6e 74 65 78 74 53 6b 69 70 bjectContextSkip
9210: 70 65 64 41 72 67 73 28 63 6f 6e 74 65 78 74 29 pedArgs(context)
9220: 3b 0a 2b 20 20 20 20 69 66 20 28 54 63 6c 5f 4c ;.+ if (Tcl_L
9230: 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 istObjGetElement
9240: 73 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 30 s(interp, objv[0
9250: 5d 2c 20 26 76 61 72 63 2c 0a 2b 09 20 20 20 20 ], &varc,.+.
9260: 26 76 61 72 76 29 20 21 3d 20 54 43 4c 5f 4f 4b &varv) != TCL_OK
9270: 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c ) {.+.return TCL
9280: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b _ERROR;.+ }.+
9290: 0a 2b 20 20 20 20 66 6f 72 20 28 69 3d 30 20 3b .+ for (i=0 ;
92a0: 20 69 3c 76 61 72 63 20 3b 20 69 2b 2b 29 20 7b i<varc ; i++) {
92b0: 0a 2b 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 .+.const char *v
92c0: 61 72 4e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 arName = Tcl_Get
92d0: 53 74 72 69 6e 67 28 76 61 72 76 5b 69 5d 29 3b String(varv[i]);
92e0: 0a 2b 0a 2b 09 69 66 20 28 73 74 72 73 74 72 28 .+.+.if (strstr(
92f0: 76 61 72 4e 61 6d 65 2c 20 22 3a 3a 22 29 20 21 varName, "::") !
9300: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 = NULL) {.+.
9310: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 Tcl_AppendResult
9320: 28 69 6e 74 65 72 70 2c 20 22 69 6e 76 61 6c 69 (interp, "invali
9330: 64 20 64 65 63 6c 61 72 65 64 20 76 61 72 69 61 d declared varia
9340: 62 6c 65 20 6e 61 6d 65 20 5c 22 22 2c 0a 2b 09 ble name \"",.+.
9350: 09 20 20 20 20 76 61 72 4e 61 6d 65 2c 20 22 5c . varName, "\
9360: 22 3a 20 6d 75 73 74 20 6e 6f 74 20 63 6f 6e 74 ": must not cont
9370: 61 69 6e 20 6e 61 6d 65 73 70 61 63 65 20 73 65 ain namespace se
9380: 70 61 72 61 74 6f 72 73 22 2c 0a 2b 09 09 20 20 parators",.+..
9390: 20 20 4e 55 4c 4c 29 3b 0a 2b 09 20 20 20 20 72 NULL);.+. r
93a0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
93b0: 0a 2b 09 7d 0a 2b 09 69 66 20 28 54 63 6c 5f 53 .+.}.+.if (Tcl_S
93c0: 74 72 69 6e 67 4d 61 74 63 68 28 76 61 72 4e 61 tringMatch(varNa
93d0: 6d 65 2c 20 22 2a 28 2a 29 22 29 29 20 7b 0a 2b me, "*(*)")) {.+
93e0: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 . Tcl_AppendR
93f0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 69 esult(interp, "i
9400: 6e 76 61 6c 69 64 20 64 65 63 6c 61 72 65 64 20 nvalid declared
9410: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 5c 22 variable name \"
9420: 22 2c 0a 2b 09 09 20 20 20 20 76 61 72 4e 61 6d ",.+.. varNam
9430: 65 2c 20 22 5c 22 3a 20 6d 75 73 74 20 6e 6f 74 e, "\": must not
9440: 20 72 65 66 65 72 20 74 6f 20 61 6e 20 61 72 72 refer to an arr
9450: 61 79 20 65 6c 65 6d 65 6e 74 22 2c 20 4e 55 4c ay element", NUL
9460: 4c 29 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e L);.+. return
9470: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a TCL_ERROR;.+.}.
9480: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 66 6f 72 20 + }.+ for
9490: 28 69 3d 30 20 3b 20 69 3c 76 61 72 63 20 3b 20 (i=0 ; i<varc ;
94a0: 69 2b 2b 29 20 7b 0a 2b 09 54 63 6c 5f 49 6e 63 i++) {.+.Tcl_Inc
94b0: 72 52 65 66 43 6f 75 6e 74 28 76 61 72 76 5b 69 rRefCount(varv[i
94c0: 5d 29 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 ]);.+ }.+.+
94d0: 20 20 46 4f 52 45 41 43 48 28 76 61 72 69 61 62 FOREACH(variab
94e0: 6c 65 4f 62 6a 2c 20 6f 50 74 72 2d 3e 76 61 72 leObj, oPtr->var
94f0: 69 61 62 6c 65 73 29 20 7b 0a 2b 09 54 63 6c 5f iables) {.+.Tcl_
9500: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 76 61 72 DecrRefCount(var
9510: 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b 20 20 20 20 iableObj);.+
9520: 7d 0a 2b 20 20 20 20 69 66 20 28 69 20 21 3d 20 }.+ if (i !=
9530: 76 61 72 63 29 20 7b 0a 2b 09 69 66 20 28 76 61 varc) {.+.if (va
9540: 72 63 20 3d 3d 20 30 29 20 7b 0a 2b 09 20 20 20 rc == 0) {.+.
9550: 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 ckfree((char *)
9560: 20 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 oPtr->variables
9570: 2e 6c 69 73 74 29 3b 0a 2b 09 7d 20 65 6c 73 65 .list);.+.} else
9580: 20 69 66 20 28 69 29 20 7b 0a 2b 09 20 20 20 20 if (i) {.+.
9590: 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e oPtr->variables.
95a0: 6c 69 73 74 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 list = (Tcl_Obj
95b0: 2a 2a 29 0a 2b 09 09 20 20 20 20 63 6b 72 65 61 **).+.. ckrea
95c0: 6c 6c 6f 63 28 28 63 68 61 72 20 2a 29 20 6f 50 lloc((char *) oP
95d0: 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c 69 tr->variables.li
95e0: 73 74 2c 0a 2b 09 09 20 20 20 20 73 69 7a 65 6f st,.+.. sizeo
95f0: 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 76 f(Tcl_Obj *) * v
9600: 61 72 63 29 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b arc);.+.} else {
9610: 0a 2b 09 20 20 20 20 6f 50 74 72 2d 3e 76 61 72 .+. oPtr->var
9620: 69 61 62 6c 65 73 2e 6c 69 73 74 20 3d 20 28 54 iables.list = (T
9630: 63 6c 5f 4f 62 6a 20 2a 2a 29 0a 2b 09 09 20 20 cl_Obj **).+..
9640: 20 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 ckalloc(sizeof
9650: 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 76 61 (Tcl_Obj *) * va
9660: 72 63 29 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a rc);.+.}.+ }.
9670: 2b 20 20 20 20 69 66 20 28 76 61 72 63 20 3e 20 + if (varc >
9680: 30 29 20 7b 0a 2b 09 6d 65 6d 63 70 79 28 6f 50 0) {.+.memcpy(oP
9690: 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c 69 tr->variables.li
96a0: 73 74 2c 20 76 61 72 76 2c 20 73 69 7a 65 6f 66 st, varv, sizeof
96b0: 28 54 63 6c 5f 4f 62 6a 20 2a 29 2a 76 61 72 63 (Tcl_Obj *)*varc
96c0: 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 6f );.+ }.+ o
96d0: 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6e Ptr->variables.n
96e0: 75 6d 20 3d 20 76 61 72 63 3b 0a 2b 20 20 20 20 um = varc;.+
96f0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b return TCL_OK;.+
9700: 7d 0a 2b 0c 0a 20 2f 2a 0a 20 20 2a 20 4c 6f 63 }.+.. /*. * Loc
9710: 61 6c 20 56 61 72 69 61 62 6c 65 73 3a 0a 20 20 al Variables:.
9720: 2a 20 6d 6f 64 65 3a 20 63 0a 49 6e 64 65 78 3a * mode: c.Index:
9730: 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 49 6e generic/tclOOIn
9740: 74 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d t.h.============
9750: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9760: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9770: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9780: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 =======.RCS file
9790: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 6f : /cvsroot/tcl/o
97a0: 6f 63 6f 72 65 2f 67 65 6e 65 72 69 63 2f 74 63 ocore/generic/tc
97b0: 6c 4f 4f 49 6e 74 2e 68 2c 76 0a 72 65 74 72 69 lOOInt.h,v.retri
97c0: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
97d0: 2e 34 32 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e .42.diff -u -r1.
97e0: 34 32 20 74 63 6c 4f 4f 49 6e 74 2e 68 0a 2d 2d 42 tclOOInt.h.--
97f0: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 49 - generic/tclOOI
9800: 6e 74 2e 68 09 35 20 4d 61 72 20 32 30 31 30 20 nt.h.5 Mar 2010
9810: 31 35 3a 33 39 3a 33 33 20 2d 30 30 30 30 09 31 15:39:33 -0000.1
9820: 2e 34 32 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f .42.+++ generic/
9830: 74 63 6c 4f 4f 49 6e 74 2e 68 09 32 32 20 4f 63 tclOOInt.h.22 Oc
9840: 74 20 32 30 31 30 20 31 35 3a 32 35 3a 33 32 20 t 2010 15:25:32
9850: 2d 30 30 30 30 0a 40 40 20 2d 32 31 36 2c 36 20 -0000.@@ -216,6
9860: 2b 32 31 36 2c 38 20 40 40 0a 20 09 09 09 09 20 +216,8 @@. ....
9870: 2a 20 63 6c 61 73 73 20 6f 66 20 63 6c 61 73 73 * class of class
9880: 65 73 2c 20 61 6e 64 20 73 68 6f 75 6c 64 20 62 es, and should b
9890: 65 20 74 72 65 61 74 65 64 0a 20 09 09 09 09 20 e treated. ....
98a0: 2a 20 73 70 65 63 69 61 6c 6c 79 20 64 75 72 69 * specially duri
98b0: 6e 67 20 74 65 61 72 64 6f 77 6e 20 28 61 6e 64 ng teardown (and
98c0: 20 69 6e 20 61 20 66 65 77 0a 20 09 09 09 09 20 in a few. ....
98d0: 2a 20 6f 74 68 65 72 20 73 70 6f 74 73 29 2e 20 * other spots).
98e0: 2a 2f 0a 2b 23 64 65 66 69 6e 65 20 46 4f 52 43 */.+#define FORC
98f0: 45 5f 55 4e 4b 4e 4f 57 4e 20 30 78 31 30 30 30 E_UNKNOWN 0x1000
9900: 30 09 2f 2a 20 53 74 61 74 65 73 20 74 68 61 74 0./* States that
9910: 20 77 65 20 61 72 65 20 2a 72 65 61 6c 6c 79 2a we are *really*
9920: 20 6c 6f 6f 6b 69 6e 67 20 75 70 20 74 68 65 0a looking up the.
9930: 2b 09 09 09 09 20 2a 20 75 6e 6b 6e 6f 77 6e 20 +.... * unknown
9940: 6d 65 74 68 6f 64 20 68 61 6e 64 6c 65 72 20 61 method handler a
9950: 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 20 2a 2f t that point. */
9960: 0a 20 0a 20 2f 2a 0a 20 20 2a 20 41 6e 64 20 74 . . /*. * And t
9970: 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 he definition of
9980: 20 61 20 63 6c 61 73 73 2e 20 4e 6f 74 65 20 74 a class. Note t
9990: 68 61 74 20 65 76 65 72 79 20 63 6c 61 73 73 20 hat every class
99a0: 61 6c 73 6f 20 68 61 73 20 61 6e 20 61 73 73 6f also has an asso
99b0: 63 69 61 74 65 64 0a 40 40 20 2d 34 32 36 2c 33 ciated.@@ -426,3
99c0: 30 20 2b 34 32 38 2c 31 38 20 40 40 0a 20 4d 4f 0 +428,18 @@. MO
99d0: 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 DULE_SCOPE int.T
99e0: 63 6c 4f 4f 44 65 66 69 6e 65 45 78 70 6f 72 74 clOODefineExport
99f0: 4f 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 ObjCmd(ClientDat
9a00: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 09 a clientData,. .
9a10: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 .. Tcl_Interp
9a20: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 *interp, int ob
9a30: 6a 63 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f jc,. ... Tcl_
9a40: 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 Obj *const *objv
9a50: 29 3b 0a 2d 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 );.-MODULE_SCOPE
9a60: 20 69 6e 74 09 54 63 6c 4f 4f 44 65 66 69 6e 65 int.TclOODefine
9a70: 46 69 6c 74 65 72 4f 62 6a 43 6d 64 28 43 6c 69 FilterObjCmd(Cli
9a80: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
9a90: 74 61 2c 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f ta,.-... Tcl_
9aa0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 Interp *interp,
9ab0: 69 6e 74 20 6f 62 6a 63 2c 0a 2d 09 09 09 20 20 int objc,.-...
9ac0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 Tcl_Obj *const
9ad0: 20 2a 6f 62 6a 76 29 3b 0a 20 4d 4f 44 55 4c 45 *objv);. MODULE
9ae0: 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 4f 4f _SCOPE int.TclOO
9af0: 44 65 66 69 6e 65 46 6f 72 77 61 72 64 4f 62 6a DefineForwardObj
9b00: 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 Cmd(ClientData c
9b10: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 09 09 09 20 lientData,. ...
9b20: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 Tcl_Interp *i
9b30: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c nterp, int objc,
9b40: 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a . ... Tcl_Obj
9b50: 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a *const *objv);.
9b60: 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e MODULE_SCOPE in
9b70: 74 09 54 63 6c 4f 4f 44 65 66 69 6e 65 4d 65 74 t.TclOODefineMet
9b80: 68 6f 64 4f 62 6a 43 6d 64 28 43 6c 69 65 6e 74 hodObjCmd(Client
9b90: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c Data clientData,
9ba0: 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 . ... Tcl_Int
9bb0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 erp *interp, int
9bc0: 20 6f 62 6a 63 2c 0a 20 09 09 09 20 20 20 20 54 objc,. ... T
9bd0: 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f cl_Obj *const *o
9be0: 62 6a 76 29 3b 0a 2d 4d 4f 44 55 4c 45 5f 53 43 bjv);.-MODULE_SC
9bf0: 4f 50 45 20 69 6e 74 09 54 63 6c 4f 4f 44 65 66 OPE int.TclOODef
9c00: 69 6e 65 4d 69 78 69 6e 4f 62 6a 43 6d 64 28 43 ineMixinObjCmd(C
9c10: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 lientData client
9c20: 44 61 74 61 2c 0a 2d 09 09 09 20 20 20 20 54 63 Data,.-... Tc
9c30: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
9c40: 2c 20 63 6f 6e 73 74 20 69 6e 74 20 6f 62 6a 63 , const int objc
9c50: 2c 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f 4f 62 ,.-... Tcl_Ob
9c60: 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b j *const *objv);
9c70: 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 . MODULE_SCOPE i
9c80: 6e 74 09 54 63 6c 4f 4f 44 65 66 69 6e 65 52 65 nt.TclOODefineRe
9c90: 6e 61 6d 65 4d 65 74 68 6f 64 4f 62 6a 43 6d 64 nameMethodObjCmd
9ca0: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 (ClientData clie
9cb0: 6e 74 44 61 74 61 2c 0a 20 09 09 09 20 20 20 20 ntData,. ...
9cc0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
9cd0: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 09 rp, int objc,. .
9ce0: 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 .. Tcl_Obj *c
9cf0: 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2d 4d 4f onst *objv);.-MO
9d00: 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 DULE_SCOPE int.T
9d10: 63 6c 4f 4f 44 65 66 69 6e 65 53 75 70 65 72 63 clOODefineSuperc
9d20: 6c 61 73 73 4f 62 6a 43 6d 64 28 43 6c 69 65 6e lassObjCmd(Clien
9d30: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 tData clientData
9d40: 2c 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f 49 6e ,.-... Tcl_In
9d50: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e terp *interp, in
9d60: 74 20 6f 62 6a 63 2c 0a 2d 09 09 09 20 20 20 20 t objc,.-...
9d70: 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a Tcl_Obj *const *
9d80: 6f 62 6a 76 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 objv);. MODULE_S
9d90: 43 4f 50 45 20 69 6e 74 09 54 63 6c 4f 4f 44 65 COPE int.TclOODe
9da0: 66 69 6e 65 55 6e 65 78 70 6f 72 74 4f 62 6a 43 fineUnexportObjC
9db0: 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c md(ClientData cl
9dc0: 69 65 6e 74 44 61 74 61 2c 0a 20 09 09 09 20 20 ientData,. ...
9dd0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
9de0: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a terp, int objc,.
9df0: 20 09 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 ... Tcl_Obj
9e00: 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 2d *const *objv);.-
9e10: 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 MODULE_SCOPE int
9e20: 09 54 63 6c 4f 4f 44 65 66 69 6e 65 56 61 72 69 .TclOODefineVari
9e30: 61 62 6c 65 73 4f 62 6a 43 6d 64 28 43 6c 69 65 ablesObjCmd(Clie
9e40: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 ntData clientDat
9e50: 61 2c 0a 2d 09 09 09 20 20 20 20 54 63 6c 5f 49 a,.-... Tcl_I
9e60: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 nterp *interp, i
9e70: 6e 74 20 6f 62 6a 63 2c 0a 2d 09 09 09 20 20 20 nt objc,.-...
9e80: 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 Tcl_Obj *const
9e90: 2a 6f 62 6a 76 29 3b 0a 20 4d 4f 44 55 4c 45 5f *objv);. MODULE_
9ea0: 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 4f 4f 44 SCOPE int.TclOOD
9eb0: 65 66 69 6e 65 43 6c 61 73 73 4f 62 6a 43 6d 64 efineClassObjCmd
9ec0: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 (ClientData clie
9ed0: 6e 74 44 61 74 61 2c 0a 20 09 09 09 20 20 20 20 ntData,. ...
9ee0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
9ef0: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 09 rp, int objc,. .
9f00: 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 .. Tcl_Obj *c
9f10: 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 40 40 20 onst *objv);.@@
9f20: 2d 35 30 36 2c 36 20 2b 34 39 36 2c 37 20 40 40 -506,6 +496,7 @@
9f30: 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 . MODULE_SCOPE v
9f40: 6f 69 64 09 54 63 6c 4f 4f 41 64 64 54 6f 49 6e oid.TclOOAddToIn
9f50: 73 74 61 6e 63 65 73 28 4f 62 6a 65 63 74 20 2a stances(Object *
9f60: 6f 50 74 72 2c 20 43 6c 61 73 73 20 2a 63 6c 73 oPtr, Class *cls
9f70: 50 74 72 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 Ptr);. MODULE_SC
9f80: 4f 50 45 20 76 6f 69 64 09 54 63 6c 4f 4f 41 64 OPE void.TclOOAd
9f90: 64 54 6f 4d 69 78 69 6e 53 75 62 73 28 43 6c 61 dToMixinSubs(Cla
9fa0: 73 73 20 2a 73 75 62 50 74 72 2c 20 43 6c 61 73 ss *subPtr, Clas
9fb0: 73 20 2a 6d 69 78 69 6e 50 74 72 29 3b 0a 20 4d s *mixinPtr);. M
9fc0: 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f 69 64 ODULE_SCOPE void
9fd0: 09 54 63 6c 4f 4f 41 64 64 54 6f 53 75 62 63 6c .TclOOAddToSubcl
9fe0: 61 73 73 65 73 28 43 6c 61 73 73 20 2a 73 75 62 asses(Class *sub
9ff0: 50 74 72 2c 20 43 6c 61 73 73 20 2a 73 75 70 65 Ptr, Class *supe
a000: 72 50 74 72 29 3b 0a 2b 4d 4f 44 55 4c 45 5f 53 rPtr);.+MODULE_S
a010: 43 4f 50 45 20 69 6e 74 09 54 63 6c 4f 4f 44 65 COPE int.TclOODe
a020: 66 69 6e 65 53 6c 6f 74 73 28 46 6f 75 6e 64 61 fineSlots(Founda
a030: 74 69 6f 6e 20 2a 66 50 74 72 29 3b 0a 20 4d 4f tion *fPtr);. MO
a040: 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f 69 64 09 DULE_SCOPE void.
a050: 54 63 6c 4f 4f 44 65 6c 65 74 65 43 68 61 69 6e TclOODeleteChain
a060: 28 43 61 6c 6c 43 68 61 69 6e 20 2a 63 61 6c 6c (CallChain *call
a070: 50 74 72 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 Ptr);. MODULE_SC
a080: 4f 50 45 20 76 6f 69 64 09 54 63 6c 4f 4f 44 65 OPE void.TclOODe
a090: 6c 65 74 65 43 68 61 69 6e 43 61 63 68 65 28 54 leteChainCache(T
a0a0: 63 6c 5f 48 61 73 68 54 61 62 6c 65 20 2a 74 61 cl_HashTable *ta
a0b0: 62 6c 65 50 74 72 29 3b 0a 20 4d 4f 44 55 4c 45 blePtr);. MODULE
a0c0: 5f 53 43 4f 50 45 20 76 6f 69 64 09 54 63 6c 4f _SCOPE void.TclO
a0d0: 4f 44 65 6c 65 74 65 43 6f 6e 74 65 78 74 28 43 ODeleteContext(C
a0e0: 61 6c 6c 43 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 allContext *cont
a0f0: 65 78 74 50 74 72 29 3b 0a 49 6e 64 65 78 3a 20 extPtr);.Index:
a100: 74 65 73 74 73 2f 6f 6f 2e 74 65 73 74 0a 3d 3d tests/oo.test.==
a110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a150: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 =.RCS file: /cvs
a160: 72 6f 6f 74 2f 74 63 6c 2f 6f 6f 63 6f 72 65 2f root/tcl/oocore/
a170: 74 65 73 74 73 2f 6f 6f 2e 74 65 73 74 2c 76 0a tests/oo.test,v.
a180: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
a190: 69 6f 6e 20 31 2e 35 37 0a 64 69 66 66 20 2d 75 ion 1.57.diff -u
a1a0: 20 2d 72 31 2e 35 37 20 6f 6f 2e 74 65 73 74 0a -r1.57 oo.test.
a1b0: 2d 2d 2d 20 74 65 73 74 73 2f 6f 6f 2e 74 65 73 --- tests/oo.tes
a1c0: 74 09 38 20 4f 63 74 20 32 30 31 30 20 31 34 3a t.8 Oct 2010 14:
a1d0: 30 32 3a 30 35 20 2d 30 30 30 30 09 31 2e 35 37 02:05 -0000.1.57
a1e0: 0a 2b 2b 2b 20 74 65 73 74 73 2f 6f 6f 2e 74 65 .+++ tests/oo.te
a1f0: 73 74 09 32 32 20 4f 63 74 20 32 30 31 30 20 31 st.22 Oct 2010 1
a200: 35 3a 32 35 3a 33 32 20 2d 30 30 30 30 0a 40 40 5:25:32 -0000.@@
a210: 20 2d 31 32 35 2c 36 20 2b 31 32 35 2c 31 33 20 -125,6 +125,13
a220: 40 40 0a 20 74 65 73 74 20 6f 6f 2d 31 2e 35 20 @@. test oo-1.5
a230: 7b 62 61 73 69 63 20 74 65 73 74 20 6f 66 20 4f {basic test of O
a240: 4f 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 7d O functionality}
a250: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 6f 6f -body {. oo
a260: 3a 3a 6f 62 6a 65 63 74 20 64 6f 65 73 6e 6f 74 ::object doesnot
a270: 65 78 69 73 74 0a 20 7d 20 2d 72 65 74 75 72 6e exist. } -return
a280: 43 6f 64 65 73 20 31 20 2d 72 65 73 75 6c 74 20 Codes 1 -result
a290: 7b 75 6e 6b 6e 6f 77 6e 20 6d 65 74 68 6f 64 20 {unknown method
a2a0: 22 64 6f 65 73 6e 6f 74 65 78 69 73 74 22 3a 20 "doesnotexist":
a2b0: 6d 75 73 74 20 62 65 20 63 72 65 61 74 65 2c 20 must be create,
a2c0: 64 65 73 74 72 6f 79 20 6f 72 20 6e 65 77 7d 0a destroy or new}.
a2d0: 2b 74 65 73 74 20 6f 6f 2d 31 2e 35 2e 31 20 7b +test oo-1.5.1 {
a2e0: 62 61 73 69 63 20 74 65 73 74 20 6f 66 20 4f 4f basic test of OO
a2f0: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 7d 20 functionality}
a300: 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 20 6f 6f -setup {.+ oo
a310: 3a 3a 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 ::object create
a320: 61 6e 69 6e 73 74 61 6e 63 65 0a 2b 7d 20 2d 72 aninstance.+} -r
a330: 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 eturnCodes error
a340: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 61 6e -body {.+ an
a350: 69 6e 73 74 61 6e 63 65 0a 2b 7d 20 2d 63 6c 65 instance.+} -cle
a360: 61 6e 75 70 20 7b 0a 2b 20 20 20 20 72 65 6e 61 anup {.+ rena
a370: 6d 65 20 61 6e 69 6e 73 74 61 6e 63 65 20 7b 7d me aninstance {}
a380: 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f .+} -result {wro
a390: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c ng # args: shoul
a3a0: 64 20 62 65 20 22 61 6e 69 6e 73 74 61 6e 63 65 d be "aninstance
a3b0: 20 6d 65 74 68 6f 64 20 3f 61 72 67 20 2e 2e 2e method ?arg ...
a3c0: 3f 22 7d 0a 20 74 65 73 74 20 6f 6f 2d 31 2e 36 ?"}. test oo-1.6
a3d0: 20 7b 62 61 73 69 63 20 74 65 73 74 20 6f 66 20 {basic test of
a3e0: 4f 4f 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 OO functionality
a3f0: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 20 } -setup {.
a400: 6f 6f 3a 3a 6f 62 6a 65 63 74 20 63 72 65 61 74 oo::object creat
a410: 65 20 61 6e 69 6e 73 74 61 6e 63 65 0a 20 7d 20 e aninstance. }
a420: 2d 62 6f 64 79 20 7b 0a 40 40 20 2d 32 34 32 30 -body {.@@ -2420
a430: 2c 36 20 2b 32 34 32 37 2c 38 37 20 40 40 0a 20 ,6 +2427,87 @@.
a440: 20 20 20 20 69 6e 73 74 31 20 73 74 65 70 0a 20 inst1 step.
a450: 20 20 20 20 6c 69 73 74 20 5b 69 6e 73 74 31 20 list [inst1
a460: 76 61 6c 75 65 5d 20 5b 69 6e 73 74 32 20 76 61 value] [inst2 va
a470: 6c 75 65 5d 0a 20 7d 20 2d 72 65 73 75 6c 74 20 lue]. } -result
a480: 7b 33 20 32 7d 0a 2b 74 65 73 74 20 6f 6f 2d 32 {3 2}.+test oo-2
a490: 37 2e 31 32 20 7b 76 61 72 69 61 62 6c 65 73 20 7.12 {variables
a4a0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 2d 20 6d 75 declaration - mu
a4b0: 6c 74 69 70 6c 65 20 75 73 65 7d 20 2d 73 65 74 ltiple use} -set
a4c0: 75 70 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c up {.+ oo::cl
a4d0: 61 73 73 20 63 72 65 61 74 65 20 6d 61 73 74 65 ass create maste
a4e0: 72 0a 2b 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a r.+} -cleanup {.
a4f0: 2b 20 20 20 20 6d 61 73 74 65 72 20 64 65 73 74 + master dest
a500: 72 6f 79 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b roy.+} -body {.+
a510: 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 oo::class cr
a520: 65 61 74 65 20 66 6f 6f 20 7b 0a 2b 09 73 75 70 eate foo {.+.sup
a530: 65 72 63 6c 61 73 73 20 6d 61 73 74 65 72 0a 2b erclass master.+
a540: 09 76 61 72 69 61 62 6c 65 20 78 0a 2b 09 76 61 .variable x.+.va
a550: 72 69 61 62 6c 65 20 79 0a 2b 09 6d 65 74 68 6f riable y.+.metho
a560: 64 20 62 6f 6f 20 7b 7d 20 7b 0a 2b 09 20 20 20 d boo {} {.+.
a570: 20 72 65 74 75 72 6e 20 5b 69 6e 63 72 20 78 5d return [incr x]
a580: 2c 5b 69 6e 63 72 20 79 5d 0a 2b 09 7d 0a 2b 20 ,[incr y].+.}.+
a590: 20 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 63 72 }.+ foo cr
a5a0: 65 61 74 65 20 62 61 72 0a 2b 20 20 20 20 6c 69 eate bar.+ li
a5b0: 73 74 20 5b 62 61 72 20 62 6f 6f 5d 20 5b 62 61 st [bar boo] [ba
a5c0: 72 20 62 6f 6f 5d 0a 2b 7d 20 2d 72 65 73 75 6c r boo].+} -resul
a5d0: 74 20 7b 31 2c 31 20 32 2c 32 7d 0a 2b 74 65 73 t {1,1 2,2}.+tes
a5e0: 74 20 6f 6f 2d 32 37 2e 31 33 20 7b 76 61 72 69 t oo-27.13 {vari
a5f0: 61 62 6c 65 73 20 64 65 63 6c 61 72 61 74 69 6f ables declaratio
a600: 6e 20 2d 20 6d 75 6c 74 69 70 6c 65 20 75 73 65 n - multiple use
a610: 7d 20 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 20 } -setup {.+
a620: 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65 oo::class create
a630: 20 6d 61 73 74 65 72 0a 2b 7d 20 2d 63 6c 65 61 master.+} -clea
a640: 6e 75 70 20 7b 0a 2b 20 20 20 20 6d 61 73 74 65 nup {.+ maste
a650: 72 20 64 65 73 74 72 6f 79 0a 2b 7d 20 2d 62 6f r destroy.+} -bo
a660: 64 79 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c dy {.+ oo::cl
a670: 61 73 73 20 63 72 65 61 74 65 20 66 6f 6f 20 7b ass create foo {
a680: 0a 2b 09 73 75 70 65 72 63 6c 61 73 73 20 6d 61 .+.superclass ma
a690: 73 74 65 72 0a 2b 09 76 61 72 69 61 62 6c 65 0a ster.+.variable.
a6a0: 2b 09 76 61 72 69 61 62 6c 65 20 78 20 79 0a 2b +.variable x y.+
a6b0: 09 6d 65 74 68 6f 64 20 62 6f 6f 20 7b 7d 20 7b .method boo {} {
a6c0: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 5b 69 .+. return [i
a6d0: 6e 63 72 20 78 5d 2c 5b 69 6e 63 72 20 79 5d 0a ncr x],[incr y].
a6e0: 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 +.}.+ }.+
a6f0: 66 6f 6f 20 63 72 65 61 74 65 20 62 61 72 0a 2b foo create bar.+
a700: 20 20 20 20 6c 69 73 74 20 5b 62 61 72 20 62 6f list [bar bo
a710: 6f 5d 20 5b 62 61 72 20 62 6f 6f 5d 0a 2b 7d 20 o] [bar boo].+}
a720: 2d 72 65 73 75 6c 74 20 7b 31 2c 31 20 32 2c 32 -result {1,1 2,2
a730: 7d 0a 2b 74 65 73 74 20 6f 6f 2d 32 37 2e 31 34 }.+test oo-27.14
a740: 20 7b 76 61 72 69 61 62 6c 65 73 20 64 65 63 6c {variables decl
a750: 61 72 61 74 69 6f 6e 20 2d 20 6d 75 6c 74 69 70 aration - multip
a760: 6c 65 20 75 73 65 7d 20 2d 73 65 74 75 70 20 7b le use} -setup {
a770: 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 .+ oo::class
a780: 63 72 65 61 74 65 20 6d 61 73 74 65 72 0a 2b 7d create master.+}
a790: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 -cleanup {.+
a7a0: 20 6d 61 73 74 65 72 20 64 65 73 74 72 6f 79 0a master destroy.
a7b0: 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 +} -body {.+
a7c0: 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65 oo::class create
a7d0: 20 66 6f 6f 20 7b 0a 2b 09 73 75 70 65 72 63 6c foo {.+.supercl
a7e0: 61 73 73 20 6d 61 73 74 65 72 0a 2b 09 76 61 72 ass master.+.var
a7f0: 69 61 62 6c 65 20 78 0a 2b 09 76 61 72 69 61 62 iable x.+.variab
a800: 6c 65 20 2d 63 6c 65 61 72 0a 2b 09 76 61 72 69 le -clear.+.vari
a810: 61 62 6c 65 20 79 0a 2b 09 6d 65 74 68 6f 64 20 able y.+.method
a820: 62 6f 6f 20 7b 7d 20 7b 0a 2b 09 20 20 20 20 72 boo {} {.+. r
a830: 65 74 75 72 6e 20 5b 69 6e 63 72 20 78 5d 2c 5b eturn [incr x],[
a840: 69 6e 63 72 20 79 5d 0a 2b 09 7d 0a 2b 20 20 20 incr y].+.}.+
a850: 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 63 72 65 61 }.+ foo crea
a860: 74 65 20 62 61 72 0a 2b 20 20 20 20 6c 69 73 74 te bar.+ list
a870: 20 5b 62 61 72 20 62 6f 6f 5d 20 5b 62 61 72 20 [bar boo] [bar
a880: 62 6f 6f 5d 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 boo].+} -result
a890: 7b 31 2c 31 20 31 2c 32 7d 0a 2b 74 65 73 74 20 {1,1 1,2}.+test
a8a0: 6f 6f 2d 32 37 2e 31 35 20 7b 76 61 72 69 61 62 oo-27.15 {variab
a8b0: 6c 65 73 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 les declaration
a8c0: 2d 20 6d 75 6c 74 69 70 6c 65 20 75 73 65 7d 20 - multiple use}
a8d0: 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 20 6f 6f -setup {.+ oo
a8e0: 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65 20 6d ::class create m
a8f0: 61 73 74 65 72 0a 2b 7d 20 2d 63 6c 65 61 6e 75 aster.+} -cleanu
a900: 70 20 7b 0a 2b 20 20 20 20 6d 61 73 74 65 72 20 p {.+ master
a910: 64 65 73 74 72 6f 79 0a 2b 7d 20 2d 62 6f 64 79 destroy.+} -body
a920: 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 {.+ oo::clas
a930: 73 20 63 72 65 61 74 65 20 66 6f 6f 20 7b 0a 2b s create foo {.+
a940: 09 73 75 70 65 72 63 6c 61 73 73 20 6d 61 73 74 .superclass mast
a950: 65 72 0a 2b 09 76 61 72 69 61 62 6c 65 20 78 0a er.+.variable x.
a960: 2b 09 76 61 72 69 61 62 6c 65 20 2d 73 65 74 20 +.variable -set
a970: 79 0a 2b 09 6d 65 74 68 6f 64 20 62 6f 6f 20 7b y.+.method boo {
a980: 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e } {.+. return
a990: 20 5b 69 6e 63 72 20 78 5d 2c 5b 69 6e 63 72 20 [incr x],[incr
a9a0: 79 5d 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 20 y].+.}.+ }.+
a9b0: 20 20 20 66 6f 6f 20 63 72 65 61 74 65 20 62 61 foo create ba
a9c0: 72 0a 2b 20 20 20 20 6c 69 73 74 20 5b 62 61 72 r.+ list [bar
a9d0: 20 62 6f 6f 5d 20 5b 62 61 72 20 62 6f 6f 5d 0a boo] [bar boo].
a9e0: 2b 7d 20 2d 72 65 73 75 6c 74 20 7b 31 2c 31 20 +} -result {1,1
a9f0: 31 2c 32 7d 0a 2b 74 65 73 74 20 6f 6f 2d 32 37 1,2}.+test oo-27
aa00: 2e 31 36 20 7b 76 61 72 69 61 62 6c 65 73 20 64 .16 {variables d
aa10: 65 63 6c 61 72 61 74 69 6f 6e 20 2d 20 6d 75 6c eclaration - mul
aa20: 74 69 70 6c 65 20 75 73 65 7d 20 2d 73 65 74 75 tiple use} -setu
aa30: 70 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c 61 p {.+ oo::cla
aa40: 73 73 20 63 72 65 61 74 65 20 6d 61 73 74 65 72 ss create master
aa50: 0a 2b 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b .+} -cleanup {.+
aa60: 20 20 20 20 6d 61 73 74 65 72 20 64 65 73 74 72 master destr
aa70: 6f 79 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 oy.+} -body {.+
aa80: 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 oo::class cre
aa90: 61 74 65 20 66 6f 6f 20 7b 0a 2b 09 73 75 70 65 ate foo {.+.supe
aaa0: 72 63 6c 61 73 73 20 6d 61 73 74 65 72 0a 2b 09 rclass master.+.
aab0: 76 61 72 69 61 62 6c 65 20 78 0a 2b 09 76 61 72 variable x.+.var
aac0: 69 61 62 6c 65 20 2d 3f 20 79 0a 2b 09 6d 65 74 iable -? y.+.met
aad0: 68 6f 64 20 62 6f 6f 20 7b 7d 20 7b 0a 2b 09 20 hod boo {} {.+.
aae0: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 63 72 20 return [incr
aaf0: 78 5d 2c 5b 69 6e 63 72 20 79 5d 0a 2b 09 7d 0a x],[incr y].+.}.
ab00: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 + }.+ foo
ab10: 63 72 65 61 74 65 20 62 61 72 0a 2b 20 20 20 20 create bar.+
ab20: 6c 69 73 74 20 5b 62 61 72 20 62 6f 6f 5d 20 5b list [bar boo] [
ab30: 62 61 72 20 62 6f 6f 5d 0a 2b 7d 20 2d 72 65 74 bar boo].+} -ret
ab40: 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d urnCodes error -
ab50: 6d 61 74 63 68 20 67 6c 6f 62 20 2d 72 65 73 75 match glob -resu
ab60: 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 6d 65 74 68 lt {unknown meth
ab70: 6f 64 20 22 2d 3f 22 3a 20 6d 75 73 74 20 62 65 od "-?": must be
ab80: 20 2a 7d 0a 20 0a 20 23 20 41 20 66 65 61 74 75 *}. . # A featu
ab90: 72 65 20 74 68 61 74 27 73 20 6e 6f 74 20 73 75 re that's not su
aba0: 70 70 6f 72 74 65 64 20 62 65 63 61 75 73 65 20 pported because
abb0: 74 68 65 20 6d 65 63 68 61 6e 69 73 6d 20 6d 61 the mechanism ma
abc0: 79 20 63 68 61 6e 67 65 20 77 69 74 68 6f 75 74 y change without
abd0: 0a 20 23 20 77 61 72 6e 69 6e 67 2c 20 62 75 74 . # warning, but
abe0: 20 69 73 20 73 75 70 70 6f 73 65 64 20 74 6f 20 is supposed to
abf0: 77 6f 72 6b 2e 2e 2e 0a work....