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]
Other format: [Raw text]

cpplib: bool correctness


This patch does bool correctly in cpplib, as discussed yesterday.
There were a couple of bugs, the rest of the patch is for
clarification purposes.

Steve, I'd appreciate it if you let me know if this fixes your
CPP problems.

I mentioned yesterday there was a -Wtraditional bug too; I was
hallucinating.  This has bootstrapped without regressions, so
I've committed it.

Neil.

	* cppexp.c (cpp_interpret_integer, append_digit, parse_defined,
	eval_token): Clarify and correct use of "bool" variables.
	* cpplib.h (struct cpp_options): Similarly.
	* cppmacro.c (parse_params, _cpp_save_parameter): Ditto.
	* cpptrad.c (recursive_macro): Similarly.

Index: cppexp.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppexp.c,v
retrieving revision 1.125
diff -u -p -r1.125 cppexp.c
--- cppexp.c	9 Jul 2002 22:21:37 -0000	1.125
+++ cppexp.c	17 Jul 2002 06:11:35 -0000
@@ -318,8 +318,8 @@ cpp_interpret_integer (pfile, token, typ
 
   result.low = 0;
   result.high = 0;
-  result.unsignedp = type & CPP_N_UNSIGNED;
-  result.overflow = 0;
+  result.unsignedp = !!(type & CPP_N_UNSIGNED);
+  result.overflow = false;
 
   p = token->val.str.text;
   end = p + token->val.str.len;
@@ -387,7 +387,7 @@ cpp_interpret_integer (pfile, token, typ
 	  if (base == 10)
 	    cpp_error (pfile, DL_WARNING,
 		       "integer constant is so large that it is unsigned");
-	  result.unsignedp = 1;
+	  result.unsignedp = true;
 	}
     }
 
@@ -409,7 +409,7 @@ append_digit (num, digit, base, precisio
 
   /* Multiply by 8 or 16.  Catching this overflow here means we don't
      need to worry about add_high overflowing.  */
-  overflow = num.high >> (PART_PRECISION - shift);
+  overflow = !!(num.high >> (PART_PRECISION - shift));
   result.high = num.high << shift;
   result.low = num.low << shift;
   result.high |= num.low >> (PART_PRECISION - shift);
@@ -507,9 +507,9 @@ parse_defined (pfile)
 
   pfile->state.prevent_expansion--;
 
-  result.unsignedp = 0;
+  result.unsignedp = false;
   result.high = 0;
-  result.overflow = 0;
+  result.overflow = false;
   result.low = node && node->type == NT_MACRO;
   return result;
 }
@@ -604,8 +604,8 @@ eval_token (pfile, token)
       result.low = temp;
     }
 
-  result.unsignedp = unsignedp;
-  result.overflow = 0;
+  result.unsignedp = !!unsignedp;
+  result.overflow = false;
   return result;
 }
 
Index: cpplib.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpplib.h,v
retrieving revision 1.224
diff -u -p -r1.224 cpplib.h
--- cpplib.h	11 Jun 2002 05:36:16 -0000	1.224
+++ cpplib.h	17 Jul 2002 06:11:38 -0000
@@ -402,8 +402,8 @@ struct cpp_options
      ints and target wide characters, respectively.  */
   size_t precision, char_precision, int_precision, wchar_precision;
 
-  /* Nonzero means chars (wide chars) are unsigned.  */
-  unsigned char unsigned_char, unsigned_wchar;
+  /* True means chars (wide chars) are unsigned.  */
+  bool unsigned_char, unsigned_wchar;
 
   /* Nonzero means __STDC__ should have the value 0 in system headers.  */
   unsigned char stdc_0_in_system_headers;
Index: cppmacro.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cppmacro.c,v
retrieving revision 1.116
diff -u -p -r1.116 cppmacro.c
--- cppmacro.c	1 Jul 2002 12:47:52 -0000	1.116
+++ cppmacro.c	17 Jul 2002 06:11:38 -0000
@@ -69,7 +69,7 @@ static cpp_token *alloc_expansion_token 
 static cpp_token *lex_expansion_token PARAMS ((cpp_reader *, cpp_macro *));
 static bool warn_of_redefinition PARAMS ((cpp_reader *, const cpp_hashnode *,
 					  const cpp_macro *));
-static int parse_params PARAMS ((cpp_reader *, cpp_macro *));
+static bool parse_params PARAMS ((cpp_reader *, cpp_macro *));
 static void check_trad_stringification PARAMS ((cpp_reader *,
 						const cpp_macro *,
 						const cpp_string *));
@@ -1245,7 +1245,7 @@ _cpp_save_parameter (pfile, macro, node)
     {
       cpp_error (pfile, DL_ERROR, "duplicate macro parameter \"%s\"",
 		 NODE_NAME (node));
-      return 1;
+      return true;
     }
 
   if (BUFF_ROOM (pfile->a_buff)
@@ -1254,11 +1254,12 @@ _cpp_save_parameter (pfile, macro, node)
 
   ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
   node->arg_index = macro->paramc;
-  return 0;
+  return false;
 }
 
-/* Check the syntax of the parameters in a MACRO definition.  */
-static int
+/* Check the syntax of the parameters in a MACRO definition.  Returns
+   false if an error occurs.  */
+static bool
 parse_params (pfile, macro)
      cpp_reader *pfile;
      cpp_macro *macro;
@@ -1281,31 +1282,31 @@ parse_params (pfile, macro)
 	  cpp_error (pfile, DL_ERROR,
 		     "\"%s\" may not appear in macro parameter list",
 		     cpp_token_as_text (pfile, token));
-	  return 0;
+	  return false;
 
 	case CPP_NAME:
 	  if (prev_ident)
 	    {
 	      cpp_error (pfile, DL_ERROR,
 			 "macro parameters must be comma-separated");
-	      return 0;
+	      return false;
 	    }
 	  prev_ident = 1;
 
 	  if (_cpp_save_parameter (pfile, macro, token->val.node))
-	    return 0;
+	    return false;
 	  continue;
 
 	case CPP_CLOSE_PAREN:
 	  if (prev_ident || macro->paramc == 0)
-	    return 1;
+	    return true;
 
 	  /* Fall through to pick up the error.  */
 	case CPP_COMMA:
 	  if (!prev_ident)
 	    {
 	      cpp_error (pfile, DL_ERROR, "parameter name missing");
-	      return 0;
+	      return false;
 	    }
 	  prev_ident = 0;
 	  continue;
@@ -1328,12 +1329,12 @@ parse_params (pfile, macro)
 	  /* We're at the end, and just expect a closing parenthesis.  */
 	  token = _cpp_lex_token (pfile);
 	  if (token->type == CPP_CLOSE_PAREN)
-	    return 1;
+	    return true;
 	  /* Fall through.  */
 
 	case CPP_EOF:
 	  cpp_error (pfile, DL_ERROR, "missing ')' in macro parameter list");
-	  return 0;
+	  return false;
 	}
     }
 }
Index: cpptrad.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cpptrad.c,v
retrieving revision 1.25
diff -u -p -r1.25 cpptrad.c
--- cpptrad.c	9 Jul 2002 22:21:36 -0000	1.25
+++ cpptrad.c	17 Jul 2002 06:11:39 -0000
@@ -802,7 +802,7 @@ recursive_macro (pfile, node)
      cpp_reader *pfile;
      cpp_hashnode *node;
 {
-  bool recursing = node->flags & NODE_DISABLED;
+  bool recursing = !!(node->flags & NODE_DISABLED);
 
   /* Object-like macros that are already expanding are necessarily
      recursive.


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