1134,1156c
      if 0 <= rg['ctr', 1]
        rg.shift 'pc'
#      rg['pc'] = rg['pc', 1]
        @pc = rg['pc']

        rg.shift 'sp'
        @sp = rg['sp']
        @irep = irep

        rg.shift 'cop'
        rg.shift 'sym'
      end
#     ise.reject! { |fis| fis.resume}           # higokan ? GC 70410200
.
1003,1131c
        lpl.plini

        jsc.call

#     else
.
996,1001c
#      unless fl[0][0]
      unless fl.flatten[0]
#       rg.push('pc', rg['pc'] + 1)
#       rg.push('sp', rg['sp'])
        rg['ctr', 1] = rg['ctr', 1].abs
#       while ! lpl.ctr_c do Slp.new.slp end
.
993,994c
#     ise.reject! {&:resume}        # higokan ? monami-ya.mrb:60510200 mruby:70410200
#     ise.reject! { |fis| fis.resume}   # higokan ? GC 70410200
.
991a
        rg.push('pc', rg['pc', -1] + 1)
        rg.push('sp', rg['sp', -1])
      end
.
988,990c
        else
          next if pcoj.call
#       if 0 <= rg['ctr', 1]
#         sym = rg.shift('sym')
          pco = rg['pc'] if ?J == rg['sym'].to_s[0]     # q 
          rg['ctr', 1] *= -1    # kakezan
.
986c
          fl<< fls(rg['pc'] + 0)  # p 
#         fl[0].push fls(rg['pc'])
#         rg.push('pc', rg['pc', -1] + 1)
#         rg.push('sp', rg['sp', -1])
#         rg.shift('sym')
#       end
.
983,984c
#         ise<< iset(rg)  # p 
          0 <= rg['pc', nil, '-'] && ise<< iset(rg)    # p 
          next if pcoj.call

.
978,981c
#       sp = @sp
        @stack.sp(rg['sp']) # + 0

#       c, s = opf(irep, rg['pc'])
        c, sym = opf(irep, rg['pc'])
        rg.push('cop', c)
        rg.push('sym', sym)
#       rg.push('sym', s)
#      end

#      lpl.verb "#{rg['pc'].to_xeh}        #{rg['sym']}    #{rg['cop'].to_xeh}" # if rg['sym']
        lpl.verb "#{rg['pc'].to_xeh}       #{rg['sym']}    #{rg['cop'].to_xeh}" if rg['sym']

#       rg['pc'] *= -1 if pco == rg['pc']       # kakezan

#       if rg['sym'] && ?J != rg['sym'].to_s[0] && ! [:ENTER, :SEND, :RETURN, :NOP].include?(rg['sym'])         # q 
        if ?J != rg['sym'].to_s[0] && ! [:ENTER, :SEND, :RETURN, :NOP].include?(rg['sym'])      # q 
#       if ?J != sym.to_s[0] && ! [:ENTER, :SEND, :RETURN, :NOP].include?(sym)  # q 
#       if 0 <= rg['ctr', 1]
.
975,976c
#      fl[0][0] && fl[0][0].resume && fl[0] = (fl[0][1 .. -1] || [])
#      fl.reject!.with_index { |v, n| v.resume(n)}
      fl.reject_c!(1) { |v, n| v.resume(n)}

      if 0 <= rg['ctr', 1] || pco
        pco &&= nil
.
972a
#      ise.reject_c!(1) { |fis, n| fis.resume}
#      ise = reject_c_th(ise, 1) { |fis, n| fis.resume}
.
971d
968,969c
    while true
#   loop {              # higokan ? monami-ya.mrb:60510200 mruby:70410200
#   begin
.
966a
    }
    pco = nil
    pcoj = -> {              # l 
      if 0 > rg['ctr', 1]
        rg.pop 'cop'
        rg.pop 'sym'
#       true
      end # || false
    }
