Class: VirtualModule::Builder
- Inherits:
-
Object
- Object
- VirtualModule::Builder
- Includes:
- SexpParser
- Defined in:
- lib/virtual_module.rb
Defined Under Namespace
Classes: ProxyObjectTransmitter
Instance Method Summary collapse
- #add(methods = "") ⇒ Object
- #build ⇒ Object
- #call(receiver, name, *args) ⇒ Object
-
#initialize(option) ⇒ Builder
constructor
A new instance of Builder.
- #serialize(object_lookup_id) ⇒ Object
- #virtual_module_eval(receiver, script, auto_binding = true) ⇒ Object (also: #virtual_instance_eval, #virtual_eval)
Methods included from SexpParser
Constructor Details
#initialize(option) ⇒ Builder
Returns a new instance of Builder.
71 72 73 74 |
# File 'lib/virtual_module.rb', line 71 def initialize(option) @provider = instance_eval("#{option[:lang].capitalize}SourceProvider").new(self, option[:pkgs], option[:transpiler]) @ipc = instance_eval("#{option[:ipc].to_s.capitalize}IpcInterface").new(@provider) end |
Instance Method Details
#add(methods = "") ⇒ Object
76 77 78 79 80 |
# File 'lib/virtual_module.rb', line 76 def add(methods="") @provider.source << methods @provider.compile @ipc.reset @provider end |
#build ⇒ Object
82 83 84 85 |
# File 'lib/virtual_module.rb', line 82 def build @vm = new_vm(nil) @vm end |
#call(receiver, name, *args) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/virtual_module.rb', line 87 def call(receiver, name, *args) if args.last.class==Hash kwargs = args.pop else kwargs = {} end begin @ipc.call(receiver, name, *args, **kwargs) rescue => e new_vm(e.) rescue RuntimeException => e raise e. end end |
#serialize(object_lookup_id) ⇒ Object
102 103 104 |
# File 'lib/virtual_module.rb', line 102 def serialize(object_lookup_id) @ipc.serialize(object_lookup_id) end |
#virtual_module_eval(receiver, script, auto_binding = true) ⇒ Object Also known as: virtual_instance_eval, virtual_eval
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/virtual_module.rb', line 106 def virtual_module_eval(receiver, script, auto_binding=true) vars, type_info, params = inspect_local_vars(binding.of_caller(2), script) @provider.compile(vars, type_info, params, script, auto_binding) @ipc.reset @provider evaluated = self.call(receiver, :vm_builtin_eval_func, [params, type_info]) if auto_binding binding.of_caller(2).eval(evaluated[1].map{|k,v| "#{k}=#{v};" if !v.nil? }.join) end return evaluated[0] end |