r24864 - in /branches/upstream/libdata-visitor-perl/current: Changes MANIFEST MANIFEST.SKIP META.yml Makefile.PL SIGNATURE TODO lib/Data/Visitor.pm lib/Data/Visitor/Callback.pm t/weak.t
gregoa at users.alioth.debian.org
gregoa at users.alioth.debian.org
Sat Sep 6 18:05:53 UTC 2008
Author: gregoa
Date: Sat Sep 6 18:05:51 2008
New Revision: 24864
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=24864
Log:
[svn-upgrade] Integrating new upstream version, libdata-visitor-perl (0.19)
Added:
branches/upstream/libdata-visitor-perl/current/TODO
branches/upstream/libdata-visitor-perl/current/t/weak.t
Modified:
branches/upstream/libdata-visitor-perl/current/Changes
branches/upstream/libdata-visitor-perl/current/MANIFEST
branches/upstream/libdata-visitor-perl/current/MANIFEST.SKIP
branches/upstream/libdata-visitor-perl/current/META.yml
branches/upstream/libdata-visitor-perl/current/Makefile.PL
branches/upstream/libdata-visitor-perl/current/SIGNATURE
branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor.pm
branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor/Callback.pm
Modified: branches/upstream/libdata-visitor-perl/current/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/Changes?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/Changes (original)
+++ branches/upstream/libdata-visitor-perl/current/Changes Sat Sep 6 18:05:51 2008
@@ -1,3 +1,8 @@
+0.19
+ - Support multiple arguments to visit()
+ - use BUILDARGS for argument processing
+ - remove Data::Alias dep for now, it breaks on windows & aix with 5.8.8
+
0.18
- Weak reference support
Modified: branches/upstream/libdata-visitor-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/MANIFEST?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/MANIFEST (original)
+++ branches/upstream/libdata-visitor-perl/current/MANIFEST Sat Sep 6 18:05:51 2008
@@ -12,4 +12,6 @@
t/circular_refs.t
t/globs.t
t/magic.t
+t/weak.t
+TODO
SIGNATURE Public-key signature (added by MakeMaker)
Modified: branches/upstream/libdata-visitor-perl/current/MANIFEST.SKIP
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/MANIFEST.SKIP?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/MANIFEST.SKIP (original)
+++ branches/upstream/libdata-visitor-perl/current/MANIFEST.SKIP Sat Sep 6 18:05:51 2008
@@ -33,6 +33,11 @@
\.DS_Store$
\.sw.$
-\.tar\.gz$
-^(\w+-)*(\w+)-\d\.\d+$
+(\w+-)*(\w+)-\d\.\d+(?:\.tar\.gz)?$
+\.t\.log$
+
+\.prove$
+
+# XS shit
+\.(?:bs|c|o)$
Modified: branches/upstream/libdata-visitor-perl/current/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/META.yml?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/META.yml (original)
+++ branches/upstream/libdata-visitor-perl/current/META.yml Sat Sep 6 18:05:51 2008
@@ -1,14 +1,13 @@
--- #YAML:1.0
name: Data-Visitor
-version: 0.18
+version: 0.19
abstract: ~
license: ~
author: ~
generated_by: ExtUtils::MakeMaker version 6.44
distribution_type: module
requires:
- Data::Alias: 0
- Mouse: 0.04
+ Mouse: 0.06
namespace::clean: 0.08
Task::Weaken: 0
Test::MockObject: 1.04
Modified: branches/upstream/libdata-visitor-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/Makefile.PL?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/Makefile.PL (original)
+++ branches/upstream/libdata-visitor-perl/current/Makefile.PL Sat Sep 6 18:05:51 2008
@@ -5,13 +5,13 @@
'NAME' => 'Data::Visitor',
'VERSION_FROM' => 'lib/Data/Visitor.pm',
'PREREQ_PM' => {
- 'Mouse' => '0.04',
+ 'Mouse' => '0.06',
'namespace::clean' => '0.08',
'Test::MockObject' => '1.04',
'Test::More' => '0',
'Test::use::ok' => '0',
'Tie::ToObject' => '0.01',
- 'Data::Alias' => '0', # deref
+ #'Data::Alias' => '0', # deref # FIXME broken on windows
'Task::Weaken' => '0',
},
'INSTALLDIRS' => 'site',
Modified: branches/upstream/libdata-visitor-perl/current/SIGNATURE
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/SIGNATURE?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/SIGNATURE (original)
+++ branches/upstream/libdata-visitor-perl/current/SIGNATURE Sat Sep 6 18:05:51 2008
@@ -14,13 +14,14 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
-SHA1 f76d5269f3c5313694113e8b3362256c8f670336 Changes
-SHA1 f0cf3ccc1cd7b0f3215f358edc7fa0099b437aba MANIFEST
-SHA1 ddb918d4e02cc06f4b9fe77adeca65403f8fdd56 MANIFEST.SKIP
-SHA1 b14f53f397db61e88961db37ad435608cda2a610 META.yml
-SHA1 bd5e62254be119a314ca4ecbc82232acf7228558 Makefile.PL
-SHA1 c8c41789cb077f2b6492c0a74b77689eda948cc6 lib/Data/Visitor.pm
-SHA1 b0091166f97f2a8ec098746a3d44f3c051361eaa lib/Data/Visitor/Callback.pm
+SHA1 2b574657bceac05e0b7e9464a0f61506d29d8f95 Changes
+SHA1 106762d02554191b029a90b21c412fcdeb7a0db3 MANIFEST
+SHA1 e8482690dad0ff3aaa335aa5b8b650851e504871 MANIFEST.SKIP
+SHA1 055847a5082546a6096e11428cef52a2268b8835 META.yml
+SHA1 77503aee33fccc87148e852ef51462bd6fcbe3ce Makefile.PL
+SHA1 6cf45b4e947e1bb11fd188e9866d73eabc936ead TODO
+SHA1 9bb0ecfe2927894d617895e9857022f673bc02ac lib/Data/Visitor.pm
+SHA1 977e34f680aaf8acfafb415b02fb06c507ed55bd lib/Data/Visitor/Callback.pm
SHA1 dfba09a3df7adaf6d0369a4745e6e336272c405d t/base.t
SHA1 257c858e1bc12c1039e93cac62a0d37f2e0d804d t/bugs.t
SHA1 e4b813021fa680c61cb4229a9ddeb0a22ec5bf82 t/callback.t
@@ -28,10 +29,11 @@
SHA1 ba502603afe759f9f22026c8c6527d1753fa6174 t/circular_refs.t
SHA1 54affd2088fa25d8eec562fb8d39e1abd0d123c7 t/globs.t
SHA1 a3a3ead5cdb91a600fb6c7ae585bfe98fcf82bbf t/magic.t
+SHA1 66d201c2ce83481cee0a2838f118b5cce35c8bcc t/weak.t
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)
-iD8DBQFIhOUwVCwRwOvSdBgRApvLAKCKFXUZ3qfYxnng0OOorUj1J4TtCgCgsfgL
-8galJKWH8Cq5i8uoRRtKJGw=
-=h2wC
+iD8DBQFItHv3VCwRwOvSdBgRAh3tAKCv1LiPJDvIzsaHIPUuueDRGUkeogCgo1KA
+aJXuD9ucqXuzq56hNzo4Pj0=
+=SQDN
-----END PGP SIGNATURE-----
Added: branches/upstream/libdata-visitor-perl/current/TODO
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/TODO?rev=24864&op=file
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/TODO (added)
+++ branches/upstream/libdata-visitor-perl/current/TODO Sat Sep 6 18:05:51 2008
@@ -1,0 +1,1 @@
+steal from Clone::Closure
Modified: branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor.pm?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor.pm (original)
+++ branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor.pm Sat Sep 6 18:05:51 2008
@@ -14,7 +14,7 @@
# the double not makes this no longer undef, so exempt from useless constant warnings in older perls
use constant DEBUG => not not our $DEBUG || $ENV{DATA_VISITOR_DEBUG};
-our $VERSION = "0.18";
+our $VERSION = "0.19";
has tied_as_objects => (
isa => "Bool",
@@ -47,25 +47,32 @@
}
sub visit {
- my ( $self, $data ) = @_;
+ my $self = shift;
local $self->{depth} = (($self->{depth}||0) + 1) if DEBUG;
- $self->trace( flow => visit => $data ) if DEBUG;
-
my $seen_hash = local $self->{_seen} = ($self->{_seen} || {}); # delete it after we're done with the whole visit
- if ( ref $data ) { # only references need recursion checks
-
- $seen_hash->{weak} ||= isweak($_[1]) if $self->weaken;
-
- if ( exists $seen_hash->{ refaddr($data) } ) {
- $self->trace( mapping => found_mapping => from => $data, to => $seen_hash->{ refaddr($data) } ) if DEBUG;
- return $self->visit_seen( $_[1], $seen_hash->{refaddr($data)} );
- } else {
- $self->trace( mapping => no_mapping => $data ) if DEBUG;
- }
- }
-
- return $self->visit_no_rec_check( $_[1] );
+
+ my @ret;
+
+ foreach my $data ( @_ ) {
+ $self->trace( flow => visit => $data ) if DEBUG;
+
+ if ( my $refaddr = ref($data) && refaddr($data) ) { # only references need recursion checks
+ $seen_hash->{weak} ||= isweak($data) if $self->weaken;
+
+ if ( exists $seen_hash->{$refaddr} ) {
+ $self->trace( mapping => found_mapping => from => $data, to => $seen_hash->{$refaddr} ) if DEBUG;
+ push @ret, $self->visit_seen( $data, $seen_hash->{$refaddr} );
+ next;
+ } else {
+ $self->trace( mapping => no_mapping => $data ) if DEBUG;
+ }
+ }
+
+ push @ret, $self->visit_no_rec_check( $data );
+ }
+
+ return ( @_ == 1 ? $ret[0] : @ret );
}
sub visit_seen {
Modified: branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor/Callback.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor/Callback.pm?rev=24864&op=diff
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor/Callback.pm (original)
+++ branches/upstream/libdata-visitor-perl/current/lib/Data/Visitor/Callback.pm Sat Sep 6 18:05:51 2008
@@ -32,19 +32,14 @@
is => "rw",
);
-# FIXME BUILDARGS
-sub new {
- my ( $class, %callbacks ) = @_;
-
- my $ignore_ret = 0;
- if ( exists $callbacks{ignore_return_values} ) {
- $ignore_ret = delete $callbacks{ignore_return_values};
- }
-
- my $tied_as_objects = 0;
- if ( exists $callbacks{tied_as_objects} ) {
- $tied_as_objects = delete $callbacks{tied_as_objects};
- }
+sub BUILDARGS {
+ my ( $class, @args ) = @_;
+
+ my $args = $class->SUPER::BUILDARGS(@args);
+
+ my %init_args = map { $_->init_arg => undef } $class->meta->compute_all_applicable_attributes;
+
+ my %callbacks = map { $_ => $args->{$_} } grep { not exists $init_args{$_} } keys %$args;
my @class_callbacks = do {
no strict 'refs';
@@ -63,35 +58,43 @@
# sort from least derived to most derived
@class_callbacks = sort { !$a->isa($b) <=> !$b->isa($a) } @class_callbacks;
- $class->SUPER::new({
- tied_as_objects => $tied_as_objects,
- ignore_return_values => $ignore_ret,
- callbacks => \%callbacks,
+ return {
+ %$args,
+ callbacks => \%callbacks,
class_callbacks => \@class_callbacks,
- });
+ };
}
sub visit {
- my ( $self, $data ) = @_;
+ my $self = shift;
my $replaced_hash = local $self->{_replaced} = ($self->{_replaced} || {}); # delete it after we're done with the whole visit
- local *_ = \$_[1]; # alias $_
-
- if ( ref $data and exists $replaced_hash->{ refaddr($data) } ) {
- if ( FIVE_EIGHT ) {
- $self->trace( mapping => replace => $data, with => $replaced_hash->{ refaddr($data) } ) if DEBUG;
- return $_[1] = $replaced_hash->{ refaddr($data) };
- } else {
- carp(q{Assignment of replacement value for already seen reference } . overload::StrVal($data) . q{ to container doesn't work on Perls older than 5.8, structure shape may have lost integrity.});
+ my @ret;
+
+ for my $data (@_) {
+ my $refaddr = ref($data) && refaddr($data); # we need this early, it may change by the time we write replaced hash
+
+ local *_ = \$data; # alias $_
+
+ if ( $refaddr and exists $replaced_hash->{ $refaddr } ) {
+ if ( FIVE_EIGHT ) {
+ $self->trace( mapping => replace => $data, with => $replaced_hash->{$refaddr} ) if DEBUG;
+ push @ret, $data = $replaced_hash->{$refaddr};
+ next;
+ } else {
+ carp(q{Assignment of replacement value for already seen reference } . overload::StrVal($data) . q{ to container doesn't work on Perls older than 5.8, structure shape may have lost integrity.});
+ }
}
- }
-
- my $ret = $self->SUPER::visit( $self->callback( visit => $data ) );
-
- $replaced_hash->{ refaddr($data) } = $_ if ref $data and ( not ref $_ or refaddr($data) ne refaddr($_) );
-
- return $ret;
+
+ my $ret = $self->SUPER::visit( $self->callback( visit => $data ) );
+
+ $replaced_hash->{$refaddr} = $_ if $refaddr and ( not ref $_ or $refaddr ne refaddr($_) );
+
+ push @ret, $ret;
+ }
+
+ return ( @_ == 1 ? $ret[0] : @ret );
}
sub visit_seen {
Added: branches/upstream/libdata-visitor-perl/current/t/weak.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libdata-visitor-perl/current/t/weak.t?rev=24864&op=file
==============================================================================
--- branches/upstream/libdata-visitor-perl/current/t/weak.t (added)
+++ branches/upstream/libdata-visitor-perl/current/t/weak.t Sat Sep 6 18:05:51 2008
@@ -1,0 +1,49 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+BEGIN {
+ plan skip_all => $@ unless eval { require Data::Alias; 1 };
+ plan 'no_plan';
+}
+
+use Scalar::Util qw(isweak weaken);
+
+use ok 'Data::Visitor';
+
+{
+ my $ref = { };
+ $ref->{foo} = $ref;
+ weaken($ref->{foo});
+
+ ok( isweak($ref->{foo}), "foo is weak" );
+
+ my $v = Data::Visitor->new( weaken => 1 );
+
+ my $copy = $v->visit($ref);
+
+ is_deeply( $copy, $ref, "copy is equal" );
+
+ ok( isweak($copy->{foo}), 'copy is weak' );
+}
+
+{
+ my $ref = { foo => { } };
+ $ref->{bar} = $ref->{foo};
+ weaken($ref->{foo});
+
+ ok( isweak($ref->{foo}), "foo is weak" );
+ ok( !isweak($ref->{bar}), "bar is not weak" );
+
+ my $v = Data::Visitor->new( weaken => 1 );
+
+ my $copy = $v->visit($ref);
+
+ local $TODO = "can't tell apart different refs without making hash/array elems seen as scalar refs";
+ ok( isweak($copy->{foo}), 'copy is weak' );
+ is_deeply( $copy, $ref, "copy is equal" );
+ ok( ref $copy->{bar} && !isweak($copy->{bar}), 'but not in bar' );
+}
More information about the Pkg-perl-cvs-commits
mailing list