You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2004/05/04 08:05:17 UTC
cvs commit: modperl-2.0/xs/APR/Error APR__Error.h Error_pm
stas 2004/05/03 23:05:17
Added: xs/APR/Error APR__Error.h Error_pm
Log:
the perl interface for the new exception handling code
Revision Changes Path
1.1 modperl-2.0/xs/APR/Error/APR__Error.h
Index: APR__Error.h
===================================================================
/* Copyright 2002-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define mpxs_APR__Error_strerror(rc) modperl_error_strerror(aTHX_ rc)
1.1 modperl-2.0/xs/APR/Error/Error_pm
Index: Error_pm
===================================================================
require Carp;
require Carp::Heavy;
use APR::Util ();
use overload
nomethod => \&fatal,
'bool' => \&str,
'==' => \&num,
'0+' => \&num,
'""' => \&str;
sub fatal { die __PACKAGE__ . ": Can't handle '$_[3]'" }
# normally the object is created on the C side, but if you want to
# create one from Perl, you can. just pass a hash with args:
# rc, file, line, func
sub new {
my $class = shift;
my %args = @_;
bless \%args, $class;
}
sub str {
sprintf "%s: %s at %s line %d", $_[0]->{func},
APR::Error::strerror($_[0]->{rc}),
$_[0]->{file}, $_[0]->{line};
}
sub num { $_[0]->{rc} }
# skip the wrappers from this package from the long callers trace
$Carp::CarpInternal{+__PACKAGE__}++;
# XXX: Carp::(confess|cluck) see no calls stack when Perl_croak is
# called with Nullch (which is the way execption objects are
# returned), so we fixup it here (doesn't quite work for croak
# caller).
sub cluck {
if (ref $_[0] eq __PACKAGE__) {
Carp::cluck("$_[0]->{func}: " .
APR::Error::strerror($_[0]->{rc}));
}
else {
&Carp::cluck;
}
}
sub confess {
if (ref $_[0] eq __PACKAGE__) {
Carp::confess("$_[0]->{func}: " .
APR::Error::strerror($_[0]->{rc}));
}
else {
&Carp::confess;
}
}
1;
__END__