class IDL::AST::Port

Constants

EXTPORTDEF_ANNOTATION
PORTTYPES
PORT_MIRRORS

Attributes

idltype[R]
porttype[R]

Public Class Methods

new(_name, _enclosure, params) click to toggle source
Calls superclass method IDL::AST::Leaf::new
# File lib/ridl/node.rb, line 1591
def initialize(_name, _enclosure, params)
  super(_name, _enclosure)
  @idltype  = params[:type]
  @porttype = params[:porttype]
  raise "unknown porttype for  #{typename} #{scoped_lm_name}: #{@porttype}" unless PORTTYPES.include?(@porttype)

  case @porttype
  when :facet, :receptacle
    unless @idltype.is_a?(IDL::Type::Object) ||
          (@idltype.is_a?(IDL::Type::NodeType) && (@idltype.is_node?(IDL::AST::Interface) || @idltype.is_node?(IDL::AST::TemplateParam)))
      raise "invalid type for #{typename} #{scoped_lm_name}:  #{@idltype.typename}"
    end
  when :port, :mirrorport
    unless @idltype.is_a?(IDL::Type::NodeType) && (@idltype.is_node?(IDL::AST::Porttype) || @idltype.is_node?(IDL::AST::TemplateParam))
      raise "invalid type for #{typename} #{scoped_lm_name}:  #{@idltype.typename}"
    end
  else
    unless @idltype.is_a?(IDL::Type::NodeType) && (@idltype.is_node?(IDL::AST::Eventtype) || @idltype.is_node?(IDL::AST::TemplateParam))
      raise "invalid type for #{typename} #{scoped_lm_name}:  #{@idltype.typename}"
    end
  end
  @multiple = params[:multiple] ? true : false
end

Public Instance Methods

attributes() click to toggle source
# File lib/ridl/node.rb, line 1651
def attributes
  case @porttype
  when :port, :mirrorport
    @idltype.resolved_type.node.attributes.collect { |att|
      exp_a = att.expanded_copy(self.name, self.enclosure)
      exp_a.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { extended_port_name: self.name, base_name: att.name, mirror: (@porttype == :mirrorport) })
      exp_a # return expanded copy
    }
  else
    []
  end
end
expanded_copy(name_pfx, enc) click to toggle source
# File lib/ridl/node.rb, line 1628
def expanded_copy(name_pfx, enc)
  p = IDL::AST::Port.new("#{name_pfx}_#{self.name}", enc, {type: @idltype, porttype: @porttype})
  p.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { extended_port_name: name_pfx, base_name: self.name, mirror: false })
  p # return expanded copy
end
expanded_mirror_copy(name_pfx, enc) click to toggle source
# File lib/ridl/node.rb, line 1634
def expanded_mirror_copy(name_pfx, enc)
  p = IDL::AST::Port.new("#{name_pfx}_#{self.name}", enc, {type: @idltype, porttype: PORT_MIRRORS[@porttype]})
  p.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { extended_port_name: name_pfx, base_name: self.name, mirror: true })
  p # return expanded copy
end
instantiate(instantiation_context, _enclosure) click to toggle source
Calls superclass method IDL::AST::Leaf#instantiate
# File lib/ridl/node.rb, line 1615
def instantiate(instantiation_context, _enclosure)
  _params = {
    type: @idltype.instantiate(instantiation_context),
    porttype: @porttype,
    multiple: @multiple
  }
  super(instantiation_context, _enclosure, _params)
end
multiple?() click to toggle source
# File lib/ridl/node.rb, line 1624
def multiple?
  @multiple
end
ports() click to toggle source
# File lib/ridl/node.rb, line 1640
def ports
  case @porttype
  when :port
    @idltype.resolved_type.node.ports.collect { |p| p.expanded_copy(self.name, self.enclosure) }
  when :mirrorport
    @idltype.resolved_type.node.ports.collect { |p| p.expanded_mirror_copy(self.name, self.enclosure) }
  else
    [self]
  end
end