Tcl Source Code

Hex Artifact Content
Login

Artifact 4faddda562d6a7cb9cabe1b2df1296a86d33282f:

Attachment "test.tcl" to ticket [3603695fff] added by taylor_venable 2013-02-07 19:04:40.
0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 74  #!/usr/bin/env t
0010: 63 6c 73 68 0a 0a 70 61 63 6b 61 67 65 20 72 65  clsh..package re
0020: 71 75 69 72 65 20 54 63 6c 20 38 2e 36 0a 70 61  quire Tcl 8.6.pa
0030: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 54 63  ckage require Tc
0040: 6c 4f 4f 20 31 2e 30 0a 0a 6f 6f 3a 3a 63 6c 61  lOO 1.0..oo::cla
0050: 73 73 20 63 72 65 61 74 65 20 74 65 73 74 31 20  ss create test1 
0060: 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 78  {.    variable x
0070: 0a 20 20 20 20 65 78 70 6f 72 74 20 76 61 72 6e  .    export varn
0080: 61 6d 65 0a 20 20 20 20 63 6f 6e 73 74 72 75 63  ame.    construc
0090: 74 6f 72 20 7b 61 72 67 7d 20 7b 20 73 65 74 20  tor {arg} { set 
00a0: 78 20 24 61 72 67 20 7d 0a 20 20 20 20 6d 65 74  x $arg }.    met
00b0: 68 6f 64 20 66 6f 6f 20 7b 6f 74 68 65 72 7d 20  hod foo {other} 
00c0: 7b 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22  {.        puts "
00d0: 22 0a 20 20 20 20 20 20 20 20 70 75 74 73 20 22  ".        puts "
00e0: 28 66 6f 6f 29 20 5c 7b 5b 73 65 6c 66 5d 5c 7d  (foo) \{[self]\}
00f0: 20 2d 3e 20 5c 7b 5b 6d 79 20 76 61 72 6e 61 6d   -> \{[my varnam
0100: 65 20 78 5d 5c 7d 20 2d 3e 20 5b 73 65 74 20 5b  e x]\} -> [set [
0110: 6d 79 20 76 61 72 6e 61 6d 65 20 78 5d 5d 22 0a  my varname x]]".
0120: 20 20 20 20 20 20 20 20 70 75 74 73 20 22 28 66          puts "(f
0130: 6f 6f 29 20 5c 7b 24 6f 74 68 65 72 5c 7d 20 2d  oo) \{$other\} -
0140: 3e 20 5c 7b 5b 24 6f 74 68 65 72 20 76 61 72 6e  > \{[$other varn
0150: 61 6d 65 20 78 5d 5c 7d 20 2d 3e 20 5b 73 65 74  ame x]\} -> [set
0160: 20 5b 24 6f 74 68 65 72 20 76 61 72 6e 61 6d 65   [$other varname
0170: 20 78 5d 5d 22 20 3b 23 20 49 4e 43 4f 52 52 45   x]]" ;# INCORRE
0180: 43 54 0a 20 20 20 20 20 20 20 20 70 75 74 73 20  CT.        puts 
0190: 22 28 66 6f 6f 29 20 5c 7b 24 6f 74 68 65 72 5c  "(foo) \{$other\
01a0: 7d 20 2d 3e 20 5c 7b 5b 75 70 6c 65 76 65 6c 20  } -> \{[uplevel 
01b0: 23 30 20 24 6f 74 68 65 72 20 76 61 72 6e 61 6d  #0 $other varnam
01c0: 65 20 78 5d 5c 7d 20 2d 3e 20 5b 73 65 74 20 5b  e x]\} -> [set [
01d0: 75 70 6c 65 76 65 6c 20 23 30 20 24 6f 74 68 65  uplevel #0 $othe
01e0: 72 20 76 61 72 6e 61 6d 65 20 78 5d 5d 22 20 3b  r varname x]]" ;
01f0: 23 20 43 4f 52 52 45 43 54 0a 20 20 20 20 7d 0a  # CORRECT.    }.
0200: 7d 0a 0a 6f 6f 3a 3a 63 6c 61 73 73 20 63 72 65  }..oo::class cre
0210: 61 74 65 20 74 65 73 74 32 20 7b 0a 20 20 20 20  ate test2 {.    
0220: 76 61 72 69 61 62 6c 65 20 78 0a 20 20 20 20 65  variable x.    e
0230: 78 70 6f 72 74 20 76 61 72 6e 61 6d 65 0a 20 20  xport varname.  
0240: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 61    constructor {a
0250: 72 67 7d 20 7b 20 73 65 74 20 78 20 24 61 72 67  rg} { set x $arg
0260: 20 7d 0a 7d 0a 0a 73 65 74 20 61 20 5b 74 65 73   }.}..set a [tes
0270: 74 31 20 6e 65 77 20 61 5d 0a 73 65 74 20 62 20  t1 new a].set b 
0280: 5b 74 65 73 74 31 20 6e 65 77 20 62 5d 0a 73 65  [test1 new b].se
0290: 74 20 63 20 5b 74 65 73 74 32 20 6e 65 77 20 63  t c [test2 new c
02a0: 5d 0a 0a 70 75 74 73 20 22 20 20 20 20 20 20 5c  ]..puts "      \
02b0: 7b 24 61 5c 7d 20 2d 3e 20 5c 7b 5b 24 61 20 76  {$a\} -> \{[$a v
02c0: 61 72 6e 61 6d 65 20 78 5d 5c 7d 20 2d 3e 20 5b  arname x]\} -> [
02d0: 73 65 74 20 5b 24 61 20 76 61 72 6e 61 6d 65 20  set [$a varname 
02e0: 78 5d 5d 22 0a 70 75 74 73 20 22 20 20 20 20 20  x]]".puts "     
02f0: 20 5c 7b 24 62 5c 7d 20 2d 3e 20 5c 7b 5b 24 62   \{$b\} -> \{[$b
0300: 20 76 61 72 6e 61 6d 65 20 78 5d 5c 7d 20 2d 3e   varname x]\} ->
0310: 20 5b 73 65 74 20 5b 24 62 20 76 61 72 6e 61 6d   [set [$b varnam
0320: 65 20 78 5d 5d 22 20 3b 23 20 43 4f 52 52 45 43  e x]]" ;# CORREC
0330: 54 0a 70 75 74 73 20 22 20 20 20 20 20 20 5c 7b  T.puts "      \{
0340: 24 63 5c 7d 20 2d 3e 20 5c 7b 5b 24 63 20 76 61  $c\} -> \{[$c va
0350: 72 6e 61 6d 65 20 78 5d 5c 7d 20 2d 3e 20 5b 73  rname x]\} -> [s
0360: 65 74 20 5b 24 63 20 76 61 72 6e 61 6d 65 20 78  et [$c varname x
0370: 5d 5d 22 20 3b 23 20 43 4f 52 52 45 43 54 0a 0a  ]]" ;# CORRECT..
0380: 24 61 20 66 6f 6f 20 24 62 0a 24 61 20 66 6f 6f  $a foo $b.$a foo
0390: 20 24 63 0a 0a 23 23 23 23 23 23 23 23 23 23 23   $c..###########
03a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
03b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
03c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
03d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
03e0: 23 23 23 23 23 0a 23 23 20 4f 55 54 50 55 54 20  #####.## OUTPUT 
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0430: 20 20 20 20 23 23 0a 23 23 23 23 23 23 23 23 23      ##.#########
0440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0480: 23 23 23 23 23 23 23 0a 23 0a 23 20 20 20 20 20  #######.#.#     
0490: 20 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 33 7d 20    {::oo::Obj13} 
04a0: 2d 3e 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 33 3a  -> {::oo::Obj13:
04b0: 3a 78 7d 20 2d 3e 20 61 0a 23 20 20 20 20 20 20  :x} -> a.#      
04c0: 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 34 7d 20 2d   {::oo::Obj14} -
04d0: 3e 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 34 3a 3a  > {::oo::Obj14::
04e0: 78 7d 20 2d 3e 20 62 20 20 43 4f 52 52 45 43 54  x} -> b  CORRECT
04f0: 0a 23 20 20 20 20 20 20 20 7b 3a 3a 6f 6f 3a 3a  .#       {::oo::
0500: 4f 62 6a 31 35 7d 20 2d 3e 20 7b 3a 3a 6f 6f 3a  Obj15} -> {::oo:
0510: 3a 4f 62 6a 31 35 3a 3a 78 7d 20 2d 3e 20 63 20  :Obj15::x} -> c 
0520: 20 43 4f 52 52 45 43 54 0a 23 0a 23 20 28 66 6f   CORRECT.#.# (fo
0530: 6f 29 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 33 7d  o) {::oo::Obj13}
0540: 20 2d 3e 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 33   -> {::oo::Obj13
0550: 3a 3a 78 7d 20 2d 3e 20 61 0a 23 20 28 66 6f 6f  ::x} -> a.# (foo
0560: 29 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 34 7d 20  ) {::oo::Obj14} 
0570: 2d 3e 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 33 3a  -> {::oo::Obj13:
0580: 3a 78 7d 20 2d 3e 20 61 20 20 49 4e 43 4f 52 52  :x} -> a  INCORR
0590: 45 43 54 0a 23 20 28 66 6f 6f 29 20 7b 3a 3a 6f  ECT.# (foo) {::o
05a0: 6f 3a 3a 4f 62 6a 31 34 7d 20 2d 3e 20 7b 3a 3a  o::Obj14} -> {::
05b0: 6f 6f 3a 3a 4f 62 6a 31 34 3a 3a 78 7d 20 2d 3e  oo::Obj14::x} ->
05c0: 20 62 20 20 43 4f 52 52 45 43 54 0a 23 0a 23 20   b  CORRECT.#.# 
05d0: 28 66 6f 6f 29 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a  (foo) {::oo::Obj
05e0: 31 33 7d 20 2d 3e 20 7b 3a 3a 6f 6f 3a 3a 4f 62  13} -> {::oo::Ob
05f0: 6a 31 33 3a 3a 78 7d 20 2d 3e 20 61 0a 23 20 28  j13::x} -> a.# (
0600: 66 6f 6f 29 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31  foo) {::oo::Obj1
0610: 35 7d 20 2d 3e 20 7b 3a 3a 6f 6f 3a 3a 4f 62 6a  5} -> {::oo::Obj
0620: 31 33 3a 3a 78 7d 20 2d 3e 20 61 20 20 49 4e 43  13::x} -> a  INC
0630: 4f 52 52 45 43 54 0a 23 20 28 66 6f 6f 29 20 7b  ORRECT.# (foo) {
0640: 3a 3a 6f 6f 3a 3a 4f 62 6a 31 35 7d 20 2d 3e 20  ::oo::Obj15} -> 
0650: 7b 3a 3a 6f 6f 3a 3a 4f 62 6a 31 35 3a 3a 78 7d  {::oo::Obj15::x}
0660: 20 2d 3e 20 63 20 20 43 4f 52 52 45 43 54 0a      -> c  CORRECT.