This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
IRIX: floating point: do not flush to zero
[perl5.git] / mg.h
diff --git a/mg.h b/mg.h
index 3362854..becef4a 100644 (file)
--- a/mg.h
+++ b/mg.h
@@ -8,21 +8,17 @@
  *
  */
 
-#ifdef STRUCT_MGVTBL_DEFINITION
-STRUCT_MGVTBL_DEFINITION;
-#else
 struct mgvtbl {
-    int                (CPERLscope(*svt_get))  (pTHX_ SV *sv, MAGIC* mg);
-    int                (CPERLscope(*svt_set))  (pTHX_ SV *sv, MAGIC* mg);
-    U32                (CPERLscope(*svt_len))  (pTHX_ SV *sv, MAGIC* mg);
-    int                (CPERLscope(*svt_clear))(pTHX_ SV *sv, MAGIC* mg);
-    int                (CPERLscope(*svt_free)) (pTHX_ SV *sv, MAGIC* mg);
-    int                (CPERLscope(*svt_copy)) (pTHX_ SV *sv, MAGIC* mg,
+    int                (*svt_get)      (pTHX_ SV *sv, MAGIC* mg);
+    int                (*svt_set)      (pTHX_ SV *sv, MAGIC* mg);
+    U32                (*svt_len)      (pTHX_ SV *sv, MAGIC* mg);
+    int                (*svt_clear)(pTHX_ SV *sv, MAGIC* mg);
+    int                (*svt_free)     (pTHX_ SV *sv, MAGIC* mg);
+    int                (*svt_copy)     (pTHX_ SV *sv, MAGIC* mg,
                                        SV *nsv, const char *name, I32 namlen);
-    int                (CPERLscope(*svt_dup))  (pTHX_ MAGIC *mg, CLONE_PARAMS *param);
-    int                (CPERLscope(*svt_local))(pTHX_ SV *nsv, MAGIC *mg);
+    int                (*svt_dup)      (pTHX_ MAGIC *mg, CLONE_PARAMS *param);
+    int                (*svt_local)(pTHX_ SV *nsv, MAGIC *mg);
 };
-#endif
 
 struct magic {
     MAGIC*     mg_moremagic;
@@ -30,18 +26,21 @@ struct magic {
     U16                mg_private;
     char       mg_type;
     U8         mg_flags;
-    I32                mg_len;
+    SSize_t    mg_len;
     SV*                mg_obj;
     char*      mg_ptr;
 };
 
 #define MGf_TAINTEDDIR 1        /* PERL_MAGIC_envelem only */
 #define MGf_MINMATCH   1        /* PERL_MAGIC_regex_global only */
+#define MGf_REQUIRE_GV 1        /* PERL_MAGIC_checkcall only */
 #define MGf_REFCOUNTED 2
 #define MGf_GSKIP      4       /* skip further GETs until after next SET */
 #define MGf_COPY       8       /* has an svt_copy  MGVTBL entry */
 #define MGf_DUP     0x10       /* has an svt_dup   MGVTBL entry */
 #define MGf_LOCAL   0x20       /* has an svt_local MGVTBL entry */
+#define MGf_BYTES   0x40        /* PERL_MAGIC_regex_global only */
+#define MGf_PERSIST    0x80     /* PERL_MAGIC_lvref only */
 
 #define MgTAINTEDDIR(mg)       (mg->mg_flags & MGf_TAINTEDDIR)
 #define MgTAINTEDDIR_on(mg)    (mg->mg_flags |= MGf_TAINTEDDIR)
@@ -61,12 +60,27 @@ struct magic {
 #define SvTIED_obj(sv,mg) \
     ((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv)))
 
+#if defined(PERL_CORE) || defined(PERL_EXT)
+# define MgBYTEPOS(mg,sv,pv,len) S_MgBYTEPOS(aTHX_ mg,sv,pv,len)
+/* assumes get-magic and stringification have already occurred */
+# define MgBYTEPOS_set(mg,sv,pv,off) (                  \
+    assert_((mg)->mg_type == PERL_MAGIC_regex_global)    \
+    SvPOK(sv) && (!SvGMAGICAL(sv) || sv_only_taint_gmagic(sv))  \
+       ? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \
+       : ((mg)->mg_len = DO_UTF8(sv)                        \
+           ? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \
+           : (SSize_t)(off),                                     \
+          (mg)->mg_flags &= ~MGf_BYTES))
+#endif
+
+#define whichsig(pv) whichsig_pv(pv)
+
 /*
  * Local variables:
  * c-indentation-style: bsd
  * c-basic-offset: 4
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
  * End:
  *
- * ex: set ts=8 sts=4 sw=4 noet:
+ * ex: set ts=8 sts=4 sw=4 et:
  */