/* -*- mode:c; style:ruby; coding: utf-8; indent-tabs-mode: nil -*- */

/* This is  an auto-generated file  and is a  part of the  programming language
 * Ruby.  The  person who  created  a  program  to  generate this  file  (``I''
 * hereafter) would like  to refrain from defining licensing  of this generated
 * source code.
 *
 * This file consist of many small  parts of codes copyrighted by each authors,
 * not  only  the  ``I''  person.   Those  original  authors  agree  with  some
 * open-source license.  I  believe that the license we agree  is the condition
 * mentioned in  the file COPYING.  It  states "4.  You may  modify and include
 * the part of the software into any  other software ...".  But the problem is,
 * the license never makes it clear if  such modified parts still remain in the
 * same  license, or  not.   The fact  that  we agree  with  the source  code's
 * licensing terms do not automatically define that of generated ones.  This is
 * the reason  why this file  is under unclear situation.   All that I  know is
 * that above provision guarantees this file to exist.
 *
 * Please let me  hesitate to declare something about this  nuanced contract. I
 * am not in the position to take  over other authors' license to merge into my
 * one.  Changing them to (say) GPLv3  is not doable by myself. Perhaps someday
 * it might turn out to be okay to say this file is under a license. I wish the
 * situation would become more clear in the future. */

/*******************************************************************/
/*******************************************************************/
/*******************************************************************/
/**
  This file contains YARV instruction list.

  ----
  This file is auto generated by insns2vm.rb
  DO NOT TOUCH!

  If you want to fix something, you must edit "tool/ruby_vm/views/insns.inc.erb"
  or tool/insns2vm.rb
 */

/* BIN : Basic Instruction Name */
#define BIN(n) YARVINSN_##n

