Tcl Source Code

Hex Artifact Content
Login

Artifact 5a105a3c2406703afa6800b35e5dd9e553b40157:

Attachment "stack.tcl" to ticket [2868499fff] added by dgp 2010-03-31 01:57:32.
0000: 70 72 6f 63 20 73 74 61 63 6b 20 7b 7d 20 7b 0a  proc stack {} {.
0010: 20 20 20 20 73 65 74 20 6c 20 5b 69 6e 66 6f 20      set l [info 
0020: 6c 65 76 65 6c 5d 0a 20 20 20 20 69 6e 63 72 20  level].    incr 
0030: 6c 20 2d 31 0a 20 20 20 20 73 65 74 20 73 20 24  l -1.    set s $
0040: 6c 3a 0a 20 20 20 20 77 68 69 6c 65 20 7b 24 6c  l:.    while {$l
0050: 7d 20 7b 0a 09 61 70 70 65 6e 64 20 73 20 5c 6e  } {..append s \n
0060: 5c 74 5b 69 6e 66 6f 20 6c 65 76 65 6c 20 24 6c  \t[info level $l
0070: 5d 0a 09 69 6e 63 72 20 6c 20 2d 31 0a 20 20 20  ]..incr l -1.   
0080: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 73   }.    return $s
0090: 0a 7d 0a 0a 73 65 74 20 6f 62 6a 20 5b 6f 6f 3a  .}..set obj [oo:
00a0: 3a 6f 62 6a 65 63 74 20 6e 65 77 5d 0a 6f 6f 3a  :object new].oo:
00b0: 3a 6f 62 6a 64 65 66 69 6e 65 20 24 6f 62 6a 20  :objdefine $obj 
00c0: 7b 0a 20 20 20 20 6d 65 74 68 6f 64 20 34 61 20  {.    method 4a 
00d0: 7b 7d 20 7b 0a 09 70 75 74 73 20 5b 73 74 61 63  {} {..puts [stac
00e0: 6b 5d 0a 09 75 70 6c 65 76 65 6c 20 31 20 5b 6c  k]..uplevel 1 [l
00f0: 69 73 74 20 5b 73 65 6c 66 5d 20 34 62 5d 0a 20  ist [self] 4b]. 
0100: 20 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20     }.    method 
0110: 34 62 20 7b 7d 20 7b 0a 09 70 75 74 73 20 5b 73  4b {} {..puts [s
0120: 74 61 63 6b 5d 0a 09 6d 79 20 35 61 0a 20 20 20  tack]..my 5a.   
0130: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 35 61   }.    method 5a
0140: 20 7b 7d 20 7b 0a 09 70 75 74 73 20 5b 73 74 61   {} {..puts [sta
0150: 63 6b 5d 0a 09 75 70 6c 65 76 65 6c 20 31 20 6d  ck]..uplevel 1 m
0160: 79 20 35 62 0a 20 20 20 20 7d 0a 20 20 20 20 6d  y 5b.    }.    m
0170: 65 74 68 6f 64 20 35 62 20 7b 7d 20 7b 0a 09 70  ethod 5b {} {..p
0180: 75 74 73 20 5b 73 74 61 63 6b 5d 0a 09 75 70 6c  uts [stack]..upl
0190: 65 76 65 6c 20 23 30 20 7b 0a 09 20 20 20 20 6f  evel #0 {..    o
01a0: 6f 3a 3a 6f 62 6a 64 65 66 69 6e 65 20 5b 6f 6f  o::objdefine [oo
01b0: 3a 3a 6f 62 6a 65 63 74 20 6e 65 77 5d 20 7b 0a  ::object new] {.
01c0: 09 09 70 75 74 73 20 5b 73 74 61 63 6b 5d 0a 09  ..puts [stack]..
01d0: 09 65 72 72 6f 72 20 21 0a 09 20 20 20 20 7d 0a  .error !..    }.
01e0: 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 70  .}.    }.    exp
01f0: 6f 72 74 20 34 61 20 34 62 0a 7d 0a 0a 70 72 6f  ort 4a 4b.}..pro
0200: 63 20 33 63 20 7b 7d 20 7b 0a 20 20 20 20 75 70  c 3c {} {.    up
0210: 6c 65 76 65 6c 20 31 20 7b 70 75 74 73 20 5b 73  level 1 {puts [s
0220: 74 61 63 6b 5d 7d 0a 20 20 20 20 70 75 74 73 20  tack]}.    puts 
0230: 5b 73 74 61 63 6b 5d 0a 20 20 20 20 24 3a 3a 6f  [stack].    $::o
0240: 62 6a 20 34 61 0a 7d 0a 69 6e 74 65 72 70 20 68  bj 4a.}.interp h
0250: 69 64 65 20 7b 7d 20 33 63 0a 0a 70 72 6f 63 20  ide {} 3c..proc 
0260: 31 61 20 7b 7d 20 7b 0a 20 20 20 20 70 75 74 73  1a {} {.    puts
0270: 20 5b 73 74 61 63 6b 5d 0a 20 20 20 20 32 61 0a   [stack].    2a.
0280: 7d 0a 70 72 6f 63 20 32 61 20 7b 7d 20 7b 0a 20  }.proc 2a {} {. 
0290: 20 20 20 70 75 74 73 20 5b 73 74 61 63 6b 5d 0a     puts [stack].
02a0: 20 20 20 20 61 70 70 6c 79 20 7b 7b 7d 20 7b 0a      apply {{} {.
02b0: 09 20 20 20 20 70 75 74 73 20 5b 73 74 61 63 6b  .    puts [stack
02c0: 5d 0a 09 20 20 20 20 75 70 6c 65 76 65 6c 20 31  ]..    uplevel 1
02d0: 20 33 62 0a 20 20 20 20 7d 7d 0a 7d 0a 70 72 6f   3b.    }}.}.pro
02e0: 63 20 33 62 20 7b 7d 20 7b 0a 20 20 20 20 70 75  c 3b {} {.    pu
02f0: 74 73 20 5b 73 74 61 63 6b 5d 0a 20 20 20 20 75  ts [stack].    u
0300: 70 6c 65 76 65 6c 20 32 20 7b 0a 09 6e 61 6d 65  plevel 2 {..name
0310: 73 70 61 63 65 20 65 76 61 6c 20 32 62 20 7b 0a  space eval 2b {.
0320: 09 09 70 75 74 73 20 5b 3a 3a 73 74 61 63 6b 5d  ..puts [::stack]
0330: 0a 09 09 75 70 6c 65 76 65 6c 20 23 30 20 31 62  ...uplevel #0 1b
0340: 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 70 72 6f 63  ..}.    }.}.proc
0350: 20 31 62 20 7b 7d 20 7b 0a 20 20 20 20 70 75 74   1b {} {.    put
0360: 73 20 5b 73 74 61 63 6b 5d 0a 20 20 20 20 69 6e  s [stack].    in
0370: 74 65 72 70 20 69 6e 76 6f 6b 65 68 69 64 64 65  terp invokehidde
0380: 6e 20 7b 7d 20 2d 6e 61 6d 65 73 70 61 63 65 20  n {} -namespace 
0390: 3a 3a 20 33 63 0a 7d 0a 63 61 74 63 68 20 31 61  :: 3c.}.catch 1a
03a0: 20 6d 20 6f 0a 70 75 74 73 20 45 49 3a 5b 64 69   m o.puts EI:[di
03b0: 63 74 20 67 65 74 20 24 6f 20 2d 65 72 72 6f 72  ct get $o -error
03c0: 69 6e 66 6f 5d 5c 6e 0a 70 75 74 73 20 2d 6e 6f  info]\n.puts -no
03d0: 6e 65 77 6c 69 6e 65 20 45 53 3a 0a 66 6f 72 65  newline ES:.fore
03e0: 61 63 68 20 7b 74 6f 6b 65 6e 20 76 61 6c 75 65  ach {token value
03f0: 7d 20 5b 64 69 63 74 20 67 65 74 20 24 6f 20 2d  } [dict get $o -
0400: 65 72 72 6f 72 73 74 61 63 6b 5d 20 7b 0a 20 20  errorstack] {.  
0410: 20 20 70 75 74 73 20 5b 6c 69 73 74 20 24 74 6f    puts [list $to
0420: 6b 65 6e 20 24 76 61 6c 75 65 5d 0a 7d 0a 0a     ken $value].}..