class IDL::AST::TemplateModuleReference

def instantiate(_context, _enclosure)

def instantiate(_context, _enclosure)
  inst_params = @params.collect do |tp|
    # concrete objects are either Expression or Node; latter needs to be repacked as IDL::Type::ScopedName
    # as that is what the TemplateModule#instantiate expects
    tp.concrete.is_a?(IDL::Expression) ? tp.concrete : IDL::Type::ScopedName.new(tp.concrete)
  end
  mod_inst = IDL::AST::Module.new(self.name, _enclosure, { :template => @template, :template_params => inst_params })
  @template.instantiate(mod_inst, _context)
  mod_inst
end