/* Standard language operator definitions for GDB, the GNU debugger.

   Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007, 2008, 2009,
   2010, 2011 Free Software Foundation, Inc.

   This file is part of GDB.

   This program 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 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* Used when it's necessary to pass an opcode which will be ignored,
   or to catch uninitialized values.  */
OP (OP_NULL)

/* BINOP_... operate on two values computed by following subexpressions,
replacing them by one result value.  They take no immediate arguments.  */

OP (BINOP_ADD)			/* + */
OP (BINOP_SUB)			/* - */
OP (BINOP_MUL)			/* * */
OP (BINOP_DIV)			/* / */
OP (BINOP_REM)			/* % */
OP (BINOP_MOD)			/* mod (Knuth 1.2.4) */
OP (BINOP_LSH)			/* << */
OP (BINOP_RSH)			/* >> */
OP (BINOP_LOGICAL_AND)		/* && */
OP (BINOP_LOGICAL_OR)		/* || */
OP (BINOP_BITWISE_AND)		/* & */
OP (BINOP_BITWISE_IOR)		/* | */
OP (BINOP_BITWISE_XOR)		/* ^ */
OP (BINOP_EQUAL)		/* == */
OP (BINOP_NOTEQUAL)		/* != */
OP (BINOP_LESS)			/* < */
OP (BINOP_GTR)			/* > */
OP (BINOP_LEQ)			/* <= */
OP (BINOP_GEQ)			/* >= */
OP (BINOP_REPEAT)		/* @ */
OP (BINOP_ASSIGN)		/* = */
OP (BINOP_COMMA)		/* , */
OP (BINOP_SUBSCRIPT)		/* x[y] */
OP (BINOP_EXP)			/* Exponentiation */

/* C++.  */

OP (BINOP_MIN)			/* <? */
OP (BINOP_MAX)			/* >? */

/* STRUCTOP_MEMBER is used for pointer-to-member constructs.
   X .  * Y translates into X STRUCTOP_MEMBER Y.  */
OP (STRUCTOP_MEMBER)

/* STRUCTOP_MPTR is used for pointer-to-member constructs
   when X is a pointer instead of an aggregate.  */
