parse.y (make_plus_expression): New function.
authorSteven Bosscher <steven@gcc.gnu.org>
Wed, 30 Apr 2003 19:08:12 +0000 (19:08 +0000)
committerSteven Bosscher <steven@gcc.gnu.org>
Wed, 30 Apr 2003 19:08:12 +0000 (19:08 +0000)
* parse.y (make_plus_expression): New function.
(expression:): Use make_plus_expression for PLUS, MINUS,
ASSIGN and EQUALS.
* tree1.c (treelang_decode_option): Don't fall through to
options that start with a different character when an option
was not recognized.

From-SVN: r66303

gcc/treelang/ChangeLog
gcc/treelang/parse.y
gcc/treelang/tree1.c

index 1fc2a0be98a8ef6d6eea7d1f675ab5142540d6e5..58e473320e87d3691b37ded46ac3ffc74bf1f327 100644 (file)
@@ -1,3 +1,12 @@
+2003-04-30  Steven Bosscher  <steven@gcc.gnu.org>
+
+       * parse.y (make_plus_expression): New function.
+       (expression production): Use make_plus_expression for PLUS,
+       MINUS, ASSIGN and EQUALS.
+       * tree1.c (treelang_decode_option): Don't fall through to
+       options that start with a different character when an option
+       was not recognized.
+
 2003-04-30  Nathan Sidwell  <nathan@codesourcery.com>
 
        * Make-lang.in (parse.c): Reorder bison arguments for POSIXLY_CORRECT.
