blob: 6de5bf8900c5bbbe14e38c96dd4971cacab4677d (
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package Try;
use strict;
use warnings;
use Try::Tiny ();
use Parse::Keyword { try => \&try_parser };
use Exporter 'import';
our @EXPORT = ('try');
sub try {
my ($try, $catch, $finally) = @_;
&Try::Tiny::try(
$try,
($catch ? (&Try::Tiny::catch($catch)) : ()),
($finally ? (&Try::Tiny::finally($finally)) : ()),
);
}
sub try_parser {
my ($try, $catch, $finally);
lex_read_space;
die "syntax error" unless lex_peek_unichar eq '{';
$try = parse_block;
lex_read_space;
ensure_linestr_len(6);
if (linestr =~ /^catch\b/) {
lex_read_to(5);
lex_read_space;
die "syntax error" unless lex_peek_unichar eq '{';
$catch = parse_block;
}
lex_read_space;
ensure_linestr_len(8);
if (linestr =~ /^finally\b/) {
lex_read_to(7);
lex_read_space;
die "syntax error" unless lex_peek_unichar eq '{';
$finally = parse_block;
}
return (sub { ($try, $catch, $finally) }, 1);
}
1;
|