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

Reply via email to