From 58a55c779e58366db563d24ed2e923889338e3e4 Mon Sep 17 00:00:00 2001 From: Aria Li Date: Wed, 10 Jan 2024 18:26:24 -0800 Subject: [PATCH] wowowowo it works --- lib/puppet/pops/evaluator/literal_evaluator.rb | 10 +++++++++- lib/puppet/pops/validation/checker4_0.rb | 3 ++- lib/puppet/pops/visitor.rb | 1 + spec/unit/pops/evaluator/literal_evaluator_spec.rb | 6 ++++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/puppet/pops/evaluator/literal_evaluator.rb b/lib/puppet/pops/evaluator/literal_evaluator.rb index fdaf92c7ef4..ca1938ce0fd 100644 --- a/lib/puppet/pops/evaluator/literal_evaluator.rb +++ b/lib/puppet/pops/evaluator/literal_evaluator.rb @@ -28,6 +28,7 @@ def literal(ast) end def literal_Object(o) + #require 'byebug'; byebug throw :not_literal end @@ -40,7 +41,7 @@ def literal_Program(o) end def literal_LiteralString(o) - #require 'pry-byebug'; binding.pry + #require 'byebug'; byebug if $DEBUG o.value end @@ -49,6 +50,7 @@ def literal_QualifiedName(o) end def literal_LiteralNumber(o) + #require 'byebug'; byebug o.value end @@ -73,6 +75,12 @@ def literal_QualifiedReference(o) o.value end + def literal_AccessExpression(o) + #require 'byebug'; byebug + throw :not_literal if o.keys.size == 1 && o.keys[0].is_a?(Model::LiteralList) + o.keys.map {|v| literal(v) } + end + def literal_ConcatenatedString(o) # use double quoted string value if there is no interpolation throw :not_literal unless o.segments.size == 1 && o.segments[0].is_a?(Model::LiteralString) diff --git a/lib/puppet/pops/validation/checker4_0.rb b/lib/puppet/pops/validation/checker4_0.rb index 64d53360151..f19c9a5775c 100644 --- a/lib/puppet/pops/validation/checker4_0.rb +++ b/lib/puppet/pops/validation/checker4_0.rb @@ -486,8 +486,9 @@ def internal_check_parameter_type_literal(o) type = nil o.parameters.each do |p| next unless p.type_expr + #require 'byebug'; byebug catch :not_literal do - #require 'pry-byebug'; binding.pry + #require 'byebug'; byebug type = literal(p.type_expr) end acceptor.accept(Issues::ILLEGAL_NONLITERAL_PARAMETER_TYPE, p, {name: p.name, type_class: p.type_expr.class}) if type.nil? diff --git a/lib/puppet/pops/visitor.rb b/lib/puppet/pops/visitor.rb index 0332c9f95dd..f5a1f9885d0 100644 --- a/lib/puppet/pops/visitor.rb +++ b/lib/puppet/pops/visitor.rb @@ -79,6 +79,7 @@ def visit_this_class(receiver, clazz, args) # (This is ~30% faster than calling the general method) # def visit_this_0(receiver, thing) + #require 'byebug'; byebug method_name = @cache[thing.class] if method_name return receiver.send(method_name, thing) diff --git a/spec/unit/pops/evaluator/literal_evaluator_spec.rb b/spec/unit/pops/evaluator/literal_evaluator_spec.rb index 425fdf1d8ad..c9e8d661c9c 100644 --- a/spec/unit/pops/evaluator/literal_evaluator_spec.rb +++ b/spec/unit/pops/evaluator/literal_evaluator_spec.rb @@ -16,6 +16,8 @@ '"a"' => 'a', 'a' => 'a', 'a::b' => 'a::b', + 'Integer[1]' => [1], + 'File' => "file", # special values 'default' => :default, @@ -35,9 +37,9 @@ expect(leval.literal(parser.parse_string('undef'))).to be_nil end - ['1+1', 'File', '[1,2, 1+2]', '{a=>1+1}', 'Integer[1]', '"x$y"', '"x${y}z"'].each do |source| + ['1+1', '[1,2, 1+2]', '{a=>1+1}', '"x$y"', '"x${y}z"', 'Integer[1-3]', 'Optional[[String]]'].each do |source| it "throws :not_literal for non literal expression '#{source}'" do - expect{leval.literal(parser.parse_string('1+1'))}.to throw_symbol(:not_literal) + expect{leval.literal(parser.parse_string(source))}.to throw_symbol(:not_literal) end end end