The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# "perlobject.map"  Crazy Panda

TYPEMAP

AVO        EO_AVREF
HVO        EO_HVREF

AVR        ET_AVREF
HVR        ET_HVREF

int64_t     T_IV
int32_t     T_IV
int16_t     T_IV
int8_t      T_IV
uint64_t    T_UV
uint32_t    T_UV
uint16_t    T_UV
uint8_t     T_UV

######################################################################
OUTPUT

EO_AVREF
   $arg = sv_bless( newRV_noinc((SV*)$var), gv_stashpv(CLASS,1) );

EO_HVREF
    $arg = sv_bless( newRV_noinc((SV*)$var), gv_stashpv(CLASS,1) );
    
EO_OBJECT
	sv_setref_pv( $arg, CLASS, (void*)$var );

ET_AVREF
    $arg = newRV_noinc((SV*)$var);

ET_HVREF
    $arg = newRV_noinc((SV*)$var);
    
ET_OBJECT
	sv_setref_pv( $arg, Nullch, (void*)$var );
	
######################################################################
INPUT

EO_AVREF
    if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
        $var = (AV*)SvRV( $arg );
    else {
        warn( \"${Package}::$func_name() -- $var is not a blessed AV reference\" );
        XSRETURN_UNDEF;
    }
    
EO_HVREF
    if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
        $var = (HV*)SvRV( $arg );
    else {
        warn( \"${Package}::$func_name() -- $var is not a blessed HV reference\" );
        XSRETURN_UNDEF;
    }

EO_OBJECT
	if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
		$var = ($type)SvIV((SV*)SvRV( $arg ));
	else{
		warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
		XSRETURN_UNDEF;
	}

ET_AVREF
    if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
        $var = (AV*)SvRV( $arg );
    else {
        warn( \"${Package}::$func_name() -- $var is not an AV reference\" );
        XSRETURN_UNDEF;
    }
    
ET_HVREF
    if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
        $var = (HV*)SvRV( $arg );
    else {
        warn( \"${Package}::$func_name() -- $var is not an HV reference\" );
        XSRETURN_UNDEF;
    }

ET_OBJECT
	if( SvROK($arg) )
		$var = ($type)SvIV((SV*)SvRV( $arg ));
	else{
		warn( \"${Package}::$func_name() -- $var is not an SV reference\" );
		XSRETURN_UNDEF;
	}