This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Note the ExtUtils::ParseXS upgrade in perldelta
[perl5.git] / op.h
diff --git a/op.h b/op.h
index a4921e1..ae6989a 100644 (file)
--- a/op.h
+++ b/op.h
@@ -130,7 +130,7 @@ Deprecated.  Use C<GIMME_V> instead.
                                    defined()*/
                                /*  On OP_DBSTATE, indicates breakpoint
                                 *    (runtime property) */
-                               /*  On OP_AELEMFAST, indiciates pad var */
+                               /*  On OP_AELEMFAST, indicates pad var */
                                /*  On OP_REQUIRE, was seen as CORE::require */
                                /*  On OP_ENTERWHEN, there's no condition */
                                /*  On OP_BREAK, an implicit break */
@@ -145,6 +145,8 @@ Deprecated.  Use C<GIMME_V> instead.
                                    operand of a logical or conditional
                                    that was optimised away, so it should
                                    not be bound via =~ */
+                               /*  On OP_CONST, from a constant CV */
+                               /*  On OP_GLOB, use Perl glob function */
 
 /* old names; don't use in new code, but don't break them, either */
 #define OPf_LIST       OPf_WANT_LIST
@@ -236,7 +238,7 @@ Deprecated.  Use C<GIMME_V> instead.
 /* Private for OP_CONST */
 #define        OPpCONST_NOVER          2       /* no 6; */
 #define        OPpCONST_SHORTCIRCUIT   4       /* eg the constant 5 in (5 || foo) */
-#define        OPpCONST_STRICT         8       /* bearword subject to strict 'subs' */
+#define        OPpCONST_STRICT         8       /* bareword subject to strict 'subs' */
 #define OPpCONST_ENTERED       16      /* Has been entered as symbol. */
 #define OPpCONST_ARYBASE       32      /* Was a $[ translated to constant. */
 #define OPpCONST_BARE          64      /* Was a bare word (filehandle?). */
@@ -365,9 +367,9 @@ struct pmop {
 
 /* Leave some space, so future bit allocations can go either in the shared or
  * unshared area without affecting binary compatibility */
-#define PMf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT+7)
+#define PMf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT+6)
 
-/* taint $1 etc. if target tainted */
+/* 'use re "taint"' in scope: taint $1 etc. if target tainted */
 #define PMf_RETAINT    (1<<(PMf_BASE_SHIFT+0))
 
 /* match successfully only once per reset, with related flag RXf_USED in
@@ -386,6 +388,7 @@ struct pmop {
 
 /* keep 1st runtime pattern forever */
 #define PMf_KEEP       (1<<(PMf_BASE_SHIFT+5))
+
 #define PMf_GLOBAL     (1<<(PMf_BASE_SHIFT+6)) /* pattern had a g modifier */
 
 /* don't reset pos() if //g fails */
@@ -676,32 +679,32 @@ struct block_hooks {
 /*
 =head1 Compile-time scope hooks
 
-=for apidoc m|U32|BhkFLAGS|BHK *hk
+=for apidoc mx|U32|BhkFLAGS|BHK *hk
 Return the BHK's flags.
 
-=for apidoc m|void *|BhkENTRY|BHK *hk|which
+=for apidoc mx|void *|BhkENTRY|BHK *hk|which
 Return an entry from the BHK structure. I<which> is a preprocessor token
 indicating which entry to return. If the appropriate flag is not set
 this will return NULL. The type of the return value depends on which
 entry you ask for.
 
-=for apidoc Am|void|BhkENTRY_set|BHK *hk|which|void *ptr
+=for apidoc Amx|void|BhkENTRY_set|BHK *hk|which|void *ptr
 Set an entry in the BHK structure, and set the flags to indicate it is
 valid. I<which> is a preprocessing token indicating which entry to set.
 The type of I<ptr> depends on the entry.
 
-=for apidoc Am|void|BhkDISABLE|BHK *hk|which
+=for apidoc Amx|void|BhkDISABLE|BHK *hk|which
 Temporarily disable an entry in this BHK structure, by clearing the
 appropriate flag. I<which> is a preprocessor token indicating which
 entry to disable.
 
-=for apidoc Am|void|BhkENABLE|BHK *hk|which
+=for apidoc Amx|void|BhkENABLE|BHK *hk|which
 Re-enable an entry in this BHK structure, by setting the appropriate
 flag. I<which> is a preprocessor token indicating which entry to enable.
 This will assert (under -DDEBUGGING) if the entry doesn't contain a valid
 pointer.
 
-=for apidoc m|void|CALL_BLOCK_HOOKS|which|arg
+=for apidoc mx|void|CALL_BLOCK_HOOKS|which|arg
 Call all the registered block hooks for type I<which>. I<which> is a
 preprocessing token; the type of I<arg> depends on I<which>.
 
@@ -760,6 +763,31 @@ preprocessing token; the type of I<arg> depends on I<which>.
 #define RV2CVOPCV_MARK_EARLY     0x00000001
 #define RV2CVOPCV_RETURN_NAME_GV 0x00000002
 
+/*
+=head1 Custom Operators
+
+=for apidoc Am|U32|XopFLAGS|XOP *xop
+Return the XOP's flags.
+
+=for apidoc Am||XopENTRY|XOP *xop|which
+Return a member of the XOP structure. I<which> is a cpp token indicating
+which entry to return. If the member is not set this will return a
+default value. The return type depends on I<which>.
+
+=for apidoc Am|void|XopENTRY_set|XOP *xop|which|value
+Set a member of the XOP structure. I<which> is a cpp token indicating
+which entry to set. See L<perlguts/"Custom Operators"> for details about
+the available members and how they are used.
+
+=for apidoc Am|void|XopDISABLE|XOP *xop|which
+Temporarily disable a member of the XOP, by clearing the appropriate flag.
+
+=for apidoc Am|void|XopENABLE|XOP *xop|which
+Reenable a member of the XOP which has been disabled.
+
+=cut
+*/
+
 struct custom_op {
     U32                    xop_flags;    
     const char    *xop_name;
@@ -796,6 +824,27 @@ struct custom_op {
        assert(XopENTRY(xop, which)); \
     } STMT_END
 
+/*
+=head1 Optree Manipulation Functions
+
+=for apidoc Am|const char *|OP_NAME|OP *o
+Return the name of the provided OP. For core ops this looks up the name
+from the op_type; for custom ops from the op_ppaddr.
+
+=for apidoc Am|const char *|OP_DESC|OP *o
+Return a short description of the provided OP.
+
+=for apidoc Am|U32|OP_CLASS|OP *o
+Return the class of the provided OP: that is, which of the *OP
+structures it uses. For core ops this currently gets the information out
+of PL_opargs, which does not always accurately reflect the type used.
+For custom ops the type is returned from the registration, and it is up
+to the registree to ensure it is accurate. The value returned will be
+one of the OA_* constants from op.h.
+
+=cut
+*/
+
 #define OP_NAME(o) ((o)->op_type == OP_CUSTOM \
                    ? XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_name) \
                    : PL_op_name[(o)->op_type])
@@ -806,6 +855,8 @@ struct custom_op {
                     ? XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_class) \
                     : (PL_opargs[(o)->op_type] & OA_CLASS_MASK))
 
+#define newSUB(f, o, p, b)     Perl_newATTRSUB(aTHX_ (f), (o), (p), NULL, (b))
+
 #ifdef PERL_MAD
 #  define MAD_NULL 1
 #  define MAD_PV 2