Class: SystemRDL::Evaluator::Instance
- Inherits:
-
Object
- Object
- SystemRDL::Evaluator::Instance
show all
- Defined in:
- lib/systemrdl/evaluator/instance.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(definition, parent, name, token_range) ⇒ Instance
Returns a new instance of Instance.
6
7
8
9
10
11
12
13
|
# File 'lib/systemrdl/evaluator/instance.rb', line 6
def initialize(definition, parent, name, token_range)
@definition = definition
@parent = parent
@name = name
@token_range = token_range
@properties = []
@instances = []
end
|
Instance Attribute Details
#array_info ⇒ Object
Returns the value of attribute array_info.
18
19
20
|
# File 'lib/systemrdl/evaluator/instance.rb', line 18
def array_info
@array_info
end
|
#definition ⇒ Object
Returns the value of attribute definition.
15
16
17
|
# File 'lib/systemrdl/evaluator/instance.rb', line 15
def definition
@definition
end
|
#instances ⇒ Object
Returns the value of attribute instances.
21
22
23
|
# File 'lib/systemrdl/evaluator/instance.rb', line 21
def instances
@instances
end
|
#name ⇒ Object
Returns the value of attribute name.
17
18
19
|
# File 'lib/systemrdl/evaluator/instance.rb', line 17
def name
@name
end
|
#parent ⇒ Object
Returns the value of attribute parent.
16
17
18
|
# File 'lib/systemrdl/evaluator/instance.rb', line 16
def parent
@parent
end
|
#properties ⇒ Object
Returns the value of attribute properties.
20
21
22
|
# File 'lib/systemrdl/evaluator/instance.rb', line 20
def properties
@properties
end
|
#token_range ⇒ Object
Returns the value of attribute token_range.
19
20
21
|
# File 'lib/systemrdl/evaluator/instance.rb', line 19
def token_range
@token_range
end
|
Instance Method Details
54
55
56
|
# File 'lib/systemrdl/evaluator/instance.rb', line 54
def addrmap?
layer == :addrmap
end
|
86
87
88
|
# File 'lib/systemrdl/evaluator/instance.rb', line 86
def array?
false
end
|
#element_name ⇒ Object
27
28
29
30
31
32
33
34
|
# File 'lib/systemrdl/evaluator/instance.rb', line 27
def element_name
return name.to_s unless array?
array_info
.indices
.inject([name]) { |name_elements, index| name_elements << "[#{index}]" }
.join
end
|
70
71
72
|
# File 'lib/systemrdl/evaluator/instance.rb', line 70
def field?
layer == :field
end
|
#finalize ⇒ Object
108
109
110
111
|
# File 'lib/systemrdl/evaluator/instance.rb', line 108
def finalize
@instances.each(&:finalize)
@definition.finalize(self)
end
|
#find_addrmap ⇒ Object
78
79
80
81
82
83
84
|
# File 'lib/systemrdl/evaluator/instance.rb', line 78
def find_addrmap
if RUBY_VERSION >= '4.0'
upper_instances(include_root: false, include_self: true).rfind(&:addrmap?)
else
upper_instances(include_root: false, include_self: true).reverse_each.find(&:addrmap?)
end
end
|
#full_name ⇒ Object
36
37
38
|
# File 'lib/systemrdl/evaluator/instance.rb', line 36
def full_name
upper_instances(include_root: false, include_self: true).map(&:element_name).join('.')
end
|
#layer ⇒ Object
46
47
48
|
# File 'lib/systemrdl/evaluator/instance.rb', line 46
def layer
definition.layer
end
|
62
63
64
|
# File 'lib/systemrdl/evaluator/instance.rb', line 62
def mem?
layer == :mem
end
|
#property(name) ⇒ Object
90
91
92
|
# File 'lib/systemrdl/evaluator/instance.rb', line 90
def property(name)
properties.find { |prop| prop.name == name }
end
|
#property_value(name) ⇒ Object
94
95
96
|
# File 'lib/systemrdl/evaluator/instance.rb', line 94
def property_value(name)
property(name)&.value
end
|
66
67
68
|
# File 'lib/systemrdl/evaluator/instance.rb', line 66
def reg?
layer == :reg
end
|
58
59
60
|
# File 'lib/systemrdl/evaluator/instance.rb', line 58
def regfile?
layer == :regfile
end
|
#revalidate ⇒ Object
103
104
105
106
|
# File 'lib/systemrdl/evaluator/instance.rb', line 103
def revalidate
@definition.revalidate(self)
@instances.each(&:revalidate)
end
|
50
51
52
|
# File 'lib/systemrdl/evaluator/instance.rb', line 50
def root?
layer == :root
end
|
#structural_component? ⇒ Boolean
74
75
76
|
# File 'lib/systemrdl/evaluator/instance.rb', line 74
def structural_component?
addrmap? || regfile? || mem? || reg? || field?
end
|
#to_value(token_range) ⇒ Object
23
24
25
|
# File 'lib/systemrdl/evaluator/instance.rb', line 23
def to_value(token_range)
Value.new(self, :"#{layer}_reference", nil, token_range)
end
|
#upper_instances(include_root: false, include_self: false) ⇒ Object
40
41
42
43
44
|
# File 'lib/systemrdl/evaluator/instance.rb', line 40
def upper_instances(include_root: false, include_self: false)
instances = (root? && []) || parent.upper_instances(include_root:, include_self: true)
instances << self if (root? && include_root) || (!root? && include_self)
instances
end
|
#validate ⇒ Object
98
99
100
101
|
# File 'lib/systemrdl/evaluator/instance.rb', line 98
def validate
@definition.validate(self)
@instances.each(&:revalidate)
end
|