Class: QDynamic

Inherits:
QObject show all
Defined in:
lib/q-language/methods/dynamic.rb

Overview

Copyright © 2010-2011 Jesse Sielaff

Constant Summary

Constants inherited from Q_Object

Q_Object::Subclasses

Instance Method Summary collapse

Methods inherited from QObject

#and, #array?, #block?, #break_if, #break_unless, #choose, #class?, #dup, #eq?, #eqq?, #false?, #hash?, #if, #jump_if, #jump_unless, #module?, #neq?, #nil?, #not, #number?, #or, #same?, #string?, #tally, #time?, #token?, #true?, #unless, #use, #xor

Methods inherited from Q_Object

class_name, #env, inherited, #initialize, method_added, method_names, #to_q, #to_qliteral, #value

Constructor Details

This class inherits a constructor from Q_Object

Instance Method Details

#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

#dynamic?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/q-language/methods/dynamic.rb', line 28

def dynamic?
  value
end

#eval(&block) ⇒ Object



32
33
34
# File 'lib/q-language/methods/dynamic.rb', line 32

def eval (&block)
  env::frame(value) { block.call }
end

#eval_arg(object, &block) ⇒ Object



36
37
38
# File 'lib/q-language/methods/dynamic.rb', line 36

def eval_arg (object, &block)
  env::frame(value) { block.call(object) }
end

#extend(module_1) ⇒ Object



40
41
42
43
# File 'lib/q-language/methods/dynamic.rb', line 40

def extend (module_1)
  value.extend(module_1) if module_1.instance_of?(Module)
  value
end

#iget(token) ⇒ Object



45
46
47
48
49
50
# File 'lib/q-language/methods/dynamic.rb', line 45

def iget (token)
  value.instance_variable_get(:"@#{token}")
rescue NameError
  # Illegal name for instance variable
  nil
end

#init_valueObject



52
53
54
# File 'lib/q-language/methods/dynamic.rb', line 52

def init_value
  value.instance_variable_get(:"@init")
end

#instance?(class_1) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/q-language/methods/dynamic.rb', line 56

def instance? (class_1)
  value.instance_of?(class_1)
end

#is?(module_1) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/q-language/methods/dynamic.rb', line 60

def is? (module_1)
  value.is_a?(module_1)
end

#iset(token, object) ⇒ Object



64
65
66
67
68
69
# File 'lib/q-language/methods/dynamic.rb', line 64

def iset (token, object)
  value.instance_variable_set(:"@#{token}", object)
rescue NameError
  # Illegal name for instance variable
  nil
end

#metaclassObject



71
72
73
# File 'lib/q-language/methods/dynamic.rb', line 71

def metaclass
  value.class
end

#send(token) ⇒ Object



75
76
77
# File 'lib/q-language/methods/dynamic.rb', line 75

def send (token)
  value.__send__(:"__Q_#{token}__", nil) rescue nil
end

#send_arg(token, object) ⇒ Object



79
80
81
# File 'lib/q-language/methods/dynamic.rb', line 79

def send_arg (token, object)
  value.__send__(:"__Q_#{token}__", object) rescue value
end