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, array_info, token_range) ⇒ Instance
Returns a new instance of Instance.
6
7
8
9
10
11
12
13
14
|
# File 'lib/systemrdl/evaluator/instance.rb', line 6
def initialize(definition, parent, name, array_info, token_range)
@definition = definition
@parent = parent
@name = name
@array_info = array_info
@token_range = token_range
@properties = []
@instances = []
end
|
Instance Attribute Details
#array_info ⇒ Object
Returns the value of attribute array_info.
19
20
21
|
# File 'lib/systemrdl/evaluator/instance.rb', line 19
def array_info
@array_info
end
|
#definition ⇒ Object
Returns the value of attribute definition.
16
17
18
|
# File 'lib/systemrdl/evaluator/instance.rb', line 16
def definition
@definition
end
|
#instances ⇒ Object
Returns the value of attribute instances.
22
23
24
|
# File 'lib/systemrdl/evaluator/instance.rb', line 22
def instances
@instances
end
|
#name ⇒ Object
Returns the value of attribute name.
18
19
20
|
# File 'lib/systemrdl/evaluator/instance.rb', line 18
def name
@name
end
|
#parent ⇒ Object
Returns the value of attribute parent.
17
18
19
|
# File 'lib/systemrdl/evaluator/instance.rb', line 17
def parent
@parent
end
|
#properties ⇒ Object
Returns the value of attribute properties.
21
22
23
|
# File 'lib/systemrdl/evaluator/instance.rb', line 21
def properties
@properties
end
|
#token_range ⇒ Object
Returns the value of attribute token_range.
20
21
22
|
# File 'lib/systemrdl/evaluator/instance.rb', line 20
def token_range
@token_range
end
|
Instance Method Details
56
57
58
|
# File 'lib/systemrdl/evaluator/instance.rb', line 56
def addrmap?
layer == :addrmap
end
|
76
77
78
|
# File 'lib/systemrdl/evaluator/instance.rb', line 76
def array?
!array_info.nil?
end
|
#array_indices ⇒ Object
80
81
82
|
# File 'lib/systemrdl/evaluator/instance.rb', line 80
def array_indices
array_info&.indices
end
|
#array_sizes ⇒ Object
84
85
86
|
# File 'lib/systemrdl/evaluator/instance.rb', line 84
def array_sizes
array_info&.sizes
end
|
#element_name ⇒ Object
28
29
30
31
32
33
34
35
|
# File 'lib/systemrdl/evaluator/instance.rb', line 28
def element_name
return name.to_s unless array?
array_info
.indices
.inject([name]) { |name_elements, index| name_elements << "[#{index}]" }
.join
end
|
68
69
70
|
# File 'lib/systemrdl/evaluator/instance.rb', line 68
def field?
layer == :field
end
|
#finalize ⇒ Object
114
115
116
117
|
# File 'lib/systemrdl/evaluator/instance.rb', line 114
def finalize
@definition.finalize(self)
@instances.each(&:finalize)
end
|
#first_element? ⇒ Boolean
88
89
90
|
# File 'lib/systemrdl/evaluator/instance.rb', line 88
def first_element?
!array? || array_info.first
end
|
#full_name ⇒ Object
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/systemrdl/evaluator/instance.rb', line 37
def full_name
elements = [self]
current = parent
until current.root?
elements.unshift(current)
current = current.parent
end
elements.map(&:element_name).join('.')
end
|
#last_element? ⇒ Boolean
92
93
94
|
# File 'lib/systemrdl/evaluator/instance.rb', line 92
def last_element?
!array? || array_info.last
end
|
#layer ⇒ Object
48
49
50
|
# File 'lib/systemrdl/evaluator/instance.rb', line 48
def layer
definition.layer
end
|
#property(name) ⇒ Object
96
97
98
|
# File 'lib/systemrdl/evaluator/instance.rb', line 96
def property(name)
properties.find { |prop| prop.name == name }
end
|
#property_value(name) ⇒ Object
100
101
102
|
# File 'lib/systemrdl/evaluator/instance.rb', line 100
def property_value(name)
property(name)&.value
end
|
64
65
66
|
# File 'lib/systemrdl/evaluator/instance.rb', line 64
def reg?
layer == :reg
end
|
60
61
62
|
# File 'lib/systemrdl/evaluator/instance.rb', line 60
def regfile?
layer == :regfile
end
|
#revalidate ⇒ Object
109
110
111
112
|
# File 'lib/systemrdl/evaluator/instance.rb', line 109
def revalidate
@definition.revalidate(self)
@instances.each(&:revalidate)
end
|
52
53
54
|
# File 'lib/systemrdl/evaluator/instance.rb', line 52
def root?
layer == :root
end
|
#structural_component? ⇒ Boolean
72
73
74
|
# File 'lib/systemrdl/evaluator/instance.rb', line 72
def structural_component?
addrmap? || regfile? || reg? || field?
end
|
#to_value(token_range) ⇒ Object
24
25
26
|
# File 'lib/systemrdl/evaluator/instance.rb', line 24
def to_value(token_range)
Value.new(self, :"#{layer}_reference", nil, token_range)
end
|
#validate ⇒ Object
104
105
106
107
|
# File 'lib/systemrdl/evaluator/instance.rb', line 104
def validate
@definition.validate(self)
@instances.each(&:revalidate)
end
|