-
Notifications
You must be signed in to change notification settings - Fork 130
/
100-dispatcher.t
62 lines (50 loc) · 992 Bytes
/
100-dispatcher.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
plan(7);
my $closure;
{
nqp::setdispatcher(100);
my $foo;
my $bar := 456;
nqp::takedispatcher('$foo');
ok($foo == 100);
nqp::takedispatcher('$bar');
ok($bar == 456);
}
{
nqp::setdispatcher(100);
my $foo := 200;
nqp::cleardispatcher();
nqp::takedispatcher('$foo');
ok($foo == 200);
}
sub foo() {
my $foo := 100;
nqp::takedispatcher('$foo');
is($foo, 100);
}
sub bar() {
my $foo := 100;
nqp::takedispatcher('$foo');
is($foo, 300);
}
nqp::setdispatcherfor(300, &bar);
foo();
bar();
sub wraped1() {
my $foo := 100;
nqp::takedispatcher('$foo');
is($foo, 100);
}
sub wraped2() {
my $foo := 100;
nqp::takedispatcher('$foo');
is($foo, 400);
}
class Wrap {
has $!code_ref;
}
nqp::setinvokespec(Wrap, Wrap, '$!code_ref',nqp::null());
my $wraped1 := Wrap.new(code_ref => &wraped1);
my $wraped2 := Wrap.new(code_ref => &wraped2);
nqp::setdispatcherfor(400, $wraped2);
$wraped1();
$wraped2();