/* Shift right, logical. */

DEFTREECODE (URSHIFT_EXPR, "urshift_expr", tcc_binary, 2)

/* Return -1, 0, 1 depending on whether the first argument is
   less, equal, or greater to the second argument. */
DEFTREECODE (COMPARE_EXPR, "compare_expr", tcc_binary, 2)

/* Same as COMPARE_EXPR, but if either value is NaN, the result is -1. */
DEFTREECODE (COMPARE_L_EXPR, "compare_l_expr", tcc_binary, 2)
/* Same as COMPARE_EXPR, but if either value is NaN, the result is 1. */
DEFTREECODE (COMPARE_G_EXPR, "compare_g_expr", tcc_binary, 2)

/* Unary plus. Operand 0 is the expression the unary plus is applied
   to */
DEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1)

/* New array creation expression.
   Operand 0 is the array base type.
   Operand 1 is the list of dimension expressions. 
   Operand 2 is the number of other dimensions of unspecified range.
   Once patched, the node will bear the type of the created array.  */
DEFTREECODE (NEW_ARRAY_EXPR, "new_array_expr", tcc_expression, 3)

/* New anonymous array creation expression.
   Operand 0 is the base type of the anonymous array.
   Operand 1 is the signature of the dimensions this array contains.
   Operand 2 is the anonymous array initializer.
   Once patched, the node will bear the type of the created array.  */
DEFTREECODE (NEW_ANONYMOUS_ARRAY_EXPR, "new_anonymous_array",
	     tcc_expression, 3)

/* New class creation expression.
   Operand 0 is the name of the class to be created
   Operand 1 is the argument list used to select a constructor.
   There is no operand 2.  That slot is used for the
   CALL_EXPR_RTL macro (see preexpand_calls).
   The type should be the one of the created class.  */
DEFTREECODE (NEW_CLASS_EXPR, "new_class_expr", tcc_expression, 3)

/* Defines `this' as an expression.  */
DEFTREECODE (THIS_EXPR, "this", tcc_unary, 0)

/* A labeled block. Operand 0 is the label that will be generated to
   mark the end of the block.  Operand 1 is the labeled block body.  */
DEFTREECODE (LABELED_BLOCK_EXPR, "labeled_block_expr", tcc_expression, 2)

/* Exit a labeled block, possibly returning a value.  Operand 0 is a
   LABELED_BLOCK_EXPR to exit.  */
DEFTREECODE (EXIT_BLOCK_EXPR, "exit_block_expr", tcc_statement, 1)

/* Case statement expression.
   Operand 1 is the case value.  */
DEFTREECODE (CASE_EXPR, "case", tcc_expression, 1)

/* Default statement expression. */
DEFTREECODE (DEFAULT_EXPR, "default", tcc_expression, 0)

/* Try expression
   Operand 0 is the tried block,
   Operand 1 contains chained catch nodes. */
DEFTREECODE (TRY_EXPR, "try-catch", tcc_expression, 2)

/* Catch clause.
   Operand 0 is the catch clause block, which contains the declaration of
   the catch clause parameter.  */
DEFTREECODE (JAVA_CATCH_EXPR, "catch", tcc_unary, 1)

/* Synchronized statement.
   Operand 0 is the expression on which we wish to synchronize,
   Operand 1 is the synchronized expression block.  */
DEFTREECODE (SYNCHRONIZED_EXPR, "synchronized", tcc_expression, 2)

/* Throw statement.
   Operand 0 is the throw expression.  */
DEFTREECODE (THROW_EXPR, "throw", tcc_unary, 1)

/* Conditional operator.
   Operand 0 is the condition expression
   Operand 1 is the then-value
   Operand 2 is the else-value.  */
DEFTREECODE (CONDITIONAL_EXPR, "?:", tcc_expression, 3)

/* instanceof operator.
   Operand 0 is the expression that is getting tested
   Operand 1 is the class used for the test.  */
DEFTREECODE (INSTANCEOF_EXPR, "instanceof", tcc_expression, 2)

/* Array initializers.
   Operand 0 is the (sub) array target to initialize, left to NULL_TREE
   when the node is created.
   Operand 1 is a CONSTRUCTOR node.  */
DEFTREECODE (NEW_ARRAY_INIT, "new_array_init", tcc_unary, 1)

/* Class literal.
   Operand 0 is the name of the class we're trying to build a
   reference from.  */
DEFTREECODE (CLASS_LITERAL, "class_literal", tcc_unary, 1)

/* The Java object within the exception object from the runtime.  */
DEFTREECODE (JAVA_EXC_OBJ_EXPR, "java_exc_obj_expr", tcc_expression, 0)

/* Annotates a tree node (usually an expression) with source location
   information: a file name (EXPR_WFL_FILENAME);  a line number
   (EXPR_WFL_LINENO); and column number (EXPR_WFL_COLNO).  It is
   expanded as the contained node (EXPR_WFL_NODE);  a line note should
   be emitted first if EXPR_WFL_EMIT_LINE_NOTE.  */
#ifdef USE_MAPPED_LOCATION
DEFTREECODE (EXPR_WITH_FILE_LOCATION, "expr_with_file_location",
	     tcc_expression, 2)
#else
DEFTREECODE (EXPR_WITH_FILE_LOCATION, "expr_with_file_location",
	     tcc_expression, 3)
#endif

/*
Local variables:
mode:c
End:
*/