.
963,965c
        # メソッドの先頭で引数のセットアップする命令。面倒なので詳細は省略
      when :ENTER

        # SEND Ra, mid, anumでRaをレシーバにしてシンボルmidの名前のメソッドを
        # 呼び出す。ただし、引数はanum個あり、R(a+1), R(a+2)... R(a+anum)が引数
      when :SEND
#       a = getarg_a(cop)
#       a = lpl.getarg_a(cop)
        a = imem.getarg_a(rg['cop'])
#       mid = @irep.syms[getarg_b(cop)]
#       mid = irep.syms[lpl.getarg_b(cop)]
        mid = irep.syms[imem.getarg_b(rg['cop'])]
#       n = getarg_c(cop)
#       n = lpl.getarg_c(cop)
        n = imem.getarg_c(rg['cop'])
#       newirep = Irep::get_irep(@stack[@sp + a], mid)
        newirep = Irep::get_irep(@stack[a], mid)
        if newirep then
#         @callinfo[@cp] = @sp
#         @callinfo[@cp] = rg['sp']
#         @cp += 1
#         @callinfo[@cp] = @pc
#         @callinfo[@cp] = rg['pc']
#         @cp += 1
#         @callinfo[@cp] = @irep
#         @callinfo[@cp] = irep
#         @cp += 1
#             @callinfo[-3 + @cp += 3, 3] = [@sp, @pc, @irep]
          @callinfo[-3 + @cp += 3, 3] = [rg['sp'], rg['pc'], irep]

#         @sp += a
#         rg['sp'] += a
          rg['sp', -1] = rg['sp'] + a

#         @pc = 0
          rg['pc', -1] = 0
#         @irep = newirep
          irep = newirep
#         @irepid = @irep.id
          @irepid = irep.id

#         next
        else
          args = []
          n.times do |i|
#           args.push @stack[@sp + a + i + 1]
            args<< @stack[a + i + 1]      # p 
          end

#         @stack[@sp + a] = @stack[@sp + a].send(mid, *args)
          @stack[a] = @stack[a].send(mid, *args)
        end

        # RETURN Raで呼び出し元のメソッドに戻る。Raが戻り値になる
      when :RETURN
        if @cp == 0 then
#         return @stack[@sp + getarg_a(cop)]
#         return @stack[sp + lpl.getarg_a(cop)]
          return @stack[imem.getarg_a(rg['cop'])]
#         break @stack[imem.getarg_a(rg['cop'])]
        else
#         @stack[@sp] = @stack[@sp + getarg_a(cop)]
#         @stack[sp] = @stack[sp + lpl.getarg_a(cop)]
          @stack[0] = @stack[imem.getarg_a(rg['cop'])]
          @cp -= 1
#         @irep = @callinfo[@cp]
          irep = @callinfo[@cp]
#         @irepid = @irep.id
          @irepid = irep.id
          @cp -= 1
#         @pc = @callinfo[@cp]
#         pc = @callinfo[@cp]
#         rg['pc', -1] = @callinfo[@cp]
          rg['pc', -1] = @callinfo[@cp] + 1     # bagu syuusei
          @cp -= 1
#         @sp = @callinfo[@cp]
#         sp = @callinfo[@cp]
#         rg['sp'] = @callinfo[@cp]
          rg['sp', -1] = @callinfo[@cp]
        end
#     else
#       printf("Unkown code %s \n", OPTABLE_SYM[get_opcode(cop)])
#       printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
.
958,961c
        # JMPNOT Ra, nでもしRaがnilかfalseならpcをnだけ増やす。ただし、nは符号付き
      when :JMPNOT
#       if !@stack[@sp + getarg_a(cop)] then
#       if !@stack[sp + lpl.getarg_a(cop)] then
        if !@stack[imem.getarg_a(rg['cop'])] then
#         @pc = @pc + getarg_sbx(cop)
#         pc = pc + lpl.getarg_sbx(cop) - 1
          rg['pc', -1] = rg['pc'] + imem.getarg_sbx(rg['cop'])
