summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/parser.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parser/parser.rb')
-rw-r--r--lib/puppet/parser/parser.rb237
1 files changed, 10 insertions, 227 deletions
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index f0bbeb499..21a054223 100644
--- a/lib/puppet/parser/parser.rb
+++ b/lib/puppet/parser/parser.rb
@@ -29,227 +29,10 @@ module Puppet
class Parser < Racc::Parser
-module_eval <<'..end grammar.ra modeval..id72fb6a61b8', 'grammar.ra', 640
-require 'puppet/parser/functions'
+module_eval <<'..end grammar.ra modeval..idc5e5087e93', 'grammar.ra', 640
-attr_reader :file, :interp
-attr_accessor :files
-
-# Add context to a message; useful for error messages and such.
-def addcontext(message, obj = nil)
- obj ||= @lexer
-
- message += " on line %s" % obj.line
- if file = obj.file
- message += " in file %s" % file
- end
-
- return message
-end
-
-# Create an AST array out of all of the args
-def aryfy(*args)
- if args[0].instance_of?(AST::ASTArray)
- result = args.shift
- args.each { |arg|
- result.push arg
- }
- else
- result = ast AST::ASTArray, :children => args
- end
-
- return result
-end
-
-# Create an AST object, and automatically add the file and line information if
-# available.
-def ast(klass, hash = nil)
- hash ||= {}
- unless hash.include?(:line)
- hash[:line] = @lexer.line
- end
-
- unless hash.include?(:file)
- if file = @lexer.file
- hash[:file] = file
- end
- end
-
- return klass.new(hash)
-end
-
-# Raise a Parse error.
-def error(message)
- if brace = @lexer.expected
- message += "; expected '%s'"
- end
- except = Puppet::ParseError.new(message)
- except.line = @lexer.line
- if @lexer.file
- except.file = @lexer.file
- end
-
- raise except
-end
-
-def file=(file)
- unless FileTest.exists?(file)
- unless file =~ /\.pp$/
- file = file + ".pp"
- end
- unless FileTest.exists?(file)
- raise Puppet::Error, "Could not find file %s" % file
- end
- end
- if @files.detect { |f| f.file == file }
- raise Puppet::AlreadyImportedError.new("Import loop detected")
- else
- @files << Puppet::Util::LoadedFile.new(file)
- @lexer.file = file
- end
-end
-
-# Import our files.
-def import(file)
- if Puppet[:ignoreimport]
- return AST::ASTArray.new(:children => [])
- end
- # use a path relative to the file doing the importing
- if @lexer.file
- dir = @lexer.file.sub(%r{[^/]+$},'').sub(/\/$/, '')
- else
- dir = "."
- end
- if dir == ""
- dir = "."
- end
- result = ast AST::ASTArray
-
- # We can't interpolate at this point since we don't have any
- # scopes set up. Warn the user if they use a variable reference
- pat = file
- if pat.index("$")
- Puppet.warning(
- "The import of #{pat} contains a variable reference;" +
- " variables are not interpolated for imports " +
- "in file #{@lexer.file} at line #{@lexer.line}"
- )
- end
- files = Puppet::Module::find_manifests(pat, dir)
- if files.size == 0
- raise Puppet::ImportError.new("No file(s) found for import " +
- "of '#{pat}'")
- end
-
- files.collect { |file|
- parser = Puppet::Parser::Parser.new(interp)
- parser.files = self.files
- Puppet.debug("importing '%s'" % file)
-
- unless file =~ /^#{File::SEPARATOR}/
- file = File.join(dir, file)
- end
- begin
- parser.file = file
- rescue Puppet::AlreadyImportedError
- # This file has already been imported to just move on
- next
- end
-
- # This will normally add code to the 'main' class.
- parser.parse
- }
-end
-
-def initialize(interpreter)
- @interp = interpreter
- initvars()
-end
-
-# Initialize or reset all of our variables.
-def initvars
- @lexer = Puppet::Parser::Lexer.new()
- @files = []
-end
-
-# The fully qualifed name, with the full namespace.
-def classname(name)
- [@lexer.namespace, name].join("::").sub(/^::/, '')
-end
-
-def on_error(token,value,stack)
- #on '%s' at '%s' in\n'%s'" % [token,value,stack]
- #error = "line %s: parse error after '%s'" %
- # [@lexer.line,@lexer.last]
- error = "Syntax error at '%s'" % [value]
-
- if brace = @lexer.expected
- error += "; expected '%s'" % brace
- end
-
- except = Puppet::ParseError.new(error)
- except.line = @lexer.line
- if @lexer.file
- except.file = @lexer.file
- end
-
- raise except
-end
-
-# how should I do error handling here?
-def parse(string = nil)
- if string
- self.string = string
- end
- begin
- main = yyparse(@lexer,:scan)
- rescue Racc::ParseError => except
- error = Puppet::ParseError.new(except)
- error.line = @lexer.line
- error.file = @lexer.file
- error.set_backtrace except.backtrace
- raise error
- rescue Puppet::ParseError => except
- except.line ||= @lexer.line
- except.file ||= @lexer.file
- raise except
- rescue Puppet::Error => except
- # and this is a framework error
- except.line ||= @lexer.line
- except.file ||= @lexer.file
- raise except
- rescue Puppet::DevError => except
- except.line ||= @lexer.line
- except.file ||= @lexer.file
- raise except
- rescue => except
- error = Puppet::DevError.new(except.message)
- error.line = @lexer.line
- error.file = @lexer.file
- error.set_backtrace except.backtrace
- raise error
- end
- if main
- # Store the results as the top-level class.
- interp.newclass("", :code => main)
- return main
- end
-ensure
- @lexer.clear
-end
-
-# See if any of the files have changed.
-def reparse?
- if file = @files.detect { |file| file.changed? }
- return file.stamp
- else
- return false
- end
-end
-
-def string=(string)
- @lexer.string = string
-end
+# It got too annoying having code in a file that needs to be compiled.
+require 'puppet/parser/parser_support'
# Make emacs happy
# Local Variables:
@@ -258,7 +41,7 @@ end
# $Id$
-..end grammar.ra modeval..id72fb6a61b8
+..end grammar.ra modeval..idc5e5087e93
##### racc 1.4.5 generates ###
@@ -1741,7 +1524,7 @@ module_eval <<'.,.,', 'grammar.ra', 496
module_eval <<'.,.,', 'grammar.ra', 506
def _reduce_135( val, _values, result )
- interp.newdefine classname(val[1]), :arguments => val[2], :code => val[4]
+ newdefine classname(val[1]), :arguments => val[2], :code => val[4]
@lexer.indefine = false
result = nil
@@ -1752,7 +1535,7 @@ module_eval <<'.,.,', 'grammar.ra', 506
module_eval <<'.,.,', 'grammar.ra', 510
def _reduce_136( val, _values, result )
- interp.newdefine classname(val[1]), :arguments => val[2]
+ newdefine classname(val[1]), :arguments => val[2]
@lexer.indefine = false
result = nil
result
@@ -1763,7 +1546,7 @@ module_eval <<'.,.,', 'grammar.ra', 518
def _reduce_137( val, _values, result )
# Our class gets defined in the parent namespace, not our own.
@lexer.namepop
- interp.newclass classname(val[1]), :code => val[4], :parent => val[2]
+ newclass classname(val[1]), :code => val[4], :parent => val[2]
result = nil
result
end
@@ -1773,7 +1556,7 @@ module_eval <<'.,.,', 'grammar.ra', 523
def _reduce_138( val, _values, result )
# Our class gets defined in the parent namespace, not our own.
@lexer.namepop
- interp.newclass classname(val[1]), :parent => val[2]
+ newclass classname(val[1]), :parent => val[2]
result = nil
result
end
@@ -1781,7 +1564,7 @@ module_eval <<'.,.,', 'grammar.ra', 523
module_eval <<'.,.,', 'grammar.ra', 528
def _reduce_139( val, _values, result )
- interp.newnode val[1], :parent => val[2], :code => val[4]
+ newnode val[1], :parent => val[2], :code => val[4]
result = nil
result
end
@@ -1789,7 +1572,7 @@ module_eval <<'.,.,', 'grammar.ra', 528
module_eval <<'.,.,', 'grammar.ra', 531
def _reduce_140( val, _values, result )
- interp.newnode val[1], :parent => val[2]
+ newnode val[1], :parent => val[2]
result = nil
result
end