null

{
        :no_arg       => 1,
        :var          => 2,
        :implicit_var => 1,
        :ldc          => 2,
        :ldc_w        => 3,
        :label        => 3,
        :method       => 3,
        :field        => 3,
        :int          => 2,
        :iinc         => 3,
        :type         => 3,
        :lookup_switch  => -1
      }.each do |type, size|
        class_eval %Q{
          def #{type}_instructions(*opcode, &block)
            instructions(#{size}, *opcode, &block)
          end
        }
      end

 

  {
    :Method => [:owner, :name, :desc],
    :Field  => [:owner, :name, :desc],
    :Var    => [:var],
    :Type   => [:type],
    :Int    => [:operand],
    :Iinc   => [:var, :incr],
    :Jump   => [:label],
    :Ldc    => [:constant],
    :LookupSwitch => [:default_label, :case_table]
  }.each do |type, args|
    module_eval <<-INSTRUCTION
    class #{type}Insn < Instruction
      attr_accessor #{args.collect{|item| ":#{item}"}.join(',')}

      def initialize(opcode, #{args.collect{|item| "#{item}"}.join(',')})
        super(opcode)
        #{args.collect{|item| "@#{item} = #{item}"}.join("\n")}
      end

      def ==(insn)
        super(insn) && #{args.collect{|item| "@#{item} == insn.#{item}"}.join('&&')}
      end
    end
    INSTRUCTION
 

你可能感兴趣的:(null)