This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

cpplib: Cleanup.


This is just a cleanup.  I'll wait until the V3 stuff is settled
before committing.

Bootstrapped and made check i586 Linux.

Neil.

	* cpplex.c (_cpp_lex_token): CPP_COMMENT and true CPP_EOF
	cases return without MI check.
	* cpplib.c (do_diagnostic): Take boolean of whether to
	print the directive name.
	(do_error, do_warning): Update.
	(do_pragma_dependency): Use it.
	* cpplib.h (VARARGS_FIRST): Delete.
	(struct cpp_token): Delete integer.
	* cppmacro.c (enter_macro_context): Move disabled check
	to _cpp_get_token.
	(_cpp_get_token): Simplify into a single loop.

Index: cppexp.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cppexp.c,v
retrieving revision 1.78
diff -u -p -r1.78 cppexp.c
--- cppexp.c	2000/11/12 11:46:20	1.78
+++ cppexp.c	2000/11/13 00:08:00
@@ -385,6 +385,7 @@ lex (pfile, skip_evaluation, token)
     case CPP_INT:
     case CPP_NUMBER:
       return parse_number (pfile, token);
+
     case CPP_CHAR:
     case CPP_WCHAR:
       return parse_charconst (pfile, token);
Index: cpplex.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cpplex.c,v
retrieving revision 1.117
diff -u -p -r1.117 cpplex.c
--- cpplex.c	2000/11/12 11:46:20	1.117
+++ cpplex.c	2000/11/13 00:08:02
@@ -876,7 +876,8 @@ _cpp_lex_token (pfile, result)
       pfile->state.next_bol = 1;
       pfile->skipping = 0;	/* In case missing #endif.  */
       result->type = CPP_EOF;
-      break;
+      /* Don't do MI optimisation.  */
+      return;
 
     case ' ': case '\t': case '\f': case '\v': case '\0':
       skip_whitespace (pfile, c);
@@ -1032,7 +1033,8 @@ _cpp_lex_token (pfile, result)
 
       /* Save the comment as a token in its own right.  */
       save_comment (pfile, result, comment_start);
-      break;
+      /* Don't do MI optimisation.  */
+      return;
 
     case '<':
       if (pfile->state.angled_headers)
@@ -1272,10 +1274,8 @@ _cpp_lex_token (pfile, result)
       break;
     }
 
-  /* Non-comment tokens invalidate any controlling macros.  */
-  if (result->type != CPP_COMMENT
-      && result->type != CPP_EOF
-      && !pfile->state.in_directive)
+  /* If not in a directive, this token invalidates controlling macros.  */
+  if (!pfile->state.in_directive)
     pfile->mi_state = MI_FAILED;
 }
 
