Sha256: f42f70ac1b3bcfcbf40277dd67263c4bd0f2770389712a18e01fd54a3a8bf30e
Contents?: true
Size: 1.71 KB
Versions: 1
Compression:
Stored size: 1.71 KB
Contents
require "rupy/python" require "rupy/conversion" require 'rupy/macros' require 'rupy/conversion' require 'rupy/pyobject' require "rupy/pymainclass" require "rupy/rubypyproxy" module Rupy class << self def eval(code) globals = PyObject.new({ "__builtins__" => PyMain.builtin.pObject, }) empty_hash = PyObject.new({}) ptr = Python.PyRun_String(code, Python::PY_FILE_INPUT, globals.pointer, empty_hash.pointer) end def generator_type @generator_type ||= lambda do code = <<-eof def rupy_generator(callback): while True: yield callback() eof globals = PyObject.new({ "__builtins__" => PyMain.builtin.pObject, }) empty_hash = PyObject.new({}) ptr = Python.PyRun_String(code, Python::PY_FILE_INPUT, globals.pointer, empty_hash.pointer) ptr = Python.PyRun_String("rupy_generator", Python::PY_EVAL_INPUT, globals.pointer, empty_hash.pointer) if PythonError.error? raise PythonError.handle_error end RubyPyProxy.new(PyObject.new(ptr)) end.call end def generator return lambda do |*args| fib = Fiber.new do yield *args Python.PyErr_SetNone(Python.PyExc_StopIteration) FFI::Pointer::NULL end generator_type.__call__(lambda do fib.resume end) end end def yield(*args) Fiber.yield(*args) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rupy-0.4.2 | lib/rupy/pygenerator.rb |