2011-01-31 Paul Pluzhnikov <ppluzhnikov@google.com>
[deliverable/binutils-gdb.git] / gdb / expression.h
index 12163e3949eaf9a271dcce9df7e3dc890fbbe405..dc26d3b95f738a8cdc1df25d04dede6f23c49580 100644 (file)
@@ -1,7 +1,7 @@
 /* Definitions for expressions stored in reversed prefix form, for GDB.
 
-   Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007, 2008, 2009
-   Free Software Foundation, Inc.
+   Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007, 2008, 2009,
+   2010, 2011 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,7 +22,7 @@
 #define EXPRESSION_H 1
 
 
-#include "symtab.h"            /* Needed for "struct block" type. */
+#include "symtab.h"            /* Needed for "struct block" type.  */
 #include "doublest.h"          /* Needed for DOUBLEST.  */
 
 
@@ -81,16 +81,23 @@ enum exp_opcode
     BINOP_MAX,                 /* >? */
 
     /* STRUCTOP_MEMBER is used for pointer-to-member constructs.
-       X . * Y translates into X STRUCTOP_MEMBER Y.  */
+       X .  * Y translates into X STRUCTOP_MEMBER Y.  */
     STRUCTOP_MEMBER,
 
     /* STRUCTOP_MPTR is used for pointer-to-member constructs
        when X is a pointer instead of an aggregate.  */
     STRUCTOP_MPTR,
 
+    /* TYPE_INSTANCE is used when the user specifies a specific
+       type instantiation for overloaded methods/functions.
+
+       The format is:
+       TYPE_INSTANCE num_types type0 ... typeN num_types TYPE_INSTANCE.  */
+    TYPE_INSTANCE,
+
     /* end of C++.  */
 
-    /* For Modula-2 integer division DIV */
+    /* For Modula-2 integer division DIV */
     BINOP_INTDIV,
 
     BINOP_ASSIGN_MODIFY,       /* +=, -=, *=, and so on.
@@ -99,21 +106,19 @@ enum exp_opcode
                                   Then comes another BINOP_ASSIGN_MODIFY,
                                   making three exp_elements in total.  */
 
-    /* Modula-2 standard (binary) procedures */
+    /* Modula-2 standard (binary) procedures */
     BINOP_VAL,
-    BINOP_INCL,
-    BINOP_EXCL,
 
     /* Concatenate two operands, such as character strings or bitstrings.
        If the first operand is a integer expression, then it means concatenate
-       the second operand with itself that many times. */
+       the second operand with itself that many times.  */
     BINOP_CONCAT,
 
-    /* For (the deleted) Chill and Pascal. */
-    BINOP_IN,                  /* Returns 1 iff ARG1 IN ARG2. */
+    /* For (the deleted) Chill and Pascal.  */
+    BINOP_IN,                  /* Returns 1 iff ARG1 IN ARG2.  */
 
     /* This is the "colon operator" used various places in (the
-       deleted) Chill. */
+       deleted) Chill.  */
     BINOP_RANGE,
 
     /* This must be the highest BINOP_ value, for expprint.c.  */
@@ -128,14 +133,14 @@ enum exp_opcode
 
     /* A sub-string/sub-array.  (The deleted) Chill syntax: OP1(OP2 UP
        OP3).  Return OP3 elements of OP1, starting with element
-       OP2. */
+       OP2.  */
     TERNOP_SLICE_COUNT,
 
     /* Multidimensional subscript operator, such as Modula-2 x[a,b,...].
        The dimensionality is encoded in the operator, like the number of
        function arguments in OP_FUNCALL, I.E. <OP><dimension><OP>.
        The value of the first following subexpression is subscripted
-       by each of the next following subexpressions, one per dimension. */
+       by each of the next following subexpressions, one per dimension.  */
     MULTI_SUBSCRIPT,
 
     /* The OP_... series take immediate following arguments.
@@ -148,14 +153,16 @@ enum exp_opcode
        Thus, the operation occupies four exp_elements.  */
     OP_LONG,
 