index 3361fcf426316c62e7518cb60d880ea8f9b39064..fc6256ba912e04ca3968d8f85a835ec7d5f0ba0e 100644 (file)
@@ -83,6 +83,9 @@ static void ensure_not_void (unsigned int type, struct prod_token_parm_item* nam
 static int check_type_match (int type_num, struct prod_token_parm_item *exp);
 static int get_common_type (struct prod_token_parm_item *type1, struct prod_token_parm_item *type2);
 static struct prod_token_parm_item *make_integer_constant (struct prod_token_parm_item* value);
+static struct prod_token_parm_item *make_plus_expression
+  (struct prod_token_parm_item* tok, struct prod_token_parm_item* op1,
+   struct prod_token_parm_item* op2, int type_code, int prod_code);
 static void set_storage (struct prod_token_parm_item *prod);
 
 /* File global variables.  */
@@ -569,118 +572,41 @@ INTEGER {
   $$ = $1;
 }
 |expression tl_PLUS expression {
-  struct prod_token_parm_item* tok;
-  struct prod_token_parm_item *prod;
-  struct prod_token_parm_item *op1;
-  struct prod_token_parm_item *op2;
-  tree type;
-  
-  op1 = $1;
-  op2 = $3;
-  tok = $2;
-  ensure_not_void (NUMERIC_TYPE (op1), op1->tp.pro.main_token);
-  ensure_not_void (NUMERIC_TYPE (op2), op2->tp.pro.main_token);
-  prod = make_production (PROD_PLUS_EXPRESSION, tok);
-  NUMERIC_TYPE (prod) = get_common_type (op1, op2);
-  if (!NUMERIC_TYPE (prod))
+  struct prod_token_parm_item *tok = $2;
+  struct prod_token_parm_item *op1 = $1;
+  struct prod_token_parm_item *op2 = $3;
+  int type_code = get_common_type (op1, op2);
+  if (!type_code)
     YYERROR;
-  else 
-    {
-      type = get_type_for_numeric_type (NUMERIC_TYPE (prod));
-      if (!type)
-        abort ();
-      OP1 (prod) = $1;
-      OP2 (prod) = $3;
-      
-      prod->tp.pro.code = tree_code_get_expression
-        (EXP_PLUS, type, op1->tp.pro.code, op2->tp.pro.code, NULL);
-    }
-  $$ = prod;
+  $$ = make_plus_expression
+     (tok, op1, op2, type_code, EXP_PLUS);
 }
 |expression tl_MINUS expression %prec tl_PLUS {
-  struct prod_token_parm_item* tok;
-  struct prod_token_parm_item *prod;
-  struct prod_token_parm_item *op1;
-  struct prod_token_parm_item *op2;
-  tree type;
-  
-  op1 = $1;
-  op2 = $3;
-  ensure_not_void (NUMERIC_TYPE (op1), op1->tp.pro.main_token);
-  ensure_not_void (NUMERIC_TYPE (op2), op2->tp.pro.main_token);
-  tok = $2;
-  prod = make_production (PROD_PLUS_EXPRESSION, tok);
-  NUMERIC_TYPE (prod) = get_common_type (op1, op2);
-  if (!NUMERIC_TYPE (prod))
+  struct prod_token_parm_item *tok = $2;
+  struct prod_token_parm_item *op1 = $1;
+  struct prod_token_parm_item *op2 = $3;
+  int type_code = get_common_type (op1, op2);
+  if (!type_code)
     YYERROR;
-  else 
-    {
-      type = get_type_for_numeric_type (NUMERIC_TYPE (prod));
-      if (!type)
-        abort ();
-      OP1 (prod) = $1;
-      OP2 (prod) = $3;
-      
-      prod->tp.pro.code = tree_code_get_expression (EXP_MINUS, 
-                                          type, op1->tp.pro.code, op2->tp.pro.code, NULL);
-    }
-  $$ = prod;
+  $$ = make_plus_expression
+     (tok, op1, op2, type_code, EXP_MINUS);
 }
 |expression EQUALS expression {
-  struct prod_token_parm_item* tok;
-  struct prod_token_parm_item *prod;
-  struct prod_token_parm_item *op1;
-  struct prod_token_parm_item *op2;
-  tree type;
-  
-  op1 = $1;
-  op2 = $3;
-  ensure_not_void (NUMERIC_TYPE (op1), op1->tp.pro.main_token);
-  ensure_not_void (NUMERIC_TYPE (op2), op2->tp.pro.main_token);
-  tok = $2;
-  prod = make_production (PROD_PLUS_EXPRESSION, tok);
-  NUMERIC_TYPE (prod) = SIGNED_INT;
-  if (!NUMERIC_TYPE (prod))
-    YYERROR;
-  else 
-    {
-      type = get_type_for_numeric_type (NUMERIC_TYPE (prod));
-      if (!type)
-        abort ();
-      OP1 (prod) = $1;
-      OP2 (prod) = $3;
-      
-      prod->tp.pro.code = tree_code_get_expression (EXP_EQUALS, 
-                                          type, op1->tp.pro.code, op2->tp.pro.code, NULL);
-    }
-  $$ = prod;
+  struct prod_token_parm_item *tok = $2;
+  struct prod_token_parm_item *op1 = $1;
+  struct prod_token_parm_item *op2 = $3;
+  $$ = make_plus_expression
+     (tok, op1, op2, SIGNED_INT, EXP_EQUALS);
 }
 |variable_ref ASSIGN expression {
-  struct prod_token_parm_item* tok;
-  struct prod_token_parm_item *prod;
-  struct prod_token_parm_item *op1;
-  struct prod_token_parm_item *op2;
-  tree type;
-  
-  op1 = $1;
-  op2 = $3;
-  tok = $2;
-  ensure_not_void (NUMERIC_TYPE (op2), op2->tp.pro.main_token);
-  prod = make_production (PROD_ASSIGN_EXPRESSION, tok);
-  NUMERIC_TYPE (prod) = NUMERIC_TYPE (op1);
-  if (!NUMERIC_TYPE (prod))
+  struct prod_token_parm_item *tok = $2;
+  struct prod_token_parm_item *op1 = $1;
+  struct prod_token_parm_item *op2 = $3;
+  int type_code = NUMERIC_TYPE (op1);
+  if (!type_code)
     YYERROR;
-  else 
-    {
-      type = get_type_for_numeric_type (NUMERIC_TYPE (prod));
-      if (!type)
-        abort ();
-      OP1 (prod) = $1;
-      OP2 (prod) = $3;
-      prod->tp.pro.code = tree_code_get_expression (EXP_ASSIGN, 
-                                          type, op1->tp.pro.code, op2->tp.pro.code, NULL);
-    }
-  $$ = prod;
+  $$ = make_plus_expression
+     (tok, op1, op2, type_code, EXP_ASSIGN);
 }
 |function_invocation {
   $$ = $1;
@@ -973,6 +899,39 @@ make_integer_constant (struct prod_token_parm_item* value)
   return prod;
 }
 
+
+/* Build a PROD_PLUS_EXPRESSION.  This is uses for PLUS, MINUS, ASSIGN
+   and EQUALS expressions.  */
+
+static struct prod_token_parm_item *
+make_plus_expression (struct prod_token_parm_item* tok,
+                     struct prod_token_parm_item* op1,
+                     struct prod_token_parm_item* op2,
+                     int type_code, int prod_code)
+{
+  struct prod_token_parm_item *prod;
+  tree type;
+
+  ensure_not_void (NUMERIC_TYPE (op1), op1->tp.pro.main_token);
+  ensure_not_void (NUMERIC_TYPE (op2), op2->tp.pro.main_token);
+
+  prod = make_production (PROD_PLUS_EXPRESSION, tok);
+
+  NUMERIC_TYPE (prod) = type_code;
+  type = get_type_for_numeric_type (NUMERIC_TYPE (prod));
+  if (!type)
+    abort ();
+  OP1 (prod) = op1;
+  OP2 (prod) = op2;
+      
+  prod->tp.pro.code = tree_code_get_expression
+     (prod_code, type, op1->tp.pro.code,
+      op2->tp.pro.code, NULL);
+
+  return prod;
+}
+
+
 /* Set STORAGE_CLASS in PROD according to CLASS_TOKEN.  */
 
 static void
@@ -1011,3 +970,4 @@ treelang_debug (void)
   if (option_parser_trace)
     yydebug = 1;
 }
