# -*- coding: iso-2022-jp -*-
# include MMM # conf.gem :github => 'miura1729/mruby-mmm'
((((((((( [ # Thread.new { [
:ctr, :th, :th0, :th1 , :sym, :cop, :sp, :pc,
:_ctr_s, :s, :p, :r, :c, :fml_th_bt, :fmli,
:Array, :Numeric, :Fixnum, :Symbol, # :String,
:-, :/, :*, :+, :ji_ngq,
:_a, :_b, :_sbx, :_bx, :_c,
:getarg_a, :getarg_b, :getarg_sbx, :getarg_bx,
:mk_opcode, :getarg_c,
:MOVE, :LOADL, :LOADI, :LOADSYM, :LOADSELF, :LOADT,
:ADD, :ADDI, :SUB, :SUBI, :MUL, :DIV, :EQ, # :LOADF,
:JMP, :JMPIF, :JMPNOT, :RETURN, :SEND, :ENTER, :NOP,
:sr0, :r0, :sr01, :r1_eq_sr01,
:s__send, :__pool, :__syms,
:fibt, :FRTH].clear # , :FORTH, :FOURTH, :$DEADC0DE
# GC.start # g
NSL_ = 6309 # OSX/PPC : 20476309 ? # nanosleep()
# NSL_ = 10065 # OSX/PPC : 20480065 ? # nanosleep()
TS = 3
NTH = 1 # = 68060
MTH = 1 # = 6809
PUTSN = 0 # = ~ 0 # = ~ 68 # = 0xbe
VMD = 0 # = 1
FL = '~~ritepl'
TB = []
THLB = :th
MH_THL = (0 .. 1).map { |n| THLB.to_s << n.to_xeh}
LV__VRB = 1
TABU1 = 8 - 1
I_V = 1; I_V_ = 1 - I_V
STR__GETARG = 'getarg' # $str__getarg
# $rmtb = false
# $rmt = [Thread.new {Pl.new.plm(1)}]
module M__H
# rmth = 63
# rmth = 47
# @@rmth = 39
@@rmth = 7
@@ts = TS + (NSL_ >> 0x1a) # = (@@rmth >> 1) + 1 # = $$ + 1
end
module M__Symbol
def [](n) self.to_s[n] end
def <<(s) (self.to_s << s.to_s) # .to_sym
end
end
class Object # class Symbol # .:mrblib:irep.rb ?
include M__Symbol
end
module M__Object
# def mapr(&b)
# knid(self, :Array) ? self.map { |v| v.__method__ b} : yield(self)
# end
# def mapr(a, &b)
# a.map { |v| knid(v, :Array) ? __method__(v, b) : yield(v)}
# def mapr(&b)
# self.map { |v| knid(v, :Array) ? v.__method__(b) : yield(v)}
# def to_i_from(k, i = 0)
## self.is_a?(k) ? i + self.to_i : self # unwork ? ( thread ? ) # mrblib/
## knid(k, self) ? i + self.to_i : self # unwork ? ( thread ? ) # mrblib/
# self.class.to_s == k.to_s ? i + self.to_i : self # unwork ? ( thread ? ) # mrblib/
# end
# def kind_of?(k)
## self.class == k.class
# self.kind_of?(k) # unwork ? ( thread ? )
# end
def knid(v, k)
## return v.kind_of?(Object.const_get k) # if 0.kind_of?(Numeric) # super
# return v.kind_of?(Kernel.const_get k) # if 0.kind_of?(Numeric) # super
## return v.kind_of?(k.constantize) # if 0.kind_of?(Numeric) # RoR # super
# case k.to_s[1] # .to_sym[1] # higokan mruby 70410200
case v when Kernel.const_get(k) then true end.!.!
end
def to_xeh
case self when Numeric then self.to_s(0x10).reverse else ?- end
end
# def getarg
# def getarg__
# ?_ == (s = self.to_s)[0] && self.replace("getarg" << s)
# end
end
class Object
include M__Object
end
module M__Numeric
# def to_xeh # unwork mruby 60410200 # mrblib/
# def absb(i)
## self + (((0 <=> self) + 1 >> 1 << 0x10) - 1 & self << 1)
# i + (((0 <=> i) + 1 >> 1 << 0x10) - 1 & i << 1)
## i + (((0 <=> i) + 1 >> 1 << 0x20) - 1 & i << 1)
# end
# def pid_g; $$ || self end
end
class Numeric
include M__Numeric
end
module M__Range
def +(i = 0)
i + self.first .. i + self.last - (self.exclude_end? ? 1 : 0)
end
end
class Range
include M__Range
end
module M__Array
include M__H
# def ijr(&b)
# yield self.map { |v| knid(v, :Array) ? v.__method__(b) : v}
# end
def afl(k, m = self) # unwork ( thread ? ) # mrblib/
# self[0].index(k) # higokan mruby 10410200 ( irep.rb )
?i != m ? self[m.afl(k, ?i)] : # .__method__(k, ?i)] : #? mruby 410200 # q 2
(s0 = self[0]).index(s0.assoc(k)) # self.index(idx)
# loop {(s0 = self[0]).index(s0.assoc(k)) && break} # self.index(idx) # fuguai taisaku
end
# def height # unwork ( thread ? ) # mrblib/
# self.size - 1
# end
# def delif_c(i, a = self) # # higokan ? mruby-thread:410200 monami-ya.mrb:60510200 mruby:70410200
# def delif_c(i = @@ts, a = nil, fr = 0)
def delif_c(i = @@ts, fr = 0, a = nil)
# f = (a == self) # higokan ? mruby-thread:410200 monami-ya.mrb:60510200 mruby:70410200
# i.! ? a.delete_if(&:yield) : a.each_with_index { |v, n|
# break if n >= i; v && yield(v, n) && a.delete_at(n)}
## [! a, ( # fuguai taisaku
a ||= self # a ||= f = self # a ||= (f = true; self)
n = fr + (fr = fr.abs) >> 1
((i > fr = a.size - fr) || 0 == i) && i = fr
i.times { |fr|
# (i = a[n]) && yield(i, fr) && (next a.delete_at(n)); n += 1
# a[-1 + n += 1] && yield(a[n - 1], fr) && a.delete_at(n -= 1)
(i = a[-1 + n += 1]) && yield(i, fr) && a.delete_at(n -= 1)
}
## )][0] ? self.replace(a) : # f ? self.replace(a) : # fuguai taisaku
a
end
end
class Array
include M__Array
end
# module M__Fiber
# def yield(a)
# [super, (sl = Slp.new).slp 0][0]
# end
# end
#
# class Fiber
# include M__Fiber
# end
# module M__CaAry_
# (
# @@ca = []
# ## @@ctr = -1
# @@m = Mutex.new
# @@ofs = MTH # + 1
# )
#
# def initialize(a = [], id = 0, ofs = @@ofs)
# # @ca = [] # cannot set instance variable (ArgumentError)
# # @@ca[ofs + id + @@ctr += 1] = a
# @@ca[ofs + id] = a
# end
# end
#
# class CaAry_ < Array
# include M__CaAry_
# end
module M__Mlok
@@m = nil
def initialize(m = @@m)
@m = m ||= Mutex.new
end
def mlok(&b)
@m.lock
yield
@m.unlock
end
end
class Mlok
include M__Mlok
end
MLOK = Mlok.new
module M__Slp
# @@m = Mlok.new
# @@m = MLOK
# @@slp = 7; @@slp = # [ #? mruby 410200
# (((NSL_ >> 9 - @@slp) + (NSL_ >> 7 - (@@slp - 7))) >> @@slp) + 1 >> 1
# @@slp = 2; @@slp = # [ #? mruby 410200
# (((NSL_ >> @@slp) + (NSL_ >> 5 + @@slp)) >> 9 - @@slp) + 1 >> 1
# ].lazy #? mruby 410200
# @@nsl_ = [ #? mruby 410200
@@slp = # conf.gem :github => 'matsumotory/mruby-sleep' # 'bamchoh/mruby-sleep' # msleep usleep
(((@@slp = NSL_ >> 2) + (@@slp >> 5)) >> 7) + 1 >> 1
# (((@@slp = NSL_ >> 1) + (@@slp >> 5)) >> 8) + 1 >> 1
# (( NSL_ + (NSL_ >> 5)) >> 8) + 2 >> 2 # 16+ bit MPU
# ].lazy #? mruby 410200
# @@slp = 0xbe # nanosleep()
# @@ctr = 0
# def initialize; @@slp = @@nsl_.force[0] end #? mruby 410200
def slp(t = @@slp, r = 1, &b)
# t += 1 - (t <=> 0) # 1 <=> t
(r - 1).times {usleep 0}; b && yield; r.times {usleep t} # g # conf.gem :github => 'kimushu/mruby-sleep' # msleep usleep
# (r - 1).times {msleep 0}; b && yield; r.times {msleep t} # g # usleep yobi
# (r - 1).times {sleep 0}; b && yield; r.times {sleep t} # g
# (r - 1).times {usleep 0}; r.times {usleep t}
# (r - 1).times {msleep 0}; r.times {msleep t} # usleep yobi
# (r - 1).times {sleep 0}; r.times {sleep t} # antei ?
# (r - 1).times {sleep 0}
# r.times {sleep t}
# (self.size << 4).times {sleep 0; (true == true).is_a?(Object); sleep 0}
# [true][Time.now.to_f.to_s.split(?.)[1].to_i & 15] && GC.start # q # g
# [true][(@@ctr += 1; @@ctr &= 3)] && GC.start # g
end
# def plwt(m = 1)
def plwt(m = 1, sl = nil)
sl && slp(sl)
sf = 2 # (@@ts >> 1) + 1
((m >> sf) + 1).times { |n| yield n}
end
end
class Slp
# include M__H
include M__Slp
end
SLP = Slp.new
module M__Plok # Inspired by Professor NAGAI Hidetosi
http://rubykaigi.org/2011/ja/schedule/details/17S05/#KyuTech
(
# @@m = Mlok.new
@@mlok = MLOK
# @@m = Mutex.new
@@Slp = SLP
# @@Imem = IMEM
) # .move # ? # conf.gem :github => 'miura1729/mruby-mmm'
# attr_accessor :ji_ngq
def initialize(nm = nil)
@nm = nm
## @ji_ngq = true
end
def plok(*a)
## @@mlok.mlok {
## @@m.lock
# GC.disable # g
# s = nil
begin
## @@Slp.slp 0 # read syoutotu taisaku
f = File.open(@nm, ?w) # q
f.flock(File::LOCK_EX)
rescue
# f.close # ?
# (s ||= @@Slp).slp 0 # higokan ? mruby 70410200
@@Slp.slp 0
### @nm && retry
end ## if @ji_ngq
GC.disable # hituyou <-> monami-ya.mrb:60510200 osoku-naru , mruby:70410200 SeguFo(-nado?) # g
## @@m.unlock
[yield(a), GC.start, ## @ji_ngq && # g
f.close][0]
# @@m.unlock][0]
# ][0]
# a = yield(r)
## }
## @@m.unlock
end
end
class Plok
include M__Plok
end
LOC = Plok.new(FL << ?. << 'lok'.replace('loc')) # q
# LOC = Plok.new(FL << ?/ << 'lok'.sub(/lok/, 'loc') # RISC OS ? # q
# Plok.new(FL << '/' 'lok'[''] = 'loc') # RISC OS ? # higokan monami-ya.mrb:60510200 mruby:70410200
module M__Rou
# @@I_s__stack = @@I_s__irep =
# @@I_s__i = 0; @@I_s__r0 = 1; @@I_s__r1 = 2; @@I_s__mt = 3
def getarg__(s)
?_ == (s = s.to_s)[0] ? 'getarg' << s : s # q # higokan monami-ya.mrb:60510200 mruby:70410200 : STR__GETARG , $str__getarg
end
# def s__i_pool_r0( *a) a[@@I_s__i].pool[ a[@@I_s__r0]] end
# def s__i_syms_r0( *a) a[@@I_s__i].syms[ a[@@I_s__r0]] end
def s__sr0( *a) a[0][ a[1]] end
def s__r0( *a) a[1] end
def s__sr01( *a) a[0][ a[1] + 1] end
# def s__i__r0( *a) a[0].send(a[3])[ a[1]] end
def s__send( *a) a[0].send(a[3])[ a[1]] end
def s__r1EQsr01(*a) a[2] &&
a[0][a[1] + 1] == a[0][ a[2]] end
def method_missing(*a)
# '__' != a[0][0 .. 1] ? # higokan mruby 70410200
if '__' != (a[0] = a[0].to_s)[0 .. 1]
a[0] = 's__' << a[0]
case a[3] # a[@@I_s__r1 + 1]
when Array then return a.pop.map{ |v| v.nil? ? v : send(*a, v)} # r
## when Array then a.pop.map{ |v| v.nil? ? v : self.send(*a, v)}
else send(*a)
end
else
send(:s__send, a[1][2 .. -1], *a[2 .. -1]) # higokan mruby 70410200
## send(:s__send, a[1].to_s[2 .. -1], *a[2 .. -1])
end
end
end
class Rou
include RiteOpcodeUtil
include M__Rou
end
ROU = Rou.new
#module M__RiteOpcodeUtil__Getarg__
# def getarg__(s)
# ?_ == (s = s.to_s)[0] ? 'getarg' << s : s # q # higokan monami-ya.mrb:60510200 mruby:70410200 : STR__GETARG , $str__getarg
# end
#end
module M__Imem
@@Loc = LOC
# @@fml_th_bt = [['sym', true, 'th', true], ['sym', false, 'th', true]]
@@fml_th_bt = [[:sym, true, :th, true], [:sym, false, :th, true]]
@@fmli = ['st', 'th']
@@fml = [
[:MOVE, [:sr0 ], [[:_b ], []]],
[:LOADL, [:__pool ], [[:_bx ], []]],
[:LOADI, [:r0 ], [[:_sbx ], []]],
[:LOADSYM, [:__syms ], [[:_bx ], []]],
[:LOADSELF, [:sr0 ], [[:mk_opcode, 0 ], []]], # mk_opcode 0
[:LOADT, [:r0 ], [[true , '', 0 ], []]],
# [:LOADF, [:r0 ], [[false , '', 0 ], []]], # ?
[:ADD, [:sr01, :+ ], [[]]],
[:ADDI, [:r0, :+ ], [[:_c ], []]],
[:SUB, [:sr01, :- ], [[]]],
[:SUBI, [:r0, :- ], [[:_c ], []]],
[:MUL, [:sr01, :* ], [[]]],
[:DIV, [:sr01, :/ ], [[]]],
[:EQ, [:r1EQsr01 ], [[]]]
]
# ['st', nil, 'th', ['bt', ['sym', true, 'th', true], ['sym', false, 'th', true]],
attr_accessor :fml_th_bt, :fmli
def initialize
# @fml = @@fml
@fml_th_bt = @@fml_th_bt
@fmli = @@fmli
end
# def ta(l, cop) [l[0] || :getarg_a, l[1] || cop][0 .. l[2] || 1] end
def ta(l, cop) [l[0] || :_a, l[1] || cop][0 .. l[2] || 1] end
# def fml(lb, sym)
def fml(i_lb, sym)
# Rg.new
# [sym, @@fml.assoc(sym)[@@fmli.index(lb) + 1]] # fukusayou ?
# [sym, @@fml.assoc(sym)[@@fmli.index(lb) + 1] + []] # fukusayou ? kaihi : mruby 70410200
# @@fml.assoc(sym)[@@fmli.index(lb) + 1] + [] # fukusayou ? kaihi : mruby 70410200
# @@fml.assoc(sym)[i_lb + 1] + [] # fukusayou ? kaihi : mruby 70410200
[] + (@@fml.assoc(sym)[i_lb + 1] || ( # fukusayou ? kaihi : mruby 70410200
# printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
# printf("Unkown code %s \n", OPTABLE_SYM[@Rou.get_opcode(cop)])
(loc = @@Loc).vrb("Unkown code #{sym} ") # .to_s
return nil
# raise
# rg = Fiber.yield(nil)
))
end
end
class Imem
include M__Imem
end
IMEM = Imem.new
# module M__PlIni # Omoi ?
# module M__ENVary # higokan ? mruby 70410200
class ENVary < Array
# include RiteOpcodeUtil
include M__H
(
# @imem = Imem.new # higokan mruby 80410200
@@Imem = IMEM
@@Slp = SLP.dup
@@idb = FL
# @@idb = 0.pid_g.to_xeh + @@idb # +
# (rand 0xff).to_xeh +
# (Time.now.to_f - 0x3fffffff.to_f << 0x10).to_s.split(?.)[0][-8..-1].to_xeh # q
# @@dlm = '\n'
# @@dlm = '__--__'
# @@thini = [false, 0]
# @@plini = [@@thini, @@thini, [], []]
@@plini = [false, 0]
@@plini = [@@plini, @@plini, [], []]
@@pl0i = nil
@@bfsz = nil
@@Loc = LOC
# @@tp = Array.new(0x8); @@tp.delete(nil)
# @@tp = Array.new(0x3f)
# @@tp = []
module M__Idx
def initialize(idb = FL.dup) @@idb = idb end
def idx(*a) a[0].to_xeh end
def lbl(a) @@idb + idx(*a) end
end
class Idx
@@idb = nil
include M__Idx
end
@@Idx = Idx.new(@@idb)
) # .move # ? # conf.gem :github => 'miura1729/mruby-mmm'
def initialize(a = nil)
# @m = Mutex.new
# @imem = Imem.new # higokan mruby 80410200
### @ca = nil
# $mh_thl ||= (0 .. 1).map { |n| ('th' << n.to_xeh).to_sym} # symbol fuguai : mattn/mruby-json
a || return # 410200plini
# plini(@@rmth) # 410200plini
a = @@plini
1.step(@@rmth + 1) { |i| self[i] = *a}
end
# include M__PlIni # 410200plini # ok ? ( osx10.4/ppc 1koa )
def []=(n, v)
# ENV[@@idb + n.to_s] = v.to_msgpack
# ENV[@@idb + n.to_s] = MsgPack.dump(v)
## ENV[@@idb + n.to_s] = JSON::generate(v)
@@Loc.plok(n, v) { |a| ENV[@@Idx.lbl(a)] =
JSON::generate(
a[1])} # || nil
# super
end
def [](n)
# MessagePack.unpack(ENV[@@idb + n.to_s])
# MsgPack.load(ENV[@@idb + n.to_s])
## JSON::parse(ENV[@@idb + n.to_s])
### a = [n]
@@Loc.plok(n) { |a| ### @ca =
(a = ENV[@@Idx.lbl(a)]) && ### @ca =
'[]' == a[0] << a[-1] && ### @ca =
JSON::parse(a)
} # || nil
# super
end
# def idx0(n = 0, t = 1)
## t > n ? n + 1 : n ## n + (t > n ? 1 : 0)
## n + [false, true].index(t > n) ## n + (((t > n) && 1) || 0)
## n + (t > n && 1 || 0) # n - ((n <=> t) >> 1)
## n + ((t <=> n) & 1)[0] ## n + (((t <=> n) + 1) & 2)[1] # higokan mruby 70410200
## n + ((((t <=> n) + 1) & 2) >> 1) ## n + ((t <=> n) + 1 >> 1)
# end
# @@Idx0 = ->(n = 0, t = 1) {n + (t > n ? 1 : 0)} # l
# def pl_g(n = 0)
# def pl_g(n, *a)
def pl_g(n)
# sleep 0; GC.start; sleep 0 # g
# self[n < 0 ? n + 1 : n][idx0(n)]
pl = self[0 > n ? ~ n : n]
# 1 > n ? pl[idx0(n)] : pl
# if 1 > n then pl = pl[idx0(n)] end
0 == n ? pl.map! { |a| a[1]} :
# case pl when Array then else pl = @@plini end # higokan ? mruby 70410200
# case pl when Array then true end || pl = @@plini # higokan ? mruby 70410200
pl || pl = [] # pl ||= [] # higokan ? monami-ya.mrb:60510200 mruby:70410200
# a.empty? ? pl : a.map { |a| pl.afl(a, self)}
end
@@Plmg = ->(pi, pv) {pi.map { |v| [v[0], pv.shift]}} # l
# def pl_s(n = 0, pl)
def pl_s(n = 0, pl = nil)
# self[n] = 0 == n ? pl_g(-1).transpose[0].zip(pl) : pl # higokan mruby 70410200
# self[n] = 0 == n ? @@Plmg.(pl_g(-1), pl) : pl # c
self[n] = 0 == n ? @@Plmg.(@@pl0i, pl) : pl # c
# self[n] = 0 == n ? pl_g(-1).map { |v| [v[0], pl.shift]} : pl
end
# def pl_eg(n = 0, k)
def pl_eg(n, k)
pl_g(n).afl(k, self)
end
def pl_es(n = 0, a)
# def pl_es(n, a, wt = false)
# @@tp.delete(nil)
# if wt
## @@tp<< ary
# @@tp.push(*ary)
# else
# aa = []
# pl[0 == n ? 1 : nil][idx(k)] = v
# n = arg.shift if arg.first.is_a?(Numeric) # unwork ( thread ? )
# arg[0].is_a?(Numeric) ? n = arg.shift : n = 0 # unwork ( thread ? )
pl = pl_g(n)
a.each_slice(2) { |k, v| # .shift(2) higokan mruby 70410200
# (@@tp + ary).each_slice(2) { |k, v| # .shift(2) higokan mruby 70410200
# '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
# knid(k, :Symbol) && (send(k, v); break)
?_ == (k = k.to_s)[0] && (send(k[1 .. -1], v); next) # q
# case k when Symbol then send(k, v); break end
# case k when Symbol then send(k, v); true end && break
k = self.afl(k, ?i) # q
#### k = loop {self.afl(k, ?i) && break} # q # fuguai taisaku
pl[k] = case v when Numeric then pl[k]<< v else v end # p
# pl[k = self.afl(k, ?i)] += [v] # q # ?
# pl[k] += [v]
# pl[k].map!{|k| k.send(case v when Numeric then 'itself' else 'pop' end)} # p
# pl[k] = pl[k][case v when Numeric then 0 .. -1 else -1 end] # p # ?
}
pl_s(n, pl) # ,
## aa.each_slice(2) { |k, v| send(k, v)}
# aa.empty? || send(*aa)
# ][0]
#@@tp.clear
#@@tp = [nil]
#@@tp = Array.new(0xf)
# end
end
def ref_pl0i; @@pl0i = pl_g(-1) end
# def to_ia(n)
def to_ia(n, lpl = self)
if 0 == n
# self[n]
lpl[n]
else
# @@Plmg.(pl_g(-1), self[n]) # c
@@Plmg.(@@pl0i, lpl[n]) # c
end
# lpl = lpl[n]
# if 0 == n
## lpl[n]
# lpl
# else
## @@Plmg.(@@pl0i, lpl[n]) # c
# @@Plmg.(@@pl0i, lpl) # c
# end
# return lpl = lpl[n]
# lpl = lpl[n]
# ensure
# 0 != n && (return @@Plmg.(@@pl0i, lpl)) # c
# [lpl = lpl[n], 0 != n && (return @@Plmg.(@@pl0i, lpl))][0] # c
end
## @@pl0i, 0 == n ? lpl[n][1] : lpl[n])
## @@pl0i, (lpl = lpl[n]; 0 == n ? lpl[1] : lpl))
# @@pl0i, (0 == n && lpl = lpl[0]; lpl[n + (n <=> 0 & 1 ^ 1)]))
def ctr_g
[(c = pl_g(0).afl('ctr', self)).shift, pl_es(0, ['ctr', c])][0] # ctr = (cta = pl_g(0).afl('ctr', self)).shift # pl_es(0, ['ctr', cta]) # ctr
end
def ctr_s(c)
pl_es(0, [:ctr, c])
c
end
def tha(th) [knid(th, :Array), (TB) == th] end
def bfsz; @@bfsz ||= tha(true).size end
def ckth(th, md)
# self[pc][idx('th')].is_a?(Array) # higokan mruby 10410200 ( irep.rb )
# sz = (a = [knid(th, :Array), (TB) == th]).size
sz = (a = tha(th)).size
# sz = (a = [case th when Array then true end.!.!, tb == th]).size
# bf = (Array.new(sz, '1').join).to_i(2) # higokan ? mruby 70410200
# bf = Array.new(sz) { |n| 1 << n}.inject # higokan ? mruby 70410200
bf = (1 << sz) - 1
# 0 : ary 1 : ! ary 2 : kara ary 3 : ! kara ary
while (0 == 1 & md) == a[(md & bf) >> 1]
# ((a[(md & bf) >> 1] ? 0 : 1) == 1 & md)
# ([true, false][1 & md] == a[(md & bf) >> 1])
## md >>= bfsz; 0 == lf ? return(false) : (md &= bf if 0 == lf >> bfsz) # ? mruby 70410200 # r
0 == (md >>= sz) >> sz && break # lf damii bit
end.!.!
end
# private
end
# module M__Pl # higokan ? mruby 70410200
class Pl < ENVary
# include M__RiteOpcodeUtil__Getarg__
# def initialize(*a) super end
def send(*a)
### GC.start # g
case a[0] when Numeric then a.inject else (ROU).send(
# *a) end
## a[0].getarg__, a[1]) end
ROU.getarg__(a[0]), a[1]) end
end
def st_id(a)
# ([] == a || ! knid(a, :Array)) && (return a) # t
# ([] == a || case a when Array then true end.!) && (return a) # t # higokan mruby:70410200 monami-ya.mrb:60510200
((TB) == a || ! knid(a, :Array)) && (return a)
a.map! { |a|
## v.kind_of?(Array) ? # unwork ( thread ? )
knid(a, :Array) && # Thread.new { # TRON,BeOS,PalmOS6,Aperios,HongmengOS,1489922543/30-42#97-98 <-> Smalltalk(AlanKay,NAKAJIMA,YOKOTE,TOKORO,OTIAI,NAGAMATSU,TERAOKA,MITUZAWA,FUJINAMI(,itojun)),DeepConnect,PIMOS ?
# case a when Array then # Thread.new { # TRON,BeOS,PalmOS6,Aperios,HongmengOS,1489922543/30-42#97-98 <-> Smalltalk(AlanKay,NAKAJIMA,YOKOTE,TOKORO,OTIAI,NAGAMATSU,TERAOKA,MITUZAWA,FUJINAMI(,itojun)),DeepConnect,PIMOS ? # higokan monami-ya.mrb:60510200 mruby:70410200
a = st_id(a)[0] # } # __method__(a) # } #? mruby 410200
# end
a
}
return [a[0], nil] if 0 >= a.hgt # r
## return a.ijr { |v| v.inject(@@imem.mcall) || v[0]} # r
# GC.start # g # fuantei ( keisan gosa ) ?
# opc, op = a
## [self.send(*a) || a[1], case a[0] when Numeric then else a end] # then nil
# [self.send(*a) || a[1], knid(a[0], :Numeric).! && a]
[self.send(*a) || a[1], a]
end
# def plw__kt(pc)
# ckth(pl_eg(pc, 'ctr')[0], 0) # sp [sp]
# end
# @@kt = ->(pc) {ckth(pl_eg(pc, 'ctr')[0], 0)} # l # sp [sp] # higokan ? mruby 70410200
def plw(pc) ##
# i_th = self.afl('th', ?i) # # higokan mruby 10410200 ( irep.rb ) # q
tb = TB.dup
sl = @@Slp
imem = @@Imem
thl = MH_THL
# th = Array.new(thl.size) { |v| 0 == v ? pl_eg(pc, thl[v]) : tb} # unwork ( thread ) # mruby-thread e139cfe 1211410200 sdottaka
th, mx = nil
idx, ji_ngq = (ini = ->(i = 0) {[idx = i, ji_ngq = false]}).call # l # fuguai taisaku ? # idx = 0 ##
fb0 = ->(m) {0 < m && Fiber.yield(false); th = [tb] * (1 + mx = thl.hgt)}
kt = -> {ji_ngq ||= ckth(pl_eg(pc, 'ctr')[0], 0)} # l # sp [sp]
# kt = @@kt
s_id = ->(ti) { # l
ti = st_id([a = ti]) #(a = ti)
ti[1].nil? && ti[1] = a
ti
}
Fiber.new { |m = 1| fb0.(m) # c
loop {
(th[idx].! || ckth(th[idx], 2)) && ((th[idx] = pl_eg(pc, thl[idx])) || # fuguai taisaku ?
(next Fiber.yield(! ini.(idx)))) # false # fuguai taisaku ? # c
0 < idx && ckth(th[idx], 2) && kt.call ? idx -= 1 : # ji_ngq ||= plw__kt(pc)
(th[idx], v = s_id.(th[idx])) # if mx >= idx # && ckth(th[idx], 3) # c
if ckth(th[idx], 1)
# r = pl_es(pc, ((kt.call && mx <= idx ? 0 : idx) .. idx # kt : ato
r = pl_es(pc, (idx - if mx <= idx && kt.call then idx end.to_i .. idx
).flat_map { |n| [thl[n], [th[n]] + [[v], v = []][0]]}) # .slice! higokan monami-ya.mrb:60510200 mruby:70410200
r || (next(Fiber.yield(false); ini.(idx))) # fuguai taisaku ? # c
idx -= (idx <=> mx) >> 1 # += (mx <=> idx) + 1 >> 1
end
m = sl.plwt(m, 0) { |n| Fiber.yield([ji_ngq][n])}
} ##
}
## self.lf_d
end
##@@plw = nil
def plm(pc = 1)
# until $rmtb do true; true end
ts = @@ts # + 1
(sl = @@Slp).slp
fpl = []
loop {
pc = ctr_g
pc && 0 <= pc && fpl<< plw(pc) # p
## pc && 0 <= pc && fpl<< (@@plw ||= plw); GC.disable # p # g
# pc, cto = self.ctr_g if flg
# if pc != cto or ! flg
# if pc >= 0 || ! flg
# cto += 1
# fpl<< self.plw(pc) if flg[0] # p
# an[cto] = Thread.new(envid) { |envid|
# (ith, th) =
self.pl(pc, ith, th) ###
# (flg = [true][ith]) || redo ###
# fpl.delete_if(&:resume)
## fpl.delete_if(&:resume(pc))
# fpl = delif_c(ts, fpl) { |fb, n| fb.resume(n)}
fpl = delif_c(ts, 0, fpl) { |fb, n| fb.resume(n)}
## fpl = delif_c(1, 0, fpl) { |fb, n| fb.resume(pc)} # ?
sl.slp
### GC.start # g # antei ?
}
end
end
# class Pl < ENVary
# include M__Pl
# end
# module M__AryM # higokan ? mruby 70410200
class AryM < Array
# @@f = 0x0.chr * (0x20 << 2)
# @@bm = 0xff.chr
# def initialize
## @f = '' # cannot set instance variable (ArgumentError)
# end
# def [](*a) # ok : monami-ya.mrb:60510200
## sleep 0
## @@Slp.slp 0
## a.to_s
# super
# end
# def []=(*a)
## sleep 0
## @@Slp.slp 0
## a.to_s
# super
# end
end
# class AryM < Array
# include M__AryM
# end
module M__Stack
@@s = AryM.new
@@ow = []
# @@m = Mutex.new
# attr_accessor :p, :r
attr_accessor :c, :p, :r, :s
def initialize(sp = 0, s = @@s)
# def initialize(sp = 0, s = @@s, m = @@m)
# id = self.object_id
@p = sp; @s = s; @ir, @i_i, @c, @r = nil
# @p = sp; @m = m; @s = s
# @@m.lock
# s = @s
# @@m.unlock
s
# @s
end
def [](*a)
# @@m.lock
# s = @s
# @@m.unlock
# s[@p.ipt a[0]]
@s[a[0] + @p]
end
def []=(sp, va, pc = nil)
#p [sp, va, pc, self.object_id]
# @@m.lock
pp = sp + @p
# @@ow[@@ow.owasoc(i)] # <<
# @@m.lock
# @i_i = @@ow.owasoc(i)
# @@m.lock
# knid(pc, :Fixnum) && (@ow[pc] && (@ow[pc].include?(pp) || (@ow.push(pp); @ow.sort!)) || @ow[pc] = [pp])
# a = @s[@p.ipt a[0]] = a[1]
# a = @s[@p + a[0].sgp] = a[1]
@s[pp] = va
# @@m.unlock
# a
end
def size; @s.length - @p end
def irep(i)
owasoc(i) || (
@@ow<< [i, []] # p
0xf < @@ow.size && @@ow.shift
@ir = i
)
end
def idel(i)
@@ow.delete(owasoc(i))
end
def owasoc(i) @@ow.assoc(i) end
def owc(i = @ir) i = owasoc(i) && @@ow.delete_at(@@ow.index(i)) end
# def rs(r = nil)
# @r = r
# end
# def cs(c = nil)
# @c = c
# end
def method_missing(*a)
@s[@r.send(a[0], @c) + @p]
end
end
class Stack
include M__Stack
end
module M__Rg
attr_accessor :p
def initialize(*a)
# @i = 1
@s = a
@p = 0
end
def push(*a)
@s.assoc(a.shift)[1]<< a[0] # p
end
def pop(*a)
@s.assoc(a.shift)[1].pop
end
def shift(*a)
@s.assoc(a.shift)[1].shift
end
def delete_at(*a)
@s.assoc(a.shift)[0].delete_at a[0]
end
def to_ra(*a)
a.map { |v| self[v]}
end
def to_a
@s.map { |v| [v[0], v[1][0 .. -1]].dup}
end
def [](k, i = nil, m = nil)
i ||= @p
@s.assoc(k)[1][i]
end
def []=(k, i = nil, v)
i ||= @p
@s.assoc(k)[1][i] = v
end
def flgflp; @p = ~ @p end
# def flg_e; @p = ~ @p end
# def flg_d; @p = ~ @p end
def flge?; 0 <= @p end
def flgd?; 0 > @p end
# prepend M__Ist
end
class Rg # higokan ? mruby-thread:410200
include M__Rg
end
module M__Vrb
@@s = nil
attr_accessor :s
def initialize(a = @@s)
# @s = a ||= AryM.new(2, []) # ?
@s = a ||= AryM.new(2){[]}
@ap = nil # fuguai taisaku
end
# def vrb(fls2 = false, fr = 0)
def vrb(fls2 = false, fr = 0, ptn = PUTSN, i_v = I_V, i_v_ = I_V_)
# until @s.empty?
until @s[i_v].empty? || @s[i_v].uniq! # fuguai taisaku
s = ''
### puts(
@s[i_v].delif_c( ### ~ # puts
ptn, fr){ |a| # fuguai taisaku ? ( osx/ppc, freebsd8/i386 )
case a
when Array
# a.size.times{a.push(*a.shift)}; ak, apc, a2, a3, a4 = a
# if 2 == a[0] && (siv = (siv = @s[i_v_]).index(siv.assoc(a[1]))) # ?
if 2 == a[0] # fuguai taisaku ?
sz = a.size
(siv = (siv = @s[i_v_]).index(siv.assoc(a[1]))) ? (
a += (a = @s[i_v_].delete_at(siv)[1 .. -1]
a[0] = (rou ||= ROU).getarg__(a[0]) # .chomp # fuguai taisaku ( freebsd8/i386 )
a)
a && @ap = a # fuguai taisaku
) : (a = @ap || next) # fuguai taisaku # r
sz >= a.size && ( @s[i_v_].clear # fuguai taisaku # .shift
a.push(*@ap[sz .. -1])) # fuguai taisaku
a[2] = (a = a.dup)[2].chomp # fuguai taisaku ( osx/ppc, freebsd8/i386 ) # .to_s : nil taisaku
end
# sa ||= [[' ', ' '], [' ', ' ']][a[0] <=> 2]
sa ||= [' ', ' ', ' '][a[0] & 1, 2]
# 2 == a[0] && a[2] = getarg__(a[2]) # .chomp # fuguai taisaku ( freebsd8/i386 )
s << a[1].to_xeh << " " * a[0] <<
## "#{a[2]} #{a[3].to_xeh}"
"#{a[2] << sa[(0 <=> a[2].size - TABU1) >> 1]}#{a[3].to_xeh}"
a[4] && s << " #{a[4].to_xeh}"
else
s << a
end
# }.chop # fuguai taisaku ( osx/ppc, freebsd8/i386 )
}
### )
1 < s.size && # puts(s.chop) # .chop # fuguai taisaku (osx/ppc, freebsd8/i386)
s.each_line { |s| puts s} # fuguai taisaku ? (osx/ppc, freebsd8/i386)
break unless (fls2 && (@s[i_v].clear; fls2)) || 0 > fr # fuguai taisaku
end
# @@Slp.slp 0
end
end
class Vrb
# include M__RiteOpcodeUtil__Getarg__
include M__Vrb
end
# module M__Wkth
def wkth(pc = 1)
# Thread.new($pcmax) { |pcmax|
# Thread.new(@pl, pc) { |pl, pc| # @Imem,
# pl.plm(pc)
Thread.new(pc) { |pc|
Pl.new.plm(pc)
}
end
# end
# include M__Wkth # higokan ? monami-ya.mrb:60510200 mruby:70410200 # omoi ?
class FibVM
@@Rmt = [wkth]
# include RiteOpcodeUtil
include M__H
(
OPTABLE_CODE = Irep::OPTABLE_CODE
OPTABLE_SYM = Irep::OPTABLE_SYM
@@Loc = LOC
@@Imem = IMEM
@@Slp = SLP
@@Rou = ROU
@@nth = NTH
)
def initialize
### GC.start # g # antei ?
# @pla = Array.new($pcmax)
# $pltini.call()
# @pl = ENVary.new(true) # 410200plini
plini(@@rmth, @pl = ENVary.new(true)) # 310200plini ?
@rmt = @@Rmt + Array.new(@@nth - 1) {wkth}
@Imem = @@Imem
@Rou = @@Rou
@Slp = @@Slp
# For Interpriter
# @stack = [] # スタック(@spより上位をレジスタとして扱う)
@stack = Stack.new # スタック(@spより上位をレジスタとして扱う)
# @callinfo = [] # メソッド呼び出しで呼び出し元の情報を格納
@callinfo = Stack.new(0, []) # メソッド呼び出しで呼び出し元の情報を格納
@pc = 0 # 実行する命令の位置
@sp = 0 # スタックポインタ
# @cp = 0 # callinfoのポインタ
@irep = nil # 現在実行中の命令列オブジェクト
@irepid =nil # 命令列オブジェクトのid(JIT用)
### GC.disable # g # gene gc enable : mruby 6170410200 d17506c1
# 5ff9c1d2 : ( irep.rb )
# Assertion failed: ((obj)->tt != MRB_TT_FREE), function mrb_gc_mark, file src/gc.c, line 577.
# ysei/mruby-thread/tree/normal/ 4c02f126
# / mruby-thread/crimsonwoods/tree/experimental-thread-support/
# / mruby/mruby/ 32818bd2 : ( irep.rb )
# Assertion failed: (((mrb)->is_generational_gc_mode) || mrb->gc_state != GC_STATE_NONE),
# function mrb_write_barrier, file src/gc.c, line 1103.
@@Vrb = Vrb.new
end
# include M__PlIni # 310200plini ? # ok ? ( osx10.4/ppc 1koa ) # omoi ? ( osx10.4/ppc 2koa )
def plini(rmth = nil, pl = self)
thini = false
thl = MH_THL
# pl0i = [thl[0], thl[1], 'sym', 'ctr']
pl0i = [thl[0], thl[1], :sym, :ctr] # , :hoka]
# 3080410200 : gene gc off : mruby 6170410200 d17506c1
# 3080410200 : 5x2 ng ( segmentation fault ) : mruby 3080410200 0878900f
# mruby 20410200 : higokan ? : ary_many
# mruby 70410200 : 4x2 ok , 5x2 ng
pl[0] = [[pl0i[0], [thini]], [pl0i[1], [thini]],
[pl0i[2], [0]], [pl0i[3], []]] # , [pl0i[4], []]] # @pla = [['sp', 'ctr']]
# if 1 < self.size # self.size : 0 ?? # higokan ? mruby:70410200 monami-ya.mrb:60510200
# self.replace(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
pl[1] && pl[0 .. -1] =
pl[0 .. pl.hgt & ((thini = rmth + 1) << 1) | thini]
pl.ref_pl0i
end
# end
# include M__Wkth # higokan ? monami-ya.mrb:60510200 mruby:70410200
class Fls__l
@@fls_m = nil
@@fls_mc = ->(sz) {
@@fls_m = 1 << sz
[((@@fls_m += (@@fls_m <<= 1) + (@@fls_m <<= 2) + (@@fls_m << 2)) >> sz
sz = 1 << @@fls_m = sz
# [((sz += (sz <<= 1) + (sz <<= 2) + (sz << 2)) >> @@fls_m
) + 1 >> 1,
@@fls_mc = nil][0]
}
@@mh_thl = MH_THL # .dup # dup omoi ?
@@i_sp, @@i_sym = nil; @@i_thl = []
def initialize(s, irep, imem, rou, lpl, pc, vrb)
# def initialize(s, irep, imem, rou, lpl, pc, vrb, ap)
@@Vrb = vrb
(
# i_sp = lpl.afl(@pla.assoc('sp')[1], ?i) ## # q
@s = s; @imem = imem; @rou = rou, @lpl = lpl; @pc = pc
@pr, @sym, @mt = nil; @r = []
@sy = nil
@v_ = []
# ap = @f = false; @ji_ngq = [ap, ap]
@f =
ap = false; @ji_ngq = [ap, ap]
# ap = @@fls_m ||= (ap = 1 << @@fls_m = 3; # @@fls_mc.(3) # c
# ((ap += (ap <<= 1) + (ap <<= 2) + (ap << 2)) >> @@fls_m) + 1 >> 1)
ap = @@fls_m ||= @@fls_mc.(3) # c
@pl = []; plr = []
# lm = ->(r1) {r1 && rou.send(@pr, @mt ? irep : s, @r[0], r1, @mt)} # l
lm = ->(r1) { rou.send(@pr, @mt ? irep : s, @r[0], r1, @mt)} # l
mkt = ->(v) {v.nil?} # v[0].nil?} # l
@ca = [
# ->(r, sz = plr.size) { # f
->(sz = plr.size, r = @r) { r = r[1] # f
# ->(r) { r = r[1] # f
# sz = plr.size
# sz = ([r < sz, sz = plr[r]][0] && ! sz.nil?) ? sz : lm.(r) # ) ? _ : lm.(r) # c
sz = plr.fetch(r) { |v| (r >= sz || mkt.(v)) ? lm.(r) : v} # c 2
plr.clear # .slice! .pop(n) .shift(n) higokan monami-ya.mrb:60510200 mruby:70410200
# s[r[1]] = @sy ? [s[r[1]], _].inject(@sy) : _
s[r] = @sy ? [s[r], sz].inject(@sy) : sz
# 0 == m && wo.include?(r) || wo.push(r).sort!
}, # rs = [r1, r0]
->(sz = plr.size, r = @r) { # ji_ngq[0]
# sz.step(sz + ap = (ap += ap >> 1) >> 1) { |n| @plr<< lm.(s[n])} # p # c
0 == s.size ? Slp.new.slp(0) : ## @Slp.slp(0) :
# @plr += lm.(s[sz, ap = (ap += ap >> 1) >> 1]) # c
# 0 == (as = s.s).size ? Slp.new.slp(0) : ## @Slp.slp(0) :
# sz = plr.size
# as = s[sz, ap = (ap += ap >> 1) >> 1]
# as && @plr += lm.(as) # c
# as = s[sz, (sz = as.size - sz; sz > (ap = (ap += ap >> 1) >> 1) && sz = ap; sz)]
# as && plr += lm.(as) # c
sz = s[sz, (ap = (ap += ap >> 1) >> 1)] && plr += lm.(sz) # + (ap <=> 0)]) # c
# plr<< s.ow?(n) ? nil : lm.(s[n]) # p # c
} # @rs[1] = r[0]
] # .lazy #? mruby 410200
# plb = Plb
# i_th = lpl.afl('th', ?i) # q
# @i_sp = plb.assoc('sp')[1]
# @i_sp = lpl.afl('ctr', ?i) # q
@i_lb = imem.fmli.index('st') # + 1
) # .move # ? # conf.gem :github => 'miura1729/mruby-mmm'
end
def ca # (pc)
if (ji_ngq = @ji_ngq)[0]
@pr || (pr, @sy = @imem.fml(@i_lb, @sym)
?_ != (@pr = pr)[1] || @mt = pr) # q
# (@ca).force[ #? mruby 410200
# @ca.force[ #? mruby 410200
@ca[
ji_ngq[1] ? 0 : 1].call
### (1 <=> @plr.size) | (ji_ngq[1] ? 0 : 1)].(@plr.size, @r) # c
end
@f
end
def rslt # (pc)
@f && (return true) # r
pc = @pc
lpl = @lpl
pl = @pl
v_ = @v_.dup # .sort # fukusayou kaihi ?
@sym ||= pl[lpl.afl('sym', ?i)].to_sym # q
sp = pl[@@i_sp ||= lpl.afl('ctr', ?i)][0] # q
thl = @@mh_thl
ji_ngq = [v = ! r = []] # , false]
ve = ->{
# case v when Array then ! v.empty? end &&
# @@Vrb.s<< [2, pc, # *v] # p
# *v.map{|v| case v when String then v.chomp else v end}] # fuguai taisaku
# lpl.ckth(v, (3 << (lpl.bfsz << 1)) | 3) && @@Vrb.s<< [2, pc, # *v]) # fuguai taisaku # p
1 == VMD && (0 >= v_.hgt || ! v_.include?(v)) && (v_<< v
lpl.ckth(v, @@bf30 ||= (3 << (lpl.bfsz << 1)) | 3) && # gosadou ? : ckth ( nise-true / osx/ppc )
@@vrb.s[I_V]<< [2, pc, *v] #) # p
# *v.map{|v| knid(v, :String) ? @rou.getarg__(v) : v}] # otiru # fuguai taisaku
## [2, pc, *v.map{|v| knid(v, :String) ? @rou.getarg__(v) : v}] # fuguai taisaku
## "#{(pc).to_xeh} #{getarg__(v[0])} #{v[1].to_xeh}")}
)
}
# r = Array.new(thl.size) { |n| pl[lpl.afl(thl[n], ?i)]} # q
# r = r.map { |v| v[1] = v[-1]} # higokan ? mruby 70410200
(0 ... thl.size).each { |n|
r[n] = (pl[@@i_thl[n] ||= lpl.afl(thl[n], ?i)] || @r[n]) # q # fuguai taisaku
v ||= r[n][1] || [] # @r[n] # true # fuguai taisaku
knid(r[n][0], :Numeric) && r[n] = r[n][0]
}
r[1] = r[0] if case sp when Array then ji_ngq[1] = lpl.ckth(r[1], 2) end
ve.call
@s.p = [sp].flatten[0] if (ji_ngq = (@r = r).map.with_index { |r, n|
# ji_ngq[n] || r && lpl.ckth(r, 1)})[0]
(ji_ngq[n] || r && lpl.ckth(r, 1)) &&
0 == VMD && (v_[n] || (@@Vrb.s[I_V]<< [2, pc]); true)})[0]
verb
# @f ||= (@ji_ngq = ji_ngq).all? || return # r
@f ||= (r = (@ji_ngq = ji_ngq).all?) && (v_.clear; @v_ = v_; r) || return # r
end
def plg # (pc)
@f || ! ((@pl = @lpl.pl_g(@pc + 1)).empty? && @r.empty?) # fuguai taisaku
end
def verb # (pc)
return if @ji_ngq[n = -1] == n # r
## @@Vrb.vrb "#{@pc.to_xeh} #{@sym} #{r[0].to_xeh} #{r[1].to_xeh}"
# @@Vrb.s<< [3, @pc, @sym, *@r] # p
@@Vrb.s[I_V]<< [3, @pc, @sym, *@r] # p
@f && @ji_ngq<< n # p
end
end
def fls(pc) ##
## pl[i_th] = lpl.pl_eg(pc, 'th') ### fls
(
# loc = @@Loc
imem = @Imem
s = Stack.new
s.irep(i = @irepid)
# c_l = Fls__l.new(s, i, imem, @Rou, @pl, loc, sl)
c_l = Fls__l.new(s, i, imem, @Rou, @pl, pc, @@Vrb)
) # .move # ? # conf.gem :github => 'miura1729/mruby-mmm'
Fiber.new { |m = 1, sl_ = @Slp| loop {sl_.plwt(m) {
m = Fiber.yield(c_l.plg && c_l.rslt && 0 == m &&
c_l.ca)
}}} ##
end
# include M__RiteOpcodeUtil__Getarg__
# def iset(rg) ##
def iset ##
(
# pc, sp, cop, sym = [rg[:pc], rg[:sp], rg[:cop], rg[:sym]]
# pc, sp, cop, sym = rg.to_ra(:pc, :sp, :cop, :sym)
pc, sp, cop, sym = nil
# pc1 = 1 + pcabs = pc.abs # cp
tb = (TB)
imem = @Imem
pl = @pl
# str__getarg = STR__GETARG
# i_lf = @idx['lf']
i_lb = imem.fmli.index('th') # + 1
loc = @@Loc
sl = @Slp
pc1, pcabs, fml = nil
) # .move # ? # conf.gem :github => 'miura1729/mruby-mmm'
ini = ->(rg = nil) { # l
# ini = ->(pc, sp, cop, sym) { # l
pc, sp, cop, sym = rg
# fml = imem.fml(i_lb, sym) || (
fml = ([sym]<< imem.fml(i_lb, sym)) || ( # p
# printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
# printf("Unkown code %s \n", OPTABLE_SYM[@Rou.get_opcode(cop)])
# loc.vrb("Unkown code #{sym} ") # .to_s
return nil
# raise
# rg = Fiber.yield(nil)
)
# fml = [sym]<< fml # p
pc1 = (pcabs = pc.abs) + 1 # cp
}
bt = imem.fml_th_bt
thl = MH_THL
ht = 1
fv = []
vmd = nil
vrb = ->(vrb) { # l # LV__VRB
# @@Vrb.s<< [2, pc, getarg__(vrb[0]), vrb[1]] # p
@@Vrb.s[I_V_]<< [pc, *vrb] if 0 == vmd ||= VMD # p
vrb
}
fvl = [->(oi) {[:ctr, [sp]] + [[:_ctr_s, pc1], []][oi <=> 0]}, # l
# [->(oi) {[thl[oi], imem.ta(fv[oi], cop), thl[oi + 1], tb]}, # l
[->(oi) {[thl[oi], vrb.(imem.ta(fv[oi], cop)), thl[oi + 1], tb]}, # l
->(oi) {((oi <= ht = fv.hgt) && fv[oi] = imem.ta(fv[oi], cop)) ? # l
## [thl[oi], fv[oi]] : []}].lazy] #? mruby 410200
# (vrb.(fv[oi]); [thl[oi], fv[oi]]) : []}]].lazy #? mruby 410200
(vrb.(fv[oi]); [thl[oi], fv[oi]]) : []}]]
opg = ->(oi, lopa = [], i = -1) { # l
# bt[oi].each_slice(2).with_index { |k, i| k, v = k # higokan mruby:70410200 monami-ya.mrb:60510200
bt[oi].each_slice(2) { |k, v| fv = fml[i += 1]
if v # && knid(fv, :Array)
case k
## when 'th' then fv = fvl.(oi) # c
# when 'th' then fv = fvl[1].force[oi <=> 0].(oi) # c #? mruby 410200
# when 'th' then fv = fvl.force[1][oi <=> 0].(oi) # c #? mruby 410200
# when :th then fv = fvl.force[1][oi <=> 0].(oi) # c #? mruby 410200
when :th then fv = fvl[1][oi <=> 0].(oi) # c
else lopa<< k # p
end
lopa.push(*fv)
end
}
# lopa + fvl.force[0].(oi) # c #? mruby 410200
lopa + fvl[0].(oi) # c
}
thi = 0 ##
# Fiber.new { |rg, thi = 0| ## # higokan monami-ya.mrb:60510200 mruby:70410200
Fiber.new { |rg|
# Fiber.new { |rg, m = 0|
loop { ##
# 0.upto(NaN) { |thi| # higokan ? mruby 70410200
# [1].cycle.with_index { |t, thi|
rg && ini.(rg) # c
pl.pl_es(pc1, opg.(thi)) # c
thi += 0 != thi && ht <= thi ? -thi : 1
sl.slp 0
rg = Fiber.yield(0 <= pc ? [true][thi] : ([pcabs][thi] || pc)) # cp
# sp = [sp].flatten
sp = [*sp]
} ##
# pl1[i_lf] += 1
} ##
end
@@jsc = Proc.new { |stack, callinfo, irep, rg, imem|
rou = @@Rou
cop, sym = rg.to_ra(:cop, :sym)
case sym
# メソッドの先頭で引数のセットアップする命令。面倒なので詳細は省略
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 = rou.getarg_a(cop)
# mid = @irep.syms[getarg_b(cop)]
mid = irep.syms[rou.getarg_b(cop)]
# n = getarg_c(cop)
n = rou.getarg_c(cop)
# newirep = Irep::get_irep(@stack[@sp + a], mid)
# newirep = Irep::get_irep(@stack[rg[:sp] + a], mid)
newirep = Irep::get_irep(stack[a], mid)
if newirep then
# @callinfo[@cp] = @sp
# callinfo[0] = rg[:sp]
# @cp += 1
# callinfo.p += 1
# @callinfo[@cp] = @pc
# callinfo[0] = rg[:pc]
# @cp += 1
# callinfo.p += 1
# @callinfo[@cp] = @irep
# callinfo[0] = irep
# @cp += 1
# callinfo.p += 1
callinfo.p += (callinfo[0 .. 2] = rg.to_ra(:sp, :pc) << irep).size
# @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
# args<< stack.getarg_a(i + 1) # p
end
# @stack[@sp + a] = @stack[@sp + a].send(mid, *args)
# @stack[rg[:sp] + a] = @stack[rg[:sp] + a].send(mid, *args)
stack[a] = stack[a].send(mid, *args)
end
# else
# printf("Unkown code %s \n", OPTABLE_SYM[get_opcode(cop)])
# printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
end
[callinfo, irep, rg]
}
@@opf = ->(irep, pc) { # l
# 命令コードの取り出し
# cop = @irep.iseq[@pc]
cop = irep.iseq[pc]
# case OPTABLE_SYM[get_opcode(cop)]
# sym = OPTABLE_SYM[get_opcode(cop)]
sym = OPTABLE_SYM[(rou = @@Rou).get_opcode(cop)]
[cop, sym]
}
@@fb = nil
def isfl(rg)
# rg.to_s # fuguai taisaku mruby 70410200
# pc = rg[:pc]
# rgd = rg.dup
# rgd = rg.to_ra(:pc, :sp, :cop, :sym)
rgd = rg
pc = rgd[0]
@@fb ||= iset
fb = @@fb
fl = fls(pc.abs) # if 0 <= pc # cp
Fiber.new { |m = 1, ri = false, rf = false, sl_ = @@Slp|
loop { sl_.slp 0
ri ||= [true == fb.resume(rgd), rgd = nil][0] # .slice! higokan mruby 70410200
(fl.resume(m) && rf = true) if 0 <= m = Fiber.yield(ri && rf) # || 0 <= pc
}
}
end
def eval(irep)
loc = @@Loc
sl = @Slp
ts = @@ts
lpl = @pl
imem = @Imem
stack = @stack
stack.r = rou = @Rou
callinfo = @callinfo
@irep = irep
ise = [[], []]
pctj = []
pc = @pc
sym = nil
# i_iD = 0; i_iS = 1; i_pc = 0; i_rg = 1; i_fb = 1
i_iD = 0; i_iS = ise.hgt; i_pc = 0; i_rg = 1; i_fb = 1
rg = Rg.new([:pc, [pc]], [:sp, [@sp]], [:cop, []], [:sym, []])
ifj = -> {?J == sym[0]} # l # q
ifs = -> {[:ENTER, :SEND, :RETURN, :NOP].include?(sym)} # l
jm = ->(cop, sym) { # l
# JMP nでpcをnだけ増やす。ただし、nは符号付き
# when :JMP
### @pc = @pc + getarg_sbx(cop)
### pc = pc + lpl.getarg_sbx(cop) - 1
# when :JMPIF
### if @stack[@sp + getarg_a(cop)] then
### @pc = @pc + getarg_sbx(cop)
# stack.getarg_a
# JMPNOT Ra, nでもしRaがnilかfalseならpcをnだけ増やす。ただし、nは符号付き
# when :JMPNOT
### if !@stack[@sp + getarg_a(cop)] then
# ! stack.getarg_a
# end && rg[:pc, -1] = rg[:pc] + rou.getarg_sbx(cop)
c = [:JMP, :JMPIF, :JMPNOT].index(sym) - 1
(0 > c || [true, false].index(stack.getarg_a) == c) &&
rg[:pc, -1] = rg[:pc] + rou.getarg_sbx(cop) # cp
}
jsc = Proc.new {
cop, sym = rg.to_ra(:cop, :sym)
case sym
# RETURN Raで呼び出し元のメソッドに戻る。Raが戻り値になる
when :RETURN
@@Vrb.vrb(true) # fuguai taisaku
# stack.idel(irep)
stack.idel(@irepid)
# if @cp == 0 then
if 0 == callinfo.p
# @rmt.join # higokan ? mruby-thread:410200
# @rmt.each { |rmt| rmt.join} # .alive?
# return @stack[@sp + getarg_a(cop)]
# return stack[rou.getarg_a(cop)]
return stack.getarg_a
else
# @stack[@sp] = @stack[@sp + getarg_a(cop)]
# stack[0] = stack[rou.getarg_a(cop)]
stack[0] = stack.getarg_a
# @cp -= 1
callinfo.p -= 1
# @irep = @callinfo[@cp]
# irep = @callinfo[@cp]
irep = callinfo[0]
# @cp -= 1
callinfo.p -= 1
# @pc = @callinfo[@cp]
# pc = @callinfo[@cp] - 1
# rg[:pc, -1] = @callinfo[@cp]
rg[:pc, -1] = callinfo[0] + 1
# @cp -= 1
callinfo.p -= 1
# @sp = @callinfo[@cp]
# sp = @callinfo[@cp]
# rg[:sp] = @callinfo[@cp]
# rg[:sp, -1] = @callinfo[@cp]
rg[:sp, -1] = callinfo[0]
end
# 何もしない
when :NOP
sl.slp 0
### GC.disable # g
else
if ifj.call
jm.(cop, sym) # c
else
callinfo, irep, rg = @@jsc.(stack, callinfo, irep, rg, imem) # c
# printf("Unkown code %s \n", OPTABLE_SYM[get_opcode(cop)])
# printf("Unkown code %s \n", OPTABLE_SYM[imem.get_opcode(cop)])
end
end
# [callinfo, irep, rg]
}
pco = []
pcoj = -> { # l
if rg.flgd?
rg.pop :sym
rg.pop :cop; stack.c = rg[:cop]
sl.slp 0
# true
end # || false
}
# @@opg = ->(irep, rg, imem) { # l
opg = ->(pcl) { # l
## c, sym = @@opf.(irep, pcl) # c
rg.push(:cop, stack.c = (sym = @@opf.(irep, pcl))[0]) # c
rg.push(:sym, sym = sym[1])
# rg
}
istm = -> { # l
! if pfl = ise[i_iD].pop
if 0 > pcf = pfl[i_pc]
if ~ pcf == rg[:pc] # cp
pcf = ! pfl[i_pc] = ~ pcf # cp
else
pfl = nil
end
end
pfl && ise[i_iD]<< pfl # p
! pcf
end
}
ist = ->(pcl, po = 0) { # l
ise[i_iS]<< [rg.flgd? ? ~ pcl : pcl, rg.to_ra(:pc, :sp, :cop, :sym)] # p # cp
}
stu = -> { # l
ifj.call || (! sym = ! ifs.call) || # sym hakai # sym = (nifs && nifj) # bagu no moto
pctj.pop != pc && istm.call && ! ist.(pc) # false # c
}
while true
# loop { # higokan ? monami-ya.mrb:60510200 mruby:70410200
# begin
@@Vrb.vrb
# if pco.slice!(0 .. -1) || 0 <= rg['ctr', 1] # higokan monami-ya.mrb:60510200 mruby:70410200
if pco.pop || rg.flge?
opg.(pc) # c
# @@opg.(irep, rg, imem) # c
sym = rg[:sym]
# @@Vrb.vrb "#{pc.to_xeh} #{sym} #{rg[:cop].to_xeh}" if 0 <= rg.p
# @@Vrb.vrb [1, rg[:pc], rg[:sym], rg[:cop]] if 0 <= rg.p
# @@Vrb.s<< [1, pc, sym, rg[:cop]] if 0 <= rg.p # p
@@Vrb.s[I_V]<< [1, pc, sym, rg[:cop]] if rg.flge? # p
@@Vrb.vrb
if [stu.call, ( # sym hakai # bagu no moto
next if pcoj.call)][0] # r
then
sym && pctj<< 1 + pco[0] = pc # p # ifj.call && pctj<<
rg.flgflp # flg_d
# )
end
rg.push(:pc, pc = rg[:pc, -1] + 1)
rg.push(:sp, rg[:sp, -1])
end
if rg.flgd? &&
ise[i_iD].empty? || (0 == ise[i_iD].hgt && 0 > ise[i_iD][-1][i_pc])
# rg.p = 0 > (pt = rg.p) ? ~ pt : pt
# 0 > rg.p && rg.p = ~ rg.p
# 0 > (pt = rg.p) && rg.p = ~ pt
rg.flgflp # flg_e
# lpl.plini
plini(@@rmth, lpl) # 310200plini ?
# lpl.plini(@@rmth) # 410200plini
# callinfo, irep, rg = @@jsc.(stack, callinfo, irep, rg, imem) # c
jsc.call
sl.slp(0, 0xf)
@@Vrb.vrb
end
if rg.flge?
rg.shift(:pc); rg.shift(:sp); rg.shift(:cop); rg.shift(:sym)
@pc = pc = rg[:pc]
@sp = rg[:sp]
stack.p = rg[:sp]
@irep = irep
end
# ise[i_iD].reject!.with_index { |fis, n|
# ise[i_iD].delif_c(ts) { |fis, n|
ise[i_iD].delif_c { |fis, n|
fis[i_fb].resume(0 > fis[i_pc] ? -1 : n) # cp
}
sl.slp # {GC.start} # g
end
# ensure
## @rmt.kill # nil ( monami-ya.mrb 60510200 ) , Assertion failed: ((obj)->tt != MRB_TT_FREE), function mrb_gc_mark, file src/gc.c, line 591. ( mruby 70410200 )
### @rmt.join
# @rmt.each(&:kill)
end
end
def fib(n)
if n == 1 then
1
elsif n == 0 then
1
else
fib(n - 1) + fib(n - 2)
end
end
def fibt
fib(20)
end
# GC.stress = true # g
# GC.start # g
a = Irep::get_irep(self, :fibt)
# GC.start # g # antei ?
vm = FibVM.new
# $rmtb = true
p vm.eval(a)
p fibt
謝々々々 台湾宮廷料理海味館 名古屋市熊の前二丁目 ( MiniStop 対面 )
# 台湾がアメリカからちょっかい掛けられていた頃に小説ネタとして考えた策 :
#
# A. 国名変更 ( 台湾民族日本州国 )
#
# B. 大政馳走 ( 下渡 / 維持 ) + 大台湾島無血開城 ( ※ 但し 鴻海夏普国ゑ ) ← 中華漁師は台湾籍を名乗れば日本領海 ( 含尖閣 ) で少量漁猟可 ?
# ( 日本からは沖縄県を嫁に出す ( 日本国台湾州沖縄県 ※ 但し 沖縄米軍基地一掃 ( 台湾移設 → 三つ巴の状況を作る為に北●鮮大使館なりを隣接 + 韓国軍基地 + 自●隊基地 )
# → 沖縄県経済策 : 全県民へベーシックインカム )
#
# C. B. + 台湾島各米軍基地傍にコ●壱と●戸屋と個人寿司店と個人拉麺店の出店を大バックアップ ( 謝辞 : 機材提供実績感謝 徳鮨白土店 寿司けん白土店 寿し友司岡崎店 六八鮨鴻海店 )
#
# この小説を何方かご執筆なさっては如何でしょうか ( 顔のない独裁者 2 ? )