#ifndef H_PERL
#define H_PERL 1
-/*#define PERL_IMPLICIT_CONTEXT*/
-
#ifdef PERL_FOR_X2P
/*
* This file is being used for x2p stuff.
/* XXXXXX testing threads via implicit pointer */
#ifdef USE_THREADS
-#define PERL_IMPLICIT_CONTEXT
+# ifndef PERL_IMPLICIT_CONTEXT
+# define PERL_IMPLICIT_CONTEXT
+# endif
+# ifndef PERL_IMPLICIT_SYS
+/*# define PERL_IMPLICIT_SYS*/ /* XXX not done yet */
+# endif
+#endif
+
+/* XXXXXX testing multiplicity via implicit pointer */
+#if defined(MULTIPLICITY)
+# ifndef PERL_IMPLICIT_CONTEXT
+# define PERL_IMPLICIT_CONTEXT
+# endif
+# ifndef PERL_IMPLICIT_SYS
+/*# define PERL_IMPLICIT_SYS*/ /* XXX not done yet */
+# endif
+#endif
+
+#ifdef PERL_CAPI
+# undef PERL_OBJECT
+# ifndef PERL_IMPLICIT_CONTEXT
+# define PERL_IMPLICIT_CONTEXT
+# endif
+# ifndef PERL_IMPLICIT_SYS
+# define PERL_IMPLICIT_SYS
+# endif
+#endif
+
+#ifdef PERL_OBJECT
+# ifndef PERL_IMPLICIT_CONTEXT
+# define PERL_IMPLICIT_CONTEXT
+# endif
+# ifndef PERL_IMPLICIT_SYS
+# define PERL_IMPLICIT_SYS
+# endif
#endif
#ifdef PERL_OBJECT
class CPerlObj;
#define STATIC
-#define CPERLscope(x) CPerlObj::x
-#define CALL_FPTR(fptr) (this->*fptr)
-
-#define pTHXo CPerlObj *pPerl
-#define pTHXo_ pTHXo,
-#define _pTHXo ,pTHXo
-#define aTHXo this
-#define aTHXo_ this,
-#define _aTHXo ,this
+#define CPERLscope(x) CPerlObj::x
+#define CALL_FPTR(fptr) (this->*fptr)
+
+#define pTHXo CPerlObj *pPerl
+#define pTHXo_ pTHXo,
+#define _pTHXo ,pTHXo
+#define aTHXo this
+#define aTHXo_ this,
+#define _aTHXo ,this
#define PERL_OBJECT_THIS aTHXo
#define PERL_OBJECT_THIS_ aTHXo_
#define _PERL_OBJECT_THIS _aTHXo
+#define dTHXoa(a) pTHXo = (CPerlObj *)a
+#define dTHXo dTHXoa(PERL_GET_INTERP)
#define pTHXx void
#define pTHXx_
#else /* !PERL_OBJECT */
+#ifdef PERL_IMPLICIT_CONTEXT
+# ifdef USE_THREADS
+struct perl_thread;
+# define pTHX register struct perl_thread *thr
+# define aTHX thr
+# define dTHXa(a) pTHX = (struct perl_thread *)a
+# define dTHX dTHXa(THR)
+# define dTHR dNOOP
+# else
+# define MULTIPLICITY
+# define pTHX register PerlInterpreter *my_perl
+# define aTHX my_perl
+# define dTHXa(a) pTHX = (PerlInterpreter *)a
+# define dTHX dTHXa(PERL_GET_INTERP)
+# endif
+# define pTHX_ pTHX,
+# define _pTHX ,pTHX
+# define aTHX_ aTHX,
+# define _aTHX ,aTHX
+#endif
+
#define STATIC static
#define CPERLscope(x) x
#define CPERLarg void
#define NOOP (void)0
#define dNOOP extern int Perl___notused
-#ifdef PERL_IMPLICIT_CONTEXT
-# ifdef USE_THREADS
-struct perl_thread;
-# define pTHX register struct perl_thread *thr
-# define aTHX thr
-# define dTHXa(a) pTHX = (struct perl_thread *)a
-# define dTHX dTHXa(SvPVX(PL_thrsv))
-# define dTHR dNOOP
-# else
-# define MULTIPLICITY
-# define pTHX register PerlInterpreter *my_perl
-# define aTHX my_perl
-# define dTHXa(a) pTHX = (PerlInterpreter *)a
-# define dTHX dTHXa(PL_curinterp)
-# endif
-# define pTHX_ pTHX,
-# define _pTHX ,pTHX
-# define aTHX_ aTHX,
-# define _aTHX ,aTHX
-#endif
-
#ifndef pTHX
# define pTHX void
# define pTHX_
# define aTHXo aTHX
# define aTHXo_ aTHX_
# define _aTHXo _aTHX
+# define dTHXo dTHX
#endif
#ifndef pTHXx
# define aTHXx my_perl
# define aTHXx_ aTHXx,
# define _aTHXx ,aTHXx
+# define dTHXx dTHX
#endif
#undef START_EXTERN_C
#define MEM_SIZE Size_t
+#if defined(STANDARD_C) && defined(I_STDDEF)
+# include <stddef.h>
+# define STRUCT_OFFSET(s,m) offsetof(s,m)
+#else
+# define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m))
+#endif
+
+#if defined(I_STRING) || defined(__cplusplus)
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
/* This comes after <stdlib.h> so we don't try to change the standard
* library prototypes; we'll use our own in proto.h instead. */
# define safefree safesysfree
#endif /* MYMALLOC */
-#if defined(STANDARD_C) && defined(I_STDDEF)
-# include <stddef.h>
-# define STRUCT_OFFSET(s,m) offsetof(s,m)
-#else
-# define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m))
-#endif
-
-#if defined(I_STRING) || defined(__cplusplus)
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
#define strchr index
#define strrchr rindex
# endif /* WIN32 */
# endif /* FAKE_THREADS */
#endif /* USE_THREADS */
-
+
+#ifdef WIN32
+#include "win32.h"
+#endif
+
#ifdef VMS
# define STATUS_NATIVE PL_statusvalue_vms
# define STATUS_NATIVE_EXPORT \
# ifdef FFLUSH_ALL
# define PERL_FLUSHALL_FOR_CHILD my_fflush_all()
# else
-# define PERL_FLUSHALL_FOR_CHILD (void)0
+# define PERL_FLUSHALL_FOR_CHILD NOOP
# endif
# endif
#endif
+#ifndef PERL_SET_INTERP
+# define PERL_SET_INTERP(i) (PL_curinterp = (PerlInterpreter*)(i))
+#endif
+
+#ifndef PERL_GET_INTERP
+# define PERL_GET_INTERP (PL_curinterp)
+#endif
+
/* Some unistd.h's give a prototype for pause() even though
HAS_PAUSE ends up undefined. This causes the #define
below to be rejected by the compmiler. Sigh.
I32 any_i32;
IV any_iv;
long any_long;
- void (CPERLscope(*any_dptr)) (pTHX_ void*);
+ void (*any_dptr) (pTHXo_ void*);
};
#endif
#define FILTER_DATA(idx) (AvARRAY(PL_rsfp_filters)[idx])
#define FILTER_ISREADER(idx) (idx >= AvFILLp(PL_rsfp_filters))
-#ifdef WIN32
-#include "win32.h"
-#endif
-
#include "iperlsys.h"
#include "regexp.h"
#include "sv.h"
# if defined(PERL_OBJECT)
# define DEBUG_m(a) if (PL_debug & 128) a
# else
-# define DEBUG_m(a) if (PL_curinterp && PL_debug & 128) a
+# define DEBUG_m(a) if (PERL_GET_INTERP && PL_debug & 128) a
# endif
#define DEBUG_f(a) if (PL_debug & 256) a
#define DEBUG_r(a) if (PL_debug & 512) a
typedef SV* (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog);
typedef void (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r);
+#ifdef USE_PURE_BISON
+int Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp);
+#endif
+
+typedef void (*DESTRUCTORFUNC_t) (pTHXo_ void*);
+typedef void (*SVFUNC_t) (pTHXo_ SV*);
+typedef I32 (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
+typedef void (*XSINIT_t) (pTHXo);
+typedef void (*ATEXIT_t) (pTHXo_ void*);
+typedef void (*XSUBADDR_t) (pTHXo_ CV *);
/* Set up PERLVAR macros for populating structs */
#define PERLVAR(var,type) type var;
+#define PERLVARA(var,n,type) type var[n];
#define PERLVARI(var,type,init) type var;
#define PERLVARIC(var,type,init) type var;
/* Done with PERLVAR macros for now ... */
#undef PERLVAR
+#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC
# endif
#endif
-#ifdef USE_PURE_BISON
-int Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp);
-#endif
-
-typedef void (CPERLscope(*DESTRUCTORFUNC_t)) (pTHX_ void*);
-typedef void (CPERLscope(*SVFUNC_t)) (pTHX_ SV*);
-typedef I32 (CPERLscope(*SVCOMPARE_t)) (pTHX_ SV*, SV*);
-typedef void (*XSINIT_t) (pTHXo);
-typedef void (*ATEXIT_t) (pTHXo_ void*);
-typedef void (*XSUBADDR_t) (pTHXo_ CV *);
-
#ifdef PERL_OBJECT
#define PERL_DECL_PROT
#define perl_alloc Perl_alloc
#include "pp_proto.h"
#ifdef PERL_OBJECT
-VIRTUAL int CPerlObj::fprintf (PerlIO *pf, const char *pat, ...);
VIRTUAL int CPerlObj::do_aspawn (void *vreally, void **vmark, void **vsp);
#undef PERL_DECL_PROT
#else
*/
#define PERLVAR(var,type) EXT type PL_##var;
+#define PERLVARA(var,n,type) EXT type PL_##var[n];
#define PERLVARI(var,type,init) EXT type PL_##var INIT(init);
#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
-#ifndef PERL_GLOBAL_STRUCT
-# ifndef PERL_OBJECT
-START_EXTERN_C
-# endif
-
-# include "perlvars.h"
-
-# ifndef PERL_OBJECT
-END_EXTERN_C
-# endif
-#endif
-
#ifndef MULTIPLICITY
# include "intrpvar.h"
* be defined to maintain binary compatibility with PERL_OBJECT
* for 5.005
*/
-PERLVAR(object_compatibility[30], char)
+PERLVARA(object_compatibility,30, char)
};
+
# include "embed.h"
# if defined(WIN32) && !defined(WIN32IO_IS_STDIO)
# define errno CPerlObj::ErrorNo()
#endif /* PERL_OBJECT */
+#ifndef PERL_GLOBAL_STRUCT
+START_EXTERN_C
+
+# include "perlvars.h"
+
+END_EXTERN_C
+#endif
+
#undef PERLVAR
+#undef PERLVARA
#undef PERLVARI
#undef PERLVARIC