diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra index 0e090187d..b65e3d2da 100644 --- a/lib/puppet/parser/grammar.ra +++ b/lib/puppet/parser/grammar.ra @@ -1,862 +1,863 @@ # vim: syntax=ruby # the parser class Puppet::Parser::Parser token LBRACK DQTEXT SQTEXT 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 prechigh right NOT nonassoc UMINUS left 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 | import | fstatement | definition | hostclass | nodedef | resourceoverride | append 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] if array.instance_of?(AST::ResourceInstance) array = [array] end 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], :params => 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 result = ast(AST::ResourceDefaults, :type => val[0], :params => 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], :params => 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 if val[1].is_a? AST::ResourceDefaults error "Defaults are not virtualizable" end 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 { 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 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 { 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] } | 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: DQTEXT { result = ast AST::String, :value => val[0][:value], :line => val[0][:line] } | SQTEXT { result = ast AST::FlatString, :value => val[0][:value], :line => val[0][:line] } 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: IF expression LBRACE statements RBRACE else { @lexer.commentpop args = { :test => val[1], :statements => val[3] } if val[5] args[:else] = val[5] end result = ast AST::IfStatement, args } | IF expression LBRACE RBRACE else { @lexer.commentpop args = { :test => val[1], :statements => ast(AST::Nop) } if val[4] args[:else] = val[4] end result = ast AST::IfStatement, args } else: # nothing | 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 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] unless options.instance_of?(AST::ASTArray) options = ast AST::ASTArray, :children => [val[3]] end 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 | 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. qtexts: quotedtext { result = [val[0].value] } | qtexts COMMA quotedtext { results = val[0] << val[2].value } import: IMPORT qtexts { 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 classparent 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]), :code => val[4], :parent => val[2], :line => val[0][:line] + newclass classname(val[1]), :arguments => val[2], :code => val[5], :parent => val[3], :line => val[0][:line] result = nil -} | CLASS classname classparent LBRACE RBRACE { +} | 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]), :parent => val[2], :line => val[0][:line] + 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] } | SQTEXT { result = val[0][:value] } | DQTEXT { 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] } | SQTEXT { result = val[0][:value] } | DQTEXT { result = val[0][:value] } 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 Puppet[:typecheck] = true Puppet[:paramcheck] = true ---- 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 a3dc5be9b..4f3c31cc1 100644 --- a/lib/puppet/parser/parser.rb +++ b/lib/puppet/parser/parser.rb @@ -1,2460 +1,2436 @@ # # 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 end Puppet[:typecheck] = true Puppet[:paramcheck] = true module Puppet module Parser class Parser < Racc::Parser -module_eval <<'..end grammar.ra modeval..id8da59540c6', 'grammar.ra', 852 +module_eval <<'..end grammar.ra modeval..id224179bc1a', 'grammar.ra', 853 # 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..id8da59540c6 +..end grammar.ra modeval..id224179bc1a ##### racc 1.4.5 generates ### racc_reduce_table = [ 0, 0, :racc_error, 1, 63, :_reduce_1, 1, 63, :_reduce_none, 1, 64, :_reduce_none, 2, 64, :_reduce_4, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 1, 66, :_reduce_none, 4, 74, :_reduce_18, 5, 74, :_reduce_19, 3, 74, :_reduce_20, 2, 74, :_reduce_21, 1, 80, :_reduce_none, 1, 80, :_reduce_none, 3, 80, :_reduce_24, 3, 80, :_reduce_25, 1, 81, :_reduce_none, 1, 81, :_reduce_none, 1, 81, :_reduce_none, 1, 81, :_reduce_none, 1, 81, :_reduce_none, 1, 81, :_reduce_none, 1, 81, :_reduce_none, 1, 81, :_reduce_none, 1, 81, :_reduce_34, 5, 67, :_reduce_35, 5, 67, :_reduce_36, 5, 67, :_reduce_37, 5, 78, :_reduce_38, 2, 68, :_reduce_39, 1, 98, :_reduce_40, 2, 98, :_reduce_41, 6, 69, :_reduce_42, 2, 69, :_reduce_43, 3, 99, :_reduce_44, 3, 99, :_reduce_45, 1, 100, :_reduce_none, 1, 100, :_reduce_none, 3, 100, :_reduce_48, 1, 101, :_reduce_none, 3, 101, :_reduce_50, 1, 102, :_reduce_51, 1, 102, :_reduce_52, 3, 103, :_reduce_53, 3, 103, :_reduce_54, 1, 104, :_reduce_none, 1, 104, :_reduce_none, 4, 106, :_reduce_57, 1, 92, :_reduce_none, 3, 92, :_reduce_59, 0, 93, :_reduce_none, 1, 93, :_reduce_none, 1, 108, :_reduce_62, 1, 83, :_reduce_63, 1, 85, :_reduce_64, 1, 107, :_reduce_none, 1, 107, :_reduce_none, 1, 107, :_reduce_none, 1, 107, :_reduce_none, 1, 107, :_reduce_none, 1, 107, :_reduce_none, 1, 107, :_reduce_none, 3, 70, :_reduce_72, 3, 70, :_reduce_73, 3, 79, :_reduce_74, 0, 94, :_reduce_75, 1, 94, :_reduce_76, 3, 94, :_reduce_77, 3, 112, :_reduce_78, 3, 114, :_reduce_79, 1, 115, :_reduce_none, 1, 115, :_reduce_none, 0, 97, :_reduce_82, 1, 97, :_reduce_83, 3, 97, :_reduce_84, 1, 116, :_reduce_none, 3, 116, :_reduce_86, 1, 105, :_reduce_none, 1, 105, :_reduce_none, 1, 105, :_reduce_none, 1, 105, :_reduce_none, 1, 105, :_reduce_none, 1, 105, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 1, 113, :_reduce_none, 4, 87, :_reduce_105, 3, 87, :_reduce_106, 1, 89, :_reduce_107, 1, 89, :_reduce_108, 1, 86, :_reduce_109, 4, 82, :_reduce_110, 4, 82, :_reduce_111, 6, 72, :_reduce_112, 5, 72, :_reduce_113, 0, 119, :_reduce_none, 4, 119, :_reduce_115, 3, 119, :_reduce_116, 1, 110, :_reduce_none, 3, 110, :_reduce_118, 3, 110, :_reduce_119, 3, 110, :_reduce_120, 3, 110, :_reduce_121, 3, 110, :_reduce_122, 3, 110, :_reduce_123, 3, 110, :_reduce_124, 3, 110, :_reduce_125, 2, 110, :_reduce_126, 3, 110, :_reduce_127, 3, 110, :_reduce_128, 3, 110, :_reduce_129, 3, 110, :_reduce_130, 3, 110, :_reduce_131, 3, 110, :_reduce_132, 2, 110, :_reduce_133, 3, 110, :_reduce_134, 3, 110, :_reduce_135, 3, 110, :_reduce_136, 5, 71, :_reduce_137, 1, 121, :_reduce_none, 2, 121, :_reduce_139, 5, 122, :_reduce_140, 4, 122, :_reduce_141, 1, 123, :_reduce_none, 3, 123, :_reduce_143, 3, 88, :_reduce_144, 1, 125, :_reduce_none, 4, 125, :_reduce_146, 1, 127, :_reduce_none, 3, 127, :_reduce_148, 3, 126, :_reduce_149, 1, 124, :_reduce_none, 1, 124, :_reduce_none, 1, 124, :_reduce_none, 1, 124, :_reduce_none, 1, 124, :_reduce_none, 1, 124, :_reduce_none, 1, 124, :_reduce_none, 1, 124, :_reduce_157, 1, 124, :_reduce_none, 1, 128, :_reduce_159, 3, 128, :_reduce_160, 2, 73, :_reduce_161, 6, 75, :_reduce_162, 5, 75, :_reduce_163, - 6, 76, :_reduce_164, - 5, 76, :_reduce_165, + 7, 76, :_reduce_164, + 6, 76, :_reduce_165, 6, 77, :_reduce_166, 5, 77, :_reduce_167, 1, 96, :_reduce_168, 1, 91, :_reduce_169, 1, 91, :_reduce_170, + 1, 91, :_reduce_171, 1, 131, :_reduce_none, - 3, 131, :_reduce_172, - 1, 133, :_reduce_173, - 1, 134, :_reduce_174, + 3, 131, :_reduce_173, + 1, 133, :_reduce_174, 1, 134, :_reduce_175, 1, 134, :_reduce_176, 1, 134, :_reduce_177, + 1, 134, :_reduce_178, 1, 134, :_reduce_none, - 0, 65, :_reduce_179, - 0, 135, :_reduce_180, + 0, 65, :_reduce_180, + 0, 135, :_reduce_181, 1, 129, :_reduce_none, - 3, 129, :_reduce_182, 3, 129, :_reduce_183, + 3, 129, :_reduce_184, 1, 136, :_reduce_none, - 3, 136, :_reduce_185, - 3, 137, :_reduce_186, - 1, 137, :_reduce_187, - 3, 137, :_reduce_188, - 1, 137, :_reduce_189, + 3, 136, :_reduce_186, + 3, 137, :_reduce_187, + 1, 137, :_reduce_188, + 3, 137, :_reduce_189, + 1, 137, :_reduce_190, 1, 132, :_reduce_none, - 2, 132, :_reduce_191, + 2, 132, :_reduce_192, 1, 130, :_reduce_none, - 2, 130, :_reduce_193, + 2, 130, :_reduce_194, 1, 138, :_reduce_none, 1, 138, :_reduce_none, - 1, 84, :_reduce_196, - 3, 109, :_reduce_197, - 4, 109, :_reduce_198, - 2, 109, :_reduce_199, + 1, 84, :_reduce_197, + 3, 109, :_reduce_198, + 4, 109, :_reduce_199, + 2, 109, :_reduce_200, 1, 117, :_reduce_none, 1, 117, :_reduce_none, 0, 95, :_reduce_none, - 1, 95, :_reduce_203, - 1, 120, :_reduce_204, - 3, 118, :_reduce_205, - 4, 118, :_reduce_206, - 2, 118, :_reduce_207, + 1, 95, :_reduce_204, + 1, 120, :_reduce_205, + 3, 118, :_reduce_206, + 4, 118, :_reduce_207, + 2, 118, :_reduce_208, 1, 139, :_reduce_none, - 3, 139, :_reduce_209, - 3, 140, :_reduce_210, - 1, 141, :_reduce_211, + 3, 139, :_reduce_210, + 3, 140, :_reduce_211, 1, 141, :_reduce_212, 1, 141, :_reduce_213, - 4, 111, :_reduce_214, + 1, 141, :_reduce_214, + 4, 111, :_reduce_215, 1, 90, :_reduce_none, - 4, 90, :_reduce_216 ] + 4, 90, :_reduce_217 ] -racc_reduce_n = 217 +racc_reduce_n = 218 -racc_shift_n = 358 +racc_shift_n = 360 racc_action_table = [ - 82, 61, 64, 317, 87, 172, 173, 211, 187, 308, - 276, 328, 42, 43, 330, 211, 121, 283, 275, 186, - 78, 82, 61, 64, 191, 87, 101, 329, 272, 273, - 102, 51, -153, 42, 43, 63, 66, 42, 43, 71, - 174, 119, -150, 103, 58, 84, 288, 44, 68, 215, - 46, 92, 51, 57, 172, 173, 63, 66, 175, 45, - 71, 149, 82, 61, 64, 58, 87, 104, 44, 68, - 45, 46, 44, 150, 303, 46, 274, 219, 314, 211, - 45, 141, 78, 82, 61, 64, 313, 87, 34, 174, - 218, 45, 150, 51, -152, 45, 291, 63, 66, 35, - 36, 71, 184, 78, 272, 273, 58, 84, 163, 187, - 68, 184, 259, 92, 51, 260, 154, 38, 63, 66, - 186, 45, 71, 38, 4, 191, 204, 58, 84, -154, - 4, 68, 295, 38, 92, 82, 61, 64, 141, 87, - 4, 9, 45, 187, 166, 167, 168, 152, 153, 155, - -155, 160, 164, 187, 186, 78, 82, 61, 64, 191, - 87, 38, 278, 298, 186, -151, 51, 281, 4, 191, - 63, 66, 168, 152, 71, 300, 78, 160, 164, 58, - 84, 163, 150, 68, 101, 278, 92, 51, -151, 154, - 281, 63, 66, 261, 45, 71, -156, 163, 221, -155, - 58, 84, 223, 224, 68, 154, -154, 92, 82, 61, - 64, -153, 87, 61, 64, 45, -150, 166, 167, 168, - 152, 153, 155, 180, 160, 164, 160, 164, 78, 57, - 61, 64, 149, 166, 167, 168, 152, 153, 155, 51, - 160, 164, 148, 63, 66, -168, 163, 71, 45, 53, - 61, 64, 58, 84, 154, 304, 68, 168, 152, 92, - 51, -152, 160, 164, 63, 66, 277, 45, 71, 181, - 272, 273, 55, 58, 82, 61, 64, 68, 87, 223, - 340, 182, 166, 167, 168, 152, 153, 155, 45, 160, - 164, 160, 164, 184, 78, 82, 61, 64, 307, 87, - 166, 167, 168, 152, 45, 51, 145, 160, 164, 63, - 66, 257, 34, 71, 197, 223, 258, 217, 58, 84, - 316, 198, 68, 268, 102, 92, 51, 223, 224, 141, - 63, 66, 201, 45, 71, 327, 82, 61, 64, 58, - 87, 213, 205, 68, 331, 114, 82, 61, 64, 206, - 87, -152, 213, 107, 45, 166, 167, 168, 152, 153, - 155, 210, 160, 164, 341, 304, 78, 51, 343, -150, - 345, 63, 66, -152, -150, 71, -153, 51, -151, -155, - 58, 63, 66, 105, 68, 71, 217, 213, 50, 49, - 58, 84, 332, 351, 68, 45, -203, 92, 82, 61, - 64, 39, 87, 214, -151, 45, -153, nil, 82, 61, - 64, nil, 87, 19, nil, 23, 27, nil, 1, 5, - nil, 12, nil, 17, nil, 21, nil, 28, 78, 51, - 4, 9, nil, 63, 66, nil, nil, 71, nil, 51, - nil, nil, 58, 63, 66, nil, 68, 71, nil, nil, - nil, nil, 58, 84, 352, nil, 68, 45, nil, 92, - 82, 61, 64, nil, 87, nil, nil, 45, nil, nil, - 82, 61, 64, nil, 87, 19, nil, 23, 27, nil, - 1, 5, nil, 12, nil, 17, nil, 21, nil, 28, - 78, 51, 4, 9, nil, 63, 66, nil, nil, 71, - nil, 51, nil, nil, 58, 63, 66, nil, 68, 71, - nil, nil, nil, nil, 58, 84, nil, nil, 68, 45, - nil, 92, 82, 61, 64, nil, 87, nil, nil, 45, - 166, 167, 168, 152, nil, nil, nil, 160, 164, nil, - nil, nil, 78, 82, 61, 64, nil, 87, nil, nil, - nil, nil, nil, 51, nil, nil, nil, 63, 66, nil, - nil, 71, nil, nil, nil, nil, 58, 84, nil, nil, - 68, nil, nil, 92, 51, nil, nil, nil, 63, 66, - nil, 45, 71, nil, 82, 61, 64, 58, 87, nil, - nil, 68, 166, 167, 168, 152, 153, 155, nil, 160, - 164, nil, 45, nil, 78, 82, 61, 64, nil, 87, - nil, nil, nil, nil, nil, 51, nil, nil, nil, 63, - 66, nil, nil, 71, nil, nil, nil, nil, 58, 84, - nil, nil, 68, nil, nil, 92, 51, nil, nil, nil, - 63, 66, nil, 45, 71, nil, 82, 61, 64, 58, - 87, nil, nil, 68, nil, nil, 82, 61, 64, nil, - 87, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 78, 51, nil, nil, - nil, 63, 66, nil, nil, 71, nil, 51, nil, nil, - 58, 63, 66, nil, 68, 71, nil, nil, nil, nil, - 58, 84, nil, nil, 68, 45, nil, 92, 82, 61, - 64, nil, 87, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 78, 82, - 61, 64, nil, nil, nil, nil, nil, nil, nil, 51, - nil, nil, nil, 63, 66, nil, nil, 71, nil, nil, - nil, nil, 58, 84, nil, nil, 68, nil, nil, 92, - 51, nil, nil, nil, 63, 128, nil, 45, 71, nil, - 82, 61, 64, 126, 87, nil, nil, 68, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, - 78, 82, 61, 64, nil, 87, nil, nil, nil, nil, - nil, 51, nil, nil, nil, 63, 66, nil, nil, 71, - nil, 78, nil, nil, 58, 84, nil, nil, 68, nil, - nil, 92, 51, nil, nil, nil, 63, 66, nil, 45, - 71, nil, nil, nil, nil, 58, 84, nil, nil, 68, - nil, nil, 92, 82, 61, 64, nil, 87, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 78, 82, 61, 64, nil, 87, nil, - nil, nil, nil, nil, 51, nil, nil, nil, 63, 66, - nil, nil, 71, nil, nil, nil, nil, 58, 84, nil, - nil, 68, nil, nil, 92, 51, nil, nil, nil, 63, - 66, nil, 45, 71, nil, 82, 61, 64, 58, 87, - nil, nil, 68, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 45, nil, 78, 82, 61, 64, nil, - 87, nil, 82, 61, 64, nil, 51, nil, nil, nil, - 63, 66, nil, nil, 71, nil, nil, nil, nil, 58, - 84, nil, nil, 68, nil, nil, 92, 51, nil, nil, - nil, 63, 66, 51, 45, 71, nil, 63, 229, nil, - 58, 71, nil, nil, 68, nil, 126, 82, 61, 64, - 68, 87, nil, nil, nil, 45, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, 78, 82, 61, - 64, 169, 87, nil, nil, nil, nil, nil, 51, nil, - nil, nil, 63, 66, nil, nil, 71, nil, nil, nil, - nil, 58, 84, nil, nil, 68, nil, nil, 92, 51, - nil, nil, nil, 63, 66, nil, 45, 71, nil, 82, - 61, 64, 58, 87, nil, nil, 68, nil, nil, 82, - 61, 64, nil, 87, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 78, - 51, nil, nil, nil, 63, 66, nil, nil, 71, nil, - 51, nil, nil, 58, 63, 66, nil, 68, 71, nil, - nil, nil, nil, 58, 84, nil, nil, 68, 45, nil, - 92, 82, 61, 64, nil, 87, nil, nil, 45, nil, - nil, 82, 61, 64, nil, 87, nil, nil, nil, nil, + 83, 62, 65, 322, 88, 173, 174, 214, 188, 313, + 279, 216, 43, 44, 150, 281, 122, 282, 278, 187, + 79, 83, 62, 65, 192, 88, 102, 308, 275, 276, + 103, 52, 283, 43, 44, 64, 67, 43, 44, 72, + 175, 120, -156, 104, 59, 85, 286, 45, 69, 218, + 47, 93, 52, 58, 173, 174, 64, 67, 176, 46, + 72, 285, 83, 62, 65, 59, 88, 105, 45, 69, + 46, 47, 45, 151, 284, 47, 277, 222, 319, 214, + 46, -155, 79, 83, 62, 65, 318, 88, 34, 175, + 221, 46, 151, 52, 290, 46, -153, 64, 67, 35, + 36, 72, 293, 79, 275, 276, 59, 85, 164, 188, + 69, -150, 201, 93, 52, -154, 155, 204, 64, 67, + 187, 46, 72, 262, 296, 192, 263, 59, 85, 37, + 185, 69, 185, 39, 93, 83, 62, 65, -152, 88, + 4, 9, 46, 188, 167, 168, 169, 153, 154, 156, + 300, 161, 165, 188, 187, 79, 83, 62, 65, 192, + 88, 37, 201, 142, 187, 39, 52, 204, 289, 192, + 64, 67, 4, 37, 72, -154, 79, 39, 303, 59, + 85, 164, -155, 69, 4, 305, 93, 52, 151, 155, + -151, 64, 67, 181, 46, 72, -151, 164, 62, 65, + 59, 85, 37, 46, 69, 155, 39, 93, 83, 62, + 65, 182, 88, 4, 183, 46, 102, 167, 168, 169, + 153, 154, 156, -153, 161, 165, 62, 65, 79, 58, + 62, 65, -150, 167, 168, 169, 153, 154, 156, 52, + 161, 165, 185, 64, 67, 150, 164, 72, 149, 54, + 226, 344, 59, 85, 155, 46, 69, 169, 153, 93, + 52, 309, 161, 165, 64, 67, 260, 46, 72, -168, + 226, 261, 56, 59, 83, 62, 65, 69, 88, 161, + 165, 198, 167, 168, 169, 153, 154, 156, 46, 161, + 165, 161, 165, 115, 79, 83, 62, 65, 214, 88, + 167, 168, 169, 153, 312, 52, 103, 161, 165, 64, + 67, 169, 153, 72, -152, 146, 161, 165, 59, 85, + 200, 220, 69, 271, 321, 93, 52, 226, 227, 206, + 64, 67, 209, 46, 72, 34, 83, 62, 65, 59, + 88, 142, -152, 69, 167, 168, 169, 153, 154, 156, + 115, 161, 165, 213, 46, -150, 79, 83, 62, 65, + 220, 88, 167, 168, 169, 153, 108, 52, 264, 161, + 165, 64, 67, 216, 280, 72, 142, 79, 275, 276, + 59, 85, 345, 309, 69, 224, 347, 93, 52, 226, + 227, 106, 64, 67, 349, 46, 72, -152, -150, -153, + -151, 59, 85, -155, 216, 69, 51, 50, 93, 83, + 62, 65, 353, 88, -204, 40, 46, 167, 168, 169, + 153, 154, 156, 217, 161, 165, -151, -153, nil, 79, + 83, 62, 65, nil, 88, nil, nil, nil, nil, nil, + 52, nil, nil, nil, 64, 67, nil, nil, 72, nil, + nil, nil, nil, 59, 85, nil, nil, 69, nil, nil, + 93, 52, nil, nil, nil, 64, 67, nil, 46, 72, + nil, 83, 62, 65, 59, 88, nil, nil, 69, nil, + nil, 83, 62, 65, nil, 88, nil, nil, nil, 46, + nil, nil, nil, nil, nil, nil, nil, 83, 62, 65, + nil, 88, 52, nil, nil, nil, 64, 67, nil, nil, + 72, nil, 52, nil, nil, 59, 64, 67, nil, 69, + 72, nil, 83, 62, 65, 59, 88, nil, 52, 69, + 46, nil, 64, 67, nil, nil, 72, nil, nil, nil, + 46, 59, nil, nil, nil, 69, nil, 83, 62, 65, + nil, 88, nil, 52, nil, nil, 46, 64, 67, nil, + nil, 72, nil, nil, nil, nil, 59, 79, nil, nil, + 69, nil, nil, 83, 62, 65, nil, 88, 52, nil, + nil, 46, 64, 67, nil, nil, 72, nil, nil, nil, + nil, 59, 85, 79, nil, 69, nil, nil, 93, 83, + 62, 65, nil, 88, 52, nil, 46, nil, 64, 67, + nil, nil, 72, nil, nil, nil, nil, 59, 85, nil, + nil, 69, nil, nil, 93, 83, 62, 65, nil, 88, + 52, nil, 46, nil, 64, 67, nil, nil, 72, nil, + nil, nil, nil, 59, nil, 79, nil, 69, nil, nil, + nil, 83, 62, 65, nil, 88, 52, nil, 46, nil, + 64, 67, nil, nil, 72, nil, nil, nil, nil, 59, + 85, 79, nil, 69, nil, nil, 93, 83, 62, 65, + nil, nil, 52, nil, 46, nil, 64, 67, nil, nil, + 72, nil, nil, nil, nil, 59, 85, nil, nil, 69, + nil, nil, 93, 83, 62, 65, nil, 88, 52, nil, + 46, nil, 64, 129, nil, nil, 72, nil, nil, nil, + nil, 127, nil, 79, nil, 69, nil, nil, nil, 83, + 62, 65, nil, 88, 52, nil, 46, nil, 64, 67, + nil, nil, 72, nil, nil, nil, nil, 59, 85, 79, + nil, 69, nil, nil, 93, 83, 62, 65, nil, 88, + 52, nil, 46, nil, 64, 67, nil, nil, 72, nil, + nil, nil, nil, 59, 85, 79, nil, 69, nil, nil, + 93, 83, 62, 65, nil, 88, 52, nil, 46, nil, + 64, 67, nil, nil, 72, nil, nil, nil, nil, 59, + 85, 79, nil, 69, nil, nil, 93, 83, 62, 65, + nil, 88, 52, nil, 46, nil, 64, 67, nil, nil, + 72, nil, nil, nil, nil, 59, 85, 62, 65, 69, + nil, nil, 93, 83, 62, 65, nil, 88, 52, nil, + 46, nil, 64, 67, nil, nil, 72, 83, 62, 65, + nil, 59, nil, nil, nil, 69, nil, 187, nil, nil, + nil, 64, 232, nil, 52, 72, 46, nil, 64, 67, + 127, nil, 72, nil, 69, nil, nil, 59, 52, 62, + 65, 69, 64, 232, nil, 46, 72, nil, nil, nil, + nil, 127, 46, nil, nil, 69, 83, 62, 65, 302, + 88, nil, nil, 83, 62, 65, 46, 88, nil, 52, + nil, nil, nil, 64, 67, nil, nil, 72, nil, nil, + nil, 56, 59, 79, nil, nil, 69, 52, nil, nil, + nil, 64, 67, nil, 52, 72, nil, 46, 64, 67, + 59, nil, 72, nil, 69, nil, nil, 59, 85, nil, + nil, 69, nil, nil, 93, 46, 83, 62, 65, 170, + 88, nil, 46, 83, 62, 65, nil, 88, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 78, 51, 61, 64, nil, 63, 66, nil, nil, - 71, nil, 51, nil, nil, 58, 63, 66, nil, 68, - 71, nil, 61, 64, nil, 58, 84, nil, nil, 68, - 45, nil, 92, 186, nil, nil, nil, 63, 229, nil, - 45, 71, 297, 61, 64, nil, 126, nil, nil, nil, - 68, nil, 51, 61, 64, nil, 63, 66, nil, nil, - 71, 45, nil, nil, 55, 58, nil, nil, nil, 68, - nil, nil, nil, 186, 61, 64, nil, 63, 229, nil, - 45, 71, nil, 186, 61, 64, 126, 63, 229, nil, - 68, 71, nil, nil, nil, nil, 126, nil, nil, nil, - 68, 45, nil, nil, 186, 61, 64, nil, 63, 229, - nil, 45, 71, nil, 186, nil, nil, 126, 63, 229, - nil, 68, 71, 61, 64, nil, 231, 126, nil, nil, - nil, 68, 45, nil, nil, 51, nil, 61, 64, 63, - 66, nil, 45, 71, nil, nil, nil, 55, 58, nil, - nil, nil, 68, 186, nil, 61, 64, 63, 229, 312, - nil, 71, nil, 45, nil, nil, 126, 186, nil, nil, - 68, 63, 229, nil, nil, 71, 61, 64, nil, nil, - 126, 45, nil, nil, 68, 186, nil, nil, nil, 63, - 229, nil, nil, 71, nil, 45, 236, nil, 126, nil, - nil, nil, 68, nil, nil, nil, 51, 61, 64, nil, - 63, 66, nil, 45, 71, nil, nil, nil, 55, 58, - nil, nil, nil, 68, nil, nil, nil, 143, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 51, 165, nil, - nil, 63, 66, nil, nil, 71, nil, 158, 163, 55, - 58, nil, nil, nil, 68, nil, 154, 156, 159, 162, - 158, 163, nil, nil, nil, 45, nil, nil, nil, 154, - 156, 159, 162, nil, nil, nil, nil, nil, nil, nil, - 157, 161, nil, nil, 166, 167, 168, 152, 153, 155, - nil, 160, 164, 157, 161, nil, nil, 166, 167, 168, - 152, 153, 155, nil, 160, 164, 158, 163, nil, nil, - nil, nil, nil, nil, nil, 154, 156, 159, 162, 158, - 163, nil, nil, nil, nil, nil, nil, nil, 154, 156, - 159, 162, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 166, 167, 168, 152, 153, 155, nil, - 160, 164, nil, 161, nil, nil, 166, 167, 168, 152, - 153, 155, nil, 160, 164, 158, 163, nil, nil, nil, - nil, nil, nil, nil, 154, 156, 159, 162, 158, 163, - nil, nil, nil, nil, nil, nil, 238, 154, 156, 159, - 162, nil, nil, nil, nil, nil, nil, nil, 157, 161, - nil, nil, 166, 167, 168, 152, 153, 155, nil, 160, - 164, 157, 161, nil, nil, 166, 167, 168, 152, 153, - 155, 354, 160, 164, 158, 163, nil, nil, nil, nil, - nil, nil, nil, 154, 156, 159, 162, nil, nil, nil, - nil, nil, 19, nil, 23, 27, nil, 1, 5, 335, - 12, nil, 17, nil, 21, nil, 28, 157, 161, 4, - 9, 166, 167, 168, 152, 153, 155, nil, 160, 164, - 19, 334, 23, 27, nil, 1, 5, nil, 12, nil, - 17, nil, 21, nil, 28, nil, nil, 4, 9, nil, - 349, nil, 19, nil, 23, 27, nil, 1, 5, nil, - 12, nil, 17, nil, 21, nil, 28, nil, nil, 4, - 9, 19, 252, 23, 27, nil, 1, 5, nil, 12, - nil, 17, nil, 21, nil, 28, nil, nil, 4, 9, - nil, 306, nil, 19, nil, 23, 27, nil, 1, 5, - nil, 12, nil, 17, nil, 21, nil, 28, nil, nil, - 4, 9, 19, 284, 23, 27, nil, 1, 5, nil, - 12, nil, 17, nil, 21, nil, 28, nil, nil, 4, - 9, nil, 286, nil, 19, nil, 23, 27, nil, 1, - 5, nil, 12, nil, 17, nil, 21, nil, 28, nil, - nil, 4, 9, 19, 356, 23, 27, nil, 1, 5, - nil, 12, nil, 17, nil, 21, nil, 28, nil, nil, - 4, 9, nil, 357, nil, 19, nil, 23, 27, nil, + nil, 83, 62, 65, nil, 88, nil, 52, nil, nil, + nil, 64, 67, nil, 52, 72, nil, nil, 64, 67, + 59, 79, 72, nil, 69, nil, nil, 59, 62, 65, + nil, 69, 52, nil, nil, 46, 64, 67, nil, nil, + 72, nil, 46, nil, nil, 59, 85, 62, 65, 69, + nil, nil, 93, 83, 62, 65, nil, 88, 187, nil, + 46, nil, 64, 232, nil, nil, 72, nil, nil, nil, + nil, 127, nil, 79, nil, 69, nil, 187, nil, 62, + 65, 64, 232, nil, 52, 72, 46, nil, 64, 67, + 127, nil, 72, nil, 69, nil, nil, 59, 85, nil, + nil, 69, nil, nil, 93, 46, nil, nil, nil, 187, + 62, 65, 46, 64, 232, nil, nil, 72, nil, nil, + 62, 65, 127, 234, nil, nil, 69, nil, nil, nil, + 239, nil, nil, nil, nil, nil, nil, 46, nil, nil, + 52, 62, 65, nil, 64, 67, nil, nil, 72, nil, + 187, nil, 56, 59, 64, 232, nil, 69, 72, 62, + 65, nil, nil, 127, nil, nil, nil, 69, 46, nil, + nil, 52, nil, 62, 65, 64, 67, nil, 46, 72, + nil, nil, nil, 56, 59, nil, nil, nil, 69, 187, + nil, 62, 65, 64, 232, 317, nil, 72, nil, 46, + nil, nil, 127, 187, nil, nil, 69, 64, 232, nil, + nil, 72, 62, 65, nil, nil, 127, 46, nil, nil, + 69, 187, nil, nil, nil, 64, 232, nil, nil, 72, + nil, 46, 144, nil, 127, nil, nil, nil, 69, nil, + nil, nil, 52, 166, nil, nil, 64, 67, nil, 46, + 72, nil, 159, 164, 56, 59, nil, nil, nil, 69, + nil, 155, 157, 160, 163, 159, 164, nil, nil, nil, + 46, nil, nil, nil, 155, 157, 160, 163, nil, nil, + nil, nil, nil, nil, nil, 158, 162, nil, nil, 167, + 168, 169, 153, 154, 156, nil, 161, 165, nil, 162, + nil, nil, 167, 168, 169, 153, 154, 156, nil, 161, + 165, 159, 164, nil, nil, nil, nil, nil, nil, nil, + 155, 157, 160, 163, 159, 164, nil, nil, nil, nil, + nil, nil, nil, 155, 157, 160, 163, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 167, 168, + 169, 153, 154, 156, nil, 161, 165, 158, 162, nil, + nil, 167, 168, 169, 153, 154, 156, nil, 161, 165, + 159, 164, nil, nil, nil, nil, nil, nil, nil, 155, + 157, 160, 163, 159, 164, nil, nil, nil, nil, nil, + nil, 241, 155, 157, 160, 163, nil, nil, nil, nil, + nil, nil, nil, 158, 162, nil, nil, 167, 168, 169, + 153, 154, 156, nil, 161, 165, 158, 162, nil, nil, + 167, 168, 169, 153, 154, 156, 337, 161, 165, 159, + 164, nil, nil, nil, nil, nil, nil, nil, 155, 157, + 160, 163, nil, nil, nil, nil, nil, 19, nil, 23, + 27, nil, 1, 5, 354, 12, nil, 17, nil, 21, + nil, 28, 158, 162, 4, 9, 167, 168, 169, 153, + 154, 156, nil, 161, 165, 19, 356, 23, 27, nil, 1, 5, nil, 12, nil, 17, nil, 21, nil, 28, - nil, nil, 4, 9, 19, nil, 23, 27, nil, 1, - 5, nil, 12, nil, 17, nil, 21, nil, 28, nil, - nil, 4, 9, 19, nil, 23, 27, nil, 1, 5, - nil, 12, nil, 17, nil, 21, nil, 28, nil, nil, - 4, 9, 19, nil, 23, 27, nil, 1, 5, nil, - 12, nil, 17, nil, 21, nil, 28, nil, nil, 4, - 9 ] + nil, nil, 4, 9, nil, 350, nil, 19, nil, 23, + 27, nil, 1, 5, nil, 12, nil, 17, nil, 21, + nil, 28, nil, nil, 4, 9, 19, 339, 23, 27, + nil, 1, 5, nil, 12, nil, 17, nil, 21, nil, + 28, nil, nil, 4, 9, nil, 351, nil, 19, nil, + 23, 27, nil, 1, 5, nil, 12, nil, 17, nil, + 21, nil, 28, nil, nil, 4, 9, 19, 332, 23, + 27, nil, 1, 5, nil, 12, nil, 17, nil, 21, + nil, 28, nil, nil, 4, 9, nil, 255, nil, 19, + nil, 23, 27, nil, 1, 5, nil, 12, nil, 17, + nil, 21, nil, 28, nil, nil, 4, 9, 19, 291, + 23, 27, nil, 1, 5, nil, 12, nil, 17, nil, + 21, nil, 28, nil, nil, 4, 9, nil, 311, nil, + 19, nil, 23, 27, nil, 1, 5, nil, 12, nil, + 17, nil, 21, nil, 28, nil, nil, 4, 9, 19, + 358, 23, 27, nil, 1, 5, nil, 12, nil, 17, + nil, 21, nil, 28, nil, nil, 4, 9, nil, 359, + nil, 19, nil, 23, 27, nil, 1, 5, nil, 12, + nil, 17, nil, 21, nil, 28, nil, nil, 4, 9, + 19, nil, 23, 27, nil, 1, 5, nil, 12, nil, + 17, nil, 21, nil, 28, nil, nil, 4, 9, 19, + nil, 23, 27, nil, 1, 5, nil, 12, nil, 17, + nil, 21, nil, 28, nil, nil, 4, 9, 19, nil, + 23, 27, nil, 1, 5, nil, 12, nil, 17, nil, + 21, nil, 28, nil, nil, 4, 9 ] racc_action_check = [ - 92, 92, 92, 270, 92, 260, 260, 141, 187, 260, - 192, 279, 12, 12, 280, 184, 48, 199, 192, 187, - 92, 145, 145, 145, 187, 145, 24, 280, 270, 270, - 24, 92, 89, 119, 119, 92, 92, 121, 121, 92, - 260, 48, 88, 24, 92, 92, 209, 12, 92, 141, - 12, 92, 145, 66, 87, 87, 145, 145, 87, 92, - 145, 237, 152, 152, 152, 145, 152, 24, 119, 145, - 12, 119, 121, 66, 237, 121, 188, 144, 264, 128, - 145, 182, 152, 153, 153, 153, 264, 153, 1, 87, - 144, 119, 128, 152, 81, 121, 212, 152, 152, 1, - 1, 152, 213, 153, 188, 188, 152, 152, 245, 104, - 152, 214, 176, 152, 153, 176, 245, 27, 153, 153, - 104, 152, 153, 114, 27, 104, 114, 153, 153, 77, - 114, 153, 216, 31, 153, 154, 154, 154, 217, 154, - 31, 31, 153, 271, 245, 245, 245, 245, 245, 245, - 75, 245, 245, 103, 271, 154, 155, 155, 155, 271, - 155, 5, 330, 220, 103, 73, 154, 330, 5, 103, - 154, 154, 255, 255, 154, 226, 155, 255, 255, 154, - 154, 243, 229, 154, 72, 198, 154, 155, 91, 243, - 198, 155, 155, 178, 154, 155, 93, 246, 147, 94, - 155, 155, 147, 147, 155, 246, 95, 155, 156, 156, - 156, 70, 156, 23, 23, 155, 69, 243, 243, 243, - 243, 243, 243, 97, 243, 243, 239, 239, 156, 17, - 17, 17, 62, 246, 246, 246, 246, 246, 246, 156, - 246, 246, 60, 156, 156, 58, 249, 156, 164, 17, - 181, 181, 156, 156, 249, 252, 156, 254, 254, 156, - 17, 56, 254, 254, 17, 17, 196, 156, 17, 99, - 196, 196, 17, 17, 19, 19, 19, 17, 19, 302, - 302, 100, 249, 249, 249, 249, 249, 249, 17, 249, - 249, 256, 256, 102, 19, 21, 21, 21, 258, 21, - 240, 240, 240, 240, 160, 19, 54, 240, 240, 19, - 19, 170, 51, 19, 105, 170, 170, 267, 19, 19, - 269, 106, 19, 183, 110, 19, 21, 183, 183, 50, - 21, 21, 111, 19, 21, 278, 331, 331, 331, 21, - 331, 185, 115, 21, 281, 37, 157, 157, 157, 118, - 157, 123, 293, 28, 21, 241, 241, 241, 241, 241, - 241, 127, 241, 241, 304, 306, 157, 331, 313, 129, - 315, 331, 331, 320, 321, 331, 323, 157, 324, 325, - 331, 157, 157, 26, 331, 157, 142, 130, 16, 13, - 157, 157, 283, 339, 157, 331, 340, 157, 327, 327, - 327, 6, 327, 134, 133, 157, 131, nil, 158, 158, - 158, nil, 158, 283, nil, 283, 283, nil, 283, 283, - nil, 283, nil, 283, nil, 283, nil, 283, 158, 327, - 283, 283, nil, 327, 327, nil, nil, 327, nil, 158, - nil, nil, 327, 158, 158, nil, 327, 158, nil, nil, - nil, nil, 158, 158, 341, nil, 158, 327, nil, 158, - 300, 300, 300, nil, 300, nil, nil, 158, nil, nil, - 159, 159, 159, nil, 159, 341, nil, 341, 341, nil, - 341, 341, nil, 341, nil, 341, nil, 341, nil, 341, - 159, 300, 341, 341, nil, 300, 300, nil, nil, 300, - nil, 159, nil, nil, 300, 159, 159, nil, 300, 159, - nil, nil, nil, nil, 159, 159, nil, nil, 159, 300, - nil, 159, 161, 161, 161, nil, 161, nil, nil, 159, - 242, 242, 242, 242, nil, nil, nil, 242, 242, nil, - nil, nil, 161, 34, 34, 34, nil, 34, nil, nil, - nil, nil, nil, 161, nil, nil, nil, 161, 161, nil, - nil, 161, nil, nil, nil, nil, 161, 161, nil, nil, - 161, nil, nil, 161, 34, nil, nil, nil, 34, 34, - nil, 161, 34, nil, 35, 35, 35, 34, 35, nil, - nil, 34, 250, 250, 250, 250, 250, 250, nil, 250, - 250, nil, 34, nil, 35, 222, 222, 222, nil, 222, - nil, nil, nil, nil, nil, 35, nil, nil, nil, 35, - 35, nil, nil, 35, nil, nil, nil, nil, 35, 35, - nil, nil, 35, nil, nil, 35, 222, nil, nil, nil, - 222, 222, nil, 35, 222, nil, 101, 101, 101, 222, - 101, nil, nil, 222, nil, nil, 39, 39, 39, nil, - 39, nil, nil, nil, 222, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, 101, nil, nil, - nil, 101, 101, nil, nil, 101, nil, 39, nil, nil, - 101, 39, 39, nil, 101, 39, nil, nil, nil, nil, - 39, 39, nil, nil, 39, 101, nil, 39, 162, 162, - 162, nil, 162, nil, nil, 39, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 162, 49, - 49, 49, nil, nil, nil, nil, nil, nil, nil, 162, - nil, nil, nil, 162, 162, nil, nil, 162, nil, nil, - nil, nil, 162, 162, nil, nil, 162, nil, nil, 162, - 49, nil, nil, nil, 49, 49, nil, 162, 49, nil, - 163, 163, 163, 49, 163, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 49, nil, - 163, 166, 166, 166, nil, 166, nil, nil, nil, nil, - nil, 163, nil, nil, nil, 163, 163, nil, nil, 163, - nil, 166, nil, nil, 163, 163, nil, nil, 163, nil, - nil, 163, 166, nil, nil, nil, 166, 166, nil, 163, - 166, nil, nil, nil, nil, 166, 166, nil, nil, 166, - nil, nil, 166, 167, 167, 167, nil, 167, nil, nil, - 166, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 167, 261, 261, 261, nil, 261, nil, - nil, nil, nil, nil, 167, nil, nil, nil, 167, 167, - nil, nil, 167, nil, nil, nil, nil, 167, 167, nil, - nil, 167, nil, nil, 167, 261, nil, nil, nil, 261, - 261, nil, 167, 261, nil, 168, 168, 168, 261, 168, - nil, nil, 261, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 261, nil, 168, 57, 57, 57, nil, - 57, nil, 210, 210, 210, nil, 168, nil, nil, nil, + 93, 93, 93, 273, 93, 263, 263, 142, 274, 263, + 193, 298, 12, 12, 240, 199, 49, 201, 193, 274, + 93, 146, 146, 146, 274, 146, 24, 240, 273, 273, + 24, 93, 202, 120, 120, 93, 93, 122, 122, 93, + 263, 49, 94, 24, 93, 93, 204, 12, 93, 142, + 12, 93, 146, 67, 88, 88, 146, 146, 88, 93, + 146, 203, 153, 153, 153, 146, 153, 24, 120, 146, + 12, 120, 122, 67, 203, 122, 189, 145, 267, 129, + 146, 95, 153, 154, 154, 154, 267, 154, 1, 88, + 145, 120, 129, 153, 207, 122, 90, 153, 153, 1, + 1, 153, 212, 154, 189, 189, 153, 153, 252, 105, + 153, 89, 115, 153, 154, 96, 252, 115, 154, 154, + 105, 153, 154, 177, 215, 105, 177, 154, 154, 31, + 216, 154, 217, 31, 154, 155, 155, 155, 82, 155, + 31, 31, 154, 104, 252, 252, 252, 252, 252, 252, + 219, 252, 252, 188, 104, 155, 156, 156, 156, 104, + 156, 206, 285, 220, 188, 206, 155, 285, 206, 188, + 155, 155, 206, 5, 155, 78, 156, 5, 223, 155, + 155, 248, 76, 155, 5, 229, 155, 156, 232, 248, + 74, 156, 156, 98, 155, 156, 92, 249, 182, 182, + 156, 156, 27, 165, 156, 249, 27, 156, 157, 157, + 157, 100, 157, 27, 101, 156, 73, 248, 248, 248, + 248, 248, 248, 71, 248, 248, 23, 23, 157, 17, + 17, 17, 70, 249, 249, 249, 249, 249, 249, 157, + 249, 249, 103, 157, 157, 63, 246, 157, 61, 17, + 307, 307, 157, 157, 246, 161, 157, 258, 258, 157, + 17, 255, 258, 258, 17, 17, 171, 157, 17, 59, + 171, 171, 17, 17, 19, 19, 19, 17, 19, 259, + 259, 106, 246, 246, 246, 246, 246, 246, 17, 246, + 246, 242, 242, 107, 19, 21, 21, 21, 185, 21, + 245, 245, 245, 245, 261, 19, 111, 245, 245, 19, + 19, 257, 257, 19, 57, 55, 257, 257, 19, 19, + 112, 270, 19, 184, 272, 19, 21, 184, 184, 116, + 21, 21, 119, 19, 21, 52, 158, 158, 158, 21, + 158, 51, 124, 21, 253, 253, 253, 253, 253, 253, + 38, 253, 253, 128, 21, 130, 158, 159, 159, 159, + 143, 159, 243, 243, 243, 243, 28, 158, 179, 243, + 243, 158, 158, 131, 197, 158, 183, 159, 197, 197, + 158, 158, 309, 311, 158, 148, 318, 158, 159, 148, + 148, 26, 159, 159, 320, 158, 159, 325, 326, 328, + 329, 159, 159, 330, 186, 159, 16, 13, 159, 160, + 160, 160, 343, 160, 344, 6, 159, 244, 244, 244, + 244, 244, 244, 135, 244, 244, 134, 132, nil, 160, + 305, 305, 305, nil, 305, nil, nil, nil, nil, nil, + 160, nil, nil, nil, 160, 160, nil, nil, 160, nil, + nil, nil, nil, 160, 160, nil, nil, 160, nil, nil, + 160, 305, nil, nil, nil, 305, 305, nil, 160, 305, + nil, 225, 225, 225, 305, 225, nil, nil, 305, nil, + nil, 102, 102, 102, nil, 102, nil, nil, nil, 305, + nil, nil, nil, nil, nil, nil, nil, 286, 286, 286, + nil, 286, 225, nil, nil, nil, 225, 225, nil, nil, + 225, nil, 102, nil, nil, 225, 102, 102, nil, 225, + 102, nil, 34, 34, 34, 102, 34, nil, 286, 102, + 225, nil, 286, 286, nil, nil, 286, nil, nil, nil, + 102, 286, nil, nil, nil, 286, nil, 35, 35, 35, + nil, 35, nil, 34, nil, nil, 286, 34, 34, nil, + nil, 34, nil, nil, nil, nil, 34, 35, nil, nil, + 34, nil, nil, 36, 36, 36, nil, 36, 35, nil, + nil, 34, 35, 35, nil, nil, 35, nil, nil, nil, + nil, 35, 35, 36, nil, 35, nil, nil, 35, 282, + 282, 282, nil, 282, 36, nil, 35, nil, 36, 36, + nil, nil, 36, nil, nil, nil, nil, 36, 36, nil, + nil, 36, nil, nil, 36, 40, 40, 40, nil, 40, + 282, nil, 36, nil, 282, 282, nil, nil, 282, nil, + nil, nil, nil, 282, nil, 40, nil, 282, nil, nil, + nil, 163, 163, 163, nil, 163, 40, nil, 282, nil, + 40, 40, nil, nil, 40, nil, nil, nil, nil, 40, + 40, 163, nil, 40, nil, nil, 40, 50, 50, 50, + nil, nil, 163, nil, 40, nil, 163, 163, nil, nil, + 163, nil, nil, nil, nil, 163, 163, nil, nil, 163, + nil, nil, 163, 164, 164, 164, nil, 164, 50, nil, + 163, nil, 50, 50, nil, nil, 50, nil, nil, nil, + nil, 50, nil, 164, nil, 50, nil, nil, nil, 167, + 167, 167, nil, 167, 164, nil, 50, nil, 164, 164, + nil, nil, 164, nil, nil, nil, nil, 164, 164, 167, + nil, 164, nil, nil, 164, 168, 168, 168, nil, 168, + 167, nil, 164, nil, 167, 167, nil, nil, 167, nil, + nil, nil, nil, 167, 167, 168, nil, 167, nil, nil, + 167, 169, 169, 169, nil, 169, 168, nil, 167, nil, 168, 168, nil, nil, 168, nil, nil, nil, nil, 168, - 168, nil, nil, 168, nil, nil, 168, 57, nil, nil, - nil, 57, 57, 210, 168, 57, nil, 210, 210, nil, - 57, 210, nil, nil, 57, nil, 210, 84, 84, 84, - 210, 84, nil, nil, nil, 57, nil, nil, nil, nil, - nil, 210, nil, nil, nil, nil, nil, 84, 82, 82, - 82, 82, 82, nil, nil, nil, nil, nil, 84, nil, - nil, nil, 84, 84, nil, nil, 84, nil, nil, nil, - nil, 84, 84, nil, nil, 84, nil, nil, 84, 82, - nil, nil, nil, 82, 82, nil, 84, 82, nil, 211, - 211, 211, 82, 211, nil, nil, 82, nil, nil, 78, - 78, 78, nil, 78, nil, nil, nil, 82, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 78, - 211, nil, nil, nil, 211, 211, nil, nil, 211, nil, - 78, nil, nil, 211, 78, 78, nil, 211, 78, nil, - nil, nil, nil, 78, 78, nil, nil, 78, 211, nil, - 78, 215, 215, 215, nil, 215, nil, nil, 78, nil, - nil, 36, 36, 36, nil, 36, nil, nil, nil, nil, + 168, 169, nil, 168, nil, nil, 168, 264, 264, 264, + nil, 264, 169, nil, 168, nil, 169, 169, nil, nil, + 169, nil, nil, nil, nil, 169, 169, 234, 234, 169, + nil, nil, 169, 58, 58, 58, nil, 58, 264, nil, + 169, nil, 264, 264, nil, nil, 264, 213, 213, 213, + nil, 264, nil, nil, nil, 264, nil, 234, nil, nil, + nil, 234, 234, nil, 58, 234, 264, nil, 58, 58, + 234, nil, 58, nil, 234, nil, nil, 58, 213, 222, + 222, 58, 213, 213, nil, 234, 213, nil, nil, nil, + nil, 213, 58, nil, nil, 213, 214, 214, 214, 222, + 214, nil, nil, 85, 85, 85, 213, 85, nil, 222, + nil, nil, nil, 222, 222, nil, nil, 222, nil, nil, + nil, 222, 222, 85, nil, nil, 222, 214, nil, nil, + nil, 214, 214, nil, 85, 214, nil, 222, 85, 85, + 214, nil, 85, nil, 214, nil, nil, 85, 85, nil, + nil, 85, nil, nil, 85, 214, 83, 83, 83, 83, + 83, nil, 85, 218, 218, 218, nil, 218, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 36, 215, 231, 231, nil, 215, 215, nil, nil, - 215, nil, 36, nil, nil, 215, 36, 36, nil, 215, - 36, nil, 219, 219, nil, 36, 36, nil, nil, 36, - 215, nil, 36, 231, nil, nil, nil, 231, 231, nil, - 36, 231, 219, 338, 338, nil, 231, nil, nil, nil, - 231, nil, 219, 314, 314, nil, 219, 219, nil, nil, - 219, 231, nil, nil, 219, 219, nil, nil, nil, 219, - nil, nil, nil, 338, 276, 276, nil, 338, 338, nil, - 219, 338, nil, 314, 275, 275, 338, 314, 314, nil, - 338, 314, nil, nil, nil, nil, 314, nil, nil, nil, - 314, 338, nil, nil, 276, 149, 149, nil, 276, 276, - nil, 314, 276, nil, 275, nil, nil, 276, 275, 275, - nil, 276, 275, 148, 148, nil, 148, 275, nil, nil, - nil, 275, 276, nil, nil, 149, nil, 180, 180, 149, - 149, nil, 275, 149, nil, nil, nil, 149, 149, nil, - nil, nil, 149, 148, nil, 262, 262, 148, 148, 262, - nil, 148, nil, 149, nil, nil, 148, 180, nil, nil, - 148, 180, 180, nil, nil, 180, 150, 150, nil, nil, - 180, 148, nil, nil, 180, 262, nil, nil, nil, 262, - 262, nil, nil, 262, nil, 180, 150, nil, 262, nil, - nil, nil, 262, nil, nil, nil, 150, 53, 53, nil, - 150, 150, nil, 262, 150, nil, nil, nil, 150, 150, - nil, nil, nil, 150, nil, nil, nil, 53, nil, nil, - nil, nil, nil, nil, 150, nil, nil, 53, 79, nil, - nil, 53, 53, nil, nil, 53, nil, 79, 79, 53, - 53, nil, nil, nil, 53, nil, 79, 79, 79, 79, - 113, 113, nil, nil, nil, 53, nil, nil, nil, 113, - 113, 113, 113, nil, nil, nil, nil, nil, nil, nil, - 79, 79, nil, nil, 79, 79, 79, 79, 79, 79, - nil, 79, 79, 113, 113, nil, nil, 113, 113, 113, - 113, 113, 113, nil, 113, 113, 248, 248, nil, nil, - nil, nil, nil, nil, nil, 248, 248, 248, 248, 244, - 244, nil, nil, nil, nil, nil, nil, nil, 244, 244, - 244, 244, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 248, 248, 248, 248, 248, 248, nil, - 248, 248, nil, 244, nil, nil, 244, 244, 244, 244, - 244, 244, nil, 244, 244, 112, 112, nil, nil, nil, - nil, nil, nil, nil, 112, 112, 112, 112, 151, 151, - nil, nil, nil, nil, nil, nil, 151, 151, 151, 151, - 151, nil, nil, nil, nil, nil, nil, nil, 112, 112, - nil, nil, 112, 112, 112, 112, 112, 112, nil, 112, - 112, 151, 151, nil, nil, 151, 151, 151, 151, 151, - 151, 343, 151, 151, 117, 117, nil, nil, nil, nil, - nil, nil, nil, 117, 117, 117, 117, nil, nil, nil, - nil, nil, 343, nil, 343, 343, nil, 343, 343, 287, - 343, nil, 343, nil, 343, nil, 343, 117, 117, 343, - 343, 117, 117, 117, 117, 117, 117, nil, 117, 117, - 287, 285, 287, 287, nil, 287, 287, nil, 287, nil, - 287, nil, 287, nil, 287, nil, nil, 287, 287, nil, - 333, nil, 285, nil, 285, 285, nil, 285, 285, nil, - 285, nil, 285, nil, 285, nil, 285, nil, nil, 285, - 285, 333, 165, 333, 333, nil, 333, 333, nil, 333, - nil, 333, nil, 333, nil, 333, nil, nil, 333, 333, - nil, 253, nil, 165, nil, 165, 165, nil, 165, 165, - nil, 165, nil, 165, nil, 165, nil, 165, nil, nil, - 165, 165, 253, 205, 253, 253, nil, 253, 253, nil, - 253, nil, 253, nil, 253, nil, 253, nil, nil, 253, - 253, nil, 206, nil, 205, nil, 205, 205, nil, 205, - 205, nil, 205, nil, 205, nil, 205, nil, 205, nil, - nil, 205, 205, 206, 353, 206, 206, nil, 206, 206, - nil, 206, nil, 206, nil, 206, nil, 206, nil, nil, - 206, 206, nil, 355, nil, 353, nil, 353, 353, nil, - 353, 353, nil, 353, nil, 353, nil, 353, nil, 353, - nil, nil, 353, 353, 355, nil, 355, 355, nil, 355, - 355, nil, 355, nil, 355, nil, 355, nil, 355, nil, - nil, 355, 355, 0, nil, 0, 0, nil, 0, 0, - nil, 0, nil, 0, nil, 0, nil, 0, nil, nil, - 0, 0, 30, nil, 30, 30, nil, 30, 30, nil, - 30, nil, 30, nil, 30, nil, 30, nil, nil, 30, - 30 ] + nil, 79, 79, 79, nil, 79, nil, 83, nil, nil, + nil, 83, 83, nil, 218, 83, nil, nil, 218, 218, + 83, 79, 218, nil, 83, nil, nil, 218, 342, 342, + nil, 218, 79, nil, nil, 83, 79, 79, nil, nil, + 79, nil, 218, nil, nil, 79, 79, 319, 319, 79, + nil, nil, 79, 162, 162, 162, nil, 162, 342, nil, + 79, nil, 342, 342, nil, nil, 342, nil, nil, nil, + nil, 342, nil, 162, nil, 342, nil, 319, nil, 279, + 279, 319, 319, nil, 162, 319, 342, nil, 162, 162, + 319, nil, 162, nil, 319, nil, nil, 162, 162, nil, + nil, 162, nil, nil, 162, 319, nil, nil, nil, 279, + 151, 151, 162, 279, 279, nil, nil, 279, nil, nil, + 149, 149, 279, 149, nil, nil, 279, nil, nil, nil, + 151, nil, nil, nil, nil, nil, nil, 279, nil, nil, + 151, 150, 150, nil, 151, 151, nil, nil, 151, nil, + 149, nil, 151, 151, 149, 149, nil, 151, 149, 181, + 181, nil, nil, 149, nil, nil, nil, 149, 151, nil, + nil, 150, nil, 278, 278, 150, 150, nil, 149, 150, + nil, nil, nil, 150, 150, nil, nil, nil, 150, 181, + nil, 265, 265, 181, 181, 265, nil, 181, nil, 150, + nil, nil, 181, 278, nil, nil, 181, 278, 278, nil, + nil, 278, 54, 54, nil, nil, 278, 181, nil, nil, + 278, 265, nil, nil, nil, 265, 265, nil, nil, 265, + nil, 278, 54, nil, 265, nil, nil, nil, 265, nil, + nil, nil, 54, 80, nil, nil, 54, 54, nil, 265, + 54, nil, 80, 80, 54, 54, nil, nil, nil, 54, + nil, 80, 80, 80, 80, 247, 247, nil, nil, nil, + 54, nil, nil, nil, 247, 247, 247, 247, nil, nil, + nil, nil, nil, nil, nil, 80, 80, nil, nil, 80, + 80, 80, 80, 80, 80, nil, 80, 80, nil, 247, + nil, nil, 247, 247, 247, 247, 247, 247, nil, 247, + 247, 251, 251, nil, nil, nil, nil, nil, nil, nil, + 251, 251, 251, 251, 114, 114, nil, nil, nil, nil, + nil, nil, nil, 114, 114, 114, 114, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 251, 251, + 251, 251, 251, 251, nil, 251, 251, 114, 114, nil, + nil, 114, 114, 114, 114, 114, 114, nil, 114, 114, + 118, 118, nil, nil, nil, nil, nil, nil, nil, 118, + 118, 118, 118, 152, 152, nil, nil, nil, nil, nil, + nil, 152, 152, 152, 152, 152, nil, nil, nil, nil, + nil, nil, nil, 118, 118, nil, nil, 118, 118, 118, + 118, 118, 118, nil, 118, 118, 152, 152, nil, nil, + 152, 152, 152, 152, 152, 152, 290, 152, 152, 113, + 113, nil, nil, nil, nil, nil, nil, nil, 113, 113, + 113, 113, nil, nil, nil, nil, nil, 290, nil, 290, + 290, nil, 290, 290, 345, 290, nil, 290, nil, 290, + nil, 290, 113, 113, 290, 290, 113, 113, 113, 113, + 113, 113, nil, 113, 113, 345, 347, 345, 345, nil, + 345, 345, nil, 345, nil, 345, nil, 345, nil, 345, + nil, nil, 345, 345, nil, 333, nil, 347, nil, 347, + 347, nil, 347, 347, nil, 347, nil, 347, nil, 347, + nil, 347, nil, nil, 347, 347, 333, 292, 333, 333, + nil, 333, 333, nil, 333, nil, 333, nil, 333, nil, + 333, nil, nil, 333, 333, nil, 338, nil, 292, nil, + 292, 292, nil, 292, 292, nil, 292, nil, 292, nil, + 292, nil, 292, nil, nil, 292, 292, 338, 281, 338, + 338, nil, 338, 338, nil, 338, nil, 338, nil, 338, + nil, 338, nil, nil, 338, 338, nil, 166, nil, 281, + nil, 281, 281, nil, 281, 281, nil, 281, nil, 281, + nil, 281, nil, 281, nil, nil, 281, 281, 166, 209, + 166, 166, nil, 166, 166, nil, 166, nil, 166, nil, + 166, nil, 166, nil, nil, 166, 166, nil, 256, nil, + 209, nil, 209, 209, nil, 209, 209, nil, 209, nil, + 209, nil, 209, nil, 209, nil, nil, 209, 209, 256, + 355, 256, 256, nil, 256, 256, nil, 256, nil, 256, + nil, 256, nil, 256, nil, nil, 256, 256, nil, 357, + nil, 355, nil, 355, 355, nil, 355, 355, nil, 355, + nil, 355, nil, 355, nil, 355, nil, nil, 355, 355, + 357, nil, 357, 357, nil, 357, 357, nil, 357, nil, + 357, nil, 357, nil, 357, nil, nil, 357, 357, 30, + nil, 30, 30, nil, 30, 30, nil, 30, nil, 30, + nil, 30, nil, 30, nil, nil, 30, 30, 0, nil, + 0, 0, nil, 0, 0, nil, 0, nil, 0, nil, + 0, nil, 0, nil, nil, 0, 0 ] racc_action_pointer = [ - 1755, 86, nil, nil, nil, 123, 388, nil, nil, nil, - nil, nil, 9, 383, nil, nil, 382, 227, nil, 272, - nil, 293, nil, 210, 24, nil, 383, 79, 311, nil, - 1774, 95, nil, nil, 541, 582, 1109, 310, nil, 654, - nil, nil, nil, nil, nil, nil, nil, nil, 6, 727, - 291, 310, nil, 1334, 304, nil, 240, 924, 243, nil, - 221, nil, 222, nil, nil, nil, 51, nil, nil, 195, - 190, nil, 182, 144, nil, 129, nil, 108, 1047, 1362, - nil, 73, 996, nil, 975, nil, nil, 51, 21, 11, - nil, 167, -2, 175, 178, 185, nil, 217, nil, 259, - 275, 644, 255, 131, 87, 314, 299, nil, nil, nil, - 318, 327, 1480, 1375, 85, 336, nil, 1539, 343, 30, - nil, 34, nil, 330, nil, nil, nil, 322, 70, 348, - 377, 385, nil, 383, 385, nil, nil, nil, nil, nil, - nil, -2, 376, nil, 67, 19, nil, 193, 1250, 1232, - 1303, 1493, 60, 81, 133, 154, 206, 344, 406, 468, - 243, 520, 706, 768, 187, 1635, 789, 841, 903, nil, - 306, nil, nil, nil, nil, nil, 105, nil, 184, nil, - 1264, 247, 43, 318, 6, 331, nil, -14, 56, nil, - nil, nil, -6, nil, nil, nil, 222, nil, 152, 11, - nil, nil, nil, nil, nil, 1676, 1695, nil, nil, 39, - 930, 1037, 89, 64, 73, 1099, 125, 100, nil, 1149, - 158, nil, 603, nil, nil, nil, 166, nil, nil, 160, - nil, 1130, nil, nil, nil, nil, nil, 51, nil, 167, - 248, 303, 478, 165, 1434, 92, 181, nil, 1421, 230, - 540, nil, 226, 1654, 203, 118, 232, nil, 293, nil, - 2, 862, 1282, nil, 68, nil, nil, 307, nil, 313, - -20, 121, nil, nil, nil, 1211, 1201, nil, 322, -12, - 4, 331, nil, 385, nil, 1594, nil, 1572, nil, nil, - nil, nil, nil, 342, nil, nil, nil, nil, nil, nil, - 458, nil, 270, nil, 358, nil, 336, nil, nil, nil, - nil, nil, nil, 362, 1180, 363, nil, nil, nil, nil, - 352, 353, nil, 355, 357, 358, nil, 396, nil, nil, - 129, 334, nil, 1613, nil, nil, nil, nil, 1170, 386, - 389, 447, nil, 1544, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1717, nil, 1736, nil, nil ] + 1670, 86, nil, nil, nil, 139, 402, nil, nil, nil, + nil, nil, 9, 401, nil, nil, 400, 227, nil, 272, + nil, 293, nil, 223, 24, nil, 391, 168, 324, nil, + 1651, 95, nil, nil, 520, 545, 571, nil, 328, nil, + 623, nil, nil, nil, nil, nil, nil, nil, nil, 6, + 675, 303, 333, nil, 1189, 313, nil, 293, 831, 267, + nil, 227, nil, 235, nil, nil, nil, 51, nil, nil, + 211, 202, nil, 214, 169, nil, 161, nil, 154, 979, + 1217, nil, 117, 954, nil, 901, nil, nil, 51, 90, + 75, nil, 175, -2, 21, 60, 94, nil, 187, nil, + 201, 208, 479, 204, 121, 87, 281, 271, nil, nil, + nil, 300, 315, 1394, 1289, 79, 294, nil, 1335, 326, + 30, nil, 34, nil, 321, nil, nil, nil, 314, 70, + 334, 363, 406, nil, 405, 405, nil, nil, nil, nil, + nil, nil, -2, 350, nil, 67, 19, nil, 380, 1097, + 1118, 1087, 1348, 60, 81, 133, 154, 206, 334, 355, + 407, 194, 1031, 649, 701, 142, 1550, 727, 753, 779, + nil, 261, nil, nil, nil, nil, nil, 116, nil, 359, + nil, 1136, 195, 338, 318, 289, 394, nil, 131, 56, + nil, nil, nil, -6, nil, nil, nil, 330, nil, 9, + nil, 4, 9, 51, 33, nil, 127, 88, nil, 1572, + nil, nil, 95, 845, 894, 117, 92, 94, 961, 143, + 125, nil, 876, 173, nil, 469, nil, nil, nil, 176, + nil, nil, 166, nil, 824, nil, nil, nil, nil, nil, + 4, nil, 232, 310, 365, 248, 230, 1230, 165, 181, + nil, 1276, 92, 292, nil, 232, 1591, 257, 203, 220, + nil, 299, nil, 2, 805, 1168, nil, 68, nil, nil, + 311, nil, 317, -20, -14, nil, nil, nil, 1150, 1056, + nil, 1531, 597, nil, nil, 129, 495, nil, nil, nil, + 1399, nil, 1490, nil, nil, nil, nil, nil, 1, nil, + nil, nil, nil, nil, nil, 428, nil, 241, nil, 376, + nil, 354, nil, nil, nil, nil, nil, nil, 380, 1024, + 387, nil, nil, nil, nil, 376, 377, nil, 378, 379, + 382, nil, nil, 1468, nil, nil, nil, nil, 1509, nil, + nil, nil, 1005, 405, 407, 1427, nil, 1449, nil, nil, + nil, nil, nil, nil, nil, 1613, nil, 1632, nil, nil ] racc_action_default = [ - -179, -217, -15, -3, -170, -217, -217, -16, -5, -168, - -17, -6, -217, -217, -7, -8, -217, -169, -9, -217, - -10, -217, -11, -217, -217, -12, -217, -217, -40, -13, - -1, -217, -14, -2, -217, -217, -217, -179, -169, -217, - -171, -173, -176, -175, -174, -204, -177, -178, -179, -75, - -82, -196, -31, -217, -215, -34, -32, -217, -64, -33, - -217, -107, -21, -109, -108, -22, -63, -23, -62, -26, - -27, -157, -217, -28, -156, -29, -158, -30, -217, -217, - -97, -93, -217, -101, -217, -117, -102, -217, -94, -98, - -100, -95, -217, -104, -96, -103, -99, -217, -159, -161, - -43, -217, -75, -179, -179, -217, -179, -41, -4, -39, - -217, -217, -72, -74, -217, -217, -192, -73, -217, -217, - -190, -217, -68, -65, -76, -71, -64, -60, -63, -66, - -202, -69, -58, -67, -217, -155, -154, -70, -80, -81, - -83, -217, -202, -20, -217, -217, -85, -217, -217, -217, - -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, - -217, -217, -217, -217, -217, -217, -217, -217, -217, -199, - -217, -133, -213, -212, -211, -207, -217, -208, -217, -126, - -217, -217, -82, -217, -217, -202, -196, -179, -217, -47, - -49, -63, -217, -56, -55, -46, -217, 358, -180, -217, - -181, -214, -194, -193, -195, -217, -217, -191, -172, -217, - -61, -217, -217, -203, -75, -217, -217, -203, -18, -217, - -217, -110, -217, -200, -201, -152, -217, -144, -145, -63, - -150, -217, -153, -151, -24, -25, -106, -217, -136, -122, - -124, -128, -125, -130, -135, -132, -129, -118, -134, -131, - -127, -119, -114, -217, -120, -121, -123, -197, -201, -205, - -217, -217, -217, -138, -217, -142, -160, -202, -111, -217, - -217, -217, -52, -51, -45, -217, -217, -44, -189, -217, - -217, -187, -184, -217, -165, -217, -167, -217, -35, -59, - -78, -36, -77, -202, -79, -38, -84, -19, -216, -86, - -217, -147, -202, -105, -217, -113, -114, -198, -206, -209, - -210, -139, -137, -217, -217, -217, -37, -50, -48, -91, - -87, -88, -53, -92, -89, -90, -54, -217, -182, -183, - -217, -217, -163, -217, -164, -166, -57, -149, -217, -217, - -201, -217, -112, -217, -143, -42, -188, -185, -186, -162, - -148, -146, -116, -217, -141, -217, -115, -140 ] + -180, -218, -15, -3, -170, -171, -218, -16, -5, -168, + -17, -6, -218, -218, -7, -8, -218, -169, -9, -218, + -10, -218, -11, -218, -218, -12, -218, -218, -40, -13, + -1, -218, -14, -2, -218, -218, -218, -171, -180, -169, + -218, -172, -174, -177, -176, -175, -205, -178, -179, -180, + -75, -82, -197, -31, -218, -216, -34, -32, -218, -64, + -33, -218, -107, -21, -109, -108, -22, -63, -23, -62, + -26, -27, -157, -218, -28, -156, -29, -158, -30, -218, + -218, -97, -93, -218, -101, -218, -117, -102, -218, -94, + -98, -100, -95, -218, -104, -96, -103, -99, -218, -159, + -161, -43, -218, -75, -180, -180, -218, -180, -41, -4, + -39, -218, -218, -72, -74, -181, -180, -182, -73, -218, + -218, -191, -218, -68, -65, -76, -71, -64, -60, -63, + -66, -203, -69, -58, -67, -218, -155, -154, -70, -80, + -81, -83, -218, -203, -20, -218, -218, -85, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -200, -218, -133, -214, -213, -212, -208, -218, -209, -218, + -126, -218, -218, -82, -218, -218, -203, -197, -180, -218, + -47, -49, -63, -218, -56, -55, -46, -218, 360, -218, + -215, -190, -218, -218, -188, -185, -218, -218, -193, -218, + -192, -173, -218, -61, -218, -218, -204, -75, -218, -218, + -204, -18, -218, -218, -110, -218, -201, -202, -152, -218, + -144, -145, -63, -150, -218, -153, -151, -24, -25, -106, + -218, -136, -122, -124, -128, -125, -130, -135, -132, -129, + -118, -134, -131, -127, -119, -114, -218, -120, -121, -123, + -198, -202, -206, -218, -218, -218, -138, -218, -142, -160, + -203, -111, -218, -218, -218, -52, -51, -45, -218, -218, + -44, -218, -218, -183, -184, -218, -218, -195, -194, -196, + -218, -167, -218, -35, -59, -78, -36, -77, -203, -79, + -38, -84, -19, -217, -86, -218, -147, -203, -105, -218, + -113, -114, -199, -207, -210, -211, -139, -137, -218, -218, + -218, -37, -50, -48, -91, -87, -88, -53, -92, -89, + -90, -54, -163, -218, -189, -186, -187, -165, -218, -166, + -57, -149, -218, -218, -202, -218, -112, -218, -143, -42, + -162, -164, -148, -146, -116, -218, -141, -218, -115, -140 ] racc_goto_table = [ - 24, 228, 59, 6, 130, 108, 16, 226, 177, 30, - 62, 132, 138, 40, 282, 137, 142, 212, 47, 263, - 37, 188, 196, 67, 234, 33, 305, 147, 97, 216, - 24, 110, 100, 6, 125, 296, 16, 262, 59, 265, - 338, 111, 106, 322, 326, 52, 144, 109, 227, 127, - 302, 99, 170, 199, 115, 48, 118, 185, 209, 67, - 207, 279, 116, 280, 146, 318, 203, 176, 56, 26, - nil, 183, 269, 120, 98, nil, nil, 122, nil, nil, - 342, 52, nil, nil, 301, nil, nil, nil, nil, 146, - 226, nil, nil, nil, 234, nil, nil, nil, nil, nil, - 123, 311, nil, nil, 56, 270, nil, nil, 146, 77, - nil, nil, nil, nil, nil, nil, nil, 74, nil, nil, - nil, 265, 208, nil, nil, 47, nil, 47, nil, 202, - nil, 200, nil, nil, 59, 59, nil, nil, nil, nil, - nil, 136, nil, 237, 138, 77, 347, nil, 267, 74, - nil, nil, 220, 74, 315, 235, 67, nil, nil, nil, - nil, nil, nil, nil, nil, 24, 247, nil, 6, 293, - 251, 16, 289, 344, 253, 292, 137, 52, 52, 138, - 336, 309, nil, nil, nil, nil, nil, nil, nil, 339, - nil, 350, nil, nil, nil, 125, nil, 226, nil, 225, - 56, 56, nil, nil, 59, 24, 24, nil, 6, 6, - nil, 16, 16, nil, 285, 287, nil, nil, 290, nil, - nil, nil, 294, nil, nil, 235, nil, nil, 108, 299, - nil, 225, 266, nil, nil, nil, nil, nil, 122, nil, - 136, 77, 77, nil, nil, nil, nil, 52, 74, 74, - 74, nil, nil, 24, nil, nil, 6, nil, nil, 16, - 108, 123, 108, nil, 73, nil, nil, nil, 310, 75, - 56, nil, 136, nil, nil, nil, nil, nil, nil, nil, - 74, nil, 225, 24, 69, 24, 6, 24, 6, 16, - 6, 16, 333, 16, nil, nil, 133, nil, nil, nil, - 73, 135, 136, 319, 319, 75, nil, 337, 108, nil, - 74, 77, nil, 225, nil, nil, 129, nil, nil, 74, - 69, nil, nil, 136, nil, nil, 320, 320, 108, nil, - 108, 74, nil, 24, 346, nil, 6, 70, 348, 16, - nil, 24, nil, 24, 6, nil, 6, 16, nil, 16, - 353, nil, 355, 24, 136, 24, 6, nil, 6, 16, - nil, 16, 74, nil, nil, 225, nil, 136, 136, 131, - 193, 193, nil, 70, nil, 74, 74, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, nil, nil, nil, 233, 73, 73, nil, nil, - 135, 75, 75, nil, nil, nil, 136, nil, nil, nil, - nil, nil, nil, nil, 74, 230, 69, 69, nil, nil, - 79, nil, nil, 194, 194, nil, nil, 233, nil, nil, - 136, nil, 135, nil, nil, nil, 112, 113, 74, nil, - 117, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, nil, nil, 193, nil, nil, 133, nil, nil, - nil, nil, 135, nil, nil, nil, 73, nil, 232, 70, - 70, 75, nil, nil, nil, nil, nil, 129, 233, 151, - nil, nil, nil, 135, nil, 171, 69, nil, nil, nil, - nil, nil, nil, 179, nil, nil, nil, nil, 230, nil, - 232, nil, nil, nil, nil, nil, nil, 194, nil, 233, - nil, nil, nil, nil, 135, nil, nil, nil, nil, nil, - nil, nil, 324, 324, nil, nil, nil, 325, 325, 230, - 131, nil, nil, nil, nil, nil, nil, nil, 193, 70, - nil, nil, 321, 321, nil, nil, nil, nil, nil, nil, - nil, 232, nil, 239, 240, 241, 242, 243, 244, 245, - 246, 233, 248, 249, 250, nil, 135, 254, 255, 256, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, 232, nil, nil, 233, nil, nil, nil, nil, - 135, 194, nil, nil, nil, 323, 323, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 6, 16, 109, 231, 24, 30, 38, 229, 178, 131, + 57, 215, 205, 143, 41, 76, 99, 133, 68, 48, + 266, 60, 138, 219, 139, 237, 63, 116, 107, 310, + 6, 16, 189, 197, 24, 111, 98, 327, 331, 268, + 148, 323, 265, 124, 301, 342, 230, 57, 136, 112, + 110, 307, 76, 100, 126, 68, 128, 33, 60, 207, + 49, 119, 186, 145, 212, 171, 272, 210, 202, 203, + 75, 101, 288, 147, 177, 26, nil, nil, nil, nil, + nil, nil, nil, nil, 184, 346, nil, nil, 306, nil, + nil, nil, 229, nil, nil, 117, 199, 237, 147, nil, + nil, nil, nil, 75, 316, nil, 121, 75, nil, nil, + nil, nil, nil, nil, nil, nil, 273, 147, nil, nil, + 53, nil, nil, 268, 211, nil, nil, 48, nil, 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, nil, + nil, nil, 228, 57, 57, 270, nil, 136, 76, 76, + 320, 238, 68, 123, 60, 60, 139, 53, nil, nil, + 240, 223, nil, nil, 117, nil, 6, 16, 250, nil, + 24, 256, 254, 208, 228, 269, 298, 348, 340, 136, + 294, nil, 335, 314, nil, 138, nil, 343, nil, 297, + nil, nil, nil, 139, nil, nil, 352, nil, nil, nil, + 229, nil, 75, 75, 75, nil, 124, 287, nil, 6, + 16, 136, nil, 24, 292, 57, nil, 126, nil, nil, + 76, nil, nil, 238, nil, nil, 60, 228, 109, 295, + nil, nil, 136, 299, 75, nil, 70, nil, nil, nil, + 304, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 74, nil, 53, 53, nil, 6, 16, 228, nil, + 24, nil, nil, 136, 109, nil, 75, nil, nil, 130, + 78, 325, 325, 70, nil, 75, 330, 330, 71, 315, + nil, 6, 16, nil, 134, 24, 333, 75, 74, nil, + 6, 16, 6, 16, 24, 338, 24, 334, nil, nil, + nil, 336, nil, 137, nil, 109, nil, 78, nil, nil, + 109, 132, 228, nil, nil, 71, 123, 136, 75, nil, + 341, nil, nil, 194, 194, 53, nil, 109, nil, 109, + nil, 75, 75, 6, 16, 228, nil, 24, 6, 16, + 136, nil, 24, nil, nil, 6, 16, 6, 16, 24, + 355, 24, 357, nil, nil, 6, 16, 6, 16, 24, + nil, 24, nil, nil, nil, 195, 195, nil, 233, 70, + 70, nil, 75, nil, nil, nil, nil, nil, nil, nil, + nil, 324, 324, 236, 74, 74, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 75, nil, nil, nil, nil, + 233, nil, 137, 78, 78, nil, nil, 194, nil, nil, + 235, 71, 71, nil, nil, 236, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 232 ] + nil, nil, 130, nil, 137, nil, nil, nil, nil, nil, + nil, 70, 235, nil, nil, nil, nil, 134, 80, 195, + nil, nil, nil, 233, nil, nil, 74, nil, nil, nil, + nil, nil, nil, nil, 113, 114, 137, nil, 236, 118, + nil, nil, nil, nil, 132, 78, nil, nil, nil, nil, + nil, nil, nil, 71, 233, nil, nil, 137, nil, nil, + nil, nil, nil, 194, nil, 235, nil, 326, 326, 236, + nil, nil, nil, nil, nil, nil, nil, nil, 152, nil, + nil, nil, 329, 329, 172, nil, nil, nil, 137, nil, + nil, nil, 180, nil, nil, nil, 235, nil, nil, nil, + nil, 137, 137, nil, nil, 195, nil, nil, 233, 328, + 328, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 236, nil, nil, nil, nil, nil, nil, + nil, 233, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 137, nil, nil, nil, 236, nil, nil, nil, + 235, nil, 242, 243, 244, 245, 246, 247, 248, 249, + nil, 251, 252, 253, nil, 137, 257, 258, 259, nil, + nil, nil, nil, 235 ] racc_goto_check = [ - 34, 64, 28, 49, 32, 4, 20, 62, 78, 2, - 18, 44, 50, 71, 75, 47, 35, 33, 58, 60, - 29, 38, 38, 20, 19, 3, 57, 54, 51, 33, - 34, 34, 37, 49, 28, 53, 20, 59, 28, 62, - 55, 51, 29, 43, 43, 26, 18, 5, 63, 30, - 65, 66, 54, 67, 68, 69, 70, 32, 31, 20, - 72, 73, 3, 74, 51, 39, 76, 77, 27, 1, - nil, 54, 33, 3, 27, nil, nil, 26, nil, nil, - 57, 26, nil, nil, 64, nil, nil, nil, nil, 51, - 62, nil, nil, nil, 19, nil, nil, nil, nil, nil, - 27, 60, nil, nil, 27, 38, nil, nil, 51, 25, - nil, nil, nil, nil, nil, nil, nil, 46, nil, nil, - nil, 62, 71, nil, nil, 58, nil, 58, nil, 29, - nil, 3, nil, nil, 28, 28, nil, nil, nil, nil, - nil, 25, nil, 18, 50, 25, 75, nil, 35, 46, - nil, nil, 51, 46, 33, 20, 20, nil, nil, nil, - nil, nil, nil, nil, nil, 34, 58, nil, 49, 32, - 58, 20, 44, 62, 2, 50, 47, 26, 26, 50, - 33, 78, nil, nil, nil, nil, nil, nil, nil, 33, - nil, 64, nil, nil, nil, 28, nil, 62, nil, 27, - 27, 27, nil, nil, 28, 34, 34, nil, 49, 49, - nil, 20, 20, nil, 2, 2, nil, nil, 51, nil, - nil, nil, 51, nil, nil, 20, nil, nil, 4, 51, - nil, 27, 27, nil, nil, nil, nil, nil, 26, nil, - 25, 25, 25, nil, nil, nil, nil, 26, 46, 46, - 46, nil, nil, 34, nil, nil, 49, nil, nil, 20, - 4, 27, 4, nil, 23, nil, nil, nil, 51, 24, - 27, nil, 25, nil, nil, nil, nil, nil, nil, nil, - 46, nil, 27, 34, 21, 34, 49, 34, 49, 20, - 49, 20, 2, 20, nil, nil, 23, nil, nil, nil, - 23, 24, 25, 26, 26, 24, nil, 51, 4, nil, - 46, 25, nil, 27, nil, nil, 21, nil, nil, 46, - 21, nil, nil, 25, nil, nil, 27, 27, 4, nil, - 4, 46, nil, 34, 51, nil, 49, 22, 51, 20, - nil, 34, nil, 34, 49, nil, 49, 20, nil, 20, - 2, nil, 2, 34, 25, 34, 49, nil, 49, 20, - nil, 20, 46, nil, nil, 27, nil, 25, 25, 22, - 21, 21, nil, 22, nil, 46, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 27, - nil, nil, nil, nil, nil, 23, 23, 23, nil, nil, - 24, 24, 24, nil, nil, nil, 25, nil, nil, nil, - nil, nil, nil, nil, 46, 21, 21, 21, nil, nil, - 48, nil, nil, 22, 22, nil, nil, 23, nil, nil, - 25, nil, 24, nil, nil, nil, 48, 48, 46, nil, - 48, nil, nil, nil, nil, nil, nil, 21, nil, nil, - nil, nil, nil, nil, 21, nil, nil, 23, nil, nil, - nil, nil, 24, nil, nil, nil, 23, nil, 22, 22, - 22, 24, nil, nil, nil, nil, nil, 21, 23, 48, - nil, nil, nil, 24, nil, 48, 21, nil, nil, nil, - nil, nil, nil, 48, nil, nil, nil, nil, 21, nil, - 22, nil, nil, nil, nil, nil, nil, 22, nil, 23, - nil, nil, nil, nil, 24, nil, nil, nil, nil, nil, - nil, nil, 23, 23, nil, nil, nil, 24, 24, 21, - 22, nil, nil, nil, nil, nil, nil, nil, 21, 22, - nil, nil, 21, 21, nil, nil, nil, nil, nil, nil, - nil, 22, nil, 48, 48, 48, 48, 48, 48, 48, - 48, 23, 48, 48, 48, nil, 24, 48, 48, 48, + 49, 20, 4, 64, 34, 2, 29, 62, 78, 32, + 27, 33, 75, 35, 71, 24, 27, 44, 20, 58, + 60, 28, 47, 33, 50, 19, 18, 67, 29, 57, + 49, 20, 38, 38, 34, 34, 51, 43, 43, 62, + 54, 39, 59, 27, 53, 55, 63, 27, 24, 51, + 5, 65, 24, 66, 28, 20, 30, 3, 28, 68, + 69, 70, 32, 18, 31, 54, 33, 72, 73, 74, + 46, 37, 76, 51, 77, 1, nil, nil, nil, nil, + nil, nil, nil, nil, 54, 57, nil, nil, 64, nil, + nil, nil, 62, nil, nil, 3, 67, 19, 51, nil, + nil, nil, nil, 46, 60, nil, 3, 46, nil, nil, + nil, nil, nil, nil, nil, nil, 38, 51, nil, nil, + 26, nil, nil, 62, 71, nil, nil, 58, nil, 58, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 21, 22, nil, nil, 23, nil, nil, nil, nil, - 24, 22, nil, nil, nil, 22, 22, nil, nil, nil, - nil, nil, nil, nil, nil, 21, nil, nil, nil, nil, + nil, nil, 27, 27, 27, 35, nil, 24, 24, 24, + 33, 20, 20, 26, 28, 28, 50, 26, nil, nil, + 18, 51, nil, nil, 3, nil, 49, 20, 58, nil, + 34, 2, 58, 3, 27, 27, 32, 62, 33, 24, + 44, nil, 75, 78, nil, 47, nil, 33, nil, 50, + nil, nil, nil, 50, nil, nil, 64, nil, nil, nil, + 62, nil, 46, 46, 46, nil, 27, 29, nil, 49, + 20, 24, nil, 34, 2, 27, nil, 28, nil, nil, + 24, nil, nil, 20, nil, nil, 28, 27, 4, 51, + nil, nil, 24, 51, 46, nil, 21, nil, nil, nil, + 51, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 23, nil, 26, 26, nil, 49, 20, 27, nil, + 34, nil, nil, 24, 4, nil, 46, nil, nil, 21, + 25, 27, 27, 21, nil, 46, 24, 24, 22, 51, + nil, 49, 20, nil, 23, 34, 2, 46, 23, nil, + 49, 20, 49, 20, 34, 2, 34, 51, nil, nil, + nil, 51, nil, 25, nil, 4, nil, 25, nil, nil, + 4, 22, 27, nil, nil, 22, 26, 24, 46, nil, + 51, nil, nil, 21, 21, 26, nil, 4, nil, 4, + nil, 46, 46, 49, 20, 27, nil, 34, 49, 20, + 24, nil, 34, nil, nil, 49, 20, 49, 20, 34, + 2, 34, 2, nil, nil, 49, 20, 49, 20, 34, + nil, 34, nil, nil, nil, 22, 22, nil, 21, 21, + 21, nil, 46, nil, nil, nil, nil, nil, nil, nil, + nil, 26, 26, 23, 23, 23, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 46, nil, nil, nil, nil, + 21, nil, 25, 25, 25, nil, nil, 21, nil, nil, + 22, 22, 22, nil, nil, 23, 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, 22, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 22 ] + nil, nil, 21, nil, 25, nil, nil, nil, nil, nil, + nil, 21, 22, nil, nil, nil, nil, 23, 48, 22, + nil, nil, nil, 21, nil, nil, 23, nil, nil, nil, + nil, nil, nil, nil, 48, 48, 25, nil, 23, 48, + nil, nil, nil, nil, 22, 25, nil, nil, nil, nil, + nil, nil, nil, 22, 21, nil, nil, 25, nil, nil, + nil, nil, nil, 21, nil, 22, nil, 21, 21, 23, + nil, nil, nil, nil, nil, nil, nil, nil, 48, nil, + nil, nil, 23, 23, 48, nil, nil, nil, 25, nil, + nil, nil, 48, nil, nil, nil, 22, nil, nil, nil, + nil, 25, 25, nil, nil, 22, nil, nil, 21, 22, + 22, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 23, nil, nil, nil, nil, nil, nil, + nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 25, nil, nil, nil, 23, nil, nil, nil, + 22, nil, 48, 48, 48, 48, 48, 48, 48, 48, + nil, 48, 48, 48, nil, 25, 48, 48, 48, nil, + nil, nil, nil, 22 ] racc_goto_pointer = [ - nil, 69, 9, 25, -25, 16, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -7, -125, - 6, 267, 320, 247, 252, 92, 28, 51, -15, 15, - 0, -69, -45, -113, 0, -34, nil, 8, -82, -206, - nil, nil, nil, -232, -38, nil, 100, -34, 401, 3, - -38, 7, nil, -182, -30, -262, nil, -226, 6, -143, - -161, nil, -141, -100, -147, -181, 28, -53, 17, 43, - 8, 1, -59, -137, -135, -184, -48, -20, -79, nil ] + nil, 75, 5, 57, -28, 19, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 9, -125, + 1, 219, 261, 234, -2, 253, 103, -7, 4, 1, + 6, -64, -41, -120, 4, -38, nil, 47, -72, -233, + nil, nil, nil, -241, -33, nil, 53, -28, 429, 0, + -27, 15, nil, -176, -18, -262, nil, -226, 7, -139, + -161, nil, -142, -103, -146, -183, 30, -11, -57, 48, + 12, 2, -53, -47, -46, -103, -134, -14, -80, nil ] racc_goto_default = [ - nil, nil, nil, 195, 3, 8, 11, 14, 15, 18, - 20, 22, 25, 29, 32, 2, 7, 10, nil, 65, - 86, 88, 89, 91, 94, 95, 80, 81, 83, 13, - nil, nil, nil, nil, 72, nil, 31, nil, nil, 189, - 271, 190, 192, nil, nil, 134, 93, 96, nil, 54, - 124, 85, 139, 140, nil, 222, 90, nil, 76, nil, - nil, 264, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, 178 ] + nil, nil, nil, 196, 3, 8, 11, 14, 15, 18, + 20, 22, 25, 29, 32, 2, 7, 10, nil, 66, + 87, 89, 90, 92, 95, 96, 81, 82, 84, 13, + nil, nil, nil, nil, 73, nil, 31, nil, nil, 190, + 274, 191, 193, nil, nil, 135, 94, 97, nil, 55, + 125, 86, 140, 141, nil, 225, 91, nil, 77, nil, + nil, 267, 61, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 42, nil, nil, nil, nil, nil, nil, 179 ] racc_token_table = { false => 0, Object.new => 1, :LBRACK => 2, :DQTEXT => 3, :SQTEXT => 4, :RBRACK => 5, :LBRACE => 6, :RBRACE => 7, :SYMBOL => 8, :FARROW => 9, :COMMA => 10, :TRUE => 11, :FALSE => 12, :EQUALS => 13, :APPENDS => 14, :LESSEQUAL => 15, :NOTEQUAL => 16, :DOT => 17, :COLON => 18, :LLCOLLECT => 19, :RRCOLLECT => 20, :QMARK => 21, :LPAREN => 22, :RPAREN => 23, :ISEQUAL => 24, :GREATEREQUAL => 25, :GREATERTHAN => 26, :LESSTHAN => 27, :IF => 28, :ELSE => 29, :IMPORT => 30, :DEFINE => 31, :ELSIF => 32, :VARIABLE => 33, :CLASS => 34, :INHERITS => 35, :NODE => 36, :BOOLEAN => 37, :NAME => 38, :SEMIC => 39, :CASE => 40, :DEFAULT => 41, :AT => 42, :LCOLLECT => 43, :RCOLLECT => 44, :CLASSNAME => 45, :CLASSREF => 46, :NOT => 47, :OR => 48, :AND => 49, :UNDEF => 50, :PARROW => 51, :PLUS => 52, :MINUS => 53, :TIMES => 54, :DIV => 55, :LSHIFT => 56, :RSHIFT => 57, :UMINUS => 58, :MATCH => 59, :NOMATCH => 60, :REGEX => 61 } racc_use_result_var = true racc_nt_base = 62 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', 'LBRACK', 'DQTEXT', 'SQTEXT', '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', '$start', 'program', 'statements', 'nil', 'statement', 'resource', 'virtualresource', 'collection', 'assignment', 'casestatement', 'ifstatement', 'import', 'fstatement', 'definition', 'hostclass', 'nodedef', 'resourceoverride', 'append', 'funcvalues', 'namestring', 'resourceref', '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', 'else', 'regex', 'caseopts', 'caseopt', 'casevalues', 'selectlhand', 'svalues', 'selectval', 'sintvalues', 'qtexts', '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', 44 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 result = nil end result end .,., # reduce 2 omitted # reduce 3 omitted module_eval <<'.,.,', 'grammar.ra', 60 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 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 module_eval <<'.,.,', 'grammar.ra', 84 def _reduce_18( val, _values, result ) 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', 92 def _reduce_19( val, _values, result ) 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', 98 def _reduce_20( val, _values, result ) result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => AST::ASTArray.new({}), :ftype => :statement result end .,., module_eval <<'.,.,', 'grammar.ra', 106 def _reduce_21( val, _values, result ) args = aryfy(val[1]) result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => args, :ftype => :statement result end .,., # reduce 22 omitted # reduce 23 omitted module_eval <<'.,.,', 'grammar.ra', 114 def _reduce_24( val, _values, result ) result = aryfy(val[0], val[2]) result.line = @lexer.line result.file = @lexer.file result end .,., module_eval <<'.,.,', 'grammar.ra', 123 def _reduce_25( val, _values, result ) unless val[0].is_a?(AST::ASTArray) val[0] = aryfy(val[0]) end val[0].push(val[2]) result = val[0] result end .,., # reduce 26 omitted # reduce 27 omitted # reduce 28 omitted # reduce 29 omitted # reduce 30 omitted # reduce 31 omitted # reduce 32 omitted # reduce 33 omitted module_eval <<'.,.,', 'grammar.ra', 137 def _reduce_34( val, _values, result ) result = ast AST::Name, :value => val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 159 def _reduce_35( val, _values, result ) @lexer.commentpop array = val[2] if array.instance_of?(AST::ResourceInstance) array = [array] end 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], :params => instance[1]) } result end .,., module_eval <<'.,.,', 'grammar.ra', 162 def _reduce_36( val, _values, result ) # This is a deprecated syntax. error "All resource specifications require names" result end .,., module_eval <<'.,.,', 'grammar.ra', 165 def _reduce_37( val, _values, result ) # a defaults setting for a type result = ast(AST::ResourceDefaults, :type => val[0], :params => val[2]) result end .,., module_eval <<'.,.,', 'grammar.ra', 171 def _reduce_38( val, _values, result ) @lexer.commentpop result = ast AST::ResourceOverride, :object => val[0], :params => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 198 def _reduce_39( val, _values, result ) type = val[0] 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 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] result end .,., module_eval <<'.,.,', 'grammar.ra', 199 def _reduce_40( val, _values, result ) result = :virtual result end .,., module_eval <<'.,.,', 'grammar.ra', 200 def _reduce_41( val, _values, result ) result = :exported result end .,., module_eval <<'.,.,', 'grammar.ra', 224 def _reduce_42( 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} 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', 243 def _reduce_43( 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 } 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', 253 def _reduce_44( val, _values, result ) if val[1] result = val[1] result.form = :virtual else result = :virtual end result end .,., module_eval <<'.,.,', 'grammar.ra', 261 def _reduce_45( val, _values, result ) if val[1] result = val[1] result.form = :exported else result = :exported end result end .,., # reduce 46 omitted # reduce 47 omitted module_eval <<'.,.,', 'grammar.ra', 269 def _reduce_48( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] result end .,., # reduce 49 omitted module_eval <<'.,.,', 'grammar.ra', 275 def _reduce_50( val, _values, result ) result = val[1] result.parens = true result end .,., module_eval <<'.,.,', 'grammar.ra', 276 def _reduce_51( val, _values, result ) result=val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 277 def _reduce_52( val, _values, result ) result=val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 284 def _reduce_53( 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 .,., module_eval <<'.,.,', 'grammar.ra', 289 def _reduce_54( 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 55 omitted # reduce 56 omitted module_eval <<'.,.,', 'grammar.ra', 296 def _reduce_57( val, _values, result ) result = ast AST::ResourceInstance, :children => [val[0],val[2]] result end .,., # reduce 58 omitted module_eval <<'.,.,', 'grammar.ra', 306 def _reduce_59( 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 end .,., # reduce 60 omitted # reduce 61 omitted module_eval <<'.,.,', 'grammar.ra', 313 def _reduce_62( val, _values, result ) result = ast AST::Undef, :value => :undef result end .,., module_eval <<'.,.,', 'grammar.ra', 317 def _reduce_63( val, _values, result ) result = ast AST::Name, :value => val[0][:value], :line => val[0][:line] result end .,., module_eval <<'.,.,', 'grammar.ra', 321 def _reduce_64( val, _values, result ) result = ast AST::Type, :value => val[0][:value], :line => val[0][:line] result end .,., # reduce 65 omitted # reduce 66 omitted # reduce 67 omitted # reduce 68 omitted # reduce 69 omitted # reduce 70 omitted # reduce 71 omitted module_eval <<'.,.,', 'grammar.ra', 338 def _reduce_72( 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] result end .,., module_eval <<'.,.,', 'grammar.ra', 341 def _reduce_73( val, _values, result ) result = ast AST::VarDef, :name => val[0], :value => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 346 def _reduce_74( 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] result end .,., module_eval <<'.,.,', 'grammar.ra', 351 def _reduce_75( val, _values, result ) result = ast AST::ASTArray result end .,., module_eval <<'.,.,', 'grammar.ra', 351 def _reduce_76( val, _values, result ) result = val[0] result end .,., module_eval <<'.,.,', 'grammar.ra', 360 def _reduce_77( 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 result end .,., module_eval <<'.,.,', 'grammar.ra', 364 def _reduce_78( val, _values, result ) result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 369 def _reduce_79( val, _values, result ) result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2], :add => true result end .,., # reduce 80 omitted # reduce 81 omitted module_eval <<'.,.,', 'grammar.ra', 377 def _reduce_82( val, _values, result ) result = ast AST::ASTArray result end .,., module_eval <<'.,.,', 'grammar.ra', 377 def _reduce_83( val, _values, result ) result = val[0] result end .,., module_eval <<'.,.,', 'grammar.ra', 386 def _reduce_84( 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 result end .,., # reduce 85 omitted module_eval <<'.,.,', 'grammar.ra', 395 def _reduce_86( 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 end .,., # reduce 87 omitted # reduce 88 omitted # reduce 89 omitted # reduce 90 omitted # reduce 91 omitted # reduce 92 omitted # reduce 93 omitted # reduce 94 omitted # reduce 95 omitted # reduce 96 omitted # reduce 97 omitted # reduce 98 omitted # reduce 99 omitted # reduce 100 omitted # reduce 101 omitted # reduce 102 omitted # reduce 103 omitted # reduce 104 omitted module_eval <<'.,.,', 'grammar.ra', 424 def _reduce_105( val, _values, result ) 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', 429 def _reduce_106( val, _values, result ) result = ast AST::Function, :name => val[0][:value], :line => val[0][:line], :arguments => AST::ASTArray.new({}), :ftype => :rvalue result end .,., module_eval <<'.,.,', 'grammar.ra', 433 def _reduce_107( val, _values, result ) result = ast AST::String, :value => val[0][:value], :line => val[0][:line] result end .,., module_eval <<'.,.,', 'grammar.ra', 435 def _reduce_108( val, _values, result ) result = ast AST::FlatString, :value => val[0][:value], :line => val[0][:line] result end .,., module_eval <<'.,.,', 'grammar.ra', 439 def _reduce_109( val, _values, result ) result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line] result end .,., module_eval <<'.,.,', 'grammar.ra', 444 def _reduce_110( 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] result end .,., module_eval <<'.,.,', 'grammar.ra', 446 def _reduce_111( val, _values, result ) result = ast AST::ResourceReference, :type => val[0], :title => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 460 def _reduce_112( val, _values, result ) @lexer.commentpop args = { :test => val[1], :statements => val[3] } if val[5] args[:else] = val[5] end result = ast AST::IfStatement, args result end .,., module_eval <<'.,.,', 'grammar.ra', 473 def _reduce_113( val, _values, result ) @lexer.commentpop args = { :test => val[1], :statements => ast(AST::Nop) } if val[4] args[:else] = val[4] end result = ast AST::IfStatement, args result end .,., # reduce 114 omitted module_eval <<'.,.,', 'grammar.ra', 479 def _reduce_115( val, _values, result ) @lexer.commentpop result = ast AST::Else, :statements => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 483 def _reduce_116( val, _values, result ) @lexer.commentpop result = ast AST::Else, :statements => ast(AST::Nop) result end .,., # reduce 117 omitted module_eval <<'.,.,', 'grammar.ra', 500 def _reduce_118( val, _values, result ) result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 503 def _reduce_119( val, _values, result ) result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 506 def _reduce_120( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 509 def _reduce_121( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 512 def _reduce_122( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 515 def _reduce_123( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 518 def _reduce_124( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 521 def _reduce_125( val, _values, result ) result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 524 def _reduce_126( val, _values, result ) result = ast AST::Minus, :value => val[1] result end .,., module_eval <<'.,.,', 'grammar.ra', 527 def _reduce_127( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 530 def _reduce_128( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 533 def _reduce_129( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 536 def _reduce_130( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 539 def _reduce_131( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 542 def _reduce_132( val, _values, result ) result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 545 def _reduce_133( val, _values, result ) result = ast AST::Not, :value => val[1] result end .,., module_eval <<'.,.,', 'grammar.ra', 548 def _reduce_134( val, _values, result ) result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 551 def _reduce_135( val, _values, result ) result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 554 def _reduce_136( val, _values, result ) result = val[1] result end .,., module_eval <<'.,.,', 'grammar.ra', 563 def _reduce_137( 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 result end .,., # reduce 138 omitted module_eval <<'.,.,', 'grammar.ra', 573 def _reduce_139( 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 result end .,., module_eval <<'.,.,', 'grammar.ra', 578 def _reduce_140( val, _values, result ) @lexer.commentpop result = ast AST::CaseOpt, :value => val[0], :statements => val[3] result end .,., module_eval <<'.,.,', 'grammar.ra', 584 def _reduce_141( val, _values, result ) @lexer.commentpop result = ast(AST::CaseOpt, :value => val[0], :statements => ast(AST::ASTArray) ) result end .,., # reduce 142 omitted module_eval <<'.,.,', 'grammar.ra', 594 def _reduce_143( 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 result end .,., module_eval <<'.,.,', 'grammar.ra', 598 def _reduce_144( val, _values, result ) result = ast AST::Selector, :param => val[0], :values => val[2] result end .,., # reduce 145 omitted module_eval <<'.,.,', 'grammar.ra', 604 def _reduce_146( val, _values, result ) @lexer.commentpop result = val[1] result end .,., # reduce 147 omitted module_eval <<'.,.,', 'grammar.ra', 614 def _reduce_148( 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 result end .,., module_eval <<'.,.,', 'grammar.ra', 618 def _reduce_149( val, _values, result ) result = ast AST::ResourceParam, :param => val[0], :value => val[2] result end .,., # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted module_eval <<'.,.,', 'grammar.ra', 629 def _reduce_157( val, _values, result ) result = ast AST::Default, :value => val[0][:value], :line => val[0][:line] result end .,., # reduce 158 omitted module_eval <<'.,.,', 'grammar.ra', 632 def _reduce_159( val, _values, result ) result = [val[0].value] result end .,., module_eval <<'.,.,', 'grammar.ra', 636 def _reduce_160( val, _values, result ) results = val[0] << val[2].value result end .,., module_eval <<'.,.,', 'grammar.ra', 644 def _reduce_161( val, _values, result ) val[1].each do |file| import(file) end result = AST::ASTArray.new(:children => []) result end .,., module_eval <<'.,.,', 'grammar.ra', 655 def _reduce_162( val, _values, result ) @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', 660 def _reduce_163( val, _values, result ) @lexer.commentpop newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line] @lexer.indefine = false result = nil result end .,., module_eval <<'.,.,', 'grammar.ra', 669 def _reduce_164( val, _values, result ) @lexer.commentpop # Our class gets defined in the parent namespace, not our own. @lexer.namepop - newclass classname(val[1]), :code => val[4], :parent => val[2], :line => val[0][:line] + newclass classname(val[1]), :arguments => val[2], :code => val[5], :parent => val[3], :line => val[0][:line] result = nil result end .,., module_eval <<'.,.,', 'grammar.ra', 675 def _reduce_165( val, _values, result ) @lexer.commentpop # Our class gets defined in the parent namespace, not our own. @lexer.namepop - newclass classname(val[1]), :parent => val[2], :line => val[0][:line] + newclass classname(val[1]), :arguments => val[2], :parent => val[3], :line => val[0][:line] result = nil result end .,., module_eval <<'.,.,', 'grammar.ra', 681 def _reduce_166( val, _values, result ) @lexer.commentpop newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line] result = nil result end .,., module_eval <<'.,.,', 'grammar.ra', 685 def _reduce_167( val, _values, result ) @lexer.commentpop newnode val[1], :parent => val[2], :line => val[0][:line] result = nil result end .,., module_eval <<'.,.,', 'grammar.ra', 686 def _reduce_168( val, _values, result ) result = val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 688 def _reduce_169( val, _values, result ) result = val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 689 def _reduce_170( val, _values, result ) result = val[0][:value] result end .,., - # reduce 171 omitted - -module_eval <<'.,.,', 'grammar.ra', 699 - def _reduce_172( val, _values, result ) - result = val[0] - result = [result] unless result.is_a?(Array) - result << val[2] +module_eval <<'.,.,', 'grammar.ra', 690 + def _reduce_171( val, _values, result ) + result = "class" result end .,., -module_eval <<'.,.,', 'grammar.ra', 703 + # reduce 172 omitted + +module_eval <<'.,.,', 'grammar.ra', 700 def _reduce_173( val, _values, result ) - result = ast AST::HostName, :value => val[0] + result = val[0] + result = [result] unless result.is_a?(Array) + result << val[2] result end .,., module_eval <<'.,.,', 'grammar.ra', 704 def _reduce_174( val, _values, result ) - result = val[0][:value] + result = ast AST::HostName, :value => val[0] result end .,., module_eval <<'.,.,', 'grammar.ra', 705 def _reduce_175( val, _values, result ) result = val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 706 def _reduce_176( val, _values, result ) result = val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 707 def _reduce_177( val, _values, result ) result = val[0][:value] result end .,., - # reduce 178 omitted +module_eval <<'.,.,', 'grammar.ra', 708 + def _reduce_178( val, _values, result ) + result = val[0][:value] + result + end +.,., -module_eval <<'.,.,', 'grammar.ra', 713 - def _reduce_179( val, _values, result ) + # reduce 179 omitted + +module_eval <<'.,.,', 'grammar.ra', 714 + def _reduce_180( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 717 - def _reduce_180( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 718 + def _reduce_181( val, _values, result ) result = ast AST::ASTArray, :children => [] result end .,., - # reduce 181 omitted + # reduce 182 omitted -module_eval <<'.,.,', 'grammar.ra', 722 - def _reduce_182( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 723 + def _reduce_183( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 726 - def _reduce_183( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 727 + def _reduce_184( val, _values, result ) result = val[1] result = [result] unless result[0].is_a?(Array) result end .,., - # reduce 184 omitted + # reduce 185 omitted -module_eval <<'.,.,', 'grammar.ra', 733 - def _reduce_185( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 734 + def _reduce_186( val, _values, result ) result = val[0] result = [result] unless result[0].is_a?(Array) result << val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 738 - def _reduce_186( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 739 + def _reduce_187( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0][:value], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 742 - def _reduce_187( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 743 + def _reduce_188( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0][:value]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 744 - def _reduce_188( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 745 + def _reduce_189( val, _values, result ) result = [val[0][:value], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 746 - def _reduce_189( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 747 + def _reduce_190( val, _values, result ) result = [val[0][:value]] result end .,., - # reduce 190 omitted + # reduce 191 omitted -module_eval <<'.,.,', 'grammar.ra', 751 - def _reduce_191( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 752 + def _reduce_192( val, _values, result ) result = val[1] result end .,., - # reduce 192 omitted + # reduce 193 omitted -module_eval <<'.,.,', 'grammar.ra', 756 - def _reduce_193( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 757 + def _reduce_194( val, _values, result ) result = val[1] result end .,., - # reduce 194 omitted - # reduce 195 omitted -module_eval <<'.,.,', 'grammar.ra', 762 - def _reduce_196( val, _values, result ) + # reduce 196 omitted + +module_eval <<'.,.,', 'grammar.ra', 763 + def _reduce_197( val, _values, result ) result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line] result end .,., -module_eval <<'.,.,', 'grammar.ra', 770 - def _reduce_197( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 771 + def _reduce_198( val, _values, result ) 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', 777 - def _reduce_198( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 778 + def _reduce_199( val, _values, result ) 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', 779 - def _reduce_199( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 780 + def _reduce_200( val, _values, result ) result = ast AST::ASTArray result end .,., - # reduce 200 omitted - # reduce 201 omitted # reduce 202 omitted -module_eval <<'.,.,', 'grammar.ra', 784 - def _reduce_203( val, _values, result ) + # reduce 203 omitted + +module_eval <<'.,.,', 'grammar.ra', 785 + def _reduce_204( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 789 - def _reduce_204( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 790 + def _reduce_205( val, _values, result ) result = ast AST::Regex, :value => val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 797 - def _reduce_205( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 798 + def _reduce_206( val, _values, result ) 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', 804 - def _reduce_206( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 805 + def _reduce_207( val, _values, result ) 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', 806 - def _reduce_207( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 807 + def _reduce_208( val, _values, result ) result = ast AST::ASTHash result end .,., - # reduce 208 omitted + # reduce 209 omitted -module_eval <<'.,.,', 'grammar.ra', 816 - def _reduce_209( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 817 + def _reduce_210( 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 end .,., -module_eval <<'.,.,', 'grammar.ra', 820 - def _reduce_210( val, _values, result ) - result = ast AST::ASTHash, { :value => { val[0] => val[2] } } - result - end -.,., - module_eval <<'.,.,', 'grammar.ra', 821 def _reduce_211( val, _values, result ) - result = val[0][:value] + result = ast AST::ASTHash, { :value => { val[0] => val[2] } } result end .,., module_eval <<'.,.,', 'grammar.ra', 822 def _reduce_212( val, _values, result ) result = val[0][:value] result end .,., module_eval <<'.,.,', 'grammar.ra', 823 def _reduce_213( val, _values, result ) result = val[0][:value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 828 +module_eval <<'.,.,', 'grammar.ra', 824 def _reduce_214( val, _values, result ) + result = val[0][:value] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 829 + def _reduce_215( val, _values, result ) result = ast AST::HashOrArrayAccess, :variable => val[0][:value], :key => val[2] result end .,., - # reduce 215 omitted + # reduce 216 omitted -module_eval <<'.,.,', 'grammar.ra', 833 - def _reduce_216( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 834 + def _reduce_217( 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.rb b/spec/unit/parser/parser.rb index bb0fa0a7b..84749c3fb 100755 --- a/spec/unit/parser/parser.rb +++ b/spec/unit/parser/parser.rb @@ -1,414 +1,455 @@ #!/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 describe "when parsing files" do before do FileTest.stubs(:exist?).returns true File.stubs(:open) @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 describe "in ruby" do it "should use the ruby interpreter to load the file" do @parser.file = "/my/file.rb" @parser.expects(:require).with "/my/file.rb" @parser.parse_ruby_file end 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 '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[:params].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 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" } @parser.expects(:ast_context).returns :file => "/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(true).returns({}) @parser.ast(@class, :file => "/bar") 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 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 check for them by name" do @parser.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 check for them by name" do @parser.stubs(:find_or_load).with("namespace","name",:hostclass).returns(:this_value) @parser.find_hostclass("namespace","name").should == :this_value end end describe "when looking up names" do before :each do @known_resource_types = mock 'loaded code' @known_resource_types.stubs(:find_my_type).with('loaded_namespace', 'loaded_name').returns(true) @known_resource_types.stubs(:find_my_type).with('bogus_namespace', 'bogus_name' ).returns(false) @parser = Puppet::Parser::Parser.new "development" @parser.stubs(:known_resource_types).returns @known_resource_types end describe "that are already loaded" do it "should not try to load anything" do @parser.expects(:load).never @parser.find_or_load("loaded_namespace","loaded_name",:my_type) end it "should return true" do @parser.find_or_load("loaded_namespace","loaded_name",:my_type).should == true end end describe "that aren't already loaded" do it "should first attempt to load them with the all lowercase fully qualified name" do @known_resource_types.stubs(:find_my_type).with("foo_namespace","foo_name").returns(false,true,true) @parser.expects(:load).with("foo_namespace::foo_name").returns(true).then.raises(Exception) @parser.find_or_load("Foo_namespace","Foo_name",:my_type).should == true end it "should next attempt to load them with the all lowercase namespace" do @known_resource_types.stubs(:find_my_type).with("foo_namespace","foo_name").returns(false,false,true,true) @parser.expects(:load).with("foo_namespace::foo_name").returns(false).then.raises(Exception) @parser.expects(:load).with("foo_namespace" ).returns(true ).then.raises(Exception) @parser.find_or_load("Foo_namespace","Foo_name",:my_type).should == true end it "should finally attempt to load them with the all lowercase unqualified name" do @known_resource_types.stubs(:find_my_type).with("foo_namespace","foo_name").returns(false,false,false,true,true) @parser.expects(:load).with("foo_namespace::foo_name").returns(false).then.raises(Exception) @parser.expects(:load).with("foo_namespace" ).returns(false).then.raises(Exception) @parser.expects(:load).with( "foo_name").returns(true ).then.raises(Exception) @parser.find_or_load("Foo_namespace","Foo_name",:my_type).should == true end it "should return false if the name isn't found" do @parser.stubs(:load).returns(false) @parser.find_or_load("Bogus_namespace","Bogus_name",:my_type).should == false end it "should directly look for fully qualified classes" do @known_resource_types.stubs(:find_hostclass).with("foo_namespace","::foo_name").returns(false, true) @parser.expects(:load).with("foo_name").returns true @parser.find_or_load("foo_namespace","::foo_name",:hostclass) end end end describe "when loading classnames" do before :each do @known_resource_types = mock 'loaded code' @parser = Puppet::Parser::Parser.new "development" @parser.stubs(:known_resource_types).returns @known_resource_types end it "should just return false if the classname is empty" do @parser.expects(:import).never @parser.load("").should == false end it "should just return true if the item is loaded" do pending "Need to access internal state (@parser's @loaded) to force this" @parser.load("").should == false 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 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 + end end