In S12, "So when you say "Dog", you're referring to both a package and a
protoobject, that latter of which points to the actual object representing the
class via HOW."
Does that mean that the object referred to by Dog "does" both roles? In that
case "the latter" is confusing wording.
Or does it mean that the compiler returns one of two different objects depending
on context? In addition to the listop! So, how does it know which is wanted?
E.g.
my $x = Dog; # the undefined Dog
my $y = ::Dog; # the package
but that means other wording is wrong, in that :: in rvalue context is not a
"no-op" exactly.
If, on the other hand, Dog is always a listop that in the 0-ary case returns the
protoobject, the protoobject can be defined to also do the Abstraction role, or
perhaps, Ah! mix in the Package as a property.
my ::z ::= Dog;
Dog::func1();
z::func1(); # same thing
In that case, the first line works because the object is the undefined dog "but"
the package object, so there is an implicit conversion to Package. The middle
line might work by knowing the context of a qualified name, so either the
compiler knows this specifically or can handle anything in the symbol table that
can be implicitly converted to an Abstraction.
--John