# $Id$ package XML::SAX::PurePerl::Exception; use strict; use overload '""' => "stringify"; use vars qw/$StackTrace/; $StackTrace = $ENV{XML_DEBUG} || 0; sub throw { my $class = shift; die $class->new(@_); } sub new { my $class = shift; my %opts = @_; die "Invalid options" unless exists $opts{Message}; if ($opts{reader}) { return bless { Message => $opts{Message}, Exception => undef, # not sure what this is for!!! ColumnNumber => $opts{reader}->column, LineNumber => $opts{reader}->line, PublicId => $opts{reader}->public_id, SystemId => $opts{reader}->system_id, $StackTrace ? (StackTrace => stacktrace()) : (), }, $class; } return bless { Message => $opts{Message}, Exception => undef, # not sure what this is for!!! }, $class; } sub stringify { my $self = shift; local $^W; return $self->{Message} . " [Ln: " . $self->{LineNumber} . ", Col: " . $self->{ColumnNumber} . "]" . ($StackTrace ? stackstring($self->{StackTrace}) : "") . "\n"; } sub stacktrace { my $i = 2; my @fulltrace; while (my @trace = caller($i++)) { my %hash; @hash{qw(Package Filename Line)} = @trace[0..2]; push @fulltrace, \%hash; } return \@fulltrace; } sub stackstring { my $stacktrace = shift; my $string = "\nFrom:\n"; foreach my $current (@$stacktrace) { $string .= $current->{Filename} . " Line: " . $current->{Line} . "\n"; } return $string; } 1;
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Reader | Folder | 0755 |
|
|
DTDDecls.pm | File | 16.59 KB | 0644 |
|
DebugHandler.pm | File | 1.83 KB | 0644 |
|
DocType.pm | File | 4.55 KB | 0644 |
|
EncodingDetect.pm | File | 2.57 KB | 0644 |
|
Exception.pm | File | 1.67 KB | 0644 |
|
NoUnicodeExt.pm | File | 628 B | 0644 |
|
Productions.pm | File | 6.47 KB | 0644 |
|
Reader.pm | File | 2.48 KB | 0644 |
|
UnicodeExt.pm | File | 369 B | 0644 |
|
XMLDecl.pm | File | 3.31 KB | 0644 |
|