So I figured maybe if I unwound that stack trace I might get more help, so
here it is, in reverse order:

perl -MMoose # explosion!

# In Moose.pm
use Moose::Meta::TypeCoercion;

#################################################

# In Moose::Meta::TypeCoercion;
__PACKAGE__->meta->add_attribute(
    Moose::Meta::Attribute->new('type_constraint' => (
        reader   => 'type_constraint',
        weak_ref => 1
    ))
);

#################################################


# In Class::MOP::Class
sub add_attribute {
    my $self      = shift;
    # either we have an attribute object already
    # or we need to create one from the args provided
    my $attribute = blessed($_[0]) ? $_[0] :
$self->attribute_metaclass->new(@_);
    # make sure it is derived from the correct type though
    ($attribute->isa('Class::MOP::Attribute'))
        || confess "Your attribute must be an instance of
Class::MOP::Attribute (or a subclass)";

    # first we attach our new attribute
    # because it might need certain information
    # about the class which it is attached to
    $attribute->attach_to_class($self);

    # then we remove attributes of a conflicting
    # name here so that we can properly detach
    # the old attr object, and remove any
    # accessors it would have generated
    if ( $self->has_attribute($attribute->name) ) {
        $self->remove_attribute($attribute->name);
    } else {
        $self->invalidate_meta_instances();
    }

    # get our count of previously inserted attributes and
    # increment by one so this attribute knows its order
    my $order = (scalar keys %{$self->get_attribute_map}) - 1;
    $attribute->_set_insertion_order($order + 1);

    # then onto installing the new accessors
    $self->get_attribute_map->{$attribute->name} = $attribute;

    # invalidate package flag here
    my $e = do {
        local $@;
        local $SIG{__DIE__};
        eval { $attribute->install_accessors() };
        $@;
    };
    if ( $e ) {
        $self->remove_attribute($attribute->name);
        die $e;
    }

    return $attribute;
}

#################################################



# In Moose::Meta::Attribute
sub install_accessors {
    my $self = shift;
    $self->SUPER::install_accessors(@_);
    $self->install_delegation if $self->has_handles;
    return;
}

#################################################


# In Class::MOP::Attribute
sub install_accessors {
    my $self   = shift;
    my $inline = shift;
    my $class  = $self->associated_class;

    $class->add_method(
        $self->_process_accessors('accessor' => $self->accessor(), $inline)
    ) if $self->has_accessor();

    # this is the line
    $class->add_method(
        $self->_process_accessors('reader' => $self->reader(), $inline)
    ) if $self->has_reader();

    $class->add_method(
        $self->_process_accessors('writer' => $self->writer(), $inline)
    ) if $self->has_writer();

    $class->add_method(
        $self->_process_accessors('predicate' => $self->predicate(),
$inline)
    ) if $self->has_predicate();

    $class->add_method(
        $self->_process_accessors('clearer' => $self->clearer(), $inline)
    ) if $self->has_clearer();

    return;
}

#################################################


# In Class::MOP::Attribute
sub _process_accessors {
    my ($self, $type, $accessor, $generate_as_inline_methods) = @_;

    my $method_ctx;

    if ( my $ctx = $self->definition_context ) {
        $method_ctx = { %$ctx };
    }

    if (ref($accessor)) {
        (ref($accessor) eq 'HASH')
            || confess "bad accessor/reader/writer/predicate/clearer format,
must be a HASH ref";
        my ($name, $method) = %{$accessor};
        $method = $self->accessor_metaclass->wrap(
            $method,
            package_name => $self->associated_class->name,
            name         => $name,
            definition_context => $method_ctx,
        );
        $self->associate_method($method);
        return ($name, $method);
    }
    else {
        my $inline_me = ($generate_as_inline_methods &&
$self->associated_class->instance_metaclass->is_inlinable);
        my $method;
        eval {
            if ( $method_ctx ) {
                my $desc = "accessor $accessor";
                if ( $accessor ne $self->name ) {
                    $desc .= " of attribute " . $self->name;
                }

                $method_ctx->{description} = $desc;
            }

            $method = $self->accessor_metaclass->new(
                attribute     => $self,
                is_inline     => $inline_me,
                accessor_type => $type,
                package_name  => $self->associated_class->name,
                name          => $accessor,
                definition_context => $method_ctx,
            );
        };

        # here obviously
        confess "Could not create the '$type' method for " . $self->name . "
because : $@" if $@;
        $self->associate_method($method);
        return ($accessor, $method);
    }
}


