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