summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2006-03-07 23:24:55 +0000
committerNicholas Clark <nick@ccl4.org>2006-03-07 23:24:55 +0000
commit598921a7d8d43baa942b750d26a55dadca2c13d5 (patch)
tree504e1749f653a90dd2ac976c96b0689ef6336e85
parenta724edfe531a4a4cce2d4bbb94e1f583d86bc9a3 (diff)
downloadperl-598921a7d8d43baa942b750d26a55dadca2c13d5.tar.gz
Some of the MAD structures in headers, plus PL_madskills and PL_xmlfp,
and default definitions for the 2 variables. (Which will save a lot of conditional complilation, by instead letting the C compiler optimiser remove dead code.) p4raw-id: //depot/perl@27408
-rw-r--r--XSUB.h6
-rw-r--r--embedvar.h4
-rw-r--r--intrpvar.h6
-rw-r--r--op.h29
-rw-r--r--perl.h37
-rw-r--r--perlapi.h4
6 files changed, 77 insertions, 9 deletions
diff --git a/XSUB.h b/XSUB.h
index 9f881a2ebd..a137c42ab9 100644
--- a/XSUB.h
+++ b/XSUB.h
@@ -398,6 +398,12 @@ Rethrows a previously caught exception. See L<perlguts/"Exception Handling">.
#endif
#include "perlapi.h"
+#ifndef PERL_MAD
+# undef PL_madskills
+# undef PL_xmlfp
+# define PL_madskills 0
+# define PL_xmlfp 0
+#endif
#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
# undef aTHX
diff --git a/embedvar.h b/embedvar.h
index 022dce8c80..1827ad3de6 100644
--- a/embedvar.h
+++ b/embedvar.h
@@ -298,6 +298,7 @@
#define PL_linestr (vTHX->Ilinestr)
#define PL_localpatches (vTHX->Ilocalpatches)
#define PL_lockhook (vTHX->Ilockhook)
+#define PL_madskills (vTHX->Imadskills)
#define PL_main_cv (vTHX->Imain_cv)
#define PL_main_root (vTHX->Imain_root)
#define PL_main_start (vTHX->Imain_start)
@@ -434,6 +435,7 @@
#define PL_uudmap (vTHX->Iuudmap)
#define PL_warnhook (vTHX->Iwarnhook)
#define PL_widesyscalls (vTHX->Iwidesyscalls)
+#define PL_xmlfp (vTHX->Ixmlfp)
#define PL_yycharp (vTHX->Iyycharp)
#define PL_yylvalp (vTHX->Iyylvalp)
@@ -579,6 +581,7 @@
#define PL_Ilinestr PL_linestr
#define PL_Ilocalpatches PL_localpatches
#define PL_Ilockhook PL_lockhook
+#define PL_Imadskills PL_madskills
#define PL_Imain_cv PL_main_cv
#define PL_Imain_root PL_main_root
#define PL_Imain_start PL_main_start
@@ -715,6 +718,7 @@
#define PL_Iuudmap PL_uudmap
#define PL_Iwarnhook PL_warnhook
#define PL_Iwidesyscalls PL_widesyscalls
+#define PL_Ixmlfp PL_xmlfp
#define PL_Iyycharp PL_yycharp
#define PL_Iyylvalp PL_yylvalp
diff --git a/intrpvar.h b/intrpvar.h
index 76be01d312..7db6b73fe2 100644
--- a/intrpvar.h
+++ b/intrpvar.h
@@ -439,6 +439,12 @@ PERLVAR(Ireentrant_buffer, REENTR*) /* here we store the _r buffers */
PERLVARI(Isavebegin, bool, FALSE) /* save BEGINs for compiler */
+#ifdef PERL_MAD
+PERLVARI(Imadskills, bool, FALSE) /* preserve all syntactic info */
+ /* (MAD = Misc Attribute Decoration) */
+PERLVARI(Ixmlfp, PerlIO *,NULL)
+#endif
+
PERLVAR(Icustom_op_names, HV*) /* Names of user defined ops */
PERLVAR(Icustom_op_descs, HV*) /* Descriptions of user defined ops */
diff --git a/op.h b/op.h
index cbf86a085e..e38c578c48 100644
--- a/op.h
+++ b/op.h
@@ -36,6 +36,12 @@
#define OPCODE U16
#endif
+#ifdef PERL_MAD
+# define MADPROP_IN_BASEOP MADPROP* op_madprop;
+#else
+# define MADPROP_IN_BASEOP
+#endif
+
#ifdef BASEOP_DEFINITION
#define BASEOP BASEOP_DEFINITION
#else
@@ -43,6 +49,7 @@
OP* op_next; \
OP* op_sibling; \
OP* (CPERLscope(*op_ppaddr))(pTHX); \
+ MADPROP_IN_BASEOP \
PADOFFSET op_targ; \
unsigned op_type:9; \
unsigned op_opt:1; \
@@ -549,3 +556,25 @@ struct loop {
(var = (OP*)safemalloc(size), memzero(var, size))
#define FreeOp(p) Safefree(p)
#endif
+
+#ifdef PERL_MAD
+# define MAD_NULL 1
+# define MAD_PV 2
+# define MAD_OP 3
+# define MAD_SV 4
+
+struct madprop {
+ MADPROP* mad_next;
+ void *mad_val;
+ U32 mad_vlen;
+/* short mad_count; */
+ char mad_key;
+ char mad_type;
+};
+
+struct token {
+ I32 tk_type;
+ YYSTYPE tk_lval;
+ MADPROP* tk_mad;
+};
+#endif
diff --git a/perl.h b/perl.h
index 565ad6306b..51a16ad6ec 100644
--- a/perl.h
+++ b/perl.h
@@ -2141,6 +2141,11 @@ struct RExC_state_t;
typedef MEM_SIZE STRLEN;
+#ifdef PERL_MAD
+typedef struct token TOKEN;
+typedef struct madprop MADPROP;
+typedef struct nexttoken NEXTTOKE;
+#endif
typedef struct op OP;
typedef struct cop COP;
typedef struct unop UNOP;
@@ -3062,6 +3067,23 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */
# define USE_HASH_SEED
#endif
+/* Win32 defines a type 'WORD' in windef.h. This conflicts with the enumerator
+ * 'WORD' defined in perly.h. The yytokentype enum is only a debugging aid, so
+ * it's not really needed.
+ */
+#if defined(WIN32)
+# define YYTOKENTYPE
+#endif
+#include "perly.h"
+
+#ifdef PERL_MAD
+struct nexttoken {
+ YYSTYPE next_val; /* value of next token, if any */
+ I32 next_type; /* type of next token */
+ MADPROP *next_mad; /* everything else about that token */
+};
+#endif
+
#include "regexp.h"
#include "sv.h"
#include "util.h"
@@ -4080,15 +4102,6 @@ END_EXTERN_C
#endif
#endif
-/* Win32 defines a type 'WORD' in windef.h. This conflicts with the enumerator
- * 'WORD' defined in perly.h. The yytokentype enum is only a debugging aid, so
- * it's not really needed.
- */
-#if defined(WIN32)
-# define YYTOKENTYPE
-#endif
-#include "perly.h"
-
#define LEX_NOTPARSING 11 /* borrowed from toke.c */
typedef enum {
@@ -4321,6 +4334,12 @@ struct tempsym; /* defined in pp_pack.c */
#if !defined(PERL_FOR_X2P)
# include "embedvar.h"
#endif
+#ifndef PERL_MAD
+# undef PL_madskills
+# undef PL_xmlfp
+# define PL_madskills 0
+# define PL_xmlfp 0
+#endif
/* Now include all the 'global' variables
* If we don't have threads or multiple interpreters
diff --git a/perlapi.h b/perlapi.h
index fa28363d96..ae4d932c78 100644
--- a/perlapi.h
+++ b/perlapi.h
@@ -394,6 +394,8 @@ END_EXTERN_C
#define PL_localpatches (*Perl_Ilocalpatches_ptr(aTHX))
#undef PL_lockhook
#define PL_lockhook (*Perl_Ilockhook_ptr(aTHX))
+#undef PL_madskills
+#define PL_madskills (*Perl_Imadskills_ptr(aTHX))
#undef PL_main_cv
#define PL_main_cv (*Perl_Imain_cv_ptr(aTHX))
#undef PL_main_root
@@ -666,6 +668,8 @@ END_EXTERN_C
#define PL_warnhook (*Perl_Iwarnhook_ptr(aTHX))
#undef PL_widesyscalls
#define PL_widesyscalls (*Perl_Iwidesyscalls_ptr(aTHX))
+#undef PL_xmlfp
+#define PL_xmlfp (*Perl_Ixmlfp_ptr(aTHX))
#undef PL_yycharp
#define PL_yycharp (*Perl_Iyycharp_ptr(aTHX))
#undef PL_yylvalp