Affix
view release on metacpan or search on metacpan
lib/Affix.h view on Meta::CPAN
infix_direct_cif_func cif; ///< Direct pointer to the specialized JIT code.
infix_library_t * lib_handle; ///< Handle for library cleanup.
const infix_type * ret_type; ///< Cached return type info.
Affix_Pull pull_handler; ///< Pre-resolved handler for marshalling the return value.
Affix_Opcode ret_opcode; ///< Optimized return opcode.
size_t num_args; ///< Cached number of arguments.
char * sig_str;
char * sym_name;
void * target_addr;
char * lib_path;
dTHXfield(owner_perl)
};
// Trigger function for the experimental backend (shh!)
extern void Affix_trigger_backend(pTHX_ CV *);
// Main execution trigger
extern void Affix_trigger_stack(pTHX_ CV *);
extern void Affix_trigger_arena(pTHX_ CV *);
extern void Affix_trigger_variadic(pTHX_ CV *);
// Marshalling (Perl -> C)
void sv2ptr(pTHX_ Affix * affix, SV * perl_sv, void * c_ptr, const infix_type * type);
void push_struct(pTHX_ Affix * affix, const infix_type * type, SV * sv, void * p);
void push_array(pTHX_ Affix * affix, const infix_type * type, SV * sv, void * p);
void push_reverse_trampoline(pTHX_ Affix * affix, const infix_type * type, SV * sv, void * p);
// Marshalling (Perl <- C)
void ptr2sv(pTHX_ Affix * affix, void * c_ptr, SV * perl_sv, const infix_type * type);
void _populate_hv_from_c_struct(
pTHX_ Affix * affix, HV * hv, const infix_type * type, void * p, bool live, SV * owner_sv);
// Handler resolution
Affix_Step_Executor get_plan_step_executor(const infix_type * type);
Affix_Pull get_pull_handler(pTHX_ const infix_type * type);
Affix_Out_Param_Writer get_out_param_writer(const infix_type * type);
// Pin management
void _pin_sv(pTHX_ SV * sv,
const infix_type * type,
void * pointer,
bool managed,
SV * owner_sv,
size_t bit_offset,
size_t bit_width);
bool is_pin(pTHX_ SV * sv);
Affix_Pin * _get_pin_from_sv(pTHX_ SV * sv);
SV * _new_pointer_obj(pTHX_ Affix_Pin * pin);
// Reverse trampolines
void _affix_callback_handler_entry(infix_context_t *, void *, void **);
// Misc.
void _export_function(pTHX_ HV *, const char *, const char *);
// XS Bootstrap
void boot_Affix(pTHX_ CV *);
// 'Portable' XS MACROS
#ifdef newXS_flags
#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
#else
#define newXSproto_portable(name, c_impl, file, proto) \
(PL_Sv = (SV *)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV *)PL_Sv)
#endif
#define newXS_deffile(a, b) Perl_newXS_deffile(aTHX_ a, b)
#define export_function(package, what, tag) \
_export_function(aTHX_ get_hv(form("%s::EXPORT_TAGS", package), GV_ADD), what, tag)
// Debugging Macros
#if DEBUG > 1
#define PING warn("Ping at %s line %d", __FILE__, __LINE__);
#else
#define PING
#endif
#define DumpHex(addr, len) _DumpHex(aTHX_ addr, len, __FILE__, __LINE__)
void _DumpHex(pTHX_ const void *, size_t, const char *, int);
#define DD(scalar) _DD(aTHX_ scalar, __FILE__, __LINE__)
void _DD(pTHX_ SV *, const char *, int);
#include <string.h>
#include <wchar.h>
( run in 1.160 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )