Y1245a
#     0.step(@@rmth) { |n|      # higokan ? touki
#       fl.shift && redo if fl[n] && fl[n].resume(n) && 0 == n
#       break if n >= ht ||= fl.hgt
#     }
.
1240c
#       stack.sp rg['sp']
        stack.ps rg['sp']
        @irep[0] = irep
.
1235d
1230d
1228a
#       callinfo, irep, rg = @@jsc.(stack, callinfo, irep, rg, imem)    # c 
.
1221,1222c
#     unless fl.flatten[0] && ! pco     # wait
.
1219d
1216,1217c
#     ist = Thread.new {
##      ise.reject! { |fis| fis.resume} # higokan ? GC 70410200
#     }
.
1207,1209c
#         pco = rg['pc'] if ?J == rg['sym'].to_s[0]     # q 
          (pco = rg['pc']; pctj<< pco + 1) if ?J == rg['sym'].to_s[0]     # q 
.
1197,1203c
          fl<< fls(rg['pc'])      # p 
.
1194c
#         ise<< iset(rg) if 0 <= rg['pc', nil, '-']    # p     # cp 
          ise<< iset(rg) if 0 <= rg['pc', nil, '-'] && pctj.pop != rg['pc']    # p     # cp 
.
1190,1192d
1188d
1186c
        lpl.verb "#{rg['pc'].to_xeh}       #{rg['sym']}    #{rg['cop'].to_xeh}" # if rg['sym']
.
1180,1184d
1172,1177c
#       c , sym = opf(irep, rg['pc'])
        c , sym = @@opf.(irep, rg['pc'], imem)  # c 
.
1165,1167d
1162,1163d
1147a

.
1146a

#    [callinfo, irep, rg]
.
1145a
        end
.
1143c
      else
        if ?J == rg['sym'].to_s[0]      # q 
          jm.(cop, sym)         # c 
#       else
.
1141c
#         rg['sp', -1] = @callinfo[@cp]
          rg['sp', -1] = callinfo[0]
.
1136,1137c
#         rg['pc', -1] = @callinfo[@cp] + 1     # bagu syuusei
          rg['pc', -1] = callinfo[0] + 1
#         @cp -= 1
          callinfo.pd
.
1132c
#         @cp -= 1
          callinfo.pd
.
1129c
#         irep = @callinfo[@cp]
          irep = callinfo[0]
.
1125,1127c
#         @stack[rg['sp']] = @stack[rg['sp'] + imem.getarg_a(cop)]
          stack[0] = stack[imem.getarg_a(cop)]
#         @cp -= 1
          callinfo.pd
.
1120,1121c
#         return @stack[rg['sp'] + imem.getarg_a(cop)]
          return stack[imem.getarg_a(cop)]
.
1118c
#       if @cp == 0 then
        if 0 == callinfo.pg
.
1113,1114c
#         @stack[rg['sp'] + a] = @stack[rg['sp'] + a].send(mid, *args)
          stack[a] = stack[a].send(mid, *args)
        end
.
1109c
            args<< stack[a + i + 1]       # p 
.
1090,1091c
#         @callinfo[(@cp += 3) - 3, 3] = [rg['sp'], rg['pc'], irep]
          callinfo[0 .. 2] = [rg['sp'], rg['pc'], irep]
          callinfo.p += 3
.
1088a
#         callinfo[0] = irep
.
1085a
#         callinfo[0] = rg['pc']
.
1082a
#         callinfo[0] = rg['sp']
.
1079c
#       newirep = Irep::get_irep(@stack[rg['sp'] + a], mid)
        newirep = Irep::get_irep(stack[a], mid)
.
1076,1077c
        n = imem.getarg_c(cop)
.
1073,1074c
        mid = irep.syms[imem.getarg_b(cop)]
.
1070,1071c
        a = imem.getarg_a(cop)
.
1061a
      end
    }

#  @@jsc = Proc.new { |stack, callinfo, irep, rg, imem|
    jsc = Proc.new { # |stack, callinfo, irep, rg, imem|
      cop, sym = rg['cop'], rg['sym']

      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(cop)
##      next

#      when :JMPIF
##      if @stack[@sp + getarg_a(cop)] then
##      if @stack[rg['sp'] + imem.getarg_a(cop)]
#       if stack[imem.getarg_a(cop)]
##        @pc = @pc + getarg_sbx(cop)
##        pc = pc + lpl.getarg_sbx(cop) - 1
#         rg['pc', -1] = rg['pc'] + imem.getarg_sbx(cop)
##        next
#       end

#       # JMPNOT Ra, nでもしRaがnilかfalseならpcをnだけ増やす。ただし、nは符号付き
#      when :JMPNOT
##      if !@stack[@sp + getarg_a(cop)] then
##      if !@stack[rg['sp'] + imem.getarg_a(cop)]
#       if !stack[imem.getarg_a(cop)]
##        @pc = @pc + getarg_sbx(cop)
##        pc = pc + lpl.getarg_sbx(cop) - 1
#         rg['pc', -1] = rg['pc'] + imem.getarg_sbx(cop)
##        next
#       end
.
1059c
          rg['pc', -1] = rg['pc'] + imem.getarg_sbx(cop)
.
1055,1056c
#       if !@stack[rg['sp'] + imem.getarg_a(cop)]
        if !stack[imem.getarg_a(cop)]
.
1048c
          rg['pc', -1] = rg['pc'] + imem.getarg_sbx(cop)
.
1044,1045c
#       if @stack[rg['sp'] + imem.getarg_a(cop)]
        if stack[imem.getarg_a(cop)]
.
1039c
        rg['pc', -1] = rg['pc'] + imem.getarg_sbx(cop)
.
1032,1033c
      case sym
.
1028,1030c
    jm = ->(cop, sym) {              # l 
.
1023a
    pctj = []
.
1015,1018d
1011c
    @irep[0] = irep
.
1009a
    stack = Stack.new
#    callinfo = Stack.new(0, 'c')
#    callinfo = Pary.new []
    callinfo = Stack.new(0, [])
.
1004c
#  end
  }
.
1001d
992,993c
  @@iset2 = nil
  def iset(rg)
#   rgd = rg.dup
    rgd = rg.to_a('pc', 'sp', 'cop', 'sym')
#   sl = @@slp
    @@iset2 ||= iset2

    Fiber.new {
      loop {
        Fiber.yield(@@iset2.resume(rgd))
        rgd &&= nil
#       sl.slp 0
      }
    }
  end

#  def opf(irep, pc)
  @@opf = ->(irep, pc, imem) {       # l 
#    imem = @imem
.
987a
        rg = Fiber.yield(0 > thi)    ##
        thi += 1
.
986c
#       Fiber.yield(0 > thi) ##
.
979a
        pl.pl_es(pc1, opg.(thi) + [[k_sp, [sp], :ctr_s, pc1], []][thi <=> 0])     # c 

#       if 0 != thi && ht <= thi
#         thi = -1
#       end
        0 != thi && ht <= thi && thi = -1

.
973,977c
          th = []       ##
#         thi = 0
.
971c
          fml = imem.fml('th', sym) || (
#           printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
            pl.verb("Unkown code #{sym} ") # .to_s
#           return nil
#           raise
#           rg = Fiber.yield(nil)
          )
.
966,969c
#     [1].cycle.with_index { |t, thi|
        if rg
#         pc, sp, cop, sym = rg.to_a('pc', 'sp', 'cop', 'sym')
          pc, sp, cop, sym = rg
          pc1 = pc + 1
.
962,963c
#   Fiber.new { ##
    Fiber.new { |rg|
      loop {    ##
.
951,952c
#           fv = fvl[1][-1].(oi); fvl[1] = fvl[1][0 .. fvl.size - 2]    # c 
#         when 'th' then fv = fvl.(oi)  # c 
          when 'th' then fv = fvl[oi <=> 0].(oi)  # c 
.
949a
#         when 'th' then fv = fvl[-1].(oi); fvl.delete_at(1)    # c 
.
938,940c
#    fvl = [->(oi) {th += [[fv[oi] && imem.ta(fv[oi], cop)], []][            # l c 
#            (oi <=> ht = fv.hgt) + 1 >> 1]},
#          ->(oi) {[fv[oi] = th[oi] = (imem.ta(fv[oi], cop)), []]}] # .lazy  # l c 
#   fvl = ->(oi) {[  # l 
#     -> {[fv[oi] = th[oi] = (ta.(fv[oi])), []]},    # l c 
#     -> {th += [[fv[oi] && ta.(fv[oi])], []][               # l c 
#       ((ht = fv.hgt) <=> oi) >> 1]}][oi <=> 0].call # .lazy
#   }
    fvl = [->(oi) {[fv[oi] = th[oi] = (imem.ta(fv[oi], cop)), []]},  # l 
           ->(oi) {th += [[fv[oi] && imem.ta(fv[oi], cop)], []][     # l 
                ((ht = fv.hgt) <=> oi) >> 1]}] # .lazy
.
927,932c
    fml = []
.
920,921c
#   pc1 = pc + 1
    pc1 = 0
.
914,918c
# def iset(rg)  ##
  def iset2     ##
#   pc, sp, cop, sym = rg.to_a('pc', 'sp', 'cop', 'sym')
    pc, sp, cop, sym = nil
.
883,886d
880d
875,877c
#         sp ||= s.sp(pl[i_sp][0])
          sp ||= s.ps(pl[i_sp][0])
#         r0, r1 = r
#         pr || (pr, sy = imem.fml('st', sym)[1 .. -1])
          pr || (pr, sy, mt = imem.fml('st', sym)[1 .. -1])
.
870,872c
          f = ! flg.include?(false)
#         m = fy.(m, false)
.
865d
856,860c
#         pc = ~ pc
#         pc1 = pc + 1
#         sp = nil; plr = []
#         pr = nil
#         f = false # ; flg = [false, false]

          pc = ini.(pc)         # c 
.
850,851d
846d
837,840c
      }         # rs[1] = r0.to_xeh
.
833,835c
#         sz = plr.size
#         plr += lm.(isr0, s[sz .. sz + ap -= ap >> 2])           # c 
#         plr += lm.(isr0, s[(sz = plr.size) .. sz + ap -= ap >> 2])      # c 
          plr +=
            lm.(isr0, s[(sz = plr.size) .. sz + ap = (ap >>= 1) + (ap >> 1)])       # c 
.
822,825c
#       r = plr[r1] || lm.(isr0, r1)                    # c 
#       _ = r[1] <= sz && plr[r[1]] || lm.(isr0, r[1])       # c 
        _ = plr[r[1]] || lm.(isr0, r[1])                # c 
#       s[r1] = sy ? [s[r1], r].inject(sy) : r
        s[r[1]] = sy ? [s[r[1]], _].inject(sy) : _
      },        # rs = [r1.to_xeh, r0.to_xeh]},
.
817d
814c
#    ini = ->(pc) { [pc = ~ pc, (
    ini = ->(pc) { (pc1 = [~ pc, (
#       pc1 = pc + 1
        sp, pr = nil; plr = []
        f = false # ; flg = [false, false]
#      )][0]
      )][0] + 1) - 1
    }

#   lm = ->(isr0, r1) {r1 && imem.send(pr, *isr0, r1)}                       # l 
    lm = ->(isr0, r1) {r1.nil? ? r1 : imem.send(pr, *isr0, r1, mt)}  # l 
.
810d
808d
806c
      r = nil
.
804d
801,802c
#      isr0, r0, r1, pr, sy, sym = nil
#      isr0, r0, r1, pr, sy, sym, mt = nil
      isr0, pr, sy, sym, mt = nil
.
796d
787,789c
#     pc = 0
#     pc1 = pc + 1
      pc1 = 0
.
778,782c
# def fls(pc)   ##
  def fls2      ##
.
773,776d
740,741d
725,726c
#   @cp = 0                     # callinfoのポインタ
    @irep = [nil]               # 現在実行中の命令列オブジェクト
.
721,722c
#   @stack = Stack.new          # スタック(@spより上位をレジスタとして扱う)
#   @callinfo = []              # メソッド呼び出しで呼び出し元の情報を格納
.
688d
639a
  def pg() @p      end
  def pi() @p += 1 end
  def pd() @p -= 1 end

# def sp(*a)
#  def sp(pt)
  def ps(i)
#   id = self.object_id
#   a.empty? || @p = a[0]
#    @p = pt
    @p = i
#   @p
  end

.
634a
#      @s[@p + a[0].sgp] = a[1]
.
613,620c
#    @s
.
610a
#      s = @s
.
603a
  attr_accessor :p
.
602c
#  @@s = []
  @@s = AryM.new
.
600a
##module M__Pary
##  def initialize(*a)
##    @a = a.shift
##    @i = (a[-1] || 0)
##  end
##
###  def pg
###    @i
###  end
##
###  def pg
###    @i
###  end
##
##  def pg()     @i      end
##  def ps(i = @i) @i  = i end
##  def pi()     @i += 1 end
##  def pd()     @i -= 1 end
##
##  def []=(i, v)
##    @a[ipt(i)] = v
##  end
##
##  def [](i)
##    @a[ipt(i)]
##  end
##
### private
##
##  def ipt(i)
##    @i + ((i + i.abs) >> 1)
##  end
##end
##
##class Pary
##  include M__Pary
##end
#
##  @@stack = Pary.new []
### @@stack = [['s', Pary.new([])], ['c', Pary.new([])]]

# module M__AryM        # higokan ? mruby 70410200
class AryM < Array
  def [](*a)
    super
  end

  def []=(*a)
    super
  end
end

# class AryM < Array
#  include M__AryM
# end

.
584d
582d
554c
                        sl.slp(0) # (0, 4096)
.
552c
                        ckth(th[mx], 3)) &&
.
550a
        mx = thn.hgt
#       mx ||= thn.hgt
.
547,548d
516c
#    (tb == a || knid(a, :Array).! || 1 >= a.size) && (return a)
    (tb == a || knid(a, :Array).! || 0 >= a.hgt) && (return a)
.
461a

#    ctr = (cta = pl_g(0).afl('ctr', self)).shift
#    pl_es(0, ['ctr', cta])
#    ctr
.
451a
#     i_k = loop {self.afl(k, ?i) && break}     # q     # fuguai taisaku
.
421d
411d
406d
404d
323,327c
#    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

    self[1] && self[0 .. -1] =
        self[0 ... self.size & ((n = @@rmth + 1) << 1) | n]
.
316c
    # 3080410200 : 5x2 ok ( gc ) : monami-ya.mrb 8270410200 813e2af8    # http://www.monami-ya.jp/
.
152a
# module M__Rou

# class Rou
# include RiteOpcodeUtil
# include M__Rou
# end

.
110c
# def reject_c_th(a, i = nil)
  def reject_c_th(a, i)
.
89c
# def reject_c!(i = nil)
  def reject_c!(i)
.



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