puppet 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +0 -0
- data/COPYING +340 -0
- data/LICENSE +17 -0
- data/README +24 -0
- data/Rakefile +294 -0
- data/TODO +4 -0
- data/bin/cf2puppet +186 -0
- data/bin/puppet +176 -0
- data/bin/puppetca +213 -0
- data/bin/puppetd +246 -0
- data/bin/puppetdoc +184 -0
- data/bin/puppetmasterd +258 -0
- data/examples/code/allatonce +13 -0
- data/examples/code/assignments +11 -0
- data/examples/code/classing +35 -0
- data/examples/code/components +73 -0
- data/examples/code/execs +16 -0
- data/examples/code/failers/badclassnoparam +10 -0
- data/examples/code/failers/badclassparam +10 -0
- data/examples/code/failers/badcompnoparam +9 -0
- data/examples/code/failers/badcompparam +9 -0
- data/examples/code/failers/badtypeparam +3 -0
- data/examples/code/file.bl +11 -0
- data/examples/code/filedefaults +10 -0
- data/examples/code/fileparsing +116 -0
- data/examples/code/filerecursion +15 -0
- data/examples/code/functions +3 -0
- data/examples/code/groups +7 -0
- data/examples/code/head +30 -0
- data/examples/code/importing +8 -0
- data/examples/code/nodes +20 -0
- data/examples/code/one +8 -0
- data/examples/code/relationships +34 -0
- data/examples/code/selectors +28 -0
- data/examples/code/simpletests +11 -0
- data/examples/code/snippets/argumentdefaults +14 -0
- data/examples/code/snippets/casestatement +39 -0
- data/examples/code/snippets/classheirarchy.pp +15 -0
- data/examples/code/snippets/classincludes.pp +17 -0
- data/examples/code/snippets/classpathtest +11 -0
- data/examples/code/snippets/dirchmod +19 -0
- data/examples/code/snippets/failmissingexecpath.pp +13 -0
- data/examples/code/snippets/falsevalues.pp +3 -0
- data/examples/code/snippets/filecreate +11 -0
- data/examples/code/snippets/implicititeration +15 -0
- data/examples/code/snippets/multipleinstances +7 -0
- data/examples/code/snippets/namevartest +9 -0
- data/examples/code/snippets/scopetest +13 -0
- data/examples/code/snippets/selectorvalues.pp +22 -0
- data/examples/code/snippets/simpledefaults +5 -0
- data/examples/code/snippets/simpleselector +38 -0
- data/examples/code/svncommit +13 -0
- data/examples/root/bin/sleeper +69 -0
- data/examples/root/etc/configfile +0 -0
- data/examples/root/etc/debian-passwd +29 -0
- data/examples/root/etc/debian-syslog.conf +71 -0
- data/examples/root/etc/init.d/sleeper +65 -0
- data/examples/root/etc/otherfile +0 -0
- data/examples/root/etc/puppet/fileserver.conf +3 -0
- data/examples/root/etc/puppet/puppetmasterd.conf +10 -0
- data/ext/module:puppet +195 -0
- data/install.rb +270 -0
- data/lib/puppet.rb +249 -0
- data/lib/puppet/base64.rb +19 -0
- data/lib/puppet/client.rb +519 -0
- data/lib/puppet/config.rb +49 -0
- data/lib/puppet/daemon.rb +208 -0
- data/lib/puppet/element.rb +71 -0
- data/lib/puppet/event.rb +259 -0
- data/lib/puppet/log.rb +321 -0
- data/lib/puppet/metric.rb +250 -0
- data/lib/puppet/parsedfile.rb +38 -0
- data/lib/puppet/parser/ast.rb +1560 -0
- data/lib/puppet/parser/interpreter.rb +150 -0
- data/lib/puppet/parser/lexer.rb +226 -0
- data/lib/puppet/parser/parser.rb +1354 -0
- data/lib/puppet/parser/scope.rb +755 -0
- data/lib/puppet/server.rb +170 -0
- data/lib/puppet/server/authstore.rb +227 -0
- data/lib/puppet/server/ca.rb +140 -0
- data/lib/puppet/server/filebucket.rb +147 -0
- data/lib/puppet/server/fileserver.rb +477 -0
- data/lib/puppet/server/logger.rb +43 -0
- data/lib/puppet/server/master.rb +103 -0
- data/lib/puppet/server/servlet.rb +247 -0
- data/lib/puppet/sslcertificates.rb +737 -0
- data/lib/puppet/statechange.rb +150 -0
- data/lib/puppet/storage.rb +95 -0
- data/lib/puppet/transaction.rb +179 -0
- data/lib/puppet/transportable.rb +151 -0
- data/lib/puppet/type.rb +1354 -0
- data/lib/puppet/type/component.rb +141 -0
- data/lib/puppet/type/cron.rb +543 -0
- data/lib/puppet/type/exec.rb +316 -0
- data/lib/puppet/type/group.rb +152 -0
- data/lib/puppet/type/nameservice.rb +3 -0
- data/lib/puppet/type/nameservice/netinfo.rb +173 -0
- data/lib/puppet/type/nameservice/objectadd.rb +146 -0
- data/lib/puppet/type/nameservice/posix.rb +200 -0
- data/lib/puppet/type/package.rb +420 -0
- data/lib/puppet/type/package/apt.rb +70 -0
- data/lib/puppet/type/package/dpkg.rb +108 -0
- data/lib/puppet/type/package/rpm.rb +81 -0
- data/lib/puppet/type/package/sun.rb +117 -0
- data/lib/puppet/type/package/yum.rb +58 -0
- data/lib/puppet/type/pfile.rb +569 -0
- data/lib/puppet/type/pfile/checksum.rb +219 -0
- data/lib/puppet/type/pfile/create.rb +108 -0
- data/lib/puppet/type/pfile/group.rb +129 -0
- data/lib/puppet/type/pfile/mode.rb +131 -0
- data/lib/puppet/type/pfile/source.rb +264 -0
- data/lib/puppet/type/pfile/type.rb +31 -0
- data/lib/puppet/type/pfile/uid.rb +166 -0
- data/lib/puppet/type/pfilebucket.rb +80 -0
- data/lib/puppet/type/pprocess.rb +97 -0
- data/lib/puppet/type/service.rb +347 -0
- data/lib/puppet/type/service/base.rb +17 -0
- data/lib/puppet/type/service/debian.rb +50 -0
- data/lib/puppet/type/service/init.rb +145 -0
- data/lib/puppet/type/service/smf.rb +29 -0
- data/lib/puppet/type/state.rb +182 -0
- data/lib/puppet/type/symlink.rb +183 -0
- data/lib/puppet/type/tidy.rb +183 -0
- data/lib/puppet/type/typegen.rb +149 -0
- data/lib/puppet/type/typegen/filerecord.rb +243 -0
- data/lib/puppet/type/typegen/filetype.rb +316 -0
- data/lib/puppet/type/user.rb +290 -0
- data/lib/puppet/util.rb +138 -0
- data/test/certmgr/certmgr.rb +265 -0
- data/test/client/client.rb +203 -0
- data/test/executables/puppetbin.rb +53 -0
- data/test/executables/puppetca.rb +79 -0
- data/test/executables/puppetd.rb +71 -0
- data/test/executables/puppetmasterd.rb +153 -0
- data/test/executables/puppetmodule.rb +60 -0
- data/test/language/ast.rb +412 -0
- data/test/language/interpreter.rb +71 -0
- data/test/language/scope.rb +412 -0
- data/test/language/snippets.rb +445 -0
- data/test/other/events.rb +111 -0
- data/test/other/log.rb +195 -0
- data/test/other/metrics.rb +92 -0
- data/test/other/overrides.rb +115 -0
- data/test/other/parsedfile.rb +31 -0
- data/test/other/relationships.rb +113 -0
- data/test/other/state.rb +106 -0
- data/test/other/storage.rb +39 -0
- data/test/other/transactions.rb +235 -0
- data/test/parser/lexer.rb +120 -0
- data/test/parser/parser.rb +180 -0
- data/test/puppet/conffiles.rb +104 -0
- data/test/puppet/defaults.rb +100 -0
- data/test/puppet/error.rb +23 -0
- data/test/puppet/utiltest.rb +120 -0
- data/test/puppettest.rb +774 -0
- data/test/server/authstore.rb +209 -0
- data/test/server/bucket.rb +227 -0
- data/test/server/ca.rb +201 -0
- data/test/server/fileserver.rb +710 -0
- data/test/server/logger.rb +175 -0
- data/test/server/master.rb +150 -0
- data/test/server/server.rb +130 -0
- data/test/tagging/tagging.rb +80 -0
- data/test/test +51 -0
- data/test/types/basic.rb +119 -0
- data/test/types/component.rb +272 -0
- data/test/types/cron.rb +261 -0
- data/test/types/exec.rb +273 -0
- data/test/types/file.rb +616 -0
- data/test/types/filebucket.rb +167 -0
- data/test/types/fileignoresource.rb +287 -0
- data/test/types/filesources.rb +587 -0
- data/test/types/filetype.rb +162 -0
- data/test/types/group.rb +271 -0
- data/test/types/package.rb +205 -0
- data/test/types/query.rb +101 -0
- data/test/types/service.rb +100 -0
- data/test/types/symlink.rb +93 -0
- data/test/types/tidy.rb +124 -0
- data/test/types/type.rb +135 -0
- data/test/types/user.rb +371 -0
- metadata +243 -0
@@ -0,0 +1,150 @@
|
|
1
|
+
# The interepreter's job is to convert from a parsed file to the configuration
|
2
|
+
# for a given client. It really doesn't do any work on its own, it just collects
|
3
|
+
# and calls out to other objects.
|
4
|
+
|
5
|
+
require 'puppet'
|
6
|
+
require 'puppet/parser/parser'
|
7
|
+
require 'puppet/parser/scope'
|
8
|
+
|
9
|
+
|
10
|
+
module Puppet
|
11
|
+
module Parser
|
12
|
+
class Interpreter
|
13
|
+
attr_accessor :ast
|
14
|
+
# just shorten the constant path a bit, using what amounts to an alias
|
15
|
+
AST = Puppet::Parser::AST
|
16
|
+
|
17
|
+
# create our interpreter
|
18
|
+
def initialize(hash)
|
19
|
+
unless hash.include?(:Manifest)
|
20
|
+
raise Puppet::DevError, "Interpreter was not passed a manifest"
|
21
|
+
end
|
22
|
+
|
23
|
+
@file = hash[:Manifest]
|
24
|
+
|
25
|
+
if hash.include?(:UseNodes)
|
26
|
+
@usenodes = hash[:UseNodes]
|
27
|
+
else
|
28
|
+
@usenodes = true
|
29
|
+
end
|
30
|
+
|
31
|
+
# Set it to either the value or nil. This is currently only used
|
32
|
+
# by the cfengine module.
|
33
|
+
@classes = hash[:Classes] || []
|
34
|
+
|
35
|
+
# Create our parser object
|
36
|
+
parsefiles
|
37
|
+
|
38
|
+
evaluate
|
39
|
+
end
|
40
|
+
|
41
|
+
# evaluate our whole tree
|
42
|
+
def run(client, facts)
|
43
|
+
parsefiles()
|
44
|
+
|
45
|
+
# Really, we should stick multiple names in here
|
46
|
+
# but for now just make a simple array
|
47
|
+
names = [client]
|
48
|
+
|
49
|
+
# if the client name is fully qualied (which is normally will be)
|
50
|
+
# add the short name
|
51
|
+
if client =~ /\./
|
52
|
+
names << client.sub(/\..+/,'')
|
53
|
+
end
|
54
|
+
|
55
|
+
begin
|
56
|
+
if @usenodes
|
57
|
+
unless client
|
58
|
+
raise Puppet::Error,
|
59
|
+
"Cannot evaluate nodes with a nil client"
|
60
|
+
end
|
61
|
+
|
62
|
+
# We've already evaluated the AST, in this case
|
63
|
+
retval = @scope.evalnode(names, facts)
|
64
|
+
return retval
|
65
|
+
else
|
66
|
+
# We've already evaluated the AST, in this case
|
67
|
+
@scope = Puppet::Parser::Scope.new() # no parent scope
|
68
|
+
@scope.interp = self
|
69
|
+
@scope.type = "puppet"
|
70
|
+
@scope.name = "top"
|
71
|
+
return @scope.evaluate(@ast, facts, @classes)
|
72
|
+
end
|
73
|
+
#@ast.evaluate(@scope)
|
74
|
+
rescue Puppet::DevError, Puppet::Error, Puppet::ParseError => except
|
75
|
+
#Puppet.err "File %s, line %s: %s" %
|
76
|
+
# [except.file, except.line, except.message]
|
77
|
+
if Puppet[:debug]
|
78
|
+
puts except.stack
|
79
|
+
end
|
80
|
+
if Puppet[:debug]
|
81
|
+
puts caller
|
82
|
+
end
|
83
|
+
#exit(1)
|
84
|
+
raise
|
85
|
+
rescue => except
|
86
|
+
error = Puppet::DevError.new("%s: %s" %
|
87
|
+
[except.class, except.message])
|
88
|
+
error.stack = caller
|
89
|
+
if Puppet[:debug]
|
90
|
+
puts caller
|
91
|
+
end
|
92
|
+
raise error
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def scope
|
97
|
+
return @scope
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
# Evaluate the configuration. If there aren't any nodes defined, then
|
103
|
+
# this doesn't actually do anything, because we have to evaluate the
|
104
|
+
# entire configuration each time we get a connect.
|
105
|
+
def evaluate
|
106
|
+
|
107
|
+
if @usenodes
|
108
|
+
@scope = Puppet::Parser::Scope.new() # no parent scope
|
109
|
+
@scope.name = "top"
|
110
|
+
@scope.type = "puppet"
|
111
|
+
@scope.interp = self
|
112
|
+
Puppet.debug "Nodes defined"
|
113
|
+
@ast.safeevaluate(@scope)
|
114
|
+
else
|
115
|
+
Puppet.debug "No nodes defined"
|
116
|
+
return
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def parsefiles
|
121
|
+
if defined? @parser
|
122
|
+
unless @parser.reparse?
|
123
|
+
return false
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
unless FileTest.exists?(@file)
|
128
|
+
if @ast
|
129
|
+
Puppet.warning "Manifest %s has disappeared" % @file
|
130
|
+
return
|
131
|
+
else
|
132
|
+
raise Puppet::Error, "Manifest %s must exist" % @file
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
Puppet.info "Reloading files"
|
137
|
+
# should i be creating a new parser each time...?
|
138
|
+
@parser = Puppet::Parser::Parser.new()
|
139
|
+
@parser.file = @file
|
140
|
+
@ast = @parser.parse
|
141
|
+
|
142
|
+
# Reevaluate the config. This is what actually replaces the
|
143
|
+
# existing scope.
|
144
|
+
evaluate
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# $Id: interpreter.rb 746 2005-11-17 21:03:19Z luke $
|
@@ -0,0 +1,226 @@
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
2
|
+
|
3
|
+
# $Id: lexer.rb 700 2005-09-22 23:24:20Z luke $
|
4
|
+
|
5
|
+
# the scanner/lexer
|
6
|
+
|
7
|
+
require 'strscan'
|
8
|
+
require 'puppet'
|
9
|
+
|
10
|
+
|
11
|
+
module Puppet
|
12
|
+
class LexError < RuntimeError; end
|
13
|
+
module Parser
|
14
|
+
#---------------------------------------------------------------
|
15
|
+
class Lexer
|
16
|
+
attr_reader :line, :last, :file
|
17
|
+
|
18
|
+
#%r{\w+} => :WORD,
|
19
|
+
@@tokens = {
|
20
|
+
%r{#.*} => :COMMENT,
|
21
|
+
%r{\[} => :LBRACK,
|
22
|
+
%r{\]} => :RBRACK,
|
23
|
+
%r{\{} => :LBRACE,
|
24
|
+
%r{\}} => :RBRACE,
|
25
|
+
%r{\(} => :LPAREN,
|
26
|
+
%r{\)} => :RPAREN,
|
27
|
+
%r{"} => :DQUOTE,
|
28
|
+
%r{\n} => :RETURN,
|
29
|
+
%r{'} => :SQUOTE,
|
30
|
+
%r{=} => :EQUALS,
|
31
|
+
%r{==} => :ISEQUAL,
|
32
|
+
%r{>=} => :GREATEREQUAL,
|
33
|
+
%r{>} => :GREATERTHAN,
|
34
|
+
%r{<} => :LESSTHAN,
|
35
|
+
%r{<=} => :LESSEQUAL,
|
36
|
+
%r{!=} => :NOTEQUAL,
|
37
|
+
%r{,} => :COMMA,
|
38
|
+
%r{\.} => :DOT,
|
39
|
+
%r{:} => :COLON,
|
40
|
+
%r{;} => :SEMIC,
|
41
|
+
%r{\?} => :QMARK,
|
42
|
+
%r{\\} => :BACKSLASH,
|
43
|
+
%r{=>} => :FARROW,
|
44
|
+
%r{[a-z][-\w]*} => :NAME,
|
45
|
+
%r{[A-Z][-\w]*} => :TYPE,
|
46
|
+
%r{[0-9]+} => :NUMBER,
|
47
|
+
%r{\$\w+} => :VARIABLE
|
48
|
+
}
|
49
|
+
|
50
|
+
@@keywords = {
|
51
|
+
"case" => :CASE,
|
52
|
+
"class" => :CLASS,
|
53
|
+
"default" => :DEFAULT,
|
54
|
+
"define" => :DEFINE,
|
55
|
+
"false" => :BOOLEAN,
|
56
|
+
"host" => :NODE,
|
57
|
+
"import" => :IMPORT,
|
58
|
+
"include" => :INCLUDE,
|
59
|
+
"inherits" => :INHERITS,
|
60
|
+
"node" => :NODE,
|
61
|
+
"true" => :BOOLEAN
|
62
|
+
}
|
63
|
+
|
64
|
+
# scan the whole file
|
65
|
+
# basically just used for testing
|
66
|
+
def fullscan
|
67
|
+
array = []
|
68
|
+
|
69
|
+
self.scan { |token,str|
|
70
|
+
#Puppet.debug("got token '%s' => '%s'" % [token,str])
|
71
|
+
if token.nil?
|
72
|
+
return array
|
73
|
+
else
|
74
|
+
array.push([token,str])
|
75
|
+
end
|
76
|
+
}
|
77
|
+
return array
|
78
|
+
end
|
79
|
+
|
80
|
+
# this is probably pretty damned inefficient...
|
81
|
+
# it'd be nice not to have to load the whole file first...
|
82
|
+
def file=(file)
|
83
|
+
@file = file
|
84
|
+
@line = 1
|
85
|
+
File.open(file) { |of|
|
86
|
+
str = ""
|
87
|
+
of.each { |line| str += line }
|
88
|
+
@scanner = StringScanner.new(str)
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
def initialize
|
93
|
+
@line = 1
|
94
|
+
@last = ""
|
95
|
+
@scanner = nil
|
96
|
+
@file = nil
|
97
|
+
# AAARRGGGG! okay, regexes in ruby are bloody annoying
|
98
|
+
# no one else has "\n" =~ /\s/
|
99
|
+
@skip = %r{[ \t]+}
|
100
|
+
end
|
101
|
+
|
102
|
+
def rest
|
103
|
+
@scanner.rest
|
104
|
+
end
|
105
|
+
|
106
|
+
# this is the heart of the lexer
|
107
|
+
def scan
|
108
|
+
#Puppet.debug("entering scan")
|
109
|
+
if @scanner.nil?
|
110
|
+
raise TypeError.new("Invalid or empty string")
|
111
|
+
end
|
112
|
+
|
113
|
+
@scanner.skip(@skip)
|
114
|
+
until @scanner.eos? do
|
115
|
+
yielded = false
|
116
|
+
sendbreak = false # gah, this is a nasty hack
|
117
|
+
stoken = nil
|
118
|
+
sregex = nil
|
119
|
+
value = ""
|
120
|
+
|
121
|
+
# first find out which type of token we've got
|
122
|
+
@@tokens.each { |regex,token|
|
123
|
+
# we're just checking, which doesn't advance the scan
|
124
|
+
# pointer
|
125
|
+
tmp = @scanner.check(regex)
|
126
|
+
if tmp.nil?
|
127
|
+
#puppet.debug("did not match %s to '%s'" %
|
128
|
+
# [regex,@scanner.rest])
|
129
|
+
next
|
130
|
+
end
|
131
|
+
|
132
|
+
# find the longest match
|
133
|
+
if tmp.length > value.length
|
134
|
+
value = tmp
|
135
|
+
stoken = token
|
136
|
+
sregex = regex
|
137
|
+
else
|
138
|
+
# we've already got a longer match
|
139
|
+
next
|
140
|
+
end
|
141
|
+
}
|
142
|
+
|
143
|
+
# error out if we didn't match anything at all
|
144
|
+
if stoken.nil?
|
145
|
+
nword = nil
|
146
|
+
if @scanner.rest =~ /^(\S+)/
|
147
|
+
nword = $1
|
148
|
+
elsif@scanner.rest =~ /^(\s+)/
|
149
|
+
nword = $1
|
150
|
+
else
|
151
|
+
nword = @scanner.rest
|
152
|
+
end
|
153
|
+
raise "Could not match '%s'" % nword
|
154
|
+
end
|
155
|
+
|
156
|
+
value = @scanner.scan(sregex)
|
157
|
+
|
158
|
+
if value == ""
|
159
|
+
raise "Didn't match regex on token %s" % stoken
|
160
|
+
end
|
161
|
+
|
162
|
+
# token-specific operations
|
163
|
+
# if this gets much more complicated, it should
|
164
|
+
# be moved up to where the tokens themselves are defined
|
165
|
+
# which will get me about 75% of the way to a lexer generator
|
166
|
+
case stoken
|
167
|
+
when :NAME then
|
168
|
+
wtoken = stoken
|
169
|
+
# we're looking for keywords here
|
170
|
+
if @@keywords.include?(value)
|
171
|
+
wtoken = @@keywords[value]
|
172
|
+
#Puppet.debug("token '%s'" % wtoken)
|
173
|
+
end
|
174
|
+
yield [wtoken,value]
|
175
|
+
@last = value
|
176
|
+
when :NUMBER then
|
177
|
+
yield [:NAME,value]
|
178
|
+
# just throw comments away
|
179
|
+
when :COMMENT then
|
180
|
+
# just throw comments away
|
181
|
+
when :RETURN then
|
182
|
+
@line += 1
|
183
|
+
@scanner.skip(@skip)
|
184
|
+
when :DQUOTE then
|
185
|
+
#Puppet.debug("searching '%s' after '%s'" % [self.rest,value])
|
186
|
+
value = self.slurpstring(value)
|
187
|
+
yield [:QTEXT,value]
|
188
|
+
@last = value
|
189
|
+
#stoken = :QTEXT
|
190
|
+
#Puppet.debug("got string '%s' => '%s'" % [:QTEXT,value])
|
191
|
+
else
|
192
|
+
yield [stoken,value]
|
193
|
+
@last = value
|
194
|
+
#Puppet.debug("got token '%s' => '%s'" % [stoken,value])
|
195
|
+
end
|
196
|
+
@scanner.skip(@skip)
|
197
|
+
end
|
198
|
+
@scanner = nil
|
199
|
+
yield [false,false]
|
200
|
+
end
|
201
|
+
|
202
|
+
# we've encountered an opening quote...
|
203
|
+
# slurp in the rest of the string and return it
|
204
|
+
def slurpstring(quote)
|
205
|
+
# we search for the next quote that isn't preceded by a
|
206
|
+
# backslash; the caret is there to match empty strings
|
207
|
+
str = @scanner.scan_until(/([^\\]|^)#{quote}/)
|
208
|
+
if str.nil?
|
209
|
+
raise Puppet::LexError.new("Unclosed quote after '%s' in '%s'" %
|
210
|
+
[self.last,self.rest])
|
211
|
+
else
|
212
|
+
str.sub!(/#{quote}$/,"")
|
213
|
+
str.gsub!(/\\#{quote}/,quote)
|
214
|
+
end
|
215
|
+
|
216
|
+
return str
|
217
|
+
end
|
218
|
+
|
219
|
+
# just parse a string, not a whole file
|
220
|
+
def string=(string)
|
221
|
+
@scanner = StringScanner.new(string)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
#---------------------------------------------------------------
|
225
|
+
end
|
226
|
+
end
|
@@ -0,0 +1,1354 @@
|
|
1
|
+
#
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by racc 1.4.4
|
4
|
+
# from racc grammer file "grammar.ra".
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'racc/parser'
|
8
|
+
|
9
|
+
|
10
|
+
require 'puppet'
|
11
|
+
require 'puppet/parsedfile'
|
12
|
+
require 'puppet/parser/lexer'
|
13
|
+
require 'puppet/parser/ast'
|
14
|
+
#require 'puppet/parser/interpreter'
|
15
|
+
|
16
|
+
module Puppet
|
17
|
+
# this exception class already has a :stack accessor
|
18
|
+
class ParseError < Puppet::Error
|
19
|
+
attr_accessor :line, :file
|
20
|
+
end
|
21
|
+
|
22
|
+
class ImportError < Racc::ParseError; end
|
23
|
+
end
|
24
|
+
|
25
|
+
Puppet[:typecheck] = true
|
26
|
+
Puppet[:paramcheck] = true
|
27
|
+
|
28
|
+
|
29
|
+
module Puppet
|
30
|
+
|
31
|
+
module Parser
|
32
|
+
|
33
|
+
class Parser < Racc::Parser
|
34
|
+
|
35
|
+
module_eval <<'..end grammar.ra modeval..idd1811897f0', 'grammar.ra', 635
|
36
|
+
attr_reader :file
|
37
|
+
attr_accessor :files
|
38
|
+
|
39
|
+
# Create an AST array out of all of the args
|
40
|
+
def aryfy(*args)
|
41
|
+
if args[0].is_a?(AST::ASTArray)
|
42
|
+
result = args.shift
|
43
|
+
args.each { |arg|
|
44
|
+
result.push arg
|
45
|
+
}
|
46
|
+
else
|
47
|
+
result = AST::ASTArray.new(
|
48
|
+
:children => args
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
return result
|
53
|
+
end
|
54
|
+
|
55
|
+
def file=(file)
|
56
|
+
unless FileTest.exists?(file)
|
57
|
+
raise Puppet::Error, "Could not find file %s" % file
|
58
|
+
end
|
59
|
+
if @files.detect { |f| f.file == file }
|
60
|
+
raise Puppet::ImportError.new("Import loop detected")
|
61
|
+
else
|
62
|
+
@files << Puppet::ParsedFile.new(file)
|
63
|
+
@lexer.file = file
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def initialize
|
68
|
+
@lexer = Puppet::Parser::Lexer.new()
|
69
|
+
@files = []
|
70
|
+
#if Puppet[:debug]
|
71
|
+
# @yydebug = true
|
72
|
+
#end
|
73
|
+
end
|
74
|
+
|
75
|
+
def on_error(token,value,stack)
|
76
|
+
#on '%s' at '%s' in\n'%s'" % [token,value,stack]
|
77
|
+
#error = "line %s: parse error after '%s'" %
|
78
|
+
# [@lexer.line,@lexer.last]
|
79
|
+
error = "Syntax error at '%s'" % [value]
|
80
|
+
|
81
|
+
#if Puppet[:debug]
|
82
|
+
#puts stack.inspect
|
83
|
+
#puts stack.class
|
84
|
+
#end
|
85
|
+
#if @lexer.file
|
86
|
+
# error += (" in '%s'" % @lexer.file)
|
87
|
+
#end
|
88
|
+
|
89
|
+
except = Puppet::ParseError.new(error)
|
90
|
+
except.line = @lexer.line
|
91
|
+
if @lexer.file
|
92
|
+
except.file = @lexer.file
|
93
|
+
end
|
94
|
+
|
95
|
+
raise except
|
96
|
+
end
|
97
|
+
|
98
|
+
# how should I do error handling here?
|
99
|
+
def parse
|
100
|
+
begin
|
101
|
+
yyparse(@lexer,:scan)
|
102
|
+
rescue Racc::ParseError => except
|
103
|
+
error = Puppet::ParseError.new(except)
|
104
|
+
error.line = @lexer.line
|
105
|
+
error.file = @lexer.file
|
106
|
+
error.stack = caller
|
107
|
+
raise error
|
108
|
+
rescue Puppet::ParseError => except
|
109
|
+
except.line ||= @lexer.line
|
110
|
+
except.file ||= @lexer.file
|
111
|
+
raise except
|
112
|
+
rescue Puppet::Error => except
|
113
|
+
# and this is a framework error
|
114
|
+
except.line ||= @lexer.line
|
115
|
+
except.file ||= @lexer.file
|
116
|
+
except.stack ||= except.stack
|
117
|
+
#if Puppet[:debug]
|
118
|
+
# puts except.stack
|
119
|
+
#end
|
120
|
+
raise except
|
121
|
+
rescue Puppet::DevError => except
|
122
|
+
except.line ||= @lexer.line
|
123
|
+
except.file ||= @lexer.file
|
124
|
+
except.stack ||= caller
|
125
|
+
#if Puppet[:debug]
|
126
|
+
# puts except.stack
|
127
|
+
#end
|
128
|
+
raise except
|
129
|
+
rescue => except
|
130
|
+
error = Puppet::DevError.new(except.message)
|
131
|
+
error.line = @lexer.line
|
132
|
+
error.file = @lexer.file
|
133
|
+
error.stack = caller
|
134
|
+
#if Puppet[:debug]
|
135
|
+
# puts caller
|
136
|
+
#end
|
137
|
+
raise error
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def reparse?
|
142
|
+
@files.detect { |file|
|
143
|
+
file.changed?
|
144
|
+
}
|
145
|
+
end
|
146
|
+
|
147
|
+
def string=(string)
|
148
|
+
@lexer.string = string
|
149
|
+
end
|
150
|
+
|
151
|
+
# $Id: parser.rb 729 2005-10-25 19:49:22Z luke $
|
152
|
+
..end grammar.ra modeval..idd1811897f0
|
153
|
+
|
154
|
+
##### racc 1.4.4 generates ###
|
155
|
+
|
156
|
+
racc_reduce_table = [
|
157
|
+
0, 0, :racc_error,
|
158
|
+
1, 41, :_reduce_1,
|
159
|
+
1, 42, :_reduce_none,
|
160
|
+
2, 42, :_reduce_3,
|
161
|
+
1, 43, :_reduce_none,
|
162
|
+
1, 43, :_reduce_none,
|
163
|
+
1, 43, :_reduce_none,
|
164
|
+
1, 43, :_reduce_none,
|
165
|
+
1, 43, :_reduce_none,
|
166
|
+
1, 43, :_reduce_none,
|
167
|
+
1, 43, :_reduce_none,
|
168
|
+
1, 43, :_reduce_none,
|
169
|
+
2, 48, :_reduce_12,
|
170
|
+
1, 52, :_reduce_none,
|
171
|
+
3, 52, :_reduce_14,
|
172
|
+
1, 53, :_reduce_none,
|
173
|
+
1, 53, :_reduce_none,
|
174
|
+
5, 44, :_reduce_17,
|
175
|
+
5, 44, :_reduce_18,
|
176
|
+
5, 44, :_reduce_19,
|
177
|
+
3, 61, :_reduce_20,
|
178
|
+
1, 56, :_reduce_none,
|
179
|
+
3, 56, :_reduce_22,
|
180
|
+
0, 57, :_reduce_none,
|
181
|
+
1, 57, :_reduce_none,
|
182
|
+
1, 54, :_reduce_25,
|
183
|
+
1, 60, :_reduce_26,
|
184
|
+
1, 62, :_reduce_none,
|
185
|
+
1, 62, :_reduce_none,
|
186
|
+
1, 62, :_reduce_none,
|
187
|
+
1, 62, :_reduce_none,
|
188
|
+
1, 62, :_reduce_none,
|
189
|
+
1, 62, :_reduce_none,
|
190
|
+
3, 45, :_reduce_33,
|
191
|
+
0, 58, :_reduce_34,
|
192
|
+
1, 58, :_reduce_35,
|
193
|
+
3, 58, :_reduce_36,
|
194
|
+
3, 67, :_reduce_37,
|
195
|
+
1, 68, :_reduce_none,
|
196
|
+
3, 68, :_reduce_39,
|
197
|
+
1, 66, :_reduce_none,
|
198
|
+
1, 66, :_reduce_none,
|
199
|
+
1, 66, :_reduce_none,
|
200
|
+
1, 66, :_reduce_none,
|
201
|
+
1, 66, :_reduce_none,
|
202
|
+
1, 66, :_reduce_none,
|
203
|
+
1, 66, :_reduce_none,
|
204
|
+
1, 66, :_reduce_none,
|
205
|
+
1, 66, :_reduce_none,
|
206
|
+
1, 63, :_reduce_49,
|
207
|
+
1, 70, :_reduce_50,
|
208
|
+
4, 71, :_reduce_51,
|
209
|
+
5, 46, :_reduce_52,
|
210
|
+
1, 72, :_reduce_none,
|
211
|
+
2, 72, :_reduce_54,
|
212
|
+
5, 73, :_reduce_55,
|
213
|
+
1, 74, :_reduce_none,
|
214
|
+
3, 74, :_reduce_57,
|
215
|
+
3, 64, :_reduce_58,
|
216
|
+
1, 76, :_reduce_none,
|
217
|
+
3, 76, :_reduce_60,
|
218
|
+
1, 78, :_reduce_none,
|
219
|
+
3, 78, :_reduce_62,
|
220
|
+
3, 77, :_reduce_63,
|
221
|
+
1, 75, :_reduce_64,
|
222
|
+
1, 75, :_reduce_65,
|
223
|
+
1, 75, :_reduce_66,
|
224
|
+
1, 75, :_reduce_67,
|
225
|
+
1, 75, :_reduce_none,
|
226
|
+
2, 47, :_reduce_69,
|
227
|
+
6, 49, :_reduce_70,
|
228
|
+
6, 50, :_reduce_71,
|
229
|
+
6, 51, :_reduce_72,
|
230
|
+
1, 81, :_reduce_none,
|
231
|
+
2, 81, :_reduce_74,
|
232
|
+
0, 82, :_reduce_75,
|
233
|
+
1, 79, :_reduce_none,
|
234
|
+
3, 79, :_reduce_77,
|
235
|
+
3, 79, :_reduce_78,
|
236
|
+
1, 83, :_reduce_none,
|
237
|
+
3, 83, :_reduce_80,
|
238
|
+
3, 84, :_reduce_81,
|
239
|
+
1, 84, :_reduce_82,
|
240
|
+
1, 80, :_reduce_none,
|
241
|
+
2, 80, :_reduce_84,
|
242
|
+
1, 55, :_reduce_85,
|
243
|
+
3, 65, :_reduce_86,
|
244
|
+
1, 69, :_reduce_none,
|
245
|
+
1, 69, :_reduce_none,
|
246
|
+
0, 59, :_reduce_none,
|
247
|
+
1, 59, :_reduce_90 ]
|
248
|
+
|
249
|
+
racc_reduce_n = 91
|
250
|
+
|
251
|
+
racc_shift_n = 152
|
252
|
+
|
253
|
+
racc_action_table = [
|
254
|
+
88, 123, 88, 118, 144, 130, 101, 102, 88, 117,
|
255
|
+
96, 4, 7, 88, 11, 14, 120, 18, 88, 31,
|
256
|
+
40, 2, 5, 88, 9, 122, 15, 5, 35, 110,
|
257
|
+
35, 86, 87, 86, 87, 90, 35, 90, 55, 86,
|
258
|
+
87, 35, 112, 90, 86, 87, 35, 138, 90, 86,
|
259
|
+
87, 35, 104, 90, 86, 87, 28, 29, 90, 28,
|
260
|
+
29, 28, 29, 106, 65, 4, 7, 114, 11, 14,
|
261
|
+
5, 18, 28, 29, 58, 2, 5, 50, 9, 31,
|
262
|
+
15, 31, 28, 29, 31, 35, 31, 5, 2, 5,
|
263
|
+
35, 2, 5, 2, 5, 100, 104, 31, 146, 101,
|
264
|
+
102, 35, 116, 107, 2, 5, 119, 31, 28, 29,
|
265
|
+
55, 35, 54, 61, 2, 5, 4, 7, 126, 11,
|
266
|
+
14, 50, 18, 128, 151, 5, 2, 5, 108, 9,
|
267
|
+
61, 15, 66, 31, 28, 29, 28, 29, 81, 134,
|
268
|
+
2, 72, 4, 7, 48, 11, 14, 136, 18, 61,
|
269
|
+
5, 5, 2, 5, 147, 9, 65, 15, 141, 31,
|
270
|
+
41, 31, 106, 35, 40, 35, 2, 5, 2, 5,
|
271
|
+
28, 29, 4, 7, 39, 11, 14, 24, 18, 28,
|
272
|
+
29, 148, 2, 5, 69, 9, 23, 15, 61, 52,
|
273
|
+
nil, nil, nil, nil, nil, 31, nil, nil, nil, 35,
|
274
|
+
nil, nil, 2, 5, 31, nil, nil, nil, 35, nil,
|
275
|
+
nil, 2, 5, 4, 7, nil, 11, 14, nil, 18,
|
276
|
+
nil, nil, nil, 2, 5, nil, 9, nil, 15, 4,
|
277
|
+
7, nil, 11, 14, nil, 18, nil, nil, nil, 2,
|
278
|
+
5, nil, 9, nil, 15, 4, 7, nil, 11, 14,
|
279
|
+
nil, 18, nil, nil, nil, 2, 5, nil, 9, nil,
|
280
|
+
15, 4, 7, nil, 11, 14, nil, 18, nil, nil,
|
281
|
+
nil, 2, 5, nil, 9, nil, 15, 4, 7, nil,
|
282
|
+
11, 14, nil, 18, nil, nil, nil, 2, 5, nil,
|
283
|
+
9, nil, 15 ]
|
284
|
+
|
285
|
+
racc_action_check = [
|
286
|
+
143, 93, 54, 83, 125, 105, 125, 125, 55, 83,
|
287
|
+
55, 107, 107, 91, 107, 107, 91, 107, 96, 66,
|
288
|
+
33, 107, 107, 123, 107, 93, 107, 66, 143, 67,
|
289
|
+
54, 143, 143, 54, 54, 143, 55, 54, 70, 55,
|
290
|
+
55, 91, 71, 55, 91, 91, 96, 115, 91, 96,
|
291
|
+
96, 123, 72, 96, 123, 123, 104, 104, 123, 112,
|
292
|
+
112, 119, 119, 73, 46, 115, 115, 76, 115, 115,
|
293
|
+
46, 115, 126, 126, 38, 115, 115, 38, 115, 15,
|
294
|
+
115, 104, 99, 99, 112, 104, 119, 15, 104, 104,
|
295
|
+
119, 112, 112, 119, 119, 57, 61, 126, 132, 57,
|
296
|
+
57, 126, 82, 63, 126, 126, 85, 99, 50, 50,
|
297
|
+
26, 99, 25, 40, 99, 99, 132, 132, 97, 132,
|
298
|
+
132, 21, 132, 103, 149, 52, 132, 132, 65, 132,
|
299
|
+
106, 132, 43, 50, 28, 28, 58, 58, 51, 111,
|
300
|
+
50, 50, 149, 149, 19, 149, 149, 113, 149, 114,
|
301
|
+
18, 118, 149, 149, 133, 149, 41, 149, 122, 28,
|
302
|
+
14, 58, 62, 28, 12, 58, 28, 28, 58, 58,
|
303
|
+
39, 39, 133, 133, 11, 133, 133, 7, 133, 9,
|
304
|
+
9, 137, 133, 133, 48, 133, 4, 133, 148, 24,
|
305
|
+
nil, nil, nil, nil, nil, 39, nil, nil, nil, 39,
|
306
|
+
nil, nil, 39, 39, 9, nil, nil, nil, 9, nil,
|
307
|
+
nil, 9, 9, 0, 0, nil, 0, 0, nil, 0,
|
308
|
+
nil, nil, nil, 0, 0, nil, 0, nil, 0, 141,
|
309
|
+
141, nil, 141, 141, nil, 141, nil, nil, nil, 141,
|
310
|
+
141, nil, 141, nil, 141, 81, 81, nil, 81, 81,
|
311
|
+
nil, 81, nil, nil, nil, 81, 81, nil, 81, nil,
|
312
|
+
81, 110, 110, nil, 110, 110, nil, 110, nil, nil,
|
313
|
+
nil, 110, 110, nil, 110, nil, 110, 20, 20, nil,
|
314
|
+
20, 20, nil, 20, nil, nil, nil, 20, 20, nil,
|
315
|
+
20, nil, 20 ]
|
316
|
+
|
317
|
+
racc_action_pointer = [
|
318
|
+
189, nil, nil, nil, 183, nil, nil, 142, nil, 177,
|
319
|
+
nil, 162, 159, nil, 125, 52, nil, nil, 115, 144,
|
320
|
+
253, 116, nil, nil, 175, 107, 97, nil, 132, nil,
|
321
|
+
nil, nil, nil, 15, nil, nil, nil, nil, 72, 168,
|
322
|
+
78, 127, nil, 123, nil, nil, 35, nil, 184, nil,
|
323
|
+
106, 133, 90, nil, -1, 5, nil, 91, 134, nil,
|
324
|
+
nil, 88, 153, 98, nil, 93, -8, 24, nil, nil,
|
325
|
+
25, 6, 44, 54, nil, nil, 34, nil, nil, nil,
|
326
|
+
nil, 221, 87, -6, nil, 94, nil, nil, nil, nil,
|
327
|
+
nil, 10, nil, -8, nil, nil, 15, 110, nil, 80,
|
328
|
+
nil, nil, nil, 119, 54, -1, 95, -13, nil, nil,
|
329
|
+
237, 133, 57, 141, 114, 41, nil, nil, 116, 59,
|
330
|
+
nil, nil, 153, 20, nil, -2, 70, nil, nil, nil,
|
331
|
+
nil, nil, 92, 148, nil, nil, nil, 172, nil, nil,
|
332
|
+
nil, 205, nil, -3, nil, nil, nil, nil, 153, 118,
|
333
|
+
nil, nil ]
|
334
|
+
|
335
|
+
racc_action_default = [
|
336
|
+
-91, -4, -26, -5, -91, -25, -6, -91, -7, -91,
|
337
|
+
-8, -91, -91, -9, -91, -91, -10, -11, -91, -91,
|
338
|
+
-1, -91, -2, -69, -75, -91, -46, -45, -91, -49,
|
339
|
+
-43, -85, -48, -42, -40, -50, -44, -47, -41, -91,
|
340
|
+
-34, -75, -16, -12, -13, -15, -75, -73, -91, -3,
|
341
|
+
-34, -91, -75, -76, -91, -91, -38, -91, -91, -33,
|
342
|
+
-35, -91, -89, -91, -83, -91, -91, -91, -74, 152,
|
343
|
+
-31, -23, -25, -89, -29, -21, -91, -27, -30, -32,
|
344
|
+
-28, -91, -91, -91, -79, -82, -65, -64, -66, -68,
|
345
|
+
-67, -91, -53, -91, -56, -59, -91, -91, -58, -91,
|
346
|
+
-86, -87, -88, -91, -91, -91, -90, -91, -84, -14,
|
347
|
+
-91, -91, -24, -91, -34, -91, -77, -78, -91, -91,
|
348
|
+
-52, -54, -91, -91, -61, -91, -91, -39, -51, -37,
|
349
|
+
-19, -36, -91, -91, -17, -22, -18, -20, -70, -80,
|
350
|
+
-81, -91, -57, -91, -60, -63, -71, -72, -91, -91,
|
351
|
+
-62, -55 ]
|
352
|
+
|
353
|
+
racc_goto_table = [
|
354
|
+
20, 49, 38, 62, 99, 27, 42, 84, 45, 94,
|
355
|
+
131, 47, 75, 73, 25, 44, 92, 125, 77, 89,
|
356
|
+
89, 38, 78, 79, 27, 105, 63, 53, 95, 111,
|
357
|
+
33, 67, 38, 56, 98, 27, 113, 43, 57, 68,
|
358
|
+
51, 70, 91, 80, 59, 85, 94, 46, 71, 33,
|
359
|
+
83, 38, 131, 121, 27, 82, 89, 42, 19, 45,
|
360
|
+
33, 89, nil, 103, nil, nil, 109, nil, nil, 124,
|
361
|
+
nil, 74, 143, 139, 135, nil, nil, 137, 142, 33,
|
362
|
+
77, 115, nil, nil, 78, 79, nil, nil, 89, nil,
|
363
|
+
nil, nil, 38, nil, nil, 27, 49, 38, nil, nil,
|
364
|
+
27, nil, nil, 70, 127, 80, nil, 132, 89, 129,
|
365
|
+
133, 85, 38, 49, 49, 27, 150, nil, nil, 38,
|
366
|
+
33, nil, 27, nil, 140, 33, nil, nil, nil, nil,
|
367
|
+
49, 145, nil, 74, nil, nil, nil, nil, nil, nil,
|
368
|
+
33, 149, nil, nil, nil, nil, nil, 33 ]
|
369
|
+
|
370
|
+
racc_goto_check = [
|
371
|
+
2, 3, 14, 18, 29, 4, 15, 44, 14, 35,
|
372
|
+
27, 14, 21, 18, 26, 13, 33, 38, 23, 30,
|
373
|
+
30, 14, 24, 25, 4, 19, 40, 42, 37, 17,
|
374
|
+
20, 40, 14, 26, 36, 4, 19, 12, 28, 14,
|
375
|
+
39, 15, 32, 14, 26, 14, 35, 41, 16, 20,
|
376
|
+
43, 14, 27, 33, 4, 42, 30, 15, 1, 14,
|
377
|
+
20, 30, nil, 26, nil, nil, 13, nil, nil, 37,
|
378
|
+
nil, 20, 29, 44, 21, nil, nil, 18, 35, 20,
|
379
|
+
23, 2, nil, nil, 24, 25, nil, nil, 30, nil,
|
380
|
+
nil, nil, 14, nil, nil, 4, 3, 14, nil, nil,
|
381
|
+
4, nil, nil, 15, 26, 14, nil, 2, 30, 26,
|
382
|
+
2, 14, 14, 3, 3, 4, 37, nil, nil, 14,
|
383
|
+
20, nil, 4, nil, 26, 20, nil, nil, nil, nil,
|
384
|
+
3, 26, nil, 20, nil, nil, nil, nil, nil, nil,
|
385
|
+
20, 2, nil, nil, nil, nil, nil, 20 ]
|
386
|
+
|
387
|
+
racc_goto_pointer = [
|
388
|
+
nil, 58, 0, -19, -4, nil, nil, nil, nil, nil,
|
389
|
+
nil, nil, 22, 0, -7, -9, -2, -42, -37, -37,
|
390
|
+
21, -38, nil, -32, -28, -27, 5, -96, 10, -53,
|
391
|
+
-35, nil, -12, -38, nil, -45, -21, -27, -79, 16,
|
392
|
+
-15, 29, 3, -2, -45 ]
|
393
|
+
|
394
|
+
racc_goto_default = [
|
395
|
+
nil, nil, nil, 22, 1, 3, 6, 8, 10, 13,
|
396
|
+
16, 17, nil, nil, 21, 26, nil, nil, nil, nil,
|
397
|
+
12, nil, 76, 34, 36, 37, nil, 60, nil, nil,
|
398
|
+
30, 32, nil, nil, 93, 97, nil, nil, nil, nil,
|
399
|
+
nil, nil, 64, nil, nil ]
|
400
|
+
|
401
|
+
racc_token_table = {
|
402
|
+
false => 0,
|
403
|
+
Object.new => 1,
|
404
|
+
:LBRACK => 2,
|
405
|
+
:QTEXT => 3,
|
406
|
+
:RBRACK => 4,
|
407
|
+
:LBRACE => 5,
|
408
|
+
:RBRACE => 6,
|
409
|
+
:SYMBOL => 7,
|
410
|
+
:FARROW => 8,
|
411
|
+
:COMMA => 9,
|
412
|
+
:TRUE => 10,
|
413
|
+
:FALSE => 11,
|
414
|
+
:EQUALS => 12,
|
415
|
+
:QMARK => 13,
|
416
|
+
:LPAREN => 14,
|
417
|
+
:RPAREN => 15,
|
418
|
+
:ISEQUAL => 16,
|
419
|
+
:GREATEREQUAL => 17,
|
420
|
+
:GREATERTHAN => 18,
|
421
|
+
:LESSTHAN => 19,
|
422
|
+
:LESSEQUAL => 20,
|
423
|
+
:NOTEQUAL => 21,
|
424
|
+
:IF => 22,
|
425
|
+
:ELSE => 23,
|
426
|
+
:IMPORT => 24,
|
427
|
+
:DEFINE => 25,
|
428
|
+
:ELSIF => 26,
|
429
|
+
:VARIABLE => 27,
|
430
|
+
:CLASS => 28,
|
431
|
+
:INHERITS => 29,
|
432
|
+
:NODE => 30,
|
433
|
+
:BOOLEAN => 31,
|
434
|
+
:DOT => 32,
|
435
|
+
:COLON => 33,
|
436
|
+
:TYPE => 34,
|
437
|
+
:NAME => 35,
|
438
|
+
:SEMIC => 36,
|
439
|
+
:CASE => 37,
|
440
|
+
:DEFAULT => 38,
|
441
|
+
:INCLUDE => 39 }
|
442
|
+
|
443
|
+
racc_use_result_var = true
|
444
|
+
|
445
|
+
racc_nt_base = 40
|
446
|
+
|
447
|
+
Racc_arg = [
|
448
|
+
racc_action_table,
|
449
|
+
racc_action_check,
|
450
|
+
racc_action_default,
|
451
|
+
racc_action_pointer,
|
452
|
+
racc_goto_table,
|
453
|
+
racc_goto_check,
|
454
|
+
racc_goto_default,
|
455
|
+
racc_goto_pointer,
|
456
|
+
racc_nt_base,
|
457
|
+
racc_reduce_table,
|
458
|
+
racc_token_table,
|
459
|
+
racc_shift_n,
|
460
|
+
racc_reduce_n,
|
461
|
+
racc_use_result_var ]
|
462
|
+
|
463
|
+
Racc_token_to_s_table = [
|
464
|
+
'$end',
|
465
|
+
'error',
|
466
|
+
'LBRACK',
|
467
|
+
'QTEXT',
|
468
|
+
'RBRACK',
|
469
|
+
'LBRACE',
|
470
|
+
'RBRACE',
|
471
|
+
'SYMBOL',
|
472
|
+
'FARROW',
|
473
|
+
'COMMA',
|
474
|
+
'TRUE',
|
475
|
+
'FALSE',
|
476
|
+
'EQUALS',
|
477
|
+
'QMARK',
|
478
|
+
'LPAREN',
|
479
|
+
'RPAREN',
|
480
|
+
'ISEQUAL',
|
481
|
+
'GREATEREQUAL',
|
482
|
+
'GREATERTHAN',
|
483
|
+
'LESSTHAN',
|
484
|
+
'LESSEQUAL',
|
485
|
+
'NOTEQUAL',
|
486
|
+
'IF',
|
487
|
+
'ELSE',
|
488
|
+
'IMPORT',
|
489
|
+
'DEFINE',
|
490
|
+
'ELSIF',
|
491
|
+
'VARIABLE',
|
492
|
+
'CLASS',
|
493
|
+
'INHERITS',
|
494
|
+
'NODE',
|
495
|
+
'BOOLEAN',
|
496
|
+
'DOT',
|
497
|
+
'COLON',
|
498
|
+
'TYPE',
|
499
|
+
'NAME',
|
500
|
+
'SEMIC',
|
501
|
+
'CASE',
|
502
|
+
'DEFAULT',
|
503
|
+
'INCLUDE',
|
504
|
+
'$start',
|
505
|
+
'program',
|
506
|
+
'statements',
|
507
|
+
'statement',
|
508
|
+
'object',
|
509
|
+
'assignment',
|
510
|
+
'casestatement',
|
511
|
+
'import',
|
512
|
+
'include',
|
513
|
+
'definition',
|
514
|
+
'hostclass',
|
515
|
+
'nodedef',
|
516
|
+
'classnames',
|
517
|
+
'classname',
|
518
|
+
'name',
|
519
|
+
'variable',
|
520
|
+
'objectinstances',
|
521
|
+
'endsemi',
|
522
|
+
'params',
|
523
|
+
'endcomma',
|
524
|
+
'type',
|
525
|
+
'objectinst',
|
526
|
+
'objectname',
|
527
|
+
'quotedtext',
|
528
|
+
'selector',
|
529
|
+
'array',
|
530
|
+
'rvalue',
|
531
|
+
'param',
|
532
|
+
'rvalues',
|
533
|
+
'comma',
|
534
|
+
'boolean',
|
535
|
+
'objectref',
|
536
|
+
'caseopts',
|
537
|
+
'caseopt',
|
538
|
+
'casevalues',
|
539
|
+
'selectlhand',
|
540
|
+
'svalues',
|
541
|
+
'selectval',
|
542
|
+
'sintvalues',
|
543
|
+
'argumentlist',
|
544
|
+
'parent',
|
545
|
+
'names',
|
546
|
+
'nothing',
|
547
|
+
'arguments',
|
548
|
+
'argument']
|
549
|
+
|
550
|
+
Racc_debug_parser = false
|
551
|
+
|
552
|
+
##### racc system variables end #####
|
553
|
+
|
554
|
+
# reduce 0 omitted
|
555
|
+
|
556
|
+
module_eval <<'.,.,', 'grammar.ra', 37
|
557
|
+
def _reduce_1( val, _values, result )
|
558
|
+
if val[0].is_a?(AST::ASTArray)
|
559
|
+
result = val[0]
|
560
|
+
else
|
561
|
+
result = AST::ASTArray.new(
|
562
|
+
:line => @lexer.line,
|
563
|
+
:children => [val[0]]
|
564
|
+
)
|
565
|
+
end
|
566
|
+
|
567
|
+
# this is mainly so we can test the parser separately from the
|
568
|
+
# interpreter
|
569
|
+
# if Puppet[:parseonly]
|
570
|
+
# begin
|
571
|
+
# if Puppet[:debug]
|
572
|
+
# puts result.tree(0)
|
573
|
+
# end
|
574
|
+
# rescue NoMethodError => detail
|
575
|
+
# Puppet.err detail
|
576
|
+
# #exit(78)
|
577
|
+
# end
|
578
|
+
# #require 'puppet/parser/interpreter'
|
579
|
+
# #result = Puppet::Server.new(result)
|
580
|
+
# end
|
581
|
+
result
|
582
|
+
end
|
583
|
+
.,.,
|
584
|
+
|
585
|
+
# reduce 2 omitted
|
586
|
+
|
587
|
+
module_eval <<'.,.,', 'grammar.ra', 51
|
588
|
+
def _reduce_3( val, _values, result )
|
589
|
+
if val[0].is_a?(AST::ASTArray)
|
590
|
+
val[0].push(val[1])
|
591
|
+
result = val[0]
|
592
|
+
else
|
593
|
+
result = AST::ASTArray.new(
|
594
|
+
:file => @lexer.file,
|
595
|
+
:line => @lexer.line,
|
596
|
+
:children => [val[0],val[1]]
|
597
|
+
)
|
598
|
+
end
|
599
|
+
result
|
600
|
+
end
|
601
|
+
.,.,
|
602
|
+
|
603
|
+
# reduce 4 omitted
|
604
|
+
|
605
|
+
# reduce 5 omitted
|
606
|
+
|
607
|
+
# reduce 6 omitted
|
608
|
+
|
609
|
+
# reduce 7 omitted
|
610
|
+
|
611
|
+
# reduce 8 omitted
|
612
|
+
|
613
|
+
# reduce 9 omitted
|
614
|
+
|
615
|
+
# reduce 10 omitted
|
616
|
+
|
617
|
+
# reduce 11 omitted
|
618
|
+
|
619
|
+
module_eval <<'.,.,', 'grammar.ra', 88
|
620
|
+
def _reduce_12( val, _values, result )
|
621
|
+
classnames = aryfy(val[1])
|
622
|
+
|
623
|
+
klasses = []
|
624
|
+
|
625
|
+
# Now just iterate over each of the class names and create a new
|
626
|
+
# object instance. FIXME This should probably eventually include
|
627
|
+
# some kind of checking that the asked-for class is a defined class.
|
628
|
+
classnames.each { |classname|
|
629
|
+
emptyary = AST::ASTArray.new(:children => [])
|
630
|
+
klasses << AST::ObjectDef.new(
|
631
|
+
:pin => "{}",
|
632
|
+
:line => @lexer.line,
|
633
|
+
:file => @lexer.file,
|
634
|
+
:type => classname,
|
635
|
+
:params => emptyary
|
636
|
+
)
|
637
|
+
}
|
638
|
+
result = AST::ASTArray.new(
|
639
|
+
:line => @lexer.line,
|
640
|
+
:file => @lexer.file,
|
641
|
+
:children => klasses
|
642
|
+
)
|
643
|
+
result
|
644
|
+
end
|
645
|
+
.,.,
|
646
|
+
|
647
|
+
# reduce 13 omitted
|
648
|
+
|
649
|
+
module_eval <<'.,.,', 'grammar.ra', 95
|
650
|
+
def _reduce_14( val, _values, result )
|
651
|
+
result = aryfy(val[0], val[2])
|
652
|
+
result.line = @lexer.line
|
653
|
+
result.file = @lexer.file
|
654
|
+
result
|
655
|
+
end
|
656
|
+
.,.,
|
657
|
+
|
658
|
+
# reduce 15 omitted
|
659
|
+
|
660
|
+
# reduce 16 omitted
|
661
|
+
|
662
|
+
module_eval <<'.,.,', 'grammar.ra', 129
|
663
|
+
def _reduce_17( val, _values, result )
|
664
|
+
if val[0].is_a?(AST::ASTArray)
|
665
|
+
raise Puppet::ParseError, "Invalid name"
|
666
|
+
end
|
667
|
+
array = val[2]
|
668
|
+
if array.is_a?(AST::ObjectInst)
|
669
|
+
array = [array]
|
670
|
+
end
|
671
|
+
result = AST::ASTArray.new(
|
672
|
+
:line => @lexer.line,
|
673
|
+
:file => @lexer.file
|
674
|
+
)
|
675
|
+
# this iterates across each specified objectinstance
|
676
|
+
array.each { |instance|
|
677
|
+
unless instance.is_a?(AST::ObjectInst)
|
678
|
+
raise Puppet::Dev, "Got something that isn't an instance"
|
679
|
+
end
|
680
|
+
# now, i need to somehow differentiate between those things with
|
681
|
+
# arrays in their names, and normal things
|
682
|
+
result.push AST::ObjectDef.new(
|
683
|
+
:pin => "{}",
|
684
|
+
:line => @lexer.line,
|
685
|
+
:file => @lexer.file,
|
686
|
+
:type => val[0],
|
687
|
+
:name => instance[0],
|
688
|
+
:params => instance[1]
|
689
|
+
)
|
690
|
+
}
|
691
|
+
result
|
692
|
+
end
|
693
|
+
.,.,
|
694
|
+
|
695
|
+
module_eval <<'.,.,', 'grammar.ra', 145
|
696
|
+
def _reduce_18( val, _values, result )
|
697
|
+
if val[0].is_a?(AST::ASTArray)
|
698
|
+
Puppet.notice "invalid name"
|
699
|
+
raise Puppet::ParseError, "Invalid name"
|
700
|
+
end
|
701
|
+
# an object but without a name
|
702
|
+
# this cannot be an instance of a library type
|
703
|
+
|
704
|
+
# the objects will autogenerate a name if we don't provide one
|
705
|
+
result = AST::ObjectDef.new(
|
706
|
+
:pin => "{}",
|
707
|
+
:line => @lexer.line,
|
708
|
+
:file => @lexer.file,
|
709
|
+
:type => val[0],
|
710
|
+
:params => val[2]
|
711
|
+
)
|
712
|
+
result
|
713
|
+
end
|
714
|
+
.,.,
|
715
|
+
|
716
|
+
module_eval <<'.,.,', 'grammar.ra', 157
|
717
|
+
def _reduce_19( val, _values, result )
|
718
|
+
# a template setting for a type
|
719
|
+
if val[0].is_a?(AST::ASTArray)
|
720
|
+
raise Puppet::ParseError, "Invalid type"
|
721
|
+
end
|
722
|
+
result = AST::TypeDefaults.new(
|
723
|
+
:pin => "{}",
|
724
|
+
:line => @lexer.line,
|
725
|
+
:file => @lexer.file,
|
726
|
+
:type => val[0],
|
727
|
+
:params => val[2]
|
728
|
+
)
|
729
|
+
result
|
730
|
+
end
|
731
|
+
.,.,
|
732
|
+
|
733
|
+
module_eval <<'.,.,', 'grammar.ra', 165
|
734
|
+
def _reduce_20( val, _values, result )
|
735
|
+
result = AST::ObjectInst.new(
|
736
|
+
:line => @lexer.line,
|
737
|
+
:file => @lexer.file,
|
738
|
+
:children => [val[0],val[2]]
|
739
|
+
)
|
740
|
+
result
|
741
|
+
end
|
742
|
+
.,.,
|
743
|
+
|
744
|
+
# reduce 21 omitted
|
745
|
+
|
746
|
+
module_eval <<'.,.,', 'grammar.ra', 179
|
747
|
+
def _reduce_22( val, _values, result )
|
748
|
+
if val[0].is_a?(AST::ObjectInst)
|
749
|
+
result = AST::ASTArray.new(
|
750
|
+
:line => @lexer.line,
|
751
|
+
:file => @lexer.file,
|
752
|
+
:children => [val[0],val[2]]
|
753
|
+
)
|
754
|
+
else
|
755
|
+
val[0].push val[2]
|
756
|
+
result = val[0]
|
757
|
+
end
|
758
|
+
result
|
759
|
+
end
|
760
|
+
.,.,
|
761
|
+
|
762
|
+
# reduce 23 omitted
|
763
|
+
|
764
|
+
# reduce 24 omitted
|
765
|
+
|
766
|
+
module_eval <<'.,.,', 'grammar.ra', 190
|
767
|
+
def _reduce_25( val, _values, result )
|
768
|
+
result = AST::Name.new(
|
769
|
+
:line => @lexer.line,
|
770
|
+
:file => @lexer.file,
|
771
|
+
:value => val[0]
|
772
|
+
)
|
773
|
+
result
|
774
|
+
end
|
775
|
+
.,.,
|
776
|
+
|
777
|
+
module_eval <<'.,.,', 'grammar.ra', 198
|
778
|
+
def _reduce_26( val, _values, result )
|
779
|
+
result = AST::Type.new(
|
780
|
+
:line => @lexer.line,
|
781
|
+
:file => @lexer.file,
|
782
|
+
:value => val[0]
|
783
|
+
)
|
784
|
+
result
|
785
|
+
end
|
786
|
+
.,.,
|
787
|
+
|
788
|
+
# reduce 27 omitted
|
789
|
+
|
790
|
+
# reduce 28 omitted
|
791
|
+
|
792
|
+
# reduce 29 omitted
|
793
|
+
|
794
|
+
# reduce 30 omitted
|
795
|
+
|
796
|
+
# reduce 31 omitted
|
797
|
+
|
798
|
+
# reduce 32 omitted
|
799
|
+
|
800
|
+
module_eval <<'.,.,', 'grammar.ra', 221
|
801
|
+
def _reduce_33( val, _values, result )
|
802
|
+
# this is distinct from referencing a variable
|
803
|
+
variable = AST::Name.new(
|
804
|
+
:line => @lexer.line,
|
805
|
+
:file => @lexer.file,
|
806
|
+
:value => val[0].sub(/^\$/,'')
|
807
|
+
)
|
808
|
+
result = AST::VarDef.new(
|
809
|
+
:pin => "=",
|
810
|
+
:line => @lexer.line,
|
811
|
+
:file => @lexer.file,
|
812
|
+
:name => variable,
|
813
|
+
:value => val[2]
|
814
|
+
)
|
815
|
+
result
|
816
|
+
end
|
817
|
+
.,.,
|
818
|
+
|
819
|
+
module_eval <<'.,.,', 'grammar.ra', 230
|
820
|
+
def _reduce_34( val, _values, result )
|
821
|
+
result = AST::ASTArray.new(
|
822
|
+
:line => @lexer.line,
|
823
|
+
:file => @lexer.file,
|
824
|
+
:children => []
|
825
|
+
)
|
826
|
+
result
|
827
|
+
end
|
828
|
+
.,.,
|
829
|
+
|
830
|
+
module_eval <<'.,.,', 'grammar.ra', 230
|
831
|
+
def _reduce_35( val, _values, result )
|
832
|
+
result = val[0]
|
833
|
+
result
|
834
|
+
end
|
835
|
+
.,.,
|
836
|
+
|
837
|
+
module_eval <<'.,.,', 'grammar.ra', 243
|
838
|
+
def _reduce_36( val, _values, result )
|
839
|
+
if val[0].is_a?(AST::ASTArray)
|
840
|
+
val[0].push(val[2])
|
841
|
+
result = val[0]
|
842
|
+
else
|
843
|
+
result = AST::ASTArray.new(
|
844
|
+
:line => @lexer.line,
|
845
|
+
:file => @lexer.file,
|
846
|
+
:children => [val[0],val[2]]
|
847
|
+
)
|
848
|
+
end
|
849
|
+
result
|
850
|
+
end
|
851
|
+
.,.,
|
852
|
+
|
853
|
+
module_eval <<'.,.,', 'grammar.ra', 258
|
854
|
+
def _reduce_37( val, _values, result )
|
855
|
+
leaf = AST::String.new(
|
856
|
+
:line => @lexer.line,
|
857
|
+
:file => @lexer.file,
|
858
|
+
:value => val[0]
|
859
|
+
)
|
860
|
+
result = AST::ObjectParam.new(
|
861
|
+
:pin => "=>",
|
862
|
+
:line => @lexer.line,
|
863
|
+
:file => @lexer.file,
|
864
|
+
:param => leaf,
|
865
|
+
:value => val[2]
|
866
|
+
)
|
867
|
+
result
|
868
|
+
end
|
869
|
+
.,.,
|
870
|
+
|
871
|
+
# reduce 38 omitted
|
872
|
+
|
873
|
+
module_eval <<'.,.,', 'grammar.ra', 271
|
874
|
+
def _reduce_39( val, _values, result )
|
875
|
+
if val[0].is_a?(AST::ASTArray)
|
876
|
+
result = val[0].push(val[2])
|
877
|
+
else
|
878
|
+
result = AST::ASTArray.new(
|
879
|
+
:line => @lexer.line,
|
880
|
+
:file => @lexer.file,
|
881
|
+
:children => [val[0],val[2]]
|
882
|
+
)
|
883
|
+
end
|
884
|
+
result
|
885
|
+
end
|
886
|
+
.,.,
|
887
|
+
|
888
|
+
# reduce 40 omitted
|
889
|
+
|
890
|
+
# reduce 41 omitted
|
891
|
+
|
892
|
+
# reduce 42 omitted
|
893
|
+
|
894
|
+
# reduce 43 omitted
|
895
|
+
|
896
|
+
# reduce 44 omitted
|
897
|
+
|
898
|
+
# reduce 45 omitted
|
899
|
+
|
900
|
+
# reduce 46 omitted
|
901
|
+
|
902
|
+
# reduce 47 omitted
|
903
|
+
|
904
|
+
# reduce 48 omitted
|
905
|
+
|
906
|
+
module_eval <<'.,.,', 'grammar.ra', 289
|
907
|
+
def _reduce_49( val, _values, result )
|
908
|
+
result = AST::String.new(
|
909
|
+
:line => @lexer.line,
|
910
|
+
:file => @lexer.file,
|
911
|
+
:value => val[0]
|
912
|
+
)
|
913
|
+
result
|
914
|
+
end
|
915
|
+
.,.,
|
916
|
+
|
917
|
+
module_eval <<'.,.,', 'grammar.ra', 297
|
918
|
+
def _reduce_50( val, _values, result )
|
919
|
+
result = AST::Boolean.new(
|
920
|
+
:line => @lexer.line,
|
921
|
+
:file => @lexer.file,
|
922
|
+
:value => val[0]
|
923
|
+
)
|
924
|
+
result
|
925
|
+
end
|
926
|
+
.,.,
|
927
|
+
|
928
|
+
module_eval <<'.,.,', 'grammar.ra', 307
|
929
|
+
def _reduce_51( val, _values, result )
|
930
|
+
result = AST::ObjectRef.new(
|
931
|
+
:pin => '[]',
|
932
|
+
:line => @lexer.line,
|
933
|
+
:file => @lexer.file,
|
934
|
+
:type => val[0],
|
935
|
+
:name => val[2]
|
936
|
+
)
|
937
|
+
result
|
938
|
+
end
|
939
|
+
.,.,
|
940
|
+
|
941
|
+
module_eval <<'.,.,', 'grammar.ra', 324
|
942
|
+
def _reduce_52( val, _values, result )
|
943
|
+
options = val[3]
|
944
|
+
unless options.is_a?(AST::ASTArray)
|
945
|
+
options = AST::ASTArray.new(
|
946
|
+
:line => @lexer.line,
|
947
|
+
:file => @lexer.file,
|
948
|
+
:children => [val[3]]
|
949
|
+
)
|
950
|
+
end
|
951
|
+
result = AST::CaseStatement.new(
|
952
|
+
:test => val[1],
|
953
|
+
:options => val[3],
|
954
|
+
:file => @lexer.file,
|
955
|
+
:line => @lexer.line
|
956
|
+
)
|
957
|
+
result
|
958
|
+
end
|
959
|
+
.,.,
|
960
|
+
|
961
|
+
# reduce 53 omitted
|
962
|
+
|
963
|
+
module_eval <<'.,.,', 'grammar.ra', 338
|
964
|
+
def _reduce_54( val, _values, result )
|
965
|
+
if val[0].is_a?(AST::ASTArray)
|
966
|
+
val[0].push val[1]
|
967
|
+
result = val[0]
|
968
|
+
else
|
969
|
+
result = AST::ASTArray.new(
|
970
|
+
:line => @lexer.line,
|
971
|
+
:file => @lexer.file,
|
972
|
+
:children => [val[0], val[1]]
|
973
|
+
)
|
974
|
+
end
|
975
|
+
result
|
976
|
+
end
|
977
|
+
.,.,
|
978
|
+
|
979
|
+
module_eval <<'.,.,', 'grammar.ra', 348
|
980
|
+
def _reduce_55( val, _values, result )
|
981
|
+
result = AST::CaseOpt.new(
|
982
|
+
:pin => ":",
|
983
|
+
:value => val[0],
|
984
|
+
:file => @lexer.file,
|
985
|
+
:line => @lexer.line,
|
986
|
+
:statements => val[3]
|
987
|
+
)
|
988
|
+
result
|
989
|
+
end
|
990
|
+
.,.,
|
991
|
+
|
992
|
+
# reduce 56 omitted
|
993
|
+
|
994
|
+
module_eval <<'.,.,', 'grammar.ra', 362
|
995
|
+
def _reduce_57( val, _values, result )
|
996
|
+
if val[0].is_a?(AST::ASTArray)
|
997
|
+
val[0].push(val[2])
|
998
|
+
result = val[0]
|
999
|
+
else
|
1000
|
+
result = AST::ASTArray.new(
|
1001
|
+
:line => @lexer.line,
|
1002
|
+
:file => @lexer.file,
|
1003
|
+
:children => [val[0],val[2]]
|
1004
|
+
)
|
1005
|
+
end
|
1006
|
+
result
|
1007
|
+
end
|
1008
|
+
.,.,
|
1009
|
+
|
1010
|
+
module_eval <<'.,.,', 'grammar.ra', 372
|
1011
|
+
def _reduce_58( val, _values, result )
|
1012
|
+
result = AST::Selector.new(
|
1013
|
+
:pin => "?",
|
1014
|
+
:line => @lexer.line,
|
1015
|
+
:file => @lexer.file,
|
1016
|
+
:param => val[0],
|
1017
|
+
:values => val[2]
|
1018
|
+
)
|
1019
|
+
result
|
1020
|
+
end
|
1021
|
+
.,.,
|
1022
|
+
|
1023
|
+
# reduce 59 omitted
|
1024
|
+
|
1025
|
+
module_eval <<'.,.,', 'grammar.ra', 374
|
1026
|
+
def _reduce_60( val, _values, result )
|
1027
|
+
result = val[1]
|
1028
|
+
result
|
1029
|
+
end
|
1030
|
+
.,.,
|
1031
|
+
|
1032
|
+
# reduce 61 omitted
|
1033
|
+
|
1034
|
+
module_eval <<'.,.,', 'grammar.ra', 389
|
1035
|
+
def _reduce_62( val, _values, result )
|
1036
|
+
if val[0].is_a?(AST::ASTArray)
|
1037
|
+
val[0].push(val[2])
|
1038
|
+
result = val[0]
|
1039
|
+
else
|
1040
|
+
result = AST::ASTArray.new(
|
1041
|
+
:line => @lexer.line,
|
1042
|
+
:file => @lexer.file,
|
1043
|
+
:children => [val[0],val[2]]
|
1044
|
+
)
|
1045
|
+
end
|
1046
|
+
result
|
1047
|
+
end
|
1048
|
+
.,.,
|
1049
|
+
|
1050
|
+
module_eval <<'.,.,', 'grammar.ra', 399
|
1051
|
+
def _reduce_63( val, _values, result )
|
1052
|
+
result = AST::ObjectParam.new(
|
1053
|
+
:pin => "=>",
|
1054
|
+
:line => @lexer.line,
|
1055
|
+
:file => @lexer.file,
|
1056
|
+
:param => val[0],
|
1057
|
+
:value => val[2]
|
1058
|
+
)
|
1059
|
+
result
|
1060
|
+
end
|
1061
|
+
.,.,
|
1062
|
+
|
1063
|
+
module_eval <<'.,.,', 'grammar.ra', 407
|
1064
|
+
def _reduce_64( val, _values, result )
|
1065
|
+
result = AST::String.new(
|
1066
|
+
:line => @lexer.line,
|
1067
|
+
:file => @lexer.file,
|
1068
|
+
:value => val[0]
|
1069
|
+
)
|
1070
|
+
result
|
1071
|
+
end
|
1072
|
+
.,.,
|
1073
|
+
|
1074
|
+
module_eval <<'.,.,', 'grammar.ra', 414
|
1075
|
+
def _reduce_65( val, _values, result )
|
1076
|
+
result = AST::String.new(
|
1077
|
+
:line => @lexer.line,
|
1078
|
+
:file => @lexer.file,
|
1079
|
+
:value => val[0]
|
1080
|
+
)
|
1081
|
+
result
|
1082
|
+
end
|
1083
|
+
.,.,
|
1084
|
+
|
1085
|
+
module_eval <<'.,.,', 'grammar.ra', 421
|
1086
|
+
def _reduce_66( val, _values, result )
|
1087
|
+
result = AST::String.new(
|
1088
|
+
:line => @lexer.line,
|
1089
|
+
:file => @lexer.file,
|
1090
|
+
:value => val[0]
|
1091
|
+
)
|
1092
|
+
result
|
1093
|
+
end
|
1094
|
+
.,.,
|
1095
|
+
|
1096
|
+
module_eval <<'.,.,', 'grammar.ra', 428
|
1097
|
+
def _reduce_67( val, _values, result )
|
1098
|
+
result = AST::Default.new(
|
1099
|
+
:line => @lexer.line,
|
1100
|
+
:file => @lexer.file,
|
1101
|
+
:value => val[0]
|
1102
|
+
)
|
1103
|
+
result
|
1104
|
+
end
|
1105
|
+
.,.,
|
1106
|
+
|
1107
|
+
# reduce 68 omitted
|
1108
|
+
|
1109
|
+
module_eval <<'.,.,', 'grammar.ra', 466
|
1110
|
+
def _reduce_69( val, _values, result )
|
1111
|
+
# importing files
|
1112
|
+
# yuk, i hate keywords
|
1113
|
+
# we'll probably have to have some kind of search path eventually
|
1114
|
+
# but for now, just use a path relative to the file doing the importing
|
1115
|
+
dir = @lexer.file.sub(%r{[^/]+$},'').sub(/\/$/, '')
|
1116
|
+
if dir == ""
|
1117
|
+
dir = "."
|
1118
|
+
end
|
1119
|
+
result = AST::ASTArray.new(
|
1120
|
+
:file => @lexer.file,
|
1121
|
+
:line => @lexer.line
|
1122
|
+
)
|
1123
|
+
Dir.chdir(dir) {
|
1124
|
+
Dir.glob(val[1]).each { |file|
|
1125
|
+
parser = Puppet::Parser::Parser.new()
|
1126
|
+
parser.files = self.files
|
1127
|
+
Puppet.debug("importing '%s'" % file)
|
1128
|
+
begin
|
1129
|
+
parser.file = File.join(dir, file)
|
1130
|
+
rescue Puppet::ImportError
|
1131
|
+
Puppet.warning(
|
1132
|
+
"Importing %s would result in an import loop" %
|
1133
|
+
File.join(dir, file)
|
1134
|
+
)
|
1135
|
+
result = AST::ASTArray.new(
|
1136
|
+
:file => @lexer.file,
|
1137
|
+
:line => @lexer.line
|
1138
|
+
)
|
1139
|
+
next
|
1140
|
+
end
|
1141
|
+
# push the results into the main result array
|
1142
|
+
result.push parser.parse
|
1143
|
+
}
|
1144
|
+
}
|
1145
|
+
result
|
1146
|
+
end
|
1147
|
+
.,.,
|
1148
|
+
|
1149
|
+
module_eval <<'.,.,', 'grammar.ra', 476
|
1150
|
+
def _reduce_70( val, _values, result )
|
1151
|
+
result = AST::CompDef.new(
|
1152
|
+
:name => AST::Name.new(:value => val[1], :line => @lexer.line),
|
1153
|
+
:args => val[2],
|
1154
|
+
:file => @lexer.file,
|
1155
|
+
:line => @lexer.line,
|
1156
|
+
:code => val[4]
|
1157
|
+
)
|
1158
|
+
result
|
1159
|
+
end
|
1160
|
+
.,.,
|
1161
|
+
|
1162
|
+
module_eval <<'.,.,', 'grammar.ra', 492
|
1163
|
+
def _reduce_71( val, _values, result )
|
1164
|
+
#:args => val[2],
|
1165
|
+
args = {
|
1166
|
+
:name => AST::Name.new(:value => val[1], :line => @lexer.line),
|
1167
|
+
:file => @lexer.file,
|
1168
|
+
:line => @lexer.line,
|
1169
|
+
:code => val[4]
|
1170
|
+
}
|
1171
|
+
# It'll be an ASTArray if we didn't get a parent
|
1172
|
+
if val[2].is_a?(AST::Name)
|
1173
|
+
args[:parentclass] = val[2]
|
1174
|
+
end
|
1175
|
+
result = AST::ClassDef.new(args)
|
1176
|
+
result
|
1177
|
+
end
|
1178
|
+
.,.,
|
1179
|
+
|
1180
|
+
module_eval <<'.,.,', 'grammar.ra', 512
|
1181
|
+
def _reduce_72( val, _values, result )
|
1182
|
+
unless val[1].is_a?(AST::ASTArray)
|
1183
|
+
val[1] = AST::ASTArray.new(
|
1184
|
+
:line => val[1].line,
|
1185
|
+
:file => val[1].file,
|
1186
|
+
:children => [val[1]]
|
1187
|
+
)
|
1188
|
+
end
|
1189
|
+
args = {
|
1190
|
+
:file => @lexer.file,
|
1191
|
+
:line => @lexer.line,
|
1192
|
+
:names => val[1],
|
1193
|
+
:code => val[4]
|
1194
|
+
}
|
1195
|
+
if val[2].is_a?(AST::Name)
|
1196
|
+
args[:parentclass] = val[2]
|
1197
|
+
end
|
1198
|
+
result = AST::NodeDef.new(args)
|
1199
|
+
result
|
1200
|
+
end
|
1201
|
+
.,.,
|
1202
|
+
|
1203
|
+
# reduce 73 omitted
|
1204
|
+
|
1205
|
+
module_eval <<'.,.,', 'grammar.ra', 526
|
1206
|
+
def _reduce_74( val, _values, result )
|
1207
|
+
if val[0].is_a?(AST::ASTArray)
|
1208
|
+
result = val[0]
|
1209
|
+
result.push val[1]
|
1210
|
+
else
|
1211
|
+
result = AST::ASTArray.new(
|
1212
|
+
:line => @lexer.line,
|
1213
|
+
:file => @lexer.file,
|
1214
|
+
:children => [val[0], val[1]]
|
1215
|
+
)
|
1216
|
+
end
|
1217
|
+
result
|
1218
|
+
end
|
1219
|
+
.,.,
|
1220
|
+
|
1221
|
+
module_eval <<'.,.,', 'grammar.ra', 534
|
1222
|
+
def _reduce_75( val, _values, result )
|
1223
|
+
result = AST::ASTArray.new(
|
1224
|
+
:line => @lexer.line,
|
1225
|
+
:file => @lexer.file,
|
1226
|
+
:children => []
|
1227
|
+
)
|
1228
|
+
result
|
1229
|
+
end
|
1230
|
+
.,.,
|
1231
|
+
|
1232
|
+
# reduce 76 omitted
|
1233
|
+
|
1234
|
+
module_eval <<'.,.,', 'grammar.ra', 539
|
1235
|
+
def _reduce_77( val, _values, result )
|
1236
|
+
result = val[1]
|
1237
|
+
result
|
1238
|
+
end
|
1239
|
+
.,.,
|
1240
|
+
|
1241
|
+
module_eval <<'.,.,', 'grammar.ra', 550
|
1242
|
+
def _reduce_78( val, _values, result )
|
1243
|
+
if val[1].is_a?(AST::ASTArray)
|
1244
|
+
result = val[1]
|
1245
|
+
else
|
1246
|
+
result = AST::ASTArray.new(
|
1247
|
+
:line => @lexer.line,
|
1248
|
+
:file => @lexer.file,
|
1249
|
+
:children => [val[0]]
|
1250
|
+
)
|
1251
|
+
end
|
1252
|
+
result
|
1253
|
+
end
|
1254
|
+
.,.,
|
1255
|
+
|
1256
|
+
# reduce 79 omitted
|
1257
|
+
|
1258
|
+
module_eval <<'.,.,', 'grammar.ra', 564
|
1259
|
+
def _reduce_80( val, _values, result )
|
1260
|
+
if val[0].instance_of?(AST::ASTArray)
|
1261
|
+
val[0].push(val[2])
|
1262
|
+
result = val[0]
|
1263
|
+
else
|
1264
|
+
result = AST::ASTArray.new(
|
1265
|
+
:line => @lexer.line,
|
1266
|
+
:file => @lexer.file,
|
1267
|
+
:children => [val[0],val[2]]
|
1268
|
+
)
|
1269
|
+
end
|
1270
|
+
result
|
1271
|
+
end
|
1272
|
+
.,.,
|
1273
|
+
|
1274
|
+
module_eval <<'.,.,', 'grammar.ra', 572
|
1275
|
+
def _reduce_81( val, _values, result )
|
1276
|
+
result = AST::CompArgument.new(
|
1277
|
+
:line => @lexer.line,
|
1278
|
+
:file => @lexer.file,
|
1279
|
+
:children => [val[0],val[2]]
|
1280
|
+
)
|
1281
|
+
result
|
1282
|
+
end
|
1283
|
+
.,.,
|
1284
|
+
|
1285
|
+
module_eval <<'.,.,', 'grammar.ra', 579
|
1286
|
+
def _reduce_82( val, _values, result )
|
1287
|
+
result = AST::CompArgument.new(
|
1288
|
+
:line => @lexer.line,
|
1289
|
+
:file => @lexer.file,
|
1290
|
+
:children => [val[0]]
|
1291
|
+
)
|
1292
|
+
result
|
1293
|
+
end
|
1294
|
+
.,.,
|
1295
|
+
|
1296
|
+
# reduce 83 omitted
|
1297
|
+
|
1298
|
+
module_eval <<'.,.,', 'grammar.ra', 588
|
1299
|
+
def _reduce_84( val, _values, result )
|
1300
|
+
result = AST::Name.new(
|
1301
|
+
:value => val[1],
|
1302
|
+
:file => @lexer.file,
|
1303
|
+
:line => @lexer.line
|
1304
|
+
)
|
1305
|
+
result
|
1306
|
+
end
|
1307
|
+
.,.,
|
1308
|
+
|
1309
|
+
module_eval <<'.,.,', 'grammar.ra', 597
|
1310
|
+
def _reduce_85( val, _values, result )
|
1311
|
+
name = val[0].sub(/^\$/,'')
|
1312
|
+
result = AST::Variable.new(
|
1313
|
+
:line => @lexer.line,
|
1314
|
+
:file => @lexer.file,
|
1315
|
+
:value => name
|
1316
|
+
)
|
1317
|
+
result
|
1318
|
+
end
|
1319
|
+
.,.,
|
1320
|
+
|
1321
|
+
module_eval <<'.,.,', 'grammar.ra', 606
|
1322
|
+
def _reduce_86( val, _values, result )
|
1323
|
+
if val[1].is_a?(AST::ASTArray)
|
1324
|
+
result = val[1]
|
1325
|
+
else
|
1326
|
+
result = AST::ASTArray.new
|
1327
|
+
result.push val[1]
|
1328
|
+
end
|
1329
|
+
result
|
1330
|
+
end
|
1331
|
+
.,.,
|
1332
|
+
|
1333
|
+
# reduce 87 omitted
|
1334
|
+
|
1335
|
+
# reduce 88 omitted
|
1336
|
+
|
1337
|
+
# reduce 89 omitted
|
1338
|
+
|
1339
|
+
module_eval <<'.,.,', 'grammar.ra', 611
|
1340
|
+
def _reduce_90( val, _values, result )
|
1341
|
+
result = nil
|
1342
|
+
result
|
1343
|
+
end
|
1344
|
+
.,.,
|
1345
|
+
|
1346
|
+
def _reduce_none( val, _values, result )
|
1347
|
+
result
|
1348
|
+
end
|
1349
|
+
|
1350
|
+
end # class Parser
|
1351
|
+
|
1352
|
+
end # module Parser
|
1353
|
+
|
1354
|
+
end # module Puppet
|