OSDN Git Service

* config/alpha/vms.h (VMS_DEBUGGING_INFO): New macro.
[pf3gnuchains/gcc-fork.git] / gcc / cpplib.h
index 29f20d7..e9002fb 100644 (file)
@@ -41,13 +41,10 @@ typedef struct cpp_token cpp_token;
 typedef struct cpp_string cpp_string;
 typedef struct cpp_hashnode cpp_hashnode;
 typedef struct cpp_macro cpp_macro;
-typedef struct cpp_lexer_pos cpp_lexer_pos;
-typedef struct cpp_lookahead cpp_lookahead;
 typedef struct cpp_callbacks cpp_callbacks;
 
 struct answer;
 struct file_name_map_list;
-struct ht;
 
 /* The first two groups, apart from '=', can appear in preprocessor
    expressions.  This allows a lookup table to be implemented in
@@ -125,7 +122,7 @@ struct ht;
   OP(CPP_ATSIGN,       "@")  /* used in Objective C */ \
 \
   TK(CPP_NAME,         SPELL_IDENT)    /* word */                      \
-  TK(CPP_NUMBER,       SPELL_STRING)   /* 34_be+ta  */                 \
+  TK(CPP_NUMBER,       SPELL_NUMBER)   /* 34_be+ta  */                 \
 \
   TK(CPP_CHAR,         SPELL_STRING)   /* 'char' */                    \
   TK(CPP_WCHAR,                SPELL_STRING)   /* L'char' */                   \
@@ -135,9 +132,11 @@ struct ht;
   TK(CPP_WSTRING,      SPELL_STRING)   /* L"string" */                 \
   TK(CPP_HEADER_NAME,  SPELL_STRING)   /* <stdio.h> in #include */     \
 \
-  TK(CPP_COMMENT,      SPELL_STRING)   /* Only if output comments.  */ \
+  TK(CPP_COMMENT,      SPELL_NUMBER)   /* Only if output comments.  */ \
+                                        /* SPELL_NUMBER happens to DTRT.  */ \
   TK(CPP_MACRO_ARG,    SPELL_NONE)     /* Macro argument.  */          \
-  OP(CPP_EOF,          "EOL")          /* End of line or file.  */
+  TK(CPP_PADDING,      SPELL_NONE)     /* Whitespace for cpp0.  */     \
+  TK(CPP_EOF,          SPELL_NONE)     /* End of line or file.  */
 
 #define OP(e, s) e,
 #define TK(e, s) e,
@@ -167,10 +166,10 @@ struct cpp_string
 #define PASTE_LEFT     (1 << 3) /* If on LHS of a ## operator.  */
 #define NAMED_OP       (1 << 4) /* C++ named operators.  */
 #define NO_EXPAND      (1 << 5) /* Do not macro-expand this token.  */
-#define AVOID_LPASTE   (1 << 6) /* Check left for accidental pastes.  */
+#define BOL            (1 << 6) /* Token at beginning of line.  */
 
 /* A preprocessing token.  This has been carefully packed and should
-   occupy 12 bytes on 32-bit hosts and 16 bytes on 64-bit hosts.  */
+   occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts.  */
 struct cpp_token
 {
   unsigned int line;           /* Logical line of first char of token.  */
@@ -181,36 +180,13 @@ struct cpp_token
   union
   {
     cpp_hashnode *node;                /* An identifier.  */
+    const cpp_token *source;   /* Inherit padding from this token.  */
     struct cpp_string str;     /* A string, or number.  */
     unsigned int arg_no;       /* Argument no. for a CPP_MACRO_ARG.  */
     unsigned char c;           /* Character represented by CPP_OTHER.  */
   } val;
 };
 
-/* The position of a token in the current file.  */
-struct cpp_lexer_pos
-{
-  unsigned int line;
-  unsigned int output_line;
-  unsigned short col;
-};
-
-typedef struct cpp_token_with_pos cpp_token_with_pos;
-struct cpp_token_with_pos
-{
-  cpp_token token;
-  cpp_lexer_pos pos;
-};
-
-/* Token lookahead.  */
-struct cpp_lookahead
-{
-  struct cpp_lookahead *next;
-  cpp_token_with_pos *tokens;
-  cpp_lexer_pos pos;
-  unsigned int cur, count, cap;
-};
-
 /* A standalone character.  We may want to make it unsigned for the
    same reason we use unsigned char - to avoid signedness issues.  */
 typedef int cppchar_t;
