Class: Puppet::Parser::AST::PopsBridge::Expression

Inherits:
Leaf show all
Defined in:
lib/puppet/parser/ast/pops_bridge.rb

Overview

Bridges to one Pops Model Expression The @value is the expression This is used to represent the body of a class, definition, or node, and for each parameter's default value expression.

Direct Known Subclasses

ExpressionSupportingReturn

Constant Summary

Constants inherited from Puppet::Parser::AST

AST

Instance Attribute Summary

Attributes inherited from Leaf

#type, #value

Attributes inherited from Puppet::Parser::AST

#file, #line, #parent, #pos, #scope

Instance Method Summary collapse

Methods inherited from Leaf

#match

Methods inherited from Puppet::Parser::AST

#inspect, #safeevaluate

Methods included from Util::Errors

#adderrorcontext, #devfail, #error_context, error_location, error_location_with_space, error_location_with_unknowns, #exceptwrap, #fail

Constructor Details

#initialize(args) ⇒ Expression


17
18
19
20
# File 'lib/puppet/parser/ast/pops_bridge.rb', line 17

def initialize args
  super
  @@evaluator ||= Puppet::Pops::Parser::EvaluatingParser.new()
end

Instance Method Details

#childrenObject

The 3x requires code plugged in to an AST to have this in certain positions in the tree. The purpose is to either print the content, or to look for things that needs to be defined. This implementation cheats by always returning an empty array. (This allows simple files to not require a “Program” at the top.


59
60
61
# File 'lib/puppet/parser/ast/pops_bridge.rb', line 59

def children
  []
end

#each {|_self| ... } ⇒ Object

Adapts to 3x where top level constructs needs to have each to iterate over children. Short circuit this by yielding self. By adding this there is no need to wrap a pops expression inside an AST::BlockExpression

Yields:

  • (_self)

Yield Parameters:


39
40
41
# File 'lib/puppet/parser/ast/pops_bridge.rb', line 39

def each
  yield self
end

#evaluate(scope) ⇒ Object


31
32
33
34
# File 'lib/puppet/parser/ast/pops_bridge.rb', line 31

def evaluate(scope)
  object = @@evaluator.evaluate(scope, @value)
  @@evaluator.convert_to_3x(object, scope)
end

#sequence_with(other) ⇒ Object


43
44
45
46
47
48
49
50
51
52
53
# File 'lib/puppet/parser/ast/pops_bridge.rb', line 43

def sequence_with(other)
  if value.nil?
    # This happens when testing and not having a complete setup
    other
  else
    # When does this happen ? Ever ?
    raise "sequence_with called on Puppet::Parser::AST::PopsBridge::Expression - please report use case"
    # What should be done if the above happens (We don't want this to happen).
    # Puppet::Parser::AST::BlockExpression.new(:children => [self] + other.children)
  end
end

#source_textObject


26
27
28
29
# File 'lib/puppet/parser/ast/pops_bridge.rb', line 26

def source_text
  source_adapter = Puppet::Pops::Utils.find_closest_positioned(@value)
  source_adapter ? source_adapter.extract_text() : nil
end

#to_sObject


22
23
24
# File 'lib/puppet/parser/ast/pops_bridge.rb', line 22

def to_s
  Puppet::Pops::Model::ModelTreeDumper.new.dump(@value)
end