Posted to tcl by aspect at Mon Jun 17 22:24:47 GMT 2013view pretty

#!/usr/bin/tclsh
#

set i [interp create -safe]

foreach cmd [$i eval {info commands}] {
    puts "Hiding $cmd"
    $i hide $cmd
}
$i alias unknown metatcl $i

proc metatcl {i cmd args} {
    puts "Invoked in child: $cmd $args"
    if {$cmd in {"set" "incr" "for" "while" "foreach"}} {
        return [$i invokehidden $cmd {*}$args]
    } else {
        return [$cmd {*}$args]
    }
}

$i eval {
    set x 0
    while {$x<10} {
        incr x
        puts $x
    }
}