Index: generic/predefined.h =================================================================== diff -u -rf6be532e62dfbe148ebca8205a67688b751298ad -r120f51260309bbe35ba0f142a25e1b18947e3635 --- generic/predefined.h (.../predefined.h) (revision f6be532e62dfbe148ebca8205a67688b751298ad) +++ generic/predefined.h (.../predefined.h) (revision 120f51260309bbe35ba0f142a25e1b18947e3635) @@ -150,14 +150,8 @@ "eval next -childof $slotobject $args}\n" "::xotcl::MetaSlot create ::xotcl::Slot\n" "::xotcl::MetaSlot __invalidateobjectparameter\n" -"proc ::xotcl::parametersFromSlots {obj} {\n" -"set parameterdefinitions [list]\n" -"set slots [::xotcl2::objectInfo slotobjects $obj]\n" -"foreach slot $slots {\n" -"if {[::xotcl::is $obj type ::xotcl::Object] &&\n" -"([$slot name] eq \"mixin\" || [$slot name] eq \"filter\")} continue\n" -"set name [namespace tail $slot]\n" -"set parameterdefinition \"-$name\"\n" +"proc ::xotcl::parameterFromSlot {slot name} {\n" +"set parameterdefinition $name\n" "set opts [list]\n" "if {[$slot exists required] && [$slot required]} {\n" "lappend opts required}\n" @@ -178,9 +172,16 @@ "if {[llength $opts] > 0} {\n" "append parameterdefinition :[join $opts ,]}\n" "if {[info exists arg]} {\n" -"lappend parameterdefinition $arg\n" -"unset arg}\n" -"lappend parameterdefinitions $parameterdefinition}\n" +"lappend parameterdefinition $arg}\n" +"return $parameterdefinition}\n" +"proc ::xotcl::parametersFromSlots {obj} {\n" +"set parameterdefinitions [list]\n" +"set slots [::xotcl2::objectInfo slotobjects $obj]\n" +"foreach slot $slots {\n" +"if {[::xotcl::is $obj type ::xotcl::Object] &&\n" +"([$slot name] eq \"mixin\" || [$slot name] eq \"filter\")} continue\n" +"set name [namespace tail $slot]\n" +"lappend parameterdefinitions -[::xotcl::parameterFromSlot $slot $name]}\n" "return $parameterdefinitions}\n" "::xotcl2::Object protected method objectparameter {} {\n" "set parameterdefinitions [::xotcl::parametersFromSlots [self]]\n" @@ -259,8 +260,9 @@ "set :methodname ${:name}}\n" "${:domain} __invalidateobjectparameter\n" "set cl [expr {${:per-object} ? \"Object\" : \"Class\"}]\n" -"::xotcl::dispatch ${:domain} ::xotcl::classes::xotcl2::${cl}::forward \\\n" -"${:name} ${:manager} [list %1 [${:manager} defaultmethods]] %self \\\n" +"::xotcl::forward ${:domain} ${:name} \\\n" +"${:manager} \\\n" +"[list %1 [${:manager} defaultmethods]] %self \\\n" "${:methodname}}}\n" "::xotcl::MetaSlot create ::xotcl::InfoSlot\n" "createBootstrapAttributeSlots ::xotcl::InfoSlot {\n" @@ -350,6 +352,7 @@ ":check_single_value -keep_old_value false $value $predicate $type $obj $var}\n" "::xotcl::setinstvar $obj __oldvalue($var) $value}\n" "::xotcl::Attribute method mk_type_checker {} {\n" +"puts stderr \"[self] [self proc]\"\n" "set __initcmd \"\"\n" "if {[:exists type]} {\n" "if {[::xotcl::is ${:type} class]} {\n" @@ -371,6 +374,15 @@ "\\[list [::xotcl::self] __default_from_cmd \\[::xotcl::self\\] [list [set :initcmd]]\\]\\n\"} elseif [:exists valuecmd] {\n" "append __initcmd \":trace add variable [list ${:name}] read \\\n" "\\[list [::xotcl::self] __value_from_cmd \\[::xotcl::self\\] [list [set :valuecmd]]\\]\"}\n" +"set valueParam [::xotcl::parameterFromSlot [self] \"value\"]\n" +"if {$valueParam ne \"value\"} {\n" +"if {[set :multivalued]} {\n" +":method check_single_value [list $valueParam] {return 1}\n" +":method check_multiple_values list {foreach a $list {:check_single_value $a}}\n" +":method assign [list obj var value] {\n" +":check_multiple_values $value\n" +"::xotcl::setinstvar $obj $var $value}} else {\n" +":method assign [list obj var $valueParam] {::xotcl::setinstvar $obj $var $value}}}\n" "if {[:exists valuechangedcmd]} {\n" "append __initcmd \":trace add variable [list ${:name}] write \\\n" "\\[list [::xotcl::self] __value_changed_cmd \\[::xotcl::self\\] [list [set :valuechangedcmd]]\\]\"}\n"