class Puppet::Pops::Types::PMetaType
Attributes
loader[R]
Public Class Methods
register_ptype(loader, ir)
click to toggle source
# File lib/puppet/pops/types/p_meta_type.rb 15 def self.register_ptype(loader, ir) 16 # Abstract type. It doesn't register anything 17 end
Public Instance Methods
accept(visitor, guard)
click to toggle source
Calls superclass method
# File lib/puppet/pops/types/p_meta_type.rb 19 def accept(visitor, guard) 20 annotatable_accept(visitor, guard) 21 super 22 end
instance?(o, guard = nil)
click to toggle source
# File lib/puppet/pops/types/p_meta_type.rb 24 def instance?(o, guard = nil) 25 raise NotImplementedError, "Subclass of PMetaType should implement 'instance?'" 26 end
resolve(loader)
click to toggle source
Called from the TypeParser
once it has found a type using the Loader
. The TypeParser
will interpret the contained expression and the resolved type is remembered. This method also checks and remembers if the resolve type contains self recursion.
@param type_parser [TypeParser] type parser that will interpret the type expression @param loader [Loader::Loader] loader to use when loading type aliases @return [PTypeAliasType] the receiver of the call, i.e. `self` @api private
# File lib/puppet/pops/types/p_meta_type.rb 36 def resolve(loader) 37 unless @init_hash_expression.nil? 38 @loader = loader 39 @self_recursion = true # assumed while it being found out below 40 41 init_hash_expression = @init_hash_expression 42 @init_hash_expression = nil 43 if init_hash_expression.is_a?(Model::LiteralHash) 44 init_hash = resolve_literal_hash(loader, init_hash_expression) 45 else 46 init_hash = resolve_hash(loader, init_hash_expression) 47 end 48 _pcore_init_from_hash(init_hash) 49 50 # Find out if this type is recursive. A recursive type has performance implications 51 # on several methods and this knowledge is used to avoid that for non-recursive 52 # types. 53 guard = RecursionGuard.new 54 accept(NoopTypeAcceptor::INSTANCE, guard) 55 @self_recursion = guard.recursive_this?(self) 56 end 57 self 58 end
resolve_hash(loader, init_hash)
click to toggle source
# File lib/puppet/pops/types/p_meta_type.rb 64 def resolve_hash(loader, init_hash) 65 resolve_type_refs(loader, init_hash) 66 end
resolve_literal_hash(loader, init_hash_expression)
click to toggle source
# File lib/puppet/pops/types/p_meta_type.rb 60 def resolve_literal_hash(loader, init_hash_expression) 61 TypeParser.singleton.interpret_LiteralHash(init_hash_expression, loader) 62 end
resolve_type_refs(loader, o)
click to toggle source
# File lib/puppet/pops/types/p_meta_type.rb 68 def resolve_type_refs(loader, o) 69 case o 70 when Hash 71 Hash[o.map { |k, v| [resolve_type_refs(loader, k), resolve_type_refs(loader, v)] }] 72 when Array 73 o.map { |e| resolve_type_refs(loader, e) } 74 when PAnyType 75 o.resolve(loader) 76 else 77 o 78 end 79 end
resolved?()
click to toggle source
# File lib/puppet/pops/types/p_meta_type.rb 81 def resolved? 82 @init_hash_expression.nil? 83 end
to_s()
click to toggle source
Returns the expanded string the form of the alias, e.g. <alias name> = <resolved type>
@return [String] the expanded form of this alias @api public
# File lib/puppet/pops/types/p_meta_type.rb 89 def to_s 90 TypeFormatter.singleton.alias_expanded_string(self) 91 end