class Puppet::Pops::Model::PNTransformer

Public Class Methods

new() click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
15 def initialize
16   @visitor = Visitor.new(nil, 'transform', 0, 0)
17 end
transform(ast) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
11 def self.transform(ast)
12   singleton.transform(ast)
13 end

Public Instance Methods

binary_op(e, op) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
336 def binary_op(e, op)
337   PN::Call.new(op, transform(e.left_expr), transform(e.right_expr))
338 end
block_as_entry(name, expr) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
359 def block_as_entry(name, expr)
360   if expr.is_a?(BlockExpression)
361     transform(expr.statements).with_name(name)
362   else
363     transform([expr]).with_name(name)
364   end
365 end
call_to_pn(e, r, nr) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
371 def call_to_pn(e, r, nr)
372   entries = [transform(e.functor_expr).with_name('functor'), transform(e.arguments).with_name('args')]
373   entries << transform(e.lambda).with_name('block') unless e.lambda.nil?
374   PN::Map.new(entries).as_call(e.rval_required ? r : nr)
375 end
definition_to_pn(e, type_name, parent = nil, return_type = nil) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
340 def definition_to_pn(e, type_name, parent = nil, return_type = nil)
341   entries = [PN::Literal.new(e.name).with_name('name')]
342   entries << PN::Literal.new(parent).with_name('parent') unless parent.nil?
343   entries << parameters_entry(e.parameters) unless e.parameters.empty?
344   entries << block_as_entry('body', e.body) unless e.body.nil?
345   entries << transform(return_type).with_name('returns') unless return_type.nil?
346   PN::Map.new(entries).as_call(type_name)
347 end
if_to_pn(e, name) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
377 def if_to_pn(e, name)
378   entries = [transform(e.test).with_name('test')]
379   entries << block_as_entry('then', e.then_expr) unless is_nop?(e.then_expr)
380   entries << block_as_entry('else', e.else_expr) unless is_nop?(e.else_expr)
381   PN::Map.new(entries).as_call(name)
382 end
is_nop?(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
332 def is_nop?(e)
333   e.nil? || e.is_a?(Nop)
334 end
parameters_entry(parameters) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
349 def parameters_entry(parameters)
350   PN::Map.new(parameters.map do |p|
351     entries = []
352     entries << transform(p.type_expr).with_name('type') unless p.type_expr.nil?
353     entries << PN::Literal(true).with_name('splat') if p.captures_rest
354     entries << transform(p.value).with_name('value') unless p.value.nil?
355     PN::Map.new(entries).with_name(p.name)
356   end).with_name('params')
357 end
pn_array(a) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
367 def pn_array(a)
368   a.map { |e| transform(e) }
369 end
transform(ast) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
19 def transform(ast)
20   @visitor.visit_this_0(self, ast)
21 end
transform_AccessExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
23 def transform_AccessExpression(e)
24   PN::List.new([transform(e.left_expr)] + pn_array(e.keys)).as_call('access')
25 end
transform_AndExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
27 def transform_AndExpression(e)
28   binary_op(e, 'and')
29 end
transform_ArithmeticExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
31 def transform_ArithmeticExpression(e)
32   binary_op(e, e.operator)
33 end
transform_Array(a) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
35 def transform_Array(a)
36   PN::List.new(pn_array(a))
37 end
transform_AssignmentExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
39 def transform_AssignmentExpression(e)
40   binary_op(e, e.operator)
41 end
transform_AttributeOperation(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
43 def transform_AttributeOperation(e)
44   PN::Call.new(e.operator, PN::Literal.new(e.attribute_name), transform(e.value_expr))
45 end
transform_AttributesOperation(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
47 def transform_AttributesOperation(e)
48   PN::Call.new('splat-hash', transform(e.expr))
49 end
transform_BlockExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
51 def transform_BlockExpression(e)
52   transform(e.statements).as_call('block')
53 end
transform_CallFunctionExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
55 def transform_CallFunctionExpression(e)
56   call_to_pn(e, 'call-lambda', 'invoke-lambda')
57 end
transform_CallMethodExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
59 def transform_CallMethodExpression(e)
60   call_to_pn(e, 'call-method', 'invoke-method')
61 end
transform_CallNamedFunctionExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
63 def transform_CallNamedFunctionExpression(e)
64   call_to_pn(e, 'call', 'invoke')
65 end
transform_CaseExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
67 def transform_CaseExpression(e)
68   PN::Call.new('case', transform(e.test), transform(e.options))
69 end
transform_CaseOption(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
71 def transform_CaseOption(e)
72   PN::Map.new([transform(e.values).with_name('when'), block_as_entry('then', e.then_expr)])
73 end
transform_CollectExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
75 def transform_CollectExpression(e)
76   entries = [transform(e.type_expr).with_name('type'), transform(e.query).with_name('query')]
77   entries << transform(e.operations).with_name('ops') unless e.operations.empty?
78   PN::Map.new(entries).as_call('collect')
79 end
transform_ComparisonExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
81 def transform_ComparisonExpression(e)
82   binary_op(e, e.operator)
83 end
transform_ConcatenatedString(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
85 def transform_ConcatenatedString(e)
86   transform(e.segments).as_call('concat')
87 end
transform_EppExpression(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
89 def transform_EppExpression(e)
90   e.body.nil? ? PN::Call.new('epp') : transform(e.body).as_call('epp')
91 end
transform_ExportedQuery(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
93 def transform_ExportedQuery(e)
94   is_nop?(e.expr) ? PN::Call.new('exported-query') : PN::Call.new('exported-query', transform(e.expr))
95 end
transform_Factory(e) click to toggle source
   # File lib/puppet/pops/model/pn_transformer.rb
97 def transform_Factory(e)
98   transform(e.model)
99 end
transform_FunctionDefinition(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
101 def transform_FunctionDefinition(e)
102   definition_to_pn(e, 'function', nil, e.return_type)
103 end
transform_HeredocExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
105 def transform_HeredocExpression(e)
106   entries = []
107   entries << PN::Literal.new(e.syntax).with_name('syntax') unless e.syntax == ''
108   entries << transform(e.text_expr).with_name('text')
109   PN::Map.new(entries).as_call('heredoc')
110 end
transform_HostClassDefinition(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
112 def transform_HostClassDefinition(e)
113   definition_to_pn(e, 'class', e.parent_class)
114 end
transform_IfExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
116 def transform_IfExpression(e)
117   if_to_pn(e, 'if')
118 end
transform_InExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
120 def transform_InExpression(e)
121   binary_op(e, 'in')
122 end
transform_KeyedEntry(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
124 def transform_KeyedEntry(e)
125   PN::Call.new('=>', transform(e.key), transform(e.value))
126 end
transform_LambdaExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
128 def transform_LambdaExpression(e)
129   entries = []
130   entries << parameters_entry(e.parameters) unless e.parameters.empty?
131   entries << transform(e.return_type).with_name('returns') unless e.return_type.nil?
132   entries << block_as_entry('body', e.body) unless e.body.nil?
133   PN::Map.new(entries).as_call('lambda')
134 end
transform_LiteralBoolean(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
136 def transform_LiteralBoolean(e)
137   PN::Literal.new(e.value)
138 end
transform_LiteralDefault(_) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
140 def transform_LiteralDefault(_)
141   PN::Call.new('default')
142 end
transform_LiteralFloat(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
144 def transform_LiteralFloat(e)
145   PN::Literal.new(e.value)
146 end
transform_LiteralHash(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
148 def transform_LiteralHash(e)
149   transform(e.entries).as_call('hash')
150 end
transform_LiteralInteger(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
152 def transform_LiteralInteger(e)
153   vl = PN::Literal.new(e.value)
154   e.radix == 10 ? vl : PN::Map.new([PN::Literal.new(e.radix).with_name('radix'), vl.with_name('value')]).as_call('int')
155 end
transform_LiteralList(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
157 def transform_LiteralList(e)
158   transform(e.values).as_call('array')
159 end
transform_LiteralRegularExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
161 def transform_LiteralRegularExpression(e)
162   PN::Literal.new(Types::PRegexpType.regexp_to_s(e.value)).as_call('regexp')
163 end
transform_LiteralString(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
165 def transform_LiteralString(e)
166   PN::Literal.new(e.value)
167 end
transform_LiteralUndef(_) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
169 def transform_LiteralUndef(_)
170   PN::Literal.new(nil)
171 end
transform_MatchExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
173 def transform_MatchExpression(e)
174   binary_op(e, e.operator)
175 end
transform_NamedAccessExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
177 def transform_NamedAccessExpression(e)
178   binary_op(e, '.')
179 end
transform_NilClass(e) click to toggle source

Some elements may have a nil element instead of a Nop Expression

    # File lib/puppet/pops/model/pn_transformer.rb
193 def transform_NilClass(e)
194   PN::Call.new('nop')
195 end
transform_NodeDefinition(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
181 def transform_NodeDefinition(e)
182   entries = [transform(e.host_matches).with_name('matches')]
183   entries << transform(e.parent).with_name('parent') unless e.parent.nil?
184   entries << block_as_entry('body', e.body) unless e.body.nil?
185   PN::Map.new(entries).as_call('node')
186 end
transform_Nop(_) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
188 def transform_Nop(_)
189   PN::Call.new('nop')
190 end
transform_NotExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
197 def transform_NotExpression(e)
198   PN::Call.new('!', transform(e.expr))
199 end
transform_OrExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
201 def transform_OrExpression(e)
202   binary_op(e, 'or')
203 end
transform_Parameter(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
205 def transform_Parameter(e)
206   entries = [PN::Literal.new(e.name).with_name('name')]
207   entries << transform(e.type_expr).with_name('type') unless e.type_expr.nil?
208   entries << PN::Literal.new(true).with_name('splat') if e.captures_rest
209   entries << transform(e.value).with_name('value') unless e.value.nil?
210   PN::Map.new(entries).with_name('param')
211 end
transform_ParenthesizedExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
213 def transform_ParenthesizedExpression(e)
214   PN::Call.new('paren', transform(e.expr))
215 end
transform_PlanDefinition(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
217 def transform_PlanDefinition(e)
218   definition_to_pn(e, 'plan', nil, e.return_type)
219 end
transform_Program(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
221 def transform_Program(e)
222   transform(e.body)
223 end
transform_QualifiedName(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
225 def transform_QualifiedName(e)
226   PN::Call.new('qn', PN::Literal.new(e.value))
227 end
transform_QualifiedReference(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
229 def transform_QualifiedReference(e)
230   PN::Call.new('qr', PN::Literal.new(e.cased_value))
231 end
transform_RelationshipExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
233 def transform_RelationshipExpression(e)
234   binary_op(e, e.operator)
235 end
transform_RenderExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
237 def transform_RenderExpression(e)
238   PN::Call.new('render', transform(e.expr))
239 end
transform_RenderStringExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
241 def transform_RenderStringExpression(e)
242   PN::Literal.new(e.value).as_call('render-s')
243 end
transform_ReservedWord(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
245 def transform_ReservedWord(e)
246   PN::Literal.new(e.word).as_call('reserved')
247 end
transform_ResourceBody(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
249 def transform_ResourceBody(e)
250   PN::Map.new([
251     transform(e.title).with_name('title'),
252     transform(e.operations).with_name('ops')
253   ]).as_call('resource_body')
254 end
transform_ResourceDefaultsExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
256 def transform_ResourceDefaultsExpression(e)
257   entries = [transform(e.type_ref).with_name('type'), transform(e.operations).with_name('ops')]
258   entries << PN::Literal.new(e.form).with_name('form') unless e.form == 'regular'
259   PN::Map.new(entries).as_call('resource-defaults')
260 end
transform_ResourceExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
262 def transform_ResourceExpression(e)
263   entries = [
264     transform(e.type_name).with_name('type'),
265     PN::List.new(pn_array(e.bodies).map { |body| body[0] }).with_name('bodies')
266   ]
267   entries << PN::Literal.new(e.form).with_name('form') unless e.form == 'regular'
268   PN::Map.new(entries).as_call('resource')
269 end
transform_ResourceOverrideExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
271 def transform_ResourceOverrideExpression(e)
272   entries = [transform(e.resources).with_name('resources'), transform(e.operations).with_name('ops')]
273   entries << PN::Literal.new(e.form).with_name('form') unless e.form == 'regular'
274   PN::Map.new(entries).as_call('resource-override')
275 end
transform_ResourceTypeDefinition(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
277 def transform_ResourceTypeDefinition(e)
278   definition_to_pn(e, 'define')
279 end
transform_SelectorEntry(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
281 def transform_SelectorEntry(e)
282   PN::Call.new('=>', transform(e.matching_expr), transform(e.value_expr))
283 end
transform_SelectorExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
285 def transform_SelectorExpression(e)
286   PN::Call.new('?', transform(e.left_expr), transform(e.selectors))
287 end
transform_TextExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
289 def transform_TextExpression(e)
290   PN::Call.new('str', transform(e.expr))
291 end
transform_TypeAlias(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
293 def transform_TypeAlias(e)
294   PN::Call.new('type-alias', PN::Literal.new(e.name), transform(e.type_expr))
295 end
transform_TypeDefinition(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
297 def transform_TypeDefinition(e)
298   PN::Call.new('type-definition', PN::Literal.new(e.name), PN::Literal.new(e.parent), transform(e.body))
299 end
transform_TypeMapping(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
301 def transform_TypeMapping(e)
302   PN::Call.new('type-mapping', transform(e.type_expr), transform(e.mapping_expr))
303 end
transform_UnaryMinusExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
305 def transform_UnaryMinusExpression(e)
306   if e.expr.is_a?(LiteralValue)
307     v = e.expr.value
308     if v.is_a?(Numeric)
309       return PN::Literal.new(-v)
310     end
311   end
312   PN::Call.new('-', transform(e.expr))
313 end
transform_UnfoldExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
315 def transform_UnfoldExpression(e)
316   PN::Call.new('unfold', transform(e.expr))
317 end
transform_UnlessExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
319 def transform_UnlessExpression(e)
320   if_to_pn(e, 'unless')
321 end
transform_VariableExpression(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
323 def transform_VariableExpression(e)
324   ne = e.expr
325   PN::Call.new('var', ne.is_a?(Model::QualifiedName) ? PN::Literal.new(ne.value) : transform(ne))
326 end
transform_VirtualQuery(e) click to toggle source
    # File lib/puppet/pops/model/pn_transformer.rb
328 def transform_VirtualQuery(e)
329   is_nop?(e.expr) ? PN::Call.new('virtual-query') : PN::Call.new('virtual-query', transform(e.expr))
330 end