Class: Puppet::Pops::Types::PCallableType
- Inherits:
-
PAnyType
- Object
- TypedModelObject
- PAnyType
- Puppet::Pops::Types::PCallableType
- Defined in:
- lib/puppet/pops/types/types.rb
Constant Summary collapse
- DEFAULT =
PCallableType.new(nil, nil, nil)
Instance Attribute Summary collapse
-
#block_type ⇒ PAnyType|nil
readonly
Although being an abstract type reference, only Callable, or all Callables wrapped in Optional or Variant are supported If not set, the meaning is that block is not supported.
-
#param_types ⇒ PTupleType
readonly
Types of parameters as a Tuple with required/optional count, or an Integer with min (required), max count.
-
#return_type ⇒ PAnyType
readonly
The type for the values returned by this callable.
Class Method Summary collapse
Instance Method Summary collapse
- #accept(visitor, guard) ⇒ Object
-
#block_range ⇒ Object
Range [0,0], [0,1], or [1,1] for the block.
- #callable_args?(required_callable_t, guard) ⇒ Boolean private
-
#callable_with?(args, block = nil) ⇒ Boolean
Returns ‘true` if this instance is a callable that accepts the given args.
- #eql?(o) ⇒ Boolean
- #generalize ⇒ Object
- #hash ⇒ Object
-
#initialize(param_types, block_type = nil, return_type = nil) ⇒ PCallableType
constructor
A new instance of PCallableType.
- #instance?(o, guard = nil) ⇒ Boolean
- #kind_of_callable?(optional = true, guard = nil) ⇒ Boolean
-
#last_range ⇒ Object
Returns the number of accepted arguments for the last parameter type [min, max].
- #normalize(guard = nil) ⇒ Object
- #resolve(loader) ⇒ Object
-
#size_range ⇒ Object
Returns the number of accepted arguments [min, max].
Methods inherited from PAnyType
#==, #assignable?, #callable?, #check_self_recursion, create, #create, #iterable?, #iterable_type, #loader, #name, new_function, #new_function, #really_instance?, #roundtrip_with_string?, simple_name, #simple_name, #to_alias_expanded_s, #to_s
Methods inherited from TypedModelObject
_pcore_type, create_ptype, register_ptypes
Methods included from PuppetObject
#_pcore_all_contents, #_pcore_contents, #_pcore_init_hash, #_pcore_type
Constructor Details
#initialize(param_types, block_type = nil, return_type = nil) ⇒ PCallableType
Returns a new instance of PCallableType.
2288 2289 2290 2291 2292 |
# File 'lib/puppet/pops/types/types.rb', line 2288 def initialize(param_types, block_type = nil, return_type = nil) @param_types = param_types @block_type = block_type @return_type = return_type == PAnyType::DEFAULT ? nil : return_type end |
Instance Attribute Details
#block_type ⇒ PAnyType|nil (readonly)
Although being an abstract type reference, only Callable, or all Callables wrapped in Optional or Variant are supported If not set, the meaning is that block is not supported.
2283 2284 2285 |
# File 'lib/puppet/pops/types/types.rb', line 2283 def block_type @block_type end |
#param_types ⇒ PTupleType (readonly)
Types of parameters as a Tuple with required/optional count, or an Integer with min (required), max count
2277 2278 2279 |
# File 'lib/puppet/pops/types/types.rb', line 2277 def param_types @param_types end |
#return_type ⇒ PAnyType (readonly)
Returns The type for the values returned by this callable. Returns ‘nil` if return value is unconstrained.
2273 2274 2275 |
# File 'lib/puppet/pops/types/types.rb', line 2273 def return_type @return_type end |
Class Method Details
.register_ptype(loader, ir) ⇒ Object
2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 |
# File 'lib/puppet/pops/types/types.rb', line 2255 def self.register_ptype(loader, ir) create_ptype(loader, ir, 'AnyType', 'param_types' => { KEY_TYPE => POptionalType.new(PTupleType::DEFAULT), KEY_VALUE => nil }, 'block_type' => { KEY_TYPE => POptionalType.new(PCallableType::DEFAULT), KEY_VALUE => nil }, 'return_type' => { KEY_TYPE => POptionalType.new(PTypeType::DEFAULT), KEY_VALUE => PAnyType::DEFAULT } ) end |
Instance Method Details
#accept(visitor, guard) ⇒ Object
2294 2295 2296 2297 2298 2299 |
# File 'lib/puppet/pops/types/types.rb', line 2294 def accept(visitor, guard) super @param_types.accept(visitor, guard) unless @param_types.nil? @block_type.accept(visitor, guard) unless @block_type.nil? @return_type.accept(visitor, guard) unless @return_type.nil? end |
#block_range ⇒ Object
Range [0,0], [0,1], or [1,1] for the block
2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 |
# File 'lib/puppet/pops/types/types.rb', line 2365 def block_range case block_type when POptionalType [0,1] when PVariantType, PCallableType [1,1] else [0,0] end end |
#callable_args?(required_callable_t, guard) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
2343 2344 2345 2346 |
# File 'lib/puppet/pops/types/types.rb', line 2343 def callable_args?(required_callable_t, guard) # If the required callable is euqal or more specific than self, self is acceptable arguments required_callable_t.assignable?(self, guard) end |
#callable_with?(args, block = nil) ⇒ Boolean
Returns ‘true` if this instance is a callable that accepts the given args
2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 |
# File 'lib/puppet/pops/types/types.rb', line 2331 def callable_with?(args, block = nil) # nil param_types and compatible return type means other Callable is assignable return true if @param_types.nil? return false unless @param_types.instance?(args) if @block_type.nil? block == nil else @block_type.instance?(block) end end |
#eql?(o) ⇒ Boolean
2380 2381 2382 |
# File 'lib/puppet/pops/types/types.rb', line 2380 def eql?(o) self.class == o.class && @param_types == o.param_types && @block_type == o.block_type && @return_type == o.return_type end |
#generalize ⇒ Object
2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 |
# File 'lib/puppet/pops/types/types.rb', line 2301 def generalize if self == DEFAULT DEFAULT else params_t = @param_types.nil? ? nil : @param_types.generalize block_t = @block_type.nil? ? nil : @block_type.generalize return_t = @return_type.nil? ? nil : @return_type.generalize @param_types.equal?(params_t) && @block_type.equal?(block_t) && @return_type.equal?(return_t) ? self : PCallableType.new(params_t, block_t, return_t) end end |
#hash ⇒ Object
2376 2377 2378 |
# File 'lib/puppet/pops/types/types.rb', line 2376 def hash [@param_types, @block_type, @return_type].hash end |
#instance?(o, guard = nil) ⇒ Boolean
2323 2324 2325 |
# File 'lib/puppet/pops/types/types.rb', line 2323 def instance?(o, guard = nil) (o.is_a?(Proc) || o.is_a?(Evaluator::Closure) || o.is_a?(Functions::Function)) && assignable?(TypeCalculator.infer(o), guard) end |
#kind_of_callable?(optional = true, guard = nil) ⇒ Boolean
2348 2349 2350 |
# File 'lib/puppet/pops/types/types.rb', line 2348 def kind_of_callable?(optional=true, guard = nil) true end |
#last_range ⇒ Object
Returns the number of accepted arguments for the last parameter type [min, max]
2359 2360 2361 |
# File 'lib/puppet/pops/types/types.rb', line 2359 def last_range @param_types.nil? ? nil : @param_types.repeat_last_range end |
#normalize(guard = nil) ⇒ Object
2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 |
# File 'lib/puppet/pops/types/types.rb', line 2312 def normalize(guard = nil) if self == DEFAULT DEFAULT else params_t = @param_types.nil? ? nil : @param_types.normalize(guard) block_t = @block_type.nil? ? nil : @block_type.normalize(guard) return_t = @return_type.nil? ? nil : @return_type.normalize(guard) @param_types.equal?(params_t) && @block_type.equal?(block_t) && @return_type.equal?(return_t) ? self : PCallableType.new(params_t, block_t, return_t) end end |
#resolve(loader) ⇒ Object
2384 2385 2386 2387 2388 2389 |
# File 'lib/puppet/pops/types/types.rb', line 2384 def resolve(loader) params_t = @param_types.nil? ? nil : @param_types.resolve(loader) block_t = @block_type.nil? ? nil : @block_type.resolve(loader) return_t = @return_type.nil? ? nil : @return_type.resolve(loader) @param_types.equal?(params_t) && @block_type.equal?(block_t) && @return_type.equal?(return_t) ? self : self.class.new(params_t, block_t, return_t) end |
#size_range ⇒ Object
Returns the number of accepted arguments [min, max]
2353 2354 2355 |
# File 'lib/puppet/pops/types/types.rb', line 2353 def size_range @param_types.nil? ? nil : @param_types.size_range end |