summaryrefslogtreecommitdiffstats
path: root/linux-x86/lib/perl-base/overload.pm
diff options
context:
space:
mode:
Diffstat (limited to 'linux-x86/lib/perl-base/overload.pm')
-rw-r--r--linux-x86/lib/perl-base/overload.pm181
1 files changed, 0 insertions, 181 deletions
diff --git a/linux-x86/lib/perl-base/overload.pm b/linux-x86/lib/perl-base/overload.pm
deleted file mode 100644
index 22b4b99..0000000
--- a/linux-x86/lib/perl-base/overload.pm
+++ /dev/null
@@ -1,181 +0,0 @@
-package overload;
-
-our $VERSION = '1.28';
-
-%ops = (
- with_assign => "+ - * / % ** << >> x .",
- assign => "+= -= *= /= %= **= <<= >>= x= .=",
- num_comparison => "< <= > >= == !=",
- '3way_comparison' => "<=> cmp",
- str_comparison => "lt le gt ge eq ne",
- binary => '& &= | |= ^ ^= &. &.= |. |.= ^. ^.=',
- unary => "neg ! ~ ~.",
- mutators => '++ --',
- func => "atan2 cos sin exp abs log sqrt int",
- conversion => 'bool "" 0+ qr',
- iterators => '<>',
- filetest => "-X",
- dereferencing => '${} @{} %{} &{} *{}',
- matching => '~~',
- special => 'nomethod fallback =',
-);
-
-my %ops_seen;
-@ops_seen{ map split(/ /), values %ops } = ();
-
-sub nil {}
-
-sub OVERLOAD {
- $package = shift;
- my %arg = @_;
- my $sub;
- *{$package . "::(("} = \&nil; # Make it findable via fetchmethod.
- for (keys %arg) {
- if ($_ eq 'fallback') {
- for my $sym (*{$package . "::()"}) {
- *$sym = \&nil; # Make it findable via fetchmethod.
- $$sym = $arg{$_};
- }
- } else {
- warnings::warnif("overload arg '$_' is invalid")
- unless exists $ops_seen{$_};
- $sub = $arg{$_};
- if (not ref $sub) {
- $ {$package . "::(" . $_} = $sub;
- $sub = \&nil;
- }
- #print STDERR "Setting '$ {'package'}::\cO$_' to \\&'$sub'.\n";
- *{$package . "::(" . $_} = \&{ $sub };
- }
- }
-}
-
-sub import {
- $package = (caller())[0];
- # *{$package . "::OVERLOAD"} = \&OVERLOAD;
- shift;
- $package->overload::OVERLOAD(@_);
-}
-
-sub unimport {
- $package = (caller())[0];
- shift;
- *{$package . "::(("} = \&nil;
- for (@_) {
- warnings::warnif("overload arg '$_' is invalid")
- unless exists $ops_seen{$_};
- delete $ {$package . "::"}{$_ eq 'fallback' ? '()' : "(" .$_};
- }
-}
-
-sub Overloaded {
- my $package = shift;
- $package = ref $package if ref $package;
- mycan ($package, '()') || mycan ($package, '((');
-}
-
-sub ov_method {
- my $globref = shift;
- return undef unless $globref;
- my $sub = \&{*$globref};
- no overloading;
- return $sub if $sub != \&nil;
- return shift->can($ {*$globref});
-}
-
-sub OverloadedStringify {
- my $package = shift;
- $package = ref $package if ref $package;
- #$package->can('(""')
- ov_method mycan($package, '(""'), $package
- or ov_method mycan($package, '(0+'), $package
- or ov_method mycan($package, '(bool'), $package
- or ov_method mycan($package, '(nomethod'), $package;
-}
-
-sub Method {
- my $package = shift;
- if(ref $package) {
- local $@;
- local $!;
- require Scalar::Util;
- $package = Scalar::Util::blessed($package);
- return undef if !defined $package;
- }
- #my $meth = $package->can('(' . shift);
- ov_method mycan($package, '(' . shift), $package;
- #return $meth if $meth ne \&nil;
- #return $ {*{$meth}};
-}
-
-sub AddrRef {
- no overloading;
- "$_[0]";
-}
-
-*StrVal = *AddrRef;
-
-sub mycan { # Real can would leave stubs.
- my ($package, $meth) = @_;
-
- local $@;
- local $!;
- require mro;
-
- my $mro = mro::get_linear_isa($package);
- foreach my $p (@$mro) {
- my $fqmeth = $p . q{::} . $meth;
- return \*{$fqmeth} if defined &{$fqmeth};
- }
-
- return undef;
-}
-
-%constants = (
- 'integer' => 0x1000, # HINT_NEW_INTEGER
- 'float' => 0x2000, # HINT_NEW_FLOAT
- 'binary' => 0x4000, # HINT_NEW_BINARY
- 'q' => 0x8000, # HINT_NEW_STRING
- 'qr' => 0x10000, # HINT_NEW_RE
- );
-
-use warnings::register;
-sub constant {
- # Arguments: what, sub
- while (@_) {
- if (@_ == 1) {
- warnings::warnif ("Odd number of arguments for overload::constant");
- last;
- }
- elsif (!exists $constants {$_ [0]}) {
- warnings::warnif ("'$_[0]' is not an overloadable type");
- }
- elsif (!ref $_ [1] || "$_[1]" !~ /(^|=)CODE\(0x[0-9a-f]+\)$/) {
- # Can't use C<ref $_[1] eq "CODE"> above as code references can be
- # blessed, and C<ref> would return the package the ref is blessed into.
- if (warnings::enabled) {
- $_ [1] = "undef" unless defined $_ [1];
- warnings::warn ("'$_[1]' is not a code reference");
- }
- }
- else {
- $^H{$_[0]} = $_[1];
- $^H |= $constants{$_[0]};
- }
- shift, shift;
- }
-}
-
-sub remove_constant {
- # Arguments: what, sub
- while (@_) {
- delete $^H{$_[0]};
- $^H &= ~ $constants{$_[0]};
- shift, shift;
- }
-}
-
-1;
-
-__END__
-