Class: SystemRDL::Evaluator::ComponentDefinition

Inherits:
Object
  • Object
show all
Includes:
Common
Defined in:
lib/systemrdl/evaluator/component_definition.rb

Instance Attribute Summary collapse

Attributes included from Common

#component, #parent, #token_range

Instance Method Summary collapse

Constructor Details

#initialize(id, elements, insts, token_range) ⇒ ComponentDefinition

Returns a new instance of ComponentDefinition.



8
9
10
11
12
13
14
15
# File 'lib/systemrdl/evaluator/component_definition.rb', line 8

def initialize(id, elements, insts, token_range)
  super(token_range)
  @id = id || insts.insts[0].inst_id
  @definitions = {}
  @elements = elements
  @insts = insts
  @default_properties = {}
end

Instance Attribute Details

#definitionsObject (readonly)

Returns the value of attribute definitions.



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

def definitions
  @definitions
end

#idObject (readonly)

Returns the value of attribute id.



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

def id
  @id
end

Instance Method Details

#assign_default_property(name, value, token_range) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/systemrdl/evaluator/component_definition.rb', line 53

def assign_default_property(name, value, token_range)
  if @default_properties.key?(name)
    message = "#{name} already assigned in this scope"
    raise_evaluation_error message, token_range
  end

  @default_properties[name] = value
end

#connect(parent, component) ⇒ Object



20
21
22
23
24
25
# File 'lib/systemrdl/evaluator/component_definition.rb', line 20

def connect(parent, component)
  super
  @component&.add_definition(self)
  @elements.each { |element| element.connect(self, self) }
  @insts&.connect(self, self)
end

#create_instances(parent_instance, inst_args, token_range, **optargs) ⇒ Object



38
39
40
41
42
# File 'lib/systemrdl/evaluator/component_definition.rb', line 38

def create_instances(parent_instance, inst_args, token_range, **optargs)
  eval_array(inst_args.values) do |array_info|
    create_instance(parent_instance, inst_args, array_info, token_range, **optargs)
  end
end

#evaluate(instance, **optargs) ⇒ Object



33
34
35
36
# File 'lib/systemrdl/evaluator/component_definition.rb', line 33

def evaluate(instance, **optargs)
  check_definable(instance)
  @insts&.evaluate(instance, @parent, @id, **optargs)
end

#finalize(_instance) ⇒ Object



50
51
# File 'lib/systemrdl/evaluator/component_definition.rb', line 50

def finalize(_instance)
end

#find_default_property(name) ⇒ Object



62
63
64
65
66
67
68
69
70
# File 'lib/systemrdl/evaluator/component_definition.rb', line 62

def find_default_property(name)
  upper_layers.reverse_each do |component|
    if (prop = component.default_properties[name])
      return prop
    end
  end

  nil
end

#revalidate(_instance) ⇒ Object



47
48
# File 'lib/systemrdl/evaluator/component_definition.rb', line 47

def revalidate(_instance)
end

#upper_layers(include_self: false) ⇒ Object



27
28
29
30
31
# File 'lib/systemrdl/evaluator/component_definition.rb', line 27

def upper_layers(include_self: false)
  layers = (layer == :root && []) || component.upper_layers(include_self: true)
  layers << self if include_self
  layers
end

#validate(_instance) ⇒ Object



44
45
# File 'lib/systemrdl/evaluator/component_definition.rb', line 44

def validate(_instance)
end