diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra index 7a316d4d7..3a386d89a 100644 --- a/lib/puppet/parser/grammar.ra +++ b/lib/puppet/parser/grammar.ra @@ -1,875 +1,876 @@ # vim: syntax=ruby # the parser class Puppet::Parser::Parser token STRING DQPRE DQMID DQPOST token LBRACK RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE token FALSE EQUALS APPENDS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSNAME CLASSREF token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS token MATCH NOMATCH REGEX IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB token IN prechigh right NOT nonassoc UMINUS left IN MATCH NOMATCH left TIMES DIV left MINUS PLUS left LSHIFT RSHIFT left NOTEQUAL ISEQUAL left GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL left AND left OR preclow rule program: statements { if val[0] # Make sure we always return an array. if val[0].is_a?(AST::ASTArray) if val[0].children.empty? result = nil else result = val[0] end else result = aryfy(val[0]) end else result = nil end } | nil statements: statement | statements statement { if val[0] and val[1] if val[0].instance_of?(AST::ASTArray) val[0].push(val[1]) result = val[0] else result = ast AST::ASTArray, :children => [val[0],val[1]] end elsif obj = (val[0] || val[1]) result = obj else result = nil end } # The main list of valid statements statement: resource | virtualresource | collection | assignment | casestatement | ifstatement_begin | import | fstatement | definition | hostclass | nodedef | resourceoverride | append | relationship relationship: relationship_side edge relationship_side { result = AST::Relationship.new(val[0], val[2], val[1][:value], ast_context) } | relationship edge relationship_side { result = AST::Relationship.new(val[0], val[2], val[1][:value], ast_context) } relationship_side: resource | resourceref | collection edge: IN_EDGE | OUT_EDGE | IN_EDGE_SUB | OUT_EDGE_SUB fstatement: NAME LPAREN funcvalues RPAREN { args = aryfy(val[2]) result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => args, :ftype => :statement } | NAME LPAREN funcvalues COMMA RPAREN { args = aryfy(val[2]) result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => args, :ftype => :statement } | NAME LPAREN RPAREN { result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => AST::ASTArray.new({}), :ftype => :statement } | NAME funcvalues { args = aryfy(val[1]) result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => args, :ftype => :statement } funcvalues: namestring | resourceref | funcvalues COMMA namestring { result = aryfy(val[0], val[2]) result.line = @lexer.line result.file = @lexer.file } | funcvalues COMMA resourceref { unless val[0].is_a?(AST::ASTArray) val[0] = aryfy(val[0]) end val[0].push(val[2]) result = val[0] } # This is *almost* an rvalue, but I couldn't get a full # rvalue to work without scads of shift/reduce conflicts. namestring: name | variable | type | boolean | funcrvalue | selector | quotedtext | hasharrayaccesses | CLASSNAME { result = ast AST::Name, :value => val[0][:value] } resource: classname LBRACE resourceinstances endsemi RBRACE { @lexer.commentpop array = val[2] array = [array] if array.instance_of?(AST::ResourceInstance) result = ast AST::ASTArray # this iterates across each specified resourceinstance array.each { |instance| raise Puppet::Dev, "Got something that isn't an instance" unless instance.instance_of?(AST::ResourceInstance) # now, i need to somehow differentiate between those things with # arrays in their names, and normal things result.push ast( AST::Resource, :type => val[0], :title => instance[0], :parameters => instance[1]) } } | classname LBRACE params endcomma RBRACE { # This is a deprecated syntax. error "All resource specifications require names" } | classref LBRACE params endcomma RBRACE { # a defaults setting for a type @lexer.commentpop result = ast(AST::ResourceDefaults, :type => val[0], :parameters => val[2]) } # Override a value set elsewhere in the configuration. resourceoverride: resourceref LBRACE anyparams endcomma RBRACE { @lexer.commentpop result = ast AST::ResourceOverride, :object => val[0], :parameters => val[2] } # Exported and virtual resources; these don't get sent to the client # unless they get collected elsewhere in the db. virtualresource: at resource { type = val[0] if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly] Puppet.warning addcontext("You cannot collect without storeconfigs being set") end error "Defaults are not virtualizable" if val[1].is_a? AST::ResourceDefaults method = type.to_s + "=" # Just mark our resources as exported and pass them through. if val[1].instance_of?(AST::ASTArray) val[1].each do |obj| obj.send(method, true) end else val[1].send(method, true) end result = val[1] } at: AT { result = :virtual } | AT AT { result = :exported } # A collection statement. Currently supports no arguments at all, but eventually # will, I assume. collection: classref collectrhand LBRACE anyparams endcomma RBRACE { @lexer.commentpop Puppet.warning addcontext("Collection names must now be capitalized") if val[0] =~ /^[a-z]/ type = val[0].downcase args = {:type => type} if val[1].is_a?(AST::CollExpr) args[:query] = val[1] args[:query].type = type args[:form] = args[:query].form else args[:form] = val[1] end if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly] Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored") end args[:override] = val[3] result = ast AST::Collection, args } | classref collectrhand { if val[0] =~ /^[a-z]/ Puppet.warning addcontext("Collection names must now be capitalized") end type = val[0].downcase args = {:type => type } if val[1].is_a?(AST::CollExpr) args[:query] = val[1] args[:query].type = type args[:form] = args[:query].form else args[:form] = val[1] end if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly] Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored") end result = ast AST::Collection, args } collectrhand: LCOLLECT collstatements RCOLLECT { if val[1] result = val[1] result.form = :virtual else result = :virtual end } | LLCOLLECT collstatements RRCOLLECT { if val[1] result = val[1] result.form = :exported else result = :exported end } # A mini-language for handling collection comparisons. This is organized # to avoid the need for precedence indications. collstatements: nil | collstatement | collstatements colljoin collstatement { result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] } collstatement: collexpr | LPAREN collstatements RPAREN { result = val[1] result.parens = true } colljoin: AND { result=val[0][:value] } | OR { result=val[0][:value] } collexpr: colllval ISEQUAL simplervalue { result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2] #result = ast AST::CollExpr #result.push *val } | colllval NOTEQUAL simplervalue { result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2] #result = ast AST::CollExpr #result.push *val } colllval: variable | name resourceinst: resourcename COLON params endcomma { result = ast AST::ResourceInstance, :children => [val[0],val[2]] } resourceinstances: resourceinst | resourceinstances SEMIC resourceinst { if val[0].instance_of?(AST::ResourceInstance) result = ast AST::ASTArray, :children => [val[0],val[2]] else val[0].push val[2] result = val[0] end } endsemi: # nothing | SEMIC undef: UNDEF { result = ast AST::Undef, :value => :undef } name: NAME { result = ast AST::Name, :value => val[0][:value], :line => val[0][:line] } type: CLASSREF { result = ast AST::Type, :value => val[0][:value], :line => val[0][:line] } resourcename: quotedtext | name | type | selector | variable | array | hasharrayaccesses assignment: VARIABLE EQUALS expression { raise Puppet::ParseError, "Cannot assign to variables in other namespaces" if val[0][:value] =~ /::/ # this is distinct from referencing a variable variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line] result = ast AST::VarDef, :name => variable, :value => val[2], :line => val[0][:line] } | hasharrayaccess EQUALS expression { result = ast AST::VarDef, :name => val[0], :value => val[2] } append: VARIABLE APPENDS expression { variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line] result = ast AST::VarDef, :name => variable, :value => val[2], :append => true, :line => val[0][:line] } params: # nothing { result = ast AST::ASTArray } | param { result = val[0] } | params COMMA param { if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] else result = ast AST::ASTArray, :children => [val[0],val[2]] end } param: NAME FARROW rvalue { result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2] } addparam: NAME PARROW rvalue { result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2], :add => true } anyparam: param | addparam anyparams: # nothing { result = ast AST::ASTArray } | anyparam { result = val[0] } | anyparams COMMA anyparam { if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] else result = ast AST::ASTArray, :children => [val[0],val[2]] end } rvalues: rvalue | rvalues comma rvalue { if val[0].instance_of?(AST::ASTArray) result = val[0].push(val[2]) else result = ast AST::ASTArray, :children => [val[0],val[2]] end } simplervalue: quotedtext | name | type | boolean | selector | variable rvalue: quotedtext | name | type | boolean | selector | variable | array | hash | hasharrayaccesses | resourceref | funcrvalue | undef # We currently require arguments in these functions. funcrvalue: NAME LPAREN funcvalues RPAREN { args = aryfy(val[2]) result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => args, :ftype => :rvalue } | NAME LPAREN RPAREN { result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => AST::ASTArray.new({}), :ftype => :rvalue } quotedtext: STRING { result = ast AST::String, :value => val[0][:value], :line => val[0][:line] } | DQPRE dqrval { result = ast AST::Concat, :value => [ast(AST::String,val[0])]+val[1], :line => val[0][:line] } dqrval: expression dqtail { result = [val[0]] + val[1] } dqtail: DQPOST { result = [ast(AST::String,val[0])] } | DQMID dqrval { result = [ast(AST::String,val[0])] + val[1] } boolean: BOOLEAN { result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line] } resourceref: NAME LBRACK rvalues RBRACK { Puppet.warning addcontext("Deprecation notice: Resource references should now be capitalized") result = ast AST::ResourceReference, :type => val[0][:value], :line => val[0][:line], :title => val[2] } | classref LBRACK rvalues RBRACK { result = ast AST::ResourceReference, :type => val[0], :title => val[2] } ifstatement_begin: IF ifstatement { result = val[1] } ifstatement: expression LBRACE statements RBRACE else { @lexer.commentpop args = { :test => val[0], :statements => val[2] } args[:else] = val[4] if val[4] result = ast AST::IfStatement, args } | expression LBRACE RBRACE else { @lexer.commentpop args = { :test => val[0], :statements => ast(AST::Nop) } args[:else] = val[3] if val[3] result = ast AST::IfStatement, args } else: # nothing | ELSIF ifstatement { result = ast AST::Else, :statements => val[1] } | ELSE LBRACE statements RBRACE { @lexer.commentpop result = ast AST::Else, :statements => val[2] } | ELSE LBRACE RBRACE { @lexer.commentpop result = ast AST::Else, :statements => ast(AST::Nop) } # Unlike yacc/bison, it seems racc # gives tons of shift/reduce warnings # with the following syntax: # # expression: ... # | expression arithop expressio { ... } # # arithop: PLUS | MINUS | DIVIDE | TIMES ... # # So I had to develop the expression by adding one rule # per operator :-( expression: rvalue | expression IN rvalue { result = ast AST::InOperator, :lval => val[0], :rval => val[2] } | expression MATCH regex { result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression NOMATCH regex { result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression PLUS expression { result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression MINUS expression { result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression DIV expression { result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression TIMES expression { result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression LSHIFT expression { result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression RSHIFT expression { result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | MINUS expression =UMINUS { result = ast AST::Minus, :value => val[1] } | expression NOTEQUAL expression { result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression ISEQUAL expression { result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression GREATERTHAN expression { result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression GREATEREQUAL expression { result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression LESSTHAN expression { result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression LESSEQUAL expression { result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | NOT expression { result = ast AST::Not, :value => val[1] } | expression AND expression { result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | expression OR expression { result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] } | LPAREN expression RPAREN { result = val[1] } casestatement: CASE rvalue LBRACE caseopts RBRACE { @lexer.commentpop options = val[3] options = ast AST::ASTArray, :children => [val[3]] unless options.instance_of?(AST::ASTArray) result = ast AST::CaseStatement, :test => val[1], :options => options } caseopts: caseopt | caseopts caseopt { if val[0].instance_of?(AST::ASTArray) val[0].push val[1] result = val[0] else result = ast AST::ASTArray, :children => [val[0], val[1]] end } caseopt: casevalues COLON LBRACE statements RBRACE { @lexer.commentpop result = ast AST::CaseOpt, :value => val[0], :statements => val[3] } | casevalues COLON LBRACE RBRACE { @lexer.commentpop result = ast( AST::CaseOpt, :value => val[0], :statements => ast(AST::ASTArray) ) } casevalues: selectlhand | casevalues COMMA selectlhand { if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] else result = ast AST::ASTArray, :children => [val[0],val[2]] end } selector: selectlhand QMARK svalues { result = ast AST::Selector, :param => val[0], :values => val[2] } svalues: selectval | LBRACE sintvalues endcomma RBRACE { @lexer.commentpop result = val[1] } sintvalues: selectval | sintvalues comma selectval { if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] else result = ast AST::ASTArray, :children => [val[0],val[2]] end } selectval: selectlhand FARROW rvalue { result = ast AST::ResourceParam, :param => val[0], :value => val[2] } selectlhand: name | type | quotedtext | variable | funcrvalue | boolean | undef + | hasharrayaccess | DEFAULT { result = ast AST::Default, :value => val[0][:value], :line => val[0][:line] } | regex # These are only used for importing, and we don't interpolate there. string: STRING { result = [val[0][:value]] } strings: string | strings COMMA string { result = val[0] += val[2] } import: IMPORT strings { val[1].each do |file| import(file) end result = AST::ASTArray.new(:children => []) } # Disable definition inheritance for now. 8/27/06, luke #definition: DEFINE NAME argumentlist parent LBRACE statements RBRACE { definition: DEFINE classname argumentlist LBRACE statements RBRACE { @lexer.commentpop newdefine classname(val[1]), :arguments => val[2], :code => val[4], :line => val[0][:line] @lexer.indefine = false result = nil #} | DEFINE NAME argumentlist parent LBRACE RBRACE { } | DEFINE classname argumentlist LBRACE RBRACE { @lexer.commentpop newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line] @lexer.indefine = false result = nil } #hostclass: CLASS NAME argumentlist parent LBRACE statements RBRACE { hostclass: CLASS classname argumentlist classparent LBRACE statements RBRACE { @lexer.commentpop # Our class gets defined in the parent namespace, not our own. @lexer.namepop newclass classname(val[1]), :arguments => val[2], :parent => val[3], :code => val[5], :line => val[0][:line] result = nil } | CLASS classname argumentlist classparent LBRACE RBRACE { @lexer.commentpop # Our class gets defined in the parent namespace, not our own. @lexer.namepop newclass classname(val[1]), :arguments => val[2], :parent => val[3], :line => val[0][:line] result = nil } nodedef: NODE hostnames nodeparent LBRACE statements RBRACE { @lexer.commentpop newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line] result = nil } | NODE hostnames nodeparent LBRACE RBRACE { @lexer.commentpop newnode val[1], :parent => val[2], :line => val[0][:line] result = nil } classref: CLASSREF { result = val[0][:value] } classname: NAME { result = val[0][:value] } | CLASSNAME { result = val[0][:value] } | CLASS { result = "class" } # Multiple hostnames, as used for node names. These are all literal # strings, not AST objects. hostnames: nodename | hostnames COMMA nodename { result = val[0] result = [result] unless result.is_a?(Array) result << val[2] } nodename: hostname { result = ast AST::HostName, :value => val[0] } hostname: NAME { result = val[0][:value] } | STRING { result = val[0][:value] } | DEFAULT { result = val[0][:value] } | regex nil: { result = nil } nothing: { result = ast AST::ASTArray, :children => [] } argumentlist: nil | LPAREN nothing RPAREN { result = nil } | LPAREN arguments RPAREN { result = val[1] result = [result] unless result[0].is_a?(Array) } arguments: argument | arguments COMMA argument { result = val[0] result = [result] unless result[0].is_a?(Array) result << val[2] } argument: NAME EQUALS rvalue { Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0][:value], val[2]] } | NAME { Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0][:value]] } | VARIABLE EQUALS rvalue { result = [val[0][:value], val[2]] } | VARIABLE { result = [val[0][:value]] } nodeparent: nil | INHERITS hostname { result = val[1] } classparent: nil | INHERITS classnameordefault { result = val[1] } classnameordefault: classname | DEFAULT variable: VARIABLE { result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line] } array: LBRACK rvalues RBRACK { if val[1].instance_of?(AST::ASTArray) result = val[1] else result = ast AST::ASTArray, :children => [val[1]] end } | LBRACK rvalues COMMA RBRACK { if val[1].instance_of?(AST::ASTArray) result = val[1] else result = ast AST::ASTArray, :children => [val[1]] end } | LBRACK RBRACK { result = ast AST::ASTArray } comma: FARROW | COMMA endcomma: # nothing | COMMA { result = nil } regex: REGEX { result = ast AST::Regex, :value => val[0][:value] } hash: LBRACE hashpairs RBRACE { if val[1].instance_of?(AST::ASTHash) result = val[1] else result = ast AST::ASTHash, { :value => val[1] } end } | LBRACE hashpairs COMMA RBRACE { if val[1].instance_of?(AST::ASTHash) result = val[1] else result = ast AST::ASTHash, { :value => val[1] } end } | LBRACE RBRACE { result = ast AST::ASTHash } hashpairs: hashpair | hashpairs COMMA hashpair { if val[0].instance_of?(AST::ASTHash) result = val[0].merge(val[2]) else result = ast AST::ASTHash, :value => val[0] result.merge(val[2]) end } hashpair: key FARROW rvalue { result = ast AST::ASTHash, { :value => { val[0] => val[2] } } } key: NAME { result = val[0][:value] } | quotedtext { result = val[0] } hasharrayaccess: VARIABLE LBRACK rvalue RBRACK { result = ast AST::HashOrArrayAccess, :variable => val[0][:value], :key => val[2] } hasharrayaccesses: hasharrayaccess | hasharrayaccess LBRACK rvalue RBRACK { result = ast AST::HashOrArrayAccess, :variable => val[0], :key => val[2] } end ---- header ---- require 'puppet' require 'puppet/util/loadedfile' require 'puppet/parser/lexer' require 'puppet/parser/ast' module Puppet class ParseError < Puppet::Error; end class ImportError < Racc::ParseError; end class AlreadyImportedError < ImportError; end end ---- inner ---- # It got too annoying having code in a file that needs to be compiled. require 'puppet/parser/parser_support' # Make emacs happy # Local Variables: # mode: ruby # End: # $Id$ diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb index 5be9e5a3f..d68cd05e7 100644 --- a/lib/puppet/parser/parser.rb +++ b/lib/puppet/parser/parser.rb @@ -1,2602 +1,2591 @@ # # DO NOT MODIFY!!!! # This file is automatically generated by racc 1.4.5 # from racc grammer file "grammar.ra". # require 'racc/parser' require 'puppet' require 'puppet/util/loadedfile' require 'puppet/parser/lexer' require 'puppet/parser/ast' module Puppet - class ParseError < Puppet::Error; end - class ImportError < Racc::ParseError; end - class AlreadyImportedError < ImportError; end + class ParseError < Puppet::Error; end + class ImportError < Racc::ParseError; end + class AlreadyImportedError < ImportError; end end module Puppet module Parser class Parser < Racc::Parser -module_eval <<'..end grammar.ra modeval..id7145220b1b', 'grammar.ra', 876 +module_eval <<'..end grammar.ra modeval..id6535ba0b91', 'grammar.ra', 865 # It got too annoying having code in a file that needs to be compiled. require 'puppet/parser/parser_support' # Make emacs happy # Local Variables: # mode: ruby # End: # $Id$ -..end grammar.ra modeval..id7145220b1b +..end grammar.ra modeval..id6535ba0b91 ##### racc 1.4.5 generates ### racc_reduce_table = [ 0, 0, :racc_error, 1, 70, :_reduce_1, 1, 70, :_reduce_none, 1, 71, :_reduce_none, 2, 71, :_reduce_4, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 1, 73, :_reduce_none, 3, 87, :_reduce_19, 3, 87, :_reduce_20, 1, 88, :_reduce_none, 1, 88, :_reduce_none, 1, 88, :_reduce_none, 1, 89, :_reduce_none, 1, 89, :_reduce_none, 1, 89, :_reduce_none, 1, 89, :_reduce_none, 4, 81, :_reduce_28, 5, 81, :_reduce_29, 3, 81, :_reduce_30, 2, 81, :_reduce_31, 1, 91, :_reduce_none, 1, 91, :_reduce_none, 3, 91, :_reduce_34, 3, 91, :_reduce_35, 1, 92, :_reduce_none, 1, 92, :_reduce_none, 1, 92, :_reduce_none, 1, 92, :_reduce_none, 1, 92, :_reduce_none, 1, 92, :_reduce_none, 1, 92, :_reduce_none, 1, 92, :_reduce_none, 1, 92, :_reduce_44, 5, 74, :_reduce_45, 5, 74, :_reduce_46, 5, 74, :_reduce_47, 5, 85, :_reduce_48, 2, 75, :_reduce_49, 1, 108, :_reduce_50, 2, 108, :_reduce_51, 6, 76, :_reduce_52, 2, 76, :_reduce_53, 3, 109, :_reduce_54, 3, 109, :_reduce_55, 1, 110, :_reduce_none, 1, 110, :_reduce_none, 3, 110, :_reduce_58, 1, 111, :_reduce_none, 3, 111, :_reduce_60, 1, 112, :_reduce_61, 1, 112, :_reduce_62, 3, 113, :_reduce_63, 3, 113, :_reduce_64, 1, 114, :_reduce_none, 1, 114, :_reduce_none, 4, 116, :_reduce_67, 1, 102, :_reduce_none, 3, 102, :_reduce_69, 0, 103, :_reduce_none, 1, 103, :_reduce_none, 1, 118, :_reduce_72, 1, 93, :_reduce_73, 1, 95, :_reduce_74, 1, 117, :_reduce_none, 1, 117, :_reduce_none, 1, 117, :_reduce_none, 1, 117, :_reduce_none, 1, 117, :_reduce_none, 1, 117, :_reduce_none, 1, 117, :_reduce_none, 3, 77, :_reduce_82, 3, 77, :_reduce_83, 3, 86, :_reduce_84, 0, 104, :_reduce_85, 1, 104, :_reduce_86, 3, 104, :_reduce_87, 3, 122, :_reduce_88, 3, 124, :_reduce_89, 1, 125, :_reduce_none, 1, 125, :_reduce_none, 0, 107, :_reduce_92, 1, 107, :_reduce_93, 3, 107, :_reduce_94, 1, 126, :_reduce_none, 3, 126, :_reduce_96, 1, 115, :_reduce_none, 1, 115, :_reduce_none, 1, 115, :_reduce_none, 1, 115, :_reduce_none, 1, 115, :_reduce_none, 1, 115, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 1, 123, :_reduce_none, 4, 97, :_reduce_115, 3, 97, :_reduce_116, 1, 99, :_reduce_117, 2, 99, :_reduce_118, 2, 129, :_reduce_119, 1, 130, :_reduce_120, 2, 130, :_reduce_121, 1, 96, :_reduce_122, 4, 90, :_reduce_123, 4, 90, :_reduce_124, 2, 79, :_reduce_125, 5, 131, :_reduce_126, 4, 131, :_reduce_127, 0, 132, :_reduce_none, 2, 132, :_reduce_129, 4, 132, :_reduce_130, 3, 132, :_reduce_131, 1, 120, :_reduce_none, 3, 120, :_reduce_133, 3, 120, :_reduce_134, 3, 120, :_reduce_135, 3, 120, :_reduce_136, 3, 120, :_reduce_137, 3, 120, :_reduce_138, 3, 120, :_reduce_139, 3, 120, :_reduce_140, 3, 120, :_reduce_141, 2, 120, :_reduce_142, 3, 120, :_reduce_143, 3, 120, :_reduce_144, 3, 120, :_reduce_145, 3, 120, :_reduce_146, 3, 120, :_reduce_147, 3, 120, :_reduce_148, 2, 120, :_reduce_149, 3, 120, :_reduce_150, 3, 120, :_reduce_151, 3, 120, :_reduce_152, 5, 78, :_reduce_153, 1, 134, :_reduce_none, 2, 134, :_reduce_155, 5, 135, :_reduce_156, 4, 135, :_reduce_157, 1, 136, :_reduce_none, 3, 136, :_reduce_159, 3, 98, :_reduce_160, 1, 138, :_reduce_none, 4, 138, :_reduce_162, 1, 140, :_reduce_none, 3, 140, :_reduce_164, 3, 139, :_reduce_165, 1, 137, :_reduce_none, 1, 137, :_reduce_none, 1, 137, :_reduce_none, 1, 137, :_reduce_none, 1, 137, :_reduce_none, 1, 137, :_reduce_none, 1, 137, :_reduce_none, 1, 137, :_reduce_173, 1, 137, :_reduce_none, 1, 141, :_reduce_175, 1, 142, :_reduce_none, 3, 142, :_reduce_177, 2, 80, :_reduce_178, 6, 82, :_reduce_179, 5, 82, :_reduce_180, 7, 83, :_reduce_181, 6, 83, :_reduce_182, 6, 84, :_reduce_183, 5, 84, :_reduce_184, 1, 106, :_reduce_185, 1, 101, :_reduce_186, 1, 101, :_reduce_187, 1, 101, :_reduce_188, 1, 145, :_reduce_none, 3, 145, :_reduce_190, 1, 147, :_reduce_191, 1, 148, :_reduce_192, 1, 148, :_reduce_193, 1, 148, :_reduce_194, 1, 148, :_reduce_none, 0, 72, :_reduce_196, 0, 149, :_reduce_197, 1, 143, :_reduce_none, 3, 143, :_reduce_199, 3, 143, :_reduce_200, 1, 150, :_reduce_none, 3, 150, :_reduce_202, 3, 151, :_reduce_203, 1, 151, :_reduce_204, 3, 151, :_reduce_205, 1, 151, :_reduce_206, 1, 146, :_reduce_none, 2, 146, :_reduce_208, 1, 144, :_reduce_none, 2, 144, :_reduce_210, 1, 152, :_reduce_none, 1, 152, :_reduce_none, 1, 94, :_reduce_213, 3, 119, :_reduce_214, 4, 119, :_reduce_215, 2, 119, :_reduce_216, 1, 127, :_reduce_none, 1, 127, :_reduce_none, 0, 105, :_reduce_none, 1, 105, :_reduce_220, 1, 133, :_reduce_221, 3, 128, :_reduce_222, 4, 128, :_reduce_223, 2, 128, :_reduce_224, 1, 153, :_reduce_none, 3, 153, :_reduce_226, 3, 154, :_reduce_227, 1, 155, :_reduce_228, 1, 155, :_reduce_229, 4, 121, :_reduce_230, 1, 100, :_reduce_none, 4, 100, :_reduce_232 ] racc_reduce_n = 233 racc_shift_n = 384 racc_action_table = [ 256, 257, 228, 82, 54, 72, 75, 181, 251, 48, 72, 75, 194, 205, 210, 163, 156, 348, 46, 47, 344, 184, 201, 203, 206, 209, 162, 352, 54, 182, 351, 169, 54, -168, 72, 75, 241, 242, 102, 305, 106, 158, 58, 193, 230, 60, 204, 208, 193, 306, 213, 196, 197, 198, 200, 202, 97, 207, 211, 72, 75, 72, 75, 163, 199, 59, 58, 71, 245, 60, 58, 83, 86, 60, 162, 92, 244, 72, 75, 169, 78, 100, 352, 269, 89, 351, 63, 94, 64, 59, 228, 326, 71, 59, 162, 59, 83, 86, 83, 268, 92, 65, 92, 184, 76, 78, 307, 137, 163, 89, 162, 89, 72, 75, 83, 268, 241, 242, 92, 162, 59, 163, 59, 137, 169, 62, 254, 89, 207, 211, 72, 75, 162, 308, 102, 199, 106, 169, 59, 255, 213, 196, 197, 198, -166, 162, 309, 207, 211, 83, 268, 310, 97, 92, 199, 72, 75, 355, 137, 102, -170, 106, 89, 71, 218, 356, 173, 83, 86, 220, 313, 92, -171, 59, 72, 75, 78, 100, 37, 218, 89, 249, 38, 94, 220, 246, 247, 173, 71, 11, 210, 59, 83, 86, 246, 367, 92, 271, 201, 37, -167, 78, 37, 38, 270, 89, 38, 71, 246, 247, 11, 83, 86, 11, 14, 92, 59, 72, 75, 76, 78, 102, 278, 106, 89, 277, 213, 196, 197, 198, 200, 202, 275, 207, 211, 59, 246, 274, 152, 97, 199, 37, 318, 72, 75, 127, 319, 102, -169, 106, 71, 63, 11, 14, 83, 86, -167, 37, 92, 207, 211, 127, -169, 78, 100, 97, 199, 89, 11, 14, 94, -166, 117, 72, 75, -185, 71, 82, 59, 336, 83, 86, 197, 198, 92, 231, 338, 207, 211, 78, 100, 181, 48, 89, 199, 74, 94, 240, -168, 72, 75, 241, 242, 102, 59, 106, 71, 184, 176, 37, 83, 86, 59, 38, 92, 345, 322, 175, 76, 78, 11, 97, -172, 89, -171, 72, 75, -170, 59, 102, 214, 106, 71, 64, 59, 215, 83, 86, 173, 217, 92, -23, -23, -23, -23, 78, 100, 97, 155, 89, 72, 75, 94, 122, 102, 152, 106, 82, 71, 223, 59, 122, 83, 86, 72, 75, 92, -168, 102, 225, 106, 78, 100, -166, 276, 89, 226, 117, 94, 44, 45, 41, 42, 71, -169, -167, 59, 83, 86, 72, 75, 92, 226, 102, 229, 106, 78, 71, 52, -168, 89, 83, 86, 72, 75, 92, -166, 102, -169, 106, 78, 59, 197, 198, 89, -167, -171, 207, 211, 365, 231, 152, 71, 234, 199, 59, 83, 86, 50, 210, 92, -21, -21, -21, -21, 78, 71, 201, 372, 89, 83, 86, 49, 374, 92, 72, 75, 228, -220, 78, 59, 226, 354, 89, 377, 72, 75, 40, 39, 102, 237, 106, 341, nil, 59, 213, 196, 197, 198, 200, 202, nil, 207, 211, nil, nil, nil, 97, 162, 199, nil, nil, 83, 268, nil, nil, 92, nil, 71, nil, nil, 137, 83, 86, nil, 89, 92, 44, 45, 41, 42, 78, 100, 72, 75, 89, 59, 102, 94, 106, 213, 196, 197, 198, 200, 202, 59, 207, 211, nil, 213, 196, 197, 198, 199, 97, nil, 207, 211, 72, 75, nil, nil, 102, 199, 106, 71, nil, nil, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, 97, nil, 89, nil, nil, 94, nil, nil, 72, 75, nil, 71, 102, 59, 106, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, nil, nil, 89, nil, 97, 94, nil, nil, 72, 75, nil, nil, 102, 59, 106, 71, nil, nil, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, 97, nil, 89, 72, 75, 94, nil, 102, nil, 106, nil, 71, nil, 59, nil, 83, 86, 72, 75, 92, nil, 102, nil, nil, 78, 100, nil, nil, 89, nil, nil, 94, nil, nil, nil, nil, 71, nil, nil, 59, 83, 86, 72, 75, 92, nil, 102, nil, 106, 78, 71, nil, nil, 89, 83, 143, nil, nil, 92, nil, nil, nil, nil, 137, 59, nil, nil, 89, 72, 75, nil, nil, 102, nil, 106, 71, nil, nil, 59, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, nil, 97, nil, 89, nil, 72, 75, nil, nil, 102, nil, 106, 71, nil, 59, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, 97, nil, 89, nil, nil, 94, nil, nil, 72, 75, nil, 71, 102, 59, 106, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, nil, nil, 89, nil, 97, 94, nil, nil, 72, 75, nil, nil, 102, 59, 106, 71, nil, nil, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, 97, nil, 89, 72, 75, 94, nil, 102, nil, 106, nil, 71, nil, 59, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, nil, nil, 89, 72, 75, 94, nil, 102, nil, 106, 71, nil, nil, 59, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, nil, 97, nil, 89, nil, 72, 75, nil, nil, 102, nil, 106, 71, nil, 59, nil, 83, 86, nil, nil, 92, nil, nil, 72, 75, 78, 100, 97, nil, 89, 72, 75, 94, nil, 102, nil, 106, nil, 71, nil, 59, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, nil, nil, 89, 162, nil, 94, nil, 83, 268, nil, 71, 92, nil, 59, 83, 86, 137, nil, 92, nil, 89, nil, nil, 78, 72, 75, nil, 89, 102, nil, 106, 59, nil, nil, nil, nil, nil, nil, 59, nil, nil, nil, nil, 72, 75, nil, 97, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, nil, 83, 86, nil, nil, 92, 177, nil, 72, 75, 78, 100, nil, nil, 89, nil, 71, 94, nil, nil, 83, 86, nil, nil, 92, 59, 72, 75, 76, 78, 102, 339, 106, 89, nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, 59, 83, 86, nil, 97, 92, nil, 72, 75, 76, 78, 102, nil, 106, 89, 71, nil, 72, 75, 83, 86, nil, nil, 92, nil, 59, nil, nil, 78, 100, nil, nil, 89, 72, 75, 94, nil, nil, nil, nil, 71, nil, nil, 59, 83, 86, nil, nil, 92, nil, 162, nil, nil, 78, 83, 268, nil, 89, 92, nil, 72, 75, nil, 137, 102, nil, 162, 89, 59, nil, 83, 268, nil, nil, 92, nil, 72, 75, 59, 137, 102, nil, 106, 89, nil, nil, 72, 75, nil, nil, 102, nil, 106, 71, 59, nil, nil, 83, 268, nil, nil, 92, nil, nil, nil, nil, 137, nil, 97, 71, 89, nil, nil, 83, 86, nil, nil, 92, nil, 71, nil, 59, 78, 83, 86, nil, 89, 92, nil, nil, nil, nil, 78, 100, 72, 75, 89, 59, 102, 94, 106, 213, 196, 197, 198, 200, 202, 59, 207, 211, nil, nil, nil, 72, 75, 199, 97, 102, 189, 106, 72, 75, nil, nil, 102, nil, 106, 71, nil, nil, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, 72, 75, 89, nil, 71, 94, nil, nil, 83, 86, nil, 71, 92, 59, nil, 83, 86, 78, nil, 92, nil, 89, nil, nil, 78, 72, 75, nil, 89, 102, nil, 106, 59, 162, nil, nil, nil, 83, 268, 59, nil, 92, nil, 72, 75, nil, 137, 102, nil, 106, 89, nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, 59, 83, 86, nil, 97, 92, nil, nil, nil, nil, 78, nil, 72, 75, 89, 71, 102, nil, 106, 83, 86, nil, nil, 92, nil, 59, nil, nil, 78, 100, nil, nil, 89, nil, 97, 94, nil, nil, 72, 75, nil, nil, 102, 59, 106, 71, nil, nil, nil, 83, 86, nil, nil, 92, nil, nil, nil, nil, 78, 100, 97, nil, 89, nil, nil, 94, nil, nil, nil, nil, nil, 71, nil, 59, nil, 83, 86, 212, nil, 92, nil, nil, nil, nil, 78, 100, 205, 210, 89, nil, nil, 94, nil, nil, nil, 201, 203, 206, 209, 59, nil, 205, 210, nil, nil, nil, nil, nil, nil, nil, 201, 203, 206, 209, nil, nil, nil, nil, nil, 204, 208, nil, nil, 213, 196, 197, 198, 200, 202, nil, 207, 211, nil, nil, 204, 208, nil, 199, 213, 196, 197, 198, 200, 202, nil, 207, 211, 205, 210, nil, nil, nil, 199, nil, nil, nil, 201, 203, 206, 209, nil, nil, 205, 210, nil, nil, nil, nil, nil, nil, nil, 201, 203, 206, 209, nil, nil, nil, nil, nil, 204, 208, nil, nil, 213, 196, 197, 198, 200, 202, nil, 207, 211, nil, nil, 204, 208, nil, 199, 213, 196, 197, 198, 200, 202, nil, 207, 211, 205, 210, nil, nil, nil, 199, nil, nil, nil, 201, 203, 206, 209, nil, nil, 205, 210, nil, nil, nil, nil, nil, nil, 273, 201, 203, 206, 209, nil, nil, nil, nil, nil, nil, 208, nil, nil, 213, 196, 197, 198, 200, 202, nil, 207, 211, nil, nil, 204, 208, nil, 199, 213, 196, 197, 198, 200, 202, nil, 207, 211, 205, 210, nil, nil, nil, 199, nil, nil, nil, 201, 203, 206, 209, nil, nil, 26, 210, 33, 1, nil, 7, 12, nil, 17, 201, 23, nil, 29, nil, 3, nil, nil, 11, 14, nil, 210, nil, 213, 196, 197, 198, 200, 202, 201, 207, 211, nil, nil, nil, nil, nil, 199, 213, 196, 197, 198, 200, 202, nil, 207, 211, nil, nil, 324, nil, nil, 199, nil, nil, nil, nil, 213, 196, 197, 198, 200, 202, nil, 207, 211, nil, nil, 379, nil, 26, 199, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, 26, 382, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, nil, 296, nil, 26, nil, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, 26, 364, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, nil, 381, nil, 26, nil, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, 26, 383, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, nil, 357, nil, 26, nil, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, 26, 363, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, nil, 375, nil, 26, nil, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, 26, 304, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, nil, 349, nil, 26, nil, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, 26, nil, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14, 26, nil, 33, 1, nil, 7, 12, nil, 17, nil, 23, nil, 29, nil, 3, nil, nil, 11, 14 ] racc_action_check = [ 180, 180, 152, 86, 156, 106, 106, 272, 174, 7, 277, 277, 106, 180, 180, 65, 55, 277, 7, 7, 272, 86, 180, 180, 180, 180, 65, 296, 17, 80, 296, 65, 158, 95, 202, 202, 174, 174, 202, 218, 202, 55, 156, 106, 152, 156, 180, 180, 277, 219, 180, 180, 180, 180, 180, 180, 202, 180, 180, 181, 181, 368, 368, 239, 180, 156, 17, 202, 165, 17, 158, 202, 202, 158, 239, 202, 165, 182, 182, 239, 202, 202, 349, 182, 202, 349, 22, 202, 22, 17, 143, 243, 181, 158, 368, 202, 181, 181, 368, 368, 181, 22, 368, 143, 181, 181, 220, 368, 163, 181, 182, 368, 355, 355, 182, 182, 243, 243, 182, 163, 181, 62, 368, 182, 163, 22, 178, 182, 281, 281, 351, 351, 62, 221, 351, 281, 351, 62, 182, 178, 285, 285, 285, 285, 101, 355, 221, 285, 285, 355, 355, 224, 351, 355, 285, 341, 341, 300, 355, 341, 91, 341, 355, 351, 308, 300, 226, 351, 351, 308, 227, 351, 90, 355, 184, 184, 351, 351, 12, 122, 351, 171, 12, 351, 122, 171, 171, 229, 341, 12, 286, 351, 341, 341, 343, 343, 341, 184, 286, 1, 87, 341, 30, 1, 183, 341, 30, 184, 183, 183, 1, 184, 184, 30, 30, 184, 341, 196, 196, 184, 184, 196, 195, 196, 184, 195, 286, 286, 286, 286, 286, 286, 188, 286, 286, 184, 188, 188, 231, 196, 286, 120, 232, 197, 197, 120, 233, 197, 103, 197, 196, 85, 120, 120, 196, 196, 105, 43, 196, 280, 280, 43, 84, 196, 196, 197, 280, 196, 43, 43, 196, 81, 215, 23, 23, 78, 197, 23, 196, 250, 197, 197, 279, 279, 197, 252, 253, 279, 279, 197, 197, 77, 71, 197, 279, 23, 197, 160, 68, 26, 26, 160, 160, 26, 197, 26, 23, 268, 67, 234, 23, 23, 211, 234, 23, 274, 234, 66, 23, 23, 234, 26, 107, 23, 108, 198, 198, 109, 207, 198, 114, 198, 26, 115, 23, 119, 26, 26, 64, 121, 26, 35, 35, 35, 35, 26, 26, 198, 52, 26, 29, 29, 26, 51, 29, 50, 29, 127, 198, 132, 26, 36, 198, 198, 307, 307, 198, 133, 307, 136, 307, 198, 198, 138, 192, 198, 139, 33, 198, 34, 34, 34, 34, 29, 140, 142, 198, 29, 29, 305, 305, 29, 315, 305, 144, 305, 29, 307, 16, 327, 29, 307, 307, 199, 199, 307, 328, 199, 330, 199, 307, 29, 297, 297, 307, 331, 332, 297, 297, 337, 153, 175, 305, 154, 297, 307, 305, 305, 9, 288, 305, 28, 28, 28, 28, 305, 199, 288, 352, 305, 199, 199, 8, 356, 199, 298, 298, 173, 367, 199, 305, 172, 298, 199, 369, 200, 200, 3, 2, 200, 157, 200, 263, nil, 199, 288, 288, 288, 288, 288, 288, nil, 288, 288, nil, nil, nil, 200, 298, 288, nil, nil, 298, 298, nil, nil, 298, nil, 200, nil, nil, 298, 200, 200, nil, 298, 200, 4, 4, 4, 4, 200, 200, 39, 39, 200, 298, 39, 200, 39, 293, 293, 293, 293, 293, 293, 200, 293, 293, nil, 283, 283, 283, 283, 293, 39, nil, 283, 283, 201, 201, nil, nil, 201, 283, 201, 39, nil, nil, nil, 39, 39, nil, nil, 39, nil, nil, nil, nil, 39, 39, 201, nil, 39, nil, nil, 39, nil, nil, 46, 46, nil, 201, 46, 39, 46, 201, 201, nil, nil, 201, nil, nil, nil, nil, 201, 201, nil, nil, 201, nil, 46, 201, nil, nil, 47, 47, nil, nil, 47, 201, 47, 46, nil, nil, nil, 46, 46, nil, nil, 46, nil, nil, nil, nil, 46, 46, 47, nil, 46, 48, 48, 46, nil, 48, nil, 48, nil, 47, nil, 46, nil, 47, 47, 49, 49, 47, nil, 49, nil, nil, 47, 47, nil, nil, 47, nil, nil, 47, nil, nil, nil, nil, 48, nil, nil, 47, 48, 48, 176, 176, 48, nil, 176, nil, 176, 48, 49, nil, nil, 48, 49, 49, nil, nil, 49, nil, nil, nil, nil, 49, 48, nil, nil, 49, 203, 203, nil, nil, 203, nil, 203, 176, nil, nil, 49, 176, 176, nil, nil, 176, nil, nil, nil, nil, 176, nil, 203, nil, 176, nil, 204, 204, nil, nil, 204, nil, 204, 203, nil, 176, nil, 203, 203, nil, nil, 203, nil, nil, nil, nil, 203, 203, 204, nil, 203, nil, nil, 203, nil, nil, 205, 205, nil, 204, 205, 203, 205, 204, 204, nil, nil, 204, nil, nil, nil, nil, 204, 204, nil, nil, 204, nil, 205, 204, nil, nil, 100, 100, nil, nil, 100, 204, 100, 205, nil, nil, nil, 205, 205, nil, nil, 205, nil, nil, nil, nil, 205, 205, 100, nil, 205, 63, 63, 205, nil, 63, nil, 63, nil, 100, nil, 205, nil, 100, 100, nil, nil, 100, nil, nil, nil, nil, 100, 100, nil, nil, 100, 208, 208, 100, nil, 208, nil, 208, 63, nil, nil, 100, 63, 63, nil, nil, 63, nil, nil, nil, nil, 63, nil, 208, nil, 63, nil, 209, 209, nil, nil, 209, nil, 209, 208, nil, 63, nil, 208, 208, nil, nil, 208, nil, nil, 269, 269, 208, 208, 209, nil, 208, 276, 276, 208, nil, 276, nil, 276, nil, 209, nil, 208, nil, 209, 209, nil, nil, 209, nil, nil, nil, nil, 209, 209, nil, nil, 209, 269, nil, 209, nil, 269, 269, nil, 276, 269, nil, 209, 276, 276, 269, nil, 276, nil, 269, nil, nil, 276, 256, 256, nil, 276, 256, nil, 256, 269, nil, nil, nil, nil, nil, nil, 276, nil, nil, nil, nil, 74, 74, nil, 256, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 256, nil, nil, nil, 256, 256, nil, nil, 256, 74, nil, 254, 254, 256, 256, nil, nil, 256, nil, 74, 256, nil, nil, 74, 74, nil, nil, 74, 256, 75, 75, 74, 74, 75, 254, 75, 74, nil, nil, nil, nil, nil, nil, nil, 254, nil, nil, 74, 254, 254, nil, 75, 254, nil, 248, 248, 254, 254, 248, nil, 248, 254, 75, nil, 245, 245, 75, 75, nil, nil, 75, nil, 254, nil, nil, 75, 75, nil, nil, 75, 244, 244, 75, nil, nil, nil, nil, 248, nil, nil, 75, 248, 248, nil, nil, 248, nil, 245, nil, nil, 248, 245, 245, nil, 248, 245, nil, 225, 225, nil, 245, 225, nil, 244, 245, 248, nil, 244, 244, nil, nil, 244, nil, 82, 82, 245, 244, 82, nil, 82, 244, nil, nil, 210, 210, nil, nil, 210, nil, 210, 225, 244, nil, nil, 225, 225, nil, nil, 225, nil, nil, nil, nil, 225, nil, 210, 82, 225, nil, nil, 82, 82, nil, nil, 82, nil, 210, nil, 225, 82, 210, 210, nil, 82, 210, nil, nil, nil, nil, 210, 210, 213, 213, 210, 82, 213, 210, 213, 284, 284, 284, 284, 284, 284, 210, 284, 284, nil, nil, nil, 102, 102, 284, 213, 102, 102, 102, 230, 230, nil, nil, 230, nil, 230, 213, nil, nil, nil, 213, 213, nil, nil, 213, nil, nil, nil, nil, 213, 213, 214, 214, 213, nil, 102, 213, nil, nil, 102, 102, nil, 230, 102, 213, nil, 230, 230, 102, nil, 230, nil, 102, nil, nil, 230, 228, 228, nil, 230, 228, nil, 228, 102, 214, nil, nil, nil, 214, 214, 230, nil, 214, nil, 94, 94, nil, 214, 94, nil, 94, 214, nil, nil, nil, nil, nil, nil, nil, 228, nil, nil, 214, 228, 228, nil, 94, 228, nil, nil, nil, nil, 228, nil, 97, 97, 228, 94, 97, nil, 97, 94, 94, nil, nil, 94, nil, 228, nil, nil, 94, 94, nil, nil, 94, nil, 97, 94, nil, nil, 206, 206, nil, nil, 206, 94, 206, 97, nil, nil, nil, 97, 97, nil, nil, 97, nil, nil, nil, nil, 97, 97, 206, nil, 97, nil, nil, 97, nil, nil, nil, nil, nil, 206, nil, 97, nil, 206, 206, 111, nil, 206, nil, nil, nil, nil, 206, 206, 111, 111, 206, nil, nil, 206, nil, nil, nil, 111, 111, 111, 111, 206, nil, 124, 124, nil, nil, nil, nil, nil, nil, nil, 124, 124, 124, 124, nil, nil, nil, nil, nil, 111, 111, nil, nil, 111, 111, 111, 111, 111, 111, nil, 111, 111, nil, nil, 124, 124, nil, 111, 124, 124, 124, 124, 124, 124, nil, 124, 124, 130, 130, nil, nil, nil, 124, nil, nil, nil, 130, 130, 130, 130, nil, nil, 131, 131, nil, nil, nil, nil, nil, nil, nil, 131, 131, 131, 131, nil, nil, nil, nil, nil, 130, 130, nil, nil, 130, 130, 130, 130, 130, 130, nil, 130, 130, nil, nil, 131, 131, nil, 130, 131, 131, 131, 131, 131, 131, nil, 131, 131, 287, 287, nil, nil, nil, 131, nil, nil, nil, 287, 287, 287, 287, nil, nil, 186, 186, nil, nil, nil, nil, nil, nil, 186, 186, 186, 186, 186, nil, nil, nil, nil, nil, nil, 287, nil, nil, 287, 287, 287, 287, 287, 287, nil, 287, 287, nil, nil, 186, 186, nil, 287, 186, 186, 186, 186, 186, 186, nil, 186, 186, 291, 291, nil, nil, nil, 186, nil, nil, nil, 291, 291, 291, 291, nil, nil, 19, 292, 19, 19, nil, 19, 19, nil, 19, 292, 19, nil, 19, nil, 19, nil, nil, 19, 19, nil, 289, nil, 291, 291, 291, 291, 291, 291, 289, 291, 291, nil, nil, nil, nil, nil, 291, 292, 292, 292, 292, 292, 292, nil, 292, 292, nil, nil, 237, nil, nil, 292, nil, nil, nil, nil, 289, 289, 289, 289, 289, 289, nil, 289, 289, nil, nil, 372, nil, 237, 289, 237, 237, nil, 237, 237, nil, 237, nil, 237, nil, 237, nil, 237, nil, nil, 237, 237, 372, 378, 372, 372, nil, 372, 372, nil, 372, nil, 372, nil, 372, nil, 372, nil, nil, 372, 372, nil, 212, nil, 378, nil, 378, 378, nil, 378, 378, nil, 378, nil, 378, nil, 378, nil, 378, nil, nil, 378, 378, 212, 323, 212, 212, nil, 212, 212, nil, 212, nil, 212, nil, 212, nil, 212, nil, nil, 212, 212, nil, 374, nil, 323, nil, 323, 323, nil, 323, 323, nil, 323, nil, 323, nil, 323, nil, 323, nil, nil, 323, 323, 374, 380, 374, 374, nil, 374, 374, nil, 374, nil, 374, nil, 374, nil, 374, nil, nil, 374, 374, nil, 303, nil, 380, nil, 380, 380, nil, 380, 380, nil, 380, nil, 380, nil, 380, nil, 380, nil, nil, 380, 380, 303, 319, 303, 303, nil, 303, 303, nil, 303, nil, 303, nil, 303, nil, 303, nil, nil, 303, 303, nil, 362, nil, 319, nil, 319, 319, nil, 319, 319, nil, 319, nil, 319, nil, 319, nil, 319, nil, nil, 319, 319, 362, 217, 362, 362, nil, 362, 362, nil, 362, nil, 362, nil, 362, nil, 362, nil, nil, 362, 362, nil, 295, nil, 217, nil, 217, 217, nil, 217, 217, nil, 217, nil, 217, nil, 217, nil, 217, nil, nil, 217, 217, 295, nil, 295, 295, nil, 295, 295, nil, 295, nil, 295, nil, 295, nil, 295, nil, nil, 295, 295, 0, nil, 0, 0, nil, 0, 0, nil, 0, nil, 0, nil, 0, nil, 0, nil, nil, 0, 0 ] racc_action_pointer = [ 1795, 163, 443, 413, 433, nil, nil, 3, 434, 420, nil, nil, 142, nil, nil, nil, 398, 26, nil, 1483, nil, nil, 80, 271, nil, nil, 297, nil, 367, 348, 166, nil, nil, 375, 315, 277, 337, nil, nil, 501, nil, nil, nil, 221, nil, nil, 557, 583, 608, 622, 315, 329, 348, nil, nil, 4, nil, nil, nil, nil, nil, nil, 97, 780, 298, -9, 309, 302, 275, nil, nil, 286, nil, nil, 923, 966, nil, 279, 269, nil, 6, 248, 1060, nil, 239, 245, -3, 177, nil, nil, 149, 137, nil, nil, 1209, 10, nil, 1239, nil, nil, 755, 121, 1137, 225, nil, 233, 3, 299, 301, 304, nil, 1298, nil, nil, 322, 325, nil, nil, nil, 323, 205, 331, 144, nil, 1313, nil, nil, 351, nil, nil, 1359, 1374, 352, 344, nil, nil, 328, nil, 350, 364, 361, nil, 362, 79, 374, nil, nil, nil, nil, nil, nil, nil, -9, 408, 386, nil, 2, 452, 30, nil, 251, nil, nil, 84, nil, 50, nil, nil, nil, nil, nil, 174, 439, 436, -14, 381, 647, nil, 114, nil, -4, 57, 75, 197, 172, nil, 1435, nil, 225, nil, nil, nil, 363, nil, nil, 213, 215, 241, 323, 401, 453, 527, 32, 673, 699, 729, 1265, 265, 806, 832, 1070, 249, 1612, 1118, 1166, 270, nil, 1757, 24, 24, 91, 121, nil, nil, 142, 1044, 126, 161, 1191, 147, 1144, 198, 233, 238, 273, nil, nil, 1552, nil, 39, nil, nil, nil, 66, 1017, 1001, nil, nil, 991, nil, 270, nil, 273, 279, 948, nil, 904, nil, nil, nil, nil, nil, nil, 451, nil, nil, nil, nil, 283, 850, nil, nil, -5, nil, 308, nil, 857, 8, nil, 226, 198, 67, nil, 466, 1073, 86, 172, 1420, 411, 1515, nil, 1481, 1496, 456, nil, 1776, -4, 356, 443, nil, 145, nil, nil, 1694, nil, 387, nil, 362, 129, nil, nil, nil, nil, nil, nil, 380, nil, nil, nil, 1716, nil, nil, nil, 1634, nil, nil, nil, 376, 383, nil, 385, 392, 393, nil, nil, nil, nil, 410, nil, nil, nil, 153, nil, 183, nil, nil, nil, nil, nil, 51, nil, 128, 430, nil, nil, 110, 435, nil, nil, nil, nil, nil, 1735, nil, nil, nil, nil, 439, 59, 445, nil, nil, 1571, nil, 1653, nil, nil, nil, 1593, nil, 1675, nil, nil, nil ] racc_action_default = [ -196, -233, -233, -50, -233, -8, -9, -233, -233, -22, -10, -187, -188, -11, -185, -12, -233, -233, -13, -1, -14, -2, -233, -186, -15, -3, -233, -16, -5, -233, -233, -17, -6, -233, -18, -7, -196, -188, -186, -233, -51, -26, -27, -233, -24, -25, -233, -233, -233, -85, -92, -196, -233, -195, -193, -196, -189, -191, -192, -221, -194, -4, -196, -233, -85, -196, -53, -231, -42, -174, -43, -213, -117, -33, -233, -233, -44, -31, -74, -32, -233, -36, -233, -122, -37, -233, -73, -38, -172, -72, -39, -40, -173, -41, -233, -103, -111, -233, -132, -112, -233, -104, -233, -108, -110, -105, -233, -114, -106, -113, -109, -233, -125, -107, -233, -233, -49, -175, -176, -178, -233, -233, -197, -198, -83, -19, -22, -186, -21, -23, -82, -84, -233, -75, -86, -81, -70, -74, -76, -219, -79, -68, -77, -73, -233, -171, -170, -80, -78, -90, -91, -93, -233, -219, -196, 384, -233, -233, -233, -207, -233, -57, -213, -196, -59, -233, -66, -65, -56, -73, -95, -233, -219, -233, -233, -92, -233, -30, -233, -118, -233, -233, -233, -233, -233, -142, -233, -149, -233, -216, -229, -225, -233, -228, -224, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -20, -233, -206, -233, -204, -233, -201, -230, -233, -71, -220, -233, -233, -85, -233, -220, -233, -233, -233, -209, -190, -233, -208, -233, -54, -62, -61, -233, -233, -233, -217, -218, -233, -124, -233, -55, -219, -233, -233, -28, -233, -120, -119, -35, -34, -168, -166, -233, -169, -160, -167, -161, -73, -233, -123, -116, -233, -152, -218, -214, -233, -233, -222, -137, -139, -138, -133, -140, -144, -141, -146, -151, -148, -145, -134, -150, -147, -143, -135, -233, -128, -136, -233, -154, -233, -158, -177, -233, -180, -233, -199, -233, -233, -200, -45, -69, -87, -46, -88, -219, -89, -94, -48, -233, -211, -210, -212, -233, -184, -58, -60, -97, -98, -63, -102, -99, -100, -101, -64, -96, -47, -233, -232, -29, -121, -233, -163, -219, -115, -215, -227, -226, -223, -128, -127, -233, -233, -155, -153, -233, -233, -179, -205, -203, -202, -67, -233, -182, -183, -52, -165, -218, -233, -233, -126, -129, -233, -159, -233, -181, -164, -162, -233, -131, -233, -157, -130, -156 ] racc_goto_table = [ 22, 9, 68, 112, 53, 118, 61, 36, 91, 222, 19, 267, 70, 93, 2, 227, 139, 191, 51, 22, 9, 179, 77, 56, 73, 149, 21, 141, 133, 232, 115, 172, 153, 2, 146, 263, 125, 116, 135, 148, 147, 299, 129, 22, 126, 260, 160, 350, 250, 174, 128, 171, 43, 68, 121, 329, 334, 298, 368, 91, 258, 265, 123, 70, 93, 317, 343, 301, 136, 154, 183, 119, 224, 178, 233, 73, 55, 123, 157, 66, 238, 159, 120, 219, 221, 190, 325, 321, 195, 16, 188, nil, nil, nil, nil, nil, nil, nil, 342, nil, 370, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, nil, nil, nil, 260, 129, 22, 126, 263, nil, nil, 353, nil, 128, 337, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 81, nil, nil, nil, 53, nil, 53, nil, 243, nil, nil, 149, 301, nil, nil, nil, nil, nil, 252, nil, nil, 68, 261, 236, 68, nil, 138, 91, 146, nil, 91, 70, 93, nil, 70, 93, nil, nil, nil, 166, nil, 235, 166, 259, 272, nil, 73, nil, 302, 347, nil, 81, 361, nil, 261, 290, 360, 315, 376, 294, 146, nil, 312, 340, 311, 133, nil, 149, nil, 373, nil, 146, nil, 22, 9, 135, 148, 147, 22, 9, 369, nil, 263, 295, 327, 327, nil, 2, 303, nil, 146, 146, 2, nil, 68, 333, 333, nil, 22, 9, 91, 320, 88, nil, 70, 93, nil, nil, 323, 261, nil, nil, 2, nil, nil, 146, 259, 190, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 88, nil, nil, nil, nil, nil, nil, nil, 87, nil, 261, nil, 166, nil, nil, 61, 146, nil, nil, nil, nil, nil, nil, 61, nil, 88, nil, nil, 22, 9, 81, 262, nil, 81, 142, nil, 22, 9, nil, nil, nil, nil, 2, 61, nil, nil, nil, nil, nil, nil, 2, nil, 22, 9, nil, nil, 22, 9, nil, 87, nil, 371, 362, 262, nil, nil, 2, 261, nil, nil, 2, nil, nil, 146, 138, nil, nil, nil, nil, nil, 261, nil, 61, nil, nil, nil, 146, nil, 166, nil, nil, nil, nil, 328, 328, 22, 9, 114, 61, nil, 61, nil, 84, 81, nil, 22, 9, 22, 9, 2, 90, 22, 9, 22, 9, 378, 132, 380, 262, 2, nil, 2, nil, nil, nil, 2, nil, 2, 140, nil, nil, 170, 88, 88, nil, 88, 145, nil, nil, nil, nil, 167, nil, nil, 167, nil, nil, 262, nil, nil, 170, nil, nil, 84, nil, nil, nil, nil, nil, nil, nil, 90, nil, nil, nil, 88, 87, 266, nil, 87, 170, nil, nil, nil, nil, nil, 88, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 88, 88, nil, nil, 266, nil, nil, nil, nil, 262, 88, nil, nil, nil, nil, 142, nil, nil, nil, nil, nil, nil, 262, nil, nil, 88, nil, nil, nil, nil, nil, nil, nil, nil, 331, 331, nil, nil, nil, nil, nil, nil, nil, nil, 87, nil, nil, 167, nil, 253, nil, nil, nil, nil, 88, nil, nil, nil, nil, 266, nil, nil, nil, nil, nil, 84, 264, nil, 84, nil, nil, nil, 282, 90, 145, nil, 90, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 266, nil, nil, nil, nil, nil, nil, nil, nil, nil, 264, nil, nil, 314, nil, 316, nil, 124, 145, nil, nil, 140, nil, 88, 130, 131, nil, nil, nil, 145, nil, nil, nil, 335, nil, 167, 88, nil, nil, nil, 330, 330, nil, nil, nil, nil, nil, nil, 332, 332, 84, nil, nil, 180, nil, nil, nil, 266, 90, nil, nil, 346, nil, nil, nil, 264, nil, nil, nil, nil, 266, nil, 185, 145, nil, 186, nil, nil, 187, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 358, nil, 359, nil, 264, nil, nil, nil, nil, nil, nil, nil, 145, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 366, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 264, nil, nil, nil, nil, nil, nil, nil, 145, nil, nil, nil, nil, 264, nil, nil, nil, nil, nil, nil, nil, 145, nil, 279, 280, 281, nil, 283, 284, 285, 286, 287, 288, 289, nil, 291, 292, 293, nil, nil, 297, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 180 ] racc_goto_check = [ 37, 21, 30, 62, 64, 72, 4, 32, 28, 82, 2, 70, 31, 29, 52, 36, 35, 85, 32, 37, 21, 60, 22, 78, 21, 53, 3, 47, 30, 36, 37, 35, 38, 52, 28, 68, 19, 5, 31, 29, 50, 66, 7, 37, 21, 23, 41, 63, 36, 41, 5, 57, 20, 30, 74, 46, 46, 65, 58, 28, 61, 69, 3, 31, 29, 56, 71, 68, 33, 74, 57, 73, 34, 22, 75, 21, 76, 3, 77, 40, 79, 3, 20, 80, 81, 30, 42, 83, 84, 1, 57, nil, nil, nil, nil, nil, nil, nil, 70, nil, 63, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, nil, nil, 23, 7, 37, 21, 68, nil, nil, 66, nil, 5, 36, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, 64, nil, 64, nil, 41, nil, nil, 53, 68, nil, nil, nil, nil, nil, 38, nil, nil, 30, 30, 78, 30, nil, 24, 28, 28, nil, 28, 31, 29, nil, 31, 29, nil, nil, nil, 24, nil, 3, 24, 21, 22, nil, 21, nil, 72, 85, nil, 24, 36, nil, 30, 64, 82, 35, 70, 64, 28, nil, 53, 60, 47, 30, nil, 53, nil, 68, nil, 28, nil, 37, 21, 31, 29, 50, 37, 21, 36, nil, 68, 2, 30, 30, nil, 52, 2, nil, 28, 28, 52, nil, 30, 29, 29, nil, 37, 21, 28, 32, 49, nil, 31, 29, nil, nil, 2, 30, nil, nil, 52, nil, nil, 28, 21, 30, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, 26, nil, 30, nil, 24, nil, nil, 4, 28, nil, nil, nil, nil, nil, nil, 4, nil, 49, nil, nil, 37, 21, 24, 24, nil, 24, 26, nil, 37, 21, nil, nil, nil, nil, 52, 4, nil, nil, nil, nil, nil, nil, 52, nil, 37, 21, nil, nil, 37, 21, nil, 26, nil, 62, 2, 24, nil, nil, 52, 30, nil, nil, 52, nil, nil, 28, 24, nil, nil, nil, nil, nil, 30, nil, 4, nil, nil, nil, 28, nil, 24, nil, nil, nil, nil, 24, 24, 37, 21, 54, 4, nil, 4, nil, 25, 24, nil, 37, 21, 37, 21, 52, 27, 37, 21, 37, 21, 2, 54, 2, 24, 52, nil, 52, nil, nil, nil, 52, nil, 52, 25, nil, nil, 54, 49, 49, nil, 49, 27, nil, nil, nil, nil, 25, nil, nil, 25, nil, nil, 24, nil, nil, 54, nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, 27, nil, nil, nil, 49, 26, 26, nil, 26, 54, nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 49, 49, nil, nil, 26, nil, nil, nil, nil, 24, 49, nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, 24, nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, 26, 26, nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, 25, nil, 54, nil, nil, nil, nil, 49, nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, 25, 25, nil, 25, nil, nil, nil, 54, 27, 27, nil, 27, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, nil, nil, nil, 25, nil, nil, 54, nil, 54, nil, 51, 27, nil, nil, 25, nil, 49, 51, 51, nil, nil, nil, 27, nil, nil, nil, 54, nil, 25, 49, nil, nil, nil, 25, 25, nil, nil, nil, nil, nil, nil, 27, 27, 25, nil, nil, 51, nil, nil, nil, 26, 27, nil, nil, 54, nil, nil, nil, 25, nil, nil, nil, nil, 26, nil, 51, 27, nil, 51, nil, nil, 51, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 54, nil, 54, nil, 25, nil, nil, nil, nil, nil, nil, nil, 27, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 54, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, 27, nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, 27, nil, 51, 51, 51, nil, 51, 51, 51, 51, 51, 51, 51, nil, 51, 51, 51, nil, nil, 51, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 51 ] racc_goto_pointer = [ nil, 89, 10, 26, -13, 7, nil, -1, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -7, 48, 1, -1, -136, 116, 346, 252, 354, -15, -10, -21, -11, 6, 19, -64, -33, -124, 0, -18, nil, 57, -16, -153, nil, nil, nil, -189, -22, nil, 218, -9, 528, 14, -25, 335, nil, -166, -12, -285, nil, -54, -120, -23, -249, -13, -157, -173, nil, -147, -121, -171, -203, -28, 38, 18, -80, 59, 23, 6, -78, -39, -38, -113, -147, -18, -89, nil ] racc_goto_default = [ nil, nil, nil, 168, 25, 28, 32, 35, 5, 6, 10, 13, 15, 18, 20, 24, 27, 31, 34, 4, nil, 99, nil, 79, 101, 103, 105, 108, 109, 113, 95, 96, 8, nil, nil, nil, nil, 85, nil, 30, nil, nil, 161, 239, 164, 165, nil, nil, 144, 107, 110, 111, 67, 134, 98, 150, 151, nil, 248, 104, nil, nil, nil, nil, 69, nil, nil, 300, 80, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 57, nil, nil, nil, nil, nil, nil, 192 ] racc_token_table = { false => 0, Object.new => 1, :STRING => 2, :DQPRE => 3, :DQMID => 4, :DQPOST => 5, :LBRACK => 6, :RBRACK => 7, :LBRACE => 8, :RBRACE => 9, :SYMBOL => 10, :FARROW => 11, :COMMA => 12, :TRUE => 13, :FALSE => 14, :EQUALS => 15, :APPENDS => 16, :LESSEQUAL => 17, :NOTEQUAL => 18, :DOT => 19, :COLON => 20, :LLCOLLECT => 21, :RRCOLLECT => 22, :QMARK => 23, :LPAREN => 24, :RPAREN => 25, :ISEQUAL => 26, :GREATEREQUAL => 27, :GREATERTHAN => 28, :LESSTHAN => 29, :IF => 30, :ELSE => 31, :IMPORT => 32, :DEFINE => 33, :ELSIF => 34, :VARIABLE => 35, :CLASS => 36, :INHERITS => 37, :NODE => 38, :BOOLEAN => 39, :NAME => 40, :SEMIC => 41, :CASE => 42, :DEFAULT => 43, :AT => 44, :LCOLLECT => 45, :RCOLLECT => 46, :CLASSNAME => 47, :CLASSREF => 48, :NOT => 49, :OR => 50, :AND => 51, :UNDEF => 52, :PARROW => 53, :PLUS => 54, :MINUS => 55, :TIMES => 56, :DIV => 57, :LSHIFT => 58, :RSHIFT => 59, :UMINUS => 60, :MATCH => 61, :NOMATCH => 62, :REGEX => 63, :IN_EDGE => 64, :OUT_EDGE => 65, :IN_EDGE_SUB => 66, :OUT_EDGE_SUB => 67, :IN => 68 } racc_use_result_var = true racc_nt_base = 69 Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ '$end', 'error', 'STRING', 'DQPRE', 'DQMID', 'DQPOST', 'LBRACK', 'RBRACK', 'LBRACE', 'RBRACE', 'SYMBOL', 'FARROW', 'COMMA', 'TRUE', 'FALSE', 'EQUALS', 'APPENDS', 'LESSEQUAL', 'NOTEQUAL', 'DOT', 'COLON', 'LLCOLLECT', 'RRCOLLECT', 'QMARK', 'LPAREN', 'RPAREN', 'ISEQUAL', 'GREATEREQUAL', 'GREATERTHAN', 'LESSTHAN', 'IF', 'ELSE', 'IMPORT', 'DEFINE', 'ELSIF', 'VARIABLE', 'CLASS', 'INHERITS', 'NODE', 'BOOLEAN', 'NAME', 'SEMIC', 'CASE', 'DEFAULT', 'AT', 'LCOLLECT', 'RCOLLECT', 'CLASSNAME', 'CLASSREF', 'NOT', 'OR', 'AND', 'UNDEF', 'PARROW', 'PLUS', 'MINUS', 'TIMES', 'DIV', 'LSHIFT', 'RSHIFT', 'UMINUS', 'MATCH', 'NOMATCH', 'REGEX', 'IN_EDGE', 'OUT_EDGE', 'IN_EDGE_SUB', 'OUT_EDGE_SUB', 'IN', '$start', 'program', 'statements', 'nil', 'statement', 'resource', 'virtualresource', 'collection', 'assignment', 'casestatement', 'ifstatement_begin', 'import', 'fstatement', 'definition', 'hostclass', 'nodedef', 'resourceoverride', 'append', 'relationship', 'relationship_side', 'edge', 'resourceref', 'funcvalues', 'namestring', 'name', 'variable', 'type', 'boolean', 'funcrvalue', 'selector', 'quotedtext', 'hasharrayaccesses', 'classname', 'resourceinstances', 'endsemi', 'params', 'endcomma', 'classref', 'anyparams', 'at', 'collectrhand', 'collstatements', 'collstatement', 'colljoin', 'collexpr', 'colllval', 'simplervalue', 'resourceinst', 'resourcename', 'undef', 'array', 'expression', 'hasharrayaccess', 'param', 'rvalue', 'addparam', 'anyparam', 'rvalues', 'comma', 'hash', 'dqrval', 'dqtail', 'ifstatement', 'else', 'regex', 'caseopts', 'caseopt', 'casevalues', 'selectlhand', 'svalues', 'selectval', 'sintvalues', 'string', 'strings', 'argumentlist', 'classparent', 'hostnames', 'nodeparent', 'nodename', 'hostname', 'nothing', 'arguments', 'argument', 'classnameordefault', 'hashpairs', 'hashpair', 'key'] Racc_debug_parser = false ##### racc system variables end ##### # reduce 0 omitted module_eval <<'.,.,', 'grammar.ra', 46 def _reduce_1( val, _values, result ) - if val[0] - # Make sure we always return an array. - if val[0].is_a?(AST::ASTArray) - if val[0].children.empty? - result = nil - else - result = val[0] - end - else - result = aryfy(val[0]) - end - else + if val[0] + # Make sure we always return an array. + if val[0].is_a?(AST::ASTArray) + if val[0].children.empty? result = nil + else + result = val[0] + end + else + result = aryfy(val[0]) end + else + result = nil + end result end .,., # reduce 2 omitted # reduce 3 omitted module_eval <<'.,.,', 'grammar.ra', 62 def _reduce_4( val, _values, result ) if val[0] and val[1] - if val[0].instance_of?(AST::ASTArray) - val[0].push(val[1]) - result = val[0] - else - result = ast AST::ASTArray, :children => [val[0],val[1]] - end - elsif obj = (val[0] || val[1]) - result = obj - else result = nil + if val[0].instance_of?(AST::ASTArray) + val[0].push(val[1]) + result = val[0] + else + result = ast AST::ASTArray, :children => [val[0],val[1]] end + elsif obj = (val[0] || val[1]) + result = obj + else result = nil + end result end .,., # reduce 5 omitted # reduce 6 omitted # reduce 7 omitted # reduce 8 omitted # reduce 9 omitted # reduce 10 omitted # reduce 11 omitted # reduce 12 omitted # reduce 13 omitted # reduce 14 omitted # reduce 15 omitted # reduce 16 omitted # reduce 17 omitted # reduce 18 omitted module_eval <<'.,.,', 'grammar.ra', 82 def _reduce_19( val, _values, result ) - result = AST::Relationship.new(val[0], val[2], val[1][:value], ast_context) + result = AST::Relationship.new(val[0], val[2], val[1][:value], ast_context) result end .,., module_eval <<'.,.,', 'grammar.ra', 85 def _reduce_20( val, _values, result ) result = AST::Relationship.new(val[0], val[2], val[1][:value], ast_context) result end .,., # reduce 21 omitted # reduce 22 omitted # reduce 23 omitted # reduce 24 omitted # reduce 25 omitted # reduce 26 omitted # reduce 27 omitted module_eval <<'.,.,', 'grammar.ra', 98 def _reduce_28( val, _values, result ) - args = aryfy(val[2]) - result = ast AST::Function, - :name => val[0][:value], - :line => val[0][:line], - :arguments => args, - :ftype => :statement + args = aryfy(val[2]) + result = ast AST::Function, + :name => val[0][:value], + :line => val[0][:line], + :arguments => args, + :ftype => :statement result end .,., module_eval <<'.,.,', 'grammar.ra', 106 def _reduce_29( val, _values, result ) - args = aryfy(val[2]) - result = ast AST::Function, - :name => val[0][:value], - :line => val[0][:line], - :arguments => args, - :ftype => :statement + args = aryfy(val[2]) + result = ast AST::Function, + :name => val[0][:value], + :line => val[0][:line], + :arguments => args, + :ftype => :statement result end .,., module_eval <<'.,.,', 'grammar.ra', 112 def _reduce_30( val, _values, result ) - result = ast AST::Function, - :name => val[0][:value], - :line => val[0][:line], - :arguments => AST::ASTArray.new({}), - :ftype => :statement + result = ast AST::Function, + :name => val[0][:value], + :line => val[0][:line], + :arguments => AST::ASTArray.new({}), + :ftype => :statement result end .,., module_eval <<'.,.,', 'grammar.ra', 120 def _reduce_31( val, _values, result ) args = aryfy(val[1]) result = ast AST::Function, - :name => val[0][:value], - :line => val[0][:line], - :arguments => args, - :ftype => :statement + :name => val[0][:value], + :line => val[0][:line], + :arguments => args, + :ftype => :statement result end .,., # reduce 32 omitted # reduce 33 omitted module_eval <<'.,.,', 'grammar.ra', 128 def _reduce_34( val, _values, result ) result = aryfy(val[0], val[2]) result.line = @lexer.line result.file = @lexer.file result end .,., module_eval <<'.,.,', 'grammar.ra', 137 def _reduce_35( val, _values, result ) unless val[0].is_a?(AST::ASTArray) - val[0] = aryfy(val[0]) - end + val[0] = aryfy(val[0]) + end - val[0].push(val[2]) + val[0].push(val[2]) - result = val[0] + result = val[0] result end .,., # reduce 36 omitted # reduce 37 omitted # reduce 38 omitted # reduce 39 omitted # reduce 40 omitted # reduce 41 omitted # reduce 42 omitted # reduce 43 omitted module_eval <<'.,.,', 'grammar.ra', 151 def _reduce_44( val, _values, result ) - result = ast AST::Name, :value => val[0][:value] + result = ast AST::Name, :value => val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 173 +module_eval <<'.,.,', 'grammar.ra', 172 def _reduce_45( val, _values, result ) - @lexer.commentpop - array = val[2] - if array.instance_of?(AST::ResourceInstance) - array = [array] - end - result = ast AST::ASTArray + @lexer.commentpop + array = val[2] + array = [array] if array.instance_of?(AST::ResourceInstance) + result = ast AST::ASTArray - # this iterates across each specified resourceinstance - array.each { |instance| - unless instance.instance_of?(AST::ResourceInstance) - raise Puppet::Dev, "Got something that isn't an instance" - end - # now, i need to somehow differentiate between those things with - # arrays in their names, and normal things - result.push ast(AST::Resource, - :type => val[0], - :title => instance[0], - :parameters => instance[1]) - } + # this iterates across each specified resourceinstance + array.each { |instance| + raise Puppet::Dev, "Got something that isn't an instance" unless instance.instance_of?(AST::ResourceInstance) + # now, i need to somehow differentiate between those things with + # arrays in their names, and normal things + + result.push ast( + AST::Resource, + :type => val[0], + :title => instance[0], + + :parameters => instance[1]) + } result end .,., -module_eval <<'.,.,', 'grammar.ra', 176 +module_eval <<'.,.,', 'grammar.ra', 175 def _reduce_46( val, _values, result ) - # This is a deprecated syntax. - error "All resource specifications require names" + # This is a deprecated syntax. + error "All resource specifications require names" result end .,., -module_eval <<'.,.,', 'grammar.ra', 180 +module_eval <<'.,.,', 'grammar.ra', 179 def _reduce_47( val, _values, result ) - # a defaults setting for a type - @lexer.commentpop - result = ast(AST::ResourceDefaults, :type => val[0], :parameters => val[2]) + # a defaults setting for a type + @lexer.commentpop + result = ast(AST::ResourceDefaults, :type => val[0], :parameters => val[2]) result end .,., -module_eval <<'.,.,', 'grammar.ra', 186 +module_eval <<'.,.,', 'grammar.ra', 185 def _reduce_48( val, _values, result ) - @lexer.commentpop - result = ast AST::ResourceOverride, :object => val[0], :parameters => val[2] + @lexer.commentpop + result = ast AST::ResourceOverride, :object => val[0], :parameters => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 213 +module_eval <<'.,.,', 'grammar.ra', 210 def _reduce_49( val, _values, result ) - type = val[0] + type = val[0] - if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly] - Puppet.warning addcontext("You cannot collect without storeconfigs being set") - end + if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly] + Puppet.warning addcontext("You cannot collect without storeconfigs being set") + end - if val[1].is_a? AST::ResourceDefaults - error "Defaults are not virtualizable" - end + error "Defaults are not virtualizable" if val[1].is_a? AST::ResourceDefaults - method = type.to_s + "=" + method = type.to_s + "=" - # Just mark our resources as exported and pass them through. - if val[1].instance_of?(AST::ASTArray) - val[1].each do |obj| - obj.send(method, true) - end - else - val[1].send(method, true) + # Just mark our resources as exported and pass them through. + if val[1].instance_of?(AST::ASTArray) + val[1].each do |obj| + obj.send(method, true) end + else + val[1].send(method, true) + end - result = val[1] + result = val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 214 +module_eval <<'.,.,', 'grammar.ra', 211 def _reduce_50( val, _values, result ) result = :virtual result end .,., -module_eval <<'.,.,', 'grammar.ra', 215 +module_eval <<'.,.,', 'grammar.ra', 212 def _reduce_51( val, _values, result ) result = :exported result end .,., -module_eval <<'.,.,', 'grammar.ra', 240 +module_eval <<'.,.,', 'grammar.ra', 235 def _reduce_52( val, _values, result ) - @lexer.commentpop - if val[0] =~ /^[a-z]/ - Puppet.warning addcontext("Collection names must now be capitalized") - end - type = val[0].downcase - args = {:type => type} + @lexer.commentpop + Puppet.warning addcontext("Collection names must now be capitalized") if val[0] =~ /^[a-z]/ + type = val[0].downcase + args = {:type => type} - if val[1].is_a?(AST::CollExpr) - args[:query] = val[1] - args[:query].type = type - args[:form] = args[:query].form - else - args[:form] = val[1] - end - if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly] - Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored") - end - args[:override] = val[3] - result = ast AST::Collection, args + if val[1].is_a?(AST::CollExpr) + args[:query] = val[1] + args[:query].type = type + args[:form] = args[:query].form + else + args[:form] = val[1] + end + if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly] + Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored") + end + args[:override] = val[3] + result = ast AST::Collection, args result end .,., -module_eval <<'.,.,', 'grammar.ra', 259 +module_eval <<'.,.,', 'grammar.ra', 254 def _reduce_53( val, _values, result ) if val[0] =~ /^[a-z]/ - Puppet.warning addcontext("Collection names must now be capitalized") - end - type = val[0].downcase - args = {:type => type } + Puppet.warning addcontext("Collection names must now be capitalized") + end + type = val[0].downcase + args = {:type => type } - if val[1].is_a?(AST::CollExpr) - args[:query] = val[1] - args[:query].type = type - args[:form] = args[:query].form - else - args[:form] = val[1] - end - if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly] - Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored") - end - result = ast AST::Collection, args + if val[1].is_a?(AST::CollExpr) + args[:query] = val[1] + args[:query].type = type + args[:form] = args[:query].form + else + args[:form] = val[1] + end + if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly] + Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored") + end + result = ast AST::Collection, args result end .,., -module_eval <<'.,.,', 'grammar.ra', 269 +module_eval <<'.,.,', 'grammar.ra', 264 def _reduce_54( val, _values, result ) - if val[1] - result = val[1] - result.form = :virtual - else - result = :virtual - end + if val[1] + result = val[1] + result.form = :virtual + else + result = :virtual + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 277 +module_eval <<'.,.,', 'grammar.ra', 272 def _reduce_55( val, _values, result ) if val[1] - result = val[1] - result.form = :exported - else - result = :exported - end + result = val[1] + result.form = :exported + else + result = :exported + end result end .,., # reduce 56 omitted # reduce 57 omitted -module_eval <<'.,.,', 'grammar.ra', 285 +module_eval <<'.,.,', 'grammar.ra', 280 def _reduce_58( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] result end .,., # reduce 59 omitted -module_eval <<'.,.,', 'grammar.ra', 291 +module_eval <<'.,.,', 'grammar.ra', 286 def _reduce_60( val, _values, result ) result = val[1] result.parens = true result end .,., -module_eval <<'.,.,', 'grammar.ra', 292 +module_eval <<'.,.,', 'grammar.ra', 287 def _reduce_61( val, _values, result ) result=val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 293 +module_eval <<'.,.,', 'grammar.ra', 288 def _reduce_62( val, _values, result ) result=val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 300 +module_eval <<'.,.,', 'grammar.ra', 295 def _reduce_63( val, _values, result ) - result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2] - #result = ast AST::CollExpr - #result.push *val + result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2] + #result = ast AST::CollExpr + #result.push *val result end .,., -module_eval <<'.,.,', 'grammar.ra', 305 +module_eval <<'.,.,', 'grammar.ra', 300 def _reduce_64( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2] #result = ast AST::CollExpr #result.push *val result end .,., # reduce 65 omitted # reduce 66 omitted -module_eval <<'.,.,', 'grammar.ra', 312 +module_eval <<'.,.,', 'grammar.ra', 307 def _reduce_67( val, _values, result ) - result = ast AST::ResourceInstance, :children => [val[0],val[2]] + result = ast AST::ResourceInstance, :children => [val[0],val[2]] result end .,., # reduce 68 omitted -module_eval <<'.,.,', 'grammar.ra', 322 +module_eval <<'.,.,', 'grammar.ra', 317 def _reduce_69( val, _values, result ) if val[0].instance_of?(AST::ResourceInstance) - result = ast AST::ASTArray, :children => [val[0],val[2]] - else - val[0].push val[2] - result = val[0] - end + result = ast AST::ASTArray, :children => [val[0],val[2]] + else + val[0].push val[2] + result = val[0] + end result end .,., # reduce 70 omitted # reduce 71 omitted -module_eval <<'.,.,', 'grammar.ra', 329 +module_eval <<'.,.,', 'grammar.ra', 324 def _reduce_72( val, _values, result ) - result = ast AST::Undef, :value => :undef + result = ast AST::Undef, :value => :undef result end .,., -module_eval <<'.,.,', 'grammar.ra', 333 +module_eval <<'.,.,', 'grammar.ra', 328 def _reduce_73( val, _values, result ) - result = ast AST::Name, :value => val[0][:value], :line => val[0][:line] + result = ast AST::Name, :value => val[0][:value], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 337 +module_eval <<'.,.,', 'grammar.ra', 332 def _reduce_74( val, _values, result ) - result = ast AST::Type, :value => val[0][:value], :line => val[0][:line] + result = ast AST::Type, :value => val[0][:value], :line => val[0][:line] result end .,., # reduce 75 omitted # reduce 76 omitted # reduce 77 omitted # reduce 78 omitted # reduce 79 omitted # reduce 80 omitted # reduce 81 omitted -module_eval <<'.,.,', 'grammar.ra', 354 +module_eval <<'.,.,', 'grammar.ra', 347 def _reduce_82( val, _values, result ) - if val[0][:value] =~ /::/ - raise Puppet::ParseError, "Cannot assign to variables in other namespaces" - end - # this is distinct from referencing a variable - variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line] - result = ast AST::VarDef, :name => variable, :value => val[2], :line => val[0][:line] + raise Puppet::ParseError, "Cannot assign to variables in other namespaces" if val[0][:value] =~ /::/ + # this is distinct from referencing a variable + variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line] + result = ast AST::VarDef, :name => variable, :value => val[2], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 357 +module_eval <<'.,.,', 'grammar.ra', 350 def _reduce_83( val, _values, result ) result = ast AST::VarDef, :name => val[0], :value => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 362 +module_eval <<'.,.,', 'grammar.ra', 355 def _reduce_84( val, _values, result ) - variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line] - result = ast AST::VarDef, :name => variable, :value => val[2], :append => true, :line => val[0][:line] + variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line] + result = ast AST::VarDef, :name => variable, :value => val[2], :append => true, :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 367 +module_eval <<'.,.,', 'grammar.ra', 360 def _reduce_85( val, _values, result ) - result = ast AST::ASTArray + result = ast AST::ASTArray result end .,., -module_eval <<'.,.,', 'grammar.ra', 367 +module_eval <<'.,.,', 'grammar.ra', 360 def _reduce_86( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 376 +module_eval <<'.,.,', 'grammar.ra', 369 def _reduce_87( val, _values, result ) if val[0].instance_of?(AST::ASTArray) - val[0].push(val[2]) - result = val[0] - else - result = ast AST::ASTArray, :children => [val[0],val[2]] - end + val[0].push(val[2]) + result = val[0] + else + result = ast AST::ASTArray, :children => [val[0],val[2]] + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 380 +module_eval <<'.,.,', 'grammar.ra', 373 def _reduce_88( val, _values, result ) - result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2] + result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 385 +module_eval <<'.,.,', 'grammar.ra', 378 def _reduce_89( val, _values, result ) - result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2], - :add => true + result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2], + :add => true result end .,., # reduce 90 omitted # reduce 91 omitted -module_eval <<'.,.,', 'grammar.ra', 393 +module_eval <<'.,.,', 'grammar.ra', 386 def _reduce_92( val, _values, result ) - result = ast AST::ASTArray + result = ast AST::ASTArray result end .,., -module_eval <<'.,.,', 'grammar.ra', 393 +module_eval <<'.,.,', 'grammar.ra', 386 def _reduce_93( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 402 +module_eval <<'.,.,', 'grammar.ra', 395 def _reduce_94( val, _values, result ) if val[0].instance_of?(AST::ASTArray) - val[0].push(val[2]) - result = val[0] - else - result = ast AST::ASTArray, :children => [val[0],val[2]] - end + val[0].push(val[2]) + result = val[0] + else + result = ast AST::ASTArray, :children => [val[0],val[2]] + end result end .,., # reduce 95 omitted -module_eval <<'.,.,', 'grammar.ra', 411 +module_eval <<'.,.,', 'grammar.ra', 404 def _reduce_96( val, _values, result ) if val[0].instance_of?(AST::ASTArray) - result = val[0].push(val[2]) - else - result = ast AST::ASTArray, :children => [val[0],val[2]] - end + result = val[0].push(val[2]) + else + result = ast AST::ASTArray, :children => [val[0],val[2]] + end result end .,., # reduce 97 omitted # reduce 98 omitted # reduce 99 omitted # reduce 100 omitted # reduce 101 omitted # reduce 102 omitted # reduce 103 omitted # reduce 104 omitted # reduce 105 omitted # reduce 106 omitted # reduce 107 omitted # reduce 108 omitted # reduce 109 omitted # reduce 110 omitted # reduce 111 omitted # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted -module_eval <<'.,.,', 'grammar.ra', 440 +module_eval <<'.,.,', 'grammar.ra', 433 def _reduce_115( val, _values, result ) - args = aryfy(val[2]) - result = ast AST::Function, - :name => val[0][:value], :line => val[0][:line], - :arguments => args, - :ftype => :rvalue + args = aryfy(val[2]) + result = ast AST::Function, + :name => val[0][:value], :line => val[0][:line], + :arguments => args, + :ftype => :rvalue result end .,., -module_eval <<'.,.,', 'grammar.ra', 445 +module_eval <<'.,.,', 'grammar.ra', 438 def _reduce_116( val, _values, result ) - result = ast AST::Function, - :name => val[0][:value], :line => val[0][:line], - :arguments => AST::ASTArray.new({}), - :ftype => :rvalue + result = ast AST::Function, + :name => val[0][:value], :line => val[0][:line], + :arguments => AST::ASTArray.new({}), + :ftype => :rvalue result end .,., -module_eval <<'.,.,', 'grammar.ra', 446 +module_eval <<'.,.,', 'grammar.ra', 439 def _reduce_117( val, _values, result ) result = ast AST::String, :value => val[0][:value], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 447 +module_eval <<'.,.,', 'grammar.ra', 440 def _reduce_118( val, _values, result ) result = ast AST::Concat, :value => [ast(AST::String,val[0])]+val[1], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 449 +module_eval <<'.,.,', 'grammar.ra', 442 def _reduce_119( val, _values, result ) result = [val[0]] + val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 451 +module_eval <<'.,.,', 'grammar.ra', 444 def _reduce_120( val, _values, result ) result = [ast(AST::String,val[0])] result end .,., -module_eval <<'.,.,', 'grammar.ra', 452 +module_eval <<'.,.,', 'grammar.ra', 445 def _reduce_121( val, _values, result ) result = [ast(AST::String,val[0])] + val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 457 +module_eval <<'.,.,', 'grammar.ra', 450 def _reduce_122( val, _values, result ) - result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line] + result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 462 +module_eval <<'.,.,', 'grammar.ra', 455 def _reduce_123( val, _values, result ) - Puppet.warning addcontext("Deprecation notice: Resource references should now be capitalized") - result = ast AST::ResourceReference, :type => val[0][:value], :line => val[0][:line], :title => val[2] + Puppet.warning addcontext("Deprecation notice: Resource references should now be capitalized") + result = ast AST::ResourceReference, :type => val[0][:value], :line => val[0][:line], :title => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 464 +module_eval <<'.,.,', 'grammar.ra', 457 def _reduce_124( val, _values, result ) - result = ast AST::ResourceReference, :type => val[0], :title => val[2] + result = ast AST::ResourceReference, :type => val[0], :title => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 468 +module_eval <<'.,.,', 'grammar.ra', 461 def _reduce_125( val, _values, result ) - result = val[1] + result = val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 482 +module_eval <<'.,.,', 'grammar.ra', 473 def _reduce_126( val, _values, result ) - @lexer.commentpop - args = { - :test => val[0], - :statements => val[2] - } + @lexer.commentpop + args = { + :test => val[0], + :statements => val[2] + } - if val[4] - args[:else] = val[4] - end + args[:else] = val[4] if val[4] - result = ast AST::IfStatement, args + result = ast AST::IfStatement, args result end .,., -module_eval <<'.,.,', 'grammar.ra', 495 +module_eval <<'.,.,', 'grammar.ra', 484 def _reduce_127( val, _values, result ) @lexer.commentpop args = { - :test => val[0], - :statements => ast(AST::Nop) - } + :test => val[0], + :statements => ast(AST::Nop) + } - if val[3] - args[:else] = val[3] - end + args[:else] = val[3] if val[3] - result = ast AST::IfStatement, args + result = ast AST::IfStatement, args result end .,., # reduce 128 omitted -module_eval <<'.,.,', 'grammar.ra', 501 +module_eval <<'.,.,', 'grammar.ra', 489 def _reduce_129( val, _values, result ) - #@lexer.commentpop result = ast AST::Else, :statements => val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 505 +module_eval <<'.,.,', 'grammar.ra', 493 def _reduce_130( val, _values, result ) @lexer.commentpop result = ast AST::Else, :statements => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 509 +module_eval <<'.,.,', 'grammar.ra', 497 def _reduce_131( val, _values, result ) @lexer.commentpop result = ast AST::Else, :statements => ast(AST::Nop) result end .,., # reduce 132 omitted -module_eval <<'.,.,', 'grammar.ra', 526 +module_eval <<'.,.,', 'grammar.ra', 514 def _reduce_133( val, _values, result ) result = ast AST::InOperator, :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 529 +module_eval <<'.,.,', 'grammar.ra', 517 def _reduce_134( val, _values, result ) result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 532 +module_eval <<'.,.,', 'grammar.ra', 520 def _reduce_135( val, _values, result ) result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 535 +module_eval <<'.,.,', 'grammar.ra', 523 def _reduce_136( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 538 +module_eval <<'.,.,', 'grammar.ra', 526 def _reduce_137( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 541 +module_eval <<'.,.,', 'grammar.ra', 529 def _reduce_138( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 544 +module_eval <<'.,.,', 'grammar.ra', 532 def _reduce_139( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 547 +module_eval <<'.,.,', 'grammar.ra', 535 def _reduce_140( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 550 +module_eval <<'.,.,', 'grammar.ra', 538 def _reduce_141( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 553 +module_eval <<'.,.,', 'grammar.ra', 541 def _reduce_142( val, _values, result ) result = ast AST::Minus, :value => val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 556 +module_eval <<'.,.,', 'grammar.ra', 544 def _reduce_143( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 559 +module_eval <<'.,.,', 'grammar.ra', 547 def _reduce_144( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 562 +module_eval <<'.,.,', 'grammar.ra', 550 def _reduce_145( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 565 +module_eval <<'.,.,', 'grammar.ra', 553 def _reduce_146( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 568 +module_eval <<'.,.,', 'grammar.ra', 556 def _reduce_147( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 571 +module_eval <<'.,.,', 'grammar.ra', 559 def _reduce_148( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 574 +module_eval <<'.,.,', 'grammar.ra', 562 def _reduce_149( val, _values, result ) result = ast AST::Not, :value => val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 577 +module_eval <<'.,.,', 'grammar.ra', 565 def _reduce_150( val, _values, result ) result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 580 +module_eval <<'.,.,', 'grammar.ra', 568 def _reduce_151( val, _values, result ) result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 583 +module_eval <<'.,.,', 'grammar.ra', 571 def _reduce_152( val, _values, result ) result = val[1] result end .,., -module_eval <<'.,.,', 'grammar.ra', 592 +module_eval <<'.,.,', 'grammar.ra', 578 def _reduce_153( val, _values, result ) - @lexer.commentpop - options = val[3] - unless options.instance_of?(AST::ASTArray) - options = ast AST::ASTArray, :children => [val[3]] - end - result = ast AST::CaseStatement, :test => val[1], :options => options + @lexer.commentpop + options = val[3] + options = ast AST::ASTArray, :children => [val[3]] unless options.instance_of?(AST::ASTArray) + result = ast AST::CaseStatement, :test => val[1], :options => options result end .,., # reduce 154 omitted -module_eval <<'.,.,', 'grammar.ra', 602 +module_eval <<'.,.,', 'grammar.ra', 588 def _reduce_155( val, _values, result ) if val[0].instance_of?(AST::ASTArray) - val[0].push val[1] - result = val[0] - else - result = ast AST::ASTArray, :children => [val[0], val[1]] - end + val[0].push val[1] + result = val[0] + else + result = ast AST::ASTArray, :children => [val[0], val[1]] + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 607 +module_eval <<'.,.,', 'grammar.ra', 593 def _reduce_156( val, _values, result ) - @lexer.commentpop - result = ast AST::CaseOpt, :value => val[0], :statements => val[3] + @lexer.commentpop + result = ast AST::CaseOpt, :value => val[0], :statements => val[3] result end .,., -module_eval <<'.,.,', 'grammar.ra', 613 +module_eval <<'.,.,', 'grammar.ra', 602 def _reduce_157( val, _values, result ) - @lexer.commentpop - result = ast(AST::CaseOpt, - :value => val[0], - :statements => ast(AST::ASTArray) - ) + @lexer.commentpop + + result = ast( + AST::CaseOpt, + :value => val[0], + + :statements => ast(AST::ASTArray) + ) result end .,., # reduce 158 omitted -module_eval <<'.,.,', 'grammar.ra', 623 +module_eval <<'.,.,', 'grammar.ra', 612 def _reduce_159( val, _values, result ) if val[0].instance_of?(AST::ASTArray) - val[0].push(val[2]) - result = val[0] - else - result = ast AST::ASTArray, :children => [val[0],val[2]] - end + val[0].push(val[2]) + result = val[0] + else + result = ast AST::ASTArray, :children => [val[0],val[2]] + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 627 +module_eval <<'.,.,', 'grammar.ra', 616 def _reduce_160( val, _values, result ) - result = ast AST::Selector, :param => val[0], :values => val[2] + result = ast AST::Selector, :param => val[0], :values => val[2] result end .,., # reduce 161 omitted -module_eval <<'.,.,', 'grammar.ra', 633 +module_eval <<'.,.,', 'grammar.ra', 622 def _reduce_162( val, _values, result ) @lexer.commentpop result = val[1] result end .,., # reduce 163 omitted -module_eval <<'.,.,', 'grammar.ra', 643 +module_eval <<'.,.,', 'grammar.ra', 632 def _reduce_164( val, _values, result ) if val[0].instance_of?(AST::ASTArray) - val[0].push(val[2]) - result = val[0] - else - result = ast AST::ASTArray, :children => [val[0],val[2]] - end + val[0].push(val[2]) + result = val[0] + else + result = ast AST::ASTArray, :children => [val[0],val[2]] + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 647 +module_eval <<'.,.,', 'grammar.ra', 636 def _reduce_165( val, _values, result ) - result = ast AST::ResourceParam, :param => val[0], :value => val[2] + result = ast AST::ResourceParam, :param => val[0], :value => val[2] result end .,., # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted -module_eval <<'.,.,', 'grammar.ra', 658 +module_eval <<'.,.,', 'grammar.ra', 647 def _reduce_173( val, _values, result ) result = ast AST::Default, :value => val[0][:value], :line => val[0][:line] result end .,., # reduce 174 omitted -module_eval <<'.,.,', 'grammar.ra', 661 +module_eval <<'.,.,', 'grammar.ra', 650 def _reduce_175( val, _values, result ) result = [val[0][:value]] result end .,., # reduce 176 omitted -module_eval <<'.,.,', 'grammar.ra', 663 +module_eval <<'.,.,', 'grammar.ra', 652 def _reduce_177( val, _values, result ) result = val[0] += val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 672 +module_eval <<'.,.,', 'grammar.ra', 661 def _reduce_178( val, _values, result ) - val[1].each do |file| - import(file) - end + val[1].each do |file| + import(file) + end - result = AST::ASTArray.new(:children => []) + result = AST::ASTArray.new(:children => []) result end .,., -module_eval <<'.,.,', 'grammar.ra', 683 +module_eval <<'.,.,', 'grammar.ra', 672 def _reduce_179( val, _values, result ) - @lexer.commentpop - newdefine classname(val[1]), :arguments => val[2], :code => val[4], :line => val[0][:line] - @lexer.indefine = false - result = nil + @lexer.commentpop + newdefine classname(val[1]), :arguments => val[2], :code => val[4], :line => val[0][:line] + @lexer.indefine = false + result = nil #} | DEFINE NAME argumentlist parent LBRACE RBRACE { result end .,., -module_eval <<'.,.,', 'grammar.ra', 688 +module_eval <<'.,.,', 'grammar.ra', 677 def _reduce_180( val, _values, result ) - @lexer.commentpop - newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line] - @lexer.indefine = false - result = nil + @lexer.commentpop + newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line] + @lexer.indefine = false + result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 697 +module_eval <<'.,.,', 'grammar.ra', 686 def _reduce_181( val, _values, result ) - @lexer.commentpop - # Our class gets defined in the parent namespace, not our own. - @lexer.namepop - newclass classname(val[1]), :arguments => val[2], :parent => val[3], :code => val[5], :line => val[0][:line] - result = nil + @lexer.commentpop + # Our class gets defined in the parent namespace, not our own. + @lexer.namepop + newclass classname(val[1]), :arguments => val[2], :parent => val[3], :code => val[5], :line => val[0][:line] + result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 703 +module_eval <<'.,.,', 'grammar.ra', 692 def _reduce_182( val, _values, result ) - @lexer.commentpop - # Our class gets defined in the parent namespace, not our own. - @lexer.namepop - newclass classname(val[1]), :arguments => val[2], :parent => val[3], :line => val[0][:line] - result = nil + @lexer.commentpop + # Our class gets defined in the parent namespace, not our own. + @lexer.namepop + newclass classname(val[1]), :arguments => val[2], :parent => val[3], :line => val[0][:line] + result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 709 +module_eval <<'.,.,', 'grammar.ra', 698 def _reduce_183( val, _values, result ) - @lexer.commentpop - newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line] - result = nil + @lexer.commentpop + newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line] + result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 713 +module_eval <<'.,.,', 'grammar.ra', 702 def _reduce_184( val, _values, result ) - @lexer.commentpop - newnode val[1], :parent => val[2], :line => val[0][:line] - result = nil + @lexer.commentpop + newnode val[1], :parent => val[2], :line => val[0][:line] + result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 714 +module_eval <<'.,.,', 'grammar.ra', 703 def _reduce_185( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 716 +module_eval <<'.,.,', 'grammar.ra', 705 def _reduce_186( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 717 +module_eval <<'.,.,', 'grammar.ra', 706 def _reduce_187( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 718 +module_eval <<'.,.,', 'grammar.ra', 707 def _reduce_188( val, _values, result ) result = "class" result end .,., # reduce 189 omitted -module_eval <<'.,.,', 'grammar.ra', 728 +module_eval <<'.,.,', 'grammar.ra', 717 def _reduce_190( val, _values, result ) result = val[0] result = [result] unless result.is_a?(Array) result << val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 732 +module_eval <<'.,.,', 'grammar.ra', 721 def _reduce_191( val, _values, result ) - result = ast AST::HostName, :value => val[0] + result = ast AST::HostName, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 733 +module_eval <<'.,.,', 'grammar.ra', 722 def _reduce_192( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 734 +module_eval <<'.,.,', 'grammar.ra', 723 def _reduce_193( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 735 +module_eval <<'.,.,', 'grammar.ra', 724 def _reduce_194( val, _values, result ) result = val[0][:value] result end .,., # reduce 195 omitted -module_eval <<'.,.,', 'grammar.ra', 741 +module_eval <<'.,.,', 'grammar.ra', 730 def _reduce_196( val, _values, result ) - result = nil + result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 745 +module_eval <<'.,.,', 'grammar.ra', 734 def _reduce_197( val, _values, result ) - result = ast AST::ASTArray, :children => [] + result = ast AST::ASTArray, :children => [] result end .,., # reduce 198 omitted -module_eval <<'.,.,', 'grammar.ra', 750 +module_eval <<'.,.,', 'grammar.ra', 739 def _reduce_199( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 754 +module_eval <<'.,.,', 'grammar.ra', 743 def _reduce_200( val, _values, result ) result = val[1] result = [result] unless result[0].is_a?(Array) result end .,., # reduce 201 omitted -module_eval <<'.,.,', 'grammar.ra', 761 +module_eval <<'.,.,', 'grammar.ra', 750 def _reduce_202( val, _values, result ) result = val[0] result = [result] unless result[0].is_a?(Array) result << val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 766 +module_eval <<'.,.,', 'grammar.ra', 755 def _reduce_203( val, _values, result ) - Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") - result = [val[0][:value], val[2]] + Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") + result = [val[0][:value], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 770 +module_eval <<'.,.,', 'grammar.ra', 759 def _reduce_204( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0][:value]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 772 +module_eval <<'.,.,', 'grammar.ra', 761 def _reduce_205( val, _values, result ) - result = [val[0][:value], val[2]] + result = [val[0][:value], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 774 +module_eval <<'.,.,', 'grammar.ra', 763 def _reduce_206( val, _values, result ) - result = [val[0][:value]] + result = [val[0][:value]] result end .,., # reduce 207 omitted -module_eval <<'.,.,', 'grammar.ra', 779 +module_eval <<'.,.,', 'grammar.ra', 768 def _reduce_208( val, _values, result ) result = val[1] result end .,., # reduce 209 omitted -module_eval <<'.,.,', 'grammar.ra', 784 +module_eval <<'.,.,', 'grammar.ra', 773 def _reduce_210( val, _values, result ) result = val[1] result end .,., # reduce 211 omitted # reduce 212 omitted -module_eval <<'.,.,', 'grammar.ra', 790 +module_eval <<'.,.,', 'grammar.ra', 779 def _reduce_213( val, _values, result ) - result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line] + result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 798 +module_eval <<'.,.,', 'grammar.ra', 787 def _reduce_214( val, _values, result ) - if val[1].instance_of?(AST::ASTArray) - result = val[1] - else - result = ast AST::ASTArray, :children => [val[1]] - end + if val[1].instance_of?(AST::ASTArray) + result = val[1] + else + result = ast AST::ASTArray, :children => [val[1]] + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 805 +module_eval <<'.,.,', 'grammar.ra', 794 def _reduce_215( val, _values, result ) if val[1].instance_of?(AST::ASTArray) - result = val[1] - else - result = ast AST::ASTArray, :children => [val[1]] - end + result = val[1] + else + result = ast AST::ASTArray, :children => [val[1]] + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 807 +module_eval <<'.,.,', 'grammar.ra', 796 def _reduce_216( val, _values, result ) - result = ast AST::ASTArray + result = ast AST::ASTArray result end .,., # reduce 217 omitted # reduce 218 omitted # reduce 219 omitted -module_eval <<'.,.,', 'grammar.ra', 812 +module_eval <<'.,.,', 'grammar.ra', 801 def _reduce_220( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 817 +module_eval <<'.,.,', 'grammar.ra', 806 def _reduce_221( val, _values, result ) - result = ast AST::Regex, :value => val[0][:value] + result = ast AST::Regex, :value => val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 825 +module_eval <<'.,.,', 'grammar.ra', 814 def _reduce_222( val, _values, result ) - if val[1].instance_of?(AST::ASTHash) - result = val[1] - else - result = ast AST::ASTHash, { :value => val[1] } - end + if val[1].instance_of?(AST::ASTHash) + result = val[1] + else + result = ast AST::ASTHash, { :value => val[1] } + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 832 +module_eval <<'.,.,', 'grammar.ra', 821 def _reduce_223( val, _values, result ) if val[1].instance_of?(AST::ASTHash) - result = val[1] - else - result = ast AST::ASTHash, { :value => val[1] } - end + result = val[1] + else + result = ast AST::ASTHash, { :value => val[1] } + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 834 +module_eval <<'.,.,', 'grammar.ra', 823 def _reduce_224( val, _values, result ) - result = ast AST::ASTHash + result = ast AST::ASTHash result end .,., # reduce 225 omitted -module_eval <<'.,.,', 'grammar.ra', 844 +module_eval <<'.,.,', 'grammar.ra', 833 def _reduce_226( val, _values, result ) if val[0].instance_of?(AST::ASTHash) - result = val[0].merge(val[2]) - else - result = ast AST::ASTHash, :value => val[0] - result.merge(val[2]) - end + result = val[0].merge(val[2]) + else + result = ast AST::ASTHash, :value => val[0] + result.merge(val[2]) + end result end .,., -module_eval <<'.,.,', 'grammar.ra', 848 +module_eval <<'.,.,', 'grammar.ra', 837 def _reduce_227( val, _values, result ) - result = ast AST::ASTHash, { :value => { val[0] => val[2] } } + result = ast AST::ASTHash, { :value => { val[0] => val[2] } } result end .,., -module_eval <<'.,.,', 'grammar.ra', 849 +module_eval <<'.,.,', 'grammar.ra', 838 def _reduce_228( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 850 +module_eval <<'.,.,', 'grammar.ra', 839 def _reduce_229( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 855 +module_eval <<'.,.,', 'grammar.ra', 844 def _reduce_230( val, _values, result ) - result = ast AST::HashOrArrayAccess, :variable => val[0][:value], :key => val[2] + result = ast AST::HashOrArrayAccess, :variable => val[0][:value], :key => val[2] result end .,., # reduce 231 omitted -module_eval <<'.,.,', 'grammar.ra', 860 +module_eval <<'.,.,', 'grammar.ra', 849 def _reduce_232( val, _values, result ) result = ast AST::HashOrArrayAccess, :variable => val[0], :key => val[2] result end .,., def _reduce_none( val, _values, result ) result end end # class Parser end # module Parser end # module Puppet diff --git a/spec/unit/parser/parser_spec.rb b/spec/unit/parser/parser_spec.rb index 2f5d4b8ea..6cc393d91 100755 --- a/spec/unit/parser/parser_spec.rb +++ b/spec/unit/parser/parser_spec.rb @@ -1,437 +1,443 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../../spec_helper' describe Puppet::Parser do ast = Puppet::Parser::AST before :each do @known_resource_types = Puppet::Resource::TypeCollection.new("development") @parser = Puppet::Parser::Parser.new "development" @parser.stubs(:known_resource_types).returns @known_resource_types @true_ast = Puppet::Parser::AST::Boolean.new :value => true end it "should require an environment at initialization" do lambda { Puppet::Parser::Parser.new }.should raise_error(ArgumentError) end it "should set the environment" do env = Puppet::Node::Environment.new Puppet::Parser::Parser.new(env).environment.should == env end it "should convert the environment into an environment instance if a string is provided" do env = Puppet::Node::Environment.new("testing") Puppet::Parser::Parser.new("testing").environment.should == env end it "should be able to look up the environment-specific resource type collection" do rtc = Puppet::Node::Environment.new("development").known_resource_types parser = Puppet::Parser::Parser.new "development" parser.known_resource_types.should equal(rtc) end it "should delegate importing to the known resource type loader" do parser = Puppet::Parser::Parser.new "development" parser.known_resource_types.loader.expects(:import).with("newfile", "current_file") parser.lexer.expects(:file).returns "current_file" parser.import("newfile") end describe "when parsing files" do before do FileTest.stubs(:exist?).returns true File.stubs(:read).returns "" @parser.stubs(:watch_file) end it "should treat files ending in 'rb' as ruby files" do @parser.expects(:parse_ruby_file) @parser.file = "/my/file.rb" @parser.parse end end describe "when parsing append operator" do it "should not raise syntax errors" do lambda { @parser.parse("$var += something") }.should_not raise_error end it "shouldraise syntax error on incomplete syntax " do lambda { @parser.parse("$var += ") }.should raise_error end it "should call ast::VarDef with append=true" do ast::VarDef.expects(:new).with { |h| h[:append] == true } @parser.parse("$var += 2") end it "should work with arrays too" do ast::VarDef.expects(:new).with { |h| h[:append] == true } @parser.parse("$var += ['test']") end end + describe "when parsing selector" do + it "should support hash access on the left hand side" do + lambda { @parser.parse("$h = { 'a' => 'b' } $a = $h['a'] ? { 'b' => 'd', default => undef }") }.should_not raise_error + end + end + describe "when parsing 'if'" do it "not, it should create the correct ast objects" do ast::Not.expects(:new).with { |h| h[:value].is_a?(ast::Boolean) } @parser.parse("if ! true { $var = 1 }") end it "boolean operation, it should create the correct ast objects" do ast::BooleanOperator.expects(:new).with { |h| h[:rval].is_a?(ast::Boolean) and h[:lval].is_a?(ast::Boolean) and h[:operator]=="or" } @parser.parse("if true or true { $var = 1 }") end it "comparison operation, it should create the correct ast objects" do ast::ComparisonOperator.expects(:new).with { |h| h[:lval].is_a?(ast::Name) and h[:rval].is_a?(ast::Name) and h[:operator]=="<" } @parser.parse("if 1 < 2 { $var = 1 }") end end describe "when parsing if complex expressions" do it "should create a correct ast tree" do aststub = stub_everything 'ast' ast::ComparisonOperator.expects(:new).with { |h| h[:rval].is_a?(ast::Name) and h[:lval].is_a?(ast::Name) and h[:operator]==">" }.returns(aststub) ast::ComparisonOperator.expects(:new).with { |h| h[:rval].is_a?(ast::Name) and h[:lval].is_a?(ast::Name) and h[:operator]=="==" }.returns(aststub) ast::BooleanOperator.expects(:new).with { |h| h[:rval]==aststub and h[:lval]==aststub and h[:operator]=="and" } @parser.parse("if (1 > 2) and (1 == 2) { $var = 1 }") end it "should raise an error on incorrect expression" do lambda { @parser.parse("if (1 > 2 > ) or (1 == 2) { $var = 1 }") }.should raise_error end end describe "when parsing resource references" do it "should not raise syntax errors" do lambda { @parser.parse('exec { test: param => File["a"] }') }.should_not raise_error end it "should not raise syntax errors with multiple references" do lambda { @parser.parse('exec { test: param => File["a","b"] }') }.should_not raise_error end it "should create an ast::ResourceReference" do ast::Resource.stubs(:new) ast::ResourceReference.expects(:new).with { |arg| arg[:line]==1 and arg[:type]=="File" and arg[:title].is_a?(ast::ASTArray) } @parser.parse('exec { test: command => File["a","b"] }') end end describe "when parsing resource overrides" do it "should not raise syntax errors" do lambda { @parser.parse('Resource["title"] { param => value }') }.should_not raise_error end it "should not raise syntax errors with multiple overrides" do lambda { @parser.parse('Resource["title1","title2"] { param => value }') }.should_not raise_error end it "should create an ast::ResourceOverride" do ast::ResourceOverride.expects(:new).with { |arg| arg[:line]==1 and arg[:object].is_a?(ast::ResourceReference) and arg[:parameters].is_a?(ast::ResourceParam) } @parser.parse('Resource["title1","title2"] { param => value }') end end describe "when parsing if statements" do it "should not raise errors with empty if" do lambda { @parser.parse("if true { }") }.should_not raise_error end it "should not raise errors with empty else" do lambda { @parser.parse("if false { notice('if') } else { }") }.should_not raise_error end it "should not raise errors with empty if and else" do lambda { @parser.parse("if false { } else { }") }.should_not raise_error end it "should create a nop node for empty branch" do ast::Nop.expects(:new) @parser.parse("if true { }") end it "should create a nop node for empty else branch" do ast::Nop.expects(:new) @parser.parse("if true { notice('test') } else { }") end it "should build a chain of 'ifs' if there's an 'elsif'" do ast = @parser.parse(<<-PP) if true { notice('test') } elsif true {} else { } PP end end describe "when parsing function calls" do it "should not raise errors with no arguments" do lambda { @parser.parse("tag()") }.should_not raise_error end it "should not raise errors with rvalue function with no args" do lambda { @parser.parse("$a = template()") }.should_not raise_error end it "should not raise errors with arguments" do lambda { @parser.parse("notice(1)") }.should_not raise_error end it "should not raise errors with multiple arguments" do lambda { @parser.parse("notice(1,2)") }.should_not raise_error end it "should not raise errors with multiple arguments and a trailing comma" do lambda { @parser.parse("notice(1,2,)") }.should_not raise_error end end describe "when parsing arrays with trailing comma" do it "should not raise errors with a trailing comma" do lambda { @parser.parse("$a = [1,2,]") }.should_not raise_error end end describe "when providing AST context" do before do @lexer = stub 'lexer', :line => 50, :file => "/foo/bar", :getcomment => "whev" @parser.stubs(:lexer).returns @lexer end it "should include the lexer's line" do @parser.ast_context[:line].should == 50 end it "should include the lexer's file" do @parser.ast_context[:file].should == "/foo/bar" end it "should include the docs if directed to do so" do @parser.ast_context(true)[:doc].should == "whev" end it "should not include the docs when told not to" do @parser.ast_context(false)[:doc].should be_nil end it "should not include the docs by default" do @parser.ast_context[:doc].should be_nil end end describe "when building ast nodes" do before do @lexer = stub 'lexer', :line => 50, :file => "/foo/bar", :getcomment => "whev" @parser.stubs(:lexer).returns @lexer @class = stub 'class', :use_docs => false end it "should return a new instance of the provided class created with the provided options" do @class.expects(:new).with { |opts| opts[:foo] == "bar" } @parser.ast(@class, :foo => "bar") end it "should merge the ast context into the provided options" do @class.expects(:new).with { |opts| opts[:file] == "/foo" } @parser.expects(:ast_context).returns :file => "/foo" @parser.ast(@class, :foo => "bar") end it "should prefer provided options over AST context" do @class.expects(:new).with { |opts| opts[:file] == "/bar" } @lexer.expects(:file).returns "/foo" @parser.ast(@class, :file => "/bar") end it "should include docs when the AST class uses them" do @class.expects(:use_docs).returns true @class.stubs(:new) @parser.expects(:ast_context).with{ |docs, line| docs == true }.returns({}) @parser.ast(@class, :file => "/bar") end it "should get docs from lexer using the correct AST line number" do @class.expects(:use_docs).returns true @class.stubs(:new).with{ |a| a[:doc] == "doc" } @lexer.expects(:getcomment).with(12).returns "doc" @parser.ast(@class, :file => "/bar", :line => 12) end end describe "when creating a node" do before :each do @lexer = stub 'lexer' @lexer.stubs(:getcomment) @parser.stubs(:lexer).returns(@lexer) @node = stub_everything 'node' @parser.stubs(:ast_context).returns({}) @parser.stubs(:node).returns(nil) @nodename = stub 'nodename', :is_a? => false, :value => "foo" @nodename.stubs(:is_a?).with(Puppet::Parser::AST::HostName).returns(true) end it "should return an array of nodes" do @parser.newnode(@nodename).should be_instance_of(Array) end it "should initialize the ast context with the correct line number" do @parser.expects(:ast_context).with { |a,b| b == 123 }.returns({}) @parser.newnode(@nodename, { :line => 123 }) end end %w{class define}.each do |entity| describe "when creating a #{entity}" do before :each do @parser.stubs(:ast_context).returns({}) @name = stub "#{entity}name", :is_a? => false, :value => "foo" end it "should create and add the correct resource type" do instance = stub 'instance' Puppet::Resource::Type.expects(:new).returns(instance) @parser.known_resource_types.expects(:add).with(instance) @parser.send("new#{entity}", @name) end it "should initialize the ast context with the correct line number" do @parser.expects(:ast_context).with { |a,b| b == 123 }.returns({}) @parser.send("new#{entity}", @name, { :line => 123 }) end end end describe "when retrieving a specific node" do it "should delegate to the known_resource_types node" do @known_resource_types.expects(:node).with("node") @parser.node("node") end end describe "when retrieving a specific class" do it "should delegate to the loaded code" do @known_resource_types.expects(:hostclass).with("class") @parser.hostclass("class") end end describe "when retrieving a specific definitions" do it "should delegate to the loaded code" do @known_resource_types.expects(:definition).with("define") @parser.definition("define") end end describe "when determining the configuration version" do it "should determine it from the resource type collection" do @parser.known_resource_types.expects(:version).returns "foo" @parser.version.should == "foo" end end describe "when looking up definitions" do it "should use the known resource types to check for them by name" do @parser.known_resource_types.stubs(:find_or_load).with("namespace","name",:definition).returns(:this_value) @parser.find_definition("namespace","name").should == :this_value end end describe "when looking up hostclasses" do it "should use the known resource types to check for them by name" do @parser.known_resource_types.stubs(:find_or_load).with("namespace","name",:hostclass).returns(:this_value) @parser.find_hostclass("namespace","name").should == :this_value end end describe "when parsing classes" do before :each do @krt = Puppet::Resource::TypeCollection.new("development") @parser = Puppet::Parser::Parser.new "development" @parser.stubs(:known_resource_types).returns @krt end it "should create new classes" do @parser.parse("class foobar {}") @krt.hostclass("foobar").should be_instance_of(Puppet::Resource::Type) end it "should correctly set the parent class when one is provided" do @parser.parse("class foobar inherits yayness {}") @krt.hostclass("foobar").parent.should == "yayness" end it "should correctly set the parent class for multiple classes at a time" do @parser.parse("class foobar inherits yayness {}\nclass boo inherits bar {}") @krt.hostclass("foobar").parent.should == "yayness" @krt.hostclass("boo").parent.should == "bar" end it "should define the code when some is provided" do @parser.parse("class foobar { $var = val }") @krt.hostclass("foobar").code.should_not be_nil end it "should define parameters when provided" do @parser.parse("class foobar($biz,$baz) {}") @krt.hostclass("foobar").arguments.should == {"biz" => nil, "baz" => nil} end end describe "when parsing resources" do before :each do @krt = Puppet::Resource::TypeCollection.new("development") @parser = Puppet::Parser::Parser.new "development" @parser.stubs(:known_resource_types).returns @krt end it "should be able to parse class resources" do @krt.add(Puppet::Resource::Type.new(:hostclass, "foobar", :arguments => {"biz" => nil})) lambda { @parser.parse("class { foobar: biz => stuff }") }.should_not raise_error end it "should correctly mark exported resources as exported" do @parser.parse("@@file { '/file': }") @krt.hostclass("").code[0].exported.should be_true end it "should correctly mark virtual resources as virtual" do @parser.parse("@file { '/file': }") @krt.hostclass("").code[0].virtual.should be_true end end end