#ifndef PIGPERL_H
#define PIGPERL_H
/*
* Perl-specific implementation of Pig for PerlQt
*
* Copyright (C) 1999, Ashley Winters <jql@accessone.com>
*
* You may distribute under the terms of the LGPL as specified in the
* README.LICENSE file which should be included with this library.
*
*/
extern "C" {
#if PIGPERL_PL < 4
#define debug PIGdebug
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#undef debug
#undef dirty
}
#undef bool
#undef list
#undef METHOD
#undef debug
#ifndef PIGPERL_PL
#error PIGPERL_PL must be set to $Config{'PATCHLEVEL'}
#endif
#ifndef PIGPERL_SV
#error PIGPERL_SV must be set to $Config{'SUBVERSION'}
#endif
#include "pig.h"
#include "pigtype.h"
#include "pigfunc.h"
#include "qmetaobject.h"
#define PIG_NUM_SHORT 0x0001
#define PIG_NUM_INT 0x0002
#define PIG_NUM_LONG 0x0004
#define PIG_NUM_LONG_LONG 0x0008
#define PIG_NUM_SIGNED 0x0010
#define PIG_NUM_UNSIGNED 0x0020
#define PIG_NUM_FLOAT 0x0100
#define PIG_NUM_DOUBLE 0x0200
#define PIG_PROTO_CONST 0
#define PIG_PROTO_OBJECT 1
#define PIG_PROTO_LONG 2
#define PIG_PROTO_INT 3
#define PIG_PROTO_SHORT 4
#define PIG_PROTO_BOOL 5
#define PIG_PROTO_STRING 6
#define PIG_PROTO_LDOUBLE 7
#define PIG_PROTO_DOUBLE 8
#define PIG_PROTO_FLOAT 9
#define PIG_PROTO_SCALAR 10
#define PIG_PROTO_SCALARREF 11
#define PIG_PROTO_SVSCALAR 12
#define PIG_PROTO_AVSCALAR 13
#define PIG_PROTO_HVSCALAR 14
#define PIG_PROTO_LIST 15
#if PIGPERL_PL >= 5
#define PIGstack_base PL_stack_base
#define PIGstack_sp PL_stack_sp
#define PIGsv_yes PL_sv_yes
#define PIGsv_no PL_sv_no
#define PIGsv_undef PL_sv_undef
#define PIGdowarn PL_dowarn
#define PIGcurcop PL_curcop
#else
#define PIGstack_base stack_base
#define PIGstack_sp stack_sp
#define PIGsv_yes sv_yes
#define PIGsv_no sv_no
#define PIGsv_undef sv_undef
#define PIGdowarn dowarn
#define PIGcurcop curcop
#endif
#ifndef dTHR
#define dTHR
#endif
typedef void (*pigscopefptr)(void *);
struct pig_sub_scope {
struct pig_sub_scope *pignext;
pigscopefptr pigfptr;
void *pigdata;
};
struct pig_sub_frame {
struct pig_sub_frame *pignext;
struct pig_sub_scope *pigscope;
I32 pigax;
};
PIG_DECLARE_VARIABLE(SV *, pig_virtual_return)
PIG_DECLARE_VARIABLE(int, pig_argument_idx)
PIG_DECLARE_VARIABLE(int, pig_argument_max_idx)
PIG_DECLARE_VARIABLE(int, pig_depth)
PIG_DECLARE_VARIABLE(struct pig_sub_frame *, pig_frame)
PIG_DECLARE_VARIABLE(HV *, pig_classinfo)
PIG_DECLARE_VARIABLE(HV *, pig_classinfo_hv)
PIG_DECLARE_VARIABLE(HV *, pig_classmap_hv)
PIG_DECLARE_VARIABLE(HV *, pig_classunmap_hv)
PIG_DECLARE_FUNC_2(SV *, pig_object_create, const char *, struct pig_object_data **)
PIG_DECLARE_FUNC_1(struct pig_object_data *, pig_object_extract, SV *)
PIG_DECLARE_FUNC_2(void *, pig_object_cast, struct pig_object_data *, const char *)
PIG_DECLARE_VOID_FUNC_1(pig_sub_enter, struct pig_sub_frame *)
PIG_DECLARE_VOID_FUNC_0(pig_sub_leave)
PIG_DECLARE_VOID_FUNC_1(pig_scope_leave, struct pig_sub_scope *)
PIG_DECLARE_VOID_FUNC_2(pig_constant_load, const pig_constant *, const char *)
PIG_DECLARE_FUNC_2(bool, pig_receiver_defined, SV *, SV *)
PIG_DECLARE_FUNC_2(class QObject *, pig_create_slot, SV *, SV *)
PIG_DECLARE_FUNC_2(const char *, pig_member_string, SV *, SV *)
PIG_DECLARE_VOID_FUNC_1(pig_module_used, const char *)
PIG_DECLARE_FUNC_1(HV *, pig_map_class_stash, const char *)
PIG_DECLARE_FUNC_3(SV *, pig_new_castobject, void *, const char *, const char *)
PIG_DECLARE_FUNC_2(class QMetaObject *, pig_createMetaObject, const char *, class QMetaObject *)
PIG_DECLARE_FUNC_1(class QMetaObject *, pig_initMetaObject, const char *)
PIG_DECLARE_FUNC_1(int, pig_sigslot_hash, const char *)
PIG_DECLARE_FUNC_1(QMember, pig_sigslot_stub, SV *)
PIG_DECLARE_FUNC_1(SV *, pig_map_proto, SV *)
PIG_DECLARE_FUNC_1(SV *, pig_parse_proto, SV *)
PIG_DECLARE_VOID_FUNC_2(pig_scope_argument, pigscopefptr, void *)
PIG_DECLARE_VOID_FUNC_2(pig_scope_virtual, pigscopefptr, void *)
PIG_IMPORT_TABLE(pigperl)
PIG_IMPORT_VARIABLE(pig_classinfo)
PIG_IMPORT_VARIABLE(pig_classinfo_hv)
PIG_IMPORT_VARIABLE(pig_classmap_hv)
PIG_IMPORT_VARIABLE(pig_classunmap_hv)
PIG_IMPORT_VARIABLE(pig_virtual_return)
PIG_IMPORT_VARIABLE(pig_argument_idx)
PIG_IMPORT_VARIABLE(pig_argument_max_idx)
PIG_IMPORT_VARIABLE(pig_depth)
PIG_IMPORT_VARIABLE(pig_frame)
PIG_IMPORT_FUNC(pig_map_class_stash)
PIG_IMPORT_FUNC(pig_constant_load)
PIG_IMPORT_FUNC(pig_object_create)
PIG_IMPORT_FUNC(pig_object_extract)
PIG_IMPORT_FUNC(pig_object_cast)
PIG_IMPORT_FUNC(pig_sub_enter)
PIG_IMPORT_FUNC(pig_sub_leave)
PIG_IMPORT_FUNC(pig_receiver_defined)
PIG_IMPORT_FUNC(pig_create_slot)
PIG_IMPORT_FUNC(pig_member_string)
PIG_IMPORT_FUNC(pig_module_used)
PIG_IMPORT_FUNC(pig_new_castobject)
PIG_IMPORT_FUNC(pig_createMetaObject)
PIG_IMPORT_FUNC(pig_initMetaObject)
PIG_IMPORT_FUNC(pig_sigslot_hash)
PIG_IMPORT_FUNC(pig_sigslot_stub)
PIG_IMPORT_FUNC(pig_map_proto)
PIG_IMPORT_FUNC(pig_parse_proto)
PIG_IMPORT_FUNC(pig_scope_argument)
PIG_IMPORT_FUNC(pig_scope_virtual)
PIG_IMPORT_FUNC(pig_scope_leave)
PIG_IMPORT_ENDTABLE
#define pig_virtual_return PIG_VARIABLE(pig_virtual_return)
#define pig_argument_idx PIG_VARIABLE(pig_argument_idx)
#define pig_argument_max_idx PIG_VARIABLE(pig_argument_max_idx)
#define pig_depth PIG_VARIABLE(pig_depth)
#define pig_frame PIG_VARIABLE(pig_frame)
#define pig_frame_ax (pig_frame->pigax)
#define PIG_TOPSTACK pig_virtual_return
#define PIG_ARG ST(pig_argument_idx)
#define PIG_ARGOK ((pig_argument_idx < pig_argument_max_idx) && SvOK(PIG_ARG))
#define PIG_RETARG ST(0)
#define PIGNEXTARG pig_argument_idx++
#define PIGARGUMENTS dTHR; I32 ax = pig_frame_ax
#define PIGARGS \
dTHR; \
I32 ax = pig_frame_ax; \
if(pig_argument_idx < pig_argument_max_idx && SvGMAGICAL(PIG_ARG)) \
mg_get(PIG_ARG)
#define PIGRET PIGARGS
#define PIGPUSHSTACK dSP
#define PIGPOPSTACK dTHR
#define PIGARGUMENT(value) STMT_START { PIGNEXTARG; return value; } STMT_END
#define PIGRETURN(value) PIG_RETARG = value; XSRETURN(1)
#define PIGPUSH(sv) XPUSHs(sv); PUTBACK; return
//#define PIGPOP(value) return SvREFCNT_dec(PIG_TOPSTACK), value
#define PIGPOP(value) return value
#define PIGSCOPE_ARGUMENT(name, var) \
pig_scope_argument(&__ ## name ## _scope_argument, var)
#define PIGSCOPE_VIRTUAL(name, var) \
pig_scope_virtual(&__ ## name ## _scope_virtual, var)
#endif