Class: IDL::AST::Component
Overview
Constant Summary
collapse
- DEFINABLE =
[IDL::AST::Attribute, IDL::AST::Port]
Instance Attribute Summary
#base, #idltype, #interfaces
Attributes inherited from Leaf
#annotations, #enclosure, #intern, #name, #prefix, #scopes
Instance Method Summary
collapse
#add_interfaces, #ancestors, #has_base?, #has_support?, #redefine, #supports?
Methods inherited from Derivable
#has_ancestor?, #search_self, #search_self_before_derived
Methods inherited from Node
#define, #introduce, #is_definable?, #match_members, #redefine, #replace_prefix, #resolve, #select_members, #undo_introduction, #walk_members
Methods inherited from Leaf
#has_annotations?, #is_local?, #is_template?, #lm_name, #lm_scopes, #replace_prefix, #repository_id, #resolve, #scoped_lm_name, #scoped_name, #set_repo_id, #set_repo_version, #typename, #unescaped_name
Constructor Details
#initialize(_name, _enclosure, params) ⇒ Component
Returns a new instance of Component.
1485
1486
1487
1488
1489
|
# File 'lib/ridl/node.rb', line 1485
def initialize(_name, _enclosure, params)
@idltype = IDL::Type::Component.new(self)
super(_name, _enclosure, params)
@defined = !params[:forward]
end
|
Instance Method Details
#attributes(include_bases = false, traversed = nil) ⇒ Object
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
|
# File 'lib/ridl/node.rb', line 1543
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) ⇒ Object
1500
1501
1502
1503
|
# File 'lib/ridl/node.rb', line 1500
def instantiate(instantiation_context, _enclosure)
super(instantiation_context, _enclosure, { forward: self.is_forward? })
end
|
#is_defined? ⇒ Boolean
1505
1506
1507
|
# File 'lib/ridl/node.rb', line 1505
def is_defined?
@defined
end
|
#is_forward? ⇒ Boolean
1509
1510
1511
|
# File 'lib/ridl/node.rb', line 1509
def is_forward?
not @defined
end
|
#marshal_dump ⇒ Object
1491
1492
1493
|
# File 'lib/ridl/node.rb', line 1491
def marshal_dump
super() << @defined
end
|
#marshal_load(vars) ⇒ Object
1495
1496
1497
1498
|
# File 'lib/ridl/node.rb', line 1495
def marshal_load(vars)
@defined = vars.pop
super(vars)
end
|
#operations(include_bases = false, traversed = nil) ⇒ Object
1539
1540
1541
|
# File 'lib/ridl/node.rb', line 1539
def operations(include_bases = false, traversed = nil)
include_bases ? base_operations(traversed || []) : []
end
|
#ports(include_bases = false, traversed = nil) ⇒ Object
1530
1531
1532
1533
1534
1535
1536
1537
|
# File 'lib/ridl/node.rb', line 1530
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) ⇒ Object
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
|
# File 'lib/ridl/node.rb', line 1513
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
|