class IDL::AST::Component
Constants
- DEFINABLE
Public Class Methods
new(_name, _enclosure, params)
click to toggle source
Calls superclass method
IDL::AST::ComponentBase::new
# File lib/ridl/node.rb, line 1478 def initialize(_name, _enclosure, params) @idltype = IDL::Type::Component.new(self) super(_name, _enclosure, params) @defined = !params[:forward] end
Public Instance Methods
attributes(include_bases = false, traversed = nil)
click to toggle source
# File lib/ridl/node.rb, line 1536 def attributes(include_bases = false, traversed = nil) atts = @children.inject([]) do |lst, c| if IDL::AST::Port === c lst.concat(c.attributes) else lst << c end lst end atts.concat(base_attributes(traversed || [])) if include_bases atts end
instantiate(instantiation_context, _enclosure)
click to toggle source
Calls superclass method
IDL::AST::ComponentBase#instantiate
# File lib/ridl/node.rb, line 1493 def instantiate(instantiation_context, _enclosure) # instantiate concrete component def and validate super(instantiation_context, _enclosure, { forward: self.is_forward? }) end
is_defined?()
click to toggle source
# File lib/ridl/node.rb, line 1498 def is_defined? @defined end
is_forward?()
click to toggle source
# File lib/ridl/node.rb, line 1502 def is_forward? not @defined end
marshal_dump()
click to toggle source
Calls superclass method
IDL::AST::ComponentBase#marshal_dump
# File lib/ridl/node.rb, line 1484 def marshal_dump super() << @defined end
marshal_load(vars)
click to toggle source
Calls superclass method
IDL::AST::ComponentBase#marshal_load
# File lib/ridl/node.rb, line 1488 def marshal_load(vars) @defined = vars.pop super(vars) end
operations(include_bases = false, traversed = nil)
click to toggle source
# File lib/ridl/node.rb, line 1532 def operations(include_bases = false, traversed = nil) include_bases ? base_operations(traversed || []) : [] end
ports(include_bases = false, traversed = nil)
click to toggle source
# File lib/ridl/node.rb, line 1523 def ports(include_bases = false, traversed = nil) ports = @children.inject([]) do |lst, c| lst.concat(c.ports) if IDL::AST::Port === c lst end ports.concat(base_ports(traversed || [])) if include_bases ports end
set_base(parent)
click to toggle source
# File lib/ridl/node.rb, line 1506 def set_base(parent) unless parent.is_a?(IDL::Type::ScopedName) && parent.is_node?(IDL::AST::TemplateParam) unless (parent.is_a?(IDL::Type::NodeType) && parent.is_node?(self.class)) raise "invalid inheritance identifier for #{typename} #{scoped_lm_name}: #{parent.typename}" end @resolved_base = parent.resolved_type.node unless @resolved_base.is_defined? raise "#{typename} #{scoped_lm_name} cannot inherit from forward declared #{parent.node.typename} #{parent.node.scoped_lm_name}" end if @resolved_base.has_base?(self) raise "circular inheritance detected for #{typename} #{scoped_lm_name}: #{parent.node.scoped_lm_name} is descendant" end end @base = parent.node end
Protected Instance Methods
base_ports(traversed)
click to toggle source
recursively collect ports from bases
# File lib/ridl/node.rb, line 1552 def base_ports(traversed) traversed.push self ports = [] if (base = @resolved_base) base = base.idltype.resolved_type.node if base.is_a?(IDL::AST::Typedef) ports = base.ports(true, traversed) unless traversed.include?(base) end ports end