# File lib/puppet/parser/functions.rb, line 40
40:   def self.newfunction(name, options = {}, &block)
41:     name = symbolize(name)
42: 
43:     raise Puppet::DevError, "Function #{name} already defined" if functions.include?(name)
44: 
45:     ftype = options[:type] || :statement
46: 
47:     unless ftype == :statement or ftype == :rvalue
48:       raise Puppet::DevError, "Invalid statement type #{ftype.inspect}"
49:     end
50: 
51:     fname = "function_#{name}"
52:     environment_module.send(:define_method, fname, &block)
53: 
54:     # Someday we'll support specifying an arity, but for now, nope
55:     #functions[name] = {:arity => arity, :type => ftype}
56:     functions[name] = {:type => ftype, :name => fname}
57:     functions[name][:doc] = options[:doc] if options[:doc]
58:   end