Class: IDL::AST::Component
Overview
Constant Summary
collapse
- NAMETYPE =
:class
- DEFINABLE =
[IDL::AST::Attribute, IDL::AST::Port]
Instance Attribute Summary
#base, #idltype, #interfaces
Attributes inherited from Leaf
#annotations, #enclosure, #intern, #lm_name, #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, #undo_introduction, #walk_members
Methods inherited from Leaf
#_set_prefix, #has_annotations?, #is_local?, #is_template?, #lm_name_for_scope, #parsed_name_scope, #replace_prefix, #repo_scopes, #repository_id, #resolve, #scoped_lm_name, #scoped_name, #set_repo_id, #set_repo_version, #typename
Constructor Details
#initialize(_name, _enclosure, params) ⇒ Component
Returns a new instance of Component.
1442
1443
1444
1445
1446
|
# File 'lib/ridl/node.rb', line 1442
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
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
|
# File 'lib/ridl/node.rb', line 1497
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(_context, _enclosure) ⇒ Object
1457
1458
1459
1460
|
# File 'lib/ridl/node.rb', line 1457
def instantiate(_context, _enclosure)
super(_context, _enclosure, { :forward => self.is_forward? })
end
|
#is_defined? ⇒ Boolean
1462
|
# File 'lib/ridl/node.rb', line 1462
def is_defined?; @defined; end
|
#is_forward? ⇒ Boolean
1463
|
# File 'lib/ridl/node.rb', line 1463
def is_forward?; not @defined; end
|
#marshal_dump ⇒ Object
1448
1449
1450
|
# File 'lib/ridl/node.rb', line 1448
def marshal_dump
super() << @defined
end
|
#marshal_load(vars) ⇒ Object
1452
1453
1454
1455
|
# File 'lib/ridl/node.rb', line 1452
def marshal_load(vars)
@defined = vars.pop
super(vars)
end
|
#operations(include_bases = false, traversed = nil) ⇒ Object
1493
1494
1495
|
# File 'lib/ridl/node.rb', line 1493
def operations(include_bases=false,traversed=nil)
include_bases ? base_operations(traversed || []) : []
end
|
#ports(include_bases = false, traversed = nil) ⇒ Object
1484
1485
1486
1487
1488
1489
1490
1491
|
# File 'lib/ridl/node.rb', line 1484
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
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
|
# File 'lib/ridl/node.rb', line 1465
def set_base(parent)
unless parent.is_a?(IDL::Type::ScopedName) && parent.is_node?(IDL::AST::TemplateParam)
if not (parent.is_a?(IDL::Type::ScopedName) && parent.is_node?(self.class))
raise RuntimeError,
"invalid inheritance identifier for #{typename} #{scoped_lm_name}: #{parent.typename}"
end
@resolved_base = parent.resolved_type.node
if not @resolved_base.is_defined?
raise RuntimeError,
"#{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 RuntimeError,
"circular inheritance detected for #{typename} #{scoped_lm_name}: #{parent.node.scoped_lm_name} is descendant"
end
end
@base = parent.node
end
|