This is a live mirror of the Perl 5 development currently hosted at
make sv_ref() part of the API
authorTony Cook <>
Thu, 29 Oct 2015 04:05:59 +0000 (15:05 +1100)
committerTony Cook <>
Mon, 9 Nov 2015 00:53:15 +0000 (11:53 +1100)
The existing sv_reftype() returns the class of a blessed SV only
as a const char *, so we can't tell if it's UTF8 or not.

This probably should have been API from the beginning.


index d694f4e..9dd6bc3 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -1473,7 +1473,7 @@ Apd       |char*  |sv_recode_to_utf8      |NN SV* sv|NN SV *encoding
 Apd    |bool   |sv_cat_decode  |NN SV* dsv|NN SV *encoding|NN SV *ssv|NN int *offset \
                                |NN char* tstr|int tlen
 ApdR   |const char*    |sv_reftype     |NN const SV *const sv|const int ob
-pd     |SV*    |sv_ref |NULLOK SV *dst|NN const SV *const sv|const int ob
+Apd    |SV*    |sv_ref |NULLOK SV *dst|NN const SV *const sv|const int ob
 Apd    |void   |sv_replace     |NN SV *const sv|NN SV *const nsv
 Apd    |void   |sv_report_used
 Apd    |void   |sv_reset       |NN const char* s|NULLOK HV *const stash
diff --git a/embed.h b/embed.h
index 272ecf5..b41833b 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define sv_pvutf8n(a,b)                Perl_sv_pvutf8n(aTHX_ a,b)
 #define sv_pvutf8n_force(a,b)  Perl_sv_pvutf8n_force(aTHX_ a,b)
 #define sv_recode_to_utf8(a,b) Perl_sv_recode_to_utf8(aTHX_ a,b)
+#define sv_ref(a,b,c)          Perl_sv_ref(aTHX_ a,b,c)
 #define sv_reftype(a,b)                Perl_sv_reftype(aTHX_ a,b)
 #define sv_replace(a,b)                Perl_sv_replace(aTHX_ a,b)
 #define sv_report_used()       Perl_sv_report_used(aTHX)
 #define sv_free_arenas()       Perl_sv_free_arenas(aTHX)
 #define sv_len_utf8_nomg(a)    Perl_sv_len_utf8_nomg(aTHX_ a)
 #define sv_mortalcopy_flags(a,b)       Perl_sv_mortalcopy_flags(aTHX_ a,b)
-#define sv_ref(a,b,c)          Perl_sv_ref(aTHX_ a,b,c)
 #define sv_resetpvn(a,b,c)     Perl_sv_resetpvn(aTHX_ a,b,c)
 #define sv_sethek(a,b)         Perl_sv_sethek(aTHX_ a,b)
diff --git a/sv.c b/sv.c
index 6fdbce7..5366ae0 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -9991,6 +9991,12 @@ Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
 Returns a SV describing what the SV passed in is a reference to.
+dst can be a SV to be set to the description or NULL, in which case a
+mortal SV is returned.
+If ob is true and the SV is blessed, the description is the class
+name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.