Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
ExtUtils::Constant::BasPerl Programmers	Reference GExtUtils::Constant::Base(3)

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

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

       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.

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

	   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"

	   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

       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)

		   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.

		   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.

       Not everything is documented yet.

       Probably	others.

       Nicholas	Clark <> based on the code	in "h2xs" by Larry
       Wall and	others

perl v5.28.3			  2020-05-14	   ExtUtils::Constant::Base(3)


Want to link to this manual page? Use this URL:

home | help