On 10/8/07, Klaas-Jan Stol <[EMAIL PROTECTED]> wrote:
>
>
>
> On 10/8/07, Allison Randal <[EMAIL PROTECTED]> wrote:
> >
> > Klaas-Jan Stol wrote:
> > > I think it should be something like this:
> > >
> > >       /* RT46099 Check we don't already have this parent. */
> > >
> > >          /* If we have already added a method with this name... */
> > >         if (VTABLE_exists_keyed_str(interp, _class->all_parents,
> > > VTABLE_name(interp, parent))) {
> > >             real_exception(interp, NULL, E_NotImplementedError,
> > >                 "This class already has this parent.");
> > >         }
> >
> > Great start. Change "method" to "parent" in the comment. You'll want to
> > check the immediate parents of the class, not all inherited parents, so
> > you need to be looking at _class->parents, instead of
> > _class->all_parents. And, unlike methods, parents are stored as an array
> > of class objects, not a hash keyed by class name, so you'll need to loop
> > over the parents array and check 'VTABLE_is_same' on each.
> >
> > Also, it'd be good to add more information to the real_exception
> > message, like:
> >
> >              real_exception(interp, NULL, E_NotImplementedError,
> >                  "The class '%S' already has a parent class '%S'. "
> >                  "It may have been supplied by a role.",
> >                  VTABLE_get_string(interp, SELF),
> >                  VTABLE_get_string(interp, parent));
>
>
> thanks for your pointers.
>
> > can't test this, parrot does not build in pdd15 branch.
> > > it should be more or less like this, based on impl of add_attribute.
> > >
> > > the headerfile classobject.h is missing in the branch, while it is
> > there in
> > > trunk. Is this right?
> >
> > The pdd15oo branch does build (since Saturday), and passes most of its
> > tests. Try 'make realclean', as some files have moved ( classobject.h,
> > for example, is now include/parrot/oo_private.h).
>
>
> thanks, works!
>
> Attached a patch  that should do the trick. I could not get VTABLE_is_same
> working, some error about parrot_string_t not having a member 'vtable' or
> something like that. Instead I  looked around and found some other
> comparison function.
>
> > btw, the type of exception should be changed, also for other methods.
> >
> > Agreed.
>
>
> but not sure which type yet. for now I didn't change it, they can be all
> reviewed in one go I think.
>

whoops, I meant I did change it, to INVALID_OPERATION, but I think that's
not really descriptive too. Let's change them all at once, later.

kjs
>
>

Reply via email to