@@ -235,7 +211,7 @@ struct cpp_options
   /* Characters between tab stops.  */
   unsigned int tabstop;
 
-  /* Pending options - -D, -U, -A, -I, -ixxx. */
+  /* Pending options - -D, -U, -A, -I, -ixxx.  */
   struct cpp_pending *pending;
 
   /* File name which deps are being written to.  This is 0 if deps are
@@ -297,7 +273,7 @@ struct cpp_options
      generated files and not errors.  */
   unsigned char print_deps_missing_files;
 
-  /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
+  /* If true, fopen (deps_file, "a") else fopen (deps_file, "w").  */
   unsigned char print_deps_append;
 
   /* Nonzero means print names of header files (-H).  */
@@ -347,7 +323,7 @@ struct cpp_options
      the source-file directory.  */
   unsigned char ignore_srcdir;
 
-  /* Zero means dollar signs are punctuation. */
+  /* Zero means dollar signs are punctuation.  */
   unsigned char dollars_in_ident;
 
   /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
@@ -378,7 +354,7 @@ struct cpp_options
   /* Print column number in error messages.  */
   unsigned char show_column;
 
-  /* Treat C++ alternate operator names special.  */
+  /* Nonzero means handle C++ alternate operator names.  */
   unsigned char operator_names;
 
   /* True if --help, --version or --target-help appeared in the
@@ -387,39 +363,27 @@ struct cpp_options
   unsigned char help_only;
 };
 
-typedef struct cpp_file_change cpp_file_change;
-struct cpp_file_change
-{
-  struct line_map *map;                /* Line map to use until next callback.  */
-  unsigned int line;           /* Logical line number of next line.  */
-  enum lc_reason reason;       /* Reason for change.  */
-  unsigned char sysp;          /* Nonzero if system header.  */
-  unsigned char externc;       /* Nonzero if wrapper needed.  */
-};
-
 /* Call backs.  */
 struct cpp_callbacks
 {
-    void (*file_change) PARAMS ((cpp_reader *, const cpp_file_change *));
-    void (*include) PARAMS ((cpp_reader *, unsigned int,
-                            const unsigned char *, const cpp_token *));
-    void (*define) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
-    void (*undef) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
-    void (*ident) PARAMS ((cpp_reader *, unsigned int, const cpp_string *));
-    void (*def_pragma) PARAMS ((cpp_reader *, unsigned int));
+  /* Called when a new line of preprocessed output is started.  */
+  void (*line_change) PARAMS ((cpp_reader *, const cpp_token *, int));
+  void (*file_change) PARAMS ((cpp_reader *, const struct line_map *));
+  void (*include) PARAMS ((cpp_reader *, unsigned int,
+                          const unsigned char *, const cpp_token *));
+  void (*define) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
+  void (*undef) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
+  void (*ident) PARAMS ((cpp_reader *, unsigned int, const cpp_string *));
+  void (*def_pragma) PARAMS ((cpp_reader *, unsigned int));
 };
 
 #define CPP_FATAL_LIMIT 1000
-/* True if we have seen a "fatal" error. */
+/* True if we have seen a "fatal" error.  */
 #define CPP_FATAL_ERRORS(PFILE) (cpp_errors (PFILE) >= CPP_FATAL_LIMIT)
 
 /* Name under which this program was invoked.  */
 extern const char *progname;
 
