summaryrefslogtreecommitdiff
path: root/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm
diff options
context:
space:
mode:
Diffstat (limited to 'systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm')
-rw-r--r--systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm60
1 files changed, 39 insertions, 21 deletions
diff --git a/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm b/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm
index 2fc069370a..14baa9f292 100644
--- a/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm
+++ b/systems/texlive/tlnet/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm
@@ -1,58 +1,76 @@
-#!perl
+# -*- mode: perl; -*-
package Math::BigFloat::Trace;
-require 5.010;
use strict;
use warnings;
use Exporter;
use Math::BigFloat;
-our ($accuracy, $precision, $round_mode, $div_scale);
-
our @ISA = qw(Exporter Math::BigFloat);
-our $VERSION = '0.51';
+our $VERSION = '0.66';
use overload; # inherit overload from Math::BigFloat
# Globals
-$accuracy = $precision = undef;
-$round_mode = 'even';
-$div_scale = 40;
+our $accuracy = undef;
+our $precision = undef;
+our $round_mode = 'even';
+our $div_scale = 40;
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $value = shift;
+
my $a = $accuracy;
$a = $_[0] if defined $_[0];
+
my $p = $precision;
$p = $_[1] if defined $_[1];
- my $self = Math::BigFloat->new($value, $a, $p, $round_mode);
- # remember, downgrading may return a BigInt, so don't meddle with class
- # bless $self, $class;
+ my $self = $class -> SUPER::new($value, $a, $p, $round_mode);
+
+ printf "Math::BigFloat new '%s' => '%s' (%s)\n",
+ $value, $self, ref($self);
- print "MBF new '$value' => '$self' (", ref($self), ")";
return $self;
}
sub import {
- print "MBF import ", join(' ', @_);
- my $self = shift;
+ my $class = shift;
+
+ printf "%s -> import(%s)\n", $class, join(", ", @_);
+
+ # we catch the constants, the rest goes to parent
+
+ my $constant = grep { $_ eq ':constant' } @_;
+ my @a = grep { $_ ne ':constant' } @_;
+
+ if ($constant) {
+ overload::constant
+
+ integer => sub {
+ $class -> new(shift);
+ },
+
+ float => sub {
+ $class -> new(shift);
+ },
- # we catch the constants, the rest goes go BigFloat
- my @a = ();
- foreach (@_) {
- push @a, $_ if $_ ne ':constant';
+ binary => sub {
+ # E.g., a literal 0377 shall result in an object whose value
+ # is decimal 255, but new("0377") returns decimal 377.
+ return $class -> from_oct($_[0]) if $_[0] =~ /^0_*[0-7]/;
+ $class -> new(shift);
+ };
}
- overload::constant float => sub { $self->new(shift); };
- Math::BigFloat->import(@a); # need it for subclasses
-# $self->export_to_level(1,$self,@_); # need this ?
+ $class -> SUPER::import(@a); # need it for subclasses
+ #$self -> export_to_level(1, $class, @_); # need this ?
}
1;