Provided by: perl-doc_5.38.2-3.2ubuntu0.1_all bug

NAME

       ExtUtils::Constant::Base - base class for ExtUtils::Constant objects

SYNOPSIS

           require ExtUtils::Constant::Base;
           @ISA = 'ExtUtils::Constant::Base';

DESCRIPTION

       ExtUtils::Constant::Base provides a base implementation of methods to generate C code to give fast
       constant value lookup by named string. Currently it's mostly used ExtUtils::Constant::XS, which generates
       the lookup code for the constant() subroutine found in many XS modules.

USAGE

       ExtUtils::Constant::Base exports no subroutines. The following methods are available

       header
           A method returning a scalar containing definitions needed, typically for a C header file.

       memEQ_clause args_hashref
           A  method  to  return  a  suitable  C "if" statement to check whether name is equal to the C variable
           "name". If checked_at is defined, then it is used to avoid "memEQ" for short names, or to generate  a
           comment to highlight the position of the character in the "switch" statement.

           If  i<checked_at> is a reference to a scalar, then instead it gives the characters pre-checked at the
           beginning, (and the number of chars by which the C variable name has been advanced. These need to  be
           chopped from the front of name).

       dump_names arg_hashref, ITEM...
           An  internal  function  to  generate  the  embedded  perl  code  that  will  regenerate  the constant
           subroutines.  default_type, types and ITEMs are the same as for C_constant.   indent  is  treated  as
           number  of  spaces  to indent by.  If "declare_types" is true a $types is always declared in the perl
           code generated, if defined and false never declared, and if undefined $types is only declared if  the
           values in types as passed in cannot be inferred from default_types and the ITEMs.

       assign arg_hashref, VALUE...
           A  method  to  return a suitable assignment clause. If type is aggregate (eg PVN expects both pointer
           and length) then there should be multiple VALUEs for the components. pre and  post  if  defined  give
           snippets  of  C  code  to  proceed and follow the assignment. pre will be at the start of a block, so
           variables may be defined in it.

       return_clause arg_hashref, ITEM
           A method to return a suitable "#ifdef" clause. ITEM is a  hashref  (as  passed  to  "C_constant"  and
           "match_clause". indent is the number of spaces to indent, defaulting to 6.

       switch_clause arg_hashref, NAMELEN, ITEMHASH, ITEM...
           An  internal  method  to generate a suitable "switch" clause, called by "C_constant" ITEMs are in the
           hash ref format as given in the description of "C_constant", and must all have the names of the  same
           length,  given  by  NAMELEN.   ITEMHASH  is  a  reference  to a hash, keyed by name, values being the
           hashrefs in the ITEM list.  (No parameters are modified, and there can be keys in the  ITEMHASH  that
           are  not  in the list of ITEMs without causing problems - the hash is passed in to save generating it
           afresh for each call).

       params WHAT
           An "internal" method, subject to change, currently called to  allow  an  overriding  class  to  cache
           information that will then be passed into all the "*param*" calls. (Yes, having to read the source to
           make  sense  of  this is considered a known bug). WHAT is be a hashref of types the constant function
           will return. In ExtUtils::Constant::XS this method is used to returns a hashref keyed IV NV PV SV  to
           show   which   combination  of  pointers  will  be  needed  in  the  C  argument  list  generated  by
           C_constant_other_params_definition and C_constant_other_params

       dogfood arg_hashref, ITEM...
           An internal  function  to  generate  the  embedded  perl  code  that  will  regenerate  the  constant
           subroutines.  Parameters are the same as for C_constant.

           Currently the base class does nothing and returns an empty string.

       normalise_items args, default_type, seen_types, seen_items, ITEM...
           Convert the items to a normalised form. For 8 bit and Unicode values converts the item to an array of
           1 or 2 items, both 8 bit and UTF-8 encoded.

       C_constant arg_hashref, ITEM...
           A  function  that  returns  a  list  of  C  subroutine  definitions that return the value and type of
           constants when passed the name by the XS wrapper.  ITEM... gives a list of constant names.  Each  can
           either  be  a  string,  which is taken as a C macro name, or a reference to a hash with the following
           keys

           name    The name of the constant, as seen by the perl code.

           type    The type of the constant (IV, NV etc)

           value   A C expression for the value of the constant, or a list of  C  expressions  if  the  type  is
                   aggregate. This defaults to the name if not given.

           macro   The  C  pre-processor  macro to use in the "#ifdef". This defaults to the name, and is mainly
                   used if value is an "enum". If a reference an array is passed then the first element is  used
                   in  place  of the "#ifdef" line, and the second element in place of the "#endif". This allows
                   pre-processor constructions such as

                       #if defined (foo)
                       #if !defined (bar)
                       ...
                       #endif
                       #endif

                   to be used to determine if a constant is to be defined.

                   A "macro" 1 signals that the constant is  always  defined,  so  the  "#if"/"#endif"  test  is
                   omitted.

           default Default  value to use (instead of "croak"ing with "your vendor has not defined...") to return
                   if the macro isn't defined. Specify a reference to an array with type followed by value(s).

           pre     C code to use before the assignment of the value of the constant.  This  allows  you  to  use
                   temporary variables to extract a value from part of a "struct" and return this as value. This
                   C code is places at the start of a block, so you can declare variables in it.

           post    C  code  to  place  between  the assignment of value (to a temporary) and the return from the
                   function. This allows you to clear up anything in pre.  Rarely needed.

           def_pre
           def_post
                   Equivalents of pre and post for the default value.

           utf8    Generated internally. Is zero or undefined if name is 7 bit ASCII, "no" if the name is 8  bit
                   (and so should only match if SvUTF8() is false), "yes" if the name is utf8 encoded.

                   The internals automatically clone any name with characters 128-255 but none 256+ (ie one that
                   could be either in bytes or utf8) into a second entry which is utf8 encoded.

           weight  Optional  sorting  weight  for  names, to determine the order of linear testing when multiple
                   names fall in the same case of a switch clause.  Higher comes earlier, undefined defaults  to
                   zero.

           In  the argument hashref, package is the name of the package, and is only used in comments inside the
           generated C code. subname defaults to "constant" if undefined.

           default_type is the type returned by "ITEM"s that don't specify their type. It defaults to the  value
           of  default_type().  types  should  be  given  either  as  a comma separated list of types that the C
           subroutine subname will generate or as a reference to a hash. default_type will be added to the  list
           if  not  present, as will any types given in the list of ITEMs. The resultant list should be the same
           list of types that "XS_constant" is given. [Otherwise "XS_constant" and "C_constant"  may  differ  in
           the  number of parameters to the constant function. indent is currently unused and ignored. In future
           it may be used to pass in information used to change the C indentation style used.]  The best way  to
           maintain consistency is to pass in a hash reference and let this function update it.

           breakout  governs when child functions of subname are generated.  If there are breakout or more ITEMs
           with the same length of name, then the code to switch between them is placed into  a  function  named
           subname_len,  for  example  "constant_5"  for names 5 characters long.  The default breakout is 3.  A
           single "ITEM" is always inlined.

BUGS

       Not everything is documented yet.

       Probably others.

AUTHOR

       Nicholas Clark <nick@ccl4.org> based on the code in "h2xs" by Larry Wall and others

perl v5.38.2                                       2025-04-08                    ExtUtils::Constant::Base(3perl)