13: def evaluate(scope)
14:
15:
16: unless @fname
17: raise Puppet::ParseError, "Unknown function %s" % @name
18: end
19:
20:
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:
40: args = @arguments.safeevaluate(scope)
41:
42: return scope.send("function_" + @name, args)
43: end