Affix
view release on metacpan or search on metacpan
lib/Affix.c view on Meta::CPAN
ST(0) = sv_2mortal(newSVuv(infix_type_get_size(pin->type)));
XSRETURN(1);
}
XSRETURN_UNDEF;
}
// Helper to register core internal types
static void _register_core_types(infix_registry_t * registry) {
// Register SV as a named type (dummy struct ensures it keeps the name in the registry).
// This allows signature parsing of "@SV" or "SV" (via hack) to map to a named opaque type.
// Direct usage of this type is blocked in get_opcode_for_type; it must be wrapped in Pointer[].
if (infix_register_types(registry, "@SV = { __sv_opaque: uint8 };") != INFIX_SUCCESS)
croak("Failed to register internal type alias '@SV'");
// We register File and PerlIO as opaque structs.
// This semantically matches C's FILE struct which (for now) will remain opaque to the user.
// We require "Pointer[File]" to mean "FILE*"
if (infix_register_types(registry, "@File = { _opaque: [0:uchar] };") != INFIX_SUCCESS)
croak("Failed to register internal type alias '@File'");
if (infix_register_types(registry, "@PerlIO = { _opaque: [0:uchar] };") != INFIX_SUCCESS)
croak("Failed to register internal type alias '@PerlIO'");
lib/Affix/marshal.c view on Meta::CPAN
#define LAZY_ARRAY_THRESHOLD 100
/**
* @brief Internal helper to build the actual Perl Hash/Array structure.
* @param ptr The raw C memory address (may be nullptr).
* @param type The infix_type definition.
* @param owner The root SV lifeline.
* @param arena The local arena for anonymous types (if any).
* @param eager If false, large arrays return a magical scalar placeholder.
* @param readonly If true, mutations via the resulting aggregate are blocked.
*/
static SV * _bind_aggregate_internal(
pTHX_ void * ptr, const infix_type * type, SV * owner, infix_arena_t * arena, bool eager, bool readonly) {
const infix_type * res = resolve_type(aTHX_ type);
infix_type_category cat = infix_type_get_category(res);
if (cat == INFIX_TYPE_STRUCT || cat == INFIX_TYPE_UNION) {
HV * hv = newHV();
Affix_Pin_2_Point_Oh m = {.ptr = ptr, .type = type, .arena = arena, .readonly = readonly};
sv_magicext((SV *)hv, owner, PERL_MAGIC_ext, &vtbl_lazy_aggregate, (char *)&m, sizeof(Affix_Pin_2_Point_Oh));
( run in 0.839 second using v1.01-cache-2.11-cpan-800906f7e73 )