--- Convert-Scalar/Scalar.xs 2001/09/27 18:32:22 1.1 +++ Convert-Scalar/Scalar.xs 2002/07/05 11:44:55 1.3 @@ -18,6 +18,8 @@ RETVAL = !!SvUTF8 (scalar); if (items > 1) { + if (SvREADONLY (scalar)) + croak ("Convert::Scalar::utf8 called on read only scalar"); if (SvTRUE (mode)) SvUTF8_on (scalar); else @@ -31,6 +33,9 @@ SV * scalar PROTOTYPE: $ PPCODE: + if (SvREADONLY (scalar)) + croak ("Convert::Scalar::utf8_on called on read only scalar"); + SvGETMAGIC (scalar); SvUTF8_on (scalar); if (GIMME_V != G_VOID) @@ -41,6 +46,9 @@ SV * scalar PROTOTYPE: $ PPCODE: + if (SvREADONLY (scalar)) + croak ("Convert::Scalar::utf8_off called on read only scalar"); + SvGETMAGIC (scalar); SvUTF8_off (scalar); if (GIMME_V != G_VOID) @@ -62,6 +70,9 @@ SV * scalar PROTOTYPE: $ PPCODE: + if (SvREADONLY (scalar)) + 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))); @@ -72,6 +83,9 @@ bool fail_ok PROTOTYPE: $;$ CODE: + if (SvREADONLY (scalar)) + croak ("Convert::Scalar::utf8_downgrade called on read only scalar"); + RETVAL = sv_utf8_downgrade (scalar, fail_ok); OUTPUT: RETVAL @@ -81,6 +95,9 @@ SV * scalar PROTOTYPE: $ PPCODE: + if (SvREADONLY (scalar)) + 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))); @@ -142,3 +159,49 @@ if (GIMME_V != G_VOID) XPUSHs (sv_2mortal (SvREFCNT_inc (scalar))); +int +refcnt(scalar,newrefcnt=0) + SV * scalar + int newrefcnt + PROTOTYPE: $;$ + ALIAS: + refcnt_rv = 1 + CODE: + if (ix) + { + if (!SvROK (scalar)) croak ("refcnt_rv requires a reference as it's first argument"); + scalar = SvRV (scalar); + } + RETVAL = SvREFCNT (scalar); + if (items > 1) + SvREFCNT (scalar) = newrefcnt; + OUTPUT: + RETVAL + +void +refcnt_inc(scalar) + SV * scalar + ALIAS: + refcnt_inc_rv = 1 + PROTOTYPE: $ + CODE: + if (ix) + { + if (!SvROK (scalar)) croak ("refcnt_inc_rv requires a reference as it's first argument"); + scalar = SvRV (scalar); + } + SvREFCNT_inc (scalar); + +void +refcnt_dec(scalar) + SV * scalar + ALIAS: + refcnt_dec_rv = 1 + PROTOTYPE: $ + CODE: + if (ix) + { + if (!SvROK (scalar)) croak ("refcnt_dec_rv requires a reference as it's first argument"); + scalar = SvRV (scalar); + } + SvREFCNT_dec (scalar);