class IDL::AST::Member

Attributes

idltype[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 2597
def initialize(_name, _enclosure, params)
  super(_name, _enclosure)
  @idltype = params[:type]
  unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam)
    raise "Anonymous type definitions are not allowed!" if @idltype.is_anonymous?
    raise "Exception #{@idltype.typename} is not allowed as member!" if @idltype.is_node?(IDL::AST::Exception)

    ## check for use of incomplete types
    unless @idltype.is_complete?
      ## verify type is used in sequence
      if @idltype.resolved_type.is_a? IDL::Type::Sequence
        ## find the (non-sequence) elementtype
        seq_ = @idltype.resolved_type
        mtype = seq_.basetype
        while mtype.resolved_type.is_a? IDL::Type::Sequence
          seq_ = mtype.resolved_type
          mtype = seq_.basetype
        end
        ## is it an incomplete struct, union or valuetype?
        if mtype.is_a? IDL::Type::ScopedName
          case mtype.resolved_type
          when IDL::Type::Struct, IDL::Type::Union, IDL::Type::Valuetype
            unless mtype.node.is_defined?
              ## check if incomplete struct/union is contained within definition of self
              enc = _enclosure
              while enc.is_a?(IDL::AST::Struct) || enc.is_a?(IDL::AST::Union) || enc.is_a?(IDL::AST::Valuetype)
                if enc.scoped_name == mtype.node.scoped_name
                  ## mark enclosure as recursive
                  enc.recursive = true
                  ## mark sequence as recursive type !!! DEPRECATED !!!; leave till R2CORBA updated
                  seq_.recursive = true
                  return
                end
                enc = enc.enclosure
              end
            end
            return # incomplete types in sequences allowed
          end
        end
      end
      raise "Incomplete type #{@idltype.typename} not allowed here!"
    end
  end
end

Public Instance Methods

instantiate(instantiation_context, _enclosure, _params = {}) click to toggle source
Calls superclass method IDL::AST::Leaf#instantiate
# File lib/ridl/node.rb, line 2655
def instantiate(instantiation_context, _enclosure, _params = {})
  _params.merge!({
    type: @idltype.instantiate(instantiation_context)
  })
  super(instantiation_context, _enclosure, _params)
end
is_local?(recurstk) click to toggle source
# File lib/ridl/node.rb, line 2642
def is_local?(recurstk)
  idltype.is_local?(recurstk)
end
marshal_dump() click to toggle source
Calls superclass method IDL::AST::Leaf#marshal_dump
# File lib/ridl/node.rb, line 2646
def marshal_dump
  super() << @idltype
end
marshal_load(vars) click to toggle source
Calls superclass method IDL::AST::Leaf#marshal_load
# File lib/ridl/node.rb, line 2650
def marshal_load(vars)
  @idltype = vars.pop
  super(vars)
end