/* RV upwards. However, SVf_ROK and SVp_IOK are exclusive */
#define SVprv_WEAKREF 0x80000000 /* Weak reference */
-#define _XPV_ALLOCATED_HEAD \
- STRLEN xpv_cur; /* length of svu_pv as a C string */ \
- STRLEN xpv_len /* allocated size */
-
#define _XPV_HEAD \
union _xnvu xnv_u; \
- _XPV_ALLOCATED_HEAD
+ STRLEN xpv_cur; /* length of svu_pv as a C string */ \
+ STRLEN xpv_len /* allocated size */
union _xnvu {
NV xnv_nv; /* numeric value, if any */
_XPV_HEAD;
};
-typedef struct {
- _XPV_ALLOCATED_HEAD;
-} xpv_allocated;
-
struct xpviv {
_XPV_HEAD;
union _xivu xiv_u;
};
-typedef struct {
- _XPV_ALLOCATED_HEAD;
- union _xivu xiv_u;
-} xpviv_allocated;
-
#define xiv_iv xiv_u.xivu_iv
struct xpvuv {
union _xmgu xmg_u; \
HV* xmg_stash /* class package */
-/* These structure must match the beginning of struct xpvhv in hv.h. */
+/* This structure must match the beginning of struct xpvhv in hv.h. */
struct xpvmg {
_XPV_HEAD;
_XPVMG_HEAD;
_XPVCV_COMMON;
};
-typedef struct {
- _XPV_ALLOCATED_HEAD;
- _XPVMG_HEAD;
- _XPVCV_COMMON;
-} xpvfm_allocated;
-
#define _XPVIO_TAIL \
PerlIO * xio_ifp; /* ifp and ofp are normally the same */ \
PerlIO * xio_ofp; /* but sockets need separate streams */ \
DIR * xiou_dirp; /* for opendir, readdir, etc */ \
void * xiou_any; /* for alignment */ \
} xio_dirpu; \
- IV xio_lines; /* $. */ \
+ /* IV xio_lines is now in IVX $. */ \
IV xio_page; /* $% */ \
IV xio_page_len; /* $= */ \
IV xio_lines_left; /* $- */ \
_XPVIO_TAIL;
};
-typedef struct {
- _XPV_ALLOCATED_HEAD;
- _XPVMG_HEAD;
- _XPVIO_TAIL;
-} xpvio_allocated;
-
#define xio_dirp xio_dirpu.xiou_dirp
#define xio_any xio_dirpu.xiou_any
assert(SvTYPE(_svivx) != SVt_PVHV); \
assert(SvTYPE(_svivx) != SVt_PVCV); \
assert(SvTYPE(_svivx) != SVt_PVFM); \
+ assert(SvTYPE(_svivx) != SVt_PVIO); \
assert(!isGV_with_GP(_svivx)); \
&(((XPVIV*) MUTABLE_PTR(SvANY(_svivx)))->xiv_iv); \
}))
assert(SvTYPE(_svuvx) != SVt_PVHV); \
assert(SvTYPE(_svuvx) != SVt_PVCV); \
assert(SvTYPE(_svuvx) != SVt_PVFM); \
+ assert(SvTYPE(_svuvx) != SVt_PVIO); \
assert(!isGV_with_GP(_svuvx)); \
&(((XPVUV*) MUTABLE_PTR(SvANY(_svuvx)))->xuv_uv); \
}))
#define IoOFP(sv) ((XPVIO*) SvANY(sv))->xio_ofp
#define IoDIRP(sv) ((XPVIO*) SvANY(sv))->xio_dirp
#define IoANY(sv) ((XPVIO*) SvANY(sv))->xio_any
-#define IoLINES(sv) ((XPVIO*) SvANY(sv))->xio_lines
+#define IoLINES(sv) ((XPVIO*) SvANY(sv))->xiv_u.xivu_iv
#define IoPAGE(sv) ((XPVIO*) SvANY(sv))->xio_page
#define IoPAGE_LEN(sv) ((XPVIO*) SvANY(sv))->xio_page_len
#define IoLINES_LEFT(sv)((XPVIO*) SvANY(sv))->xio_lines_left
} \
} STMT_END
#endif
+
+#define newIO() MUTABLE_IO(newSV_type(SVt_PVIO))
+
/*
* Local variables:
* c-indentation-style: bsd