-/* Where does this buffer come from?  A source file, a builtin macro,
-   a command-line option, or a _Pragma operator.  */
-enum cpp_buffer_type {BUF_FILE, BUF_BUILTIN, BUF_CL_OPTION, BUF_PRAGMA};
-
 /* The structure of a node in the hash table.  The hash table has
    entries for all identifiers: either macros defined by #define
    commands (type NT_MACRO), assertions created with #assert
@@ -437,6 +401,7 @@ enum cpp_buffer_type {BUF_FILE, BUF_BUILTIN, BUF_CL_OPTION, BUF_PRAGMA};
 #define NODE_BUILTIN   (1 << 2)        /* Builtin macro.  */
 #define NODE_DIAGNOSTIC (1 << 3)       /* Possible diagnostic when lexed.  */
 #define NODE_WARN      (1 << 4)        /* Warn if redefined or undefined.  */
+#define NODE_DISABLED  (1 << 5)        /* A disabled macro.  */
 
 /* Different flavors of hash node.  */
 enum node_type
@@ -446,7 +411,8 @@ enum node_type
   NT_ASSERTION    /* Predicate for #assert.  */
 };
 
-/* Different flavors of builtin macro.  */
+/* Different flavors of builtin macro.  _Pragma is an operator, but we
+   handle it with the builtin code for efficiency reasons.  */
 enum builtin_type
 {
   BT_SPECLINE = 0,             /* `__LINE__' */
@@ -455,7 +421,8 @@ enum builtin_type
   BT_BASE_FILE,                        /* `__BASE_FILE__' */
   BT_INCLUDE_LEVEL,            /* `__INCLUDE_LEVEL__' */
   BT_TIME,                     /* `__TIME__' */
-  BT_STDC                      /* `__STDC__' */
+  BT_STDC,                     /* `__STDC__' */
+  BT_PRAGMA                    /* `_Pragma' operator */
 };
 
 #define CPP_HASHNODE(HNODE)    ((cpp_hashnode *) (HNODE))
@@ -484,16 +451,8 @@ struct cpp_hashnode
   } value;
 };
 
-/* Call this first to get a handle to pass to other functions.  If you
-   want cpplib to manage its own hashtable, pass in a NULL pointer.
-   Or you can pass in an initialised hash table that cpplib will use;
-   this technique is used by the C front ends.  */
-extern cpp_reader *cpp_create_reader PARAMS ((struct ht *,
-                                             enum c_lang));
-
-/* Call this to release the handle.  Any use of the handle after this
-   function returns is invalid.  Returns cpp_errors (pfile).  */
-extern int cpp_destroy PARAMS ((cpp_reader *));
+/* Call this first to get a handle to pass to other functions.  */
+extern cpp_reader *cpp_create_reader PARAMS ((enum c_lang));
 
 /* Call these to get pointers to the options and callback structures
    for a given reader.  These pointers are good until you call
@@ -501,7 +460,7 @@ extern int cpp_destroy PARAMS ((cpp_reader *));
    through the pointer returned from cpp_get_callbacks, or set them
    with cpp_set_callbacks.  */
 extern cpp_options *cpp_get_options PARAMS ((cpp_reader *));
-extern struct line_maps *cpp_get_line_maps PARAMS ((cpp_reader *));
+extern const struct line_maps *cpp_get_line_maps PARAMS ((cpp_reader *));
 extern cpp_callbacks *cpp_get_callbacks PARAMS ((cpp_reader *));
 extern void cpp_set_callbacks PARAMS ((cpp_reader *, cpp_callbacks *));
 
@@ -509,13 +468,39 @@ extern void cpp_set_callbacks PARAMS ((cpp_reader *, cpp_callbacks *));
    return value is the number of arguments used.  If
    cpp_handle_options returns without using all arguments, it couldn't
    understand the next switch.  When there are no switches left, you
-   must call cpp_post_options before calling cpp_start_read.  Only
+   must call cpp_post_options before calling cpp_read_main_file.  Only
    after cpp_post_options are the contents of the cpp_options
-   structure reliable.  */
+   structure reliable.  Options processing is not completed until you
+   call cpp_finish_options.  */
 extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **));
 extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **));
 extern void cpp_post_options PARAMS ((cpp_reader *));
 
