def new(namespace, name, *args, &block)
if name.to_s[0,2] == NSEP
name = name.to_s[2..-1]
namespace = Registry.root
elsif name =~ /(?:#{NSEPQ}|#{ISEPQ}|#{CSEPQ})([^#{NSEPQ}#{ISEPQ}#{CSEPQ}]+)$/
return new(Proxy.new(namespace, $`), $1, *args, &block)
end
keyname = namespace && namespace.respond_to?(:path) ? namespace.path : ''
if self == RootObject
keyname = :root
elsif self == MethodObject
keyname += (args.first && args.first.to_sym == :class ? CSEP : ISEP) + name.to_s
elsif keyname.empty?
keyname = name.to_s
else
keyname += NSEP + name.to_s
end
obj = Registry.objects[keyname]
obj = nil if obj && obj.class != self
if self != RootObject && obj
yield(obj) if block_given?
obj
else
Registry.objects[keyname] = super(namespace, name, *args, &block)
end
end