#// clang-format off
MODULE = Dyn::Call PACKAGE = Dyn::Call::Field
void
new(char * package, HV * args = newHV_mortal())
PPCODE:
// clang-format on
DCfield *RETVAL;
Newx(RETVAL, 1, DCfield);
SV **val_ref = hv_fetchs(args, "offset", 0);
if (val_ref != NULL) RETVAL->offset = (DCsize)SvIV(*val_ref);
val_ref = hv_fetchs(args, "size", 0);
if (val_ref != NULL) RETVAL->size = (DCsize)SvIV(*val_ref);
val_ref = hv_fetchs(args, "alignment", 0);
if (val_ref != NULL) RETVAL->alignment = (DCsize)SvIV(*val_ref);
val_ref = hv_fetchs(args, "array_len", 0);
if (val_ref != NULL) RETVAL->array_len = (DCsize)SvIV(*val_ref);
val_ref = hv_fetchs(args, "type", 0);
if (val_ref != NULL) RETVAL->type = (DCsigchar)*SvPV_nolen(*val_ref);
// TODO: unwrap const DCaggr* sub_aggr;
{
SV *RETVALSV;
RETVALSV = sv_newmortal();
sv_setref_pv(RETVALSV, package, (void *)RETVAL);
ST(0) = RETVALSV;
}
XSRETURN(1);
// clang-format off
DCsize
_field(DCfield * thing, int newvalue = 0)
ALIAS:
offset = 1
size = 2
alignment = 3
array_len = 4
CODE:
// clang-format off
//warn ("items == %d",items);
if(items == 2) {
switch(ix) {
case 1: thing->offset = newvalue; break;
case 2: thing->size = newvalue; break;
case 3: thing->alignment= newvalue; break;
case 4: thing->array_len= newvalue; break;
default:
croak("Unknown field attribute: %d", ix); break;
}
}
switch(ix) {
case 1: RETVAL = thing->offset; break;
case 2: RETVAL = thing->size; break;
case 3: RETVAL = thing->alignment; break;
case 4: RETVAL = thing->array_len; break;
default:
croak("Unknown field attribute: %d", ix); break;
}
// clang-format off
OUTPUT:
RETVAL
DCsigchar
type(DCfield * thing, DCsigchar newvalue = (char)0)
CODE:
// clang-format off
if(items == 2)
thing->type = (char)*SvPV_nolen(ST(1));
RETVAL = thing->type;
// clang-format off
OUTPUT:
RETVAL
const DCaggr *
sub_aggr(DCfield * thing, DCaggr * aggr = NULL)
CODE:
// clang-format off
if(items == 2)
thing->sub_aggr = aggr;
RETVAL = thing->sub_aggr;
// clang-format off
OUTPUT:
RETVAL