Tcl Source Code

Hex Artifact Content
Login

Artifact 6a5c35438c29cf2588f0a8c0e71d2562cc80016a40445ac975722fc82a776d9e:

Attachment "obj5-bad.tcl" to ticket [929a918ec1] added by mnsummerfield 2024-07-10 07:18:20. (unpublished)
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 39 0a 0a 6f 6f 3a 3a 63 6c 61 73 73  clsh9..oo::class
0020: 20 63 72 65 61 74 65 20 56 20 7b 0a 20 20 20 20   create V {.    
0030: 6d 65 74 68 6f 64 20 76 61 6c 69 64 5f 69 6e 74  method valid_int
0040: 20 7b 69 7d 20 7b 0a 20 20 20 20 20 20 20 20 69   {i} {.        i
0050: 66 20 7b 21 5b 73 74 72 69 6e 67 20 69 73 20 69  f {![string is i
0060: 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24  nteger -strict $
0070: 69 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  i]} {.          
0080: 20 20 74 68 72 6f 77 20 4e 4f 54 5f 41 4e 5f 49    throw NOT_AN_I
0090: 4e 54 20 22 6d 75 73 74 20 62 65 20 61 6e 20 69  NT "must be an i
00a0: 6e 74 20 6e 6f 74 20 5c 22 24 69 5c 22 22 0a 20  nt not \"$i\"". 
00b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
00c0: 20 72 65 74 75 72 6e 20 24 69 0a 20 20 20 20 7d   return $i.    }
00d0: 0a 20 20 20 20 75 6e 65 78 70 6f 72 74 20 76 61  .    unexport va
00e0: 6c 69 64 5f 69 6e 74 0a 7d 0a 0a 6f 6f 3a 3a 63  lid_int.}..oo::c
00f0: 6f 6e 66 69 67 75 72 61 62 6c 65 20 63 72 65 61  onfigurable crea
0100: 74 65 20 51 20 7b 0a 20 20 20 20 6d 69 78 69 6e  te Q {.    mixin
0110: 20 56 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   V.    variable 
0120: 78 20 79 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75  x y..    constru
0130: 63 74 6f 72 20 61 72 67 73 20 7b 0a 20 20 20 20  ctor args {.    
0140: 20 20 20 20 6d 79 20 63 6f 6e 66 69 67 75 72 65      my configure
0150: 20 2d 78 20 30 20 2d 79 20 30 20 7b 2a 7d 24 61   -x 0 -y 0 {*}$a
0160: 72 67 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  rgs.    }..    p
0170: 72 6f 70 65 72 74 79 20 78 20 2d 73 65 74 20 7b  roperty x -set {
0180: 20 73 65 74 20 78 20 5b 6d 79 20 76 61 6c 69 64   set x [my valid
0190: 5f 69 6e 74 20 24 76 61 6c 75 65 5d 20 7d 0a 20  _int $value] }. 
01a0: 20 20 20 70 72 6f 70 65 72 74 79 20 79 20 2d 73     property y -s
01b0: 65 74 20 7b 20 73 65 74 20 79 20 5b 6d 79 20 76  et { set y [my v
01c0: 61 6c 69 64 5f 69 6e 74 20 24 76 61 6c 75 65 5d  alid_int $value]
01d0: 20 7d 0a 7d 0a 0a 70 75 74 73 20 22 51 22 0a 73   }.}..puts "Q".s
01e0: 65 74 20 71 31 20 5b 51 20 6e 65 77 5d 0a 70 75  et q1 [Q new].pu
01f0: 74 73 20 22 71 31 20 78 3d 5b 24 71 31 20 63 6f  ts "q1 x=[$q1 co
0200: 6e 66 69 67 75 72 65 20 2d 78 5d 20 79 3d 5b 24  nfigure -x] y=[$
0210: 71 31 20 63 6f 6e 66 69 67 75 72 65 20 2d 79 5d  q1 configure -y]
0220: 22 0a 24 71 31 20 63 6f 6e 66 69 67 75 72 65 20  ".$q1 configure 
0230: 2d 78 20 35 0a 70 75 74 73 20 22 71 31 20 5b 24  -x 5.puts "q1 [$
0240: 71 31 20 63 6f 6e 66 69 67 75 72 65 5d 22 0a 74  q1 configure]".t
0250: 72 79 20 7b 24 71 31 20 63 6f 6e 66 69 67 75 72  ry {$q1 configur
0260: 65 20 2d 78 20 22 69 6e 76 61 6c 69 64 22 7d 20  e -x "invalid"} 
0270: 74 72 61 70 20 7b 7d 20 65 72 72 20 7b 20 70 75  trap {} err { pu
0280: 74 73 20 24 65 72 72 20 7d 0a 73 65 74 20 71 32  ts $err }.set q2
0290: 20 5b 51 20 6e 65 77 20 2d 78 20 30 20 2d 79 20   [Q new -x 0 -y 
02a0: 2d 38 5d 0a 70 75 74 73 20 22 71 32 20 5b 24 71  -8].puts "q2 [$q
02b0: 32 20 63 6f 6e 66 69 67 75 72 65 5d 22 0a 24 71  2 configure]".$q
02c0: 32 20 63 6f 6e 66 69 67 75 72 65 20 2d 78 20 31  2 configure -x 1
02d0: 37 0a 70 75 74 73 20 22 71 32 20 5b 24 71 32 20  7.puts "q2 [$q2 
02e0: 63 6f 6e 66 69 67 75 72 65 5d 22 0a 70 75 74 73  configure]".puts
02f0: 20 22 71 31 20 5b 24 71 31 20 63 6f 6e 66 69 67   "q1 [$q1 config
0300: 75 72 65 5d 22 0a 74 72 79 20 7b 24 71 31 20 76  ure]".try {$q1 v
0310: 61 6c 69 64 5f 69 6e 74 20 35 7d 20 74 72 61 70  alid_int 5} trap
0320: 20 7b 7d 20 65 72 72 20 7b 20 70 75 74 73 20 24   {} err { puts $
0330: 65 72 72 20 7d 0a                                err }.