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

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, #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

#has_annotations?, #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) ⇒ Struct

Returns a new instance of Struct.



2519
2520
2521
2522
2523
2524
2525
2526
# File 'lib/ridl/node.rb', line 2519

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

Instance Attribute Details

#idltypeObject (readonly)

Returns the value of attribute idltype.



2517
2518
2519
# File 'lib/ridl/node.rb', line 2517

def idltype
  @idltype
end

Instance Method Details

#baseObject



2541
2542
2543
# File 'lib/ridl/node.rb', line 2541

def base
  @base
end

#defined=(f) ⇒ Object



2549
2550
2551
# File 'lib/ridl/node.rb', line 2549

def defined=(f)
  @defined = f
end

#instantiate(instantiation_context, _enclosure) ⇒ Object



2600
2601
2602
2603
2604
2605
2606
2607
# File 'lib/ridl/node.rb', line 2600

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

#is_defined?Boolean

Returns:

  • (Boolean)


2545
2546
2547
# File 'lib/ridl/node.rb', line 2545

def is_defined?
  @defined
end

#is_forward?Boolean

Returns:

  • (Boolean)


2553
2554
2555
# File 'lib/ridl/node.rb', line 2553

def is_forward?
  @forward
end

#is_local?(recurstk = []) ⇒ Boolean

Returns:

  • (Boolean)


2577
2578
2579
2580
2581
2582
2583
2584
2585
# File 'lib/ridl/node.rb', line 2577

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)


2557
2558
2559
# File 'lib/ridl/node.rb', line 2557

def is_recursive?
  @recursive
end

#marshal_dumpObject



2587
2588
2589
# File 'lib/ridl/node.rb', line 2587

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

#marshal_load(vars) ⇒ Object



2591
2592
2593
2594
2595
2596
2597
2598
# File 'lib/ridl/node.rb', line 2591

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

#membersObject



2569
2570
2571
# File 'lib/ridl/node.rb', line 2569

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

#recursive=(f) ⇒ Object



2561
2562
2563
# File 'lib/ridl/node.rb', line 2561

def recursive=(f)
  @recursive = f
end

#set_base(inherits) ⇒ Object



2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
# File 'lib/ridl/node.rb', line 2528

def set_base(inherits)
  unless inherits.nil?
    rtc = inherits.resolved_type
    unless rtc.node.is_defined?
     raise "#{typename} #{scoped_lm_name} cannot inherit from forward declared #{rtc.node.typename} #{rtc.node.scoped_lm_name}"
    end
    unless rtc.node.is_a?(IDL::AST::Struct)
      raise "#{typename} #{scoped_lm_name} cannot inherit from non structure #{rtc.node.typename} #{rtc.node.scoped_lm_name}"
    end
    inherits.node
  end
end

#typesObject



2573
2574
2575
# File 'lib/ridl/node.rb', line 2573

def types
  @children.reject { |c| c.is_a? IDL::AST::Member }
end

#walk_membersObject



2565
2566
2567
# File 'lib/ridl/node.rb', line 2565

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