--- Convert-Scalar/Scalar.xs 2002/09/23 03:42:02 1.4 +++ Convert-Scalar/Scalar.xs 2004/11/27 23:36:37 1.8 @@ -2,13 +2,18 @@ #include "perl.h" #include "XSUB.h" -#if PERL_VERSION < 7 -# define is_utf8_string(s,l) (croak ("utf8_valid requires perl 5.7 or higher"), 0) -#endif +#define RETCOPY(sv) \ + if (GIMME_V != G_VOID) \ + { \ + dXSTARG; \ + sv_setsv (TARG, (sv)); \ + EXTEND (SP, 1); \ + PUSHs (TARG); \ + } MODULE = Convert::Scalar PACKAGE = Convert::Scalar -int +bool utf8(scalar,mode=0) SV * scalar SV * mode @@ -38,8 +43,7 @@ SvGETMAGIC (scalar); SvUTF8_on (scalar); - if (GIMME_V != G_VOID) - XPUSHs (sv_2mortal (SvREFCNT_inc (scalar))); + RETCOPY (scalar); void utf8_off(scalar) @@ -51,8 +55,7 @@ SvGETMAGIC (scalar); SvUTF8_off (scalar); - if (GIMME_V != G_VOID) - XPUSHs (sv_2mortal (SvREFCNT_inc (scalar))); + RETCOPY (scalar); int utf8_valid(scalar) @@ -74,8 +77,7 @@ croak ("Convert::Scalar::utf8_upgrade called on read only scalar"); sv_utf8_upgrade(scalar); - if (GIMME_V != G_VOID) - XPUSHs (sv_2mortal (SvREFCNT_inc (scalar))); + RETCOPY (scalar); bool utf8_downgrade(scalar, fail_ok = 0) @@ -99,8 +101,7 @@ croak ("Convert::Scalar::utf8_encode called on read only scalar"); sv_utf8_encode (scalar); - if (GIMME_V != G_VOID) - XPUSHs (sv_2mortal (SvREFCNT_inc (scalar))); + RETCOPY (scalar); UV utf8_length(scalar) @@ -205,3 +206,58 @@ scalar = SvRV (scalar); } SvREFCNT_dec (scalar); + +bool +ok(scalar) + SV * scalar + PROTOTYPE: $ + CODE: + RETVAL = SvOK (scalar); + OUTPUT: + RETVAL + +bool +uok(scalar) + SV * scalar + PROTOTYPE: $ + CODE: + RETVAL = SvUOK (scalar); + OUTPUT: + RETVAL + +bool +rok(scalar) + SV * scalar + PROTOTYPE: $ + CODE: + RETVAL = SvROK (scalar); + OUTPUT: + RETVAL + +bool +pok(scalar) + SV * scalar + PROTOTYPE: $ + CODE: + RETVAL = SvPOK (scalar); + OUTPUT: + RETVAL + +bool +nok(scalar) + SV * scalar + PROTOTYPE: $ + CODE: + RETVAL = SvNOK (scalar); + OUTPUT: + RETVAL + +bool +niok(scalar) + SV * scalar + PROTOTYPE: $ + CODE: + RETVAL = SvNIOK (scalar); + OUTPUT: + RETVAL +