/*
 * This file specifies the operators used by the interpreter.
 * Normally, these should not be commented out.
 */

operator pop_value, push, efun0, efun1, efun2, efun3, efunv;

operator short_int, number, real, byte, nbyte, string, short_string, const0, const1;

operator aggregate, aggregate_assoc;
#ifdef DEBUG
operator break_point;
#endif

/* these must be set up so that F_BRANCH is the last foward branch and
 * F_BRANCH_X + 3 == F_BBRANCH_X
 */
operator branch_ne, branch_ge, branch_le, branch_eq;
operator branch_when_zero, branch_when_non_zero, branch;
operator bbranch_when_zero, bbranch_when_non_zero, bbranch;

operator bbranch_lt;

operator foreach, next_foreach, exit_foreach;
operator loop_cond_local, loop_cond_number;
operator loop_incr;
operator while_dec;

operator lor, land;

operator catch, end_catch;
operator time_expression, end_time_expression;

operator switch ;

operator call_function_by_address, call_inherited, return, return_zero;

/* eq must be first, gt must be last; c.f. is_boolean() */
operator eq, ne, le, lt, ge, gt;

operator inc, dec, pre_inc, post_inc, pre_dec, post_dec;

operator transfer_local;

operator make_ref, kill_refs;

/* lvalue eops must be the original eop + 1 */
operator local, local_lvalue;
operator ref, ref_lvalue;
operator global, global_lvalue;
operator member, member_lvalue;
operator index, index_lvalue;
operator rindex, rindex_lvalue;
operator nn_range, nn_range_lvalue, rn_range, rn_range_lvalue;
operator rr_range, rr_range_lvalue, nr_range, nr_range_lvalue;
operator ne_range, re_range;

/* these must all be together */
operator add_eq, sub_eq, and_eq, or_eq, xor_eq, lsh_eq, rsh_eq, mult_eq;
operator div_eq, mod_eq, assign;

operator void_add_eq, void_assign, void_assign_local;

operator add, subtract, multiply, divide, mod, and, or, xor, lsh, rsh;
operator not, negate, compl;

operator function_constructor;
operator simul_efun;

operator sscanf;
operator parse_command;

operator new_class, new_empty_class;
operator expand_varargs;
operator type_check;
