Skip to content

Commit

Permalink
wowowowo it works
Browse files Browse the repository at this point in the history
  • Loading branch information
AriaXLi committed Jan 11, 2024
1 parent 2e87304 commit 58a55c7
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
10 changes: 9 additions & 1 deletion lib/puppet/pops/evaluator/literal_evaluator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def literal(ast)
end

def literal_Object(o)
#require 'byebug'; byebug
throw :not_literal
end

Expand All @@ -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

Expand All @@ -49,6 +50,7 @@ def literal_QualifiedName(o)
end

def literal_LiteralNumber(o)
#require 'byebug'; byebug
o.value
end

Expand All @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion lib/puppet/pops/validation/checker4_0.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand Down
1 change: 1 addition & 0 deletions lib/puppet/pops/visitor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 4 additions & 2 deletions spec/unit/pops/evaluator/literal_evaluator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
'"a"' => 'a',
'a' => 'a',
'a::b' => 'a::b',
'Integer[1]' => [1],
'File' => "file",

# special values
'default' => :default,
Expand All @@ -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

0 comments on commit 58a55c7

Please sign in to comment.