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
16 def self.register_ptype(loader, ir)
17   # Abstract type. It doesn't register anything
18 end

Public Instance Methods

accept(visitor, guard) click to toggle source
Calls superclass method
   # File lib/puppet/pops/types/p_meta_type.rb
20 def accept(visitor, guard)
21   annotatable_accept(visitor, guard)
22   super
23 end
instance?(o, guard = nil) click to toggle source
   # File lib/puppet/pops/types/p_meta_type.rb
25 def instance?(o, guard = nil)
26   raise NotImplementedError, "Subclass of PMetaType should implement 'instance?'"
27 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
37 def resolve(loader)
38   unless @init_hash_expression.nil?
39     @loader = loader
40     @self_recursion = true # assumed while it being found out below
41 
42     init_hash_expression = @init_hash_expression
43     @init_hash_expression = nil
44     if init_hash_expression.is_a?(Model::LiteralHash)
45       init_hash = resolve_literal_hash(loader, init_hash_expression)
46     else
47       init_hash = resolve_hash(loader, init_hash_expression)
48     end
49     _pcore_init_from_hash(init_hash)
50 
51     # Find out if this type is recursive. A recursive type has performance implications
52     # on several methods and this knowledge is used to avoid that for non-recursive
53     # types.
54     guard = RecursionGuard.new
55     accept(NoopTypeAcceptor::INSTANCE, guard)
56     @self_recursion = guard.recursive_this?(self)
57   end
58   self
59 end
resolve_hash(loader, init_hash) click to toggle source
   # File lib/puppet/pops/types/p_meta_type.rb
65 def resolve_hash(loader, init_hash)
66   resolve_type_refs(loader, init_hash)
67 end
resolve_literal_hash(loader, init_hash_expression) click to toggle source
   # File lib/puppet/pops/types/p_meta_type.rb
61 def resolve_literal_hash(loader, init_hash_expression)
62   TypeParser.singleton.interpret_LiteralHash(init_hash_expression, loader)
63 end
resolve_type_refs(loader, o) click to toggle source
   # File lib/puppet/pops/types/p_meta_type.rb
69 def resolve_type_refs(loader, o)
70   case o
71   when Hash
72     Hash[o.map { |k, v| [resolve_type_refs(loader, k), resolve_type_refs(loader, v)] }]
73   when Array
74     o.map { |e| resolve_type_refs(loader, e) }
75   when PAnyType
76     o.resolve(loader)
77   else
78     o
79   end
80 end
resolved?() click to toggle source
   # File lib/puppet/pops/types/p_meta_type.rb
82 def resolved?
83   @init_hash_expression.nil?
84 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
90 def to_s
91   TypeFormatter.singleton.alias_expanded_string(self)
92 end