class IDL::AST::TemplateModuleReference

Public Class Methods

new(_name, _enclosure, _params) click to toggle source
Calls superclass method IDL::AST::Leaf::new
# File lib/ridl/node.rb, line 783
def initialize(_name, _enclosure, _params)
  super(_name, _enclosure)
  unless _params[:tpl_type].is_a?(IDL::Type::ScopedName) && _params[:tpl_type].is_node?(IDL::AST::TemplateModule)
    raise "templated module reference type required for #{typename} #{scoped_lm_name}: got #{_params[:tpl_type].typename}"
  end

  @template = _params[:tpl_type].resolved_type.node
  _params[:tpl_params].each do |p|
    unless (p.is_a?(IDL::Type::ScopedName) || p.is_a?(IDL::Expression::ScopedName)) && p.is_node?(IDL::AST::TemplateParam)
      raise "invalid template module parameter for template module reference #{typename} #{scoped_lm_name}: #{p.typename}"
    end
  end
  @params = _params[:tpl_params].collect { |p| p.resolved_node }
end

Public Instance Methods

instantiate(instantiation_context, _enclosure) click to toggle source
# File lib/ridl/node.rb, line 808
def instantiate(instantiation_context, _enclosure)
  inst_params = @params.collect do |tp|
    # concrete objects are either Expression or Type
    tp.concrete
  end
  mod_inst = IDL::AST::Module.new(self.name, _enclosure, { template: @template, template_params: inst_params })
  @template.instantiate(mod_inst, instantiation_context)
  mod_inst
end
marshal_dump() click to toggle source
Calls superclass method IDL::AST::Leaf#marshal_dump
# File lib/ridl/node.rb, line 798
def marshal_dump
  super() << @template << @params
end
marshal_load(vars) click to toggle source
Calls superclass method IDL::AST::Leaf#marshal_load
# File lib/ridl/node.rb, line 802
def marshal_load(vars)
  @params = vars.pop
  @template = vars.pop
  super(vars)
end
resolve(_name) click to toggle source
# File lib/ridl/node.rb, line 818
def resolve(_name)
  @template.resolve(_name)
end