Index: generic/predefined.h =================================================================== diff -u -r2f283277aff2bb9488419a4fbe2442a5b17546e5 -rd56d2a8ee3f246c9891783abb09bd820dbc508e4 --- generic/predefined.h (.../predefined.h) (revision 2f283277aff2bb9488419a4fbe2442a5b17546e5) +++ generic/predefined.h (.../predefined.h) (revision d56d2a8ee3f246c9891783abb09bd820dbc508e4) @@ -37,10 +37,11 @@ "::xotcl::dispatch [self] ::xotcl::cmd::Object::object-method \\\n" "$name $arguments $body {*}$conditions}\n" "::xotcl::dispatch Class -objscope ::eval {\n" -".method object {args} {\n" -"set p [expr {[lsearch -regexp $args {^(method|alias|forward|setter)$}] + 1}]\n" -"set cmd [linsert $args $p \"-per-object\"]\n" -"return [{*}.$cmd]}\n" +".method object {what args} {\n" +"if {$what in [list \"alias\" \"forward\" \"method\" \"setter\"]} {\n" +"return [::xotcl::dispatch [self] ::xotcl::classes::xotcl2::Object::$what {*}$args]}\n" +"if {$what in [list \"info\"]} {\n" +"::xotcl2::objectInfo [lindex $args 0] [self] {*}[lrange $args 1 end]}}\n" ".method unknown {m args} {\n" "error \"Method '$m' unknown for [self].\\\n" "Consider '[self] create $m $args' instead of '[self] $m $args'\"}}\n" @@ -66,13 +67,22 @@ "Class protected object method __unknown {name} {}\n" "Object public method alias {-objscope:switch methodName cmd} {\n" "::xotcl::alias [self] $methodName \\\n" +"-per-object \\\n" "{*}[expr {${objscope} ? \"-objscope\" : \"\"}] \\\n" "$cmd}\n" "Class public method alias {-objscope:switch -per-object:switch methodName cmd} {\n" "::xotcl::alias [self] $methodName \\\n" "{*}[expr {${objscope} ? \"-objscope\" : \"\"}] \\\n" "{*}[expr {${per-object} ? \"-per-object\" : \"\"}] \\\n" "$cmd}\n" +"Object public method setter {methodName value:optional} {\n" +"if {[info exists value]} {\n" +"::xotcl::setter [self] $methodName -per-object $value} else {\n" +"::xotcl::setter [self] $methodName -per-object}}\n" +"Class public method setter {methodName value:optional} {\n" +"if {[info exists value]} {\n" +"::xotcl::setter [self] $methodName $value} else {\n" +"::xotcl::setter [self] $methodName}}\n" "Object create ::xotcl2::objectInfo\n" "Object create ::xotcl2::classInfo\n" "::xotcl::dispatch objectInfo -objscope ::eval {\n" @@ -101,8 +111,6 @@ "unset cmd\n" "Object forward info -onerror ::xotcl::infoError ::xotcl2::objectInfo %1 {%@2 %self}\n" "Class forward info -onerror ::xotcl::infoError ::xotcl2::classInfo %1 {%@2 %self}\n" -"::xotcl::dispatch ::xotcl2::classInfo ::xotcl::cmd::Object::forward \\\n" -"\"-per-object\" ::xotcl2::objectInfo {%@2 %1}\n" "proc ::xotcl::infoError msg {\n" "regsub -all \" \" $msg \"\" msg\n" "regsub -all \" \" $msg \"\" msg\n" @@ -230,9 +238,9 @@ "set .domain [::xotcl::self callingobject]}\n" "if {${.domain} ne \"\"} {\n" "${.domain} __invalidateobjectparameter\n" -"::xotcl::dispatch ${.domain} ::xotcl::cmd::Class::forward \\\n" -"{*}[expr {${.per-object} ? \"-per-object\" : \"\"}] ${.name} \\\n" -"${.manager} [list %1 [${.manager} defaultmethods]] %self \\\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" "\"%-per-object [info exists .forward-per-object]\" \\\n" "%proc}}\n" "::xotcl::MetaSlot create ::xotcl::InfoSlot\n" @@ -353,7 +361,7 @@ "if {[set .defaultmethods] ne {get assign}} return\n" "if {[.info callable -which assign] ne \"::xotcl::Slot alias assign ::xotcl::setinstvar\"} return\n" "if {[.info callable -which get] ne \"::xotcl::Slot alias get ::xotcl::setinstvar\"} return\n" -"::xotcl::dispatch ${.domain} ::xotcl::cmd::Class::setter {*}[expr {${.per-object} ? \"-per-object\" : \"\"}] ${.name}}}\n" +"::xotcl::setter ${.domain} {*}[expr {${.per-object} ? \"-per-object\" : \"\"}] ${.name}}}\n" "::xotcl::Attribute mixin add ::xotcl::Slot::Optimizer\n" "::xotcl2::Class create ::xotcl::ScopedNew -superclass ::xotcl2::Class\n" "createBootstrapAttributeSlots ::xotcl::ScopedNew {\n"