/* Part of CPP library.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007,
- 2008, 2009 Free Software Foundation, Inc.
+ 2008, 2009, 2010 Free Software Foundation, Inc.
This program 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 2, or (at your option) any
+Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
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, write to the Free Software
-Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+along with this program; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
/* This header defines all the internal data structures and functions
that need to be visible across files. It should not be used outside
typedef int iconv_t; /* dummy */
#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct directive; /* Deliberately incomplete. */
struct pending_option;
struct op;
/* Type of note. The 9 'from' trigraph characters represent those
trigraphs, '\\' an escaped newline, ' ' an escaped newline with
- intervening space, and anything else is invalid. */
+ intervening space, 0 represents a note that has already been handled,
+ and anything else is invalid. */
unsigned int type;
};
struct cset_converter input_cset_desc;
};
+/* The list of saved macros by push_macro pragma. */
+struct def_pragma_macro {
+ /* Chain element to previous saved macro. */
+ struct def_pragma_macro *next;
+ /* Name of the macro. */
+ char *name;
+ /* The stored macro content. */
+ unsigned char *definition;
+
+ /* Definition line number. */
+ source_location line;
+ /* If macro defined in system header. */
+ unsigned int syshdr : 1;
+ /* Nonzero if it has been expanded or had its existence tested. */
+ unsigned int used : 1;
+
+ /* Mark if we save an undefined macro. */
+ unsigned int is_undef : 1;
+};
+
/* A cpp_reader encapsulates the "state" of a pre-processor run.
Applying cpp_get_token repeatedly yields a stream of pre-processor
tokens. Usually, there is only one cpp_reader object active. */
struct cset_converter narrow_cset_desc;
/* Descriptor for converting from the source character set to the
+ UTF-8 execution character set. */
+ struct cset_converter utf8_cset_desc;
+
+ /* Descriptor for converting from the source character set to the
UTF-16 execution character set. */
struct cset_converter char16_cset_desc;
/* Table of comments, when state.save_comments is true. */
cpp_comment_table comments;
+
+ /* List of saved macros by push_macro. */
+ struct def_pragma_macro *pushed_macros;
};
/* Character classes. Based on the more primitive macros in safe-ctype.h.
{
return pfile->buffer ? pfile->buffer->sysp : 0;
}
-#define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic)
-#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional)
+#define CPP_PEDANTIC(PF) CPP_OPTION (PF, cpp_pedantic)
+#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, cpp_warn_traditional)
static inline int cpp_in_primary_file (cpp_reader *);
static inline int
extern cpp_token *_cpp_lex_direct (cpp_reader *);
extern int _cpp_equiv_tokens (const cpp_token *, const cpp_token *);
extern void _cpp_init_tokenrun (tokenrun *, unsigned int);
+extern cpp_hashnode *_cpp_lex_identifier (cpp_reader *, const char *);
/* In init.c. */
extern void _cpp_maybe_push_include_file (cpp_reader *);
+extern const char *cpp_named_operator2name (enum cpp_ttype type);
/* In directives.c */
extern int _cpp_test_assertion (cpp_reader *, unsigned int *);
return fputs ((const char *)s, f);
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* ! LIBCPP_INTERNAL_H */