Class: IDL::AST::TemplateModuleReference
- Defined in:
- lib/ridl/node.rb,
lib/ridl/node.rb
Overview
TemplateModule
Constant Summary collapse
- NAMETYPE =
:class
Instance Attribute Summary
Attributes inherited from Leaf
#annotations, #enclosure, #intern, #lm_name, #name, #prefix, #scopes
Instance Method Summary collapse
-
#initialize(_name, _enclosure, _params) ⇒ TemplateModuleReference
constructor
A new instance of TemplateModuleReference.
- #instantiate(_context, _enclosure) ⇒ Object
- #marshal_dump ⇒ Object
- #marshal_load(vars) ⇒ Object
- #resolve(_name) ⇒ Object
Methods inherited from Leaf
#_set_prefix, #has_annotations?, #is_local?, #is_template?, #lm_name_for_scope, #parsed_name_scope, #replace_prefix, #repo_scopes, #repository_id, #scoped_lm_name, #scoped_name, #set_repo_id, #set_repo_version, #typename
Constructor Details
#initialize(_name, _enclosure, _params) ⇒ TemplateModuleReference
Returns a new instance of TemplateModuleReference.
750 751 752 753 754 755 756 757 758 759 760 761 762 |
# File 'lib/ridl/node.rb', line 750 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 RuntimeError, "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 RuntimeError, "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 |
Instance Method Details
#instantiate(_context, _enclosure) ⇒ Object
774 775 776 777 778 779 780 781 782 783 |
# File 'lib/ridl/node.rb', line 774 def instantiate(_context, _enclosure) mod_inst = IDL::AST::Module.new(self.name, _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 @template.instantiate(mod_inst, inst_params, _context) mod_inst end |
#marshal_dump ⇒ Object
764 765 766 |
# File 'lib/ridl/node.rb', line 764 def marshal_dump super() << @template << @params end |
#marshal_load(vars) ⇒ Object
768 769 770 771 772 |
# File 'lib/ridl/node.rb', line 768 def marshal_load(vars) @params = vars.pop @template = vars.pop super(vars) end |
#resolve(_name) ⇒ Object
785 786 787 |
# File 'lib/ridl/node.rb', line 785 def resolve(_name) @template.resolve(_name) end |