Index: cpplib.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cpplib.c,v
retrieving revision 1.217
diff -u -p -r1.217 cpplib.c
--- cpplib.c	2000/11/12 11:46:20	1.217
+++ cpplib.c	2000/11/13 00:08:08
@@ -91,7 +91,7 @@ static void push_conditional	PARAMS ((cp
 static int  read_line_number	PARAMS ((cpp_reader *, int *));
 static int  strtoul_for_line	PARAMS ((const U_CHAR *, unsigned int,
 					 unsigned long *));
-static void do_diagnostic	PARAMS ((cpp_reader *, enum error_type));
+static void do_diagnostic	PARAMS ((cpp_reader *, enum error_type, int));
 static cpp_hashnode *lex_macro_node	PARAMS ((cpp_reader *));
 static void do_pragma_once	PARAMS ((cpp_reader *));
 static void do_pragma_poison	PARAMS ((cpp_reader *));
@@ -792,13 +792,15 @@ do_line (pfile)
  */
 
 static void
-do_diagnostic (pfile, code)
+do_diagnostic (pfile, code, print_dir)
      cpp_reader *pfile;
      enum error_type code;
+     int print_dir;
 {
   if (_cpp_begin_message (pfile, code, NULL, 0))
     {
-      fprintf (stderr, "#%s ", pfile->directive->name);
+      if (print_dir)
+	fprintf (stderr, "#%s ", pfile->directive->name);
       pfile->state.prevent_expansion++;
       cpp_output_line (pfile, stderr);
       pfile->state.prevent_expansion--;
@@ -809,14 +811,14 @@ static void
 do_error (pfile)
      cpp_reader *pfile;
 {
-  do_diagnostic (pfile, ERROR);
+  do_diagnostic (pfile, ERROR, 1);
 }
 
 static void
 do_warning (pfile)
      cpp_reader *pfile;
 {
-  do_diagnostic (pfile, WARNING);
+  do_diagnostic (pfile, WARNING, 1);
 }
 
 /* Report program identification.  */
@@ -1085,8 +1087,8 @@ do_pragma_dependency (pfile)
       cpp_start_lookahead (pfile);
       cpp_get_token (pfile, &msg);
       cpp_stop_lookahead (pfile, msg.type == CPP_EOF);
-      if (msg.type != CPP_EOF && _cpp_begin_message (pfile, WARNING, NULL, 0))
-	cpp_output_line (pfile, stderr);
+      if (msg.type != CPP_EOF)
+	do_diagnostic (pfile, WARNING, 0);
     }
 }
 
Index: cpplib.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cpplib.h,v
retrieving revision 1.134
diff -u -p -r1.134 cpplib.h
--- cpplib.h	2000/11/12 11:46:21	1.134
+++ cpplib.h	2000/11/13 00:08:12
@@ -170,7 +170,6 @@ struct cpp_string
 #define PASTE_LEFT	(1 << 3) /* If on LHS of a ## operator.  */
 #define NAMED_OP	(1 << 4) /* C++ named operators, also "defined".  */
 #define NO_EXPAND	(1 << 5) /* Do not macro-expand this token.  */
-#define VARARGS_FIRST   STRINGIFY_ARG /* First token of varargs expansion.  */
 
 /* A preprocessing token.  This has been carefully packed and should
    occupy 12 bytes on 32-bit hosts and 16 bytes on 64-bit hosts.  */
@@ -181,7 +180,6 @@ struct cpp_token
 
   union
   {
-    HOST_WIDEST_INT integer;	/* An integer.  */
     struct cpp_hashnode *node;	/* An identifier.  */
     struct cpp_string str;	/* A string, or number.  */
     unsigned int arg_no;	/* Argument no. for a CPP_MACRO_ARG.  */
Index: cppmacro.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cppmacro.c,v
retrieving revision 1.23
diff -u -p -r1.23 cppmacro.c
--- cppmacro.c	2000/11/12 11:46:21	1.23
+++ cppmacro.c	2000/11/13 00:08:16
@@ -60,7 +60,7 @@ struct macro_arg
 
 static void lock_pools PARAMS ((cpp_reader *));
 static void unlock_pools PARAMS ((cpp_reader *));
-static int enter_macro_context PARAMS ((cpp_reader *, cpp_token *));
+static int enter_macro_context PARAMS ((cpp_reader *, cpp_hashnode *));
 static void builtin_macro PARAMS ((cpp_reader *, cpp_token *));
 static cpp_context *push_arg_context PARAMS ((cpp_reader *, macro_arg *));
 static enum cpp_ttype parse_arg PARAMS ((cpp_reader *, macro_arg *, int));
@@ -631,22 +631,14 @@ funlike_invocation_p (pfile, node, list)
    TOKEN is replaced with the first token of the expansion, and we
    return non-zero.  */
 static int
-enter_macro_context (pfile, token)
+enter_macro_context (pfile, node)
      cpp_reader *pfile;
-     cpp_token *token;
+     cpp_hashnode *node;
 {
   cpp_context *context;
-  cpp_macro *macro;
-  unsigned char flags;
+  cpp_macro *macro = node->value.macro;
   struct toklist list;
 
-  macro = token->val.node->value.macro;
-  if (macro->disabled)
-    {
-      token->flags |= NO_EXPAND;
-      return 0;
-    }
-
   /* Save the position of the outermost macro invocation.  */
   if (!pfile->context->prev)
     {
@@ -654,7 +646,7 @@ enter_macro_context (pfile, token)
       lock_pools (pfile);
     }
 
-  if (macro->fun_like && !funlike_invocation_p (pfile, token->val.node, &list))
+  if (macro->fun_like && !funlike_invocation_p (pfile, node, &list))
     {
       if (!pfile->context->prev)
 	unlock_pools (pfile);
@@ -667,22 +659,16 @@ enter_macro_context (pfile, token)
       list.limit = macro->expansion + macro->count;
     }
 
-  /* Temporary kludge.  */
-  if (list.first == list.limit)
-    return 2;
-
-  /* Now push its context.  */
-  context = next_context (pfile);
-  context->list = list;
-  context->macro = macro;
-
-  /* The first expansion token inherits the PREV_WHITE of TOKEN.  */
-  flags = token->flags & PREV_WHITE;
-  *token = *context->list.first++;
-  token->flags |= flags;
+  if (list.first != list.limit)
+    {
+      /* Push its context.  */
+      context = next_context (pfile);
+      context->list = list;
+      context->macro = macro;
 
-  /* Disable the macro within its expansion.  */
-  macro->disabled = 1;
+      /* Disable the macro within its expansion.  */
+      macro->disabled = 1;
+    }
 
   return 1;
 }
@@ -895,8 +881,9 @@ _cpp_get_token (pfile, token)
      cpp_reader *pfile;
      cpp_token *token;
 {
- next_token:
-  do
+  unsigned char flags = 0;
+
+  for (;;)
     {
       cpp_context *context = pfile->context;
 
@@ -906,24 +893,28 @@ _cpp_get_token (pfile, token)
       else if (!context->prev)
 	_cpp_lex_token (pfile, token);
       else if (context->list.first != context->list.limit)
-	*token = *context->list.first++;
+	{
+	  *token = *context->list.first++;
+	  token->flags |= flags;
+	  flags = 0;
+	}
       else
 	{
 	  if (context->macro)
 	    {
 	      _cpp_pop_context (pfile);
-	      goto next_token;
+	      continue;
 	    }
 	  /* End of argument pre-expansion.  */
 	  token->type = CPP_EOF;
 	  token->flags = 0;
 	  return;
 	}
-    }
-  while (pfile->skipping);
 
-  for (;;)
-    {
+      /* Loop until we're not skipping.  */
+      if (pfile->skipping)
+	continue;
+
       if (token->flags & PASTE_LEFT)
 	paste_all_tokens (pfile, token);
 
@@ -935,31 +926,32 @@ _cpp_get_token (pfile, token)
 	  && !pfile->state.prevent_expansion
 	  && !(token->flags & NO_EXPAND))
 	{
-	  int m;
+	  cpp_hashnode *node = token->val.node;
 
 	  /* Macros invalidate controlling macros.  */
 	  pfile->mi_state = MI_FAILED;
 
-	  if (token->val.node->flags & NODE_BUILTIN)
+	  if (node->flags & NODE_BUILTIN)
 	    {
 	      builtin_macro (pfile, token);
 	      break;
 	    }
+
+	  /* Merge PREV_WHITE of tokens.  */
+	  flags = token->flags & PREV_WHITE;
 
-	  m = enter_macro_context (pfile, token);
-	  if (m == 1)
+	  if (node->value.macro->disabled)
+	    token->flags |= NO_EXPAND;
+	  else if (enter_macro_context (pfile, node))
 	    continue;
-	  if (m == 2)
-	    goto next_token;
 	}
 
       if (token->val.node != pfile->spec_nodes.n__Pragma)
 	break;
 
-      /* Invalidate controlling macros.  */
+      /* Handle it, and get another token.  */
       pfile->mi_state = MI_FAILED;
       _cpp_do__Pragma (pfile);
-      goto next_token;
     }
 }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]