Tcl Source Code

Hex Artifact Content
Login

Artifact c7d3a3a4bc9a7acd2a23880732435e8922316a82:

Attachment "320.patch" to ticket [2005460fff] added by dkf 2008-06-29 06:27:34.
0000: 49 6e 64 65 78 3a 20 62 65 6e 63 68 6d 61 72 6b  Index: benchmark
0010: 73 2f 63 70 73 2e 74 63 6c 0a 3d 3d 3d 3d 3d 3d  s/cps.tcl.======
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 3d 3d 3d 0a 52 43  =============.RC
0060: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74  S file: /cvsroot
0070: 2f 74 63 6c 2f 6f 6f 63 6f 72 65 2f 62 65 6e 63  /tcl/oocore/benc
0080: 68 6d 61 72 6b 73 2f 63 70 73 2e 74 63 6c 2c 76  hmarks/cps.tcl,v
0090: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69  .retrieving revi
00a0: 73 69 6f 6e 20 31 2e 34 0a 64 69 66 66 20 2d 77  sion 1.4.diff -w
00b0: 20 2d 75 20 2d 72 31 2e 34 20 63 70 73 2e 74 63   -u -r1.4 cps.tc
00c0: 6c 0a 2d 2d 2d 20 62 65 6e 63 68 6d 61 72 6b 73  l.--- benchmarks
00d0: 2f 63 70 73 2e 74 63 6c 09 32 35 20 4d 61 79 20  /cps.tcl.25 May 
00e0: 32 30 30 38 20 31 31 3a 32 39 3a 33 38 20 2d 30  2008 11:29:38 -0
00f0: 30 30 30 09 31 2e 34 0a 2b 2b 2b 20 62 65 6e 63  000.1.4.+++ benc
0100: 68 6d 61 72 6b 73 2f 63 70 73 2e 74 63 6c 09 32  hmarks/cps.tcl.2
0110: 38 20 4a 75 6e 20 32 30 30 38 20 32 33 3a 32 33  8 Jun 2008 23:23
0120: 3a 32 30 20 2d 30 30 30 30 0a 40 40 20 2d 37 34  :20 -0000.@@ -74
0130: 2c 34 20 2b 37 34 2c 32 35 20 40 40 0a 20 70 75  ,4 +74,25 @@. pu
0140: 74 73 20 22 43 6f 6d 62 69 6e 65 64 20 69 6e 68  ts "Combined inh
0150: 65 72 69 74 65 64 20 6d 69 63 72 6f 62 65 6e 63  erited microbenc
0160: 68 6d 61 72 6b 22 0a 20 63 70 73 20 7b 62 6f 6f  hmark". cps {boo
0170: 20 63 72 65 61 74 65 20 3a 3a 66 3b 66 20 62 61   create ::f;f ba
0180: 72 3b 66 20 64 65 73 74 72 6f 79 7d 0a 20 0a 2b  r;f destroy}. .+
0190: 70 75 74 73 20 22 4c 6f 63 61 6c 20 76 61 72 69  puts "Local vari
01a0: 61 62 6c 65 20 61 63 63 65 73 73 20 6d 69 63 72  able access micr
01b0: 6f 62 65 6e 63 68 6d 61 72 6b 22 0a 2b 6f 62 6a  obenchmark".+obj
01c0: 65 63 74 20 63 72 65 61 74 65 20 76 61 72 41 63  ect create varAc
01d0: 63 65 73 73 0a 2b 6f 62 6a 64 65 66 69 6e 65 20  cess.+objdefine 
01e0: 76 61 72 41 63 63 65 73 73 20 6d 65 74 68 6f 64  varAccess method
01f0: 20 63 6f 75 6e 74 43 6c 61 73 73 69 63 20 7b 7d   countClassic {}
0200: 20 7b 0a 2b 20 20 20 20 76 61 72 69 61 62 6c 65   {.+    variable
0210: 20 63 6f 75 6e 74 0a 2b 20 20 20 20 69 6e 63 72   count.+    incr
0220: 20 63 6f 75 6e 74 0a 2b 7d 0a 2b 63 70 73 20 7b   count.+}.+cps {
0230: 76 61 72 41 63 63 65 73 73 20 63 6f 75 6e 74 43  varAccess countC
0240: 6c 61 73 73 69 63 7d 0a 2b 6f 62 6a 64 65 66 69  lassic}.+objdefi
0250: 6e 65 20 76 61 72 41 63 63 65 73 73 20 6d 65 74  ne varAccess met
0260: 68 6f 64 20 63 6f 75 6e 74 32 35 37 20 7b 7d 20  hod count257 {} 
0270: 7b 0a 2b 20 20 20 20 6d 79 20 76 61 72 69 61 62  {.+    my variab
0280: 6c 65 20 63 6f 75 6e 74 0a 2b 20 20 20 20 69 6e  le count.+    in
0290: 63 72 20 63 6f 75 6e 74 0a 2b 7d 0a 2b 63 70 73  cr count.+}.+cps
02a0: 20 7b 76 61 72 41 63 63 65 73 73 20 63 6f 75 6e   {varAccess coun
02b0: 74 32 35 37 7d 0a 2b 6f 62 6a 64 65 66 69 6e 65  t257}.+objdefine
02c0: 20 76 61 72 41 63 63 65 73 73 20 7b 0a 2b 20 20   varAccess {.+  
02d0: 20 20 76 61 72 69 61 62 6c 65 20 63 6f 75 6e 74    variable count
02e0: 0a 2b 20 20 20 20 6d 65 74 68 6f 64 20 63 6f 75  .+    method cou
02f0: 6e 74 33 32 30 20 7b 7d 20 7b 0a 2b 09 69 6e 63  nt320 {} {.+.inc
0300: 72 20 63 6f 75 6e 74 0a 2b 20 20 20 20 7d 0a 2b  r count.+    }.+
0310: 7d 0a 2b 63 70 73 20 7b 76 61 72 41 63 63 65 73  }.+cps {varAcces
0320: 73 20 63 6f 75 6e 74 33 32 30 7d 0a 2b 76 61 72  s count320}.+var
0330: 41 63 63 65 73 73 20 64 65 73 74 72 6f 79 0a 2b  Access destroy.+
0340: 0a 20 66 6f 6f 20 64 65 73 74 72 6f 79 0a 49 6e  . foo destroy.In
0350: 64 65 78 3a 20 64 6f 63 2f 64 65 66 69 6e 65 2e  dex: doc/define.
0360: 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  n.==============
0370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03a0: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
03b0: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 6f 6f 63  /cvsroot/tcl/ooc
03c0: 6f 72 65 2f 64 6f 63 2f 64 65 66 69 6e 65 2e 6e  ore/doc/define.n
03d0: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65  ,v.retrieving re
03e0: 76 69 73 69 6f 6e 20 31 2e 31 32 0a 64 69 66 66  vision 1.12.diff
03f0: 20 2d 77 20 2d 75 20 2d 72 31 2e 31 32 20 64 65   -w -u -r1.12 de
0400: 66 69 6e 65 2e 6e 0a 2d 2d 2d 20 64 6f 63 2f 64  fine.n.--- doc/d
0410: 65 66 69 6e 65 2e 6e 09 31 36 20 4d 61 79 20 32  efine.n.16 May 2
0420: 30 30 38 20 31 34 3a 32 31 3a 35 38 20 2d 30 30  008 14:21:58 -00
0430: 30 30 09 31 2e 31 32 0a 2b 2b 2b 20 64 6f 63 2f  00.1.12.+++ doc/
0440: 64 65 66 69 6e 65 2e 6e 09 32 38 20 4a 75 6e 20  define.n.28 Jun 
0450: 32 30 30 38 20 32 33 3a 32 33 3a 32 31 20 2d 30  2008 23:23:21 -0
0460: 30 30 30 0a 40 40 20 2d 31 35 37 2c 36 20 2b 31  000.@@ -157,6 +1
0470: 35 37 2c 32 30 20 40 40 0a 20 63 6f 6e 74 65 78  57,20 @@. contex
0480: 74 29 20 62 79 20 74 68 65 20 63 6c 61 73 73 20  t) by the class 
0490: 62 65 69 6e 67 20 64 65 66 69 6e 65 64 2e 20 4e  being defined. N
04a0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 6d 65 74  ote that the met
04b0: 68 6f 64 73 20 74 68 65 6d 73 65 6c 76 65 73 20  hods themselves 
04c0: 6d 61 79 20 62 65 0a 20 61 63 74 75 61 6c 6c 79  may be. actually
04d0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 20 73 75   defined by a su
04e0: 70 65 72 63 6c 61 73 73 3b 20 73 75 62 63 6c 61  perclass; subcla
04f0: 73 73 20 75 6e 65 78 70 6f 72 74 73 20 6f 76 65  ss unexports ove
0500: 72 72 69 64 65 20 73 75 70 65 72 63 6c 61 73 73  rride superclass
0510: 0a 20 76 69 73 69 62 69 6c 69 74 79 2c 20 61 6e  . visibility, an
0520: 64 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64  d may be overrid
0530: 64 65 6e 20 62 79 20 69 6e 73 74 61 6e 63 65 20  den by instance 
0540: 75 6e 65 78 70 6f 72 74 73 2e 0a 2b 2e 54 50 0a  unexports..+.TP.
0550: 2b 5c 66 42 76 61 72 69 61 62 6c 65 5c 66 52 20  +\fBvariable\fR 
0560: 3f 5c 66 49 6e 61 6d 65 20 2e 2e 2e 5c 66 52 3f  ?\fIname ...\fR?
0570: 0a 2b 2e 56 53 0a 2b 54 68 69 73 20 61 72 72 61  .+.VS.+This arra
0580: 6e 67 65 73 20 66 6f 72 20 65 61 63 68 20 6f 66  nges for each of
0590: 20 74 68 65 20 6e 61 6d 65 64 20 76 61 72 69 61   the named varia
05a0: 62 6c 65 73 20 74 6f 20 62 65 20 61 75 74 6f 6d  bles to be autom
05b0: 61 74 69 63 61 6c 6c 79 20 6d 61 64 65 0a 2b 61  atically made.+a
05c0: 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20  vailable in the 
05d0: 6d 65 74 68 6f 64 73 2c 20 63 6f 6e 73 74 72 75  methods, constru
05e0: 63 74 6f 72 20 61 6e 64 20 64 65 73 74 72 75 63  ctor and destruc
05f0: 74 6f 72 20 64 65 63 6c 61 72 65 64 20 62 79 20  tor declared by 
0600: 74 68 65 20 63 6c 61 73 73 0a 2b 62 65 69 6e 67  the class.+being
0610: 20 64 65 66 69 6e 65 64 2e 20 4e 6f 74 65 20 74   defined. Note t
0620: 68 61 74 20 74 68 65 20 6c 69 73 74 20 6f 66 20  hat the list of 
0630: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 69  variable names i
0640: 73 20 74 68 65 20 77 68 6f 6c 65 20 6c 69 73 74  s the whole list
0650: 20 6f 66 0a 2b 76 61 72 69 61 62 6c 65 20 6e 61   of.+variable na
0660: 6d 65 73 20 66 6f 72 20 74 68 65 20 63 6c 61 73  mes for the clas
0670: 73 2e 20 45 61 63 68 20 76 61 72 69 61 62 6c 65  s. Each variable
0680: 20 6e 61 6d 65 20 6d 75 73 74 20 6e 6f 74 20 68   name must not h
0690: 61 76 65 20 61 6e 79 20 6e 61 6d 65 73 70 61 63  ave any namespac
06a0: 65 0a 2b 73 65 70 61 72 61 74 6f 72 73 20 61 6e  e.+separators an
06b0: 64 20 6d 75 73 74 20 6e 6f 74 20 6c 6f 6f 6b 20  d must not look 
06c0: 6c 69 6b 65 20 61 6e 20 61 72 72 61 79 20 61 63  like an array ac
06d0: 63 65 73 73 2e 20 41 6c 6c 20 76 61 72 69 61 62  cess. All variab
06e0: 6c 65 73 20 77 69 6c 6c 20 62 65 0a 2b 61 63 74  les will be.+act
06f0: 75 61 6c 6c 79 20 70 72 65 73 65 6e 74 20 69 6e  ually present in
0700: 20 74 68 65 20 69 6e 73 74 61 6e 63 65 20 6f 62   the instance ob
0710: 6a 65 63 74 20 6f 6e 20 77 68 69 63 68 20 74 68  ject on which th
0720: 65 20 6d 65 74 68 6f 64 20 69 73 20 65 78 65 63  e method is exec
0730: 75 74 65 64 2e 20 4e 6f 74 65 0a 2b 74 68 61 74  uted. Note.+that
0740: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 6c 69   the variable li
0750: 73 74 73 20 64 65 63 6c 61 72 65 64 20 62 79 20  sts declared by 
0760: 61 20 73 75 70 65 72 63 6c 61 73 73 20 6f 72 20  a superclass or 
0770: 73 75 62 63 6c 61 73 73 20 61 72 65 20 63 6f 6d  subclass are com
0780: 70 6c 65 74 65 6c 79 0a 2b 64 69 73 6a 6f 69 6e  pletely.+disjoin
0790: 74 2c 20 61 73 20 61 72 65 20 76 61 72 69 61 62  t, as are variab
07a0: 6c 65 20 6c 69 73 74 73 20 64 65 63 6c 61 72 65  le lists declare
07b0: 64 20 62 79 20 69 6e 73 74 61 6e 63 65 73 3b 20  d by instances; 
07c0: 74 68 65 20 6c 69 73 74 20 6f 66 20 76 61 72 69  the list of vari
07d0: 61 62 6c 65 0a 2b 6e 61 6d 65 73 20 69 73 20 6a  able.+names is j
07e0: 75 73 74 20 66 6f 72 20 6d 65 74 68 6f 64 73 20  ust for methods 
07f0: 28 61 6e 64 20 63 6f 6e 73 74 72 75 63 74 6f 72  (and constructor
0800: 73 20 61 6e 64 20 64 65 73 74 72 75 63 74 6f 72  s and destructor
0810: 73 29 20 64 65 63 6c 61 72 65 64 20 62 79 20 74  s) declared by t
0820: 68 69 73 0a 2b 63 6c 61 73 73 2e 0a 2b 2e 56 45  his.+class..+.VE
0830: 0a 20 2e 53 53 20 22 43 4f 4e 46 49 47 55 52 49  . .SS "CONFIGURI
0840: 4e 47 20 4f 42 4a 45 43 54 53 22 0a 20 2e 50 50  NG OBJECTS". .PP
0850: 0a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
0860: 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 73 75 70  commands are sup
0870: 70 6f 72 74 65 64 20 69 6e 20 74 68 65 20 5c 66  ported in the \f
0880: 49 64 65 66 53 63 72 69 70 74 5c 66 52 20 66 6f  IdefScript\fR fo
0890: 72 0a 40 40 20 2d 32 33 33 2c 36 20 2b 32 34 37  r.@@ -233,6 +247
08a0: 2c 31 38 20 40 40 0a 20 6a 75 73 74 20 74 68 72  ,18 @@. just thr
08b0: 6f 75 67 68 20 74 68 65 20 5c 66 42 6d 79 5c 66  ough the \fBmy\f
08c0: 52 20 63 6f 6d 6d 61 6e 64 20 76 69 73 69 62 6c  R command visibl
08d0: 65 20 69 6e 20 74 68 65 20 6f 62 6a 65 63 74 27  e in the object'
08e0: 73 20 63 6f 6e 74 65 78 74 29 20 62 79 20 74 68  s context) by th
08f0: 65 0a 20 6f 62 6a 65 63 74 20 62 65 69 6e 67 20  e. object being 
0900: 64 65 66 69 6e 65 64 2e 20 4e 6f 74 65 20 74 68  defined. Note th
0910: 61 74 20 74 68 65 20 6d 65 74 68 6f 64 73 20 74  at the methods t
0920: 68 65 6d 73 65 6c 76 65 73 20 6d 61 79 20 62 65  hemselves may be
0930: 20 61 63 74 75 61 6c 6c 79 20 64 65 66 69 6e 65   actually define
0940: 64 0a 20 62 79 20 61 20 63 6c 61 73 73 3b 20 69  d. by a class; i
0950: 6e 73 74 61 6e 63 65 20 75 6e 65 78 70 6f 72 74  nstance unexport
0960: 73 20 6f 76 65 72 72 69 64 65 20 63 6c 61 73 73  s override class
0970: 20 76 69 73 69 62 69 6c 69 74 79 2e 0a 2b 2e 54   visibility..+.T
0980: 50 0a 2b 5c 66 42 76 61 72 69 61 62 6c 65 5c 66  P.+\fBvariable\f
0990: 52 20 3f 5c 66 49 6e 61 6d 65 20 2e 2e 2e 5c 66  R ?\fIname ...\f
09a0: 52 3f 0a 2b 2e 56 53 0a 2b 54 68 69 73 20 61 72  R?.+.VS.+This ar
09b0: 72 61 6e 67 65 73 20 66 6f 72 20 65 61 63 68 20  ranges for each 
09c0: 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 76 61 72  of the named var
09d0: 69 61 62 6c 65 73 20 74 6f 20 62 65 20 61 75 74  iables to be aut
09e0: 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 61 64 65 0a  omatically made.
09f0: 2b 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68  +available in th
0a00: 65 20 6d 65 74 68 6f 64 73 20 64 65 63 6c 61 72  e methods declar
0a10: 65 64 20 62 79 20 74 68 65 20 6f 62 6a 65 63 74  ed by the object
0a20: 20 62 65 69 6e 67 20 64 65 66 69 6e 65 64 2e 20   being defined. 
0a30: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 0a 2b 6c  Note that the.+l
0a40: 69 73 74 20 6f 66 20 76 61 72 69 61 62 6c 65 20  ist of variable 
0a50: 6e 61 6d 65 73 20 69 73 20 74 68 65 20 77 68 6f  names is the who
0a60: 6c 65 20 6c 69 73 74 20 6f 66 20 76 61 72 69 61  le list of varia
0a70: 62 6c 65 20 6e 61 6d 65 73 20 66 6f 72 20 74 68  ble names for th
0a80: 65 20 6f 62 6a 65 63 74 2e 0a 2b 45 61 63 68 20  e object..+Each 
0a90: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 6d 75  variable name mu
0aa0: 73 74 20 6e 6f 74 20 68 61 76 65 20 61 6e 79 20  st not have any 
0ab0: 6e 61 6d 65 73 70 61 63 65 20 73 65 70 61 72 61  namespace separa
0ac0: 74 6f 72 73 20 61 6e 64 20 6d 75 73 74 20 6e 6f  tors and must no
0ad0: 74 20 6c 6f 6f 6b 0a 2b 6c 69 6b 65 20 61 6e 20  t look.+like an 
0ae0: 61 72 72 61 79 20 61 63 63 65 73 73 2e 20 41 6c  array access. Al
0af0: 6c 20 76 61 72 69 61 62 6c 65 73 20 77 69 6c 6c  l variables will
0b00: 20 62 65 20 61 63 74 75 61 6c 6c 79 20 70 72 65   be actually pre
0b10: 73 65 6e 74 20 69 6e 20 74 68 65 20 6f 62 6a 65  sent in the obje
0b20: 63 74 20 6f 6e 0a 2b 77 68 69 63 68 20 74 68 65  ct on.+which the
0b30: 20 6d 65 74 68 6f 64 20 69 73 20 65 78 65 63 75   method is execu
0b40: 74 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  ted. Note that t
0b50: 68 65 20 76 61 72 69 61 62 6c 65 20 6c 69 73 74  he variable list
0b60: 73 20 64 65 63 6c 61 72 65 64 20 62 79 20 74 68  s declared by th
0b70: 65 0a 2b 63 6c 61 73 73 65 73 20 61 6e 64 20 6d  e.+classes and m
0b80: 69 78 69 6e 73 20 6f 66 20 77 68 69 63 68 20 74  ixins of which t
0b90: 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61 6e 20  he object is an 
0ba0: 69 6e 73 74 61 6e 63 65 20 61 72 65 20 63 6f 6d  instance are com
0bb0: 70 6c 65 74 65 6c 79 20 64 69 73 6a 6f 69 6e 74  pletely disjoint
0bc0: 3b 0a 2b 74 68 65 20 6c 69 73 74 20 6f 66 20 76  ;.+the list of v
0bd0: 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 69 73  ariable names is
0be0: 20 6a 75 73 74 20 66 6f 72 20 6d 65 74 68 6f 64   just for method
0bf0: 73 20 64 65 63 6c 61 72 65 64 20 62 79 20 74 68  s declared by th
0c00: 69 73 20 6f 62 6a 65 63 74 2e 0a 2b 2e 56 45 0a  is object..+.VE.
0c10: 20 2e 53 48 20 45 58 41 4d 50 4c 45 53 0a 20 54   .SH EXAMPLES. T
0c20: 68 69 73 20 65 78 61 6d 70 6c 65 20 64 65 6d 6f  his example demo
0c30: 6e 73 74 72 61 74 65 73 20 68 6f 77 20 74 6f 20  nstrates how to 
0c40: 75 73 65 20 62 6f 74 68 20 66 6f 72 6d 73 20 6f  use both forms o
0c50: 66 20 74 68 65 20 5c 66 42 6f 6f 3a 3a 64 65 66  f the \fBoo::def
0c60: 69 6e 65 5c 66 52 20 61 6e 64 0a 20 5c 66 42 6f  ine\fR and. \fBo
0c70: 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 5c 66 52 20  o::objdefine\fR 
0c80: 63 6f 6d 6d 61 6e 64 73 20 28 74 68 65 79 20 77  commands (they w
0c90: 6f 72 6b 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ork in the same 
0ca0: 77 61 79 29 2c 20 61 73 20 77 65 6c 6c 20 61 73  way), as well as
0cb0: 0a 49 6e 64 65 78 3a 20 64 6f 63 2f 6f 6f 49 6e  .Index: doc/ooIn
0cc0: 66 6f 2e 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  fo.n.===========
0cd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0cf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d00: 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c  ========.RCS fil
0d10: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f  e: /cvsroot/tcl/
0d20: 6f 6f 63 6f 72 65 2f 64 6f 63 2f 6f 6f 49 6e 66  oocore/doc/ooInf
0d30: 6f 2e 6e 2c 76 0a 72 65 74 72 69 65 76 69 6e 67  o.n,v.retrieving
0d40: 20 72 65 76 69 73 69 6f 6e 20 31 2e 36 0a 64 69   revision 1.6.di
0d50: 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 36 20 6f  ff -w -u -r1.6 o
0d60: 6f 49 6e 66 6f 2e 6e 0a 2d 2d 2d 20 64 6f 63 2f  oInfo.n.--- doc/
0d70: 6f 6f 49 6e 66 6f 2e 6e 09 32 39 20 4d 61 79 20  ooInfo.n.29 May 
0d80: 32 30 30 38 20 30 39 3a 33 33 3a 31 39 20 2d 30  2008 09:33:19 -0
0d90: 30 30 30 09 31 2e 36 0a 2b 2b 2b 20 64 6f 63 2f  000.1.6.+++ doc/
0da0: 6f 6f 49 6e 66 6f 2e 6e 09 32 38 20 4a 75 6e 20  ooInfo.n.28 Jun 
0db0: 32 30 30 38 20 32 33 3a 32 33 3a 32 31 20 2d 30  2008 23:23:21 -0
0dc0: 30 30 30 0a 40 40 20 2d 31 31 32 2c 36 20 2b 31  000.@@ -112,6 +1
0dd0: 31 32 2c 31 33 20 40 40 0a 20 54 68 69 73 20 73  12,13 @@. This s
0de0: 75 62 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  ubcommand return
0df0: 73 20 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  s a list of all 
0e00: 63 6c 61 73 73 65 73 20 74 68 61 74 20 68 61 76  classes that hav
0e10: 65 20 62 65 65 6e 20 6d 69 78 65 64 20 69 6e 74  e been mixed int
0e20: 6f 20 74 68 65 0a 20 6f 62 6a 65 63 74 20 6e 61  o the. object na
0e30: 6d 65 64 20 5c 66 49 6f 62 6a 65 63 74 5c 66 52  med \fIobject\fR
0e40: 2e 0a 20 2e 54 50 0a 2b 5c 66 42 69 6e 66 6f 20  .. .TP.+\fBinfo 
0e50: 6f 62 6a 65 63 74 20 76 61 72 69 61 62 6c 65 73  object variables
0e60: 5c 66 49 20 6f 62 6a 65 63 74 5c 66 52 0a 2b 2e  \fI object\fR.+.
0e70: 56 53 0a 2b 54 68 69 73 20 73 75 62 63 6f 6d 6d  VS.+This subcomm
0e80: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 6c 69  and returns a li
0e90: 73 74 20 6f 66 20 61 6c 6c 20 76 61 72 69 61 62  st of all variab
0ea0: 6c 65 73 20 74 68 61 74 20 68 61 76 65 20 62 65  les that have be
0eb0: 65 6e 20 64 65 63 6c 61 72 65 64 20 66 6f 72 0a  en declared for.
0ec0: 2b 74 68 65 20 6f 62 6a 65 63 74 20 6e 61 6d 65  +the object name
0ed0: 64 20 5c 66 49 6f 62 6a 65 63 74 5c 66 52 20 28  d \fIobject\fR (
0ee0: 69 2e 65 2e 20 74 68 61 74 20 61 72 65 20 61 75  i.e. that are au
0ef0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 72 65 73  tomatically pres
0f00: 65 6e 74 20 69 6e 20 74 68 65 0a 2b 6f 62 6a 65  ent in the.+obje
0f10: 63 74 27 73 20 6d 65 74 68 6f 64 73 29 2e 0a 2b  ct's methods)..+
0f20: 2e 56 45 0a 2b 2e 54 50 0a 20 5c 66 42 69 6e 66  .VE.+.TP. \fBinf
0f30: 6f 20 6f 62 6a 65 63 74 20 76 61 72 73 5c 66 49  o object vars\fI
0f40: 20 6f 62 6a 65 63 74 5c 66 52 20 3f 5c 66 49 70   object\fR ?\fIp
0f50: 61 74 74 65 72 6e 5c 66 52 3f 0a 20 2e 0a 20 54  attern\fR?. .. T
0f60: 68 69 73 20 73 75 62 63 6f 6d 6d 61 6e 64 20 72  his subcommand r
0f70: 65 74 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66  eturns a list of
0f80: 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 69   all variables i
0f90: 6e 20 74 68 65 20 70 72 69 76 61 74 65 20 6e 61  n the private na
0fa0: 6d 65 73 70 61 63 65 20 6f 66 0a 40 40 20 2d 31  mespace of.@@ -1
0fb0: 39 35 2c 36 20 2b 32 30 32 2c 31 33 20 40 40 0a  95,6 +202,13 @@.
0fc0: 20 2e 0a 20 54 68 69 73 20 73 75 62 63 6f 6d 6d   .. This subcomm
0fd0: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 6c 69  and returns a li
0fe0: 73 74 20 6f 66 20 64 69 72 65 63 74 20 73 75 70  st of direct sup
0ff0: 65 72 63 6c 61 73 73 65 73 20 6f 66 20 63 6c 61  erclasses of cla
1000: 73 73 20 5c 66 49 63 6c 61 73 73 5c 66 52 20 69  ss \fIclass\fR i
1010: 6e 0a 20 69 6e 68 65 72 69 74 61 6e 63 65 20 70  n. inheritance p
1020: 72 65 63 65 64 65 6e 63 65 20 6f 72 64 65 72 2e  recedence order.
1030: 0a 2b 2e 54 50 0a 2b 5c 66 42 69 6e 66 6f 20 63  .+.TP.+\fBinfo c
1040: 6c 61 73 73 20 76 61 72 69 61 62 6c 65 73 5c 66  lass variables\f
1050: 49 20 63 6c 61 73 73 5c 66 52 0a 2b 2e 56 53 0a  I class\fR.+.VS.
1060: 2b 54 68 69 73 20 73 75 62 63 6f 6d 6d 61 6e 64  +This subcommand
1070: 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73 74 20   returns a list 
1080: 6f 66 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 73  of all variables
1090: 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
10a0: 64 65 63 6c 61 72 65 64 20 66 6f 72 0a 2b 74 68  declared for.+th
10b0: 65 20 63 6c 61 73 73 20 6e 61 6d 65 64 20 5c 49  e class named \I
10c0: 63 6c 61 73 73 5c 66 52 20 28 69 2e 65 2e 20 74  class\fR (i.e. t
10d0: 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69  hat are automati
10e0: 63 61 6c 6c 79 20 70 72 65 73 65 6e 74 20 69 6e  cally present in
10f0: 20 74 68 65 0a 2b 63 6c 61 73 73 27 73 20 6d 65   the.+class's me
1100: 74 68 6f 64 73 2c 20 63 6f 6e 73 74 72 75 63 74  thods, construct
1110: 6f 72 20 61 6e 64 20 64 65 73 74 72 75 63 74 6f  or and destructo
1120: 72 29 2e 0a 2b 2e 56 45 0a 20 2e 53 48 20 22 46  r)..+.VE. .SH "F
1130: 55 54 55 52 45 20 43 48 41 4e 47 45 53 22 0a 20  UTURE CHANGES". 
1140: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 73 65 20  Note that these 
1150: 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 6c 69 6b  commands are lik
1160: 65 6c 79 20 74 6f 20 62 65 20 72 65 6e 61 6d 65  ely to be rename
1170: 64 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 2e  d in the future.
1180: 0a 20 2e 53 48 20 45 58 41 4d 50 4c 45 53 0a 40  . .SH EXAMPLES.@
1190: 40 20 2d 32 33 31 2c 37 20 2b 32 34 35 2c 37 20  @ -231,7 +245,7 
11a0: 40 40 0a 20 7d 0a 20 2e 43 45 0a 20 2e 53 48 20  @@. }. .CE. .SH 
11b0: 22 53 45 45 20 41 4c 53 4f 22 0a 2d 6f 6f 3a 3a  "SEE ALSO".-oo::
11c0: 63 6c 61 73 73 28 6e 29 2c 20 6f 6f 3a 3a 6f 62  class(n), oo::ob
11d0: 6a 65 63 74 28 6e 29 2c 20 73 65 6c 66 28 6e 29  ject(n), self(n)
11e0: 0a 2b 6f 6f 3a 3a 63 6c 61 73 73 28 6e 29 2c 20  .+oo::class(n), 
11f0: 6f 6f 3a 3a 64 65 66 69 6e 65 28 6e 29 2c 20 6f  oo::define(n), o
1200: 6f 3a 3a 6f 62 6a 65 63 74 28 6e 29 2c 20 73 65  o::object(n), se
1210: 6c 66 28 6e 29 0a 20 2e 53 48 20 4b 45 59 57 4f  lf(n). .SH KEYWO
1220: 52 44 53 0a 20 69 6e 74 72 6f 73 70 65 63 74 69  RDS. introspecti
1230: 6f 6e 2c 20 6f 62 6a 65 63 74 0a 20 0a 49 6e 64  on, object. .Ind
1240: 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f  ex: generic/tclO
1250: 4f 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  O.c.============
1260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1290: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65  =======.RCS file
12a0: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 6f  : /cvsroot/tcl/o
12b0: 6f 63 6f 72 65 2f 67 65 6e 65 72 69 63 2f 74 63  ocore/generic/tc
12c0: 6c 4f 4f 2e 63 2c 76 0a 72 65 74 72 69 65 76 69  lOO.c,v.retrievi
12d0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 35 38  ng revision 1.58
12e0: 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e  .diff -w -u -r1.
12f0: 35 38 20 74 63 6c 4f 4f 2e 63 0a 2d 2d 2d 20 67  58 tclOO.c.--- g
1300: 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 2e 63 09 32  eneric/tclOO.c.2
1310: 36 20 4a 75 6e 20 32 30 30 38 20 31 34 3a 35 34  6 Jun 2008 14:54
1320: 3a 32 35 20 2d 30 30 30 30 09 31 2e 35 38 0a 2b  :25 -0000.1.58.+
1330: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f  ++ generic/tclOO
1340: 2e 63 09 32 38 20 4a 75 6e 20 32 30 30 38 20 32  .c.28 Jun 2008 2
1350: 33 3a 32 33 3a 32 34 20 2d 30 30 30 30 0a 40 40  3:23:24 -0000.@@
1360: 20 2d 33 38 2c 36 20 2b 33 38 2c 37 20 40 40 0a   -38,6 +38,7 @@.
1370: 20 20 20 20 20 7b 22 73 65 6c 66 22 2c 20 54 63       {"self", Tc
1380: 6c 4f 4f 44 65 66 69 6e 65 53 65 6c 66 4f 62 6a  lOODefineSelfObj
1390: 43 6d 64 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 22  Cmd, 0},.     {"
13a0: 73 75 70 65 72 63 6c 61 73 73 22 2c 20 54 63 6c  superclass", Tcl
13b0: 4f 4f 44 65 66 69 6e 65 53 75 70 65 72 63 6c 61  OODefineSupercla
13c0: 73 73 4f 62 6a 43 6d 64 2c 20 30 7d 2c 0a 20 20  ssObjCmd, 0},.  
13d0: 20 20 20 7b 22 75 6e 65 78 70 6f 72 74 22 2c 20     {"unexport", 
13e0: 54 63 6c 4f 4f 44 65 66 69 6e 65 55 6e 65 78 70  TclOODefineUnexp
13f0: 6f 72 74 4f 62 6a 43 6d 64 2c 20 30 7d 2c 0a 2b  ortObjCmd, 0},.+
1400: 20 20 20 20 7b 22 76 61 72 69 61 62 6c 65 22 2c      {"variable",
1410: 20 54 63 6c 4f 4f 44 65 66 69 6e 65 56 61 72 69   TclOODefineVari
1420: 61 62 6c 65 73 4f 62 6a 43 6d 64 2c 20 30 7d 2c  ablesObjCmd, 0},
1430: 0a 20 20 20 20 20 7b 4e 55 4c 4c 2c 20 4e 55 4c  .     {NULL, NUL
1440: 4c 2c 20 30 7d 0a 20 7d 2c 20 6f 62 6a 64 65 66  L, 0}. }, objdef
1450: 43 6d 64 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Cmds[] = {.     
1460: 7b 22 63 6c 61 73 73 22 2c 20 54 63 6c 4f 4f 44  {"class", TclOOD
1470: 65 66 69 6e 65 43 6c 61 73 73 4f 62 6a 43 6d 64  efineClassObjCmd
1480: 2c 20 31 7d 2c 0a 40 40 20 2d 34 39 2c 36 20 2b  , 1},.@@ -49,6 +
1490: 35 30 2c 37 20 40 40 0a 20 20 20 20 20 7b 22 6d  50,7 @@.     {"m
14a0: 69 78 69 6e 22 2c 20 54 63 6c 4f 4f 44 65 66 69  ixin", TclOODefi
14b0: 6e 65 4d 69 78 69 6e 4f 62 6a 43 6d 64 2c 20 31  neMixinObjCmd, 1
14c0: 7d 2c 0a 20 20 20 20 20 7b 22 72 65 6e 61 6d 65  },.     {"rename
14d0: 6d 65 74 68 6f 64 22 2c 20 54 63 6c 4f 4f 44 65  method", TclOODe
14e0: 66 69 6e 65 52 65 6e 61 6d 65 4d 65 74 68 6f 64  fineRenameMethod
14f0: 4f 62 6a 43 6d 64 2c 20 31 7d 2c 0a 20 20 20 20  ObjCmd, 1},.    
1500: 20 7b 22 75 6e 65 78 70 6f 72 74 22 2c 20 54 63   {"unexport", Tc
1510: 6c 4f 4f 44 65 66 69 6e 65 55 6e 65 78 70 6f 72  lOODefineUnexpor
1520: 74 4f 62 6a 43 6d 64 2c 20 31 7d 2c 0a 2b 20 20  tObjCmd, 1},.+  
1530: 20 20 7b 22 76 61 72 69 61 62 6c 65 22 2c 20 54    {"variable", T
1540: 63 6c 4f 4f 44 65 66 69 6e 65 56 61 72 69 61 62  clOODefineVariab
1550: 6c 65 73 4f 62 6a 43 6d 64 2c 20 31 7d 2c 0a 20  lesObjCmd, 1},. 
1560: 20 20 20 20 7b 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c      {NULL, NULL,
1570: 20 30 7d 0a 20 7d 3b 0a 20 0a 40 40 20 2d 34 35   0}. };. .@@ -45
1580: 39 2c 36 20 2b 34 36 31 2c 37 20 40 40 0a 20 0a  9,6 +461,7 @@. .
1590: 20 20 20 63 6f 6e 66 69 67 4e 61 6d 65 73 70 61     configNamespa
15a0: 63 65 3a 0a 20 20 20 20 20 54 63 6c 53 65 74 4e  ce:.     TclSetN
15b0: 73 50 61 74 68 28 28 4e 61 6d 65 73 70 61 63 65  sPath((Namespace
15c0: 20 2a 29 20 6f 50 74 72 2d 3e 6e 61 6d 65 73 70   *) oPtr->namesp
15d0: 61 63 65 50 74 72 2c 20 31 2c 20 26 66 50 74 72  acePtr, 1, &fPtr
15e0: 2d 3e 68 65 6c 70 65 72 73 4e 73 29 3b 0a 2b 20  ->helpersNs);.+ 
15f0: 20 20 20 54 63 6c 4f 4f 53 65 74 75 70 56 61 72     TclOOSetupVar
1600: 69 61 62 6c 65 52 65 73 6f 6c 76 65 72 28 6f 50  iableResolver(oP
1610: 74 72 2d 3e 6e 61 6d 65 73 70 61 63 65 50 74 72  tr->namespacePtr
1620: 29 3b 0a 20 0a 20 20 20 20 20 2f 2a 0a 20 20 20  );. .     /*.   
1630: 20 20 20 2a 20 46 69 6c 6c 20 69 6e 20 74 68 65     * Fill in the
1640: 20 72 65 73 74 20 6f 66 20 74 68 65 20 6e 6f 6e   rest of the non
1650: 2d 7a 65 72 6f 2f 4e 55 4c 4c 20 70 61 72 74 73  -zero/NULL parts
1660: 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
1670: 65 2e 0a 40 40 20 2d 37 37 35 2c 37 20 2b 37 37  e..@@ -775,7 +77
1680: 38 2c 37 20 40 40 0a 20 20 20 20 20 46 4f 52 45  8,7 @@.     FORE
1690: 41 43 48 5f 48 41 53 48 5f 44 45 43 4c 53 3b 0a  ACH_HASH_DECLS;.
16a0: 20 20 20 20 20 43 6c 61 73 73 20 2a 63 6c 73 50       Class *clsP
16b0: 74 72 20 3d 20 6f 50 74 72 2d 3e 63 6c 61 73 73  tr = oPtr->class
16c0: 50 74 72 2c 20 2a 6d 69 78 69 6e 50 74 72 3b 0a  Ptr, *mixinPtr;.
16d0: 20 20 20 20 20 4d 65 74 68 6f 64 20 2a 6d 50 74       Method *mPt
16e0: 72 3b 0a 2d 20 20 20 20 54 63 6c 5f 4f 62 6a 20  r;.-    Tcl_Obj 
16f0: 2a 66 69 6c 74 65 72 4f 62 6a 3b 0a 2b 20 20 20  *filterObj;.+   
1700: 20 54 63 6c 5f 4f 62 6a 20 2a 66 69 6c 74 65 72   Tcl_Obj *filter
1710: 4f 62 6a 2c 20 2a 76 61 72 69 61 62 6c 65 4f 62  Obj, *variableOb
1720: 6a 3b 0a 20 20 20 20 20 69 6e 74 20 69 2c 20 70  j;.     int i, p
1730: 72 65 73 65 72 76 65 64 20 3d 20 21 28 6f 50 74  reserved = !(oPt
1740: 72 2d 3e 66 6c 61 67 73 20 26 20 4f 42 4a 45 43  r->flags & OBJEC
1750: 54 5f 44 45 4c 45 54 45 44 29 3b 0a 20 0a 20 20  T_DELETED);. .  
1760: 20 20 20 2f 2a 0a 40 40 20 2d 38 32 32 2c 36 20     /*.@@ -822,6 
1770: 2b 38 32 35 2c 31 33 20 40 40 0a 20 09 63 6b 66  +825,13 @@. .ckf
1780: 72 65 65 28 28 63 68 61 72 20 2a 29 20 6f 50 74  ree((char *) oPt
1790: 72 2d 3e 6d 65 74 68 6f 64 73 50 74 72 29 3b 0a  r->methodsPtr);.
17a0: 20 20 20 20 20 7d 0a 20 0a 2b 20 20 20 20 46 4f       }. .+    FO
17b0: 52 45 41 43 48 28 76 61 72 69 61 62 6c 65 4f 62  REACH(variableOb
17c0: 6a 2c 20 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c  j, oPtr->variabl
17d0: 65 73 29 20 7b 0a 2b 09 54 63 6c 5f 44 65 63 72  es) {.+.Tcl_Decr
17e0: 52 65 66 43 6f 75 6e 74 28 76 61 72 69 61 62 6c  RefCount(variabl
17f0: 65 4f 62 6a 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20  eObj);.+    }.+ 
1800: 20 20 20 69 66 20 28 69 29 20 7b 0a 2b 09 63 6b     if (i) {.+.ck
1810: 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 6f 50  free((char *) oP
1820: 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c 69  tr->variables.li
1830: 73 74 29 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 20 20  st);.+    }.+.  
1840: 20 20 20 69 66 20 28 6f 50 74 72 2d 3e 63 68 61     if (oPtr->cha
1850: 69 6e 43 61 63 68 65 29 20 7b 0a 20 09 54 63 6c  inCache) {. .Tcl
1860: 4f 4f 44 65 6c 65 74 65 43 68 61 69 6e 43 61 63  OODeleteChainCac
1870: 68 65 28 6f 50 74 72 2d 3e 63 68 61 69 6e 43 61  he(oPtr->chainCa
1880: 63 68 65 29 3b 0a 20 20 20 20 20 7d 0a 40 40 20  che);.     }.@@ 
1890: 2d 39 30 30 2c 36 20 2b 39 31 30 2c 31 34 20 40  -900,6 +910,14 @
18a0: 40 0a 20 09 54 63 6c 5f 44 65 6c 65 74 65 48 61  @. .Tcl_DeleteHa
18b0: 73 68 54 61 62 6c 65 28 26 63 6c 73 50 74 72 2d  shTable(&clsPtr-
18c0: 3e 63 6c 61 73 73 4d 65 74 68 6f 64 73 29 3b 0a  >classMethods);.
18d0: 20 09 54 63 6c 4f 4f 44 65 6c 4d 65 74 68 6f 64   .TclOODelMethod
18e0: 52 65 66 28 63 6c 73 50 74 72 2d 3e 63 6f 6e 73  Ref(clsPtr->cons
18f0: 74 72 75 63 74 6f 72 50 74 72 29 3b 0a 20 09 54  tructorPtr);. .T
1900: 63 6c 4f 4f 44 65 6c 4d 65 74 68 6f 64 52 65 66  clOODelMethodRef
1910: 28 63 6c 73 50 74 72 2d 3e 64 65 73 74 72 75 63  (clsPtr->destruc
1920: 74 6f 72 50 74 72 29 3b 0a 2b 0a 2b 09 46 4f 52  torPtr);.+.+.FOR
1930: 45 41 43 48 28 76 61 72 69 61 62 6c 65 4f 62 6a  EACH(variableObj
1940: 2c 20 63 6c 73 50 74 72 2d 3e 76 61 72 69 61 62  , clsPtr->variab
1950: 6c 65 73 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c  les) {.+.    Tcl
1960: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 76 61  _DecrRefCount(va
1970: 72 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b 09 7d 0a  riableObj);.+.}.
1980: 2b 09 69 66 20 28 69 29 20 7b 0a 2b 09 20 20 20  +.if (i) {.+.   
1990: 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29   ckfree((char *)
19a0: 20 63 6c 73 50 74 72 2d 3e 76 61 72 69 61 62 6c   clsPtr->variabl
19b0: 65 73 2e 6c 69 73 74 29 3b 0a 2b 09 7d 0a 2b 0a  es.list);.+.}.+.
19c0: 20 09 44 65 6c 52 65 66 28 63 6c 73 50 74 72 29   .DelRef(clsPtr)
19d0: 3b 0a 20 20 20 20 20 7d 0a 20 0a 49 6e 64 65 78  ;.     }. .Index
19e0: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 44  : generic/tclOOD
19f0: 65 66 69 6e 65 43 6d 64 73 2e 63 0a 3d 3d 3d 3d  efineCmds.c.====
1a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1a30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
1a40: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f  RCS file: /cvsro
1a50: 6f 74 2f 74 63 6c 2f 6f 6f 63 6f 72 65 2f 67 65  ot/tcl/oocore/ge
1a60: 6e 65 72 69 63 2f 74 63 6c 4f 4f 44 65 66 69 6e  neric/tclOODefin
1a70: 65 43 6d 64 73 2e 63 2c 76 0a 72 65 74 72 69 65  eCmds.c,v.retrie
1a80: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e  ving revision 1.
1a90: 31 38 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72  18.diff -w -u -r
1aa0: 31 2e 31 38 20 74 63 6c 4f 4f 44 65 66 69 6e 65  1.18 tclOODefine
1ab0: 43 6d 64 73 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72  Cmds.c.--- gener
1ac0: 69 63 2f 74 63 6c 4f 4f 44 65 66 69 6e 65 43 6d  ic/tclOODefineCm
1ad0: 64 73 2e 63 09 32 35 20 4d 61 79 20 32 30 30 38  ds.c.25 May 2008
1ae0: 20 31 31 3a 32 39 3a 33 39 20 2d 30 30 30 30 09   11:29:39 -0000.
1af0: 31 2e 31 38 0a 2b 2b 2b 20 67 65 6e 65 72 69 63  1.18.+++ generic
1b00: 2f 74 63 6c 4f 4f 44 65 66 69 6e 65 43 6d 64 73  /tclOODefineCmds
1b10: 2e 63 09 32 38 20 4a 75 6e 20 32 30 30 38 20 32  .c.28 Jun 2008 2
1b20: 33 3a 32 33 3a 32 34 20 2d 30 30 30 30 0a 40 40  3:23:24 -0000.@@
1b30: 20 2d 31 37 39 32 2c 36 20 2b 31 37 39 32 2c 31   -1792,6 +1792,1
1b40: 30 30 20 40 40 0a 20 20 20 20 20 72 65 74 75 72  00 @@.     retur
1b50: 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 7d 0a 20 0c 0a  n TCL_OK;. }. ..
1b60: 2b 2f 2a 0a 2b 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  +/*.+ * --------
1b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b  --------------.+
1bb0: 20 2a 0a 2b 20 2a 20 54 63 6c 4f 4f 44 65 66 69   *.+ * TclOODefi
1bc0: 6e 65 56 61 72 69 61 62 6c 65 73 4f 62 6a 43 6d  neVariablesObjCm
1bd0: 64 20 2d 2d 0a 2b 20 2a 09 49 6d 70 6c 65 6d 65  d --.+ *.Impleme
1be0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 22  ntation of the "
1bf0: 76 61 72 69 61 62 6c 65 22 20 73 75 62 63 6f 6d  variable" subcom
1c00: 6d 61 6e 64 20 6f 66 20 74 68 65 20 22 6f 6f 3a  mand of the "oo:
1c10: 3a 64 65 66 69 6e 65 22 20 61 6e 64 0a 2b 20 2a  :define" and.+ *
1c20: 09 22 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 22  ."oo::objdefine"
1c30: 20 63 6f 6d 6d 61 6e 64 73 2e 0a 2b 20 2a 0a 2b   commands..+ *.+
1c40: 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   * -------------
1c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b  ---------.+ */.+
1c90: 0a 2b 69 6e 74 0a 2b 54 63 6c 4f 4f 44 65 66 69  .+int.+TclOODefi
1ca0: 6e 65 56 61 72 69 61 62 6c 65 73 4f 62 6a 43 6d  neVariablesObjCm
1cb0: 64 28 0a 2b 20 20 20 20 43 6c 69 65 6e 74 44 61  d(.+    ClientDa
1cc0: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b  ta clientData,.+
1cd0: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a      Tcl_Interp *
1ce0: 69 6e 74 65 72 70 2c 0a 2b 20 20 20 20 69 6e 74  interp,.+    int
1cf0: 20 6f 62 6a 63 2c 0a 2b 20 20 20 20 54 63 6c 5f   objc,.+    Tcl_
1d00: 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76  Obj *const *objv
1d10: 29 0a 2b 7b 0a 2b 20 20 20 20 69 6e 74 20 69 73  ).+{.+    int is
1d20: 49 6e 73 74 61 6e 63 65 56 61 72 73 20 3d 20 28  InstanceVars = (
1d30: 63 6c 69 65 6e 74 44 61 74 61 20 21 3d 20 4e 55  clientData != NU
1d40: 4c 4c 29 3b 0a 2b 20 20 20 20 4f 62 6a 65 63 74  LL);.+    Object
1d50: 20 2a 6f 50 74 72 20 3d 20 28 4f 62 6a 65 63 74   *oPtr = (Object
1d60: 20 2a 29 20 54 63 6c 4f 4f 47 65 74 44 65 66 69   *) TclOOGetDefi
1d70: 6e 65 43 6d 64 43 6f 6e 74 65 78 74 28 69 6e 74  neCmdContext(int
1d80: 65 72 70 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f  erp);.+    Tcl_O
1d90: 62 6a 20 2a 76 61 72 69 61 62 6c 65 4f 62 6a 3b  bj *variableObj;
1da0: 0a 2b 20 20 20 20 69 6e 74 20 69 3b 0a 2b 0a 2b  .+    int i;.+.+
1db0: 20 20 20 20 69 66 20 28 6f 50 74 72 20 3d 3d 20      if (oPtr == 
1dc0: 4e 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e  NULL) {.+.return
1dd0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20   TCL_ERROR;.+   
1de0: 20 7d 0a 2b 20 20 20 20 69 66 20 28 21 69 73 49   }.+    if (!isI
1df0: 6e 73 74 61 6e 63 65 56 61 72 73 20 26 26 20 21  nstanceVars && !
1e00: 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72 29 20  oPtr->classPtr) 
1e10: 7b 0a 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 65  {.+.Tcl_AppendRe
1e20: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61 74  sult(interp, "at
1e30: 74 65 6d 70 74 20 74 6f 20 6d 69 73 75 73 65 20  tempt to misuse 
1e40: 41 50 49 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 72  API", NULL);.+.r
1e50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1e60: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 66  .+    }.+.+    f
1e70: 6f 72 20 28 69 3d 31 20 3b 20 69 3c 6f 62 6a 63  or (i=1 ; i<objc
1e80: 20 3b 20 69 2b 2b 29 20 7b 0a 2b 09 63 6f 6e 73   ; i++) {.+.cons
1e90: 74 20 63 68 61 72 20 2a 76 61 72 4e 61 6d 65 20  t char *varName 
1ea0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
1eb0: 6f 62 6a 76 5b 69 5d 29 3b 0a 2b 0a 2b 09 69 66  objv[i]);.+.+.if
1ec0: 20 28 73 74 72 73 74 72 28 76 61 72 4e 61 6d 65   (strstr(varName
1ed0: 2c 20 22 3a 3a 22 29 20 21 3d 20 4e 55 4c 4c 29  , "::") != NULL)
1ee0: 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 41 70 70   {.+.    Tcl_App
1ef0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1f00: 2c 20 22 69 6e 76 61 6c 69 64 20 64 65 63 6c 61  , "invalid decla
1f10: 72 65 64 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  red variable nam
1f20: 65 20 5c 22 22 2c 0a 2b 09 09 20 20 20 20 76 61  e \"",.+..    va
1f30: 72 4e 61 6d 65 2c 20 22 5c 22 3a 20 6d 75 73 74  rName, "\": must
1f40: 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 6e 61 6d   not contain nam
1f50: 65 73 70 61 63 65 20 73 65 70 61 72 61 74 6f 72  espace separator
1f60: 73 22 2c 0a 2b 09 09 20 20 20 20 4e 55 4c 4c 29  s",.+..    NULL)
1f70: 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54  ;.+.    return T
1f80: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b 09  CL_ERROR;.+.}.+.
1f90: 69 66 20 28 54 63 6c 5f 53 74 72 69 6e 67 4d 61  if (Tcl_StringMa
1fa0: 74 63 68 28 76 61 72 4e 61 6d 65 2c 20 22 2a 28  tch(varName, "*(
1fb0: 2a 29 22 29 29 20 7b 0a 2b 09 20 20 20 20 54 63  *)")) {.+.    Tc
1fc0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1fd0: 6e 74 65 72 70 2c 20 22 69 6e 76 61 6c 69 64 20  nterp, "invalid 
1fe0: 64 65 63 6c 61 72 65 64 20 76 61 72 69 61 62 6c  declared variabl
1ff0: 65 20 6e 61 6d 65 20 5c 22 22 2c 0a 2b 09 09 20  e name \"",.+.. 
2000: 20 20 20 76 61 72 4e 61 6d 65 2c 20 22 5c 22 3a     varName, "\":
2010: 20 6d 75 73 74 20 6e 6f 74 20 72 65 66 65 72 20   must not refer 
2020: 74 6f 20 61 6e 20 61 72 72 61 79 20 65 6c 65 6d  to an array elem
2030: 65 6e 74 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 20  ent", NULL);.+. 
2040: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
2050: 52 4f 52 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a  ROR;.+.}.+    }.
2060: 2b 20 20 20 20 66 6f 72 20 28 69 3d 31 20 3b 20  +    for (i=1 ; 
2070: 69 3c 6f 62 6a 63 20 3b 20 69 2b 2b 29 20 7b 0a  i<objc ; i++) {.
2080: 2b 09 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75  +.Tcl_IncrRefCou
2090: 6e 74 28 6f 62 6a 76 5b 69 5d 29 3b 0a 2b 20 20  nt(objv[i]);.+  
20a0: 20 20 7d 0a 2b 0a 2b 20 20 20 20 69 66 20 28 21    }.+.+    if (!
20b0: 69 73 49 6e 73 74 61 6e 63 65 56 61 72 73 29 20  isInstanceVars) 
20c0: 7b 0a 2b 09 46 4f 52 45 41 43 48 28 76 61 72 69  {.+.FOREACH(vari
20d0: 61 62 6c 65 4f 62 6a 2c 20 6f 50 74 72 2d 3e 63  ableObj, oPtr->c
20e0: 6c 61 73 73 50 74 72 2d 3e 76 61 72 69 61 62 6c  lassPtr->variabl
20f0: 65 73 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f  es) {.+.    Tcl_
2100: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 76 61 72  DecrRefCount(var
2110: 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b 09 7d 0a 2b  iableObj);.+.}.+
2120: 09 69 66 20 28 69 20 21 3d 20 6f 62 6a 63 2d 31  .if (i != objc-1
2130: 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 6f 62  ) {.+.    if (ob
2140: 6a 63 20 3d 3d 20 31 29 20 7b 0a 2b 09 09 63 6b  jc == 1) {.+..ck
2150: 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 6f 50  free((char *) oP
2160: 74 72 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 76 61  tr->classPtr->va
2170: 72 69 61 62 6c 65 73 2e 6c 69 73 74 29 3b 0a 2b  riables.list);.+
2180: 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
2190: 69 29 20 7b 0a 2b 09 09 6f 50 74 72 2d 3e 63 6c  i) {.+..oPtr->cl
21a0: 61 73 73 50 74 72 2d 3e 76 61 72 69 61 62 6c 65  assPtr->variable
21b0: 73 2e 6c 69 73 74 20 3d 20 28 54 63 6c 5f 4f 62  s.list = (Tcl_Ob
21c0: 6a 20 2a 2a 29 0a 2b 09 09 09 63 6b 72 65 61 6c  j **).+...ckreal
21d0: 6c 6f 63 28 28 63 68 61 72 20 2a 29 20 6f 50 74  loc((char *) oPt
21e0: 72 2d 3e 63 6c 61 73 73 50 74 72 2d 3e 76 61 72  r->classPtr->var
21f0: 69 61 62 6c 65 73 2e 6c 69 73 74 2c 0a 2b 09 09  iables.list,.+..
2200: 09 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20  .sizeof(Tcl_Obj 
2210: 2a 29 20 2a 20 28 6f 62 6a 63 2d 31 29 29 3b 0a  *) * (objc-1));.
2220: 2b 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b  +.    } else {.+
2230: 09 09 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74 72  ..oPtr->classPtr
2240: 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c 69 73 74  ->variables.list
2250: 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a 2a 29 0a   = (Tcl_Obj **).
2260: 2b 09 09 09 63 6b 61 6c 6c 6f 63 28 73 69 7a 65  +...ckalloc(size
2270: 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20  of(Tcl_Obj *) * 
2280: 28 6f 62 6a 63 2d 31 29 29 3b 0a 2b 09 20 20 20  (objc-1));.+.   
2290: 20 7d 0a 2b 09 7d 0a 2b 09 69 66 20 28 6f 62 6a   }.+.}.+.if (obj
22a0: 63 20 3e 20 31 29 20 7b 0a 2b 09 20 20 20 20 6d  c > 1) {.+.    m
22b0: 65 6d 63 70 79 28 6f 50 74 72 2d 3e 63 6c 61 73  emcpy(oPtr->clas
22c0: 73 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e  sPtr->variables.
22d0: 6c 69 73 74 2c 20 6f 62 6a 76 2b 31 2c 0a 2b 09  list, objv+1,.+.
22e0: 09 20 20 20 20 73 69 7a 65 6f 66 28 54 63 6c 5f  .    sizeof(Tcl_
22f0: 4f 62 6a 20 2a 29 20 2a 20 28 6f 62 6a 63 2d 31  Obj *) * (objc-1
2300: 29 29 3b 0a 2b 09 7d 0a 2b 09 6f 50 74 72 2d 3e  ));.+.}.+.oPtr->
2310: 63 6c 61 73 73 50 74 72 2d 3e 76 61 72 69 61 62  classPtr->variab
2320: 6c 65 73 2e 6e 75 6d 20 3d 20 6f 62 6a 63 2d 31  les.num = objc-1
2330: 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ;.+    } else {.
2340: 2b 09 46 4f 52 45 41 43 48 28 76 61 72 69 61 62  +.FOREACH(variab
2350: 6c 65 4f 62 6a 2c 20 6f 50 74 72 2d 3e 76 61 72  leObj, oPtr->var
2360: 69 61 62 6c 65 73 29 20 7b 0a 2b 09 20 20 20 20  iables) {.+.    
2370: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
2380: 28 76 61 72 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b  (variableObj);.+
2390: 09 7d 0a 2b 09 69 66 20 28 69 20 21 3d 20 6f 62  .}.+.if (i != ob
23a0: 6a 63 2d 31 29 20 7b 0a 2b 09 20 20 20 20 69 66  jc-1) {.+.    if
23b0: 20 28 6f 62 6a 63 20 3d 3d 20 31 29 20 7b 0a 2b   (objc == 1) {.+
23c0: 09 09 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a  ..ckfree((char *
23d0: 29 20 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c 65  ) oPtr->variable
23e0: 73 2e 6c 69 73 74 29 3b 0a 2b 09 20 20 20 20 7d  s.list);.+.    }
23f0: 20 65 6c 73 65 20 69 66 20 28 69 29 20 7b 0a 2b   else if (i) {.+
2400: 09 09 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c 65  ..oPtr->variable
2410: 73 2e 6c 69 73 74 20 3d 20 28 54 63 6c 5f 4f 62  s.list = (Tcl_Ob
2420: 6a 20 2a 2a 29 0a 2b 09 09 09 63 6b 72 65 61 6c  j **).+...ckreal
2430: 6c 6f 63 28 28 63 68 61 72 20 2a 29 20 6f 50 74  loc((char *) oPt
2440: 72 2d 3e 76 61 72 69 61 62 6c 65 73 2e 6c 69 73  r->variables.lis
2450: 74 2c 0a 2b 09 09 09 73 69 7a 65 6f 66 28 54 63  t,.+...sizeof(Tc
2460: 6c 5f 4f 62 6a 20 2a 29 20 2a 20 28 6f 62 6a 63  l_Obj *) * (objc
2470: 2d 31 29 29 3b 0a 2b 09 20 20 20 20 7d 20 65 6c  -1));.+.    } el
2480: 73 65 20 7b 0a 2b 09 09 6f 50 74 72 2d 3e 76 61  se {.+..oPtr->va
2490: 72 69 61 62 6c 65 73 2e 6c 69 73 74 20 3d 20 28  riables.list = (
24a0: 54 63 6c 5f 4f 62 6a 20 2a 2a 29 0a 2b 09 09 09  Tcl_Obj **).+...
24b0: 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 54  ckalloc(sizeof(T
24c0: 63 6c 5f 4f 62 6a 20 2a 29 20 2a 20 28 6f 62 6a  cl_Obj *) * (obj
24d0: 63 2d 31 29 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b  c-1));.+.    }.+
24e0: 09 7d 0a 2b 09 69 66 20 28 6f 62 6a 63 20 3e 20  .}.+.if (objc > 
24f0: 31 29 20 7b 0a 2b 09 20 20 20 20 6d 65 6d 63 70  1) {.+.    memcp
2500: 79 28 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c 65  y(oPtr->variable
2510: 73 2e 6c 69 73 74 2c 20 6f 62 6a 76 2b 31 2c 20  s.list, objv+1, 
2520: 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a  sizeof(Tcl_Obj *
2530: 29 2a 28 6f 62 6a 63 2d 31 29 29 3b 0a 2b 09 7d  )*(objc-1));.+.}
2540: 0a 2b 09 6f 50 74 72 2d 3e 76 61 72 69 61 62 6c  .+.oPtr->variabl
2550: 65 73 2e 6e 75 6d 20 3d 20 6f 62 6a 63 2d 31 3b  es.num = objc-1;
2560: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 72 65 74  .+    }.+    ret
2570: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b  urn TCL_OK;.+}.+
2580: 0c 0a 20 76 6f 69 64 0a 20 54 63 6c 5f 43 6c 61  .. void. Tcl_Cla
2590: 73 73 53 65 74 43 6f 6e 73 74 72 75 63 74 6f 72  ssSetConstructor
25a0: 28 0a 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72  (.     Tcl_Inter
25b0: 70 20 2a 69 6e 74 65 72 70 2c 0a 49 6e 64 65 78  p *interp,.Index
25c0: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 49  : generic/tclOOI
25d0: 6e 66 6f 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  nfo.c.==========
25e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
25f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69  =========.RCS fi
2620: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c  le: /cvsroot/tcl
2630: 2f 6f 6f 63 6f 72 65 2f 67 65 6e 65 72 69 63 2f  /oocore/generic/
2640: 74 63 6c 4f 4f 49 6e 66 6f 2e 63 2c 76 0a 72 65  tclOOInfo.c,v.re
2650: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f  trieving revisio
2660: 6e 20 31 2e 31 34 0a 64 69 66 66 20 2d 77 20 2d  n 1.14.diff -w -
2670: 75 20 2d 72 31 2e 31 34 20 74 63 6c 4f 4f 49 6e  u -r1.14 tclOOIn
2680: 66 6f 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63  fo.c.--- generic
2690: 2f 74 63 6c 4f 4f 49 6e 66 6f 2e 63 09 32 39 20  /tclOOInfo.c.29 
26a0: 4d 61 79 20 32 30 30 38 20 30 39 3a 33 33 3a 31  May 2008 09:33:1
26b0: 39 20 2d 30 30 30 30 09 31 2e 31 34 0a 2b 2b 2b  9 -0000.1.14.+++
26c0: 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 49 6e   generic/tclOOIn
26d0: 66 6f 2e 63 09 32 38 20 4a 75 6e 20 32 30 30 38  fo.c.28 Jun 2008
26e0: 20 32 33 3a 32 33 3a 32 35 20 2d 30 30 30 30 0a   23:23:25 -0000.
26f0: 40 40 20 2d 32 36 2c 36 20 2b 32 36 2c 37 20 40  @@ -26,6 +26,7 @
2700: 40 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 4f 62  @. static Tcl_Ob
2710: 6a 43 6d 64 50 72 6f 63 20 49 6e 66 6f 4f 62 6a  jCmdProc InfoObj
2720: 65 63 74 4d 65 74 68 6f 64 73 43 6d 64 3b 0a 20  ectMethodsCmd;. 
2730: 73 74 61 74 69 63 20 54 63 6c 5f 4f 62 6a 43 6d  static Tcl_ObjCm
2740: 64 50 72 6f 63 20 49 6e 66 6f 4f 62 6a 65 63 74  dProc InfoObject
2750: 4d 69 78 69 6e 73 43 6d 64 3b 0a 20 73 74 61 74  MixinsCmd;. stat
2760: 69 63 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f  ic Tcl_ObjCmdPro
2770: 63 20 49 6e 66 6f 4f 62 6a 65 63 74 56 61 72 73  c InfoObjectVars
2780: 43 6d 64 3b 0a 2b 73 74 61 74 69 63 20 54 63 6c  Cmd;.+static Tcl
2790: 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 49 6e 66 6f  _ObjCmdProc Info
27a0: 4f 62 6a 65 63 74 56 61 72 69 61 62 6c 65 73 43  ObjectVariablesC
27b0: 6d 64 3b 0a 20 73 74 61 74 69 63 20 54 63 6c 5f  md;. static Tcl_
27c0: 4f 62 6a 43 6d 64 50 72 6f 63 20 49 6e 66 6f 43  ObjCmdProc InfoC
27d0: 6c 61 73 73 43 6f 6e 73 74 72 43 6d 64 3b 0a 20  lassConstrCmd;. 
27e0: 73 74 61 74 69 63 20 54 63 6c 5f 4f 62 6a 43 6d  static Tcl_ObjCm
27f0: 64 50 72 6f 63 20 49 6e 66 6f 43 6c 61 73 73 44  dProc InfoClassD
2800: 65 66 6e 43 6d 64 3b 0a 20 73 74 61 74 69 63 20  efnCmd;. static 
2810: 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 49  Tcl_ObjCmdProc I
2820: 6e 66 6f 43 6c 61 73 73 44 65 73 74 72 43 6d 64  nfoClassDestrCmd
2830: 3b 0a 40 40 20 2d 33 36 2c 36 20 2b 33 37 2c 37  ;.@@ -36,6 +37,7
2840: 20 40 40 0a 20 73 74 61 74 69 63 20 54 63 6c 5f   @@. static Tcl_
2850: 4f 62 6a 43 6d 64 50 72 6f 63 20 49 6e 66 6f 43  ObjCmdProc InfoC
2860: 6c 61 73 73 4d 69 78 69 6e 73 43 6d 64 3b 0a 20  lassMixinsCmd;. 
2870: 73 74 61 74 69 63 20 54 63 6c 5f 4f 62 6a 43 6d  static Tcl_ObjCm
2880: 64 50 72 6f 63 20 49 6e 66 6f 43 6c 61 73 73 53  dProc InfoClassS
2890: 75 62 73 43 6d 64 3b 0a 20 73 74 61 74 69 63 20  ubsCmd;. static 
28a0: 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 49  Tcl_ObjCmdProc I
28b0: 6e 66 6f 43 6c 61 73 73 53 75 70 65 72 73 43 6d  nfoClassSupersCm
28c0: 64 3b 0a 2b 73 74 61 74 69 63 20 54 63 6c 5f 4f  d;.+static Tcl_O
28d0: 62 6a 43 6d 64 50 72 6f 63 20 49 6e 66 6f 43 6c  bjCmdProc InfoCl
28e0: 61 73 73 56 61 72 69 61 62 6c 65 73 43 6d 64 3b  assVariablesCmd;
28f0: 0a 20 0a 20 73 74 72 75 63 74 20 4e 61 6d 65 50  . . struct NameP
2900: 72 6f 63 4d 61 70 20 7b 20 63 6f 6e 73 74 20 63  rocMap { const c
2910: 68 61 72 20 2a 6e 61 6d 65 3b 20 54 63 6c 5f 4f  har *name; Tcl_O
2920: 62 6a 43 6d 64 50 72 6f 63 20 2a 70 72 6f 63 3b  bjCmdProc *proc;
2930: 20 7d 3b 0a 20 0a 40 40 20 2d 35 31 2c 36 20 2b   };. .@@ -51,6 +
2940: 35 33 2c 37 20 40 40 0a 20 20 20 20 20 7b 22 3a  53,7 @@.     {":
2950: 3a 6f 6f 3a 3a 49 6e 66 6f 4f 62 6a 65 63 74 3a  :oo::InfoObject:
2960: 3a 69 73 61 22 2c 09 20 20 20 20 20 49 6e 66 6f  :isa",.     Info
2970: 4f 62 6a 65 63 74 49 73 41 43 6d 64 7d 2c 0a 20  ObjectIsACmd},. 
2980: 20 20 20 20 7b 22 3a 3a 6f 6f 3a 3a 49 6e 66 6f      {"::oo::Info
2990: 4f 62 6a 65 63 74 3a 3a 6d 65 74 68 6f 64 73 22  Object::methods"
29a0: 2c 20 20 20 20 49 6e 66 6f 4f 62 6a 65 63 74 4d  ,    InfoObjectM
29b0: 65 74 68 6f 64 73 43 6d 64 7d 2c 0a 20 20 20 20  ethodsCmd},.    
29c0: 20 7b 22 3a 3a 6f 6f 3a 3a 49 6e 66 6f 4f 62 6a   {"::oo::InfoObj
29d0: 65 63 74 3a 3a 6d 69 78 69 6e 73 22 2c 20 20 20  ect::mixins",   
29e0: 20 20 49 6e 66 6f 4f 62 6a 65 63 74 4d 69 78 69    InfoObjectMixi
29f0: 6e 73 43 6d 64 7d 2c 0a 2b 20 20 20 20 7b 22 3a  nsCmd},.+    {":
2a00: 3a 6f 6f 3a 3a 49 6e 66 6f 4f 62 6a 65 63 74 3a  :oo::InfoObject:
2a10: 3a 76 61 72 69 61 62 6c 65 73 22 2c 20 20 49 6e  :variables",  In
2a20: 66 6f 4f 62 6a 65 63 74 56 61 72 69 61 62 6c 65  foObjectVariable
2a30: 73 43 6d 64 7d 2c 0a 20 20 20 20 20 7b 22 3a 3a  sCmd},.     {"::
2a40: 6f 6f 3a 3a 49 6e 66 6f 4f 62 6a 65 63 74 3a 3a  oo::InfoObject::
2a50: 76 61 72 73 22 2c 09 20 20 20 20 20 49 6e 66 6f  vars",.     Info
2a60: 4f 62 6a 65 63 74 56 61 72 73 43 6d 64 7d 2c 0a  ObjectVarsCmd},.
2a70: 20 20 20 20 20 7b 4e 55 4c 4c 2c 20 4e 55 4c 4c       {NULL, NULL
2a80: 7d 0a 20 7d 3b 0a 40 40 20 2d 37 30 2c 36 20 2b  }. };.@@ -70,6 +
2a90: 37 33 2c 37 20 40 40 0a 20 20 20 20 20 7b 22 3a  73,7 @@.     {":
2aa0: 3a 6f 6f 3a 3a 49 6e 66 6f 43 6c 61 73 73 3a 3a  :oo::InfoClass::
2ab0: 6d 69 78 69 6e 73 22 2c 09 20 20 20 20 20 20 49  mixins",.      I
2ac0: 6e 66 6f 43 6c 61 73 73 4d 69 78 69 6e 73 43 6d  nfoClassMixinsCm
2ad0: 64 7d 2c 0a 20 20 20 20 20 7b 22 3a 3a 6f 6f 3a  d},.     {"::oo:
2ae0: 3a 49 6e 66 6f 43 6c 61 73 73 3a 3a 73 75 62 63  :InfoClass::subc
2af0: 6c 61 73 73 65 73 22 2c 20 20 20 49 6e 66 6f 43  lasses",   InfoC
2b00: 6c 61 73 73 53 75 62 73 43 6d 64 7d 2c 0a 20 20  lassSubsCmd},.  
2b10: 20 20 20 7b 22 3a 3a 6f 6f 3a 3a 49 6e 66 6f 43     {"::oo::InfoC
2b20: 6c 61 73 73 3a 3a 73 75 70 65 72 63 6c 61 73 73  lass::superclass
2b30: 65 73 22 2c 20 49 6e 66 6f 43 6c 61 73 73 53 75  es", InfoClassSu
2b40: 70 65 72 73 43 6d 64 7d 2c 0a 2b 20 20 20 20 7b  persCmd},.+    {
2b50: 22 3a 3a 6f 6f 3a 3a 49 6e 66 6f 43 6c 61 73 73  "::oo::InfoClass
2b60: 3a 3a 76 61 72 69 61 62 6c 65 73 22 2c 20 20 20  ::variables",   
2b70: 20 49 6e 66 6f 43 6c 61 73 73 56 61 72 69 61 62   InfoClassVariab
2b80: 6c 65 73 43 6d 64 7d 2c 0a 20 20 20 20 20 7b 4e  lesCmd},.     {N
2b90: 55 4c 4c 2c 20 4e 55 4c 4c 7d 0a 20 7d 3b 0a 20  ULL, NULL}. };. 
2ba0: 0c 0a 40 40 20 2d 32 36 38 2c 31 38 20 2b 32 37  ..@@ -268,18 +27
2bb0: 32 2c 38 20 40 40 0a 20 09 7d 0a 20 20 20 20 20  2,8 @@. .}.     
2bc0: 7d 0a 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  }.     Tcl_ListO
2bd0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
2be0: 4e 55 4c 4c 2c 20 54 63 6c 5f 47 65 74 4f 62 6a  NULL, Tcl_GetObj
2bf0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20  Result(interp), 
2c00: 61 72 67 73 4f 62 6a 29 3b 0a 2d 0a 2d 20 20 20  argsObj);.-.-   
2c10: 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 54 68 69 73   /*.-     * This
2c20: 20 69 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20   is copied from 
2c30: 74 68 65 20 5b 69 6e 66 6f 20 62 6f 64 79 5d 20  the [info body] 
2c40: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
2c50: 53 65 65 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73  See the comments
2c60: 0a 2d 20 20 20 20 20 2a 20 74 68 65 72 65 20 66  .-     * there f
2c70: 6f 72 20 77 68 79 20 74 68 69 73 20 63 6f 70 79  or why this copy
2c80: 20 68 61 73 20 74 6f 20 62 65 20 64 6f 6e 65 20   has to be done 
2c90: 68 65 72 65 2e 0a 2d 20 20 20 20 20 2a 2f 0a 2d  here..-     */.-
2ca0: 0a 2d 20 20 20 20 69 66 20 28 70 72 6f 63 50 74  .-    if (procPt
2cb0: 72 2d 3e 62 6f 64 79 50 74 72 2d 3e 62 79 74 65  r->bodyPtr->byte
2cc0: 73 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 28  s == NULL) {.-.(
2cd0: 76 6f 69 64 29 20 54 63 6c 5f 47 65 74 53 74 72  void) Tcl_GetStr
2ce0: 69 6e 67 28 70 72 6f 63 50 74 72 2d 3e 62 6f 64  ing(procPtr->bod
2cf0: 79 50 74 72 29 3b 0a 2d 20 20 20 20 7d 0a 20 20  yPtr);.-    }.  
2d00: 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
2d10: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c  pendElement(NULL
2d20: 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75  , Tcl_GetObjResu
2d30: 6c 74 28 69 6e 74 65 72 70 29 2c 0a 2d 09 20 20  lt(interp),.-.  
2d40: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
2d50: 62 6a 28 70 72 6f 63 50 74 72 2d 3e 62 6f 64 79  bj(procPtr->body
2d60: 50 74 72 2d 3e 62 79 74 65 73 2c 0a 2d 09 20 20  Ptr->bytes,.-.  
2d70: 20 20 70 72 6f 63 50 74 72 2d 3e 62 6f 64 79 50    procPtr->bodyP
2d80: 74 72 2d 3e 6c 65 6e 67 74 68 29 29 3b 0a 2b 09  tr->length));.+.
2d90: 20 20 20 20 54 63 6c 4f 4f 47 65 74 4d 65 74 68      TclOOGetMeth
2da0: 6f 64 42 6f 64 79 28 54 63 6c 5f 47 65 74 48 61  odBody(Tcl_GetHa
2db0: 73 68 56 61 6c 75 65 28 68 50 74 72 29 29 29 3b  shValue(hPtr)));
2dc0: 0a 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  .     return TCL
2dd0: 5f 4f 4b 3b 0a 20 7d 0a 20 0c 0a 40 40 20 2d 36  _OK;. }. ..@@ -6
2de0: 31 37 2c 36 20 2b 36 31 31 2c 34 32 20 40 40 0a  17,6 +611,42 @@.
2df0: 20 2f 2a 0a 20 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d   /*.  * --------
2e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
2e40: 20 2a 0a 2b 20 2a 20 49 6e 66 6f 4f 62 6a 65 63   *.+ * InfoObjec
2e50: 74 56 61 72 69 61 62 6c 65 73 43 6d 64 20 2d 2d  tVariablesCmd --
2e60: 0a 2b 20 2a 0a 2b 20 2a 09 49 6d 70 6c 65 6d 65  .+ *.+ *.Impleme
2e70: 6e 74 73 20 5b 69 6e 66 6f 20 6f 62 6a 65 63 74  nts [info object
2e80: 20 76 61 72 69 61 62 6c 65 73 20 24 6f 62 6a 4e   variables $objN
2e90: 61 6d 65 5d 0a 2b 20 2a 0a 2b 20 2a 20 2d 2d 2d  ame].+ *.+ * ---
2ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ee0: 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74  ---.+ */.+.+stat
2ef0: 69 63 20 69 6e 74 0a 2b 49 6e 66 6f 4f 62 6a 65  ic int.+InfoObje
2f00: 63 74 56 61 72 69 61 62 6c 65 73 43 6d 64 28 0a  ctVariablesCmd(.
2f10: 2b 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  +    ClientData 
2f20: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 20 20 20  clientData,.+   
2f30: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2f40: 65 72 70 2c 0a 2b 20 20 20 20 69 6e 74 20 6f 62  erp,.+    int ob
2f50: 6a 63 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a  jc,.+    Tcl_Obj
2f60: 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 0a   *const objv[]).
2f70: 2b 7b 0a 2b 20 20 20 20 4f 62 6a 65 63 74 20 2a  +{.+    Object *
2f80: 6f 50 74 72 3b 0a 2b 20 20 20 20 54 63 6c 5f 4f  oPtr;.+    Tcl_O
2f90: 62 6a 20 2a 76 61 72 69 61 62 6c 65 4f 62 6a 3b  bj *variableObj;
2fa0: 0a 2b 20 20 20 20 69 6e 74 20 69 3b 0a 2b 0a 2b  .+    int i;.+.+
2fb0: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20      if (objc != 
2fc0: 32 29 20 7b 0a 2b 09 54 63 6c 5f 57 72 6f 6e 67  2) {.+.Tcl_Wrong
2fd0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
2fe0: 31 2c 20 6f 62 6a 76 2c 20 22 6f 62 6a 4e 61 6d  1, objv, "objNam
2ff0: 65 22 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43  e");.+.return TC
3000: 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a  L_ERROR;.+    }.
3010: 2b 20 20 20 20 6f 50 74 72 20 3d 20 28 4f 62 6a  +    oPtr = (Obj
3020: 65 63 74 20 2a 29 20 54 63 6c 5f 47 65 74 4f 62  ect *) Tcl_GetOb
3030: 6a 65 63 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  jectFromObj(inte
3040: 72 70 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 2b 20  rp, objv[1]);.+ 
3050: 20 20 20 69 66 20 28 6f 50 74 72 20 3d 3d 20 4e     if (oPtr == N
3060: 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20  ULL) {.+.return 
3070: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20  TCL_ERROR;.+    
3080: 7d 0a 2b 0a 2b 20 20 20 20 46 4f 52 45 41 43 48  }.+.+    FOREACH
3090: 28 76 61 72 69 61 62 6c 65 4f 62 6a 2c 20 6f 50  (variableObj, oP
30a0: 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 29 20 7b  tr->variables) {
30b0: 0a 2b 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .+.Tcl_ListObjAp
30c0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c  pendElement(NULL
30d0: 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75  , Tcl_GetObjResu
30e0: 6c 74 28 69 6e 74 65 72 70 29 2c 20 76 61 72 69  lt(interp), vari
30f0: 61 62 6c 65 4f 62 6a 29 3b 0a 2b 20 20 20 20 7d  ableObj);.+    }
3100: 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  .+    return TCL
3110: 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b  _OK;.+}.+..+/*.+
3120: 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   * -------------
3130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20  ---------.+ *.  
3170: 2a 20 49 6e 66 6f 4f 62 6a 65 63 74 56 61 72 73  * InfoObjectVars
3180: 43 6d 64 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 49  Cmd --.  *.  *.I
3190: 6d 70 6c 65 6d 65 6e 74 73 20 5b 69 6e 66 6f 20  mplements [info 
31a0: 6f 62 6a 65 63 74 20 76 61 72 73 20 24 6f 62 6a  object vars $obj
31b0: 4e 61 6d 65 20 3f 24 70 61 74 74 65 72 6e 3f 5d  Name ?$pattern?]
31c0: 0a 40 40 20 2d 37 33 39 2c 31 32 20 2b 37 36 39  .@@ -739,12 +769
31d0: 2c 38 20 40 40 0a 20 09 7d 0a 20 20 20 20 20 7d  ,8 @@. .}.     }
31e0: 0a 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62  .     Tcl_ListOb
31f0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 4e  jAppendElement(N
3200: 55 4c 4c 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52  ULL, Tcl_GetObjR
3210: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 61  esult(interp), a
3220: 72 67 73 4f 62 6a 29 3b 0a 2d 20 20 20 20 69 66  rgsObj);.-    if
3230: 20 28 70 72 6f 63 50 74 72 2d 3e 62 6f 64 79 50   (procPtr->bodyP
3240: 74 72 2d 3e 62 79 74 65 73 20 3d 3d 20 4e 55 4c  tr->bytes == NUL
3250: 4c 29 20 7b 0a 2d 09 28 76 6f 69 64 29 20 54 63  L) {.-.(void) Tc
3260: 6c 5f 47 65 74 53 74 72 69 6e 67 28 70 72 6f 63  l_GetString(proc
3270: 50 74 72 2d 3e 62 6f 64 79 50 74 72 29 3b 0a 2d  Ptr->bodyPtr);.-
3280: 20 20 20 20 7d 0a 20 20 20 20 20 54 63 6c 5f 4c      }.     Tcl_L
3290: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
32a0: 65 6e 74 28 4e 55 4c 4c 2c 20 54 63 6c 5f 47 65  ent(NULL, Tcl_Ge
32b0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
32c0: 70 29 2c 0a 2d 09 20 20 20 20 54 63 6c 5f 4e 65  p),.-.    Tcl_Ne
32d0: 77 53 74 72 69 6e 67 4f 62 6a 28 70 72 6f 63 50  wStringObj(procP
32e0: 74 72 2d 3e 62 6f 64 79 50 74 72 2d 3e 62 79 74  tr->bodyPtr->byt
32f0: 65 73 2c 0a 2d 09 20 20 20 20 70 72 6f 63 50 74  es,.-.    procPt
3300: 72 2d 3e 62 6f 64 79 50 74 72 2d 3e 6c 65 6e 67  r->bodyPtr->leng
3310: 74 68 29 29 3b 0a 2b 09 20 20 20 20 54 63 6c 4f  th));.+.    TclO
3320: 4f 47 65 74 4d 65 74 68 6f 64 42 6f 64 79 28 63  OGetMethodBody(c
3330: 6c 73 50 74 72 2d 3e 63 6f 6e 73 74 72 75 63 74  lsPtr->construct
3340: 6f 72 50 74 72 29 29 3b 0a 20 20 20 20 20 72 65  orPtr));.     re
3350: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 7d 0a  turn TCL_OK;. }.
3360: 20 0c 0a 40 40 20 2d 38 31 36 2c 31 32 20 2b 38   ..@@ -816,12 +8
3370: 34 32 2c 38 20 40 40 0a 20 09 7d 0a 20 20 20 20  42,8 @@. .}.    
3380: 20 7d 0a 20 20 20 20 20 54 63 6c 5f 4c 69 73 74   }.     Tcl_List
3390: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
33a0: 28 4e 55 4c 4c 2c 20 54 63 6c 5f 47 65 74 4f 62  (NULL, Tcl_GetOb
33b0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c  jResult(interp),
33c0: 20 61 72 67 73 4f 62 6a 29 3b 0a 2d 20 20 20 20   argsObj);.-    
33d0: 69 66 20 28 70 72 6f 63 50 74 72 2d 3e 62 6f 64  if (procPtr->bod
33e0: 79 50 74 72 2d 3e 62 79 74 65 73 20 3d 3d 20 4e  yPtr->bytes == N
33f0: 55 4c 4c 29 20 7b 0a 2d 09 28 76 6f 69 64 29 20  ULL) {.-.(void) 
3400: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 70 72  Tcl_GetString(pr
3410: 6f 63 50 74 72 2d 3e 62 6f 64 79 50 74 72 29 3b  ocPtr->bodyPtr);
3420: 0a 2d 20 20 20 20 7d 0a 20 20 20 20 20 54 63 6c  .-    }.     Tcl
3430: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
3440: 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 54 63 6c 5f  ement(NULL, Tcl_
3450: 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  GetObjResult(int
3460: 65 72 70 29 2c 0a 2d 09 20 20 20 20 54 63 6c 5f  erp),.-.    Tcl_
3470: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 72 6f  NewStringObj(pro
3480: 63 50 74 72 2d 3e 62 6f 64 79 50 74 72 2d 3e 62  cPtr->bodyPtr->b
3490: 79 74 65 73 2c 0a 2d 09 20 20 20 20 70 72 6f 63  ytes,.-.    proc
34a0: 50 74 72 2d 3e 62 6f 64 79 50 74 72 2d 3e 6c 65  Ptr->bodyPtr->le
34b0: 6e 67 74 68 29 29 3b 0a 2b 09 20 20 20 20 54 63  ngth));.+.    Tc
34c0: 6c 4f 4f 47 65 74 4d 65 74 68 6f 64 42 6f 64 79  lOOGetMethodBody
34d0: 28 54 63 6c 5f 47 65 74 48 61 73 68 56 61 6c 75  (Tcl_GetHashValu
34e0: 65 28 68 50 74 72 29 29 29 3b 0a 20 20 20 20 20  e(hPtr)));.     
34f0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20  return TCL_OK;. 
3500: 7d 0a 20 0c 0a 40 40 20 2d 38 37 31 2c 31 32 20  }. ..@@ -871,12 
3510: 2b 38 39 33 2c 37 20 40 40 0a 20 09 72 65 74 75  +893,7 @@. .retu
3520: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3530: 20 20 20 7d 0a 20 0a 2d 20 20 20 20 69 66 20 28     }. .-    if (
3540: 70 72 6f 63 50 74 72 2d 3e 62 6f 64 79 50 74 72  procPtr->bodyPtr
3550: 2d 3e 62 79 74 65 73 20 3d 3d 20 4e 55 4c 4c 29  ->bytes == NULL)
3560: 20 7b 0a 2d 09 28 76 6f 69 64 29 20 54 63 6c 5f   {.-.(void) Tcl_
3570: 47 65 74 53 74 72 69 6e 67 28 70 72 6f 63 50 74  GetString(procPt
3580: 72 2d 3e 62 6f 64 79 50 74 72 29 3b 0a 2d 20 20  r->bodyPtr);.-  
3590: 20 20 7d 0a 2d 20 20 20 20 54 63 6c 5f 4c 69 73    }.-    Tcl_Lis
35a0: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
35b0: 74 28 4e 55 4c 4c 2c 20 54 63 6c 5f 47 65 74 4f  t(NULL, Tcl_GetO
35c0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  bjResult(interp)
35d0: 2c 0a 2d 09 20 20 20 20 54 63 6c 5f 4e 65 77 53  ,.-.    Tcl_NewS
35e0: 74 72 69 6e 67 4f 62 6a 28 70 72 6f 63 50 74 72  tringObj(procPtr
35f0: 2d 3e 62 6f 64 79 50 74 72 2d 3e 62 79 74 65 73  ->bodyPtr->bytes
3600: 2c 0a 2d 09 20 20 20 20 70 72 6f 63 50 74 72 2d  ,.-.    procPtr-
3610: 3e 62 6f 64 79 50 74 72 2d 3e 6c 65 6e 67 74 68  >bodyPtr->length
3620: 29 29 3b 0a 2b 20 20 20 20 54 63 6c 5f 53 65 74  ));.+    Tcl_Set
3630: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
3640: 2c 20 54 63 6c 4f 4f 47 65 74 4d 65 74 68 6f 64  , TclOOGetMethod
3650: 42 6f 64 79 28 63 6c 73 50 74 72 2d 3e 64 65 73  Body(clsPtr->des
3660: 74 72 75 63 74 6f 72 50 74 72 29 29 3b 0a 20 20  tructorPtr));.  
3670: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
3680: 3b 0a 20 7d 0a 20 0c 0a 40 40 20 2d 31 32 36 33  ;. }. ..@@ -1263
3690: 2c 36 20 2b 31 32 38 30 2c 34 39 20 40 40 0a 20  ,6 +1280,49 @@. 
36a0: 7d 0a 20 0c 0a 20 2f 2a 0a 2b 20 2a 20 2d 2d 2d  }. .. /*.+ * ---
36b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36f0: 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 49 6e 66 6f  ---.+ *.+ * Info
3700: 43 6c 61 73 73 56 61 72 69 61 62 6c 65 73 43 6d  ClassVariablesCm
3710: 64 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6d 70  d --.+ *.+ *.Imp
3720: 6c 65 6d 65 6e 74 73 20 5b 69 6e 66 6f 20 63 6c  lements [info cl
3730: 61 73 73 20 76 61 72 69 61 62 6c 65 73 20 24 63  ass variables $c
3740: 6c 73 4e 61 6d 65 5d 0a 2b 20 2a 0a 2b 20 2a 20  lsName].+ *.+ * 
3750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3790: 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73  ------.+ */.+.+s
37a0: 74 61 74 69 63 20 69 6e 74 0a 2b 49 6e 66 6f 43  tatic int.+InfoC
37b0: 6c 61 73 73 56 61 72 69 61 62 6c 65 73 43 6d 64  lassVariablesCmd
37c0: 28 0a 2b 20 20 20 20 43 6c 69 65 6e 74 44 61 74  (.+    ClientDat
37d0: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 2b 20  a clientData,.+ 
37e0: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69     Tcl_Interp *i
37f0: 6e 74 65 72 70 2c 0a 2b 20 20 20 20 69 6e 74 20  nterp,.+    int 
3800: 6f 62 6a 63 2c 0a 2b 20 20 20 20 54 63 6c 5f 4f  objc,.+    Tcl_O
3810: 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d  bj *const objv[]
3820: 29 0a 2b 7b 0a 2b 20 20 20 20 4f 62 6a 65 63 74  ).+{.+    Object
3830: 20 2a 6f 50 74 72 3b 0a 2b 20 20 20 20 43 6c 61   *oPtr;.+    Cla
3840: 73 73 20 2a 63 6c 73 50 74 72 3b 0a 2b 20 20 20  ss *clsPtr;.+   
3850: 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 72 69 61 62   Tcl_Obj *variab
3860: 6c 65 4f 62 6a 3b 0a 2b 20 20 20 20 69 6e 74 20  leObj;.+    int 
3870: 69 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 6f 62  i;.+.+    if (ob
3880: 6a 63 20 21 3d 20 32 29 20 7b 0a 2b 09 54 63 6c  jc != 2) {.+.Tcl
3890: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
38a0: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
38b0: 63 6c 61 73 73 4e 61 6d 65 22 29 3b 0a 2b 09 72  className");.+.r
38c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
38d0: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 6f 50 74  .+    }.+    oPt
38e0: 72 20 3d 20 28 4f 62 6a 65 63 74 20 2a 29 20 54  r = (Object *) T
38f0: 63 6c 5f 47 65 74 4f 62 6a 65 63 74 46 72 6f 6d  cl_GetObjectFrom
3900: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
3910: 5b 31 5d 29 3b 0a 2b 20 20 20 20 69 66 20 28 6f  [1]);.+    if (o
3920: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b  Ptr == NULL) {.+
3930: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
3940: 52 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69  R;.+    }.+    i
3950: 66 20 28 6f 50 74 72 2d 3e 63 6c 61 73 73 50 74  f (oPtr->classPt
3960: 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 54  r == NULL) {.+.T
3970: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
3980: 69 6e 74 65 72 70 2c 20 22 5c 22 22 2c 20 54 63  interp, "\"", Tc
3990: 6c 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  lGetString(objv[
39a0: 31 5d 29 2c 0a 2b 09 09 22 5c 22 20 69 73 20 6e  1]),.+.."\" is n
39b0: 6f 74 20 61 20 63 6c 61 73 73 22 2c 20 4e 55 4c  ot a class", NUL
39c0: 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c  L);.+.return TCL
39d0: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b  _ERROR;.+    }.+
39e0: 20 20 20 20 63 6c 73 50 74 72 20 3d 20 6f 50 74      clsPtr = oPt
39f0: 72 2d 3e 63 6c 61 73 73 50 74 72 3b 0a 2b 0a 2b  r->classPtr;.+.+
3a00: 20 20 20 20 46 4f 52 45 41 43 48 28 76 61 72 69      FOREACH(vari
3a10: 61 62 6c 65 4f 62 6a 2c 20 63 6c 73 50 74 72 2d  ableObj, clsPtr-
3a20: 3e 76 61 72 69 61 62 6c 65 73 29 20 7b 0a 2b 09  >variables) {.+.
3a30: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
3a40: 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c 20 54  dElement(NULL, T
3a50: 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_GetObjResult(
3a60: 69 6e 74 65 72 70 29 2c 20 76 61 72 69 61 62 6c  interp), variabl
3a70: 65 4f 62 6a 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20  eObj);.+    }.+ 
3a80: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
3a90: 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 20 20 2a 20  ;.+}.+..+/*.  * 
3aa0: 4c 6f 63 61 6c 20 56 61 72 69 61 62 6c 65 73 3a  Local Variables:
3ab0: 0a 20 20 2a 20 6d 6f 64 65 3a 20 63 0a 20 20 2a  .  * mode: c.  *
3ac0: 20 63 2d 62 61 73 69 63 2d 6f 66 66 73 65 74 3a   c-basic-offset:
3ad0: 20 34 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69   4.Index: generi
3ae0: 63 2f 74 63 6c 4f 4f 49 6e 74 2e 68 0a 3d 3d 3d  c/tclOOInt.h.===
3af0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3b30: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
3b40: 6f 6f 74 2f 74 63 6c 2f 6f 6f 63 6f 72 65 2f 67  oot/tcl/oocore/g
3b50: 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 49 6e 74 2e  eneric/tclOOInt.
3b60: 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72  h,v.retrieving r
3b70: 65 76 69 73 69 6f 6e 20 31 2e 33 34 0a 64 69 66  evision 1.34.dif
3b80: 66 20 2d 77 20 2d 75 20 2d 72 31 2e 33 34 20 74  f -w -u -r1.34 t
3b90: 63 6c 4f 4f 49 6e 74 2e 68 0a 2d 2d 2d 20 67 65  clOOInt.h.--- ge
3ba0: 6e 65 72 69 63 2f 74 63 6c 4f 4f 49 6e 74 2e 68  neric/tclOOInt.h
3bb0: 09 32 20 4a 75 6e 20 32 30 30 38 20 31 33 3a 35  .2 Jun 2008 13:5
3bc0: 39 3a 35 38 20 2d 30 30 30 30 09 31 2e 33 34 0a  9:58 -0000.1.34.
3bd0: 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 4f  +++ generic/tclO
3be0: 4f 49 6e 74 2e 68 09 32 38 20 4a 75 6e 20 32 30  OInt.h.28 Jun 20
3bf0: 30 38 20 32 33 3a 32 33 3a 32 36 20 2d 30 30 30  08 23:23:26 -000
3c00: 30 0a 40 40 20 2d 31 37 35 2c 36 20 2b 31 37 35  0.@@ -175,6 +175
3c10: 2c 37 20 40 40 0a 20 20 20 20 20 54 63 6c 5f 4f  ,7 @@.     Tcl_O
3c20: 62 6a 65 63 74 4d 61 70 4d 65 74 68 6f 64 4e 61  bjectMapMethodNa
3c30: 6d 65 50 72 6f 63 20 6d 61 70 4d 65 74 68 6f 64  meProc mapMethod
3c40: 4e 61 6d 65 50 72 6f 63 3b 0a 20 09 09 09 09 2f  NameProc;. ..../
3c50: 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 61 6c  * Function to al
3c60: 6c 6f 77 20 72 65 6d 61 70 70 69 6e 67 20 6f 66  low remapping of
3c70: 20 6d 65 74 68 6f 64 0a 20 09 09 09 09 20 2a 20   method. .... * 
3c80: 6e 61 6d 65 73 2e 20 46 6f 72 20 69 74 63 6c 2d  names. For itcl-
3c90: 6e 67 2e 20 2a 2f 0a 2b 20 20 20 20 4c 49 53 54  ng. */.+    LIST
3ca0: 5f 53 54 41 54 49 43 28 54 63 6c 5f 4f 62 6a 20  _STATIC(Tcl_Obj 
3cb0: 2a 29 20 76 61 72 69 61 62 6c 65 73 3b 0a 20 7d  *) variables;. }
3cc0: 20 4f 62 6a 65 63 74 3b 0a 20 0a 20 23 64 65 66   Object;. . #def
3cd0: 69 6e 65 20 4f 42 4a 45 43 54 5f 44 45 4c 45 54  ine OBJECT_DELET
3ce0: 45 44 09 31 09 2f 2a 20 46 6c 61 67 20 74 6f 20  ED.1./* Flag to 
3cf0: 73 61 79 20 74 68 61 74 20 61 6e 20 6f 62 6a 65  say that an obje
3d00: 63 74 20 68 61 73 20 62 65 65 6e 0a 40 40 20 2d  ct has been.@@ -
3d10: 32 34 38 2c 36 20 2b 32 34 39 2c 37 20 40 40 0a  248,6 +249,7 @@.
3d20: 20 09 09 09 09 20 2a 20 6f 62 6a 65 63 74 20 64   .... * object d
3d30: 6f 65 73 6e 27 74 20 6f 76 65 72 72 69 64 65 20  oesn't override 
3d40: 77 69 74 68 20 69 74 73 20 6f 77 6e 20 6d 69 78  with its own mix
3d50: 69 6e 73 0a 20 09 09 09 09 20 2a 20 28 61 6e 64  ins. .... * (and
3d60: 20 66 69 6c 74 65 72 73 20 61 6e 64 20 6d 65 74   filters and met
3d70: 68 6f 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  hod implementati
3d80: 6f 6e 73 20 66 6f 72 0a 20 09 09 09 09 20 2a 20  ons for. .... * 
3d90: 77 68 65 6e 20 67 65 74 74 69 6e 67 20 6d 65 74  when getting met
3da0: 68 6f 64 20 63 68 61 69 6e 73 29 2e 20 2a 2f 0a  hod chains). */.
3db0: 2b 20 20 20 20 4c 49 53 54 5f 53 54 41 54 49 43  +    LIST_STATIC
3dc0: 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 76 61 72 69  (Tcl_Obj *) vari
3dd0: 61 62 6c 65 73 3b 0a 20 7d 20 43 6c 61 73 73 3b  ables;. } Class;
3de0: 0a 20 0a 20 2f 2a 0a 40 40 20 2d 34 32 30 2c 36  . . /*.@@ -420,6
3df0: 20 2b 34 32 32 2c 39 20 40 40 0a 20 4d 4f 44 55   +422,9 @@. MODU
3e00: 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c  LE_SCOPE int.Tcl
3e10: 4f 4f 44 65 66 69 6e 65 55 6e 65 78 70 6f 72 74  OODefineUnexport
3e20: 4f 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 74  ObjCmd(ClientDat
3e30: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 09  a clientData,. .
3e40: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ..    Tcl_Interp
3e50: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
3e60: 6a 63 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f  jc,. ...    Tcl_
3e70: 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76  Obj *const *objv
3e80: 29 3b 0a 2b 4d 4f 44 55 4c 45 5f 53 43 4f 50 45  );.+MODULE_SCOPE
3e90: 20 69 6e 74 09 54 63 6c 4f 4f 44 65 66 69 6e 65   int.TclOODefine
3ea0: 56 61 72 69 61 62 6c 65 73 4f 62 6a 43 6d 64 28  VariablesObjCmd(
3eb0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
3ec0: 74 44 61 74 61 2c 0a 2b 09 09 09 20 20 20 20 54  tData,.+...    T
3ed0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
3ee0: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 0a 2b 09 09  p, int objc,.+..
3ef0: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f  .    Tcl_Obj *co
3f00: 6e 73 74 20 2a 6f 62 6a 76 29 3b 0a 20 4d 4f 44  nst *objv);. MOD
3f10: 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63  ULE_SCOPE int.Tc
3f20: 6c 4f 4f 44 65 66 69 6e 65 43 6c 61 73 73 4f 62  lOODefineClassOb
3f30: 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20  jCmd(ClientData 
3f40: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 09 09 09  clientData,. ...
3f50: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a      Tcl_Interp *
3f60: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
3f70: 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 4f 62  ,. ...    Tcl_Ob
3f80: 6a 20 2a 63 6f 6e 73 74 20 2a 6f 62 6a 76 29 3b  j *const *objv);
3f90: 0a 40 40 20 2d 34 38 35 2c 36 20 2b 34 39 30 2c  .@@ -485,6 +490,
3fa0: 37 20 40 40 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f  7 @@. MODULE_SCO
3fb0: 50 45 20 46 6f 75 6e 64 61 74 69 6f 6e 09 2a 54  PE Foundation.*T
3fc0: 63 6c 4f 4f 47 65 74 46 6f 75 6e 64 61 74 69 6f  clOOGetFoundatio
3fd0: 6e 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  n(Tcl_Interp *in
3fe0: 74 65 72 70 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53  terp);. MODULE_S
3ff0: 43 4f 50 45 20 54 63 6c 5f 4f 62 6a 20 2a 09 54  COPE Tcl_Obj *.T
4000: 63 6c 4f 4f 47 65 74 46 77 64 46 72 6f 6d 4d 65  clOOGetFwdFromMe
4010: 74 68 6f 64 28 4d 65 74 68 6f 64 20 2a 6d 50 74  thod(Method *mPt
4020: 72 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50  r);. MODULE_SCOP
4030: 45 20 50 72 6f 63 20 2a 09 54 63 6c 4f 4f 47 65  E Proc *.TclOOGe
4040: 74 50 72 6f 63 46 72 6f 6d 4d 65 74 68 6f 64 28  tProcFromMethod(
4050: 4d 65 74 68 6f 64 20 2a 6d 50 74 72 29 3b 0a 2b  Method *mPtr);.+
4060: 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 54 63 6c  MODULE_SCOPE Tcl
4070: 5f 4f 62 6a 20 2a 09 54 63 6c 4f 4f 47 65 74 4d  _Obj *.TclOOGetM
4080: 65 74 68 6f 64 42 6f 64 79 28 4d 65 74 68 6f 64  ethodBody(Method
4090: 20 2a 6d 50 74 72 29 3b 0a 20 4d 4f 44 55 4c 45   *mPtr);. MODULE
40a0: 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 4f 4f  _SCOPE int.TclOO
40b0: 47 65 74 53 6f 72 74 65 64 43 6c 61 73 73 4d 65  GetSortedClassMe
40c0: 74 68 6f 64 4c 69 73 74 28 43 6c 61 73 73 20 2a  thodList(Class *
40d0: 63 6c 73 50 74 72 2c 0a 20 09 09 09 20 20 20 20  clsPtr,. ...    
40e0: 69 6e 74 20 66 6c 61 67 73 2c 20 63 6f 6e 73 74  int flags, const
40f0: 20 63 68 61 72 20 2a 2a 2a 73 74 72 69 6e 67 73   char ***strings
4100: 50 74 72 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43  Ptr);. MODULE_SC
4110: 4f 50 45 20 69 6e 74 09 54 63 6c 4f 4f 47 65 74  OPE int.TclOOGet
4120: 53 6f 72 74 65 64 4d 65 74 68 6f 64 4c 69 73 74  SortedMethodList
4130: 28 4f 62 6a 65 63 74 20 2a 6f 50 74 72 2c 20 69  (Object *oPtr, i
4140: 6e 74 20 66 6c 61 67 73 2c 0a 40 40 20 2d 35 30  nt flags,.@@ -50
4150: 33 2c 36 20 2b 35 30 39 2c 37 20 40 40 0a 20 09  3,6 +509,7 @@. .
4160: 09 09 20 20 20 20 43 6c 61 73 73 20 2a 73 75 70  ..    Class *sup
4170: 65 72 50 74 72 29 3b 0a 20 4d 4f 44 55 4c 45 5f  erPtr);. MODULE_
4180: 53 43 4f 50 45 20 76 6f 69 64 09 54 63 6c 4f 4f  SCOPE void.TclOO
4190: 53 74 61 73 68 43 6f 6e 74 65 78 74 28 54 63 6c  StashContext(Tcl
41a0: 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 2c 0a 20 09  _Obj *objPtr,. .
41b0: 09 09 20 20 20 20 43 61 6c 6c 43 6f 6e 74 65 78  ..    CallContex
41c0: 74 20 2a 63 6f 6e 74 65 78 74 50 74 72 29 3b 0a  t *contextPtr);.
41d0: 2b 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f  +MODULE_SCOPE vo
41e0: 69 64 09 54 63 6c 4f 4f 53 65 74 75 70 56 61 72  id.TclOOSetupVar
41f0: 69 61 62 6c 65 52 65 73 6f 6c 76 65 72 28 54 63  iableResolver(Tc
4200: 6c 5f 4e 61 6d 65 73 70 61 63 65 20 2a 6e 73 50  l_Namespace *nsP
4210: 74 72 29 3b 0a 20 0c 0a 20 2f 2a 0a 20 20 2a 20  tr);. .. /*.  * 
4220: 49 6e 63 6c 75 64 65 20 61 6c 6c 20 74 68 65 20  Include all the 
4230: 70 72 69 76 61 74 65 20 41 50 49 2c 20 67 65 6e  private API, gen
4240: 65 72 61 74 65 64 20 66 72 6f 6d 20 74 63 6c 4f  erated from tclO
4250: 4f 2e 64 65 63 6c 73 2e 0a 49 6e 64 65 78 3a 20  O.decls..Index: 
4260: 67 65 6e 65 72 69 63 2f 74 63 6c 4f 4f 4d 65 74  generic/tclOOMet
4270: 68 6f 64 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  hod.c.==========
4280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
42a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
42b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69  =========.RCS fi
42c0: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c  le: /cvsroot/tcl
42d0: 2f 6f 6f 63 6f 72 65 2f 67 65 6e 65 72 69 63 2f  /oocore/generic/
42e0: 74 63 6c 4f 4f 4d 65 74 68 6f 64 2e 63 2c 76 0a  tclOOMethod.c,v.
42f0: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73  retrieving revis
4300: 69 6f 6e 20 31 2e 32 35 0a 64 69 66 66 20 2d 77  ion 1.25.diff -w
4310: 20 2d 75 20 2d 72 31 2e 32 35 20 74 63 6c 4f 4f   -u -r1.25 tclOO
4320: 4d 65 74 68 6f 64 2e 63 0a 2d 2d 2d 20 67 65 6e  Method.c.--- gen
4330: 65 72 69 63 2f 74 63 6c 4f 4f 4d 65 74 68 6f 64  eric/tclOOMethod
4340: 2e 63 09 31 20 4a 75 6e 20 32 30 30 38 20 30 38  .c.1 Jun 2008 08
4350: 3a 30 35 3a 34 36 20 2d 30 30 30 30 09 31 2e 32  :05:46 -0000.1.2
4360: 35 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63  5.+++ generic/tc
4370: 6c 4f 4f 4d 65 74 68 6f 64 2e 63 09 32 38 20 4a  lOOMethod.c.28 J
4380: 75 6e 20 32 30 30 38 20 32 33 3a 32 33 3a 32 38  un 2008 23:23:28
4390: 20 2d 30 30 30 30 0a 40 40 20 2d 31 37 2c 36 20   -0000.@@ -17,6 
43a0: 2b 31 37 2c 31 32 20 40 40 0a 20 23 69 6e 63 6c  +17,12 @@. #incl
43b0: 75 64 65 20 22 74 63 6c 49 6e 74 2e 68 22 0a 20  ude "tclInt.h". 
43c0: 23 69 6e 63 6c 75 64 65 20 22 74 63 6c 4f 4f 49  #include "tclOOI
43d0: 6e 74 2e 68 22 0a 20 0a 2b 23 69 66 20 30 0a 2b  nt.h". .+#if 0.+
43e0: 23 64 65 66 69 6e 65 20 44 42 50 52 49 4e 54 28  #define DBPRINT(
43f0: 66 6f 72 6d 61 74 2c 20 2e 2e 2e 29 20 28 66 70  format, ...) (fp
4400: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 44  rintf(stderr, "D
4410: 45 42 55 47 3a 22 20 66 6f 72 6d 61 74 20 22 5c  EBUG:" format "\
4420: 6e 22 2c 20 5f 5f 56 41 5f 41 52 47 53 5f 5f 29  n", __VA_ARGS__)
4430: 29 0a 2b 23 65 6c 73 65 0a 2b 23 64 65 66 69 6e  ).+#else.+#defin
4440: 65 20 44 42 50 52 49 4e 54 28 66 6f 72 6d 61 74  e DBPRINT(format
4450: 2c 20 2e 2e 2e 29 20 28 28 76 6f 69 64 29 20 30  , ...) ((void) 0
4460: 29 0a 2b 23 65 6e 64 69 66 0a 2b 0a 20 2f 2a 0a  ).+#endif.+. /*.
4470: 20 20 2a 20 53 74 72 75 63 74 75 72 65 20 75 73    * Structure us
4480: 65 64 20 74 6f 20 68 65 6c 70 20 64 65 6c 61 79  ed to help delay
4490: 20 63 6f 6d 70 75 74 69 6e 67 20 6e 61 6d 65 73   computing names
44a0: 20 6f 66 20 6f 62 6a 65 63 74 73 20 6f 72 20 63   of objects or c
44b0: 6c 61 73 73 65 73 20 66 6f 72 0a 20 20 2a 20 5b  lasses for.  * [
44c0: 69 6e 66 6f 20 66 72 61 6d 65 5d 20 75 6e 74 69  info frame] unti
44d0: 6c 20 6e 65 65 64 65 64 2c 20 6d 61 6b 69 6e 67  l needed, making
44e0: 20 69 6e 76 6f 6b 61 74 69 6f 6e 20 66 61 73 74   invokation fast
44f0: 65 72 20 69 6e 20 74 68 65 20 6e 6f 72 6d 61 6c  er in the normal
4500: 20 63 61 73 65 2e 0a 40 40 20 2d 34 35 2c 36 20   case..@@ -45,6 
4510: 2b 35 31 2c 32 30 20 40 40 0a 20 7d 20 50 4d 46  +51,20 @@. } PMF
4520: 72 61 6d 65 44 61 74 61 3b 0a 20 0a 20 2f 2a 0a  rameData;. . /*.
4530: 2b 20 2a 20 53 74 72 75 63 74 75 72 65 20 75 73  + * Structure us
4540: 65 64 20 74 6f 20 70 61 73 73 20 69 6e 66 6f 72  ed to pass infor
4550: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 76 61 72  mation about var
4560: 69 61 62 6c 65 20 72 65 73 6f 6c 75 74 69 6f 6e  iable resolution
4570: 20 74 6f 20 74 68 65 0a 2b 20 2a 20 6f 6e 2d 74   to the.+ * on-t
4580: 68 65 2d 67 72 6f 75 6e 64 20 72 65 73 6f 6c 76  he-ground resolv
4590: 65 72 73 20 75 73 65 64 20 77 68 65 6e 20 77 6f  ers used when wo
45a0: 72 6b 69 6e 67 20 77 69 74 68 20 72 65 73 6f 6c  rking with resol
45b0: 76 65 64 20 63 6f 6d 70 69 6c 65 64 20 76 61 72  ved compiled var
45c0: 69 61 62 6c 65 73 2e 0a 2b 20 2a 2f 0a 2b 0a 2b  iables..+ */.+.+
45d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
45e0: 0a 2b 20 20 20 20 54 63 6c 5f 52 65 73 6f 6c 76  .+    Tcl_Resolv
45f0: 65 64 56 61 72 49 6e 66 6f 20 69 6e 66 6f 3b 09  edVarInfo info;.
4600: 2f 2a 20 22 54 79 70 65 22 20 69 6e 66 6f 72 6d  /* "Type" inform
4610: 61 74 69 6f 6e 20 73 6f 20 74 68 61 74 20 74 68  ation so that th
4620: 65 20 63 6f 6d 70 69 6c 65 64 0a 2b 09 09 09 09  e compiled.+....
4630: 20 2a 20 76 61 72 69 61 62 6c 65 20 63 61 6e 20   * variable can 
4640: 62 65 20 6c 69 6e 6b 65 64 20 74 6f 20 74 68 65  be linked to the
4650: 20 6e 61 6d 65 73 70 61 63 65 0a 2b 09 09 09 09   namespace.+....
4660: 20 2a 20 76 61 72 69 61 62 6c 65 20 61 74 20 74   * variable at t
4670: 68 65 20 72 69 67 68 74 20 74 69 6d 65 2e 20 2a  he right time. *
4680: 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  /.+    Tcl_Obj *
4690: 76 61 72 69 61 62 6c 65 4f 62 6a 3b 09 2f 2a 20  variableObj;./* 
46a0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
46b0: 76 61 72 69 61 62 6c 65 2e 20 2a 2f 0a 2b 20 20  variable. */.+  
46c0: 20 20 54 63 6c 5f 56 61 72 20 63 61 63 68 65 64    Tcl_Var cached
46d0: 4f 62 6a 65 63 74 56 61 72 3b 09 2f 2a 20 54 4f  ObjectVar;./* TO
46e0: 44 4f 3a 20 57 68 65 6e 20 74 6f 20 66 6c 75 73  DO: When to flus
46f0: 68 20 74 68 69 73 20 63 61 63 68 65 3f 20 43 61  h this cache? Ca
4700: 6e 20 63 6c 61 73 73 0a 2b 09 09 09 09 20 2a 20  n class.+.... * 
4710: 76 61 72 69 61 62 6c 65 73 20 62 65 20 63 61 63  variables be cac
4720: 68 65 64 3f 20 2a 2f 0a 2b 7d 20 4f 4f 52 65 73  hed? */.+} OORes
4730: 56 61 72 49 6e 66 6f 3b 0a 2b 0a 2b 2f 2a 0a 20  VarInfo;.+.+/*. 
4740: 20 2a 20 46 75 6e 63 74 69 6f 6e 20 64 65 63 6c   * Function decl
4750: 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 74 68 69  arations for thi
4760: 6e 67 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74  ngs defined in t
4770: 68 69 73 20 66 69 6c 65 2e 0a 20 20 2a 2f 0a 20  his file..  */. 
4780: 0a 40 40 20 2d 37 36 2c 36 20 2b 39 36 2c 31 33  .@@ -76,6 +96,13
4790: 20 40 40 0a 20 73 74 61 74 69 63 20 76 6f 69 64   @@. static void
47a0: 09 09 44 65 6c 65 74 65 46 6f 72 77 61 72 64 4d  ..DeleteForwardM
47b0: 65 74 68 6f 64 28 43 6c 69 65 6e 74 44 61 74 61  ethod(ClientData
47c0: 20 63 6c 69 65 6e 74 44 61 74 61 29 3b 0a 20 73   clientData);. s
47d0: 74 61 74 69 63 20 69 6e 74 09 09 43 6c 6f 6e 65  tatic int..Clone
47e0: 46 6f 72 77 61 72 64 4d 65 74 68 6f 64 28 54 63  ForwardMethod(Tc
47f0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
4800: 2c 0a 20 09 09 09 20 20 20 20 43 6c 69 65 6e 74  ,. ...    Client
4810: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
4820: 20 43 6c 69 65 6e 74 44 61 74 61 20 2a 6e 65 77   ClientData *new
4830: 43 6c 69 65 6e 74 44 61 74 61 29 3b 0a 2b 73 74  ClientData);.+st
4840: 61 74 69 63 20 69 6e 74 09 09 50 72 6f 63 65 64  atic int..Proced
4850: 75 72 65 4d 65 74 68 6f 64 56 61 72 52 65 73 6f  ureMethodVarReso
4860: 6c 76 65 72 28 54 63 6c 5f 49 6e 74 65 72 70 20  lver(Tcl_Interp 
4870: 2a 69 6e 74 65 72 70 2c 0a 2b 09 09 09 20 20 20  *interp,.+...   
4880: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 61 72   const char *var
4890: 4e 61 6d 65 2c 20 54 63 6c 5f 4e 61 6d 65 73 70  Name, Tcl_Namesp
48a0: 61 63 65 20 2a 63 6f 6e 74 65 78 74 4e 73 2c 0a  ace *contextNs,.
48b0: 2b 09 09 09 20 20 20 20 69 6e 74 20 66 6c 61 67  +...    int flag
48c0: 73 2c 20 54 63 6c 5f 56 61 72 20 2a 76 61 72 50  s, Tcl_Var *varP
48d0: 74 72 29 3b 0a 2b 73 74 61 74 69 63 20 69 6e 74  tr);.+static int
48e0: 09 09 50 72 6f 63 65 64 75 72 65 4d 65 74 68 6f  ..ProcedureMetho
48f0: 64 43 6f 6d 70 69 6c 65 64 56 61 72 52 65 73 6f  dCompiledVarReso
4900: 6c 76 65 72 28 54 63 6c 5f 49 6e 74 65 72 70 20  lver(Tcl_Interp 
4910: 2a 69 6e 74 65 72 70 2c 0a 2b 09 09 09 20 20 20  *interp,.+...   
4920: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 61 72   const char *var
4930: 4e 61 6d 65 2c 20 69 6e 74 20 6c 65 6e 67 74 68  Name, int length
4940: 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f 4e 61  ,.+...    Tcl_Na
4950: 6d 65 73 70 61 63 65 20 2a 63 6f 6e 74 65 78 74  mespace *context
4960: 4e 73 2c 0a 2b 09 09 09 20 20 20 20 54 63 6c 5f  Ns,.+...    Tcl_
4970: 52 65 73 6f 6c 76 65 64 56 61 72 49 6e 66 6f 20  ResolvedVarInfo 
4980: 2a 2a 72 50 74 72 50 74 72 29 3b 0a 20 0a 20 2f  **rPtrPtr);. . /
4990: 2a 0a 20 20 2a 20 54 68 65 20 74 79 70 65 73 20  *.  * The types 
49a0: 6f 66 20 6d 65 74 68 6f 64 73 20 64 65 66 69 6e  of methods defin
49b0: 65 64 20 62 79 20 74 68 65 20 63 6f 72 65 20 4f  ed by the core O
49c0: 4f 20 73 79 73 74 65 6d 2e 0a 40 40 20 2d 39 31  O system..@@ -91
49d0: 2c 36 20 2b 31 31 38 2c 31 35 20 40 40 0a 20 7d  ,6 +118,15 @@. }
49e0: 3b 0a 20 0c 0a 20 2f 2a 0a 2b 20 2a 20 48 65 6c  ;. .. /*.+ * Hel
49f0: 70 65 72 20 6d 61 63 72 6f 73 20 28 64 65 72 69  per macros (deri
4a00: 76 65 64 20 66 72 6f 6d 20 74 68 69 6e 67 73 20  ved from things 
4a10: 70 72 69 76 61 74 65 20 74 6f 20 74 63 6c 56 61  private to tclVa
4a20: 72 2e 63 29 0a 2b 20 2a 2f 0a 2b 0a 2b 23 64 65  r.c).+ */.+.+#de
4a30: 66 69 6e 65 20 54 63 6c 56 61 72 54 61 62 6c 65  fine TclVarTable
4a40: 28 63 6f 6e 74 65 78 74 4e 73 29 20 5c 0a 2b 20  (contextNs) \.+ 
4a50: 20 20 20 28 28 54 63 6c 5f 48 61 73 68 54 61 62     ((Tcl_HashTab
4a60: 6c 65 20 2a 29 20 28 26 28 28 4e 61 6d 65 73 70  le *) (&((Namesp
4a70: 61 63 65 20 2a 29 20 28 63 6f 6e 74 65 78 74 4e  ace *) (contextN
4a80: 73 29 29 2d 3e 76 61 72 54 61 62 6c 65 29 29 0a  s))->varTable)).
4a90: 2b 23 64 65 66 69 6e 65 20 54 63 6c 56 61 72 48  +#define TclVarH
4aa0: 61 73 68 47 65 74 56 61 6c 75 65 28 68 50 74 72  ashGetValue(hPtr
4ab0: 29 20 5c 0a 2b 20 20 20 20 28 28 54 63 6c 5f 56  ) \.+    ((Tcl_V
4ac0: 61 72 29 20 28 28 63 68 61 72 20 2a 29 68 50 74  ar) ((char *)hPt
4ad0: 72 20 2d 20 54 63 6c 4f 66 66 73 65 74 28 56 61  r - TclOffset(Va
4ae0: 72 49 6e 48 61 73 68 2c 20 65 6e 74 72 79 29 29  rInHash, entry))
4af0: 29 0a 2b 0c 0a 2b 2f 2a 0a 20 20 2a 20 2d 2d 2d  ).+..+/*.  * ---
4b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b40: 2d 2d 2d 0a 20 20 2a 0a 20 20 2a 20 54 63 6c 5f  ---.  *.  * Tcl_
4b50: 4e 65 77 49 6e 73 74 61 6e 63 65 4d 65 74 68 6f  NewInstanceMetho
4b60: 64 20 2d 2d 0a 40 40 20 2d 33 31 34 2c 36 20 2b  d --.@@ -314,6 +
4b70: 33 35 30 2c 37 20 40 40 0a 20 20 20 20 20 70 6d  350,7 @@.     pm
4b80: 50 74 72 2d 3e 76 65 72 73 69 6f 6e 20 3d 20 54  Ptr->version = T
4b90: 43 4c 4f 4f 5f 50 52 4f 43 45 44 55 52 45 5f 4d  CLOO_PROCEDURE_M
4ba0: 45 54 48 4f 44 5f 56 45 52 53 49 4f 4e 3b 0a 20  ETHOD_VERSION;. 
4bb0: 20 20 20 20 70 6d 50 74 72 2d 3e 66 6c 61 67 73      pmPtr->flags
4bc0: 20 3d 20 66 6c 61 67 73 20 26 20 55 53 45 5f 44   = flags & USE_D
4bd0: 45 43 4c 41 52 45 52 5f 4e 53 3b 0a 20 20 20 20  ECLARER_NS;.    
4be0: 20 70 6d 50 74 72 2d 3e 72 65 66 43 6f 75 6e 74   pmPtr->refCount
4bf0: 20 3d 20 31 3b 0a 2b 0a 20 20 20 20 20 6d 65 74   = 1;.+.     met
4c00: 68 6f 64 20 3d 20 54 63 6c 4f 4f 4d 61 6b 65 50  hod = TclOOMakeP
4c10: 72 6f 63 49 6e 73 74 61 6e 63 65 4d 65 74 68 6f  rocInstanceMetho
4c20: 64 28 69 6e 74 65 72 70 2c 20 6f 50 74 72 2c 20  d(interp, oPtr, 
4c30: 66 6c 61 67 73 2c 20 6e 61 6d 65 4f 62 6a 2c 0a  flags, nameObj,.
4c40: 20 09 20 20 20 20 61 72 67 73 4f 62 6a 2c 20 62   .    argsObj, b
4c50: 6f 64 79 4f 62 6a 2c 20 26 70 72 6f 63 4d 65 74  odyObj, &procMet
4c60: 68 6f 64 54 79 70 65 2c 20 70 6d 50 74 72 2c 20  hodType, pmPtr, 
4c70: 26 70 6d 50 74 72 2d 3e 70 72 6f 63 50 74 72 29  &pmPtr->procPtr)
4c80: 3b 0a 20 20 20 20 20 69 66 20 28 6d 65 74 68 6f  ;.     if (metho
4c90: 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 40 40 20  d == NULL) {.@@ 
4ca0: 2d 33 37 35 2c 39 20 2b 34 31 32 2c 38 20 40 40  -375,9 +412,8 @@
4cb0: 0a 20 20 20 20 20 70 6d 50 74 72 2d 3e 66 6c 61  .     pmPtr->fla
4cc0: 67 73 20 3d 20 66 6c 61 67 73 20 26 20 55 53 45  gs = flags & USE
4cd0: 5f 44 45 43 4c 41 52 45 52 5f 4e 53 3b 0a 20 20  _DECLARER_NS;.  
4ce0: 20 20 20 70 6d 50 74 72 2d 3e 72 65 66 43 6f 75     pmPtr->refCou
4cf0: 6e 74 20 3d 20 31 3b 0a 20 0a 2d 20 20 20 20 6d  nt = 1;. .-    m
4d00: 65 74 68 6f 64 20 3d 20 54 63 6c 4f 4f 4d 61 6b  ethod = TclOOMak
4d10: 65 50 72 6f 63 4d 65 74 68 6f 64 28 69 6e 74 65  eProcMethod(inte
4d20: 72 70 2c 20 63 6c 73 50 74 72 2c 20 66 6c 61 67  rp, clsPtr, flag
4d30: 73 2c 20 6e 61 6d 65 4f 62 6a 2c 0a 2d 09 20 20  s, nameObj,.-.  
4d40: 20 20 70 72 6f 63 4e 61 6d 65 2c 20 61 72 67 73    procName, args
4d50: 4f 62 6a 2c 20 62 6f 64 79 4f 62 6a 2c 20 26 70  Obj, bodyObj, &p
4d60: 72 6f 63 4d 65 74 68 6f 64 54 79 70 65 2c 20 70  rocMethodType, p
4d70: 6d 50 74 72 2c 0a 2d 09 20 20 20 20 26 70 6d 50  mPtr,.-.    &pmP
4d80: 74 72 2d 3e 70 72 6f 63 50 74 72 29 3b 0a 2b 20  tr->procPtr);.+ 
4d90: 20 20 20 6d 65 74 68 6f 64 20 3d 20 54 63 6c 4f     method = TclO
4da0: 4f 4d 61 6b 65 50 72 6f 63 4d 65 74 68 6f 64 28  OMakeProcMethod(
4db0: 69 6e 74 65 72 70 2c 20 63 6c 73 50 74 72 2c 20  interp, clsPtr, 
4dc0: 66 6c 61 67 73 2c 20 6e 61 6d 65 4f 62 6a 2c 20  flags, nameObj, 
4dd0: 70 72 6f 63 4e 61 6d 65 2c 0a 2b 09 20 20 20 20  procName,.+.    
4de0: 61 72 67 73 4f 62 6a 2c 20 62 6f 64 79 4f 62 6a  argsObj, bodyObj
4df0: 2c 20 26 70 72 6f 63 4d 65 74 68 6f 64 54 79 70  , &procMethodTyp
4e00: 65 2c 20 70 6d 50 74 72 2c 20 26 70 6d 50 74 72  e, pmPtr, &pmPtr
4e10: 2d 3e 70 72 6f 63 50 74 72 29 3b 0a 20 0a 20 20  ->procPtr);. .  
4e20: 20 20 20 69 66 20 28 61 72 67 73 4c 65 6e 20 3d     if (argsLen =
4e30: 3d 20 2d 31 29 20 7b 0a 20 09 54 63 6c 5f 44 65  = -1) {. .Tcl_De
4e40: 63 72 52 65 66 43 6f 75 6e 74 28 61 72 67 73 4f  crRefCount(argsO
4e50: 62 6a 29 3b 0a 40 40 20 2d 38 33 33 2c 36 20 2b  bj);.@@ -833,6 +
4e60: 38 36 39 2c 31 37 32 20 40 40 0a 20 2f 2a 0a 20  869,172 @@. /*. 
4e70: 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   * -------------
4e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b 20  ---------.  *.+ 
4ec0: 2a 20 54 63 6c 4f 4f 53 65 74 75 70 56 61 72 69  * TclOOSetupVari
4ed0: 61 62 6c 65 52 65 73 6f 6c 76 65 72 2c 20 65 74  ableResolver, et
4ee0: 63 2e 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 56 61  c. --.+ *.+ *.Va
4ef0: 72 69 61 62 6c 65 20 72 65 73 6f 6c 75 74 69 6f  riable resolutio
4f00: 6e 20 65 6e 67 69 6e 65 20 75 73 65 64 20 74 6f  n engine used to
4f10: 20 63 6f 6e 6e 65 63 74 20 64 65 63 6c 61 72 65   connect declare
4f20: 64 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 6c  d variables to l
4f30: 6f 63 61 6c 0a 2b 20 2a 09 76 61 72 69 61 62 6c  ocal.+ *.variabl
4f40: 65 73 20 75 73 65 64 20 69 6e 20 6d 65 74 68 6f  es used in metho
4f50: 64 73 2e 20 54 68 65 20 63 6f 6d 70 69 6c 65 64  ds. The compiled
4f60: 20 76 61 72 69 61 62 6c 65 20 72 65 73 6f 6c 76   variable resolv
4f70: 65 72 20 69 73 20 6d 6f 72 65 0a 2b 20 2a 09 69  er is more.+ *.i
4f80: 6d 70 6f 72 74 61 6e 74 2c 20 62 75 74 20 62 6f  mportant, but bo
4f90: 74 68 20 61 72 65 20 6e 65 65 64 65 64 20 61 73  th are needed as
4fa0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
4fb0: 74 6f 20 68 61 76 65 20 61 20 76 61 72 69 61 62  to have a variab
4fc0: 6c 65 0a 2b 20 2a 09 74 68 61 74 20 69 73 20 6f  le.+ *.that is o
4fd0: 6e 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  nly referred to 
4fe0: 69 6e 20 77 61 79 73 20 74 68 61 74 20 61 72 65  in ways that are
4ff0: 6e 27 74 20 63 6f 6d 70 69 6c 61 62 6c 65 20 61  n't compilable a
5000: 6e 64 20 77 65 20 63 61 6e 27 74 0a 2b 20 2a 09  nd we can't.+ *.
5010: 66 6f 72 63 65 20 4c 56 54 20 70 72 65 73 65 6e  force LVT presen
5020: 63 65 2e 20 5b 54 49 50 20 23 33 32 30 5d 0a 2b  ce. [TIP #320].+
5030: 20 2a 0a 2b 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   *.+ * ---------
5040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20  -------------.+ 
5080: 2a 2f 0a 2b 0a 2b 76 6f 69 64 0a 2b 54 63 6c 4f  */.+.+void.+TclO
5090: 4f 53 65 74 75 70 56 61 72 69 61 62 6c 65 52 65  OSetupVariableRe
50a0: 73 6f 6c 76 65 72 28 0a 2b 20 20 20 20 54 63 6c  solver(.+    Tcl
50b0: 5f 4e 61 6d 65 73 70 61 63 65 20 2a 6e 73 50 74  _Namespace *nsPt
50c0: 72 29 0a 2b 7b 0a 2b 20 20 20 20 54 63 6c 5f 52  r).+{.+    Tcl_R
50d0: 65 73 6f 6c 76 65 72 49 6e 66 6f 20 69 6e 66 6f  esolverInfo info
50e0: 3b 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 47 65 74  ;.+.+    Tcl_Get
50f0: 4e 61 6d 65 73 70 61 63 65 52 65 73 6f 6c 76 65  NamespaceResolve
5100: 72 73 28 6e 73 50 74 72 2c 20 26 69 6e 66 6f 29  rs(nsPtr, &info)
5110: 3b 0a 2b 20 20 20 20 69 66 20 28 69 6e 66 6f 2e  ;.+    if (info.
5120: 63 6f 6d 70 69 6c 65 64 56 61 72 52 65 73 50 72  compiledVarResPr
5130: 6f 63 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09  oc == NULL) {.+.
5140: 54 63 6c 5f 53 65 74 4e 61 6d 65 73 70 61 63 65  Tcl_SetNamespace
5150: 52 65 73 6f 6c 76 65 72 73 28 6e 73 50 74 72 2c  Resolvers(nsPtr,
5160: 20 4e 55 4c 4c 2c 20 50 72 6f 63 65 64 75 72 65   NULL, Procedure
5170: 4d 65 74 68 6f 64 56 61 72 52 65 73 6f 6c 76 65  MethodVarResolve
5180: 72 2c 0a 2b 09 09 50 72 6f 63 65 64 75 72 65 4d  r,.+..ProcedureM
5190: 65 74 68 6f 64 43 6f 6d 70 69 6c 65 64 56 61 72  ethodCompiledVar
51a0: 52 65 73 6f 6c 76 65 72 29 3b 0a 2b 20 20 20 20  Resolver);.+    
51b0: 7d 0a 2b 7d 0a 2b 0a 2b 73 74 61 74 69 63 20 69  }.+}.+.+static i
51c0: 6e 74 0a 2b 50 72 6f 63 65 64 75 72 65 4d 65 74  nt.+ProcedureMet
51d0: 68 6f 64 56 61 72 52 65 73 6f 6c 76 65 72 28 0a  hodVarResolver(.
51e0: 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  +    Tcl_Interp 
51f0: 2a 69 6e 74 65 72 70 2c 0a 2b 20 20 20 20 63 6f  *interp,.+    co
5200: 6e 73 74 20 63 68 61 72 20 2a 76 61 72 4e 61 6d  nst char *varNam
5210: 65 2c 0a 2b 20 20 20 20 54 63 6c 5f 4e 61 6d 65  e,.+    Tcl_Name
5220: 73 70 61 63 65 20 2a 63 6f 6e 74 65 78 74 4e 73  space *contextNs
5230: 2c 0a 2b 20 20 20 20 69 6e 74 20 66 6c 61 67 73  ,.+    int flags
5240: 2c 0a 2b 20 20 20 20 54 63 6c 5f 56 61 72 20 2a  ,.+    Tcl_Var *
5250: 76 61 72 50 74 72 29 0a 2b 7b 0a 2b 20 20 20 20  varPtr).+{.+    
5260: 49 6e 74 65 72 70 20 2a 69 50 74 72 20 3d 20 28  Interp *iPtr = (
5270: 49 6e 74 65 72 70 20 2a 29 20 69 6e 74 65 72 70  Interp *) interp
5280: 3b 0a 2b 20 20 20 20 43 61 6c 6c 46 72 61 6d 65  ;.+    CallFrame
5290: 20 2a 66 72 61 6d 65 50 74 72 20 3d 20 69 50 74   *framePtr = iPt
52a0: 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72 3b 0a  r->varFramePtr;.
52b0: 2b 20 20 20 20 43 61 6c 6c 43 6f 6e 74 65 78 74  +    CallContext
52c0: 20 2a 63 6f 6e 74 65 78 74 50 74 72 3b 0a 2b 20   *contextPtr;.+ 
52d0: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 72 69     Tcl_Obj *vari
52e0: 61 62 6c 65 4f 62 6a 3b 0a 2b 20 20 20 20 54 63  ableObj;.+    Tc
52f0: 6c 5f 48 61 73 68 45 6e 74 72 79 20 2a 68 50 74  l_HashEntry *hPt
5300: 72 3b 0a 2b 20 20 20 20 69 6e 74 20 69 2c 20 69  r;.+    int i, i
5310: 73 4e 65 77 3b 0a 2b 0a 2b 20 20 20 20 69 66 20  sNew;.+.+    if 
5320: 28 66 72 61 6d 65 50 74 72 20 3d 3d 20 4e 55 4c  (framePtr == NUL
5330: 4c 20 7c 7c 20 21 28 66 72 61 6d 65 50 74 72 2d  L || !(framePtr-
5340: 3e 69 73 50 72 6f 63 43 61 6c 6c 46 72 61 6d 65  >isProcCallFrame
5350: 20 26 20 46 52 41 4d 45 5f 49 53 5f 4d 45 54 48   & FRAME_IS_METH
5360: 4f 44 29 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20  OD)) {.+.return 
5370: 54 43 4c 5f 43 4f 4e 54 49 4e 55 45 3b 0a 2b 20  TCL_CONTINUE;.+ 
5380: 20 20 20 7d 0a 2b 20 20 20 20 63 6f 6e 74 65 78     }.+    contex
5390: 74 50 74 72 20 3d 20 66 72 61 6d 65 50 74 72 2d  tPtr = framePtr-
53a0: 3e 63 6c 69 65 6e 74 44 61 74 61 3b 0a 2b 0a 2b  >clientData;.+.+
53b0: 20 20 20 20 69 66 20 28 63 6f 6e 74 65 78 74 50      if (contextP
53c0: 74 72 2d 3e 63 61 6c 6c 50 74 72 2d 3e 63 68 61  tr->callPtr->cha
53d0: 69 6e 5b 63 6f 6e 74 65 78 74 50 74 72 2d 3e 69  in[contextPtr->i
53e0: 6e 64 65 78 5d 0a 2b 09 20 20 20 20 2e 6d 50 74  ndex].+.    .mPt
53f0: 72 2d 3e 64 65 63 6c 61 72 69 6e 67 43 6c 61 73  r->declaringClas
5400: 73 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  sPtr != NULL) {.
5410: 2b 09 46 4f 52 45 41 43 48 28 76 61 72 69 61 62  +.FOREACH(variab
5420: 6c 65 4f 62 6a 2c 20 63 6f 6e 74 65 78 74 50 74  leObj, contextPt
5430: 72 2d 3e 63 61 6c 6c 50 74 72 2d 3e 63 68 61 69  r->callPtr->chai
5440: 6e 5b 63 6f 6e 74 65 78 74 50 74 72 2d 3e 69 6e  n[contextPtr->in
5450: 64 65 78 5d 0a 2b 09 09 2e 6d 50 74 72 2d 3e 64  dex].+...mPtr->d
5460: 65 63 6c 61 72 69 6e 67 43 6c 61 73 73 50 74 72  eclaringClassPtr
5470: 2d 3e 76 61 72 69 61 62 6c 65 73 29 20 7b 0a 2b  ->variables) {.+
5480: 09 20 20 20 20 69 66 20 28 21 73 74 72 63 6d 70  .    if (!strcmp
5490: 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 76  (Tcl_GetString(v
54a0: 61 72 69 61 62 6c 65 4f 62 6a 29 2c 20 76 61 72  ariableObj), var
54b0: 4e 61 6d 65 29 29 20 7b 0a 2b 09 09 67 6f 74 6f  Name)) {.+..goto
54c0: 20 67 6f 74 4d 61 74 63 68 3b 0a 2b 09 20 20 20   gotMatch;.+.   
54d0: 20 7d 0a 2b 09 7d 0a 2b 09 72 65 74 75 72 6e 20   }.+.}.+.return 
54e0: 54 43 4c 5f 43 4f 4e 54 49 4e 55 45 3b 0a 2b 20  TCL_CONTINUE;.+ 
54f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 46 4f     } else {.+.FO
5500: 52 45 41 43 48 28 76 61 72 69 61 62 6c 65 4f 62  REACH(variableOb
5510: 6a 2c 20 63 6f 6e 74 65 78 74 50 74 72 2d 3e 6f  j, contextPtr->o
5520: 50 74 72 2d 3e 76 61 72 69 61 62 6c 65 73 29 20  Ptr->variables) 
5530: 7b 0a 2b 09 20 20 20 20 69 66 20 28 21 73 74 72  {.+.    if (!str
5540: 63 6d 70 28 54 63 6c 5f 47 65 74 53 74 72 69 6e  cmp(Tcl_GetStrin
5550: 67 28 76 61 72 69 61 62 6c 65 4f 62 6a 29 2c 20  g(variableObj), 
5560: 76 61 72 4e 61 6d 65 29 29 20 7b 0a 2b 09 09 67  varName)) {.+..g
5570: 6f 74 6f 20 67 6f 74 4d 61 74 63 68 3b 0a 2b 09  oto gotMatch;.+.
5580: 20 20 20 20 7d 0a 2b 09 7d 0a 2b 09 72 65 74 75      }.+.}.+.retu
5590: 72 6e 20 54 43 4c 5f 43 4f 4e 54 49 4e 55 45 3b  rn TCL_CONTINUE;
55a0: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 67 6f 74  .+    }.+.+  got
55b0: 4d 61 74 63 68 3a 0a 2b 20 20 20 20 68 50 74 72  Match:.+    hPtr
55c0: 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 48 61 73   = Tcl_CreateHas
55d0: 68 45 6e 74 72 79 28 54 63 6c 56 61 72 54 61 62  hEntry(TclVarTab
55e0: 6c 65 28 63 6f 6e 74 65 78 74 4e 73 29 2c 20 28  le(contextNs), (
55f0: 63 68 61 72 20 2a 29 20 76 61 72 69 61 62 6c 65  char *) variable
5600: 4f 62 6a 2c 0a 2b 09 20 20 20 20 26 69 73 4e 65  Obj,.+.    &isNe
5610: 77 29 3b 0a 2b 20 20 20 20 69 66 20 28 69 73 4e  w);.+    if (isN
5620: 65 77 29 20 7b 0a 2b 09 54 63 6c 53 65 74 56 61  ew) {.+.TclSetVa
5630: 72 4e 61 6d 65 73 70 61 63 65 56 61 72 28 28 56  rNamespaceVar((V
5640: 61 72 20 2a 29 20 54 63 6c 56 61 72 48 61 73 68  ar *) TclVarHash
5650: 47 65 74 56 61 6c 75 65 28 68 50 74 72 29 29 3b  GetValue(hPtr));
5660: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 2a 76 61  .+    }.+    *va
5670: 72 50 74 72 20 3d 20 54 63 6c 56 61 72 48 61 73  rPtr = TclVarHas
5680: 68 47 65 74 56 61 6c 75 65 28 68 50 74 72 29 3b  hGetValue(hPtr);
5690: 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  .+    return TCL
56a0: 5f 4f 4b 3b 0a 2b 7d 0a 2b 0a 2b 73 74 61 74 69  _OK;.+}.+.+stati
56b0: 63 20 54 63 6c 5f 56 61 72 0a 2b 50 4d 43 56 43  c Tcl_Var.+PMCVC
56c0: 6f 6e 6e 65 63 74 28 0a 2b 20 20 20 20 54 63 6c  onnect(.+    Tcl
56d0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
56e0: 0a 2b 20 20 20 20 54 63 6c 5f 52 65 73 6f 6c 76  .+    Tcl_Resolv
56f0: 65 64 56 61 72 49 6e 66 6f 20 2a 72 50 74 72 29  edVarInfo *rPtr)
5700: 0a 2b 7b 0a 2b 20 20 20 20 4f 4f 52 65 73 56 61  .+{.+    OOResVa
5710: 72 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 20 3d  rInfo *infoPtr =
5720: 20 28 4f 4f 52 65 73 56 61 72 49 6e 66 6f 20 2a   (OOResVarInfo *
5730: 29 20 72 50 74 72 3b 0a 2b 20 20 20 20 49 6e 74  ) rPtr;.+    Int
5740: 65 72 70 20 2a 69 50 74 72 20 3d 20 28 49 6e 74  erp *iPtr = (Int
5750: 65 72 70 20 2a 29 20 69 6e 74 65 72 70 3b 0a 2b  erp *) interp;.+
5760: 20 20 20 20 43 61 6c 6c 46 72 61 6d 65 20 2a 66      CallFrame *f
5770: 72 61 6d 65 50 74 72 20 3d 20 69 50 74 72 2d 3e  ramePtr = iPtr->
5780: 76 61 72 46 72 61 6d 65 50 74 72 3b 0a 2b 20 20  varFramePtr;.+  
5790: 20 20 43 61 6c 6c 43 6f 6e 74 65 78 74 20 2a 63    CallContext *c
57a0: 6f 6e 74 65 78 74 50 74 72 3b 0a 2b 20 20 20 20  ontextPtr;.+    
57b0: 54 63 6c 5f 4f 62 6a 20 2a 76 61 72 69 61 62 6c  Tcl_Obj *variabl
57c0: 65 4f 62 6a 3b 0a 2b 20 20 20 20 54 63 6c 5f 48  eObj;.+    Tcl_H
57d0: 61 73 68 45 6e 74 72 79 20 2a 68 50 74 72 3b 0a  ashEntry *hPtr;.
57e0: 2b 20 20 20 20 69 6e 74 20 69 2c 20 69 73 4e 65  +    int i, isNe
57f0: 77 2c 20 63 61 63 68 65 49 74 3b 0a 2b 20 20 20  w, cacheIt;.+   
5800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 61 72   const char *var
5810: 4e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  Name = Tcl_GetSt
5820: 72 69 6e 67 28 69 6e 66 6f 50 74 72 2d 3e 76 61  ring(infoPtr->va
5830: 72 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b 0a 2b 20  riableObj);.+.+ 
5840: 20 20 20 69 66 20 28 66 72 61 6d 65 50 74 72 20     if (framePtr 
5850: 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 21 28 66 72 61  == NULL || !(fra
5860: 6d 65 50 74 72 2d 3e 69 73 50 72 6f 63 43 61 6c  mePtr->isProcCal
5870: 6c 46 72 61 6d 65 20 26 20 46 52 41 4d 45 5f 49  lFrame & FRAME_I
5880: 53 5f 4d 45 54 48 4f 44 29 29 20 7b 0a 2b 09 72  S_METHOD)) {.+.r
5890: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b 20 20 20  eturn NULL;.+   
58a0: 20 7d 0a 2b 20 20 20 20 63 6f 6e 74 65 78 74 50   }.+    contextP
58b0: 74 72 20 3d 20 66 72 61 6d 65 50 74 72 2d 3e 63  tr = framePtr->c
58c0: 6c 69 65 6e 74 44 61 74 61 3b 0a 2b 0a 2b 20 20  lientData;.+.+  
58d0: 20 20 69 66 20 28 69 6e 66 6f 50 74 72 2d 3e 63    if (infoPtr->c
58e0: 61 63 68 65 64 4f 62 6a 65 63 74 56 61 72 29 20  achedObjectVar) 
58f0: 7b 0a 2b 09 72 65 74 75 72 6e 20 69 6e 66 6f 50  {.+.return infoP
5900: 74 72 2d 3e 63 61 63 68 65 64 4f 62 6a 65 63 74  tr->cachedObject
5910: 56 61 72 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20  Var;.+    }.+.+ 
5920: 20 20 20 69 66 20 28 63 6f 6e 74 65 78 74 50 74     if (contextPt
5930: 72 2d 3e 63 61 6c 6c 50 74 72 2d 3e 63 68 61 69  r->callPtr->chai
5940: 6e 5b 63 6f 6e 74 65 78 74 50 74 72 2d 3e 69 6e  n[contextPtr->in
5950: 64 65 78 5d 0a 2b 09 20 20 20 20 2e 6d 50 74 72  dex].+.    .mPtr
5960: 2d 3e 64 65 63 6c 61 72 69 6e 67 43 6c 61 73 73  ->declaringClass
5970: 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b  Ptr != NULL) {.+
5980: 09 46 4f 52 45 41 43 48 28 76 61 72 69 61 62 6c  .FOREACH(variabl
5990: 65 4f 62 6a 2c 20 63 6f 6e 74 65 78 74 50 74 72  eObj, contextPtr
59a0: 2d 3e 63 61 6c 6c 50 74 72 2d 3e 63 68 61 69 6e  ->callPtr->chain
59b0: 5b 63 6f 6e 74 65 78 74 50 74 72 2d 3e 69 6e 64  [contextPtr->ind
59c0: 65 78 5d 0a 2b 09 09 2e 6d 50 74 72 2d 3e 64 65  ex].+...mPtr->de
59d0: 63 6c 61 72 69 6e 67 43 6c 61 73 73 50 74 72 2d  claringClassPtr-
59e0: 3e 76 61 72 69 61 62 6c 65 73 29 20 7b 0a 2b 09  >variables) {.+.
59f0: 20 20 20 20 69 66 20 28 21 73 74 72 63 6d 70 28      if (!strcmp(
5a00: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 76 61  Tcl_GetString(va
5a10: 72 69 61 62 6c 65 4f 62 6a 29 2c 20 76 61 72 4e  riableObj), varN
5a20: 61 6d 65 29 29 20 7b 0a 2b 09 09 63 61 63 68 65  ame)) {.+..cache
5a30: 49 74 20 3d 20 30 3b 0a 2b 09 09 67 6f 74 6f 20  It = 0;.+..goto 
5a40: 67 6f 74 4d 61 74 63 68 3b 0a 2b 09 20 20 20 20  gotMatch;.+.    
5a50: 7d 0a 2b 09 7d 0a 2b 20 20 20 20 7d 20 65 6c 73  }.+.}.+    } els
5a60: 65 20 7b 0a 2b 09 46 4f 52 45 41 43 48 28 76 61  e {.+.FOREACH(va
5a70: 72 69 61 62 6c 65 4f 62 6a 2c 20 63 6f 6e 74 65  riableObj, conte
5a80: 78 74 50 74 72 2d 3e 6f 50 74 72 2d 3e 76 61 72  xtPtr->oPtr->var
5a90: 69 61 62 6c 65 73 29 20 7b 0a 2b 09 20 20 20 20  iables) {.+.    
5aa0: 69 66 20 28 21 73 74 72 63 6d 70 28 54 63 6c 5f  if (!strcmp(Tcl_
5ab0: 47 65 74 53 74 72 69 6e 67 28 76 61 72 69 61 62  GetString(variab
5ac0: 6c 65 4f 62 6a 29 2c 20 76 61 72 4e 61 6d 65 29  leObj), varName)
5ad0: 29 20 7b 0a 2b 09 09 63 61 63 68 65 49 74 20 3d  ) {.+..cacheIt =
5ae0: 20 31 3b 0a 2b 09 09 67 6f 74 6f 20 67 6f 74 4d   1;.+..goto gotM
5af0: 61 74 63 68 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09  atch;.+.    }.+.
5b00: 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 72 65  }.+    }.+    re
5b10: 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b 0a 2b 20 20  turn NULL;.+.+  
5b20: 67 6f 74 4d 61 74 63 68 3a 0a 2b 20 20 20 20 68  gotMatch:.+    h
5b30: 50 74 72 20 3d 20 54 63 6c 5f 43 72 65 61 74 65  Ptr = Tcl_Create
5b40: 48 61 73 68 45 6e 74 72 79 28 54 63 6c 56 61 72  HashEntry(TclVar
5b50: 54 61 62 6c 65 28 63 6f 6e 74 65 78 74 50 74 72  Table(contextPtr
5b60: 2d 3e 6f 50 74 72 2d 3e 6e 61 6d 65 73 70 61 63  ->oPtr->namespac
5b70: 65 50 74 72 29 2c 0a 2b 09 20 20 20 20 28 63 68  ePtr),.+.    (ch
5b80: 61 72 20 2a 29 20 76 61 72 69 61 62 6c 65 4f 62  ar *) variableOb
5b90: 6a 2c 20 26 69 73 4e 65 77 29 3b 0a 2b 20 20 20  j, &isNew);.+   
5ba0: 20 69 66 20 28 69 73 4e 65 77 29 20 7b 0a 2b 09   if (isNew) {.+.
5bb0: 54 63 6c 53 65 74 56 61 72 4e 61 6d 65 73 70 61  TclSetVarNamespa
5bc0: 63 65 56 61 72 28 28 56 61 72 20 2a 29 20 54 63  ceVar((Var *) Tc
5bd0: 6c 56 61 72 48 61 73 68 47 65 74 56 61 6c 75 65  lVarHashGetValue
5be0: 28 68 50 74 72 29 29 3b 0a 2b 20 20 20 20 7d 0a  (hPtr));.+    }.
5bf0: 2b 20 20 20 20 69 66 20 28 63 61 63 68 65 49 74  +    if (cacheIt
5c00: 29 20 7b 0a 2b 09 69 6e 66 6f 50 74 72 2d 3e 63  ) {.+.infoPtr->c
5c10: 61 63 68 65 64 4f 62 6a 65 63 74 56 61 72 20 3d  achedObjectVar =
5c20: 20 54 63 6c 56 61 72 48 61 73 68 47 65 74 56 61   TclVarHashGetVa
5c30: 6c 75 65 28 68 50 74 72 29 3b 0a 2b 20 20 20 20  lue(hPtr);.+    
5c40: 7d 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54 63  }.+    return Tc
5c50: 6c 56 61 72 48 61 73 68 47 65 74 56 61 6c 75 65  lVarHashGetValue
5c60: 28 68 50 74 72 29 3b 0a 2b 7d 0a 2b 0a 2b 73 74  (hPtr);.+}.+.+st
5c70: 61 74 69 63 20 76 6f 69 64 0a 2b 50 4d 43 56 44  atic void.+PMCVD
5c80: 65 6c 65 74 65 28 0a 2b 20 20 20 20 54 63 6c 5f  elete(.+    Tcl_
5c90: 52 65 73 6f 6c 76 65 64 56 61 72 49 6e 66 6f 20  ResolvedVarInfo 
5ca0: 2a 72 50 74 72 29 0a 2b 7b 0a 2b 20 20 20 20 4f  *rPtr).+{.+    O
5cb0: 4f 52 65 73 56 61 72 49 6e 66 6f 20 2a 69 6e 66  OResVarInfo *inf
5cc0: 6f 50 74 72 20 3d 20 28 4f 4f 52 65 73 56 61 72  oPtr = (OOResVar
5cd0: 49 6e 66 6f 20 2a 29 20 72 50 74 72 3b 0a 2b 0a  Info *) rPtr;.+.
5ce0: 2b 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66  +    Tcl_DecrRef
5cf0: 43 6f 75 6e 74 28 69 6e 66 6f 50 74 72 2d 3e 76  Count(infoPtr->v
5d00: 61 72 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b 20 20  ariableObj);.+  
5d10: 20 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a    ckfree((char *
5d20: 29 20 69 6e 66 6f 50 74 72 29 3b 0a 2b 7d 0a 2b  ) infoPtr);.+}.+
5d30: 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 50 72  .+static int.+Pr
5d40: 6f 63 65 64 75 72 65 4d 65 74 68 6f 64 43 6f 6d  ocedureMethodCom
5d50: 70 69 6c 65 64 56 61 72 52 65 73 6f 6c 76 65 72  piledVarResolver
5d60: 28 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 65 72  (.+    Tcl_Inter
5d70: 70 20 2a 69 6e 74 65 72 70 2c 0a 2b 20 20 20 20  p *interp,.+    
5d80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 61 72 4e  const char *varN
5d90: 61 6d 65 2c 0a 2b 20 20 20 20 69 6e 74 20 6c 65  ame,.+    int le
5da0: 6e 67 74 68 2c 0a 2b 20 20 20 20 54 63 6c 5f 4e  ngth,.+    Tcl_N
5db0: 61 6d 65 73 70 61 63 65 20 2a 63 6f 6e 74 65 78  amespace *contex
5dc0: 74 4e 73 2c 0a 2b 20 20 20 20 54 63 6c 5f 52 65  tNs,.+    Tcl_Re
5dd0: 73 6f 6c 76 65 64 56 61 72 49 6e 66 6f 20 2a 2a  solvedVarInfo **
5de0: 72 50 74 72 50 74 72 29 0a 2b 7b 0a 2b 20 20 20  rPtrPtr).+{.+   
5df0: 20 4f 4f 52 65 73 56 61 72 49 6e 66 6f 20 2a 69   OOResVarInfo *i
5e00: 6e 66 6f 50 74 72 3b 0a 2b 20 20 20 20 54 63 6c  nfoPtr;.+    Tcl
5e10: 5f 4f 62 6a 20 2a 76 61 72 69 61 62 6c 65 4f 62  _Obj *variableOb
5e20: 6a 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  j = Tcl_NewStrin
5e30: 67 4f 62 6a 28 76 61 72 4e 61 6d 65 2c 20 6c 65  gObj(varName, le
5e40: 6e 67 74 68 29 3b 0a 2b 0a 2b 20 20 20 20 69 66  ngth);.+.+    if
5e50: 20 28 73 74 72 73 74 72 28 54 63 6c 5f 47 65 74   (strstr(Tcl_Get
5e60: 53 74 72 69 6e 67 28 76 61 72 69 61 62 6c 65 4f  String(variableO
5e70: 62 6a 29 2c 20 22 3a 3a 22 29 20 21 3d 20 4e 55  bj), "::") != NU
5e80: 4c 4c 20 7c 7c 0a 2b 09 20 20 20 20 54 63 6c 5f  LL ||.+.    Tcl_
5e90: 53 74 72 69 6e 67 4d 61 74 63 68 28 54 63 6c 5f  StringMatch(Tcl_
5ea0: 47 65 74 53 74 72 69 6e 67 28 76 61 72 69 61 62  GetString(variab
5eb0: 6c 65 4f 62 6a 29 2c 20 22 2a 28 2a 29 22 29 29  leObj), "*(*)"))
5ec0: 20 7b 0a 2b 09 54 63 6c 5f 44 65 63 72 52 65 66   {.+.Tcl_DecrRef
5ed0: 43 6f 75 6e 74 28 76 61 72 69 61 62 6c 65 4f 62  Count(variableOb
5ee0: 6a 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c  j);.+.return TCL
5ef0: 5f 43 4f 4e 54 49 4e 55 45 3b 0a 2b 20 20 20 20  _CONTINUE;.+    
5f00: 7d 0a 2b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72  }.+.+    infoPtr
5f10: 20 3d 20 28 4f 4f 52 65 73 56 61 72 49 6e 66 6f   = (OOResVarInfo
5f20: 20 2a 29 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65   *) ckalloc(size
5f30: 6f 66 28 4f 4f 52 65 73 56 61 72 49 6e 66 6f 29  of(OOResVarInfo)
5f40: 29 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d  );.+    infoPtr-
5f50: 3e 69 6e 66 6f 2e 66 65 74 63 68 50 72 6f 63 20  >info.fetchProc 
5f60: 3d 20 50 4d 43 56 43 6f 6e 6e 65 63 74 3b 0a 2b  = PMCVConnect;.+
5f70: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 69 6e 66      infoPtr->inf
5f80: 6f 2e 64 65 6c 65 74 65 50 72 6f 63 20 3d 20 50  o.deleteProc = P
5f90: 4d 43 56 44 65 6c 65 74 65 3b 0a 2b 20 20 20 20  MCVDelete;.+    
5fa0: 69 6e 66 6f 50 74 72 2d 3e 63 61 63 68 65 64 4f  infoPtr->cachedO
5fb0: 62 6a 65 63 74 56 61 72 20 3d 20 4e 55 4c 4c 3b  bjectVar = NULL;
5fc0: 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 76  .+    infoPtr->v
5fd0: 61 72 69 61 62 6c 65 4f 62 6a 20 3d 20 76 61 72  ariableObj = var
5fe0: 69 61 62 6c 65 4f 62 6a 3b 0a 2b 20 20 20 20 54  iableObj;.+    T
5ff0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
6000: 76 61 72 69 61 62 6c 65 4f 62 6a 29 3b 0a 2b 20  variableObj);.+ 
6010: 20 20 20 2a 72 50 74 72 50 74 72 20 3d 20 26 69     *rPtrPtr = &i
6020: 6e 66 6f 50 74 72 2d 3e 69 6e 66 6f 3b 0a 2b 20  nfoPtr->info;.+ 
6030: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
6040: 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 20  ;.+}.+..+/*.+ * 
6050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6090: 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20 2a 20 52  ------.+ *.  * R
60a0: 65 6e 64 65 72 44 65 63 6c 61 72 65 72 4e 61 6d  enderDeclarerNam
60b0: 65 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 52 65 74  e --.  *.  *.Ret
60c0: 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  urns the name of
60d0: 20 74 68 65 20 65 6e 74 69 74 79 20 28 6f 62 6a   the entity (obj
60e0: 65 63 74 20 6f 72 20 63 6c 61 73 73 29 20 77 68  ect or class) wh
60f0: 69 63 68 20 64 65 63 6c 61 72 65 64 20 61 0a 40  ich declared a.@
6100: 40 20 2d 31 32 30 30 2c 36 20 2b 31 34 30 32 2c  @ -1200,6 +1402,
6110: 32 31 20 40 40 0a 20 7d 0a 20 0a 20 54 63 6c 5f  21 @@. }. . Tcl_
6120: 4f 62 6a 20 2a 0a 2b 54 63 6c 4f 4f 47 65 74 4d  Obj *.+TclOOGetM
6130: 65 74 68 6f 64 42 6f 64 79 28 0a 2b 20 20 20 20  ethodBody(.+    
6140: 4d 65 74 68 6f 64 20 2a 6d 50 74 72 29 0a 2b 7b  Method *mPtr).+{
6150: 0a 2b 20 20 20 20 69 66 20 28 6d 50 74 72 2d 3e  .+    if (mPtr->
6160: 74 79 70 65 50 74 72 20 3d 3d 20 26 70 72 6f 63  typePtr == &proc
6170: 4d 65 74 68 6f 64 54 79 70 65 29 20 7b 0a 2b 09  MethodType) {.+.
6180: 50 72 6f 63 65 64 75 72 65 4d 65 74 68 6f 64 20  ProcedureMethod 
6190: 2a 70 6d 50 74 72 20 3d 20 6d 50 74 72 2d 3e 63  *pmPtr = mPtr->c
61a0: 6c 69 65 6e 74 44 61 74 61 3b 0a 2b 0a 2b 09 69  lientData;.+.+.i
61b0: 66 20 28 70 6d 50 74 72 2d 3e 70 72 6f 63 50 74  f (pmPtr->procPt
61c0: 72 2d 3e 62 6f 64 79 50 74 72 2d 3e 62 79 74 65  r->bodyPtr->byte
61d0: 73 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20  s == NULL) {.+. 
61e0: 20 20 20 28 76 6f 69 64 29 20 54 63 6c 5f 47 65     (void) Tcl_Ge
61f0: 74 53 74 72 69 6e 67 28 70 6d 50 74 72 2d 3e 70  tString(pmPtr->p
6200: 72 6f 63 50 74 72 2d 3e 62 6f 64 79 50 74 72 29  rocPtr->bodyPtr)
6210: 3b 0a 2b 09 7d 0a 2b 09 72 65 74 75 72 6e 20 70  ;.+.}.+.return p
6220: 6d 50 74 72 2d 3e 70 72 6f 63 50 74 72 2d 3e 62  mPtr->procPtr->b
6230: 6f 64 79 50 74 72 3b 0a 2b 20 20 20 20 7d 0a 2b  odyPtr;.+    }.+
6240: 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b      return NULL;
6250: 0a 2b 7d 0a 2b 0a 2b 54 63 6c 5f 4f 62 6a 20 2a  .+}.+.+Tcl_Obj *
6260: 0a 20 54 63 6c 4f 4f 47 65 74 46 77 64 46 72 6f  . TclOOGetFwdFro
6270: 6d 4d 65 74 68 6f 64 28 0a 20 20 20 20 20 4d 65  mMethod(.     Me
6280: 74 68 6f 64 20 2a 6d 50 74 72 29 0a 20 7b 0a 49  thod *mPtr). {.I
6290: 6e 64 65 78 3a 20 74 65 73 74 73 2f 6f 6f 2e 74  ndex: tests/oo.t
62a0: 65 73 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  est.============
62b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
62c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
62d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
62e0: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65  =======.RCS file
62f0: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 6f  : /cvsroot/tcl/o
6300: 6f 63 6f 72 65 2f 74 65 73 74 73 2f 6f 6f 2e 74  ocore/tests/oo.t
6310: 65 73 74 2c 76 0a 72 65 74 72 69 65 76 69 6e 67  est,v.retrieving
6320: 20 72 65 76 69 73 69 6f 6e 20 31 2e 33 32 0a 64   revision 1.32.d
6330: 69 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 33 32  iff -w -u -r1.32
6340: 20 6f 6f 2e 74 65 73 74 0a 2d 2d 2d 20 74 65 73   oo.test.--- tes
6350: 74 73 2f 6f 6f 2e 74 65 73 74 09 32 36 20 4a 75  ts/oo.test.26 Ju
6360: 6e 20 32 30 30 38 20 31 35 3a 31 30 3a 35 30 20  n 2008 15:10:50 
6370: 2d 30 30 30 30 09 31 2e 33 32 0a 2b 2b 2b 20 74  -0000.1.32.+++ t
6380: 65 73 74 73 2f 6f 6f 2e 74 65 73 74 09 32 38 20  ests/oo.test.28 
6390: 4a 75 6e 20 32 30 30 38 20 32 33 3a 32 33 3a 33  Jun 2008 23:23:3
63a0: 30 20 2d 30 30 30 30 0a 40 40 20 2d 31 31 32 33  0 -0000.@@ -1123
63b0: 2c 37 20 2b 31 31 32 33 2c 37 20 40 40 0a 20 7d  ,7 +1123,7 @@. }
63c0: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 31 20   -returnCodes 1 
63d0: 2d 72 65 73 75 6c 74 20 7b 4e 4f 54 41 4e 4f 42  -result {NOTANOB
63e0: 4a 45 43 54 20 64 6f 65 73 20 6e 6f 74 20 72 65  JECT does not re
63f0: 66 65 72 20 74 6f 20 61 6e 20 6f 62 6a 65 63 74  fer to an object
6400: 7d 0a 20 74 65 73 74 20 6f 6f 2d 31 36 2e 33 20  }. test oo-16.3 
6410: 7b 4f 4f 3a 20 6f 62 6a 65 63 74 20 69 6e 74 72  {OO: object intr
6420: 6f 73 70 65 63 74 69 6f 6e 7d 20 2d 62 6f 64 79  ospection} -body
6430: 20 7b 0a 20 20 20 20 20 69 6e 66 6f 20 6f 62 6a   {.     info obj
6440: 65 63 74 20 67 6f 72 70 20 6f 6f 3a 3a 6f 62 6a  ect gorp oo::obj
6450: 65 63 74 0a 2d 7d 20 2d 72 65 74 75 72 6e 43 6f  ect.-} -returnCo
6460: 64 65 73 20 31 20 2d 72 65 73 75 6c 74 20 7b 75  des 1 -result {u
6470: 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69 67 75  nknown or ambigu
6480: 6f 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22  ous subcommand "
6490: 67 6f 72 70 22 3a 20 6d 75 73 74 20 62 65 20 63  gorp": must be c
64a0: 6c 61 73 73 2c 20 64 65 66 69 6e 69 74 69 6f 6e  lass, definition
64b0: 2c 20 66 69 6c 74 65 72 73 2c 20 66 6f 72 77 61  , filters, forwa
64c0: 72 64 2c 20 69 73 61 2c 20 6d 65 74 68 6f 64 73  rd, isa, methods
64d0: 2c 20 6d 69 78 69 6e 73 2c 20 6f 72 20 76 61 72  , mixins, or var
64e0: 73 7d 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f 64  s}.+} -returnCod
64f0: 65 73 20 31 20 2d 72 65 73 75 6c 74 20 7b 75 6e  es 1 -result {un
6500: 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69 67 75 6f  known or ambiguo
6510: 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22 67  us subcommand "g
6520: 6f 72 70 22 3a 20 6d 75 73 74 20 62 65 20 63 6c  orp": must be cl
6530: 61 73 73 2c 20 64 65 66 69 6e 69 74 69 6f 6e 2c  ass, definition,
6540: 20 66 69 6c 74 65 72 73 2c 20 66 6f 72 77 61 72   filters, forwar
6550: 64 2c 20 69 73 61 2c 20 6d 65 74 68 6f 64 73 2c  d, isa, methods,
6560: 20 6d 69 78 69 6e 73 2c 20 76 61 72 69 61 62 6c   mixins, variabl
6570: 65 73 2c 20 6f 72 20 76 61 72 73 7d 0a 20 74 65  es, or vars}. te
6580: 73 74 20 6f 6f 2d 31 36 2e 34 20 7b 4f 4f 3a 20  st oo-16.4 {OO: 
6590: 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63  object introspec
65a0: 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 20  tion} -setup {. 
65b0: 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72      oo::class cr
65c0: 65 61 74 65 20 6d 65 74 61 20 7b 20 73 75 70 65  eate meta { supe
65d0: 72 63 6c 61 73 73 20 6f 6f 3a 3a 63 6c 61 73 73  rclass oo::class
65e0: 20 7d 0a 20 20 20 20 20 5b 6d 65 74 61 20 63 72   }.     [meta cr
65f0: 65 61 74 65 20 69 6e 73 74 61 6e 63 65 31 5d 20  eate instance1] 
6600: 63 72 65 61 74 65 20 69 6e 73 74 61 6e 63 65 32  create instance2
6610: 0a 40 40 20 2d 31 32 32 38 2c 37 20 2b 31 32 32  .@@ -1228,7 +122
6620: 38 2c 37 20 40 40 0a 20 7d 20 2d 72 65 73 75 6c  8,7 @@. } -resul
6630: 74 20 7b 22 66 6f 6f 22 20 69 73 20 6e 6f 74 20  t {"foo" is not 
6640: 61 20 63 6c 61 73 73 7d 0a 20 74 65 73 74 20 6f  a class}. test o
6650: 6f 2d 31 37 2e 34 20 7b 4f 4f 3a 20 63 6c 61 73  o-17.4 {OO: clas
6660: 73 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 7d  s introspection}
6670: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 20 69 6e   -body {.     in
6680: 66 6f 20 63 6c 61 73 73 20 67 6f 72 70 20 6f 6f  fo class gorp oo
6690: 3a 3a 6f 62 6a 65 63 74 0a 2d 7d 20 2d 72 65 74  ::object.-} -ret
66a0: 75 72 6e 43 6f 64 65 73 20 31 20 2d 72 65 73 75  urnCodes 1 -resu
66b0: 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 72 20 61  lt {unknown or a
66c0: 6d 62 69 67 75 6f 75 73 20 73 75 62 63 6f 6d 6d  mbiguous subcomm
66d0: 61 6e 64 20 22 67 6f 72 70 22 3a 20 6d 75 73 74  and "gorp": must
66e0: 20 62 65 20 63 6f 6e 73 74 72 75 63 74 6f 72 2c   be constructor,
66f0: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 64 65 73   definition, des
6700: 74 72 75 63 74 6f 72 2c 20 66 69 6c 74 65 72 73  tructor, filters
6710: 2c 20 66 6f 72 77 61 72 64 2c 20 69 6e 73 74 61  , forward, insta
6720: 6e 63 65 73 2c 20 6d 65 74 68 6f 64 73 2c 20 6d  nces, methods, m
6730: 69 78 69 6e 73 2c 20 73 75 62 63 6c 61 73 73 65  ixins, subclasse
6740: 73 2c 20 6f 72 20 73 75 70 65 72 63 6c 61 73 73  s, or superclass
6750: 65 73 7d 0a 2b 7d 20 2d 72 65 74 75 72 6e 43 6f  es}.+} -returnCo
6760: 64 65 73 20 31 20 2d 72 65 73 75 6c 74 20 7b 75  des 1 -result {u
6770: 6e 6b 6e 6f 77 6e 20 6f 72 20 61 6d 62 69 67 75  nknown or ambigu
6780: 6f 75 73 20 73 75 62 63 6f 6d 6d 61 6e 64 20 22  ous subcommand "
6790: 67 6f 72 70 22 3a 20 6d 75 73 74 20 62 65 20 63  gorp": must be c
67a0: 6f 6e 73 74 72 75 63 74 6f 72 2c 20 64 65 66 69  onstructor, defi
67b0: 6e 69 74 69 6f 6e 2c 20 64 65 73 74 72 75 63 74  nition, destruct
67c0: 6f 72 2c 20 66 69 6c 74 65 72 73 2c 20 66 6f 72  or, filters, for
67d0: 77 61 72 64 2c 20 69 6e 73 74 61 6e 63 65 73 2c  ward, instances,
67e0: 20 6d 65 74 68 6f 64 73 2c 20 6d 69 78 69 6e 73   methods, mixins
67f0: 2c 20 73 75 62 63 6c 61 73 73 65 73 2c 20 73 75  , subclasses, su
6800: 70 65 72 63 6c 61 73 73 65 73 2c 20 6f 72 20 76  perclasses, or v
6810: 61 72 69 61 62 6c 65 73 7d 0a 20 74 65 73 74 20  ariables}. test 
6820: 6f 6f 2d 31 37 2e 35 20 7b 4f 4f 3a 20 63 6c 61  oo-17.5 {OO: cla
6830: 73 73 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e  ss introspection
6840: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 20  } -setup {.     
6850: 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65  oo::class create
6860: 20 74 65 73 74 43 6c 61 73 73 0a 20 7d 20 2d 62   testClass. } -b
6870: 6f 64 79 20 7b 0a 40 40 20 2d 31 37 38 37 2c 36  ody {.@@ -1787,6
6880: 20 2b 31 37 38 37 2c 31 39 33 20 40 40 0a 20 20   +1787,193 @@.  
6890: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
68a0: 74 20 5b 66 6f 6f 20 24 6d 31 5d 20 5b 62 61 72  t [foo $m1] [bar
68b0: 20 24 6d 32 5d 0a 20 7d 20 2d 72 65 73 75 6c 74   $m2]. } -result
68c0: 20 7b 6f 6b 20 6f 6b 20 6f 6b 20 6f 6b 20 6f 6b   {ok ok ok ok ok
68d0: 20 6f 6b 20 67 6f 6f 64 20 6f 6b 7d 0a 20 0a 2b   ok good ok}. .+
68e0: 74 65 73 74 20 6f 6f 2d 32 36 2e 31 20 7b 76 61  test oo-26.1 {va
68f0: 72 69 61 62 6c 65 73 20 64 65 63 6c 61 72 61 74  riables declarat
6900: 69 6f 6e 20 2d 20 63 6c 61 73 73 20 69 6e 74 72  ion - class intr
6910: 6f 73 70 65 63 74 69 6f 6e 7d 20 2d 73 65 74 75  ospection} -setu
6920: 70 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c 61  p {.+    oo::cla
6930: 73 73 20 63 72 65 61 74 65 20 66 6f 6f 0a 2b 7d  ss create foo.+}
6940: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20   -cleanup {.+   
6950: 20 66 6f 6f 20 64 65 73 74 72 6f 79 0a 2b 7d 20   foo destroy.+} 
6960: 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6f 6f 3a  -body {.+    oo:
6970: 3a 64 65 66 69 6e 65 20 66 6f 6f 20 76 61 72 69  :define foo vari
6980: 61 62 6c 65 20 61 20 62 20 63 0a 2b 20 20 20 20  able a b c.+    
6990: 69 6e 66 6f 20 63 6c 61 73 73 20 76 61 72 69 61  info class varia
69a0: 62 6c 65 73 20 66 6f 6f 0a 2b 7d 20 2d 72 65 73  bles foo.+} -res
69b0: 75 6c 74 20 7b 61 20 62 20 63 7d 0a 2b 74 65 73  ult {a b c}.+tes
69c0: 74 20 6f 6f 2d 32 36 2e 32 20 7b 76 61 72 69 61  t oo-26.2 {varia
69d0: 62 6c 65 73 20 64 65 63 6c 61 72 61 74 69 6f 6e  bles declaration
69e0: 20 2d 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73   - object intros
69f0: 70 65 63 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20  pection} -setup 
6a00: 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 6f 62 6a 65 63  {.+    oo::objec
6a10: 74 20 63 72 65 61 74 65 20 66 6f 6f 0a 2b 7d 20  t create foo.+} 
6a20: 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20  -cleanup {.+    
6a30: 66 6f 6f 20 64 65 73 74 72 6f 79 0a 2b 7d 20 2d  foo destroy.+} -
6a40: 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a  body {.+    oo::
6a50: 6f 62 6a 64 65 66 69 6e 65 20 66 6f 6f 20 76 61  objdefine foo va
6a60: 72 69 61 62 6c 65 20 61 20 62 20 63 0a 2b 20 20  riable a b c.+  
6a70: 20 20 69 6e 66 6f 20 6f 62 6a 65 63 74 20 76 61    info object va
6a80: 72 69 61 62 6c 65 73 20 66 6f 6f 0a 2b 7d 20 2d  riables foo.+} -
6a90: 72 65 73 75 6c 74 20 7b 61 20 62 20 63 7d 0a 2b  result {a b c}.+
6aa0: 74 65 73 74 20 6f 6f 2d 32 36 2e 33 20 7b 76 61  test oo-26.3 {va
6ab0: 72 69 61 62 6c 65 73 20 64 65 63 6c 61 72 61 74  riables declarat
6ac0: 69 6f 6e 20 2d 20 62 61 73 69 63 20 62 65 68 61  ion - basic beha
6ad0: 76 69 6f 75 72 7d 20 2d 73 65 74 75 70 20 7b 0a  viour} -setup {.
6ae0: 2b 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63  +    oo::class c
6af0: 72 65 61 74 65 20 6d 61 73 74 65 72 0a 2b 7d 20  reate master.+} 
6b00: 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20  -cleanup {.+    
6b10: 6d 61 73 74 65 72 20 64 65 73 74 72 6f 79 0a 2b  master destroy.+
6b20: 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6f  } -body {.+    o
6b30: 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65 20  o::class create 
6b40: 66 6f 6f 20 7b 0a 2b 09 73 75 70 65 72 63 6c 61  foo {.+.supercla
6b50: 73 73 20 6d 61 73 74 65 72 0a 2b 09 76 61 72 69  ss master.+.vari
6b60: 61 62 6c 65 20 78 21 0a 2b 09 63 6f 6e 73 74 72  able x!.+.constr
6b70: 75 63 74 6f 72 20 7b 7d 20 7b 73 65 74 20 78 21  uctor {} {set x!
6b80: 20 31 7d 0a 2b 09 6d 65 74 68 6f 64 20 79 20 7b   1}.+.method y {
6b90: 7d 20 7b 69 6e 63 72 20 78 21 7d 0a 2b 20 20 20  } {incr x!}.+   
6ba0: 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 63 72 65 61   }.+    foo crea
6bb0: 74 65 20 62 61 72 0a 2b 20 20 20 20 62 61 72 20  te bar.+    bar 
6bc0: 79 0a 2b 20 20 20 20 62 61 72 20 79 0a 2b 7d 20  y.+    bar y.+} 
6bd0: 2d 72 65 73 75 6c 74 20 33 0a 2b 74 65 73 74 20  -result 3.+test 
6be0: 6f 6f 2d 32 36 2e 34 20 7b 76 61 72 69 61 62 6c  oo-26.4 {variabl
6bf0: 65 73 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 2d  es declaration -
6c00: 20 64 65 73 74 72 75 63 74 6f 72 73 20 74 6f 6f   destructors too
6c10: 7d 20 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 20  } -setup {.+    
6c20: 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65  oo::class create
6c30: 20 6d 61 73 74 65 72 0a 2b 20 20 20 20 73 65 74   master.+    set
6c40: 20 72 65 73 75 6c 74 20 62 61 64 21 0a 2b 7d 20   result bad!.+} 
6c50: 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20  -cleanup {.+    
6c60: 6d 61 73 74 65 72 20 64 65 73 74 72 6f 79 0a 2b  master destroy.+
6c70: 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6f  } -body {.+    o
6c80: 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74 65 20  o::class create 
6c90: 66 6f 6f 20 7b 0a 2b 09 73 75 70 65 72 63 6c 61  foo {.+.supercla
6ca0: 73 73 20 6d 61 73 74 65 72 0a 2b 09 76 61 72 69  ss master.+.vari
6cb0: 61 62 6c 65 20 78 21 0a 2b 09 63 6f 6e 73 74 72  able x!.+.constr
6cc0: 75 63 74 6f 72 20 7b 7d 20 7b 73 65 74 20 78 21  uctor {} {set x!
6cd0: 20 31 7d 0a 2b 09 6d 65 74 68 6f 64 20 79 20 7b   1}.+.method y {
6ce0: 7d 20 7b 69 6e 63 72 20 78 21 7d 0a 2b 09 64 65  } {incr x!}.+.de
6cf0: 73 74 72 75 63 74 6f 72 20 7b 73 65 74 20 3a 3a  structor {set ::
6d00: 72 65 73 75 6c 74 20 24 7b 78 21 7d 7d 0a 2b 20  result ${x!}}.+ 
6d10: 20 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 63 72     }.+    foo cr
6d20: 65 61 74 65 20 62 61 72 0a 2b 20 20 20 20 62 61  eate bar.+    ba
6d30: 72 20 79 0a 2b 20 20 20 20 62 61 72 20 79 0a 2b  r y.+    bar y.+
6d40: 20 20 20 20 62 61 72 20 64 65 73 74 72 6f 79 0a      bar destroy.
6d50: 2b 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73  +    return $res
6d60: 75 6c 74 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 33  ult.+} -result 3
6d70: 0a 2b 74 65 73 74 20 6f 6f 2d 32 36 2e 35 20 7b  .+test oo-26.5 {
6d80: 76 61 72 69 61 62 6c 65 73 20 64 65 63 6c 61 72  variables declar
6d90: 61 74 69 6f 6e 20 2d 20 6f 62 6a 65 63 74 2d 62  ation - object-b
6da0: 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 73 7d 20  ound variables} 
6db0: 2d 73 65 74 75 70 20 7b 0a 2b 20 20 20 20 6f 6f  -setup {.+    oo
6dc0: 3a 3a 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20  ::object create 
6dd0: 66 6f 6f 0a 2b 7d 20 2d 63 6c 65 61 6e 75 70 20  foo.+} -cleanup 
6de0: 7b 0a 2b 20 20 20 20 66 6f 6f 20 64 65 73 74 72  {.+    foo destr
6df0: 6f 79 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20  oy.+} -body {.+ 
6e00: 20 20 20 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65     oo::objdefine
6e10: 20 66 6f 6f 20 7b 0a 2b 09 76 61 72 69 61 62 6c   foo {.+.variabl
6e20: 65 20 78 21 0a 2b 09 6d 65 74 68 6f 64 20 79 20  e x!.+.method y 
6e30: 7b 7d 20 7b 69 6e 63 72 20 78 21 7d 0a 2b 20 20  {} {incr x!}.+  
6e40: 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 79 0a 2b    }.+    foo y.+
6e50: 20 20 20 20 66 6f 6f 20 79 0a 2b 7d 20 2d 72 65      foo y.+} -re
6e60: 73 75 6c 74 20 32 0a 2b 74 65 73 74 20 6f 6f 2d  sult 2.+test oo-
6e70: 32 36 2e 36 20 7b 76 61 72 69 61 62 6c 65 73 20  26.6 {variables 
6e80: 64 65 63 6c 61 72 61 74 69 6f 6e 20 2d 20 6e 6f  declaration - no
6e90: 6e 2d 69 6e 74 65 72 66 65 72 65 6e 63 65 20 6f  n-interference o
6ea0: 66 20 6c 65 76 65 6c 73 7d 20 2d 73 65 74 75 70  f levels} -setup
6eb0: 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c 61 73   {.+    oo::clas
6ec0: 73 20 63 72 65 61 74 65 20 6d 61 73 74 65 72 0a  s create master.
6ed0: 2b 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20  +} -cleanup {.+ 
6ee0: 20 20 20 6d 61 73 74 65 72 20 64 65 73 74 72 6f     master destro
6ef0: 79 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20  y.+} -body {.+  
6f00: 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61    oo::class crea
6f10: 74 65 20 66 6f 6f 20 7b 0a 2b 09 73 75 70 65 72  te foo {.+.super
6f20: 63 6c 61 73 73 20 6d 61 73 74 65 72 0a 2b 09 76  class master.+.v
6f30: 61 72 69 61 62 6c 65 20 78 21 0a 2b 09 63 6f 6e  ariable x!.+.con
6f40: 73 74 72 75 63 74 6f 72 20 7b 7d 20 7b 73 65 74  structor {} {set
6f50: 20 78 21 20 31 7d 0a 2b 09 6d 65 74 68 6f 64 20   x! 1}.+.method 
6f60: 79 20 7b 7d 20 7b 69 6e 63 72 20 78 21 7d 0a 2b  y {} {incr x!}.+
6f70: 20 20 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 63      }.+    foo c
6f80: 72 65 61 74 65 20 62 61 72 0a 2b 20 20 20 20 6f  reate bar.+    o
6f90: 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 62 61 72  o::objdefine bar
6fa0: 20 7b 0a 2b 09 76 61 72 69 61 62 6c 65 20 79 21   {.+.variable y!
6fb0: 0a 2b 09 6d 65 74 68 6f 64 20 79 20 7b 7d 20 7b  .+.method y {} {
6fc0: 6c 69 73 74 20 5b 6e 65 78 74 5d 20 5b 69 6e 63  list [next] [inc
6fd0: 72 20 79 21 5d 20 5b 69 6e 66 6f 20 76 61 72 5d  r y!] [info var]
6fe0: 20 5b 69 6e 66 6f 20 6c 6f 63 61 6c 5d 7d 0a 2b   [info local]}.+
6ff0: 09 65 78 70 6f 72 74 20 65 76 61 6c 0a 2b 20 20  .export eval.+  
7000: 20 20 7d 0a 2b 20 20 20 20 62 61 72 20 79 0a 2b    }.+    bar y.+
7010: 20 20 20 20 6c 69 73 74 20 5b 62 61 72 20 79 5d      list [bar y]
7020: 20 5b 6c 73 6f 72 74 20 5b 69 6e 66 6f 20 6f 62   [lsort [info ob
7030: 6a 65 63 74 20 76 61 72 73 20 62 61 72 5d 5d 20  ject vars bar]] 
7040: 5b 62 61 72 20 65 76 61 6c 20 7b 69 6e 66 6f 20  [bar eval {info 
7050: 76 61 72 73 20 2a 21 7d 5d 0a 2b 7d 20 2d 72 65  vars *!}].+} -re
7060: 73 75 6c 74 20 7b 7b 33 20 32 20 79 21 20 7b 7d  sult {{3 2 y! {}
7070: 7d 20 7b 78 21 20 79 21 7d 20 7b 78 21 20 79 21  } {x! y!} {x! y!
7080: 7d 7d 0a 2b 74 65 73 74 20 6f 6f 2d 32 36 2e 37  }}.+test oo-26.7
7090: 20 7b 76 61 72 69 61 62 6c 65 73 20 64 65 63 6c   {variables decl
70a0: 61 72 61 74 69 6f 6e 20 2d 20 6f 6e 65 20 75 6e  aration - one un
70b0: 64 65 72 6c 79 69 6e 67 20 76 61 72 69 61 62 6c  derlying variabl
70c0: 65 20 73 70 61 63 65 7d 20 2d 73 65 74 75 70 20  e space} -setup 
70d0: 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73  {.+    oo::class
70e0: 20 63 72 65 61 74 65 20 6d 61 73 74 65 72 0a 2b   create master.+
70f0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 2b 20 20  } -cleanup {.+  
7100: 20 20 6d 61 73 74 65 72 20 64 65 73 74 72 6f 79    master destroy
7110: 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20  .+} -body {.+   
7120: 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65 61 74   oo::class creat
7130: 65 20 66 6f 6f 20 7b 0a 2b 09 73 75 70 65 72 63  e foo {.+.superc
7140: 6c 61 73 73 20 6d 61 73 74 65 72 0a 2b 09 76 61  lass master.+.va
7150: 72 69 61 62 6c 65 20 78 21 0a 2b 09 63 6f 6e 73  riable x!.+.cons
7160: 74 72 75 63 74 6f 72 20 7b 7d 20 7b 73 65 74 20  tructor {} {set 
7170: 78 21 20 31 7d 0a 2b 09 6d 65 74 68 6f 64 20 79  x! 1}.+.method y
7180: 20 7b 7d 20 7b 69 6e 63 72 20 78 21 7d 0a 2b 20   {} {incr x!}.+ 
7190: 20 20 20 7d 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c     }.+    oo::cl
71a0: 61 73 73 20 63 72 65 61 74 65 20 66 6f 6f 32 20  ass create foo2 
71b0: 7b 0a 2b 09 73 75 70 65 72 63 6c 61 73 73 20 66  {.+.superclass f
71c0: 6f 6f 0a 2b 09 76 61 72 69 61 62 6c 65 20 79 21  oo.+.variable y!
71d0: 0a 2b 09 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b  .+.constructor {
71e0: 7d 20 7b 73 65 74 20 79 21 20 34 32 3b 20 6e 65  } {set y! 42; ne
71f0: 78 74 7d 0a 2b 09 6d 65 74 68 6f 64 20 78 20 7b  xt}.+.method x {
7200: 7d 20 7b 69 6e 63 72 20 79 21 20 2d 31 7d 0a 2b  } {incr y! -1}.+
7210: 20 20 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 32 20      }.+    foo2 
7220: 63 72 65 61 74 65 20 62 61 72 0a 2b 20 20 20 20  create bar.+    
7230: 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 62 61  oo::objdefine ba
7240: 72 20 7b 0a 2b 09 76 61 72 69 61 62 6c 65 20 78  r {.+.variable x
7250: 21 20 79 21 0a 2b 09 6d 65 74 68 6f 64 20 7a 20  ! y!.+.method z 
7260: 7b 7d 20 7b 6c 69 73 74 20 24 7b 78 21 7d 20 24  {} {list ${x!} $
7270: 7b 79 21 7d 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20  {y!}}.+    }.+  
7280: 20 20 62 61 72 20 79 0a 2b 20 20 20 20 62 61 72    bar y.+    bar
7290: 20 78 0a 2b 20 20 20 20 6c 69 73 74 20 5b 62 61   x.+    list [ba
72a0: 72 20 79 5d 20 5b 62 61 72 20 78 5d 20 5b 62 61  r y] [bar x] [ba
72b0: 72 20 7a 5d 0a 2b 7d 20 2d 72 65 73 75 6c 74 20  r z].+} -result 
72c0: 7b 33 20 34 30 20 7b 33 20 34 30 7d 7d 0a 2b 74  {3 40 {3 40}}.+t
72d0: 65 73 74 20 6f 6f 2d 32 36 2e 38 20 7b 76 61 72  est oo-26.8 {var
72e0: 69 61 62 6c 65 73 20 64 65 63 6c 61 72 61 74 69  iables declarati
72f0: 6f 6e 20 2d 20 65 72 72 6f 72 20 63 61 73 65 73  on - error cases
7300: 20 2d 20 6e 73 20 73 65 70 61 72 61 74 6f 72 73   - ns separators
7310: 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6f  } -body {.+    o
7320: 6f 3a 3a 64 65 66 69 6e 65 20 6f 6f 3a 3a 6f 62  o::define oo::ob
7330: 6a 65 63 74 20 76 61 72 69 61 62 6c 65 20 62 61  ject variable ba
7340: 64 3a 3a 76 61 72 0a 2b 7d 20 2d 72 65 74 75 72  d::var.+} -retur
7350: 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
7360: 73 75 6c 74 20 7b 69 6e 76 61 6c 69 64 20 64 65  sult {invalid de
7370: 63 6c 61 72 65 64 20 76 61 72 69 61 62 6c 65 20  clared variable 
7380: 6e 61 6d 65 20 22 62 61 64 3a 3a 76 61 72 22 3a  name "bad::var":
7390: 20 6d 75 73 74 20 6e 6f 74 20 63 6f 6e 74 61 69   must not contai
73a0: 6e 20 6e 61 6d 65 73 70 61 63 65 20 73 65 70 61  n namespace sepa
73b0: 72 61 74 6f 72 73 7d 0a 2b 74 65 73 74 20 6f 6f  rators}.+test oo
73c0: 2d 32 36 2e 39 20 7b 76 61 72 69 61 62 6c 65 73  -26.9 {variables
73d0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 2d 20 65   declaration - e
73e0: 72 72 6f 72 20 63 61 73 65 73 20 2d 20 61 72 72  rror cases - arr
73f0: 61 79 73 7d 20 2d 62 6f 64 79 20 7b 0a 2b 20 20  ays} -body {.+  
7400: 20 20 6f 6f 3a 3a 64 65 66 69 6e 65 20 6f 6f 3a    oo::define oo:
7410: 3a 6f 62 6a 65 63 74 20 76 61 72 69 61 62 6c 65  :object variable
7420: 20 62 61 64 28 76 61 72 29 0a 2b 7d 20 2d 72 65   bad(var).+} -re
7430: 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
7440: 2d 72 65 73 75 6c 74 20 7b 69 6e 76 61 6c 69 64  -result {invalid
7450: 20 64 65 63 6c 61 72 65 64 20 76 61 72 69 61 62   declared variab
7460: 6c 65 20 6e 61 6d 65 20 22 62 61 64 28 76 61 72  le name "bad(var
7470: 29 22 3a 20 6d 75 73 74 20 6e 6f 74 20 72 65 66  )": must not ref
7480: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 65  er to an array e
7490: 6c 65 6d 65 6e 74 7d 0a 2b 74 65 73 74 20 6f 6f  lement}.+test oo
74a0: 2d 32 36 2e 31 30 20 7b 76 61 72 69 61 62 6c 65  -26.10 {variable
74b0: 73 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 2d 20  s declaration - 
74c0: 6e 6f 20 69 6e 73 74 61 6e 63 65 20 76 61 72 20  no instance var 
74d0: 6c 65 61 6b 73 20 77 69 74 68 20 63 6c 61 73 73  leaks with class
74e0: 20 72 65 73 6f 6c 76 65 72 73 7d 20 2d 73 65 74   resolvers} -set
74f0: 75 70 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c  up {.+    oo::cl
7500: 61 73 73 20 63 72 65 61 74 65 20 6d 61 73 74 65  ass create maste
7510: 72 0a 2b 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  r.+} -cleanup {.
7520: 2b 20 20 20 20 6d 61 73 74 65 72 20 64 65 73 74  +    master dest
7530: 72 6f 79 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b  roy.+} -body {.+
7540: 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72      oo::class cr
7550: 65 61 74 65 20 66 6f 6f 20 7b 0a 2b 09 73 75 70  eate foo {.+.sup
7560: 65 72 63 6c 61 73 73 20 6d 61 73 74 65 72 0a 2b  erclass master.+
7570: 09 76 61 72 69 61 62 6c 65 20 63 6c 73 76 61 72  .variable clsvar
7580: 0a 2b 09 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b  .+.constructor {
7590: 7d 20 7b 0a 2b 09 20 20 20 20 73 65 74 20 63 6c  } {.+.    set cl
75a0: 73 76 61 72 20 30 0a 2b 09 7d 0a 2b 09 6d 65 74  svar 0.+.}.+.met
75b0: 68 6f 64 20 73 74 65 70 20 7b 7d 20 7b 0a 2b 09  hod step {} {.+.
75c0: 20 20 20 20 69 6e 63 72 20 63 6c 73 76 61 72 0a      incr clsvar.
75d0: 2b 09 20 20 20 20 72 65 74 75 72 6e 0a 2b 09 7d  +.    return.+.}
75e0: 0a 2b 09 6d 65 74 68 6f 64 20 76 61 6c 75 65 20  .+.method value 
75f0: 7b 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 72  {} {.+.    retur
7600: 6e 20 24 63 6c 73 76 61 72 0a 2b 09 7d 0a 2b 20  n $clsvar.+.}.+ 
7610: 20 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 63 72     }.+    foo cr
7620: 65 61 74 65 20 69 6e 73 74 31 0a 2b 20 20 20 20  eate inst1.+    
7630: 69 6e 73 74 31 20 73 74 65 70 0a 2b 20 20 20 20  inst1 step.+    
7640: 66 6f 6f 20 63 72 65 61 74 65 20 69 6e 73 74 32  foo create inst2
7650: 0a 2b 20 20 20 20 69 6e 73 74 32 20 73 74 65 70  .+    inst2 step
7660: 0a 2b 20 20 20 20 69 6e 73 74 31 20 73 74 65 70  .+    inst1 step
7670: 0a 2b 20 20 20 20 69 6e 73 74 32 20 73 74 65 70  .+    inst2 step
7680: 0a 2b 20 20 20 20 69 6e 73 74 31 20 73 74 65 70  .+    inst1 step
7690: 0a 2b 20 20 20 20 6c 69 73 74 20 5b 69 6e 73 74  .+    list [inst
76a0: 31 20 76 61 6c 75 65 5d 20 5b 69 6e 73 74 32 20  1 value] [inst2 
76b0: 76 61 6c 75 65 5d 0a 2b 7d 20 2d 72 65 73 75 6c  value].+} -resul
76c0: 74 20 7b 33 20 32 7d 0a 2b 74 65 73 74 20 6f 6f  t {3 2}.+test oo
76d0: 2d 32 36 2e 31 31 20 7b 76 61 72 69 61 62 6c 65  -26.11 {variable
76e0: 73 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 2d 20  s declaration - 
76f0: 6e 6f 20 69 6e 73 74 61 6e 63 65 20 76 61 72 20  no instance var 
7700: 6c 65 61 6b 73 20 77 69 74 68 20 63 6c 61 73 73  leaks with class
7710: 20 72 65 73 6f 6c 76 65 72 73 7d 20 2d 73 65 74   resolvers} -set
7720: 75 70 20 7b 0a 2b 20 20 20 20 6f 6f 3a 3a 63 6c  up {.+    oo::cl
7730: 61 73 73 20 63 72 65 61 74 65 20 6d 61 73 74 65  ass create maste
7740: 72 0a 2b 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  r.+} -cleanup {.
7750: 2b 20 20 20 20 6d 61 73 74 65 72 20 64 65 73 74  +    master dest
7760: 72 6f 79 0a 2b 7d 20 2d 62 6f 64 79 20 7b 0a 2b  roy.+} -body {.+
7770: 20 20 20 20 6f 6f 3a 3a 63 6c 61 73 73 20 63 72      oo::class cr
7780: 65 61 74 65 20 66 6f 6f 20 7b 0a 2b 09 73 75 70  eate foo {.+.sup
7790: 65 72 63 6c 61 73 73 20 6d 61 73 74 65 72 0a 2b  erclass master.+
77a0: 09 76 61 72 69 61 62 6c 65 20 63 6c 73 76 61 72  .variable clsvar
77b0: 0a 2b 09 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b  .+.constructor {
77c0: 7d 20 7b 0a 2b 09 20 20 20 20 73 65 74 20 63 6c  } {.+.    set cl
77d0: 73 76 61 72 20 30 0a 2b 09 7d 0a 2b 09 6d 65 74  svar 0.+.}.+.met
77e0: 68 6f 64 20 73 74 65 70 20 7b 7d 20 7b 0a 2b 09  hod step {} {.+.
77f0: 20 20 20 20 69 6e 63 72 20 63 6c 73 76 61 72 0a      incr clsvar.
7800: 2b 09 20 20 20 20 72 65 74 75 72 6e 0a 2b 09 7d  +.    return.+.}
7810: 0a 2b 09 6d 65 74 68 6f 64 20 76 61 6c 75 65 20  .+.method value 
7820: 7b 7d 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 72  {} {.+.    retur
7830: 6e 20 24 63 6c 73 76 61 72 0a 2b 09 7d 0a 2b 20  n $clsvar.+.}.+ 
7840: 20 20 20 7d 0a 2b 20 20 20 20 66 6f 6f 20 63 72     }.+    foo cr
7850: 65 61 74 65 20 69 6e 73 74 31 0a 2b 20 20 20 20  eate inst1.+    
7860: 6f 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 69 6e  oo::objdefine in
7870: 73 74 31 20 7b 0a 2b 09 76 61 72 69 61 62 6c 65  st1 {.+.variable
7880: 20 63 6c 73 76 61 72 0a 2b 09 6d 65 74 68 6f 64   clsvar.+.method
7890: 20 72 65 69 6e 69 74 20 7b 7d 20 7b 0a 2b 09 20   reinit {} {.+. 
78a0: 20 20 20 73 65 74 20 63 6c 73 76 61 72 20 30 0a     set clsvar 0.
78b0: 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20  +.}.+    }.+    
78c0: 66 6f 6f 20 63 72 65 61 74 65 20 69 6e 73 74 32  foo create inst2
78d0: 0a 2b 20 20 20 20 6f 6f 3a 3a 6f 62 6a 64 65 66  .+    oo::objdef
78e0: 69 6e 65 20 69 6e 73 74 32 20 7b 0a 2b 09 76 61  ine inst2 {.+.va
78f0: 72 69 61 62 6c 65 20 63 6c 73 76 61 72 0a 2b 09  riable clsvar.+.
7900: 6d 65 74 68 6f 64 20 72 65 69 6e 69 74 20 7b 7d  method reinit {}
7910: 20 7b 0a 2b 09 20 20 20 20 73 65 74 20 63 6c 73   {.+.    set cls
7920: 76 61 72 20 30 0a 2b 09 7d 0a 2b 20 20 20 20 7d  var 0.+.}.+    }
7930: 0a 2b 20 20 20 20 69 6e 73 74 31 20 73 74 65 70  .+    inst1 step
7940: 0a 2b 20 20 20 20 69 6e 73 74 32 20 73 74 65 70  .+    inst2 step
7950: 0a 2b 20 20 20 20 69 6e 73 74 31 20 72 65 69 6e  .+    inst1 rein
7960: 69 74 0a 2b 20 20 20 20 69 6e 73 74 32 20 72 65  it.+    inst2 re
7970: 69 6e 69 74 0a 2b 20 20 20 20 69 6e 73 74 31 20  init.+    inst1 
7980: 73 74 65 70 0a 2b 20 20 20 20 69 6e 73 74 32 20  step.+    inst2 
7990: 73 74 65 70 0a 2b 20 20 20 20 69 6e 73 74 31 20  step.+    inst1 
79a0: 73 74 65 70 0a 2b 20 20 20 20 69 6e 73 74 32 20  step.+    inst2 
79b0: 73 74 65 70 0a 2b 20 20 20 20 69 6e 73 74 31 20  step.+    inst1 
79c0: 73 74 65 70 0a 2b 20 20 20 20 6c 69 73 74 20 5b  step.+    list [
79d0: 69 6e 73 74 31 20 76 61 6c 75 65 5d 20 5b 69 6e  inst1 value] [in
79e0: 73 74 32 20 76 61 6c 75 65 5d 0a 2b 7d 20 2d 72  st2 value].+} -r
79f0: 65 73 75 6c 74 20 7b 33 20 32 7d 0a 2b 0a 20 63  esult {3 2}.+. c
7a00: 6c 65 61 6e 75 70 54 65 73 74 73 0a 20 72 65 74  leanupTests. ret
7a10: 75 72 6e 0a 20 0a                                urn. .