… | |
… | |
4 | /* WARNING |
4 | /* WARNING |
5 | * This header file is a shared resource between many modules. |
5 | * This header file is a shared resource between many modules. |
6 | */ |
6 | */ |
7 | |
7 | |
8 | /* useful stuff, used by schmorp mostly */ |
8 | /* useful stuff, used by schmorp mostly */ |
|
|
9 | |
|
|
10 | #include "patchlevel.h" |
9 | |
11 | |
10 | #define PERL_VERSION_ATLEAST(a,b,c) \ |
12 | #define PERL_VERSION_ATLEAST(a,b,c) \ |
11 | (PERL_REVISION > (a) \ |
13 | (PERL_REVISION > (a) \ |
12 | || (PERL_REVISION == (a) \ |
14 | || (PERL_REVISION == (a) \ |
13 | && (PERL_VERSION > (b) \ |
15 | && (PERL_VERSION > (b) \ |
… | |
… | |
135 | static SV * |
137 | static SV * |
136 | s_get_cv (SV *cb_sv) |
138 | s_get_cv (SV *cb_sv) |
137 | { |
139 | { |
138 | HV *st; |
140 | HV *st; |
139 | GV *gvp; |
141 | GV *gvp; |
140 | CV *cv = sv_2cv (cb_sv, &st, &gvp, 0); |
|
|
141 | |
142 | |
142 | return (SV *)cv; |
143 | return (SV *)sv_2cv (cb_sv, &st, &gvp, 0); |
143 | } |
144 | } |
144 | |
145 | |
145 | static SV * |
146 | static SV * |
146 | s_get_cv_croak (SV *cb_sv) |
147 | s_get_cv_croak (SV *cb_sv) |
147 | { |
148 | { |
148 | cb_sv = s_get_cv (cb_sv); |
149 | SV *cv = s_get_cv (cb_sv); |
149 | |
150 | |
150 | if (!cb_sv) |
151 | if (!cv) |
151 | croak ("%s: callback must be a CODE reference or another callable object", SvPV_nolen (cb_sv)); |
152 | croak ("%s: callback must be a CODE reference or another callable object", SvPV_nolen (cb_sv)); |
152 | |
153 | |
153 | return cb_sv; |
154 | return cv; |
154 | } |
155 | } |
155 | |
156 | |
156 | /*****************************************************************************/ |
157 | /*****************************************************************************/ |
157 | /* gensub: simple closure generation utility */ |
158 | /* gensub: simple closure generation utility */ |
158 | |
159 | |