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