Posted to tcl by dkf at Mon Jul 13 08:01:02 GMT 2009view pretty

proc oo::define::Variable args {
    set existing [uplevel 1 [list info class variables $currentclass]]
    switch [lindex $args 0] {
	-append {
	    set vars $existing
	    lappend vars {*}[lrange $args 1 end]
	}
	-prepend {
	    set vars [lrange $args 1 end]
	    lappend vars {*}$existing
	}
	-remove {
	    set vars $existing
	    foreach var [lrange $args 1 end] {
		set idx [lsearch -exact $vars $var]
		if {$idx >= 0} {
		    set vars [lreplace $vars $idx $idx]
		}
	    }
	}
	-set - default {
	    set vars [lrange $args 1 end]
	}
    }
    uplevel 1 [list variables {*}$vars]
    return
}

Comments

Posted by dkf at Mon Jul 13 08:02:57 GMT 2009 [text] [code]

The problem is determining $currentclass

Posted by dkf at Mon Jul 13 08:06:53 GMT 2009 [text] [code]

Use this: set currentclass [lindex [info level 1] 1] (It's not suitable for per-object declarations due to problems with self-decls, but will work for class declarations)