require ExtUtils::Constant::Base; @ISA = 'ExtUtils::Constant::Base';
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).
Currently the base class does nothing and returns an empty string.
#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.
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.
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.