Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 398 lines (318 sloc) 12.8 kB
a0d0e21 perl 5.000
Larry Wall authored
1 /* pp.h
7907280 perl 5.0 alpha 2
Larry Wall authored
2 *
4bb101f @jhi Fix up Larry's copyright statements to my best knowledge.
jhi authored
3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
4 * 2000, 2001, by Larry Wall and others
7907280 perl 5.0 alpha 2
Larry Wall authored
5 *
a0d0e21 perl 5.000
Larry Wall authored
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
7907280 perl 5.0 alpha 2
Larry Wall authored
8 *
a0d0e21 perl 5.000
Larry Wall authored
9 */
7907280 perl 5.0 alpha 2
Larry Wall authored
10
cea2e8a more complete support for implicit thread/interpreter pointer,
Gurusamy Sarathy authored
11 #define PP(s) OP * Perl_##s(pTHX)
7907280 perl 5.0 alpha 2
Larry Wall authored
12
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
13 /*
ccfc67b @jhi Missed the =head1 additions.
jhi authored
14 =head1 Stack Manipulation Macros
15
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
16 =for apidoc AmU||SP
17 Stack pointer. This is usually handled by C<xsubpp>. See C<dSP> and
18 C<SPAGAIN>.
19
20 =for apidoc AmU||MARK
21 Stack marker variable for the XSUB. See C<dMARK>.
22
23 =for apidoc Ams||PUSHMARK
24 Opening bracket for arguments on a callback. See C<PUTBACK> and
25 L<perlcall>.
26
27 =for apidoc Ams||dSP
28 Declares a local copy of perl's stack pointer for the XSUB, available via
29 the C<SP> macro. See C<SP>.
30
fac3506 @mstevens djSP
mstevens authored
31 =for apidoc ms||djSP
32
33 Declare Just C<SP>. This is actually identical to C<dSP>, and declares
34 a local copy of perl's stack pointer, available via the C<SP> macro.
35 See C<SP>. (Available for backward source code compatibility with the
36 old (Perl 5.005) thread model.)
37
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
38 =for apidoc Ams||dMARK
39 Declare a stack marker variable, C<mark>, for the XSUB. See C<MARK> and
40 C<dORIGMARK>.
41
42 =for apidoc Ams||dORIGMARK
43 Saves the original stack mark for the XSUB. See C<ORIGMARK>.
44
45 =for apidoc AmU||ORIGMARK
46 The original stack mark for the XSUB. See C<dORIGMARK>.
47
48 =for apidoc Ams||SPAGAIN
49 Refetch the stack pointer. Used after a callback. See L<perlcall>.
50
fac3506 @mstevens djSP
mstevens authored
51 =cut */
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
52
ac634a9 @jhi Integrate changes #8641,8644,8649,8654,8662,8663,8664,8665,8667,8669
jhi authored
53 #undef SP /* Solaris 2.7 i386 has this in /usr/include/sys/reg.h */
7907280 perl 5.0 alpha 2
Larry Wall authored
54 #define SP sp
55 #define MARK mark
56 #define TARG targ
57
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
58 #define PUSHMARK(p) if (++PL_markstack_ptr == PL_markstack_max) \
a0d0e21 perl 5.000
Larry Wall authored
59 markstack_grow(); \
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
60 *PL_markstack_ptr = (p) - PL_stack_base
a0d0e21 perl 5.000
Larry Wall authored
61
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
62 #define TOPMARK (*PL_markstack_ptr)
63 #define POPMARK (*PL_markstack_ptr--)
a0d0e21 perl 5.000
Larry Wall authored
64
39644a2 @timj Re: sync sync sync: have I missed any patches?
timj authored
65 #define dSP register SV **sp = PL_stack_sp
66 #define djSP dSP
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
67 #define dMARK register SV **mark = PL_stack_base + POPMARK
68 #define dORIGMARK I32 origmark = mark - PL_stack_base
69 #define SETORIGMARK origmark = mark - PL_stack_base
70 #define ORIGMARK (PL_stack_base + origmark)
7907280 perl 5.0 alpha 2
Larry Wall authored
71
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
72 #define SPAGAIN sp = PL_stack_sp
73 #define MSPAGAIN sp = PL_stack_sp; mark = ORIGMARK
7907280 perl 5.0 alpha 2
Larry Wall authored
74
533c011 PL_ stuff for threads
Nick Ing-Simmons authored
75 #define GETTARGETSTACKED targ = (PL_op->op_flags & OPf_STACKED ? POPs : PAD_SV(PL_op->op_targ))
7907280 perl 5.0 alpha 2
Larry Wall authored
76 #define dTARGETSTACKED SV * GETTARGETSTACKED
77
533c011 PL_ stuff for threads
Nick Ing-Simmons authored
78 #define GETTARGET targ = PAD_SV(PL_op->op_targ)
7907280 perl 5.0 alpha 2
Larry Wall authored
79 #define dTARGET SV * GETTARGET
80
533c011 PL_ stuff for threads
Nick Ing-Simmons authored
81 #define GETATARGET targ = (PL_op->op_flags & OPf_STACKED ? sp[-1] : PAD_SV(PL_op->op_targ))
7907280 perl 5.0 alpha 2
Larry Wall authored
82 #define dATARGET SV * GETATARGET
83
84 #define dTARG SV *targ
85
533c011 PL_ stuff for threads
Nick Ing-Simmons authored
86 #define NORMAL PL_op->op_next
cea2e8a more complete support for implicit thread/interpreter pointer,
Gurusamy Sarathy authored
87 #define DIE return Perl_die
7907280 perl 5.0 alpha 2
Larry Wall authored
88
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
89 /*
90 =for apidoc Ams||PUTBACK
91 Closing bracket for XSUB arguments. This is usually handled by C<xsubpp>.
92 See C<PUSHMARK> and L<perlcall> for other uses.
93
94 =for apidoc Amn|SV*|POPs
95 Pops an SV off the stack.
96
97 =for apidoc Amn|char*|POPp
595ae48 Some tests for Camel 3rd edition features.
Nick Ing-Simmons authored
98 Pops a string off the stack. Deprecated. New code should provide
99 a STRLEN n_a and use POPpx.
100
101 =for apidoc Amn|char*|POPpx
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
102 Pops a string off the stack.
595ae48 Some tests for Camel 3rd edition features.
Nick Ing-Simmons authored
103 Requires a variable STRLEN n_a in scope.
104
105 =for apidoc Amn|char*|POPpbytex
106 Pops a string off the stack which must consist of bytes i.e. characters < 256.
107 Requires a variable STRLEN n_a in scope.
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
108
109 =for apidoc Amn|NV|POPn
110 Pops a double off the stack.
111
112 =for apidoc Amn|IV|POPi
113 Pops an integer off the stack.
114
115 =for apidoc Amn|long|POPl
116 Pops a long off the stack.
117
118 =cut
119 */
120
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
121 #define PUTBACK PL_stack_sp = sp
7907280 perl 5.0 alpha 2
Larry Wall authored
122 #define RETURN return PUTBACK, NORMAL
123 #define RETURNOP(o) return PUTBACK, o
124 #define RETURNX(x) return x, PUTBACK, NORMAL
125
126 #define POPs (*sp--)
2d8e6c8 another threads reliability fix: serialize writes to thr->threadsv
Gurusamy Sarathy authored
127 #define POPp (SvPVx(POPs, PL_na)) /* deprecated */
128 #define POPpx (SvPVx(POPs, n_a))
595ae48 Some tests for Camel 3rd edition features.
Nick Ing-Simmons authored
129 #define POPpbytex (SvPVbytex(POPs, n_a))
463ee0b perl 5.0 alpha 4
Larry Wall authored
130 #define POPn (SvNVx(POPs))
a0d0e21 perl 5.000
Larry Wall authored
131 #define POPi ((IV)SvIVx(POPs))
ff68c71 [inseparable changes from patch from perl5.003_09 to perl5.003_10]
Perl 5 Porters authored
132 #define POPu ((UV)SvUVx(POPs))
463ee0b perl 5.0 alpha 4
Larry Wall authored
133 #define POPl ((long)SvIVx(POPs))
d9b3e12 @jhi Jumbo Configure and large file support update.
jhi authored
134 #define POPul ((unsigned long)SvIVx(POPs))
1b8cd67 @jhi Regen Configure.
jhi authored
135 #ifdef HAS_QUAD
d9b3e12 @jhi Jumbo Configure and large file support update.
jhi authored
136 #define POPq ((Quad_t)SvIVx(POPs))
c5a0f51 @jhi Implement 64-bit vec().
jhi authored
137 #define POPuq ((Uquad_t)SvUVx(POPs))
d9b3e12 @jhi Jumbo Configure and large file support update.
jhi authored
138 #endif
7907280 perl 5.0 alpha 2
Larry Wall authored
139
140 #define TOPs (*sp)
56370e9 @jhi Add TOPm1s to peek at the second topmost stack item.
jhi authored
141 #define TOPm1s (*(sp-1))
7dca457 Re: [PATCH] Re: [ID 20010105.023] numeric problems in IRIX
Nicholas Clark authored
142 #define TOPp1s (*(sp+1))
2d8e6c8 another threads reliability fix: serialize writes to thr->threadsv
Gurusamy Sarathy authored
143 #define TOPp (SvPV(TOPs, PL_na)) /* deprecated */
144 #define TOPpx (SvPV(TOPs, n_a))
463ee0b perl 5.0 alpha 4
Larry Wall authored
145 #define TOPn (SvNV(TOPs))
a0d0e21 perl 5.000
Larry Wall authored
146 #define TOPi ((IV)SvIV(TOPs))
ff68c71 [inseparable changes from patch from perl5.003_09 to perl5.003_10]
Perl 5 Porters authored
147 #define TOPu ((UV)SvUV(TOPs))
463ee0b perl 5.0 alpha 4
Larry Wall authored
148 #define TOPl ((long)SvIV(TOPs))
c5a0f51 @jhi Implement 64-bit vec().
jhi authored
149 #define TOPul ((unsigned long)SvUV(TOPs))
1b8cd67 @jhi Regen Configure.
jhi authored
150 #ifdef HAS_QUAD
d9b3e12 @jhi Jumbo Configure and large file support update.
jhi authored
151 #define TOPq ((Quad_t)SvIV(TOPs))
c5a0f51 @jhi Implement 64-bit vec().
jhi authored
152 #define TOPuq ((Uquad_t)SvUV(TOPs))
d9b3e12 @jhi Jumbo Configure and large file support update.
jhi authored
153 #endif
7907280 perl 5.0 alpha 2
Larry Wall authored
154
155 /* Go to some pains in the rare event that we must extend the stack. */
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
156
157 /*
158 =for apidoc Am|void|EXTEND|SP|int nitems
159 Used to extend the argument stack for an XSUB's return values. Once
4375e83 various pod nits (from Larry Virden and others)
Gurusamy Sarathy authored
160 used, guarantees that there is room for at least C<nitems> to be pushed
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
161 onto the stack.
162
163 =for apidoc Am|void|PUSHs|SV* sv
aacdac4 If overloaded %{} etc. return the object do not loop.
Nick Ing-Simmons authored
164 Push an SV onto the stack. The stack must have room for this element.
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
165 Does not handle 'set' magic. See C<XPUSHs>.
166
167 =for apidoc Am|void|PUSHp|char* str|STRLEN len
168 Push a string onto the stack. The stack must have room for this element.
169 The C<len> indicates the length of the string. Handles 'set' magic. See
170 C<XPUSHp>.
171
172 =for apidoc Am|void|PUSHn|NV nv
173 Push a double onto the stack. The stack must have room for this element.
174 Handles 'set' magic. See C<XPUSHn>.
175
176 =for apidoc Am|void|PUSHi|IV iv
177 Push an integer onto the stack. The stack must have room for this element.
178 Handles 'set' magic. See C<XPUSHi>.
179
180 =for apidoc Am|void|PUSHu|UV uv
181 Push an unsigned integer onto the stack. The stack must have room for this
182 element. See C<XPUSHu>.
183
184 =for apidoc Am|void|XPUSHs|SV* sv
185 Push an SV onto the stack, extending the stack if necessary. Does not
186 handle 'set' magic. See C<PUSHs>.
187
188 =for apidoc Am|void|XPUSHp|char* str|STRLEN len
189 Push a string onto the stack, extending the stack if necessary. The C<len>
190 indicates the length of the string. Handles 'set' magic. See
191 C<PUSHp>.
192
193 =for apidoc Am|void|XPUSHn|NV nv
194 Push a double onto the stack, extending the stack if necessary. Handles
195 'set' magic. See C<PUSHn>.
196
197 =for apidoc Am|void|XPUSHi|IV iv
198 Push an integer onto the stack, extending the stack if necessary. Handles
199 'set' magic. See C<PUSHi>.
200
201 =for apidoc Am|void|XPUSHu|UV uv
aacdac4 If overloaded %{} etc. return the object do not loop.
Nick Ing-Simmons authored
202 Push an unsigned integer onto the stack, extending the stack if necessary.
954c199 autogenerate API listing from comments in the source (from Benjamin
Gurusamy Sarathy authored
203 See C<PUSHu>.
204
205 =cut
206 */
207
c5661c8 Integrate from maint:
Marcus Holland-Moritz authored
208 #define EXTEND(p,n) STMT_START { if (PL_stack_max - p < (int)(n)) { \
bbce6d6 [inseparable changes from patch from perl5.003_08 to perl5.003_09]
Perl 5 Porters authored
209 sp = stack_grow(sp,p, (int) (n)); \
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
210 } } STMT_END
a0d0e21 perl 5.000
Larry Wall authored
211
7907280 perl 5.0 alpha 2
Larry Wall authored
212 /* Same thing, but update mark register too. */
c5661c8 Integrate from maint:
Marcus Holland-Moritz authored
213 #define MEXTEND(p,n) STMT_START {if (PL_stack_max - p < (int)(n)) { \
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
214 int markoff = mark - PL_stack_base; \
bbce6d6 [inseparable changes from patch from perl5.003_08 to perl5.003_09]
Perl 5 Porters authored
215 sp = stack_grow(sp,p,(int) (n)); \
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
216 mark = PL_stack_base + markoff; \
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
217 } } STMT_END
7907280 perl 5.0 alpha 2
Larry Wall authored
218
219 #define PUSHs(s) (*++sp = (s))
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
220 #define PUSHTARG STMT_START { SvSETMAGIC(TARG); PUSHs(TARG); } STMT_END
221 #define PUSHp(p,l) STMT_START { sv_setpvn(TARG, (p), (l)); PUSHTARG; } STMT_END
6520202 slightly tweaked version of suggested patch
Dan Sugalski authored
222 #define PUSHn(n) STMT_START { sv_setnv(TARG, (NV)(n)); PUSHTARG; } STMT_END
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
223 #define PUSHi(i) STMT_START { sv_setiv(TARG, (IV)(i)); PUSHTARG; } STMT_END
55497cf [inseparable changes from patch from perl5.003_07 to perl5.003_08]
Perl 5 Porters authored
224 #define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
7907280 perl 5.0 alpha 2
Larry Wall authored
225
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
226 #define XPUSHs(s) STMT_START { EXTEND(sp,1); (*++sp = (s)); } STMT_END
227 #define XPUSHTARG STMT_START { SvSETMAGIC(TARG); XPUSHs(TARG); } STMT_END
228 #define XPUSHp(p,l) STMT_START { sv_setpvn(TARG, (p), (l)); XPUSHTARG; } STMT_END
6520202 slightly tweaked version of suggested patch
Dan Sugalski authored
229 #define XPUSHn(n) STMT_START { sv_setnv(TARG, (NV)(n)); XPUSHTARG; } STMT_END
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
230 #define XPUSHi(i) STMT_START { sv_setiv(TARG, (IV)(i)); XPUSHTARG; } STMT_END
55497cf [inseparable changes from patch from perl5.003_07 to perl5.003_08]
Perl 5 Porters authored
231 #define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
b162f9e Optimize away OP_SASSIGN
Ilya Zakharevich authored
232 #define XPUSHundef STMT_START { SvOK_off(TARG); XPUSHs(TARG); } STMT_END
7907280 perl 5.0 alpha 2
Larry Wall authored
233
234 #define SETs(s) (*sp = s)
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
235 #define SETTARG STMT_START { SvSETMAGIC(TARG); SETs(TARG); } STMT_END
236 #define SETp(p,l) STMT_START { sv_setpvn(TARG, (p), (l)); SETTARG; } STMT_END
6520202 slightly tweaked version of suggested patch
Dan Sugalski authored
237 #define SETn(n) STMT_START { sv_setnv(TARG, (NV)(n)); SETTARG; } STMT_END
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
238 #define SETi(i) STMT_START { sv_setiv(TARG, (IV)(i)); SETTARG; } STMT_END
55497cf [inseparable changes from patch from perl5.003_07 to perl5.003_08]
Perl 5 Porters authored
239 #define SETu(u) STMT_START { sv_setuv(TARG, (UV)(u)); SETTARG; } STMT_END
a0d0e21 perl 5.000
Larry Wall authored
240
7907280 perl 5.0 alpha 2
Larry Wall authored
241 #define dTOPss SV *sv = TOPs
242 #define dPOPss SV *sv = POPs
6520202 slightly tweaked version of suggested patch
Dan Sugalski authored
243 #define dTOPnv NV value = TOPn
244 #define dPOPnv NV value = POPn
a0d0e21 perl 5.000
Larry Wall authored
245 #define dTOPiv IV value = TOPi
246 #define dPOPiv IV value = POPi
55497cf [inseparable changes from patch from perl5.003_07 to perl5.003_08]
Perl 5 Porters authored
247 #define dTOPuv UV value = TOPu
248 #define dPOPuv UV value = POPu
1b8cd67 @jhi Regen Configure.
jhi authored
249 #ifdef HAS_QUAD
2d4389e @jhi Batch of small 64-bit/long double/large file support tweaks:
jhi authored
250 #define dTOPqv Quad_t value = TOPu
251 #define dPOPqv Quad_t value = POPu
252 #define dTOPuqv Uquad_t value = TOPuq
253 #define dPOPuqv Uquad_t value = POPuq
254 #endif
7907280 perl 5.0 alpha 2
Larry Wall authored
255
7a4c00b [inseparable changes from patch from perl5.003_15 to perl5.003_16]
Perl 5 Porters authored
256 #define dPOPXssrl(X) SV *right = POPs; SV *left = CAT2(X,s)
6520202 slightly tweaked version of suggested patch
Dan Sugalski authored
257 #define dPOPXnnrl(X) NV right = POPn; NV left = CAT2(X,n)
7a4c00b [inseparable changes from patch from perl5.003_15 to perl5.003_16]
Perl 5 Porters authored
258 #define dPOPXiirl(X) IV right = POPi; IV left = CAT2(X,i)
259
260 #define USE_LEFT(sv) \
533c011 PL_ stuff for threads
Nick Ing-Simmons authored
261 (SvOK(sv) || SvGMAGICAL(sv) || !(PL_op->op_flags & OPf_STACKED))
7a4c00b [inseparable changes from patch from perl5.003_15 to perl5.003_16]
Perl 5 Porters authored
262 #define dPOPXnnrl_ul(X) \
6520202 slightly tweaked version of suggested patch
Dan Sugalski authored
263 NV right = POPn; \
7a4c00b [inseparable changes from patch from perl5.003_15 to perl5.003_16]
Perl 5 Porters authored
264 SV *leftsv = CAT2(X,s); \
6520202 slightly tweaked version of suggested patch
Dan Sugalski authored
265 NV left = USE_LEFT(leftsv) ? SvNV(leftsv) : 0.0
7a4c00b [inseparable changes from patch from perl5.003_15 to perl5.003_16]
Perl 5 Porters authored
266 #define dPOPXiirl_ul(X) \
267 IV right = POPi; \
268 SV *leftsv = CAT2(X,s); \
269 IV left = USE_LEFT(leftsv) ? SvIV(leftsv) : 0
270
271 #define dPOPPOPssrl dPOPXssrl(POP)
272 #define dPOPPOPnnrl dPOPXnnrl(POP)
273 #define dPOPPOPnnrl_ul dPOPXnnrl_ul(POP)
274 #define dPOPPOPiirl dPOPXiirl(POP)
275 #define dPOPPOPiirl_ul dPOPXiirl_ul(POP)
276
277 #define dPOPTOPssrl dPOPXssrl(TOP)
278 #define dPOPTOPnnrl dPOPXnnrl(TOP)
279 #define dPOPTOPnnrl_ul dPOPXnnrl_ul(TOP)
280 #define dPOPTOPiirl dPOPXiirl(TOP)
281 #define dPOPTOPiirl_ul dPOPXiirl_ul(TOP)
7907280 perl 5.0 alpha 2
Larry Wall authored
282
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
283 #define RETPUSHYES RETURNX(PUSHs(&PL_sv_yes))
284 #define RETPUSHNO RETURNX(PUSHs(&PL_sv_no))
285 #define RETPUSHUNDEF RETURNX(PUSHs(&PL_sv_undef))
7907280 perl 5.0 alpha 2
Larry Wall authored
286
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
287 #define RETSETYES RETURNX(SETs(&PL_sv_yes))
288 #define RETSETNO RETURNX(SETs(&PL_sv_no))
289 #define RETSETUNDEF RETURNX(SETs(&PL_sv_undef))
7907280 perl 5.0 alpha 2
Larry Wall authored
290
533c011 PL_ stuff for threads
Nick Ing-Simmons authored
291 #define ARGTARG PL_op->op_targ
b162f9e Optimize away OP_SASSIGN
Ilya Zakharevich authored
292
293 /* See OPpTARGET_MY: */
294 #define MAXARG (PL_op->op_private & 15)
7907280 perl 5.0 alpha 2
Larry Wall authored
295
e336de0 [win32] implement stack-of-stacks so that magic invocations don't
Gurusamy Sarathy authored
296 #define SWITCHSTACK(f,t) \
297 STMT_START { \
677b06e grow PL_tmps_stack more efficiently; make it more amenable to
Gurusamy Sarathy authored
298 AvFILLp(f) = sp - PL_stack_base; \
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
299 PL_stack_base = AvARRAY(t); \
677b06e grow PL_tmps_stack more efficiently; make it more amenable to
Gurusamy Sarathy authored
300 PL_stack_max = PL_stack_base + AvMAX(t); \
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
301 sp = PL_stack_sp = PL_stack_base + AvFILLp(t); \
677b06e grow PL_tmps_stack more efficiently; make it more amenable to
Gurusamy Sarathy authored
302 PL_curstack = t; \
e336de0 [win32] implement stack-of-stacks so that magic invocations don't
Gurusamy Sarathy authored
303 } STMT_END
7907280 perl 5.0 alpha 2
Larry Wall authored
304
bbce6d6 [inseparable changes from patch from perl5.003_08 to perl5.003_09]
Perl 5 Porters authored
305 #define EXTEND_MORTAL(n) \
677b06e grow PL_tmps_stack more efficiently; make it more amenable to
Gurusamy Sarathy authored
306 STMT_START { \
307 if (PL_tmps_ix + (n) >= PL_tmps_max) \
308 tmps_grow(n); \
309 } STMT_END
bbce6d6 [inseparable changes from patch from perl5.003_08 to perl5.003_09]
Perl 5 Porters authored
310
a0d0e21 perl 5.000
Larry Wall authored
311 #define AMGf_noright 1
312 #define AMGf_noleft 2
313 #define AMGf_assign 4
314 #define AMGf_unary 8
315
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
316 #define tryAMAGICbinW(meth,assign,set) STMT_START { \
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
317 if (PL_amagic_generation) { \
a0d0e21 perl 5.000
Larry Wall authored
318 SV* tmpsv; \
319 SV* right= *(sp); SV* left= *(sp-1);\
320 if ((SvAMAGIC(left)||SvAMAGIC(right))&&\
321 (tmpsv=amagic_call(left, \
322 right, \
323 CAT2(meth,_amg), \
324 (assign)? AMGf_assign: 0))) {\
325 SPAGAIN; \
326 (void)POPs; set(tmpsv); RETURN; } \
327 } \
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
328 } STMT_END
a0d0e21 perl 5.000
Larry Wall authored
329
330 #define tryAMAGICbin(meth,assign) tryAMAGICbinW(meth,assign,SETsv)
331 #define tryAMAGICbinSET(meth,assign) tryAMAGICbinW(meth,assign,SETs)
332
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
333 #define AMG_CALLun(sv,meth) amagic_call(sv,&PL_sv_undef, \
a0d0e21 perl 5.000
Larry Wall authored
334 CAT2(meth,_amg),AMGf_noright | AMGf_unary)
335 #define AMG_CALLbinL(left,right,meth) \
336 amagic_call(left,right,CAT2(meth,_amg),AMGf_noright)
337
e8c2096 Re: [PATCH 5.00552] Overloaded <> and deref again
Ilya Zakharevich authored
338 #define tryAMAGICunW(meth,set,shift,ret) STMT_START { \
3280af2 PL_ prefix to all perlvars, part1
Nick Ing-Simmons authored
339 if (PL_amagic_generation) { \
a0d0e21 perl 5.000
Larry Wall authored
340 SV* tmpsv; \
f5284f6 Overloaded <> and deref again
Ilya Zakharevich authored
341 SV* arg= sp[shift]; \
c4459e0 @schwern Re: Would -Wno-unused -Wall be better?
schwern authored
342 if(0) goto am_again; /* shut up unused warning */ \
f5284f6 Overloaded <> and deref again
Ilya Zakharevich authored
343 am_again: \
a0d0e21 perl 5.000
Larry Wall authored
344 if ((SvAMAGIC(arg))&&\
345 (tmpsv=AMG_CALLun(arg,meth))) {\
f5284f6 Overloaded <> and deref again
Ilya Zakharevich authored
346 SPAGAIN; if (shift) sp += shift; \
e8c2096 Re: [PATCH 5.00552] Overloaded <> and deref again
Ilya Zakharevich authored
347 set(tmpsv); ret; } \
a0d0e21 perl 5.000
Larry Wall authored
348 } \
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
349 } STMT_END
a0d0e21 perl 5.000
Larry Wall authored
350
f5284f6 Overloaded <> and deref again
Ilya Zakharevich authored
351 #define FORCE_SETs(sv) STMT_START { sv_setsv(TARG, (sv)); SETTARG; } STMT_END
352
b162f9e Optimize away OP_SASSIGN
Ilya Zakharevich authored
353 #define tryAMAGICun(meth) tryAMAGICunW(meth,SETsvUN,0,RETURN)
354 #define tryAMAGICunSET(meth) tryAMAGICunW(meth,SETs,0,RETURN)
f5284f6 Overloaded <> and deref again
Ilya Zakharevich authored
355 #define tryAMAGICunTARGET(meth, shift) \
356 { dSP; sp--; /* get TARGET from below PL_stack_sp */ \
357 { dTARGETSTACKED; \
e8c2096 Re: [PATCH 5.00552] Overloaded <> and deref again
Ilya Zakharevich authored
358 { dSP; tryAMAGICunW(meth,FORCE_SETs,shift,RETURN);}}}
359
aacdac4 If overloaded %{} etc. return the object do not loop.
Nick Ing-Simmons authored
360 #define setAGAIN(ref) sv = ref; \
361 if (!SvROK(ref)) \
cea2e8a more complete support for implicit thread/interpreter pointer,
Gurusamy Sarathy authored
362 Perl_croak(aTHX_ "Overloaded dereference did not return a reference"); \
aacdac4 If overloaded %{} etc. return the object do not loop.
Nick Ing-Simmons authored
363 if (ref != arg && SvRV(ref) != SvRV(arg)) { \
364 arg = ref; \
365 goto am_again; \
366 }
e8c2096 Re: [PATCH 5.00552] Overloaded <> and deref again
Ilya Zakharevich authored
367
0f4592e bump patchlevel; other minor fixes for clean build and test on
Gurusamy Sarathy authored
368 #define tryAMAGICunDEREF(meth) tryAMAGICunW(meth,setAGAIN,0,(void)0)
a0d0e21 perl 5.000
Larry Wall authored
369
533c011 PL_ stuff for threads
Nick Ing-Simmons authored
370 #define opASSIGN (PL_op->op_flags & OPf_STACKED)
e990555 perl 5.003_01: pp.h
Perl 5 Porters authored
371 #define SETsv(sv) STMT_START { \
b162f9e Optimize away OP_SASSIGN
Ilya Zakharevich authored
372 if (opASSIGN || (SvFLAGS(TARG) & SVs_PADMY)) \
373 { sv_setsv(TARG, (sv)); SETTARG; } \
374 else SETs(sv); } STMT_END
375
376 #define SETsvUN(sv) STMT_START { \
377 if (SvFLAGS(TARG) & SVs_PADMY) \
378 { sv_setsv(TARG, (sv)); SETTARG; } \
e990555 perl 5.003_01: pp.h
Perl 5 Porters authored
379 else SETs(sv); } STMT_END
a0d0e21 perl 5.000
Larry Wall authored
380
381 /* newSVsv does not behave as advertised, so we copy missing
382 * information by hand */
383
76e3520 [asperl] added AS patch#2
Gurusamy Sarathy authored
384 /* SV* ref causes confusion with the member variable
385 changed SV* ref to SV* tmpRef */
386 #define RvDEEPCP(rv) STMT_START { SV* tmpRef=SvRV(rv); \
387 if (SvREFCNT(tmpRef)>1) { \
388 SvREFCNT_dec(tmpRef); \
748a930 Perl 5.001
Larry Wall authored
389 SvRV(rv)=AMG_CALLun(rv,copy); \
8654792 Incorporate new single-statement macros
Perl 5 Porters authored
390 } } STMT_END
78f9721 Consolidated lvalue sub changes
Stephen McCamant authored
391
392 /*
393 =for apidoc mU||LVRET
394 True if this op will be the return value of an lvalue subroutine
395
396 =cut */
9d96b2e @jhi Use the /^Perl_/-less form of is_lvalue_sub().
jhi authored
397 #define LVRET ((PL_op->op_private & OPpMAYBE_LVSUB) && is_lvalue_sub())
Something went wrong with that request. Please try again.