#################################################

And then last but not least:

# Moose::Meta::Attribute
sub throw_error {
    my $self = shift;
    my $class = ( ref $self && $self->associated_class ) ||
"Moose::Meta::Class";
    unshift @_, "message" if @_ % 2 == 1;
    unshift @_, attr => $self if ref $self;
    unshift @_, $class;
    my $handler = $class->can("throw_error"); # to avoid incrementing depth
by 1
    goto $handler;
}


Hope this helps :-)

On Thu, Jul 9, 2009 at 11:32 PM, fREW Schmidt <fri...@gmail.com> wrote:

> Hey guys,
>
> I updated everything that I could in CPAN and somehow it destroyed my moose
> install.  This is what happens when I try to run my Cat app:
>
> Use of uninitialized value in goto at
> /usr/local/share/perl/5.10.0/Moose/Meta/Attribute.pm line 74.
> Could not create the 'reader' method for type_constraint because : goto
> must have label at /usr/local/share/perl/5.10.0/Moose/Meta/Attribute.pm line
> 74.
>  at /usr/local/lib/perl/5.10.0/Class/MOP/Attribute.pm line 390
>
> Class::MOP::Attribute::_process_accessors('Moose::Meta::Attribute=HASH(0x94eccd0)',
> 'reader', 'type_constraint', undef) called at
> /usr/local/lib/perl/5.10.0/Class/MOP/Attribute.pm line 405
>
> Class::MOP::Attribute::install_accessors('Moose::Meta::Attribute=HASH(0x94eccd0)')
> called at /usr/local/share/perl/5.10.0/Moose/Meta/Attribute.pm line 538
>
> Moose::Meta::Attribute::install_accessors('Moose::Meta::Attribute=HASH(0x94eccd0)')
> called at /usr/local/lib/perl/5.10.0/Class/MOP/Class.pm line 864
>         eval {...} called at /usr/local/lib/perl/5.10.0/Class/MOP/Class.pm
> line 864
>
> Class::MOP::Class::add_attribute('Class::MOP::Class=HASH(0x93adc68)',
> 'Moose::Meta::Attribute=HASH(0x94eccd0)') called at
> /usr/local/share/perl/5.10.0/Moose/Meta/TypeCoercion.pm line 20
>         require Moose/Meta/TypeCoercion.pm called at
> /usr/local/share/perl/5.10.0/Moose.pm line 19
>         Moose::BEGIN() called at
> /usr/local/share/perl/5.10.0/Moose/Meta/TypeCoercion.pm line 0
>         eval {...} called at
> /usr/local/share/perl/5.10.0/Moose/Meta/TypeCoercion.pm line 0
>         require Moose.pm called at
> /usr/local/share/perl/5.10.0/Catalyst/Engine/HTTP.pm line 3
>         Catalyst::Engine::HTTP::BEGIN() called at
> /usr/local/share/perl/5.10.0/Moose/Meta/TypeCoercion.pm line 0
>         eval {...} called at
> /usr/local/share/perl/5.10.0/Moose/Meta/TypeCoercion.pm line 0
>         require Catalyst/Engine/HTTP.pm called at script/glimmer_server.pl
> line 6
>         main::BEGIN() called at
> /usr/local/share/perl/5.10.0/Moose/Meta/TypeCoercion.pm line 0
>         eval {...} called at
> /usr/local/share/perl/5.10.0/Moose/Meta/TypeCoercion.pm line 0
> Compilation failed in require at /usr/local/share/perl/5.10.0/Moose.pm line
> 19.
> BEGIN failed--compilation aborted at /usr/local/share/perl/5.10.0/Moose.pm
> line 19.
> Compilation failed in require at
> /usr/local/share/perl/5.10.0/Catalyst/Engine/HTTP.pm line 3.
> BEGIN failed--compilation aborted at
> /usr/local/share/perl/5.10.0/Catalyst/Engine/HTTP.pm line 3.
> Compilation failed in require at script/glimmer_server.pl line 6.
> BEGIN failed--compilation aborted at script/glimmer_server.pl line 7.
>
>
> I tried to reinstall both Moose and Class::MOP.  Class::MOP reinstalled
> fine, but reinstalling Moose gives the same errors as this.  Any help guys?
>
> --
> fREW Schmidt
> http://blog.afoolishmanifesto.com
>



-- 
fREW Schmidt
http://blog.afoolishmanifesto.com

Reply via email to