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

   Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007-2012
   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_VAR_ENTRY_VALUE takes one struct symbol * in the following element,
   followed by another OP_VAR_ENTRY_VALUE, making three exp_elements.
   somename@entry may mean parameter value as present at the entry of the
   current function.  Implemented via DW_OP_GNU_entry_value.  */
OP (OP_VAR_ENTRY_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: "@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)
