From: Shawn M Moore Date: Thu, 27 Jan 2011 03:19:50 +0000 (-0500) Subject: Add a line option for controlling that bit as well X-Git-Tag: 0.02~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=75e6988b5ef9fd1dd384d0bf3a74e50178683d17;p=gitmo%2FEval-Closure.git Add a line option for controlling that bit as well --- diff --git a/lib/Eval/Closure.pm b/lib/Eval/Closure.pm index 6a1f41e..0bb553e 100644 --- a/lib/Eval/Closure.pm +++ b/lib/Eval/Closure.pm @@ -83,6 +83,11 @@ parameter lets you override that to something more useful (for instance, L overrides the description for accessors to something like "accessor foo at MyClass.pm, line 123"). +=item line + +This lets you override the particular line number that appears in backtraces, +much like the description option. The default is "1". + =item terse_error Normally, this function appends the source code that failed to compile, and @@ -99,7 +104,7 @@ sub eval_closure { $args{source} = _canonicalize_source($args{source}); _validate_env($args{environment} ||= {}); - $args{source} = _line_directive($args{description}) . $args{source} + $args{source} = _line_directive(@args{qw(line description)}) . $args{source} if defined $args{description}; my ($code, $e) = _clean_eval_closure(@args{qw(source environment)}); @@ -157,9 +162,11 @@ sub _validate_env { } sub _line_directive { - my ($description) = @_; + my ($line, $description) = @_; + + $line = 1 if !defined($line); - return qq{#line 1 "$description"\n}; + return qq{#line $line "$description"\n}; } sub _clean_eval_closure { diff --git a/t/03-description.t b/t/03-description.t index 97f8372..15a2ce1 100644 --- a/t/03-description.t +++ b/t/03-description.t @@ -37,4 +37,17 @@ SOURCE ); } +{ + my $code = eval_closure( + source => $source, + line => 100, + description => 'accessor foo (defined at Class.pm line 282)', + ); + + like( + exception { $code->() }, + qr/^foo at accessor foo \(defined at Class\.pm line 282\) line 101\n/, + "description is set" + ); +} done_testing;