|  line  | 
 true  | 
 false  | 
 branch  | 
 
| 
21
 | 
 5  | 
 0  | 
     template  inline panda::enable_if_signed_integral_t   _getnum (SV* sv) { return SvIV_nomg(sv); }  | 
 
| 
22
 | 
 11  | 
 0  | 
     template  inline panda::enable_if_unsigned_integral_t _getnum (SV* sv) { return SvUV_nomg(sv); }  | 
 
| 
23
 | 
 0  | 
 167  | 
     template  inline panda::enable_if_floatp_t            _getnum (SV* sv) { return SvNV_nomg(sv); }  | 
 
| 
53
 | 
 0  | 
 0  | 
     Simple (SV* sv, bool policy = INCREMENT) : Scalar(sv, policy) { _validate(); }  | 
 
| 
71
 | 
 2  | 
 0  | 
     Simple (T val) { sv = detail::_newnum(val); }  | 
 
| 
 | 
 2164  | 
 0  | 
     Simple (T val) { sv = detail::_newnum(val); }  | 
 
| 
 | 
 6  | 
 0  | 
     Simple (T val) { sv = detail::_newnum(val); }  | 
 
| 
143
 | 
 167  | 
 0  | 
     operator T () const { return sv ? detail::_getnum(sv) : T(); }  | 
 
| 
157
 | 
 0  | 
 1  | 
         if (!sv) return T();  | 
 
| 
159
 | 
 1  | 
 0  | 
         const char* buf = SvPV_nomg(sv, len);  | 
 
| 
 | 
 0  | 
 0  | 
         const char* buf = SvPV_nomg(sv, len);  | 
 
| 
193
 | 
 0  | 
 0  | 
         if (!sv) return;  | 
 
| 
194
 | 
 0  | 
 0  | 
         if (SvTYPE(sv) > SVt_PVMG || SvROK(sv)) {  | 
 
| 
 | 
 0  | 
 0  | 
         if (SvTYPE(sv) > SVt_PVMG || SvROK(sv)) {  | 
 
| 
196
 | 
 0  | 
 0  | 
             throw std::invalid_argument("SV is not a number or string");  |