summaryrefslogtreecommitdiff
path: root/m4/m4private.h
diff options
context:
space:
mode:
Diffstat (limited to 'm4/m4private.h')
-rw-r--r--m4/m4private.h626
1 files changed, 0 insertions, 626 deletions
diff --git a/m4/m4private.h b/m4/m4private.h
deleted file mode 100644
index a09ca9f8..00000000
--- a/m4/m4private.h
+++ /dev/null
@@ -1,626 +0,0 @@
-/* GNU m4 -- A simple macro processor
- Copyright (C) 1989-1994, 1998-1999, 2004-2010, 2013-2014, 2017 Free
- Software Foundation, Inc.
-
- This file is part of GNU M4.
-
- GNU M4 is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- GNU M4 is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef M4PRIVATE_H
-#define M4PRIVATE_H 1
-
-#include <m4/m4module.h>
-
-#include "cloexec.h"
-#include "quotearg.h"
-#include "xmemdup0.h"
-
-typedef struct m4__search_path_info m4__search_path_info;
-typedef struct m4__macro_arg_stacks m4__macro_arg_stacks;
-typedef struct m4__symbol_chain m4__symbol_chain;
-
-typedef enum {
- M4_SYMBOL_VOID, /* Traced but undefined, u is invalid. */
- M4_SYMBOL_TEXT, /* Plain text, u.u_t is valid. */
- M4_SYMBOL_FUNC, /* Builtin function, u.func is valid. */
- M4_SYMBOL_PLACEHOLDER, /* Placeholder for unknown builtin from -R. */
- M4_SYMBOL_COMP /* Composite symbol, u.u_c.c is valid. */
-} m4__symbol_type;
-
-#define BIT_TEST(flags, bit) (((flags) & (bit)) == (bit))
-#define BIT_SET(flags, bit) ((flags) |= (bit))
-#define BIT_RESET(flags, bit) ((flags) &= ~(bit))
-
-/* Gnulib's stdbool doesn't work with bool bitfields. For nicer
- debugging, use bool when we know it works, but use the more
- portable unsigned int elsewhere. */
-#if __GNUC__ > 2
-typedef bool bool_bitfield;
-#else
-typedef unsigned int bool_bitfield;
-#endif /* !__GNUC__ */
-
-
-/* --- CONTEXT MANAGEMENT --- */
-
-struct m4 {
- m4_symbol_table * symtab;
- m4_syntax_table * syntax;
- m4_module * modules;
- m4_hash * namemap;
-
- const char * current_file; /* Current input file. */
- int current_line; /* Current input line. */
- int output_line; /* Current output line. */
-
- FILE * debug_file; /* File for debugging output. */
- m4_obstack trace_messages;
- int exit_status; /* Cumulative exit status. */
- int current_diversion; /* Current output diversion. */
-
- /* Option flags (set in src/main.c). */
- size_t nesting_limit; /* -L */
- int debug_level; /* -d */
- size_t max_debug_arg_length; /* -l */
- int regexp_syntax; /* -r */
- int opt_flags;
-
- /* __PRIVATE__: */
- m4__search_path_info *search_path; /* The list of path directories. */
- m4__macro_arg_stacks *arg_stacks; /* Array of current argv refs. */
- size_t stacks_count; /* Size of arg_stacks. */
- size_t expansion_level;/* Macro call nesting level. */
-};
-
-#define M4_OPT_PREFIX_BUILTINS_BIT (1 << 0) /* -P */
-#define M4_OPT_SUPPRESS_WARN_BIT (1 << 1) /* -Q */
-#define M4_OPT_DISCARD_COMMENTS_BIT (1 << 2) /* -c */
-#define M4_OPT_INTERACTIVE_BIT (1 << 3) /* -e */
-#define M4_OPT_SYNCOUTPUT_BIT (1 << 4) /* -s */
-#define M4_OPT_POSIXLY_CORRECT_BIT (1 << 5) /* -G/POSIXLY_CORRECT */
-#define M4_OPT_FATAL_WARN_BIT (1 << 6) /* -E once */
-#define M4_OPT_WARN_EXIT_BIT (1 << 7) /* -E twice */
-#define M4_OPT_SAFER_BIT (1 << 8) /* --safer */
-
-/* Fast macro versions of accessor functions for public fields of m4,
- that also have an identically named function exported in m4module.h. */
-#ifdef NDEBUG
-# define m4_get_symbol_table(C) ((C)->symtab)
-# define m4_set_symbol_table(C, V) ((C)->symtab = (V))
-# define m4_get_syntax_table(C) ((C)->syntax)
-# define m4_set_syntax_table(C, V) ((C)->syntax = (V))
-# define m4_get_current_file(C) ((C)->current_file)
-# define m4_set_current_file(C, V) ((C)->current_file = (V))
-# define m4_get_current_line(C) ((C)->current_line)
-# define m4_set_current_line(C, V) ((C)->current_line = (V))
-# define m4_get_output_line(C) ((C)->output_line)
-# define m4_set_output_line(C, V) ((C)->output_line = (V))
-# define m4_get_debug_file(C) ((C)->debug_file)
-# define m4_set_debug_file(C, V) ((C)->debug_file = (V))
-# define m4_get_trace_messages(C) ((C)->trace_messages)
-# define m4_set_trace_messages(C, V) ((C)->trace_messages = (V))
-# define m4_get_exit_status(C) ((C)->exit_status)
-# define m4_set_exit_status(C, V) ((C)->exit_status = (V))
-# define m4_get_current_diversion(C) ((C)->current_diversion)
-# define m4_set_current_diversion(C, V) ((C)->current_diversion = (V))
-# define m4_get_nesting_limit_opt(C) ((C)->nesting_limit)
-# define m4_set_nesting_limit_opt(C, V) ((C)->nesting_limit = (V))
-# define m4_get_debug_level_opt(C) ((C)->debug_level)
-# define m4_set_debug_level_opt(C, V) ((C)->debug_level = (V))
-# define m4_get_max_debug_arg_length_opt(C) ((C)->max_debug_arg_length)
-# define m4_set_max_debug_arg_length_opt(C, V) ((C)->max_debug_arg_length=(V))
-# define m4_get_regexp_syntax_opt(C) ((C)->regexp_syntax)
-# define m4_set_regexp_syntax_opt(C, V) ((C)->regexp_syntax = (V))
-
-# define m4_get_prefix_builtins_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_PREFIX_BUILTINS_BIT))
-# define m4_get_suppress_warnings_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_SUPPRESS_WARN_BIT))
-# define m4_get_discard_comments_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_DISCARD_COMMENTS_BIT))
-# define m4_get_interactive_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_INTERACTIVE_BIT))
-# define m4_get_syncoutput_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_SYNCOUTPUT_BIT))
-# define m4_get_posixly_correct_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_POSIXLY_CORRECT_BIT))
-# define m4_get_fatal_warnings_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_FATAL_WARN_BIT))
-# define m4_get_warnings_exit_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_WARN_EXIT_BIT))
-# define m4_get_safer_opt(C) \
- (BIT_TEST((C)->opt_flags, M4_OPT_SAFER_BIT))
-
-/* No fast opt bit set macros, as they would need to evaluate their
- arguments more than once, which would subtly change their semantics. */
-#endif
-
-/* Accessors for private fields of m4, which have no function version
- exported in m4module.h. */
-#define m4__get_search_path(C) ((C)->search_path)
-
-
-/* --- BUILTIN MANAGEMENT --- */
-
-/* Internal representation of loaded builtins. */
-struct m4__builtin
-{
- /* Copied from module's BUILTIN_SYMBOL table, although builtin.flags
- can be used for additional bits beyond what is allowed for
- modules. */
- m4_builtin builtin;
- m4_module *module; /* Module that owns this builtin. */
-};
-typedef struct m4__builtin m4__builtin;
-
-extern void m4__set_symbol_value_builtin (m4_symbol_value *,
- const m4__builtin *);
-extern void m4__builtin_print (m4_obstack *, const m4__builtin *, bool,
- m4__symbol_chain **, const m4_string_pair *,
- bool);
-
-
-/* --- MODULE MANAGEMENT --- */
-
-/* Representation of a loaded m4 module. */
-struct m4_module
-{
- const char *name; /* Name of the module. */
- void *handle; /* System module handle. */
- m4__builtin *builtins; /* Sorted array of builtins. */
- m4_macro *macros; /* Unsorted array of macros. */
- size_t builtins_len; /* Number of builtins. */
- m4_module *next;
-};
-
-extern m4_module * m4__module_open (m4 *context, const char *name,
- m4_obstack *obs);
-extern m4_module * m4__module_find (m4 *context, const char *name);
-
-
-/* --- SYMBOL TABLE MANAGEMENT --- */
-
-struct m4_symbol
-{
- bool traced; /* True if this symbol is traced. */
- m4_symbol_value *value; /* Linked list of pushdef'd values. */
-};
-
-/* Type of a link in a symbol chain. */
-enum m4__symbol_chain_type
-{
- M4__CHAIN_STR, /* Link contains a string, u.u_s is valid. */
- M4__CHAIN_FUNC, /* Link contains builtin token, u.builtin is valid. */
- M4__CHAIN_ARGV, /* Link contains a $@ reference, u.u_a is valid. */
- M4__CHAIN_LOC /* Link contains m4wrap location, u.u_l is valid. */
-};
-
-/* Composite symbols are built of a linked list of chain objects. */
-struct m4__symbol_chain
-{
- m4__symbol_chain *next; /* Pointer to next link of chain. */
- enum m4__symbol_chain_type type; /* Type of this link. */
- unsigned int quote_age; /* Quote_age of this link, or 0. */
- union
- {
- struct
- {
- const char *str; /* Pointer to text. */
- size_t len; /* Remaining length of str. */
- size_t level; /* Expansion level of content, or SIZE_MAX. */
- } u_s; /* M4__CHAIN_STR. */
- const m4__builtin *builtin; /* M4__CHAIN_FUNC. */
- struct
- {
- m4_macro_args *argv; /* Reference to earlier $@. */
- size_t index; /* Argument index within argv. */
- bool_bitfield flatten : 1; /* True to treat builtins as text. */
- bool_bitfield comma : 1; /* True when `,' is next input. */
- bool_bitfield skip_last : 1; /* True if last argument omitted. */
- bool_bitfield has_func : 1; /* True if argv includes func. */
- const m4_string_pair *quotes; /* NULL for $*, quotes for $@. */
- } u_a; /* M4__CHAIN_ARGV. */
- struct
- {
- const char *file; /* File where subsequent links originate. */
- int line; /* Line where subsequent links originate. */
- } u_l; /* M4__CHAIN_LOC. */
- } u;
-};
-
-/* A symbol value is used both for values associated with a macro
- name, and for arguments to a macro invocation. */
-struct m4_symbol_value
-{
- m4_symbol_value * next;
- m4_module * module;
- unsigned int flags;
-
- m4_hash * arg_signature;
- size_t min_args;
- size_t max_args;
- size_t pending_expansions;
-
- m4__symbol_type type;
- union
- {
- struct
- {
- size_t len; /* Length of string. */
- const char * text; /* String contents. */
- /* Quote age when this string was built, or zero to force a
- rescan of the string. Ignored for 0 len. */
- unsigned int quote_age;
- } u_t; /* Valid when type is TEXT, PLACEHOLDER. */
- const m4__builtin * builtin;/* Valid when type is FUNC. */
- struct
- {
- m4__symbol_chain *chain; /* First link of the chain. */
- m4__symbol_chain *end; /* Last link of the chain. */
- bool_bitfield wrapper : 1; /* True if this is a $@ ref. */
- bool_bitfield has_func : 1; /* True if chain includes func. */
- } u_c; /* Valid when type is COMP. */
- } u;
-};
-
-/* Structure describing all arguments to a macro, including the macro
- name at index 0. */
-struct m4_macro_args
-{
- /* One more than the highest actual argument. May be larger than
- arraylen since the array can refer to multiple arguments via a
- single $@ reference. */
- size_t argc;
- /* False unless the macro expansion refers to $@; determines whether
- this object can be freed at end of macro expansion or must wait
- until all references have been rescanned. */
- bool_bitfield inuse : 1;
- /* False if all arguments are just text or func, true if this argv
- refers to another one. */
- bool_bitfield wrapper : 1;
- /* False if all arguments belong to this argv, true if some of them
- include references to another. */
- bool_bitfield has_ref : 1;
- /* True to flatten builtins contained in references. */
- bool_bitfield flatten : 1;
- /* True if any token contains builtins. */
- bool_bitfield has_func : 1;
- /* The value of quote_age for all tokens, or 0 if quote_age changed
- during parsing or any token is potentially unsafe and requires a
- rescan. */
- unsigned int quote_age;
- /* The context of the macro call during expansion, and NULL in a
- back-reference. */
- m4_call_info *info;
- size_t level; /* Which obstack owns this argv. */
- size_t arraylen; /* True length of allocated elements in array. */
- /* Used as a variable-length array, storing information about each
- argument. */
- m4_symbol_value *array[FLEXIBLE_ARRAY_MEMBER];
-};
-
-/* Internal structure for managing multiple argv references. See
- macro.c for a much more detailed comment on usage. */
-struct m4__macro_arg_stacks
-{
- size_t refcount; /* Number of active $@ references at this level. */
- size_t argcount; /* Number of argv at this level. */
- m4_obstack *args; /* Content of arguments. */
- m4_obstack *argv; /* Argv pointers into args. */
- void *args_base; /* Location for clearing the args obstack. */
- void *argv_base; /* Location for clearing the argv obstack. */
-};
-
-/* Opaque structure for managing call context information. Contains
- the context used in tracing and error messages that was valid at
- the start of the macro expansion, even if argument collection
- changes global context in the meantime. */
-struct m4_call_info
-{
- const char *file; /* The file containing the macro invocation. */
- int line; /* The line the macro was called on. */
- size_t call_id; /* The unique sequence call id of the macro. */
- int trace : 1; /* True to trace this macro. */
- int debug_level : 31; /* The debug level for tracing the macro call. */
- const char *name; /* The macro name. */
- size_t name_len; /* The length of name. */
-};
-
-extern size_t m4__adjust_refcount (m4 *, size_t, bool);
-extern bool m4__arg_adjust_refcount (m4 *, m4_macro_args *, bool);
-extern void m4__push_arg_quote (m4 *, m4_obstack *, m4_macro_args *,
- size_t, const m4_string_pair *);
-extern bool m4__arg_print (m4 *, m4_obstack *, m4_macro_args *,
- size_t, const m4_string_pair *, bool,
- m4__symbol_chain **, const char *,
- size_t *, bool, bool);
-
-#define VALUE_NEXT(T) ((T)->next)
-#define VALUE_MODULE(T) ((T)->module)
-#define VALUE_FLAGS(T) ((T)->flags)
-#define VALUE_ARG_SIGNATURE(T) ((T)->arg_signature)
-#define VALUE_MIN_ARGS(T) ((T)->min_args)
-#define VALUE_MAX_ARGS(T) ((T)->max_args)
-#define VALUE_PENDING(T) ((T)->pending_expansions)
-
-#define SYMBOL_NEXT(S) (VALUE_NEXT ((S)->value))
-#define SYMBOL_MODULE(S) (VALUE_MODULE ((S)->value))
-#define SYMBOL_FLAGS(S) (VALUE_FLAGS ((S)->value))
-#define SYMBOL_ARG_SIGNATURE(S) (VALUE_ARG_SIGNATURE ((S)->value))
-#define SYMBOL_MIN_ARGS(S) (VALUE_MIN_ARGS ((S)->value))
-#define SYMBOL_MAX_ARGS(S) (VALUE_MAX_ARGS ((S)->value))
-#define SYMBOL_PENDING(S) (VALUE_PENDING ((S)->value))
-
-/* Fast macro versions of symbol table accessor functions,
- that also have an identically named function exported in m4module.h. */
-#ifdef NDEBUG
-# define m4_get_symbol_traced(S) ((S)->traced)
-# define m4_get_symbol_value(S) ((S)->value)
-# define m4_set_symbol_value(S, V) ((S)->value = (V))
-
-/* m4_symbol_value_{create,delete} are too complex for a simple macro. */
-
-# define m4_is_symbol_value_text(V) ((V)->type == M4_SYMBOL_TEXT)
-# define m4_is_symbol_value_func(V) ((V)->type == M4_SYMBOL_FUNC)
-# define m4_is_symbol_value_void(V) ((V)->type == M4_SYMBOL_VOID)
-# define m4_is_symbol_value_placeholder(V) \
- ((V)->type == M4_SYMBOL_PLACEHOLDER)
-# define m4_get_symbol_value_text(V) ((V)->u.u_t.text)
-# define m4_get_symbol_value_len(V) ((V)->u.u_t.len)
-# define m4_get_symbol_value_quote_age(V) ((V)->u.u_t.quote_age)
-# define m4_get_symbol_value_func(V) ((V)->u.builtin->builtin.func)
-# define m4_get_symbol_value_builtin(V) (&(V)->u.builtin->builtin)
-# define m4_get_symbol_value_placeholder(V) \
- ((V)->u.u_t.text)
-# define m4_symbol_value_flatten_args(V) \
- (BIT_TEST ((V)->flags, VALUE_FLATTEN_ARGS_BIT))
-
-# define m4_set_symbol_value_text(V, T, L, A) \
- ((V)->type = M4_SYMBOL_TEXT, (V)->u.u_t.text = (T), \
- (V)->u.u_t.len = (L), (V)->u.u_t.quote_age = (A))
-# define m4_set_symbol_value_placeholder(V, T) \
- ((V)->type = M4_SYMBOL_PLACEHOLDER, (V)->u.u_t.text = (T))
-# define m4__set_symbol_value_builtin(V, B) \
- ((V)->type = M4_SYMBOL_FUNC, (V)->u.builtin = (B), \
- VALUE_MODULE (V) = (B)->module, \
- VALUE_FLAGS (V) = (B)->builtin.flags, \
- VALUE_MIN_ARGS (V) = (B)->builtin.min_args, \
- VALUE_MAX_ARGS (V) = (B)->builtin.max_args)
-#endif
-
-
-
-/* m4_symbol_value.flags bit masks. Be sure these are a consistent
- superset of the M4_BUILTIN_* bit masks, so we can copy
- m4_builtin.flags to m4_symbol_arg.flags. We can use additional
- bits for private use. */
-
-#define VALUE_FLATTEN_ARGS_BIT (1 << 0)
-#define VALUE_BLIND_ARGS_BIT (1 << 1)
-#define VALUE_SIDE_EFFECT_ARGS_BIT (1 << 2)
-#define VALUE_DELETED_BIT (1 << 3)
-
-
-struct m4_symbol_arg {
- int index;
- int flags;
- char * default_val;
-};
-
-#define SYMBOL_ARG_INDEX(A) ((A)->index)
-#define SYMBOL_ARG_FLAGS(A) ((A)->flags)
-#define SYMBOL_ARG_DEFAULT(A) ((A)->default_val)
-
-/* m4_symbol_arg.flags bit masks: */
-
-#define SYMBOL_ARG_REST_BIT (1 << 0)
-#define SYMBOL_ARG_KEY_BIT (1 << 1)
-
-extern void m4__symtab_remove_module_references (m4_symbol_table *,
- m4_module *);
-extern bool m4__symbol_value_print (m4 *, m4_symbol_value *, m4_obstack *,
- const m4_string_pair *, bool,
- m4__symbol_chain **, size_t *, bool);
-
-
-
-/* --- SYNTAX TABLE MANAGEMENT --- */
-
-/* CHAR_RETRY must be last, because we size the syntax table to hold
- all other characters and sentinels. */
-#define CHAR_EOF (UCHAR_MAX + 1) /* Return on EOF. */
-#define CHAR_BUILTIN (UCHAR_MAX + 2) /* Return for BUILTIN token. */
-#define CHAR_QUOTE (UCHAR_MAX + 3) /* Return for quoted string. */
-#define CHAR_ARGV (UCHAR_MAX + 4) /* Return for $@ reference. */
-#define CHAR_RETRY (UCHAR_MAX + 5) /* Return for end of input block. */
-
-#define DEF_LQUOTE "`" /* Default left quote delimiter. */
-#define DEF_RQUOTE "\'" /* Default right quote delimiter. */
-#define DEF_BCOMM "#" /* Default begin comment delimiter. */
-#define DEF_ECOMM "\n" /* Default end comment delimiter. */
-
-struct m4_syntax_table {
- /* Please read the comment at the top of input.c for details. table
- holds the current syntax, and orig holds the default syntax. */
- unsigned short table[CHAR_RETRY];
- unsigned short orig[CHAR_RETRY];
-
- m4_string_pair quote; /* Quote delimiters. */
- m4_string_pair comm; /* Comment delimiters. */
-
- char dollar; /* Dollar character, if is_single_dollar. */
-
- /* True iff only one start and end quote delimiter exist. */
- bool_bitfield is_single_quotes : 1;
-
- /* True iff only one start and end comment delimiter exist. */
- bool_bitfield is_single_comments : 1;
-
- /* True iff only one byte has M4_SYNTAX_DOLLAR. */
- bool_bitfield is_single_dollar : 1;
-
- /* True iff some character has M4_SYNTAX_ESCAPE. */
- bool_bitfield is_macro_escaped : 1;
-
- /* True iff a changesyntax call has impacted something that requires
- cleanup at the end. */
- bool_bitfield suspect : 1;
-
- /* Track the number of changesyntax calls. This saturates at
- 0xffff, so the idea is that most users won't be changing the
- syntax that frequently; perhaps in the future we will cache
- frequently used syntax schemes by index. */
- unsigned short syntax_age;
-
- /* Track the current quote age, determined by all significant
- changequote, changecom, and changesyntax calls, since any of
- these can alter the rescan of a prior parameter in a quoted
- context. */
- unsigned int quote_age;
-
- /* Track a cached quote pair on the input obstack. */
- m4_string_pair *cached_quote;
-
- /* Storage for a simple cached quote that can be recreated on the fly. */
- char cached_lquote[2];
- char cached_rquote[2];
- m4_string_pair cached_simple;
-};
-
-/* Fast macro versions of syntax table accessor functions,
- that also have an identically named function exported in m4module.h. */
-#ifdef NDEBUG
-# define m4_get_syntax_lquote(S) ((S)->quote.str1)
-# define m4_get_syntax_rquote(S) ((S)->quote.str2)
-# define m4_get_syntax_bcomm(S) ((S)->comm.str1)
-# define m4_get_syntax_ecomm(S) ((S)->comm.str2)
-# define m4_get_syntax_quotes(S) (&(S)->quote)
-# define m4_get_syntax_comments(S) (&(S)->comm)
-
-# define m4_is_syntax_single_quotes(S) ((S)->is_single_quotes)
-# define m4_is_syntax_single_comments(S) ((S)->is_single_comments)
-# define m4_is_syntax_single_dollar(S) ((S)->is_single_dollar)
-# define m4_is_syntax_macro_escaped(S) ((S)->is_macro_escaped)
-#endif
-
-/* Return the current quote age. */
-#define m4__quote_age(S) ((S)->quote_age)
-
-/* Return true if the current quote age guarantees that parsing the
- current token in the context of a quoted string of the same quote
- age will give the same parse. */
-#define m4__safe_quotes(S) (((S)->quote_age & 0xffff) != 0)
-
-/* Set or refresh the cached quote. */
-extern const m4_string_pair *m4__quote_cache (m4_syntax_table *,
- m4_obstack *obs, unsigned int,
- const m4_string_pair *);
-
-/* Clear the cached quote. */
-#define m4__quote_uncache(S) ((S)->cached_quote = NULL)
-
-
-/* --- MACRO MANAGEMENT --- */
-
-/* Various different token types. */
-typedef enum {
- M4_TOKEN_EOF, /* End of file, M4_SYMBOL_VOID. */
- M4_TOKEN_NONE, /* Discardable token, M4_SYMBOL_VOID. */
- M4_TOKEN_STRING, /* Quoted string, M4_SYMBOL_TEXT or M4_SYMBOL_COMP. */
- M4_TOKEN_COMMENT, /* Comment, M4_SYMBOL_TEXT or M4_SYMBOL_COMP. */
- M4_TOKEN_SPACE, /* Whitespace, M4_SYMBOL_TEXT. */
- M4_TOKEN_WORD, /* An identifier, M4_SYMBOL_TEXT. */
- M4_TOKEN_OPEN, /* Argument list start, M4_SYMBOL_TEXT. */
- M4_TOKEN_COMMA, /* Argument separator, M4_SYMBOL_TEXT. */
- M4_TOKEN_CLOSE, /* Argument list end, M4_SYMBOL_TEXT. */
- M4_TOKEN_SIMPLE, /* Single character, M4_SYMBOL_TEXT. */
- M4_TOKEN_MACDEF, /* Builtin token, M4_SYMBOL_FUNC or M4_SYMBOL_COMP. */
- M4_TOKEN_ARGV /* A series of parameters, M4_SYMBOL_COMP. */
-} m4__token_type;
-
-extern void m4__make_text_link (m4_obstack *, m4__symbol_chain **,
- m4__symbol_chain **);
-extern void m4__append_builtin (m4_obstack *, const m4__builtin *,
- m4__symbol_chain **,
- m4__symbol_chain **);
-extern bool m4__push_symbol (m4 *, m4_symbol_value *, size_t,
- bool);
-extern m4_obstack *m4__push_wrapup_init (m4 *, const m4_call_info *,
- m4__symbol_chain ***);
-extern void m4__push_wrapup_finish (void);
-extern m4__token_type m4__next_token (m4 *, m4_symbol_value *, int *,
- m4_obstack *, bool,
- const m4_call_info *);
-extern bool m4__next_token_is_open (m4 *);
-
-/* Fast macro versions of macro argv accessor functions,
- that also have an identically named function exported in m4module.h. */
-#ifdef NDEBUG
-# define m4_arg_argc(A) (A)->argc
-# define m4_arg_info(A) (A)->info
-# define m4_arg_scratch(C) \
- ((C)->arg_stacks[(C)->expansion_level - 1].argv)
-#endif /* NDEBUG */
-
-
-/* --- PATH MANAGEMENT --- */
-
-typedef struct m4__search_path m4__search_path;
-
-struct m4__search_path {
- m4__search_path *next; /* next directory to search */
- const char *dir; /* directory */
- int len;
-};
-
-struct m4__search_path_info {
- m4__search_path *list; /* the list of path directories */
- m4__search_path *list_end; /* the end of same */
- int max_length; /* length of longest directory name */
-};
-
-extern void m4__include_init (m4 *);
-
-
-/* Debugging the memory allocator. */
-
-#if WITH_DMALLOC
-# define DMALLOC_FUNC_CHECK
-# include <dmalloc.h>
-#endif /* WITH_DMALLOC */
-
-
-
-/* Convenience macro to zero a variable after freeing it, as well as
- casting away any const. */
-#define DELETE(Expr) ((Expr) = (free ((void *) (Expr)), (void *) 0))
-
-/* Avoid negative logic when comparing two strings. */
-#define STREQ(a, b) (strcmp (a, b) == 0)
-#define STRNEQ(a, b) (strcmp (a, b) != 0)
-
-
-#if DEBUG
-# define DEBUG_INCL 1
-# define DEBUG_INPUT 1
-# define DEBUG_MACRO 1
-# define DEBUG_MODULES 1
-# define DEBUG_OUTPUT 1
-# define DEBUG_STKOVF 1
-# define DEBUG_SYM 1
-# define DEBUG_SYNTAX 1
-#endif
-
-#endif /* m4private.h */