# File lib/puppet/parser/ast/function.rb, line 13
13:         def evaluate(scope)
14: 
15:             # Make sure it's a defined function
16:             unless @fname
17:                 raise Puppet::ParseError, "Unknown function %s" % @name
18:             end
19: 
20:             # Now check that it's been used correctly
21:             case @ftype
22:             when :rvalue
23:                 unless Puppet::Parser::Functions.rvalue?(@name)
24:                     raise Puppet::ParseError, "Function '%s' does not return a value" %
25:                         @name
26:                 end
27:             when :statement
28:                 if Puppet::Parser::Functions.rvalue?(@name)
29:                     raise Puppet::ParseError,
30:                         "Function '%s' must be the value of a statement" %
31:                         @name
32:                 end
33:             else
34:                 raise Puppet::DevError, "Invalid function type %s" % @ftype.inspect
35:             end
36: 
37: 
38: 
39:             # We don't need to evaluate the name, because it's plaintext
40:             args = @arguments.safeevaluate(scope)
41: 
42:             return scope.send("function_" + @name, args)
43:         end