diff options
author | Steve Hay <SteveHay@planit.com> | 2004-04-30 11:07:21 +0100 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2004-04-30 10:15:00 +0000 |
commit | d82b684cd82be03d9cc38309478c329f914280b5 (patch) | |
tree | c94b0a74cb393d46f40995888fec31b86742973e /pp.h | |
parent | a67d7df96497dfc3914166c6fa65662e524a5bbb (diff) | |
download | perl-d82b684cd82be03d9cc38309478c329f914280b5.tar.gz |
Document limitations in PUSHi et al macros and add new mPUSHi et al macros
Message-ID: <40921749.3050600@uk.radan.com>
p4raw-id: //depot/perl@22756
Diffstat (limited to 'pp.h')
-rw-r--r-- | pp.h | 108 |
1 files changed, 96 insertions, 12 deletions
@@ -162,45 +162,117 @@ onto the stack. =for apidoc Am|void|PUSHs|SV* sv Push an SV onto the stack. The stack must have room for this element. -Does not handle 'set' magic. See C<XPUSHs>. +Does not handle 'set' magic. Does not use C<TARG>. See also C<PUSHmortal>, +C<XPUSHs> and C<XPUSHmortal>. =for apidoc Am|void|PUSHp|char* str|STRLEN len Push a string onto the stack. The stack must have room for this element. -The C<len> indicates the length of the string. Handles 'set' magic. See -C<XPUSHp>. +The C<len> indicates the length of the string. Handles 'set' magic. Uses +C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to declare it. Do not +call multiple C<TARG>-oriented macros to return lists from XSUB's - see +C<mPUSHp> instead. See also C<XPUSHp> and C<mXPUSHp>. =for apidoc Am|void|PUSHn|NV nv Push a double onto the stack. The stack must have room for this element. -Handles 'set' magic. See C<XPUSHn>. +Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be +called to declare it. Do not call multiple C<TARG>-oriented macros to +return lists from XSUB's - see C<mPUSHn> instead. See also C<XPUSHn> and +C<mXPUSHn>. =for apidoc Am|void|PUSHi|IV iv Push an integer onto the stack. The stack must have room for this element. -Handles 'set' magic. See C<XPUSHi>. +Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be +called to declare it. Do not call multiple C<TARG>-oriented macros to +return lists from XSUB's - see C<mPUSHi> instead. See also C<XPUSHi> and +C<mXPUSHi>. =for apidoc Am|void|PUSHu|UV uv Push an unsigned integer onto the stack. The stack must have room for this -element. See C<XPUSHu>. +element. Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> +should be called to declare it. Do not call multiple C<TARG>-oriented +macros to return lists from XSUB's - see C<mPUSHu> instead. See also +C<XPUSHu> and C<mXPUSHu>. =for apidoc Am|void|XPUSHs|SV* sv Push an SV onto the stack, extending the stack if necessary. Does not -handle 'set' magic. See C<PUSHs>. +handle 'set' magic. Does not use C<TARG>. See also C<XPUSHmortal>, +C<PUSHs> and C<PUSHmortal>. =for apidoc Am|void|XPUSHp|char* str|STRLEN len Push a string onto the stack, extending the stack if necessary. The C<len> -indicates the length of the string. Handles 'set' magic. See -C<PUSHp>. +indicates the length of the string. Handles 'set' magic. Uses C<TARG>, so +C<dTARGET> or C<dXSTARG> should be called to declare it. Do not call +multiple C<TARG>-oriented macros to return lists from XSUB's - see +C<mXPUSHp> instead. See also C<PUSHp> and C<mPUSHp>. =for apidoc Am|void|XPUSHn|NV nv Push a double onto the stack, extending the stack if necessary. Handles -'set' magic. See C<PUSHn>. +'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to +declare it. Do not call multiple C<TARG>-oriented macros to return lists +from XSUB's - see C<mXPUSHn> instead. See also C<PUSHn> and C<mPUSHn>. =for apidoc Am|void|XPUSHi|IV iv Push an integer onto the stack, extending the stack if necessary. Handles -'set' magic. See C<PUSHi>. +'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to +declare it. Do not call multiple C<TARG>-oriented macros to return lists +from XSUB's - see C<mXPUSHi> instead. See also C<PUSHi> and C<mPUSHi>. =for apidoc Am|void|XPUSHu|UV uv Push an unsigned integer onto the stack, extending the stack if necessary. -See C<PUSHu>. +Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be +called to declare it. Do not call multiple C<TARG>-oriented macros to +return lists from XSUB's - see C<mXPUSHu> instead. See also C<PUSHu> and +C<mPUSHu>. + +=for apidoc Am|void|PUSHmortal +Push a new mortal SV onto the stack. The stack must have room for this +element. Does not handle 'set' magic. Does not use C<TARG>. See also +C<PUSHs>, C<XPUSHmortal> and C<XPUSHs>. + +=for apidoc Am|void|mPUSHp|char* str|STRLEN len +Push a string onto the stack. The stack must have room for this element. +The C<len> indicates the length of the string. Does not handle 'set' magic. +Does not use C<TARG>. See also C<PUSHp>, C<mXPUSHp> and C<XPUSHp>. + +=for apidoc Am|void|mPUSHn|NV nv +Push a double onto the stack. The stack must have room for this element. +Does not handle 'set' magic. Does not use C<TARG>. See also C<PUSHn>, +C<mXPUSHn> and C<XPUSHn>. + +=for apidoc Am|void|mPUSHi|IV iv +Push an integer onto the stack. The stack must have room for this element. +Does not handle 'set' magic. Does not use C<TARG>. See also C<PUSHi>, +C<mXPUSHi> and C<XPUSHi>. + +=for apidoc Am|void|mPUSHu|UV uv +Push an unsigned integer onto the stack. The stack must have room for this +element. Does not handle 'set' magic. Does not use C<TARG>. See also +C<PUSHu>, C<mXPUSHu> and C<XPUSHu>. + +=for apidoc Am|void|XPUSHmortal +Push a new mortal SV onto the stack, extending the stack if necessary. Does +not handle 'set' magic. Does not use C<TARG>. See also C<XPUSHs>, +C<PUSHmortal> and C<PUSHs>. + +=for apidoc Am|void|mXPUSHp|char* str|STRLEN len +Push a string onto the stack, extending the stack if necessary. The C<len> +indicates the length of the string. Does not handle 'set' magic. Does not +use C<TARG>. See also C<XPUSHp>, C<mPUSHp> and C<PUSHp>. + +=for apidoc Am|void|mXPUSHn|NV nv +Push a double onto the stack, extending the stack if necessary. Does not +handle 'set' magic. Does not use C<TARG>. See also C<XPUSHn>, C<mPUSHn> +and C<PUSHn>. + +=for apidoc Am|void|mXPUSHi|IV iv +Push an integer onto the stack, extending the stack if necessary. Does not +handle 'set' magic. Does not use C<TARG>. See also C<XPUSHi>, C<mPUSHi> +and C<PUSHi>. + +=for apidoc Am|void|mXPUSHu|UV uv +Push an unsigned integer onto the stack, extending the stack if necessary. +Does not handle 'set' magic. Does not use C<TARG>. See also C<XPUSHu>, +C<mPUSHu> and C<PUSHu>. =cut */ @@ -231,6 +303,18 @@ See C<PUSHu>. #define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END #define XPUSHundef STMT_START { SvOK_off(TARG); XPUSHs(TARG); } STMT_END +#define PUSHmortal(s) PUSHs(sv_newmortal()) +#define mPUSHp(p,l) STMT_START { sv_setpvn(PUSHmortal, (p), (l)); } STMT_END +#define mPUSHn(n) STMT_START { sv_setnv(PUSHmortal, (NV)(n)); } STMT_END +#define mPUSHi(i) STMT_START { sv_setiv(PUSHmortal, (IV)(i)); } STMT_END +#define mPUSHu(u) STMT_START { sv_setuv(PUSHmortal, (UV)(u)); } STMT_END + +#define XPUSHmortal(s) STMT_START { EXTEND(sp,1); PUSHmortal; } STMT_END +#define mXPUSHp(p,l) STMT_START { sv_setpvn(XPUSHmortal, (p), (l)); } STMT_END +#define mXPUSHn(n) STMT_START { sv_setnv(XPUSHmortal, (NV)(n)); } STMT_END +#define mXPUSHi(i) STMT_START { sv_setiv(XPUSHmortal, (IV)(i)); } STMT_END +#define mXPUSHu(u) STMT_START { sv_setuv(XPUSHmortal, (UV)(u)); } STMT_END + #define SETs(s) (*sp = s) #define SETTARG STMT_START { SvSETMAGIC(TARG); SETs(TARG); } STMT_END #define SETp(p,l) STMT_START { sv_setpvn(TARG, (p), (l)); SETTARG; } STMT_END |