-    /* OP_DOUBLE is similar but takes a DOUBLEST constant instead of a long.  */
+    /* OP_DOUBLE is similar but takes a DOUBLEST constant instead of a
+       long.  */
     OP_DOUBLE,
 
     /* OP_VAR_VALUE takes one struct block * in the following element,
-       and one struct symbol * in the following exp_element, followed by
-       another OP_VAR_VALUE, making four exp_elements.  If the block is
-       non-NULL, evaluate the symbol relative to the innermost frame
-       executing in that block; if the block is NULL use the selected frame.  */
+       and one struct symbol * in the following exp_element, followed
+       by another OP_VAR_VALUE, making four exp_elements.  If the
+       block is non-NULL, evaluate the symbol relative to the
+       innermost frame executing in that block; if the block is NULL
+       use the selected frame.  */
     OP_VAR_VALUE,
 
     /* OP_LAST is followed by an integer in the next exp_element.
@@ -168,8 +175,9 @@ enum exp_opcode
        This is the name of a register to fetch.  */
     OP_REGISTER,
 
-    /* OP_INTERNALVAR is followed by an internalvar ptr in the next exp_element.
-       With another OP_INTERNALVAR at the end, this makes three exp_elements.  */
+    /* OP_INTERNALVAR is followed by an internalvar ptr in the next
+       exp_element.  With another OP_INTERNALVAR at the end, this
+       makes three exp_elements.  */
     OP_INTERNALVAR,
 
     /* OP_FUNCALL is followed by an integer in the next exp_element.
@@ -180,22 +188,24 @@ enum exp_opcode
        making three exp_elements.  */
     OP_FUNCALL,
 
-    /* OP_OBJC_MSGCALL is followed by a string in the next exp_element and then an
-       integer.  The string is the selector string.  The integer is the number
-       of arguments to the message call.  That many plus one values are used, 
-       the first one being the object pointer.  This is an Objective C message */
+    /* OP_OBJC_MSGCALL is followed by a string in the next exp_element
+       and then an integer.  The string is the selector string.  The
+       integer is the number of arguments to the message call.  That
+       many plus one values are used, the first one being the object
+       pointer.  This is an Objective C message.  */
     OP_OBJC_MSGCALL,
 
-    /* This is EXACTLY like OP_FUNCALL but is semantically different.  
-       In F77, array subscript expressions, substring expressions
-       and function calls are  all exactly the same syntactically. They may 
-       only be disambiguated at runtime.  Thus this operator, which 
-       indicates that we have found something of the form <name> ( <stuff> ) */
+    /* This is EXACTLY like OP_FUNCALL but is semantically different.
+       In F77, array subscript expressions, substring expressions and
+       function calls are all exactly the same syntactically.  They
+       may only be disambiguated at runtime.  Thus this operator,
+       which indicates that we have found something of the form
+       <name> ( <stuff> ).  */
     OP_F77_UNDETERMINED_ARGLIST,
 
     /* OP_COMPLEX takes a type in the following element, followed by another
        OP_COMPLEX, making three exp_elements.  It is followed by two double
-       args, and converts them into a complex number of the given type. */
+       args, and converts them into a complex number of the given type.  */
     OP_COMPLEX,
 
     /* OP_STRING represents a string constant.
@@ -218,7 +228,7 @@ enum exp_opcode
        The bounds are used to compute the number of following subexpressions
        to consume, as well as setting the bounds in the created array constant.
        The type of the elements is taken from the type of the first subexp,
-       and they must all match. */
+       and they must all match.  */
     OP_ARRAY,
 
     /* UNOP_CAST is followed by a type pointer in the next exp_element.
@@ -226,6 +236,12 @@ enum exp_opcode
        It casts the value of the following subexpression.  */
     UNOP_CAST,
 
+    /* The C++ dynamic_cast operator.  */
+    UNOP_DYNAMIC_CAST,
+
+    /* The C++ reinterpret_cast operator.  */
+    UNOP_REINTERPRET_CAST,
+
     /* UNOP_MEMVAL is followed by a type pointer in the next exp_element
        With another UNOP_MEMVAL at the end, this makes three exp_elements.
        It casts the contents of the word addressed by the value of the
@@ -266,9 +282,6 @@ enum exp_opcode
     UNOP_ODD,
     UNOP_TRUNC,
 
-    /* (The deleted) Chill builtin functions.  */
-    UNOP_LOWER, UNOP_UPPER, UNOP_LENGTH, UNOP_CARD, UNOP_CHMAX, UNOP_CHMIN,
-
     OP_BOOL,                   /* Modula-2 builtin BOOLEAN type */
     OP_M2_STRING,              /* Modula-2 string constants */
 
@@ -290,11 +303,12 @@ enum exp_opcode
        It just comes in a tight (OP_THIS, OP_THIS) pair.  */
     OP_THIS,
 
