AutoCode

 view release on metacpan or  search on metacpan

lib/AutoCode/Root0.pm  view on Meta::CPAN

    return %hints;
}

sub debug {
    my $self=shift;
#    return unless($self->{DEBUG_HINTS_SLOT}->{enable});
    
    return unless $debug;
    my $pkg=caller;
    print STDERR "In $pkg, @_\n";
}

sub throw {
    my ($self, $string)=@_;
    my $out ="\n". '-'x20 . ' EXCEPTION '. '-'x20 . "\n";
    $out .= "MSG: $string\n";
    $out .= $self->stack_trace_dump .'-'x51 ."\n";
    die $out;
}

sub warn {
    my ($self, $msg)=@_;
    my $out="\n". '-'x20 . ' WARNING '. '-'x20 . "\n";
    $out .= "MSG: $msg\n";
    $out .= '-'x51 ."\n";
    print STDERR $out;
}

sub stack_trace_dump {
    my $self=shift;
    my @stack=$self->stack_trace;
    eval{
        #<< x 3;
        shift @stack;
        shift @stack;shift @stack;
    };
    my $out;
    my ($module, $function, $file, $position);
    map {
        ($module, $function, $file, $position)=@$_;
        $out.= "STACK $function $file:$position\n";
    } @stack;
    return $out;
}

sub stack_trace {
    my $self=shift;
    my $i=0;
    my @out=();
    my $prev=[];
    while(my @call=caller($i++)){
        $prev->[3]=$call[3];
        push(@out, $prev);
        $prev=\@call;
    }
    $prev->[3]='toplevel';
    push @out, $prev;
    return @out;
}

sub _not_implemented_msg {
    my $self=shift;
    my $pkg=ref $self;
    my $method=(caller(1))[3];
    my $msg="Abstract method [$method] is not implemented by package $pkg.\n";
    return $msg;
}

sub throw_not_implemented {
    my $self=shift;
    $self->throw($self->_not_implemented_msg);
}

sub warn_not_implemented {
    my $self=shift;
    $self->warn($self->_not_implemented_msg);
}

1;



( run in 1.799 second using v1.01-cache-2.11-cpan-39bf76dae61 )