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