diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/parser/functions.rb | 12 | ||||
-rw-r--r-- | lib/puppet/parser/scope.rb | 13 |
2 files changed, 22 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 diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb index 19d79e6d0..991e12302 100644 --- a/lib/puppet/parser/scope.rb +++ b/lib/puppet/parser/scope.rb @@ -105,6 +105,11 @@ class Puppet::Parser::Scope end end + # Remove this when rebasing + def environment + compiler.environment + end + # Are we the top scope? def topscope? @level == 1 @@ -141,6 +146,8 @@ class Puppet::Parser::Scope end } + extend_with_functions_module() + @tags = [] # The symbol table for this scope. This is where we store variables. @@ -494,4 +501,10 @@ class Puppet::Parser::Scope setvar("#{i+1}", m, :file => file, :line => line, :ephemeral => true) end end + + private + + def extend_with_functions_module + extend Puppet::Parser::Functions.environment_module(compiler ? environment : nil) + end end |