OSDN Git Service

Index: libcpp/ChangeLog
[pf3gnuchains/gcc-fork.git] / libcpp / include / cpplib.h
index dab3157..ccf8bff 100644 (file)
@@ -1,5 +1,6 @@
 /* Definitions for CPP library.
-   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+   2004, 2005
    Free Software Foundation, Inc.
    Written by Per Bothner, 1994-95.
 
@@ -52,106 +53,107 @@ struct _cpp_file;
    '='.  The lexer needs operators ending in '=', like ">>=", to be in
    the same order as their counterparts without the '=', like ">>".  */
 
-/* Positions in the table.  */
-#define CPP_LAST_EQ CPP_MAX
-#define CPP_FIRST_DIGRAPH CPP_HASH
-#define CPP_LAST_PUNCTUATOR CPP_DOT_STAR
-#define CPP_LAST_CPP_OP CPP_LESS_EQ
-
-#define TTYPE_TABLE                            \
-  OP(CPP_EQ = 0,       "=")                    \
-  OP(CPP_NOT,          "!")                    \
-  OP(CPP_GREATER,      ">")    /* compare */   \
-  OP(CPP_LESS,         "<")                    \
-  OP(CPP_PLUS,         "+")    /* math */      \
-  OP(CPP_MINUS,                "-")                    \
-  OP(CPP_MULT,         "*")                    \
-  OP(CPP_DIV,          "/")                    \
-  OP(CPP_MOD,          "%")                    \
-  OP(CPP_AND,          "&")    /* bit ops */   \
-  OP(CPP_OR,           "|")                    \
-  OP(CPP_XOR,          "^")                    \
-  OP(CPP_RSHIFT,       ">>")                   \
-  OP(CPP_LSHIFT,       "<<")                   \
-  OP(CPP_MIN,          "<?")   /* extension */ \
-  OP(CPP_MAX,          ">?")                   \
-\
-  OP(CPP_COMPL,                "~")                    \
-  OP(CPP_AND_AND,      "&&")   /* logical */   \
-  OP(CPP_OR_OR,                "||")                   \
-  OP(CPP_QUERY,                "?")                    \
-  OP(CPP_COLON,                ":")                    \
-  OP(CPP_COMMA,                ",")    /* grouping */  \
-  OP(CPP_OPEN_PAREN,   "(")                    \
-  OP(CPP_CLOSE_PAREN,  ")")                    \
-  TK(CPP_EOF,          SPELL_NONE)             \
-  OP(CPP_EQ_EQ,                "==")   /* compare */   \
-  OP(CPP_NOT_EQ,       "!=")                   \
-  OP(CPP_GREATER_EQ,   ">=")                   \
-  OP(CPP_LESS_EQ,      "<=")                   \
-\
-  /* These two are unary + / - in preprocessor expressions.  */ \
-  OP(CPP_PLUS_EQ,      "+=")   /* math */      \
-  OP(CPP_MINUS_EQ,     "-=")                   \
-\
-  OP(CPP_MULT_EQ,      "*=")                   \
-  OP(CPP_DIV_EQ,       "/=")                   \
-  OP(CPP_MOD_EQ,       "%=")                   \
-  OP(CPP_AND_EQ,       "&=")   /* bit ops */   \
-  OP(CPP_OR_EQ,                "|=")                   \
-  OP(CPP_XOR_EQ,       "^=")                   \
-  OP(CPP_RSHIFT_EQ,    ">>=")                  \
-  OP(CPP_LSHIFT_EQ,    "<<=")                  \
-  OP(CPP_MIN_EQ,       "<?=")  /* extension */ \
-  OP(CPP_MAX_EQ,       ">?=")                  \
-  /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */  \
-  OP(CPP_HASH,         "#")    /* digraphs */  \
-  OP(CPP_PASTE,                "##")                   \
-  OP(CPP_OPEN_SQUARE,  "[")                    \
-  OP(CPP_CLOSE_SQUARE, "]")                    \
-  OP(CPP_OPEN_BRACE,   "{")                    \
-  OP(CPP_CLOSE_BRACE,  "}")                    \
-  /* The remainder of the punctuation.  Order is not significant.  */  \
-  OP(CPP_SEMICOLON,    ";")    /* structure */ \
-  OP(CPP_ELLIPSIS,     "...")                  \
-  OP(CPP_PLUS_PLUS,    "++")   /* increment */ \
-  OP(CPP_MINUS_MINUS,  "--")                   \
-  OP(CPP_DEREF,                "->")   /* accessors */ \
-  OP(CPP_DOT,          ".")                    \
-  OP(CPP_SCOPE,                "::")                   \
-  OP(CPP_DEREF_STAR,   "->*")                  \
-  OP(CPP_DOT_STAR,     ".*")                   \
-  OP(CPP_ATSIGN,       "@")  /* used in Objective-C */ \
-\
-  TK(CPP_NAME,         SPELL_IDENT)    /* word */                      \
-  TK(CPP_AT_NAME,       SPELL_IDENT)    /* @word - Objective-C */       \
-  TK(CPP_NUMBER,       SPELL_LITERAL)  /* 34_be+ta  */                 \
-\
-  TK(CPP_CHAR,         SPELL_LITERAL)  /* 'char' */                    \
-  TK(CPP_WCHAR,                SPELL_LITERAL)  /* L'char' */                   \
-  TK(CPP_OTHER,                SPELL_LITERAL)  /* stray punctuation */         \
-\
-  TK(CPP_STRING,       SPELL_LITERAL)  /* "string" */                  \
-  TK(CPP_WSTRING,      SPELL_LITERAL)  /* L"string" */                 \
-  TK(CPP_OBJC_STRING,   SPELL_LITERAL)  /* @"string" - Objective-C */  \
-  TK(CPP_HEADER_NAME,  SPELL_LITERAL)  /* <stdio.h> in #include */     \
-\
-  TK(CPP_COMMENT,      SPELL_LITERAL)  /* Only if output comments.  */ \
-                                        /* SPELL_LITERAL happens to DTRT.  */ \
-  TK(CPP_MACRO_ARG,    SPELL_NONE)     /* Macro argument.  */          \
-  TK(CPP_PADDING,      SPELL_NONE)     /* Whitespace for cpp0.  */
-
-#define OP(e, s) e,
-#define TK(e, s) e,
+#define TTYPE_TABLE                                                    \
+  OP(EQ,               "=")                                            \
+  OP(NOT,              "!")                                            \
+  OP(GREATER,          ">")    /* compare */                           \
+  OP(LESS,             "<")                                            \
+  OP(PLUS,             "+")    /* math */                              \
+  OP(MINUS,            "-")                                            \
+  OP(MULT,             "*")                                            \
+  OP(DIV,              "/")                                            \
+  OP(MOD,              "%")                                            \
+  OP(AND,              "&")    /* bit ops */                           \
+  OP(OR,               "|")                                            \
+  OP(XOR,              "^")                                            \
+  OP(RSHIFT,           ">>")                                           \
+  OP(LSHIFT,           "<<")                                           \
+  OP(MIN,              "<?")   /* extension */                         \
+  OP(MAX,              ">?")                                           \
+                                                                       \
+  OP(COMPL,            "~")                                            \
+  OP(AND_AND,          "&&")   /* logical */                           \
+  OP(OR_OR,            "||")                                           \
+  OP(QUERY,            "?")                                            \
+  OP(COLON,            ":")                                            \
+  OP(COMMA,            ",")    /* grouping */                          \
+  OP(OPEN_PAREN,       "(")                                            \
+  OP(CLOSE_PAREN,      ")")                                            \
+  TK(EOF,              NONE)                                           \
+  OP(EQ_EQ,            "==")   /* compare */                           \
+  OP(NOT_EQ,           "!=")                                           \
+  OP(GREATER_EQ,       ">=")                                           \
+  OP(LESS_EQ,          "<=")                                           \
+                                                                       \
+  /* These two are unary + / - in preprocessor expressions.  */                \
+  OP(PLUS_EQ,          "+=")   /* math */                              \
+  OP(MINUS_EQ,         "-=")                                           \
+                                                                       \
+  OP(MULT_EQ,          "*=")                                           \
+  OP(DIV_EQ,           "/=")                                           \
+  OP(MOD_EQ,           "%=")                                           \
+  OP(AND_EQ,           "&=")   /* bit ops */                           \
+  OP(OR_EQ,            "|=")                                           \
+  OP(XOR_EQ,           "^=")                                           \
+  OP(RSHIFT_EQ,                ">>=")                                          \
+  OP(LSHIFT_EQ,                "<<=")                                          \
+  OP(MIN_EQ,           "<?=")  /* extension */                         \
+  OP(MAX_EQ,           ">?=")                                          \
+  /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */          \
+  OP(HASH,             "#")    /* digraphs */                          \
+  OP(PASTE,            "##")                                           \
+  OP(OPEN_SQUARE,      "[")                                            \
+  OP(CLOSE_SQUARE,     "]")                                            \
+  OP(OPEN_BRACE,       "{")                                            \
+  OP(CLOSE_BRACE,      "}")                                            \
+  /* The remainder of the punctuation. Order is not significant.  */   \
+  OP(SEMICOLON,                ";")    /* structure */                         \
+  OP(ELLIPSIS,         "...")                                          \
+  OP(PLUS_PLUS,                "++")   /* increment */                         \
+  OP(MINUS_MINUS,      "--")                                           \
+  OP(DEREF,            "->")   /* accessors */                         \
+  OP(DOT,              ".")                                            \
+  OP(SCOPE,            "::")                                           \
+  OP(DEREF_STAR,       "->*")                                          \
+  OP(DOT_STAR,         ".*")                                           \
+  OP(ATSIGN,           "@")  /* used in Objective-C */                 \
+                                                                       \
+  TK(NAME,             IDENT)   /* word */                             \
+  TK(AT_NAME,          IDENT)   /* @word - Objective-C */              \
+  TK(NUMBER,           LITERAL) /* 34_be+ta  */                        \
+                                                                       \
+  TK(CHAR,             LITERAL) /* 'char' */                           \
+  TK(WCHAR,            LITERAL) /* L'char' */                          \
+  TK(OTHER,            LITERAL) /* stray punctuation */                \
+                                                                       \
+  TK(STRING,           LITERAL) /* "string" */                         \
+  TK(WSTRING,          LITERAL) /* L"string" */                        \
+  TK(OBJC_STRING,      LITERAL) /* @"string" - Objective-C */          \
+  TK(HEADER_NAME,      LITERAL) /* <stdio.h> in #include */            \
+                                                                       \
+  TK(COMMENT,          LITERAL) /* Only if output comments.  */        \
+                                /* SPELL_LITERAL happens to DTRT.  */  \
+  TK(MACRO_ARG,                NONE)    /* Macro argument.  */                 \
+  TK(PRAGMA,           NONE)    /* Only if deferring pragmas */        \
+  TK(PADDING,          NONE)    /* Whitespace for -E.  */
+
+#define OP(e, s) CPP_ ## e,
+#define TK(e, s) CPP_ ## e,
 enum cpp_ttype
 {
   TTYPE_TABLE
-  N_TTYPES
+  N_TTYPES,
+
+  /* Positions in the table.  */
+  CPP_LAST_EQ        = CPP_MAX,
+  CPP_FIRST_DIGRAPH  = CPP_HASH,
+  CPP_LAST_PUNCTUATOR= CPP_DOT_STAR,
+  CPP_LAST_CPP_OP    = CPP_LESS_EQ
 };
 #undef OP
 #undef TK
 