-    /* Objective-C: OP_OBJC_SELF is just a placeholder for the class instance
-       variable.  It just comes in a tight (OP_OBJC_SELF, OP_OBJC_SELF) pair.  */
+    /* Objective-C: OP_OBJC_SELF is just a placeholder for the class
+       instance variable.  It just comes in a tight (OP_OBJC_SELF,
+       OP_OBJC_SELF) pair.  */
     OP_OBJC_SELF,
 
-    /* Objective C: "@selector" pseudo-operator */
+    /* Objective C: "@selector" pseudo-operator */
     OP_OBJC_SELECTOR,
 
     /* OP_SCOPE surrounds a type name and a field name.  The type
@@ -312,18 +326,18 @@ enum exp_opcode
        represented as if it were .NAME1:(.NAME2:VALUE) (though that is
        not valid (the deleted) Chill syntax).
 
-       The NAME is represented as for STRUCTOP_STRUCT;  VALUE follows. */
+       The NAME is represented as for STRUCTOP_STRUCT;  VALUE follows.  */
     OP_LABELED,
 
     /* OP_TYPE is for parsing types, and used with the "ptype" command
        so we can look up types that are qualified by scope, either with
-       the GDB "::" operator, or the Modula-2 '.' operator. */
+       the GDB "::" operator, or the Modula-2 '.' operator.  */
     OP_TYPE,
 
-    /* An un-looked-up identifier. */
+    /* An un-looked-up identifier.  */
     OP_NAME,
 
-    /* An Objective C Foundation Class NSString constant */
+    /* An Objective C Foundation Class NSString constant */
     OP_OBJC_NSSTRING,
 
     /* A F90 array range operator (for "exp:exp", "exp:", ":exp" and ":").  */
@@ -334,25 +348,32 @@ enum exp_opcode
        Then comes another OP_DECFLOAT.  */
     OP_DECFLOAT,
 
+    /* OP_ADL_FUNC specifies that the function is to be looked up in an
+       Argument Dependent manner (Koenig lookup).  */
+    OP_ADL_FUNC,
+
      /* First extension operator.  Individual language modules define
-        extra operators they need as constants with values 
-        OP_LANGUAGE_SPECIFIC0 + k, for k >= 0, using a separate 
-        enumerated type definition:
-           enum foo_extension_operator {
+       extra operators in *.inc include files below always starting with
+       numbering at OP_EXTENDED0:
              BINOP_MOGRIFY = OP_EXTENDED0,
             BINOP_FROB,
-            ...
-           };      */
+            ...  */
     OP_EXTENDED0,
   
     /* Last possible extension operator.  Defined to provide an
-       explicit and finite number of extended operators. */
-    OP_EXTENDED_LAST = 0xff
+       explicit and finite number of extended operators.  */
+    OP_EXTENDED_LAST = 0xff,
     /* NOTE: Eventually, we expect to convert to an object-oriented 
        formulation for expression operators that does away with the
        need for these extension operators, and indeed for this
        entire enumeration type.  Therefore, consider the OP_EXTENDED
-       definitions to be a temporary measure. */
+       definitions to be a temporary measure.  */
+
+    /* Each language specific set of operators starts at OP_EXTENDED0.  */
+#include "ada-operator.inc"
+
+    /* Existing only to swallow the last comma (',') from last .inc file.  */
+    OP_UNUSED_LAST
   };
 
 union exp_element
@@ -373,14 +394,15 @@ union exp_element
 
 struct expression
   {
-    const struct language_defn *language_defn; /* language it was entered in */
-    struct gdbarch *gdbarch;  /* architecture it was parsed in */
+    const struct language_defn *language_defn; /* language it was
+                                                  entered in.  */
+    struct gdbarch *gdbarch;  /* architecture it was parsed in.  */
     int nelts;
     union exp_element elts[1];
   };
 
 /* Macros for converting between number of expression elements and bytes
-   to store that many expression elements. */
+   to store that many expression elements.  */
 
 #define EXP_ELEM_TO_BYTES(elements) \
     ((elements) * sizeof (union exp_element))
@@ -432,7 +454,8 @@ extern void print_expression (struct expression *, struct ui_file *);
 
 extern char *op_string (enum exp_opcode);
 
-extern void dump_raw_expression (struct expression *, struct ui_file *, char *);
+extern void dump_raw_expression (struct expression *,
+                                struct ui_file *, char *);
 extern void dump_prefix_expression (struct expression *, struct ui_file *);
 
 #endif /* !defined (EXPRESSION_H) */
This page took 0.027521 seconds and 4 git commands to generate.