ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Strict.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent/Strict.pm (file contents):
Revision 1.6 by root, Fri Nov 21 01:35:59 2008 UTC vs.
Revision 1.15 by root, Thu Jul 9 21:42:23 2009 UTC

3AnyEvent::Strict - force strict mode on for the whole process 3AnyEvent::Strict - force strict mode on for the whole process
4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7 use AnyEvent::Strict; 7 use AnyEvent::Strict;
8 # struct mode now switched on 8 # strict mode now switched on
9 9
10=head1 DESCRIPTION 10=head1 DESCRIPTION
11 11
12This module implements AnyEvent's strict mode. 12This module implements AnyEvent's strict mode.
13 13
14Loading it makes AnyEvent check all arguments to AnyEvent-methods, at the 14Loading it makes AnyEvent check all arguments to AnyEvent-methods, at the
15expense of being slower (often the argument checking takes longer than the 15expense of being slower (often the argument checking takes longer than the
16actual fucntion). 16actual function).
17 17
18Normally, you don't load this module yourself but instead use it 18Normally, you don't load this module yourself but instead use it
19indirectly via the C<PERL_ANYEVENT_STRICT> environment variable (see 19indirectly via the C<PERL_ANYEVENT_STRICT> environment variable (see
20L<AnyEvent>). However, this module can be loaded at any time. 20L<AnyEvent>). However, this module can be loaded at any time.
21 21
22=cut 22=cut
23 23
24package AnyEvent::Strict; 24package AnyEvent::Strict;
25 25
26no warnings;
27use strict qw(vars subs);
28
26use Carp qw(croak); 29use Carp qw(croak);
30use Fcntl ();
27 31
28use AnyEvent (); 32use AnyEvent ();
33use AnyEvent::Util ();
34
35our @ISA;
29 36
30AnyEvent::post_detect { 37AnyEvent::post_detect {
31 # assume the first ISA member is the implementation 38 # assume the first ISA member is the implementation
32 # # and link us in before it in the chain. 39 # # and link us in before it in the chain.
33 my $MODEL = shift @AnyEvent::ISA; 40 my $MODEL = shift @AnyEvent::ISA;
41 48
42 ref $arg{cb} 49 ref $arg{cb}
43 or croak "AnyEvent->io called with illegal cb argument '$arg{cb}'"; 50 or croak "AnyEvent->io called with illegal cb argument '$arg{cb}'";
44 delete $arg{cb}; 51 delete $arg{cb};
45 52
46 defined fileno $arg{fh}
47 or croak "AnyEvent->io called with illegal fh argument '$arg{fh}'";
48 delete $arg{fh};
49
50 $arg{poll} =~ /^[rw]$/ 53 $arg{poll} =~ /^[rw]$/
51 or croak "AnyEvent->io called with illegal poll argument '$arg{poll}'"; 54 or croak "AnyEvent->io called with illegal poll argument '$arg{poll}'";
55
56 if (defined fileno $arg{fh} or ref $arg{fh} or $arg{fh} !~ /^\s*\d+\s*$/) {
57 defined fileno $arg{fh}
58 or croak "AnyEvent->io called with illegal fh argument '$arg{fh}'";
59 } else {
60 $arg{fh} = AnyEvent::_dupfh $arg{poll}, $arg{fh};
61 }
62
63 -f $arg{fh}
64 and croak "AnyEvent->io called with fh argument pointing to a file";
65
52 delete $arg{poll}; 66 delete $arg{poll};
67 delete $arg{fh};
53 68
54 croak "AnyEvent->io called with unsupported parameter(s) " . join ", ", keys %arg 69 croak "AnyEvent->io called with unsupported parameter(s) " . join ", ", keys %arg
55 if keys %arg; 70 if keys %arg;
56 71
57 $class->SUPER::io (@_) 72 $class->SUPER::io (@_)
85 100
86 ref $arg{cb} 101 ref $arg{cb}
87 or croak "AnyEvent->signal called with illegal cb argument '$arg{cb}'"; 102 or croak "AnyEvent->signal called with illegal cb argument '$arg{cb}'";
88 delete $arg{cb}; 103 delete $arg{cb};
89 104
90 eval "require POSIX; 0 < &POSIX::SIG$arg{signal}" 105 defined AnyEvent::Util::sig2num $arg{signal}
91 or croak "AnyEvent->signal called with illegal signal name '$arg{signal}'"; 106 or croak "AnyEvent->signal called with illegal signal name '$arg{signal}'";
92 delete $arg{signal}; 107 delete $arg{signal};
93 108
94 croak "AnyEvent->signal called with unsupported parameter(s) " . join ", ", keys %arg 109 croak "AnyEvent->signal called with unsupported parameter(s) " . join ", ", keys %arg
95 if keys %arg; 110 if keys %arg;
100sub child { 115sub child {
101 my $class = shift; 116 my $class = shift;
102 my %arg = @_; 117 my %arg = @_;
103 118
104 ref $arg{cb} 119 ref $arg{cb}
105 or croak "AnyEvent->signal called with illegal cb argument '$arg{cb}'"; 120 or croak "AnyEvent->child called with illegal cb argument '$arg{cb}'";
106 delete $arg{cb}; 121 delete $arg{cb};
107 122
108 $arg{pid} =~ /^-?\d+$/ 123 $arg{pid} =~ /^-?\d+$/
109 or croak "AnyEvent->signal called with illegal pid value '$arg{pid}'"; 124 or croak "AnyEvent->child called with malformed pid value '$arg{pid}'";
110 delete $arg{pid}; 125 delete $arg{pid};
111 126
112 croak "AnyEvent->signal called with unsupported parameter(s) " . join ", ", keys %arg 127 croak "AnyEvent->child called with unsupported parameter(s) " . join ", ", keys %arg
113 if keys %arg; 128 if keys %arg;
114 129
115 $class->SUPER::child (@_) 130 $class->SUPER::child (@_)
131}
132
133sub idle {
134 my $class = shift;
135 my %arg = @_;
136
137 ref $arg{cb}
138 or croak "AnyEvent->idle called with illegal cb argument '$arg{cb}'";
139 delete $arg{cb};
140
141 croak "AnyEvent->idle called with unsupported parameter(s) " . join ", ", keys %arg
142 if keys %arg;
143
144 $class->SUPER::idle (@_)
116} 145}
117 146
118sub condvar { 147sub condvar {
119 my $class = shift; 148 my $class = shift;
120 my %arg = @_; 149 my %arg = @_;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines