Tcl Source Code

Hex Artifact Content
Login

Artifact e533f4d2376a2b5ed6712358317cbf618843155d:

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....