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

   Copyright (C) 1986-2016 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)

/* 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.  Ada syntax: OP1(OP2..OP3).  Return
   elements OP2 through OP3 of OP1.  */
OP (TERNOP_SLICE)

/* 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_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)

/* Like UNOP_CAST, but the type is a subexpression.  */
OP (UNOP_CAST_TYPE)

/* 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)

/* Like UNOP_MEMVAL, but the type is supplied as a subexpression.  */
OP (UNOP_MEMVAL_TYPE)

/* 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)

/* Anonymous field access, e.g. "foo.3".  Used in Rust.  */
OP (STRUCTOP_ANONYMOUS)

/* 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)

/* 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)

/* An array range operator (in Fortran 90, for "exp:exp", "exp:",
   ":exp" and ":").  */
OP (OP_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)

/* The typeof operator.  This has one expression argument, which is
   evaluated solely for its type.  */
OP (OP_TYPEOF)

/* The decltype operator.  This has one expression argument, which is
   evaluated solely for its type.  This is similar to typeof, but has
   slight different semantics.  */
OP (OP_DECLTYPE)

/* The typeid operator.  This has one expression argument.  */
OP (OP_TYPEID)

/* This is used for the Rust [expr; N] form of array construction.  It
   takes two expression arguments.  */
OP (OP_RUST_ARRAY)
