On Fri, Jul 13, 2007 at 09:16:59AM -0700, [EMAIL PROTECTED] wrote:
> +++ trunk/docs/pdds/pdd15_objects.pod Fri Jul 13 09:16:58 2007
> @@ -889,9 +889,15 @@
> =item getattribute
>
> $P1 = getattribute $P2, $S3
> + $P1 = getattribute $P2, $P3, $S4
>
> Get the attribute with the fully qualified name $S3 from object $P2 and
> -put it in $P1.
> +put it in $P1. To get an attribute for a parent class that has the same name
> +as an attribute in the child class, pass an optional class object or
> namespace
> +key $P3 for the parent class.
> +
> +If the attribute doesn't exist, it will throw an exception. If the attribute
> +exists, but the value hasn't been set, it will return an C<Undef> PMC.
A plea for consistency:
For most of the other opcodes in Parrot, looking up a value that
hasn't been set returns NULL and not Undef. I think we should
be consistent in this respect for getattribute.
For example, retrieving a keyed value from a Hash or ResizablePMCArray
returns NULL if the value hasn't been set. Similarly, using get_global
on a symbol that hasn't been set returns NULL. It makes things a
lot more regular (and perhaps simpler) if getattribute could do the
same.
Also, note that we have get_class, get_global, get_hll_global,
get_namespace, get_name, etc. Could we add some more consistency
about the use of the underscore? In fact, a quick
grep " get[a-z]" *.pod
seems to indicate that the only other "get" opcodes that don't
have underscores are "getinterp" and "getprop". Similar statements
hold for the "set" opcodes.
(Yes, I realize that we also have "addattribute" and
"removeattribute" that don't have underscores, and so
getattribute/setattribute should perhaps be symmetric with
those.)
Just some thoughts,
Pm