+/* This function reads the file, but does not start preprocessing.  It
+   returns the name of the original file; this is the same as the
+   input file, except for preprocessed input.  This will generate at
+   least one file change callback, and possibly a line change callback
+   too.  If there was an error opening the file, it returns NULL.
+
+   If you want cpplib to manage its own hashtable, pass in a NULL
+   pointer.  Otherise you should pass in an initialised hash table
+   that cpplib will share; this technique is used by the C front
+   ends.  */
+extern const char *cpp_read_main_file PARAMS ((cpp_reader *, const char *,
+                                              struct ht *));
+
+/* Deferred handling of command line options that can generate debug
+   callbacks, such as -D and -imacros.  Call this after
+   cpp_read_main_file.  The front ends need this separation so they
+   can initialize debug output with the original file name, returned
+   from cpp_read_main_file, before they get debug callbacks.  */
+extern void cpp_finish_options PARAMS ((cpp_reader *));
+
+/* Call this to release the handle at the end of preprocessing.  Any
+   use of the handle after this function returns is invalid.  Returns
+   cpp_errors (pfile).  */
+extern int cpp_destroy PARAMS ((cpp_reader *));
+
 /* Error count.  */
 extern unsigned int cpp_errors PARAMS ((cpp_reader *));
 
@@ -527,18 +512,14 @@ extern unsigned char *cpp_spell_token PARAMS ((cpp_reader *, const cpp_token *,
 extern void cpp_register_pragma PARAMS ((cpp_reader *,
                                         const char *, const char *,
                                         void (*) PARAMS ((cpp_reader *))));
-extern void cpp_register_pragma_space PARAMS ((cpp_reader *, const char *));
 
-extern int cpp_start_read PARAMS ((cpp_reader *, const char *));
 extern void cpp_finish PARAMS ((cpp_reader *));
 extern int cpp_avoid_paste PARAMS ((cpp_reader *, const cpp_token *,
                                    const cpp_token *));
-extern enum cpp_ttype cpp_can_paste PARAMS ((cpp_reader *, const cpp_token *,
-                                            const cpp_token *, int *));
-extern void cpp_get_token PARAMS ((cpp_reader *, cpp_token *));
-extern const cpp_lexer_pos *cpp_get_line PARAMS ((cpp_reader *));
+extern const cpp_token *cpp_get_token PARAMS ((cpp_reader *));
 extern const unsigned char *cpp_macro_definition PARAMS ((cpp_reader *,
                                                  const cpp_hashnode *));
+extern void _cpp_backup_tokens PARAMS ((cpp_reader *, unsigned int));
 
 /* Evaluate a CPP_CHAR or CPP_WCHAR token.  */
 extern HOST_WIDE_INT
@@ -552,8 +533,7 @@ extern void cpp_unassert PARAMS ((cpp_reader *, const char *));
 
 extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *,
                                            const unsigned char *, size_t,
-                                           enum cpp_buffer_type,
-                                           const char *, int));
+                                           int, int));
 extern int cpp_defined PARAMS ((cpp_reader *, const unsigned char *, int));
 
 /* N.B. The error-message-printer prototypes have not been nicely
@@ -580,8 +560,6 @@ extern void cpp_warning_with_line PARAMS ((cpp_reader *, int, int, const char *m
   ATTRIBUTE_PRINTF_4;
 extern void cpp_pedwarn_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...))
   ATTRIBUTE_PRINTF_4;
-extern void cpp_pedwarn_with_file_and_line PARAMS ((cpp_reader *, const char *, int, int, const char *msgid, ...))
-  ATTRIBUTE_PRINTF_5;
 extern void cpp_error_from_errno PARAMS ((cpp_reader *, const char *));
 extern void cpp_notice_from_errno PARAMS ((cpp_reader *, const char *));
 
@@ -610,8 +588,6 @@ extern void cpp_forall_identifiers  PARAMS ((cpp_reader *,
 
 /* In cppmacro.c */
 extern void cpp_scan_nooutput          PARAMS ((cpp_reader *));
-extern void cpp_start_lookahead                PARAMS ((cpp_reader *));
-extern void cpp_stop_lookahead         PARAMS ((cpp_reader *, int));
 extern int  cpp_sys_macro_p            PARAMS ((cpp_reader *));
 
 /* In cppfiles.c */