アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

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 モジュールのコード。