blob: f464d95a6213010a0d1ad111a4743c4c55a9af1f (
plain) (
blame)
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
|
package smartmatch;
use strict;
use warnings;
# ABSTRACT: pluggable smart matching backends
use parent 'DynaLoader';
use B::Hooks::OP::Check;
use B::Hooks::EndOfScope;
sub dl_load_flags { 0x01 }
__PACKAGE__->bootstrap(
# we need to be careful not to touch $VERSION at compile time, otherwise
# DynaLoader will assume it's set and check against it, which will cause
# fail when being run in the checkout without dzil having set the actual
# $VERSION
exists $smartmatch::{VERSION}
? ${ $smartmatch::{VERSION} } : (),
);
sub import {
my $package = shift;
my ($cb) = @_;
$cb = $cb->can('match') unless ref($cb);
$^H ||= 0x020000; # HINT_LOCALIZE_HH
$package->unimport;
$^H{'smartmatch_cb'} = smartmatch::register($cb);
on_scope_end { $package->unimport };
}
sub unimport {
return unless exists $^H{'smartmatch_cb'};
smartmatch::unregister(delete $^H{'smartmatch_cb'});
}
1;
|