XS で SV がスカラバリューであるか判定する
たまたま Perl のモジュールを漁っていると汎用性が高そうな関数を見つけたためメモ。
#ifndef isGV_with_GP #define isGV_with_GP(x) isGV(x) #endif STATIC bool is_scalar_type(SV *sv) { return !( SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVCV || isGV_with_GP(sv) || SvTYPE(sv) == SVt_PVIO ); }
これは PadWalker モジュールのコード。