summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/functions.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser/functions.rb')
-rw-r--r--lib/puppet/parser/functions.rb12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/puppet/parser/functions.rb b/lib/puppet/parser/functions.rb
index 38bb2eb42..4179cb81d 100644
--- a/lib/puppet/parser/functions.rb
+++ b/lib/puppet/parser/functions.rb
@@ -2,10 +2,12 @@ require 'puppet/util/autoload'
require 'puppet/parser/scope'
# A module for managing parser functions. Each specified function
-# becomes an instance method on the Scope class.
+# is added to a central module that then gets included into the Scope
+# class.
module Puppet::Parser::Functions
@functions = {}
+ @modules = {}
class << self
include Puppet::Util
@@ -22,6 +24,10 @@ module Puppet::Parser::Functions
@autoloader
end
+ def self.environment_module(env = nil)
+ @module ||= Module.new
+ end
+
# Create a new function type.
def self.newfunction(name, options = {}, &block)
name = symbolize(name)
@@ -43,7 +49,7 @@ module Puppet::Parser::Functions
end
fname = "function_" + name.to_s
- Puppet::Parser::Scope.send(:define_method, fname, &block)
+ environment_module.send(:define_method, fname, &block)
# Someday we'll support specifying an arity, but for now, nope
#@functions[name] = {:arity => arity, :type => ftype}
@@ -64,7 +70,7 @@ module Puppet::Parser::Functions
@functions.delete(name)
fname = "function_" + name.to_s
- Puppet::Parser::Scope.send(:remove_method, fname)
+ environment_module.send(:remove_method, fname)
end
# Determine if a given name is a function