Method: QDynamic#def

Defined in:
lib/q-language/methods/dynamic.rb

#def(token, &block) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/q-language/methods/dynamic.rb', line 7

def def (token, &block)
  env = self.env::replicate
  
  value.define_singleton_method(:"__Q_#{token}__") do |object = nil|
    env::frame(self) { block.call(object, env) }
  end
  
  env = self.env::replicate
  env.max_nodes = self.env.max_method_nodes
  
  value.define_singleton_method(token) do |object = nil|
    begin
      env::frame(self) { block.call(object, env) }
    rescue Q_Environment::TooManyNodes
      nil
    end
  end
  
  value
end