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:
55:
56: functions[name] = {:type => ftype, :name => fname}
57: functions[name][:doc] = options[:doc] if options[:doc]
58: end