BEGIN { use_ok
"Scope::Escape"
,
qw(current_escape_function)
; }
BEGIN { Scope::Escape::_set_sanity_checking(1); }
my
@events
;
my
$cont
;
sub
aa(@) {
push
@events
, [
"aa0"
, Scope::Escape::Continuation::
wantarray
(
$cont
),
@_
];
push
@events
, [
"aa1"
,
$cont
->(),
"z"
];
push
@events
, [
"aa2"
];
return
"aa3"
;
}
sub
bb(@) {
push
@events
, [
"bb0"
, Scope::Escape::Continuation::
wantarray
(
$cont
),
@_
];
push
@events
, [
"bb1"
,
$cont
->(
"bb2"
),
"z"
];
push
@events
, [
"bb3"
];
return
"bb4"
;
}
sub
cc(@) {
push
@events
, [
"cc0"
, Scope::Escape::Continuation::
wantarray
(
$cont
),
@_
];
push
@events
, [
"cc1"
,
$cont
->(
"cc2"
,
"cc3"
),
"z"
];
push
@events
, [
"cc4"
];
return
"cc5"
;
}
sub
ee($@) {
my
$aa
=
shift
;
push
@events
, [
"ee0"
,
@_
];
$@ =
"wibble\n"
;
push
@events
, [
"ee1"
,
eval
{
$cont
= current_escape_function;
push
@events
, [
"dd0"
,
@_
];
push
@events
, [
"dd1"
,
$aa
->(
@_
),
"z"
];
push
@events
, [
"dd2"
];
"dd3"
;
},
"z"
, $@ ];
$@ =
"wibble\n"
;
push
@events
, [
"ee2"
,
scalar
(
eval
{
$cont
= current_escape_function;
push
@events
, [
"dd0"
,
@_
];
push
@events
, [
"dd1"
,
$aa
->(
@_
),
"z"
];
push
@events
, [
"dd2"
];
"dd3"
;
}),
"z"
, $@ ];
$@ =
"wibble\n"
;
push
@events
, [
"ee3"
,
do
{
eval
{
$cont
= current_escape_function;
push
@events
, [
"dd0"
,
@_
];
push
@events
, [
"dd1"
,
$aa
->(
@_
),
"z"
];
push
@events
, [
"dd2"
];
no
warnings
"void"
;
"dd3"
;
};
"v"
},
"z"
, $@ ];
push
@events
, [
"ee4"
];
return
"ee5"
;
}
@events
= ();
$cont
=
undef
;
is ee(\
&aa
,
"t0"
,
"0t"
),
"ee5"
;
is_deeply \
@events
, [
[
"ee0"
,
"t0"
,
"0t"
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"aa0"
, !!1,
"t0"
,
"0t"
],
[
"ee1"
,
"z"
,
""
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"aa0"
, !!0,
"t0"
,
"0t"
],
[
"ee2"
,
undef
,
"z"
,
""
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"aa0"
,
undef
,
"t0"
,
"0t"
],
[
"ee3"
,
"v"
,
"z"
,
""
],
[
"ee4"
],
];
@events
= ();
$cont
=
undef
;
is ee(\
&bb
,
"t0"
,
"0t"
),
"ee5"
;
is_deeply \
@events
, [
[
"ee0"
,
"t0"
,
"0t"
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"bb0"
, !!1,
"t0"
,
"0t"
],
[
"ee1"
,
"bb2"
,
"z"
,
""
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"bb0"
, !!0,
"t0"
,
"0t"
],
[
"ee2"
,
"bb2"
,
"z"
,
""
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"bb0"
,
undef
,
"t0"
,
"0t"
],
[
"ee3"
,
"v"
,
"z"
,
""
],
[
"ee4"
],
];
@events
= ();
$cont
=
undef
;
is ee(\
&cc
,
"t0"
,
"0t"
),
"ee5"
;
is_deeply \
@events
, [
[
"ee0"
,
"t0"
,
"0t"
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"cc0"
, !!1,
"t0"
,
"0t"
],
[
"ee1"
,
"cc2"
,
"cc3"
,
"z"
,
""
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"cc0"
, !!0,
"t0"
,
"0t"
],
[
"ee2"
,
"cc3"
,
"z"
,
""
],
[
"dd0"
,
"t0"
,
"0t"
],
[
"cc0"
,
undef
,
"t0"
,
"0t"
],
[
"ee3"
,
"v"
,
"z"
,
""
],
[
"ee4"
],
];
1;