/* 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_expression, 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:
*/
