昨日のの改良
- 使ってない tempfile の require を削除
- asm メソッドへのブロック渡し にして asm_fin メソッドは廃止
def asm funcname = '_' + rand.to_s[2..-1] cth = Thread.current @bufs[cth] = '' @bufs[cth] << 'global ' + funcname + "\n" + funcname + ':' + "\n" yield basename = '/tmp/' + funcname tempfile = open basename + '.asm', 'w' tempfile.write @bufs[cth] @bufs.delete cth tempfile.close system 'nasm -f elf ' + basename + '.asm' system 'rm ' + basename + '.asm' system 'gcc -shared -fPIC -o ' + basename + '.so ' + basename + '.o' system 'rm ' + basename + '.o' RASM.dlload basename + '.so' system 'rm ' + basename + '.so' RASM.extern 'int ' + funcname + '()' funcname end
def bar a, b, c asm { mov EAX, a add EAX, b mov EBX, c mul EBX ret } end
と、こんな感じ