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