Index: generic/predefined.h =================================================================== diff -u -r210eab6d9149846d5d6a6a8e0fa74e232ca5b6de -rf6be532e62dfbe148ebca8205a67688b751298ad --- generic/predefined.h (.../predefined.h) (revision 210eab6d9149846d5d6a6a8e0fa74e232ca5b6de) +++ generic/predefined.h (.../predefined.h) (revision f6be532e62dfbe148ebca8205a67688b751298ad) @@ -163,6 +163,8 @@ "lappend opts required}\n" "if {[$slot exists type]} {\n" "lappend opts [$slot type]}\n" +"if {[$slot exists arg]} {\n" +"lappend opts arg=[$slot arg]}\n" "if {[$slot exists default]} {\n" "set arg [::xotcl::setinstvar $slot default]\n" "if {[string match {*\\[*\\]*} $arg]} {\n" @@ -327,7 +329,8 @@ "{value_check once}\n" "initcmd\n" "valuecmd\n" -"valuechangedcmd}\n" +"valuechangedcmd\n" +"arg}\n" "::xotcl::Attribute method __default_from_cmd {obj cmd var sub op} {\n" "$obj trace remove variable $var $op [list [::xotcl::self] [::xotcl::self proc] $obj $cmd]\n" "::xotcl::setinstvar $obj $var [$obj eval $cmd]}\n" @@ -421,15 +424,22 @@ "foreach arg $arglist {\n" "set l [llength $arg]\n" "set name [lindex $arg 0]\n" -"if {[string first : $name] > -1} {\n" -"foreach {name type} [split $name :] break\n" -"if {$type eq \"required\"} {\n" -"set required 1\n" -"unset type}}\n" +"set colonPos [string first : $name]\n" +"if {$colonPos > -1} {\n" +"set properties [string range $name [expr {$colonPos+1}] end]\n" +"set name [string range $name 0 [expr {$colonPos -1}]]\n" +"foreach property [split $properties ,] {\n" +"if {$property eq \"required\"} {\n" +"set required 1} elseif {[string match arg=* $property]} {\n" +"set argument [string range $property 4 end]} else {\n" +"set type $property}}}\n" "set cmd [list ::xotcl::Attribute create [::xotcl::self]::slot::$name]\n" "if {[info exists type]} {\n" "lappend cmd -type $type\n" "unset type}\n" +"if {[info exists argument]} {\n" +"lappend cmd -arg $argument\n" +"unset argument}\n" "if {[info exists required]} {\n" "lappend cmd -required 1\n" "unset required}\n"