Class: SystemRDL::Evaluator::Instance

Inherits:
Object
  • Object
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_infoObject (readonly)

Returns the value of attribute array_info.



19
20
21
# File 'lib/systemrdl/evaluator/instance.rb', line 19

def array_info
  @array_info
end

#definitionObject (readonly)

Returns the value of attribute definition.



16
17
18
# File 'lib/systemrdl/evaluator/instance.rb', line 16

def definition
  @definition
end

#instancesObject (readonly)

Returns the value of attribute instances.



22
23
24
# File 'lib/systemrdl/evaluator/instance.rb', line 22

def instances
  @instances
end

#nameObject (readonly)

Returns the value of attribute name.



18
19
20
# File 'lib/systemrdl/evaluator/instance.rb', line 18

def name
  @name
end

#parentObject (readonly)

Returns the value of attribute parent.



17
18
19
# File 'lib/systemrdl/evaluator/instance.rb', line 17

def parent
  @parent
end

#propertiesObject (readonly)

Returns the value of attribute properties.



21
22
23
# File 'lib/systemrdl/evaluator/instance.rb', line 21

def properties
  @properties
end

#token_rangeObject (readonly)

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

#addrmap?Boolean

Returns:



56
57
58
# File 'lib/systemrdl/evaluator/instance.rb', line 56

def addrmap?
  layer == :addrmap
end

#array?Boolean

Returns:



76
77
78
# File 'lib/systemrdl/evaluator/instance.rb', line 76

def array?
  !array_info.nil?
end

#array_indicesObject



80
81
82
# File 'lib/systemrdl/evaluator/instance.rb', line 80

def array_indices
  array_info&.indices
end

#array_sizesObject



84
85
86
# File 'lib/systemrdl/evaluator/instance.rb', line 84

def array_sizes
  array_info&.sizes
end

#element_nameObject



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

#field?Boolean

Returns:



68
69
70
# File 'lib/systemrdl/evaluator/instance.rb', line 68

def field?
  layer == :field
end

#finalizeObject



114
115
116
117
# File 'lib/systemrdl/evaluator/instance.rb', line 114

def finalize
  @definition.finalize(self)
  @instances.each(&:finalize)
end

#first_element?Boolean

Returns:



88
89
90
# File 'lib/systemrdl/evaluator/instance.rb', line 88

def first_element?
  !array? || array_info.first
end

#full_nameObject



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

Returns:



92
93
94
# File 'lib/systemrdl/evaluator/instance.rb', line 92

def last_element?
  !array? || array_info.last
end

#layerObject



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

#reg?Boolean

Returns:



64
65
66
# File 'lib/systemrdl/evaluator/instance.rb', line 64

def reg?
  layer == :reg
end

#regfile?Boolean

Returns:



60
61
62
# File 'lib/systemrdl/evaluator/instance.rb', line 60

def regfile?
  layer == :regfile
end

#revalidateObject



109
110
111
112
# File 'lib/systemrdl/evaluator/instance.rb', line 109

def revalidate
  @definition.revalidate(self)
  @instances.each(&:revalidate)
end

#root?Boolean

Returns:



52
53
54
# File 'lib/systemrdl/evaluator/instance.rb', line 52

def root?
  layer == :root
end

#structural_component?Boolean

Returns:



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

#validateObject



104
105
106
107
# File 'lib/systemrdl/evaluator/instance.rb', line 104

def validate
  @definition.validate(self)
  @instances.each(&:revalidate)
end