use correct scalar test (reported by Roland van Ipenburg)
[gitmo/Package-Stash-XS.git] / XS.xs
diff --git a/XS.xs b/XS.xs
index db34488..a32ca45 100644 (file)
--- a/XS.xs
+++ b/XS.xs
@@ -193,19 +193,18 @@ void _deconstruct_variable_name(SV *variable, varspec_t *varspec)
 void _deconstruct_variable_hash(HV *variable, varspec_t *varspec)
 {
     HE *val;
-    STRLEN len;
 
     val = hv_fetch_ent(variable, name_key, 0, name_hash);
     if (!val)
         croak("The 'name' key is required in variable specs");
 
-    varspec->name = sv_2mortal(newSVhe(val));
+    varspec->name = sv_2mortal(newSVsv(HeVAL(val)));
 
     val = hv_fetch_ent(variable, type_key, 0, type_hash);
     if (!val)
         croak("The 'type' key is required in variable specs");
 
-    varspec->type = string_to_vartype(HePV(val, len));
+    varspec->type = string_to_vartype(SvPV_nolen(HeVAL(val)));
 }
 
 int _valid_for_type(SV *value, vartype_t type)
@@ -214,11 +213,7 @@ int _valid_for_type(SV *value, vartype_t type)
 
     switch (type) {
     case VAR_SCALAR:
-        return sv_type == SVt_NULL ||
-               sv_type == SVt_IV   ||
-               sv_type == SVt_NV   ||
-               sv_type == SVt_PV   ||
-               sv_type == SVt_RV;
+        return SvROK(value) ? SvOK(SvRV(value)) : SvOK(value);
     case VAR_ARRAY:
         return sv_type == SVt_PVAV;
     case VAR_HASH: