Class: CodeTools::AST::ScopedConstant
- Inherits:
-
Node
- Object
- Node
- CodeTools::AST::ScopedConstant
show all
- Defined in:
- lib/rubinius/code/ast/constants.rb
Instance Attribute Summary collapse
Attributes inherited from Node
#line
Instance Method Summary
collapse
Methods inherited from Node
#ascii_graph, #attributes, #children, match_arguments?, match_send?, #new_block_generator, #new_generator, #node_name, #or_bytecode, #pos, #set_child, transform, #transform, transform_comment, transform_kind, transform_kind=, transform_name, #visit, #walk
Constructor Details
#initialize(line, parent, name) ⇒ ScopedConstant
Returns a new instance of ScopedConstant.
31
32
33
34
35
|
# File 'lib/rubinius/code/ast/constants.rb', line 31
def initialize(line, parent, name)
@line = line
@parent = parent
@name = name
end
|
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
29
30
31
|
# File 'lib/rubinius/code/ast/constants.rb', line 29
def name
@name
end
|
#parent ⇒ Object
Returns the value of attribute parent.
29
30
31
|
# File 'lib/rubinius/code/ast/constants.rb', line 29
def parent
@parent
end
|
Instance Method Details
#assign_bytecode(g, value) ⇒ Object
44
45
46
47
48
49
50
51
|
# File 'lib/rubinius/code/ast/constants.rb', line 44
def assign_bytecode(g, value)
pos(g)
value.bytecode(g)
g.push_literal @name
@parent.bytecode(g)
g.rotate 3
end
|
#bytecode(g) ⇒ Object
37
38
39
40
41
42
|
# File 'lib/rubinius/code/ast/constants.rb', line 37
def bytecode(g)
pos(g)
@parent.bytecode(g)
g.find_const @name
end
|
#defined(g) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/rubinius/code/ast/constants.rb', line 61
def defined(g)
f = g.new_label
done = g.new_label
value_defined(g, f, false)
g.pop
g.push_literal "constant"
g.goto done
f.set!
g.push_nil
done.set!
end
|
#masgn_bytecode(g) ⇒ Object
53
54
55
56
57
58
59
|
# File 'lib/rubinius/code/ast/constants.rb', line 53
def masgn_bytecode(g)
pos(g)
@parent.bytecode(g)
g.swap
g.push_literal @name
end
|
#to_sexp ⇒ Object
Also known as:
assign_sexp
109
110
111
|
# File 'lib/rubinius/code/ast/constants.rb', line 109
def to_sexp
[:colon2, @parent.to_sexp, @name]
end
|
#value_defined(g, f, const_missing = true) ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/rubinius/code/ast/constants.rb', line 77
def value_defined(g, f, const_missing=true)
g.push_exception_state
outer_exc_state = g.new_stack_local
g.set_stack_local outer_exc_state
g.pop
ex = g.new_label
ok = g.new_label
g.setup_unwind ex, RescueType
@parent.bytecode(g)
g.push_literal @name
if const_missing
g.push_true
else
g.push_false
end
g.invoke_primitive :vm_const_defined_under, 3
g.pop_unwind
g.goto ok
ex.set!
g.clear_exception
g.push_stack_local outer_exc_state
g.restore_exception_state
g.goto f
ok.set!
end
|