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

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

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

/* 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_EXTRACT takes a value and a type, like a cast, but, instead of
   casting the value to the given type, a new value (of the given
   type) is extracted from the contents of the old value, starting
   from the least significant byte.

   It is invalid for the given type to be larger than the type of the
   given value.  */
OP (UNOP_EXTRACT)

/* 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_ABS)
OP (UNOP_HIGH)

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

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

/* ================ Ada operators ================ */

/* X IN A'RANGE(N).  N is an immediate operand, surrounded by 
   BINOP_IN_BOUNDS before and after.  A is an array, X an index 
   value.  Evaluates to true iff X is within range of the Nth
   dimension (1-based) of A.  (A multi-dimensional array
   type is represented as array of array of ...) */
OP (BINOP_IN_BOUNDS)

/* X IN L .. U.  True iff L <= X <= U.  */
OP (TERNOP_IN_RANGE)

/* Ada attributes ('Foo). */
OP (OP_ATR_FIRST)
OP (OP_ATR_LAST)
OP (OP_ATR_LENGTH)
OP (OP_ATR_POS)
OP (OP_ATR_SIZE)
OP (OP_ATR_TAG)
OP (OP_ATR_VAL)

/* Ada type qualification.  It is encoded as for UNOP_CAST, above, 
   and denotes the TYPE'(EXPR) construct. */
OP (UNOP_QUAL)

/* X IN TYPE.  The `TYPE' argument is immediate, with 
   UNOP_IN_RANGE before and after it. True iff X is a member of 
   type TYPE (typically a subrange). */
OP (UNOP_IN_RANGE)

/* An aggregate.   A single immediate operand, N>0, gives
   the number of component specifications that follow.  The
   immediate operand is followed by a second OP_AGGREGATE.  
   Next come N component specifications.  A component
   specification is either an OP_OTHERS (others=>...), an
   OP_CHOICES (for named associations), or other expression (for
   positional aggregates only).  Aggregates currently
   occur only as the right sides of assignments. */
OP (OP_AGGREGATE)

/* ================ Fortran operators ================ */

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

/* Single operand builtins.  */
OP (UNOP_FORTRAN_KIND)
OP (UNOP_FORTRAN_ALLOCATED)
OP (UNOP_FORTRAN_RANK)
OP (UNOP_FORTRAN_SHAPE)
OP (UNOP_FORTRAN_LOC)

/* Two operand builtins.  */
OP (BINOP_FORTRAN_MODULO)

/* Builtins that take one or two operands.  */
OP (FORTRAN_CEILING)
OP (FORTRAN_FLOOR)
OP (FORTRAN_ASSOCIATED)

/* Builtins that take one, two or three operands.  */
OP (FORTRAN_LBOUND)
OP (FORTRAN_UBOUND)
OP (FORTRAN_CMPLX)
OP (FORTRAN_ARRAY_SIZE)