+
index e6f96d4b62591b7fe085e5f20f83b0ec2dcab68c..6333d0fc0abbcbcf90f434e01e76a0f5873d9c9d 100644 (file)
@@ -121,6 +121,8 @@ treelang_decode_option (num_options_left, first_option_left)
           fprintf (stdout, "Usage: tree1 [switches] -o output input\n");
           return 1;
         }
+      break;
+
     case 'v':
       if (!strcmp (first_option_left[0],"-v"))
         {
@@ -133,6 +135,8 @@ treelang_decode_option (num_options_left, first_option_left)
             }
           return 1;
         }
+      break;
+
     case 'y':
       if (!strcmp (first_option_left[0],"-y"))
         {
@@ -140,6 +144,8 @@ treelang_decode_option (num_options_left, first_option_left)
           option_parser_trace = 1;
           return 1;
         }
+      break;
+
     case 'f':
       if (!strcmp (first_option_left[0],"-fparser-trace"))
         {
@@ -151,7 +157,7 @@ treelang_decode_option (num_options_left, first_option_left)
           option_lexer_trace = 1;
           return 1;
         }
-      return 0;
+      break;
 
     case 'w':
       if (!strcmp (first_option_left[0],"-w"))
@@ -160,21 +166,20 @@ treelang_decode_option (num_options_left, first_option_left)
              all warnings.  */
           return 1;
         }
-      return 0;
+      break;
 
     case 'W':
       if (!strcmp (first_option_left[0],"-Wall"))
         {
           return 1;
         }
-      return 0;
+      break;
 
     default:
-      return 0;
+      break;
     }
 
   return 0;
-
 }
 
 /* Language dependent parser setup.  */