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

   Copyright (C) 1986-2020 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_FLOAT is similar but takes a floating-point constant encoded in
   the target format for the given type instead of a long.  */
OP (OP_FLOAT)

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

/* OP_VAR_MSYM_VALUE takes one struct objfile * in the following
   element, and one struct minimal_symbol * in the following
   exp_element, followed by another OP_VAR_MSYM_VALUE, making four
   exp_elements.  */
OP (OP_VAR_MSYM_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)

/* 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_ALIGNOF)		/* Unary alignof (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_FUNC_STATIC_VAR refers to a function local static variable.  The
   function is taken from the following subexpression.  The length of
   the variable name as a 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.

   Note this is used by C++, but not C.  The C parser handles local
   static variables in the parser directly.  Also, this is only used
   in C++ if the function/method name is not quoted, like e.g.:

     p S:method()::var
     p S:method() const::var

   If the function/method is quoted like instead:

     p 'S:method() const'::var

   then the C-specific handling directly in the parser takes over (see
   block/variable productions).

   Also, if the whole function+var is quoted like this:

     p 'S:method() const::var'

   then the whole quoted expression is interpreted as a single symbol
   name and we don't use OP_FUNC_STATIC_VAR either.  In that case, the
   C++-specific symbol lookup routines take care of the
   function-local-static search.  */
OP (OP_FUNC_STATIC_VAR)

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