OP (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.  */
OP (TYPE_INSTANCE)

/* end of C++.  */

/* For Modula-2 integer division DIV.  */
OP (BINOP_INTDIV)

/* +=, -=, *=, and so on.  The following exp_element is another opcode,
   a BINOP_, saying how to modify.  Then comes another BINOP_ASSIGN_MODIFY,
   making three exp_elements in total.  */
OP (BINOP_ASSIGN_MODIFY)

/* Modula-2 standard (binary) procedures.  */
OP (BINOP_VAL)

/* 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.  */
OP (BINOP_CONCAT)

/* For (the deleted) Chill and Pascal.  */
OP (BINOP_IN)			/* Returns 1 iff ARG1 IN ARG2.  */

/* This is the "colon operator" used various places in (the
   deleted) Chill.  */
OP (BINOP_RANGE)

/* This must be the highest BINOP_ value, for expprint.c.  */
OP (BINOP_END)

/* Operates on three values computed by following subexpressions.  */
OP (TERNOP_COND)		/* ?: */

/* A sub-string/sub-array.  (the deleted) Chill syntax:
   OP1(OP2:OP3).  Return elements OP2 through OP3 of OP1.  */
OP (TERNOP_SLICE)

/* A sub-string/sub-array.  (The deleted) Chill syntax: OP1(OP2 UP
   OP3).  Return OP3 elements of OP1, starting with element
   OP2.  */
OP (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.  */
OP (MULTI_SUBSCRIPT)

/* The OP_... series take immediate following arguments.
   After the arguments come another OP_... (the same one)
   so that the grouping can be recognized from the end.  */

/* OP_LONG is followed by a type pointer in the next exp_element
   and the long constant value in the following exp_element.
   Then comes another OP_LONG.
   Thus, the operation occupies four exp_elements.  */
OP (OP_LONG)

/* OP_DOUBLE is similar but takes a DOUBLEST constant instead of a
   long.  */
OP (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.  */
OP (OP_VAR_VALUE)

/* OP_LAST is followed by an integer in the next exp_element.
   The integer is zero for the last value printed,
   or it is the absolute number of a history element.
   With another OP_LAST at the end, this makes three exp_elements.  */
OP (OP_LAST)

/* OP_REGISTER is followed by a string in the next exp_element.
   This is the name of a register to fetch.  */
OP (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 (OP_INTERNALVAR)

/* OP_FUNCALL is followed by an integer in the next exp_element.
   The integer is the number of args to the function call.
   That many plus one values from following subexpressions
   are used, the first one being the function.
   The integer is followed by a repeat of OP_FUNCALL,
   making three exp_elements.  */
OP (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 (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> ).  */
OP (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.  */
OP (OP_COMPLEX)

/* OP_STRING represents a string constant.
   Its format is the same as that of a STRUCTOP, but the string
   data is just made into a string constant when the operation
   is executed.  */
OP (OP_STRING)

/* OP_BITSTRING represents a packed bitstring constant.
   Its format is the same as that of a STRUCTOP, but the bitstring
   data is just made into a bitstring constant when the operation
   is executed.  */
OP (OP_BITSTRING)

/* OP_ARRAY creates an array constant out of the following subexpressions.
   It is followed by two exp_elements, the first containing an integer
   that is the lower bound of the array and the second containing another
   integer that is the upper bound of the array.  The second integer is
   followed by a repeat of OP_ARRAY, making four exp_elements total.
   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.  */
OP (OP_ARRAY)

/* UNOP_CAST is followed by a type pointer in the next exp_element.
   With another UNOP_CAST at the end, this makes three exp_elements.
   It casts the value of the following subexpression.  */
OP (UNOP_CAST)

/* The C++ dynamic_cast operator.  */
OP (UNOP_DYNAMIC_CAST)

/* The C++ reinterpret_cast operator.  */
OP (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
   following subexpression.  */
OP (UNOP_MEMVAL)

/* UNOP_MEMVAL_TLS is followed by a `struct objfile' pointer in the next
   exp_element and a type pointer in the following exp_element.
   With another UNOP_MEMVAL_TLS at the end, this makes four exp_elements.
   It casts the contents of the word offsetted by the value of the
   following subexpression from the TLS specified by `struct objfile'.  */
OP (UNOP_MEMVAL_TLS)

/* UNOP_... operate on one value from a following subexpression
   and replace it with a result.  They take no immediate arguments.  */

OP (UNOP_NEG)			/* Unary - */
OP (UNOP_LOGICAL_NOT)		/* Unary ! */
OP (UNOP_COMPLEMENT)		/* Unary ~ */
OP (UNOP_IND)			/* Unary * */
OP (UNOP_ADDR)			/* Unary & */
OP (UNOP_PREINCREMENT)		/* ++ before an expression */
OP (UNOP_POSTINCREMENT)		/* ++ after an expression */
OP (UNOP_PREDECREMENT)		/* -- before an expression */
OP (UNOP_POSTDECREMENT)		/* -- after an expression */
OP (UNOP_SIZEOF)		/* Unary sizeof (followed by expression) */

OP (UNOP_PLUS)			/* Unary plus */

OP (UNOP_CAP)			/* Modula-2 standard (unary) procedures */
OP (UNOP_CHR)
OP (UNOP_ORD)
OP (UNOP_ABS)
OP (UNOP_FLOAT)
OP (UNOP_HIGH)
OP (UNOP_MAX)
OP (UNOP_MIN)
OP (UNOP_ODD)
OP (UNOP_TRUNC)

OP (OP_BOOL)			/* Modula-2 builtin BOOLEAN type */
OP (OP_M2_STRING)		/* Modula-2 string constants */

/* STRUCTOP_... operate on a value from a following subexpression
   by extracting a structure component specified by a string
   that appears in the following exp_elements (as many as needed).
   STRUCTOP_STRUCT is used for "." and STRUCTOP_PTR for "->".
   They differ only in the error message given in case the value is
   not suitable or the structure component specified is not found.

   The length of the string follows the opcode, followed by
   BYTES_TO_EXP_ELEM(length) elements containing the data of the
   string, followed by the length again and the opcode again.  */

OP (STRUCTOP_STRUCT)
OP (STRUCTOP_PTR)

/* C++: OP_THIS is just a placeholder for the class instance variable.
   It just comes in a tight (OP_THIS, OP_THIS) pair.  */
OP (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.  */
OP (OP_OBJC_SELF)

/* Objective C: "@selector" pseudo-operator.  */
OP (OP_OBJC_SELECTOR)

/* OP_SCOPE surrounds a type name and a field name.  The type
   name is encoded as one element, but the field name stays as
   a string, which, of course, is variable length.  */
OP (OP_SCOPE)

/* Used to represent named structure field values in brace
   initializers (or tuples as they are called in (the deleted)
   Chill).

   The gcc C syntax is NAME:VALUE or .NAME=VALUE, the (the
   deleted) Chill syntax is .NAME:VALUE.  Multiple labels (as in
   the (the deleted) Chill syntax .NAME1,.NAME2:VALUE) is
   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.  */
OP (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.  */
OP (OP_TYPE)

/* An un-looked-up identifier.  */
OP (OP_NAME)

/* An Objective C Foundation Class NSString constant.  */
OP (OP_OBJC_NSSTRING)

/* A F90 array range operator (for "exp:exp", "exp:", ":exp" and ":").  */
OP (OP_F90_RANGE)

/* OP_DECFLOAT is followed by a type pointer in the next exp_element
   and a dec long constant value in the following exp_element.
   Then comes another OP_DECFLOAT.  */
OP (OP_DECFLOAT)

/* OP_ADL_FUNC specifies that the function is to be looked up in an
   Argument Dependent manner (Koenig lookup).  */
OP (OP_ADL_FUNC)
