def new(namespace, name, *args, &block)
raise ArgumentError, "invalid empty object name" if name.to_s.empty?
if namespace.is_a?(ConstantObject)
namespace = Proxy.new(namespace.namespace, namespace.value)
end
if name.to_s[0,2] == NSEP
name = name.to_s[2..-1]
namespace = Registry.root
elsif name =~ /(?:#{NSEPQ})([^:]+)$/
return new(Proxy.new(namespace, $`), $1, *args, &block)
end
obj = super(namespace, name, *args)
existing_obj = Registry.at(obj.path)
obj = existing_obj if existing_obj && existing_obj.class == self
yield(obj) if block_given?
obj
end