Index: generic/predefined.h =================================================================== diff -u -rf4e75c452cf99c87ad8705c954cb9548652873fa -r3ecb613fe4ef3fd510e73792cdf0764a1d1489ab --- generic/predefined.h (.../predefined.h) (revision f4e75c452cf99c87ad8705c954cb9548652873fa) +++ generic/predefined.h (.../predefined.h) (revision 3ecb613fe4ef3fd510e73792cdf0764a1d1489ab) @@ -148,62 +148,6 @@ "::xotcl::MetaSlot create ::xotcl::Slot\n" "::xotcl::MetaSlot create ::xotcl::ObjectParameterSlot\n" "::xotcl::relation ::xotcl::ObjectParameterSlot superclass ::xotcl::Slot\n" -"::xotcl::MetaSlot __invalidateobjectparameter\n" -"::xotcl::ObjectParameterSlot method toParameterSyntax {name} {\n" -"set objparamdefinition $name\n" -"set methodparamdefinition \"\"\n" -"set objopts [list]\n" -"set methodopts [list]\n" -"if {[info exists :required] && ${:required}} {\n" -"lappend objopts required\n" -"lappend methodopts required}\n" -"if {[info exists :type]} {\n" -"if {[string match ::* ${:type}]} {\n" -"lappend objopts object type=${:type}\n" -"lappend methodopts object type=${:type}} else {\n" -"lappend objopts ${:type}\n" -"lappend methodopts ${:type}}}\n" -"if {[info exists :multivalued] && ${:multivalued}} {\n" -"if {!([info exists :type] && ${:type} eq \"relation\")} {\n" -"lappend objopts multivalued} else {}}\n" -"if {[info exists :arg]} {\n" -"lappend objopts arg=${:arg}\n" -"lappend methodopts arg=${:arg}}\n" -"if {[info exists :default]} {\n" -"set arg ${:default}\n" -"if {[string match {*\\[*\\]*} $arg]} {\n" -"lappend objopts substdefault}} elseif {[info exists :initcmd]} {\n" -"set arg ${:initcmd}\n" -"lappend objopts initcmd}\n" -"if {[info exists :methodname]} {\n" -"if {${:methodname} ne ${:name}} {\n" -"lappend objopts arg=${:methodname}\n" -"lappend methodopts arg=${:methodname}}}\n" -"if {[llength $objopts] > 0} {\n" -"append objparamdefinition :[join $objopts ,]}\n" -"if {[llength $methodopts] > 0} {\n" -"set methodparamdefinition [join $methodopts ,]}\n" -"if {[info exists arg]} {\n" -"lappend objparamdefinition $arg}\n" -"return [list oparam $objparamdefinition mparam $methodparamdefinition]}\n" -"proc ::xotcl::parametersFromSlots {obj} {\n" -"set parameterdefinitions [list]\n" -"foreach slot [::xotcl2::objectInfo slotobjects $obj] {\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" -"array set \"\" [$slot toParameterSyntax $name]\n" -"lappend parameterdefinitions -$(oparam)}\n" -"return $parameterdefinitions}\n" -"::xotcl2::Object protected method objectparameter {} {\n" -"set parameterdefinitions [::xotcl::parametersFromSlots [self]]\n" -"if {[::xotcl::is [self] class]} {\n" -"lappend parameterdefinitions -parameter:method,optional}\n" -"lappend parameterdefinitions \\\n" -"-noinit:method,optional,noarg \\\n" -"-volatile:method,optional,noarg \\\n" -"arg:initcmd,optional\n" -"return $parameterdefinitions}\n" "::xotcl::MetaSlot create ::xotcl::MethodParameterSlot\n" "::xotcl::relation ::xotcl::MethodParameterSlot superclass ::xotcl::Slot\n" "foreach cmd [info command ::xotcl::cmd::MethodParameterSlot::*] {\n" @@ -224,9 +168,10 @@ "if {[info exists default]} {\n" "foreach i [::xotcl::cmd::ClassInfo::instances $class] {\n" "if {![$i exists $att]} {\n" -"if {[string match {*[*]*} $default]} {\n" -"set default [::xotcl::dispatch $i -objscope ::eval subst $default]}\n" -"::xotcl::setinstvar $i $att $default}}\n" +"if {[string match {*\\[*\\]*} $default]} {\n" +"set value [::xotcl::dispatch $i -objscope ::eval subst $default]} else {\n" +"set value $default}\n" +"::xotcl::setinstvar $i $att $value}}\n" "unset default}}\n" "$class __invalidateobjectparameter}\n" "createBootstrapAttributeSlots ::xotcl::Slot {\n" @@ -278,6 +223,66 @@ "${:manager} \\\n" "[list %1 [${:manager} defaultmethods]] %self \\\n" "${:methodname}}}\n" +"::xotcl::MetaSlot __invalidateobjectparameter\n" +"::xotcl::ObjectParameterSlot method toParameterSyntax {{name:substdefault ${:name}}} {\n" +"set objparamdefinition $name\n" +"set methodparamdefinition \"\"\n" +"set objopts [list]\n" +"set methodopts [list]\n" +"set type \"\"\n" +"if {[info exists :required] && ${:required}} {\n" +"lappend objopts required\n" +"lappend methodopts required}\n" +"if {[info exists :type]} {\n" +"if {[string match ::* ${:type}]} {\n" +"set type [expr {[::xotcl::is ${:type} metaclass] ? \"class\" : \"object\"}]\n" +"lappend objopts type=${:type}\n" +"lappend methodopts type=${:type}} else {\n" +"set type ${:type}}}\n" +"if {[info exists :multivalued] && ${:multivalued}} {\n" +"if {!([info exists :type] && ${:type} eq \"relation\")} {\n" +"lappend objopts multivalued} else {}}\n" +"if {[info exists :arg]} {\n" +"set prefix [expr {$type eq \"object\" || $type eq \"class\" ? \"type\" : \"arg\"}]\n" +"lappend objopts $prefix=${:arg}\n" +"lappend methodopts $prefix=${:arg}}\n" +"if {[info exists :default]} {\n" +"set arg ${:default}\n" +"if {[string match {*\\[*\\]*} $arg]} {\n" +"lappend objopts substdefault}} elseif {[info exists :initcmd]} {\n" +"set arg ${:initcmd}\n" +"lappend objopts initcmd}\n" +"if {[info exists :methodname]} {\n" +"if {${:methodname} ne ${:name}} {\n" +"lappend objopts arg=${:methodname}\n" +"lappend methodopts arg=${:methodname}}}\n" +"if {$type ne \"\"} {\n" +"set objopts [linsert $objopts 0 $type]\n" +"set methodopts [linsert $methodopts 0 $type]}\n" +"if {[llength $objopts] > 0} {\n" +"append objparamdefinition :[join $objopts ,]}\n" +"if {[llength $methodopts] > 0} {\n" +"set methodparamdefinition [join $methodopts ,]}\n" +"if {[info exists arg]} {\n" +"lappend objparamdefinition $arg}\n" +"return [list oparam $objparamdefinition mparam $methodparamdefinition]}\n" +"proc ::xotcl::parametersFromSlots {obj} {\n" +"set parameterdefinitions [list]\n" +"foreach slot [::xotcl2::objectInfo slotobjects $obj] {\n" +"if {[::xotcl::is $obj type ::xotcl::Object] &&\n" +"([$slot name] eq \"mixin\" || [$slot name] eq \"filter\")} continue\n" +"array set \"\" [$slot toParameterSyntax]\n" +"lappend parameterdefinitions -$(oparam)}\n" +"return $parameterdefinitions}\n" +"::xotcl2::Object protected method objectparameter {} {\n" +"set parameterdefinitions [::xotcl::parametersFromSlots [self]]\n" +"if {[::xotcl::is [self] class]} {\n" +"lappend parameterdefinitions -parameter:method,optional}\n" +"lappend parameterdefinitions \\\n" +"-noinit:method,optional,noarg \\\n" +"-volatile:method,optional,noarg \\\n" +"arg:initcmd,optional\n" +"return $parameterdefinitions}\n" "::xotcl::MetaSlot create ::xotcl::RelationSlot\n" "createBootstrapAttributeSlots ::xotcl::RelationSlot {\n" "{multivalued true}\n"