昨日のの改良

昨日の Ruby なブツの改良

  • 使ってない 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

と、こんな感じ