[libcatmandu-perl] 04/85: Fixing nested bind bug
Jonas Smedegaard
dr at jones.dk
Tue May 20 09:56:14 UTC 2014
This is an automated email from the git hooks/post-receive script.
js pushed a commit to tag 0.91
in repository libcatmandu-perl.
commit 7fee62a275d6c35f12e9cbb716d54de819598e2c
Author: Patrick Hochstenbach <patrick.hochstenbach at ugent.be>
Date: Thu May 8 06:22:31 2014 +0200
Fixing nested bind bug
---
lib/Catmandu/Fix.pm | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/lib/Catmandu/Fix.pm b/lib/Catmandu/Fix.pm
index 1f7d05e..adc9205 100644
--- a/lib/Catmandu/Fix.pm
+++ b/lib/Catmandu/Fix.pm
@@ -181,6 +181,7 @@ sub emit {
$perl;
}
+# Emit an array of fixes
sub emit_fixes {
my ($self,$fixes) = @_;
my $perl = '';
@@ -189,16 +190,21 @@ sub emit_fixes {
# Loop over all 'Catmandu::Fix::Bind' an use the result
# of a previous bind as input for a new bind. In this way
# we are sure that every fix is executed once.
+
my $code = [ map { [ref($_) , $self->emit_fix($_)] } @{$fixes} ];
+
my $bind_perl = undef;
+ my $prev_bind = undef;
for my $bind (@{$self->binder}) {
if (defined $bind_perl) {
- $bind_perl = $self->emit_bind($bind,[[$bind , $bind_perl]]);
+ $bind_perl = $self->emit_bind($bind,[[$prev_bind , $bind_perl]]);
}
else {
$bind_perl = $self->emit_bind($bind,$code);
}
+ $prev_bind = ref $bind;
}
+
$perl .= $bind_perl;
}
else {
@@ -210,12 +216,14 @@ sub emit_fixes {
$perl;
}
-sub emit_reject {
- my ($self) = @_;
- my $reject_var = $self->_reject_var;
- "return $reject_var;";
-}
-
+# Wrap an array of fix names and code in bind a bind
+#
+# $bind : a Catmandu::Fix::Bind
+# $code : array of [ $name , $perl]
+#
+# where
+# $name : name of a fix
+# $perl : perl code of a fix
sub emit_bind {
my ($self,$bind,$code) = @_;
@@ -223,7 +231,7 @@ sub emit_bind {
my $perl = "";
- if (is_instance($bind)) {
+ if (is_instance($bind) && $bind->can('unit') && $bind->can('bind')) {
my $bind_var = $self->capture($bind);
my $unit = $self->generate_var;
$perl .= "my ${unit} = ${bind_var}->unit(${var});";
@@ -242,6 +250,12 @@ sub emit_bind {
$perl;
}
+sub emit_reject {
+ my ($self) = @_;
+ my $reject_var = $self->_reject_var;
+ "return $reject_var;";
+}
+
sub emit_fix {
my ($self, $fix) = @_;
my $perl;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libcatmandu-perl.git
More information about the Pkg-perl-cvs-commits
mailing list