enum ruby_vminsn_type {
    BIN(nop),
    BIN(getlocal),
    BIN(setlocal),
    BIN(getblockparam),
    BIN(setblockparam),
    BIN(getblockparamproxy),
    BIN(getspecial),
    BIN(setspecial),
    BIN(getinstancevariable),
    BIN(setinstancevariable),
    BIN(getclassvariable),
    BIN(setclassvariable),
    BIN(getconstant),
    BIN(setconstant),
    BIN(getglobal),
    BIN(setglobal),
    BIN(putnil),
    BIN(putself),
    BIN(putobject),
    BIN(putspecialobject),
    BIN(putiseq),
    BIN(putstring),
    BIN(concatstrings),
    BIN(tostring),
    BIN(freezestring),
    BIN(toregexp),
    BIN(intern),
    BIN(newarray),
    BIN(duparray),
    BIN(expandarray),
    BIN(concatarray),
    BIN(splatarray),
    BIN(newhash),
    BIN(newhashfromarray),
    BIN(newrange),
    BIN(pop),
    BIN(dup),
    BIN(dupn),
    BIN(swap),
    BIN(reverse),
    BIN(reput),
    BIN(topn),
    BIN(setn),
    BIN(adjuststack),
    BIN(defined),
    BIN(checkmatch),
    BIN(checkkeyword),
    BIN(checktype),
    BIN(defineclass),
    BIN(send),
    BIN(opt_send_without_block),
    BIN(opt_str_freeze),
    BIN(opt_str_uminus),
    BIN(opt_newarray_max),
    BIN(opt_newarray_min),
    BIN(invokesuper),
    BIN(invokeblock),
    BIN(leave),
    BIN(throw),
    BIN(jump),
    BIN(branchif),
    BIN(branchunless),
    BIN(branchnil),
    BIN(getinlinecache),
    BIN(setinlinecache),
    BIN(once),
    BIN(opt_case_dispatch),
    BIN(opt_plus),
    BIN(opt_minus),
    BIN(opt_mult),
    BIN(opt_div),
    BIN(opt_mod),
    BIN(opt_eq),
    BIN(opt_neq),
    BIN(opt_lt),
    BIN(opt_le),
    BIN(opt_gt),
    BIN(opt_ge),
    BIN(opt_ltlt),
    BIN(opt_and),
    BIN(opt_or),
    BIN(opt_aref),
    BIN(opt_aset),
    BIN(opt_aset_with),
    BIN(opt_aref_with),
    BIN(opt_length),
    BIN(opt_size),
    BIN(opt_empty_p),
    BIN(opt_succ),
    BIN(opt_not),
    BIN(opt_regexpmatch1),
    BIN(opt_regexpmatch2),
    BIN(opt_call_c_function),
    BIN(bitblt),
    BIN(answer),
    BIN(getlocal_WC_0),
    BIN(getlocal_WC_1),
    BIN(setlocal_WC_0),
    BIN(setlocal_WC_1),
    BIN(putobject_INT2FIX_0_),
    BIN(putobject_INT2FIX_1_),
    BIN(trace_nop),
    BIN(trace_getlocal),
    BIN(trace_setlocal),
    BIN(trace_getblockparam),
    BIN(trace_setblockparam),
    BIN(trace_getblockparamproxy),
    BIN(trace_getspecial),
    BIN(trace_setspecial),
    BIN(trace_getinstancevariable),
    BIN(trace_setinstancevariable),
    BIN(trace_getclassvariable),
    BIN(trace_setclassvariable),
    BIN(trace_getconstant),
    BIN(trace_setconstant),
    BIN(trace_getglobal),
    BIN(trace_setglobal),
    BIN(trace_putnil),
    BIN(trace_putself),
    BIN(trace_putobject),
    BIN(trace_putspecialobject),
    BIN(trace_putiseq),
    BIN(trace_putstring),
    BIN(trace_concatstrings),
    BIN(trace_tostring),
    BIN(trace_freezestring),
    BIN(trace_toregexp),
    BIN(trace_intern),
    BIN(trace_newarray),
    BIN(trace_duparray),
    BIN(trace_expandarray),
    BIN(trace_concatarray),
    BIN(trace_splatarray),
    BIN(trace_newhash),
    BIN(trace_newhashfromarray),
    BIN(trace_newrange),
    BIN(trace_pop),
    BIN(trace_dup),
    BIN(trace_dupn),
    BIN(trace_swap),
    BIN(trace_reverse),
    BIN(trace_reput),
    BIN(trace_topn),
    BIN(trace_setn),
    BIN(trace_adjuststack),
    BIN(trace_defined),
    BIN(trace_checkmatch),
    BIN(trace_checkkeyword),
    BIN(trace_checktype),
    BIN(trace_defineclass),
    BIN(trace_send),
    BIN(trace_opt_send_without_block),
    BIN(trace_opt_str_freeze),
    BIN(trace_opt_str_uminus),
    BIN(trace_opt_newarray_max),
    BIN(trace_opt_newarray_min),
    BIN(trace_invokesuper),
    BIN(trace_invokeblock),
    BIN(trace_leave),
    BIN(trace_throw),
    BIN(trace_jump),
    BIN(trace_branchif),
    BIN(trace_branchunless),
    BIN(trace_branchnil),
    BIN(trace_getinlinecache),
    BIN(trace_setinlinecache),
    BIN(trace_once),
    BIN(trace_opt_case_dispatch),
    BIN(trace_opt_plus),
    BIN(trace_opt_minus),
    BIN(trace_opt_mult),
    BIN(trace_opt_div),
    BIN(trace_opt_mod),
    BIN(trace_opt_eq),
    BIN(trace_opt_neq),
    BIN(trace_opt_lt),
    BIN(trace_opt_le),
    BIN(trace_opt_gt),
    BIN(trace_opt_ge),
    BIN(trace_opt_ltlt),
    BIN(trace_opt_and),
    BIN(trace_opt_or),
    BIN(trace_opt_aref),
    BIN(trace_opt_aset),
    BIN(trace_opt_aset_with),
    BIN(trace_opt_aref_with),
    BIN(trace_opt_length),
    BIN(trace_opt_size),
    BIN(trace_opt_empty_p),
    BIN(trace_opt_succ),
    BIN(trace_opt_not),
    BIN(trace_opt_regexpmatch1),
    BIN(trace_opt_regexpmatch2),
    BIN(trace_opt_call_c_function),
    BIN(trace_bitblt),
    BIN(trace_answer),
    BIN(trace_getlocal_WC_0),
    BIN(trace_getlocal_WC_1),
    BIN(trace_setlocal_WC_0),
    BIN(trace_setlocal_WC_1),
    BIN(trace_putobject_INT2FIX_0_),
    BIN(trace_putobject_INT2FIX_1_),
    VM_INSTRUCTION_SIZE
};

#define ASSERT_VM_INSTRUCTION_SIZE(array) \
    STATIC_ASSERT(numberof_##array, numberof(array) == VM_INSTRUCTION_SIZE)