#         next
        end
.
955,956c
    jsc = Proc.new {
#      case sym
      case rg['sym']

        # 何もしない
      when :NOP

        # JMP nでpcをnだけ増やす。ただし、nは符号付き
      when :JMP
#       @pc = @pc + getarg_sbx(cop)
#       pc = pc + lpl.getarg_sbx(cop) - 1
        rg['pc', -1] = rg['pc'] + imem.getarg_sbx(rg['cop'])
#       next

      when :JMPIF
#       if @stack[@sp + getarg_a(cop)] then
#       if @stack[sp + lpl.getarg_a(cop)] then
        if @stack[imem.getarg_a(rg['cop'])] then
#         @pc = @pc + getarg_sbx(cop)
#         pc = pc + lpl.getarg_sbx(cop) - 1
          rg['pc', -1] = rg['pc'] + imem.getarg_sbx(rg['cop'])
#         next
        end
.
951,953c
    rg = Rg.new([['ctr', 1], ['pc', @pc], ['sp', @sp], ['cop'], ['sym']])
.
949a
    sym = nil
.
947,948c
    fl = []
#   fl = [[], []]
.
941c
#    i_th = lpl.afl('th', ?i)           # q 
.
912,913c
#       Fiber.yield(0 != thi && ht <= thi)   ##
.
909,910d
901d
892,898c
#       pl.pl_es(pc1, opg.(thi) + [[k_sp, [sp]], []][thi <=> 0])  # c 
#       pl.pl_es(pc1, opg.(thi) + [[k_sp, [sp], 'ctr', -pc1], []][thi <=> 0])     # c 
        pl.pl_es(pc1, opg.(thi) + [[k_sp, [sp], :ctr_s, pc1], []][thi <=> 0])     # c 

#       (0 != thi && ht <= thi) ? thi = 0 : thi += 1

#       if 0 == thi
#         pl.ctr_s(pc1)
#       elsif ht <= thi
        if 0 != thi && ht <= thi
.
885c
    thi = 0     ##
.
875,877c
#         when 'th'
#           fv = (fvl.delete_at(((1 <=> fvl.size) << 1) + 1) || fvl[0]).(oi)        # c 
          when 'th' then fv = fvl[-1].(oi); fvl = fvl[0 .. fvl.size - 2]        # c 
.
834c
#       sl.slp 0
.
831c
#       Fiber.yield(@@fls2.resume(pc))
        m = Fiber.yield(@@fls2.resume(pc, m))
.
828a
#     m = Fiber.yield(false)
.
827c
#    Fiber.new {
    Fiber.new { |m = 1|
.
824a
#   sl = @@slp
.
817c
#       Fiber.yield(! flg.include?(false))      ##
#       pc = Fiber.yield(flg.all?)              ##
#       m = fy.(m, f)   # c 
        pc, m = fy.(m, f, pc)   # c 
.
810,815c
        unless f
          pl = lpl.pl_g(pc1)    ##
#       sp ||= s.sp(pl[i_sp][0])

#         sym, (r0, r1) = rslt pl       # higokan mruby 70410200        # bce75e27 2211410200 matz
          sym, r, flg = rslt(pl); r0, r1 = r

#       unless flg.include?(true) then fy(m, f); redo end
#         f = ! flg.include?(false)
          f = flg.all?
        end
        if 0 == m
          sp ||= s.sp(pl[i_sp][0])
          r0, r1 = r
          pr || (pr, sy = imem.fml('st', sym)[1 .. -1])

          isr0 = [i, s, r0]
#         flg[0] && ca[flg[1] ? 0 : 1].call
          flg[0] && ca[flg[1] ? 0 : 1].(r)      # c 
        end
#       @@slp.slp 0
.
801,808d
799a
          f = false # ; flg = [false, false]
.
793c
#    Fiber.new { |pc|   ##
#    Fiber.new {
#    Fiber.new { |m = 1|
    Fiber.new { |pc, m = 1|
.
784,791c
#    fy = ->(m, f) { @@slp.slp 0
    fy = ->(m, f, pc) { @@slp.slp 0
      lpl.verb "#{pc.to_xeh}                       #{sym}  #{r[0].to_xeh}  #{r[1].to_xeh}"
#      Fiber.yield(0 == m && f)
      Fiber.yield(f && 0 == m)
    }
.
775,776c
#         plr += lm.(isr0, s[sz, -1 + ap -= (ap + 3) >> 2])       # c 
          plr += lm.(isr0, s[sz .. sz + ap -= ap >> 2])           # c 
.
768,770c
#      -> {  # flg[0]
      ->(r) {        # flg[0]
#       ((sw = sp + sz) + 0xe).step(sw, -1) {   # higokan mruby 70410200        # bbab89e7 5211410200 tmtm
#       sz.step(sz + ap -= ap >> 2) { |n| plr<< lm.(isr0, s[n])}    # p c 
.
761c
#      -> {  # flg[0] && flg[-1]
#      -> {  # f
      ->(r) {        # f
.
753,755c
#      sz = 1; ap = @@fls_m
      sz = 4; ap = @@fls_w ||= (1 << sz) - 1 - 1
#     sz = 4; @@fls_m || (ap = @@fls_w ||= (1 << sz) - 1 - 1; @@fls_w = nil)
      sz -= 2; ap = @@fls_m ||= ((ap << sz) + ap >> sz - 1) + 1 >> 1
.
751a
      f = false; flg = [false, false]
      r = [] # nil # ; rs = [?-, ?-]    # q 2 
.
749c
#      isr0, r0, r1, pr, sy = nil
      isr0, r0, r1, pr, sy, sym = nil
.
745c
#      s = Stack.new; sp = nil; plr = nil
      pl = nil; s = Stack.new; sp = nil; plr = []
.
738c
      pc = 0
      pc1 = pc + 1
#      pc1 = 0
.
725,728c
#  @@fls_w = 4; @@fls_m = (1 << @@fls_w) - 1 - 1
#  @@fls_w -= 2
#  @@fls_m = ((@@fls_m << @@fls_w) + @@fls_m >> @@fls_w - 1) + 1 >> 1
#  @@fls_w = nil
  @@fls_w, @@fls_m = nil
.
718c
    r = pl[lpl.afl('th', ?i)]           # q 
.
669d
640a
#    v = -v if 'pc' == k && v == @a.assoc(k)[i] && knid(v, :Numeric)
    'pc' == k && case v when Numeric then v == @a.assoc(k)[i] && v = -v end     # cp 
.
636,637c
#    i ||= @a.assoc('ctr')[1].abs
    i ||= @a.assoc('ctr')[1]
.
631c
#   @a.assoc(k)[i]
    v = @a.assoc(k)[i]
#   v = v.abs if knid(v, :Numeric)              # cp 
    v = v.abs if 'pc' == k && ?- != m           # cp    # q 
    v
.
626,629c
# def [](k, i = @i)
  def [](k, i = nil, m = nil)
#   i ||= @a.assoc('ctr')[1].abs
    i ||= @a.assoc('ctr')[1]
.
617a
  def pop(*a)
    @a.assoc(a.shift).pop
  end

.
595a
#      a = @s[@p + a[0].sgp] = a[1]
.
547c
#      fpl.reject! { |fb| fb.resume}
#     fpl.reject! {&:resume}                # higokan ? monami-ya.mrb:60510200 mruby:70410200
#      fpl.reject_c!(1) { |fb, n| fb.resume}
      fpl = reject_c_th(fpl, 1) { |fb, n| fb.resume}
.
498,521c
        Fiber.yield([(f = #### th[idx].nil?.! && # fuguai taisaku
                        ckth(th[mx], 3)) && # ))) &&
                                (pl_es(pc, ['th', th]); true),
                        sl.slp(0)
        ][0] && idx >= mx)
        f && idx -= (idx <=> mx) >> 1       ##
.
495a
        mx = thn.hgt
#       mx ||= thn.hgt
.
490c
    f = nil # ; mx = nil
.
465c
    (tb == a || knid(a, :Array).! || 1 >= a.size) && (return a)
.
463c
#   ([] == a || knid(a, :Array).! || 1 >= a.size) && (return a)      # t 
.
461a
    tb = TB
.
406a
    aa.each_slice(2) { |k, v| send(k, v)}
.
404c
#     'ctr' == k && case v when Array then true end.! ? pl[i_k]<< v : pl[i_k] = v # p     # higokan ? mruby 70410200
.
402d
400a
#     'ctr_s' == k && break(-v) # higokan ? mruby 70410200
#     knid(k, :Symbol) && (aa.push(k, v); next)
#     knid(k, :Symbol) && (aa.push(k, v); break)
      case k when Symbol then aa.push(k, v); break end
.
395a
    aa = []
.
357c
#   sleep 0; GC.start; sleep 0  # g 
.
353,354c
# @@Idx0 = ->(n = 0, t = 1) {n + (t > n ? 1 : 0)} # l 
.
281c

#   if 1 < self.size #    self.size : 0 ??   # higokan ? mruby:70410200 monami-ya.mrb:60510200
    if self[1]
#     self.replace(self[0 .. self.size & ((n = @@rmth + 1) << 1) | n])        # ??    # higokan ? mruby:70410200 monami-ya.mrb:60510200
#     self.slice!((self.size & ((n = @@rmth + 1) << 1) | n) + 1 .. -1)        # higokan mruby:70410200 monami-ya.mrb:60510200
      self[0 .. -1] = self[0 .. self.size & ((n = @@rmth + 1) << 1) | n]
    end
.
277,278d
274c
    # 3080410200 : 5x2 ok ( gc ) : monami-ya.mrb 8270410200 813e2af8    # www.monami-ya.jp
.
266d
260,261d
210,211c
#    case a[4]
    case a[@@I_s__r1 + 1]
#    when Array then return a[4].map{ |v| v.nil? ? v : send(*a[0 .. 3], v)}
    when Array
      a[@@I_s__r1 + 1].map{ |v| v.nil? ? v : send(*a[0 .. @@I_s__r0 + 1], v)}
.
208d
136,137c
#   @fml.(lb).assoc(sym)                # c 
    @@fml.(lb).assoc(sym)               # c 
.
85a

  def reject_c!(i = nil)
    a = self
#    unless i
#      a.reject! { |v| yield v}
#    else
#     a.compact!
#      a.each.with_index(0) { |v, n| break if n >= i
#       v && yield(v, n) && a.delete_at(n)
#      }

      (i > n = a.size) && i = n
      n = c = 0
      while c < i
        a[n] && yield(a[n], c) && a.delete_at(n) || n += 1
#       (v = a[n]) && yield(v, c) && a.delete_at(n) || n += 1
        c += 1
      end
#    end
    self.replace a
  end

  def reject_c_th(a, i = nil)
#    unless i
#      a.reject! { |v| yield v}
#    else
#     a.compact!
#      a.each.with_index(0) { |v, n| break if n >= i
#       v && yield(v, n) && a.delete_at(n)
#      }

      (i > n = a.size) && i = n
      n = c = 0
      while c < i
        a[n] && yield(a[n], c) && a.delete_at(n) || n += 1
#       (v = a[n]) && yield(v, c) && a.delete_at(n) || n += 1
        c += 1
      end
#    end
    a
  end
.
2a
TB = []

.



-- 
YAMAGUTIseisei ( str_h__namae = { :sei => "山口" , :mei => "青星" } )
http://hello.to/seisei/ mailto:seisei@.68..net  tel:081-70-5152-1104
heiwa furiisekkusu 1tu