use blib 't/Sub-Op-LexicalSub';
-use Test::More tests => 2 *((4 + 2 * 4) + (2 * 5) + 1);
+use Test::More tests => 2 * ((2 + 2) * 4 + (1 + 2) * 5) + 2 * (2 + 2) + 4;
our $call_foo;
sub foo { ok $call_foo, 'the preexistent foo was called' }
our $call_bar;
sub bar () { ok $call_bar, 'the preexistent bar was called' }
+sub X () { 1 }
+
+our $call_blech;
+sub blech { ok $call_blech, 'initial blech was called' };
+
our $called;
{
@seq = ($names[0]) x $calls;
}
- my $test = "{\n";
+ my $test = "{\n{\n";
for my $name (@names) {
$test .= <<" INIT"
use Sub::Op::LexicalSub $name => sub {
}
$test .= "{\n$code\n}\n";
$test .= "}\n";
+ for my $name (grep +{ map +($_, 1), qw/foo bar blech/ }->{ $_ }, @names) {
+ $test .= <<" CHECK_SUB"
+ {
+ local \$call_$name = 1;
+ $name();
+ }
+ CHECK_SUB
+ }
+ $test .= "}\n";
local $called = 0;
eval $test;
is prototype('main::foo'), undef, "foo's prototype was preserved";
is prototype('main::bar'), '', "bar's prototype was preserved";
+is prototype('main::X'), '', "X's prototype was preserved";
+ok Sub::Op::_constant_sub(do { no strict "refs"; \&{"main::X"} }),
+ 'X is still a constant';
__DATA__
foo();
&$bar;
----
bar # () #
+####
+is X, 2, 'constant overriding';
+----
+X # 2 # [ ]
+####
+no warnings 'redefine';
+sub blech { fail 'redefined blech was called' }
+BEGIN { $call_blech = 0 }
+blech 7;
+BEGIN { $call_blech = 1 }
+----
+blech # () # [ 7 ]