Class: IDL::AST::Struct

Inherits:
Node show all
Defined in:
lib/ridl/node.rb,
lib/ridl/node.rb

Overview

Attribute

Direct Known Subclasses

Exception

Constant Summary collapse

NAMETYPE =
:class
DEFINABLE =
[IDL::AST::Member, IDL::AST::Struct, IDL::AST::Union, IDL::AST::Enum, IDL::AST::Enumerator]

Instance Attribute Summary collapse

Attributes inherited from Leaf

#annotations, #enclosure, #intern, #lm_name, #name, #prefix, #scopes

Instance Method Summary collapse

Methods inherited from Node

#define, #introduce, #is_definable?, #match_members, #redefine, #replace_prefix, #resolve, #select_members, #undo_introduction

Methods inherited from Leaf

#_set_prefix, #has_annotations?, #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, #unescaped_name

Constructor Details

#initialize(_name, _enclosure, params) ⇒ Struct

Returns a new instance of Struct.



2480
2481
2482
2483
2484
2485
2486
# File 'lib/ridl/node.rb', line 2480

def initialize(_name, _enclosure, params)
  @defined = false
  @recursive = false
  @forward = params[:forward] ? true : false
  super(_name, _enclosure)
  @idltype = IDL::Type::Struct.new(self)
end

Instance Attribute Details

#idltypeObject (readonly)

Returns the value of attribute idltype.



2479
2480
2481
# File 'lib/ridl/node.rb', line 2479

def idltype
  @idltype
end

Instance Method Details

#defined=(f) ⇒ Object



2489
# File 'lib/ridl/node.rb', line 2489

def defined=(f); @defined = f end

#instantiate(_context, _enclosure) ⇒ Object



2523
2524
2525
2526
2527
2528
2529
2530
# File 'lib/ridl/node.rb', line 2523

def instantiate(_context, _enclosure)
  _params = {
    :forward => @forward
  }
  _s = super(_context, _enclosure, _params)
  _s.defined = self.is_defined?
  _s
end

#is_defined?Boolean

Returns:

  • (Boolean)


2488
# File 'lib/ridl/node.rb', line 2488

def is_defined?; @defined end

#is_forward?Boolean

Returns:

  • (Boolean)


2490
# File 'lib/ridl/node.rb', line 2490

def is_forward?; @forward end

#is_local?(recurstk = []) ⇒ Boolean

Returns:

  • (Boolean)


2502
2503
2504
2505
2506
2507
2508
2509
# File 'lib/ridl/node.rb', line 2502

def is_local?(recurstk = [])
  # not local if forward decl or recursion detected
  return false if is_forward? || recurstk.include?(self)
  recurstk.push self   # track root node to detect recursion
  ret = members.any? { |m| m.is_local?(recurstk) }
  recurstk.pop
  ret
end

#is_recursive?Boolean

Returns:

  • (Boolean)


2491
# File 'lib/ridl/node.rb', line 2491

def is_recursive?; @recursive end

#marshal_dumpObject



2511
2512
2513
# File 'lib/ridl/node.rb', line 2511

def marshal_dump
  super() << @idltype << @defined << @recursive << @forward
end

#marshal_load(vars) ⇒ Object



2515
2516
2517
2518
2519
2520
2521
# File 'lib/ridl/node.rb', line 2515

def marshal_load(vars)
  @forward = vars.pop
  @recursive = vars.pop
  @defined = vars.pop
  @idltype = vars.pop
  super(vars)
end

#membersObject



2498
2499
2500
# File 'lib/ridl/node.rb', line 2498

def members
  @children.find_all { |c| c.is_a? IDL::AST::Member }
end

#recursive=(f) ⇒ Object



2492
# File 'lib/ridl/node.rb', line 2492

def recursive=(f); @recursive = f end

#walk_members(&block) ⇒ Object



2494
2495
2496
# File 'lib/ridl/node.rb', line 2494

def walk_members(&block)
  @children.each { |m| yield(m) if not m.is_a? IDL::AST::Member }
end