Remove trailing white spaces on gas
[deliverable/binutils-gdb.git] / gas / cond.c
index 0dd919c32b3d381bcaf2f0beb27a5d6220920d30..c30912334f0639633952914f7d272c104182abb4 100644 (file)
@@ -1,12 +1,12 @@
 /* cond.c - conditional assembly pseudo-ops, and .include
    Copyright 1990, 1991, 1992, 1993, 1995, 1997, 1998, 2000, 2001, 2002,
 /* cond.c - conditional assembly pseudo-ops, and .include
    Copyright 1990, 1991, 1992, 1993, 1995, 1997, 1998, 2000, 2001, 2002,
-   2003 Free Software Foundation, Inc.
+   2003, 2005, 2006, 2007 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
    any later version.
 
    GAS is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #include "as.h"
 
 #include "as.h"
+#include "sb.h"
 #include "macro.h"
 
 #include "obstack.h"
 #include "macro.h"
 
 #include "obstack.h"
@@ -90,7 +91,7 @@ s_ifdef (int test_defined)
   *input_line_pointer = c;
 
   initialize_cframe (&cframe);
   *input_line_pointer = c;
 
   initialize_cframe (&cframe);
-  
+
   if (cframe.dead_tree)
     cframe.ignoring = 1;
   else
   if (cframe.dead_tree)
     cframe.ignoring = 1;
   else
@@ -102,7 +103,7 @@ s_ifdef (int test_defined)
         considered to be undefined.  */
       is_defined =
        symbolP != NULL
         considered to be undefined.  */
       is_defined =
        symbolP != NULL
-       && S_IS_DEFINED (symbolP)
+       && (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
        && S_GET_SEGMENT (symbolP) != reg_section;
 
       cframe.ignoring = ! (test_defined ^ is_defined);
        && S_GET_SEGMENT (symbolP) != reg_section;
 
       cframe.ignoring = ! (test_defined ^ is_defined);
@@ -144,7 +145,7 @@ s_if (int arg)
     }
   else
     {
     }
   else
     {
-      expression (&operand);
+      expression_and_evaluate (&operand);
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".if\" statement"));
     }
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".if\" statement"));
     }
@@ -181,6 +182,40 @@ s_if (int arg)
   demand_empty_rest_of_line ();
 }
 
   demand_empty_rest_of_line ();
 }
 
+/* Performs the .ifb (test_blank == 1) and
+   the .ifnb (test_blank == 0) pseudo op.  */
+
+void
+s_ifb (int test_blank)
+{
+  struct conditional_frame cframe;
+
+  initialize_cframe (&cframe);
+
+  if (cframe.dead_tree)
+    cframe.ignoring = 1;
+  else
+    {
+      int is_eol;
+
+      SKIP_WHITESPACE ();
+      is_eol = is_end_of_line[(unsigned char) *input_line_pointer];
+      cframe.ignoring = (test_blank == !is_eol);
+    }
+
+  current_cframe = ((struct conditional_frame *)
+                   obstack_copy (&cond_obstack, &cframe,
+                                 sizeof (cframe)));
+
+  if (LISTING_SKIP_COND ()
+      && cframe.ignoring
+      && (cframe.previous_cframe == NULL
+         || ! cframe.previous_cframe->ignoring))
+    listing_list (2);
+
+  ignore_rest_of_line ();
+}
+
 /* Get a string for the MRI IFC or IFNC pseudo-ops.  */
 
 static char *
 /* Get a string for the MRI IFC or IFNC pseudo-ops.  */
 
 static char *
@@ -276,10 +311,10 @@ s_elseif (int arg)
       as_bad (_("\".elseif\" after \".else\""));
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
       as_bad (_("\".elseif\" after \".else\""));
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
-                   _("here is the previous \"else\""));
+                   _("here is the previous \".else\""));
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
-                   _("here is the previous \"if\""));
+                   _("here is the previous \".if\""));
     }
   else
     {
     }
   else
     {
@@ -306,7 +341,7 @@ s_elseif (int arg)
       /* Leading whitespace is part of operand.  */
       SKIP_WHITESPACE ();
 
       /* Leading whitespace is part of operand.  */
       SKIP_WHITESPACE ();
 
-      expression (&operand);
+      expression_and_evaluate (&operand);
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".elseif\" statement"));
 
       if (operand.X_op != O_constant)
        as_bad (_("non-constant expression in \".elseif\" statement"));
 
@@ -379,13 +414,13 @@ s_else (int arg ATTRIBUTE_UNUSED)
     }
   else if (current_cframe->else_seen)
     {
     }
   else if (current_cframe->else_seen)
     {
-      as_bad (_("duplicate \"else\""));
+      as_bad (_("duplicate \".else\""));
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
-                   _("here is the previous \"else\""));
+                   _("here is the previous \".else\""));
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
-                   _("here is the previous \"if\""));
+                   _("here is the previous \".if\""));
     }
   else
     {
     }
   else
     {
This page took 0.025034 seconds and 4 git commands to generate.