-/* C language kind, used when calling cpp_reader_init.  */
+/* C language kind, used when calling cpp_create_reader.  */
 enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99,
             CLK_GNUCXX, CLK_CXX98, CLK_ASM};
 
@@ -231,6 +233,9 @@ extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok);
 typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
 typedef CPPCHAR_SIGNED_T cppchar_signed_t;
 
+/* Style of header dependencies to generate.  */
+enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
+
 /* This structure is nested inside struct cpp_reader, and
    carries all the options visible to the command line.  */
 struct cpp_options
@@ -378,7 +383,7 @@ struct cpp_options
   struct
   {
     /* Style of header dependencies to generate.  */
-    enum {DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM } style;
+    enum cpp_deps_style style;
 
     /* Assume missing files are generated files.  */
     bool missing_files;
@@ -406,6 +411,10 @@ struct cpp_options
 
   /* Nonzero means __STDC__ should have the value 0 in system headers.  */
   unsigned char stdc_0_in_system_headers;
+
+  /* True means return pragmas as tokens rather than processing
+     them directly. */
+  bool defer_pragmas;
 };
 
 /* Callback for header lookup for HEADER, which is the name of a
@@ -628,9 +637,10 @@ extern unsigned int cpp_errors (cpp_reader *);
 extern unsigned int cpp_token_len (const cpp_token *);
 extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
 extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
-                                      unsigned char *);
+                                      unsigned char *, bool);
 extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
-                                void (*) (cpp_reader *));
+                                void (*) (cpp_reader *), bool);
+extern void cpp_handle_deferred_pragma (cpp_reader *, const cpp_string *);
 extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
                            const cpp_token *);
 extern const cpp_token *cpp_get_token (cpp_reader *);
@@ -649,6 +659,9 @@ extern bool cpp_interpret_string_notranslate (cpp_reader *,
                                              const cpp_string *, size_t,
                                              cpp_string *, bool);
 
+/* Convert a host character constant to the execution character set.  */
+extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
+
 /* Used to register macros and assertions, perhaps from the command line.
    The text is the same as the command line argument.  */
 extern void cpp_define (cpp_reader *, const char *);
@@ -733,12 +746,6 @@ cpp_num cpp_num_sign_extend (cpp_num, size_t);
 #define CPP_DL_WARNING_P(l)    (CPP_DL_EXTRACT (l) >= CPP_DL_WARNING \
                                 && CPP_DL_EXTRACT (l) <= CPP_DL_PEDWARN)
 
-/* N.B. The error-message-printer prototypes have not been nicely
-   formatted because exgettext needs to see 'msgid' on the same line
-   as the name of the function in order to work properly.  Only the
-   string argument gets a name in an effort to keep the lines from
-   getting ridiculously oversized.  */
-
 /* Output a diagnostic of some kind.  */
 extern void cpp_error (cpp_reader *, int, const char *msgid, ...)
   ATTRIBUTE_PRINTF_3;