[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, master, updated. debian/0.24.6-1-356-g5718585

James Turnbull james at lovedthanlost.net
Fri Jan 23 14:21:17 UTC 2009


The following commit has been merged in the master branch:
commit 0c297be5dad784e305ef194cee29b11a92d31b6b
Author: Brice Figureau <brice-puppet at daysofwonder.com>
Date:   Sat Oct 4 16:11:03 2008 +0200

    Fix #1109 - allow empty if or else branches
    
    This changesets allow empty if or else branches:
    
    if true {
    } else {
    }
    
    It works by emitting on the parser stack an AST node that doesn't
    do anything (a no-op). This allows the less intrusive code
    as no part of the if evaluation code has been touched.

diff --git a/lib/puppet/parser/ast.rb b/lib/puppet/parser/ast.rb
index 5aa9f52..ddf8852 100644
--- a/lib/puppet/parser/ast.rb
+++ b/lib/puppet/parser/ast.rb
@@ -91,6 +91,7 @@ require 'puppet/parser/ast/ifstatement'
 require 'puppet/parser/ast/leaf'
 require 'puppet/parser/ast/minus'
 require 'puppet/parser/ast/node'
+require 'puppet/parser/ast/nop'
 require 'puppet/parser/ast/not'
 require 'puppet/parser/ast/resource'
 require 'puppet/parser/ast/resource_defaults'
diff --git a/lib/puppet/parser/ast/nop.rb b/lib/puppet/parser/ast/nop.rb
new file mode 100644
index 0000000..ea52320
--- /dev/null
+++ b/lib/puppet/parser/ast/nop.rb
@@ -0,0 +1,11 @@
+require 'puppet/parser/ast/branch'
+
+class Puppet::Parser::AST
+    # This class is a no-op, it doesn't produce anything
+    # when evaluated, hence it's name :-)
+    class Nop < AST::Leaf
+        def evaluate(scope)
+            # nothing to do
+        end
+    end
+end
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index affcc00..7f07cc3 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -419,11 +419,26 @@ ifstatement:      IF expression LBRACE statements RBRACE else {
 
     result = ast AST::IfStatement, args
 }
+                | IF expression LBRACE RBRACE else {
+    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 {
     result = ast AST::Else, :statements => val[2]
 }
+                | ELSE LBRACE RBRACE {
+    result = ast AST::Else, :statements => ast(AST::Nop)
+}
 
 # Unlike yacc/bison, it seems racc
 # gives tons of shift/reduce warnings
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index 3858d21..b025d52 100644
--- a/lib/puppet/parser/parser.rb
+++ b/lib/puppet/parser/parser.rb
@@ -29,7 +29,7 @@ module Puppet
 
     class Parser < Racc::Parser
 
-module_eval <<'..end grammar.ra modeval..id9567389388', 'grammar.ra', 717
+module_eval <<'..end grammar.ra modeval..idf5ced460e1', 'grammar.ra', 732
 
 # It got too annoying having code in a file that needs to be compiled.
 require 'puppet/parser/parser_support'
@@ -41,7 +41,7 @@ require 'puppet/parser/parser_support'
 
 # $Id$
 
-..end grammar.ra modeval..id9567389388
+..end grammar.ra modeval..idf5ced460e1
 
 ##### racc 1.4.5 generates ###
 
@@ -154,39 +154,41 @@ racc_reduce_table = [
  4, 88, :_reduce_105,
  4, 88, :_reduce_106,
  6, 69, :_reduce_107,
+ 5, 69, :_reduce_108,
  0, 115, :_reduce_none,
- 4, 115, :_reduce_109,
+ 4, 115, :_reduce_110,
+ 3, 115, :_reduce_111,
  1, 108, :_reduce_none,
- 3, 108, :_reduce_111,
- 3, 108, :_reduce_112,
  3, 108, :_reduce_113,
  3, 108, :_reduce_114,
  3, 108, :_reduce_115,
  3, 108, :_reduce_116,
- 2, 108, :_reduce_117,
+ 3, 108, :_reduce_117,
  3, 108, :_reduce_118,
- 3, 108, :_reduce_119,
+ 2, 108, :_reduce_119,
  3, 108, :_reduce_120,
  3, 108, :_reduce_121,
  3, 108, :_reduce_122,
  3, 108, :_reduce_123,
- 2, 108, :_reduce_124,
+ 3, 108, :_reduce_124,
  3, 108, :_reduce_125,
- 3, 108, :_reduce_126,
+ 2, 108, :_reduce_126,
  3, 108, :_reduce_127,
- 5, 68, :_reduce_128,
+ 3, 108, :_reduce_128,
+ 3, 108, :_reduce_129,
+ 5, 68, :_reduce_130,
  1, 116, :_reduce_none,
- 2, 116, :_reduce_130,
- 5, 117, :_reduce_131,
- 4, 117, :_reduce_132,
+ 2, 116, :_reduce_132,
+ 5, 117, :_reduce_133,
+ 4, 117, :_reduce_134,
  1, 118, :_reduce_none,
- 3, 118, :_reduce_134,
- 3, 86, :_reduce_135,
+ 3, 118, :_reduce_136,
+ 3, 86, :_reduce_137,
  1, 120, :_reduce_none,
- 4, 120, :_reduce_137,
+ 4, 120, :_reduce_139,
  1, 122, :_reduce_none,
- 3, 122, :_reduce_139,
- 3, 121, :_reduce_140,
+ 3, 122, :_reduce_141,
+ 3, 121, :_reduce_142,
  1, 119, :_reduce_none,
  1, 119, :_reduce_none,
  1, 119, :_reduce_none,
@@ -194,92 +196,92 @@ racc_reduce_table = [
  1, 119, :_reduce_none,
  1, 119, :_reduce_none,
  1, 119, :_reduce_none,
- 1, 119, :_reduce_148,
- 1, 123, :_reduce_149,
- 3, 123, :_reduce_150,
- 2, 70, :_reduce_151,
- 6, 72, :_reduce_152,
- 5, 72, :_reduce_153,
- 6, 73, :_reduce_154,
- 5, 73, :_reduce_155,
- 6, 74, :_reduce_156,
- 5, 74, :_reduce_157,
+ 1, 119, :_reduce_150,
+ 1, 123, :_reduce_151,
+ 3, 123, :_reduce_152,
+ 2, 70, :_reduce_153,
+ 6, 72, :_reduce_154,
+ 5, 72, :_reduce_155,
+ 6, 73, :_reduce_156,
+ 5, 73, :_reduce_157,
+ 6, 74, :_reduce_158,
+ 5, 74, :_reduce_159,
  1, 94, :_reduce_none,
  1, 89, :_reduce_none,
  1, 89, :_reduce_none,
  1, 126, :_reduce_none,
- 3, 126, :_reduce_162,
+ 3, 126, :_reduce_164,
  1, 128, :_reduce_none,
  1, 128, :_reduce_none,
  1, 128, :_reduce_none,
  1, 128, :_reduce_none,
- 0, 62, :_reduce_167,
- 0, 129, :_reduce_168,
+ 0, 62, :_reduce_169,
+ 0, 129, :_reduce_170,
  1, 124, :_reduce_none,
- 3, 124, :_reduce_170,
- 3, 124, :_reduce_171,
+ 3, 124, :_reduce_172,
+ 3, 124, :_reduce_173,
  1, 130, :_reduce_none,
- 3, 130, :_reduce_173,
- 3, 131, :_reduce_174,
- 1, 131, :_reduce_175,
+ 3, 130, :_reduce_175,
  3, 131, :_reduce_176,
  1, 131, :_reduce_177,
+ 3, 131, :_reduce_178,
+ 1, 131, :_reduce_179,
  1, 127, :_reduce_none,
- 2, 127, :_reduce_179,
+ 2, 127, :_reduce_181,
  1, 125, :_reduce_none,
- 2, 125, :_reduce_181,
+ 2, 125, :_reduce_183,
  1, 132, :_reduce_none,
  1, 132, :_reduce_none,
- 1, 82, :_reduce_184,
- 3, 107, :_reduce_185,
- 2, 107, :_reduce_186,
+ 1, 82, :_reduce_186,
+ 3, 107, :_reduce_187,
+ 2, 107, :_reduce_188,
  1, 114, :_reduce_none,
  1, 114, :_reduce_none,
  0, 93, :_reduce_none,
- 1, 93, :_reduce_190 ]
+ 1, 93, :_reduce_192 ]
 
-racc_reduce_n = 191
+racc_reduce_n = 193
 
-racc_shift_n = 314
+racc_shift_n = 317
 
 racc_action_table = [
-    75,    54,    57,   270,   178,    39,    40,   283,    88,   237,
-    51,   178,    89,   213,   244,   282,   286,   198,   199,   245,
-    72,    75,    54,    57,   136,    90,    39,    40,   235,   236,
-   136,    45,    39,    40,   129,    56,    59,   235,   236,    66,
+    75,    54,    57,   273,   178,    39,    40,   201,    88,   238,
+    51,   178,    89,   213,   245,     8,   265,   198,   199,   246,
+    72,    75,    54,    57,   136,    90,    39,    40,   236,   237,
+   136,    45,    39,    40,   129,    56,    59,   236,   237,    66,
     41,    72,   154,    44,    52,    76,   177,   162,    62,    92,
    146,    84,    45,    75,    54,    57,    56,    59,    45,   126,
-    66,    41,   249,   167,    44,    52,    76,    41,  -141,    62,
-    44,   138,    84,    72,    75,    54,    57,   288,   156,   157,
-   158,   144,   145,   147,    45,   201,   158,   144,    56,    59,
-   287,   233,    66,     8,    72,   154,   252,    52,    76,   232,
-   162,    62,   105,   146,    84,    45,    75,    54,    57,    56,
-    59,    45,  -143,    66,    37,   244,   167,    37,    52,    76,
-   245,     4,    62,   256,     4,    84,    72,    75,    54,    57,
-   137,   156,   157,   158,   144,   145,   147,    45,   258,   197,
-   161,    56,    59,   198,   199,    66,   161,    72,   154,  -145,
-    52,    76,   136,   162,    62,  -146,   146,    84,    45,    75,
-    54,    57,    56,    59,    45,    51,    66,    37,   264,   167,
-   183,    52,    76,  -142,     4,    62,   158,   144,    84,    72,
-    75,    54,    57,   267,   156,   157,   158,   144,   145,   147,
-    45,   178,   238,   188,    56,    59,   235,   236,    66,  -142,
-    72,   154,    88,    52,    76,  -144,   162,    62,  -147,   146,
-    84,    45,    75,    54,    57,    56,    59,    45,  -141,    66,
-    33,    34,   167,   135,    52,    76,    54,    57,    62,   198,
-   296,    84,    72,    75,    54,    57,  -158,   156,   157,   158,
-   144,   145,   147,    45,  -146,   229,   132,    56,    59,   198,
-   199,    66,  -145,    72,    37,  -143,    52,    76,    54,    57,
-    62,     4,     8,    84,    45,   269,   161,   172,    56,    59,
-   155,   108,    66,   156,   157,   158,   144,    52,    76,   150,
-   154,    62,   173,   105,    84,    89,   284,   285,   146,   148,
-   151,   153,  -144,   174,    75,    54,    57,   156,   157,   158,
-   144,   145,   147,   156,   157,   158,   144,   145,   147,   100,
-   180,   188,   149,   152,    72,   184,   156,   157,   158,   144,
-   145,   147,   186,  -141,   299,    45,    75,    54,    57,    56,
-    59,  -141,  -144,    66,   156,   157,   158,   144,    52,    76,
-  -142,  -146,    62,  -143,   300,    84,    72,    75,    54,    57,
-   188,    71,   193,   191,    38,  -143,   307,    45,  -190,   308,
-    35,    56,    59,   189,  -142,    66,  -144,    72,   nil,   nil,
+    66,    41,   250,   167,    44,    52,    76,    41,  -146,    62,
+    44,  -143,    84,    72,    75,    54,    57,   291,   156,   157,
+   158,   144,   145,   147,    45,   234,   253,   286,    56,    59,
+   290,   162,    66,   233,    72,   285,    37,    52,    76,   158,
+   144,    62,    45,     4,    84,    45,   154,   167,    37,    56,
+    59,   155,   162,    66,   146,     4,     8,    37,    52,    76,
+   150,   154,    62,    45,     4,    84,   158,   144,   167,   146,
+   148,   151,   153,   105,   230,    75,    54,    57,   198,   199,
+    33,    34,   156,   157,   158,   144,   145,   147,   156,   157,
+   158,   144,   138,   149,   152,    72,   154,   156,   157,   158,
+   144,   145,   147,   257,   146,   162,    45,    75,    54,    57,
+    56,    59,   245,  -145,    66,    37,    45,   246,   183,    52,
+    76,   167,     4,    62,    54,    57,    84,    72,    75,    54,
+    57,   259,   156,   157,   158,   144,   145,   147,    45,   161,
+   239,   161,    56,    59,   236,   237,    66,   137,    72,   154,
+   136,    52,    76,   198,   299,    62,  -147,   146,    84,    45,
+    75,    54,    57,    56,    59,   197,    51,    66,  -144,   198,
+   199,  -148,    52,    76,    54,    57,    62,   268,   178,    84,
+    72,    75,    54,    57,   188,   156,   157,   158,   144,   145,
+   147,    45,  -149,  -144,    88,    56,    59,  -146,  -148,    66,
+  -143,    72,   135,  -147,    52,    76,  -160,   271,    62,  -145,
+   161,    84,    45,    75,    54,    57,    56,    59,   272,   172,
+    66,   156,   157,   158,   144,    52,    76,   132,   173,    62,
+    89,   108,    84,    72,    75,    54,    57,   156,   157,   158,
+   144,   145,   147,   174,    45,   287,   288,   289,    56,    59,
+   180,   105,    66,   100,    72,   188,   184,    52,    76,   186,
+  -143,    62,   271,   302,    84,    45,    75,    54,    57,    56,
+    59,  -143,  -146,    66,  -144,  -148,  -145,   303,    52,    76,
+   188,  -146,    62,    71,   193,    84,    72,    75,    54,    57,
+   156,   157,   158,   144,   145,   147,   191,    45,    38,   310,
+  -192,    56,    59,  -145,    35,    66,   189,    72,  -144,   nil,
     52,    76,   nil,   nil,    62,   nil,   nil,    84,    45,    75,
     54,    57,    56,    59,   nil,   nil,    66,   nil,   nil,   nil,
    nil,    52,    76,   nil,   nil,    62,   nil,   nil,    84,    72,
@@ -298,411 +300,433 @@ racc_action_table = [
     56,    59,   nil,   nil,    66,   nil,    72,   nil,   nil,    52,
     76,   nil,   nil,    62,   nil,   nil,    84,    45,    75,    54,
     57,    56,    59,   nil,   nil,    66,   nil,   nil,    45,   nil,
-    52,    76,    56,    59,    62,   nil,    66,    84,    72,   nil,
-   nil,    52,    75,    54,    57,    62,   nil,   nil,   nil,    45,
+    52,    76,    56,   116,    62,   nil,    66,    84,    72,   nil,
+   nil,   111,    75,    54,    57,    62,   nil,   nil,   nil,    45,
    nil,   nil,   nil,    56,    59,   nil,   nil,    66,    75,    54,
-    57,   nil,    52,    76,   nil,   nil,    62,   nil,   nil,    84,
-   nil,   nil,   nil,    45,    75,    54,    57,    56,   116,   nil,
-   nil,    66,   nil,   nil,   nil,   nil,   111,   nil,   nil,    45,
+    57,   141,    52,    76,   nil,   nil,    62,   nil,   nil,    84,
+   nil,   nil,   nil,    45,    75,    54,    57,    56,    59,   nil,
+   nil,    66,   nil,   nil,   nil,   nil,    52,   nil,   nil,    45,
     62,   nil,   nil,    56,    59,   nil,   nil,    66,    75,    54,
-    57,   141,    52,   nil,   nil,    45,    62,   nil,   nil,    56,
+    57,   nil,    52,   nil,   nil,    45,    62,   nil,   nil,    56,
     59,   nil,   nil,    66,    75,    54,    57,   nil,    52,   nil,
    nil,   nil,    62,   nil,    75,    54,    57,   nil,   nil,    45,
     75,    54,    57,    56,    59,   nil,   nil,    66,   nil,   nil,
    nil,   nil,    52,   nil,   nil,    45,    62,   nil,   nil,    56,
     59,   nil,   nil,    66,   nil,    45,   nil,   nil,    52,    56,
-    59,    45,    62,    66,   nil,    56,    59,   nil,    52,    66,
+   195,    45,    62,    66,   nil,    56,    59,   nil,   111,    66,
    nil,   nil,    62,   nil,    52,    75,    54,    57,    62,   nil,
-   nil,    75,    54,    57,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    51,    54,    57,   nil,   nil,
-   nil,    75,    54,    57,   nil,   nil,    45,   nil,   nil,   nil,
-    56,    59,    45,   nil,    66,    48,    56,    59,   nil,    52,
-    66,    54,    57,    62,   nil,    52,    45,    54,    57,    62,
-    56,    59,    45,   nil,    66,   nil,    56,   195,    49,    52,
-    66,    54,    57,    62,   nil,   111,    75,    54,    57,    62,
-   nil,    45,   nil,   nil,   nil,    56,   195,    45,   nil,    66,
-   nil,    56,   195,   nil,   111,    66,    54,    57,    62,   nil,
-   111,    45,    54,    57,    62,    56,   195,    45,   nil,    66,
-   nil,    56,    59,   nil,   111,    66,   nil,   nil,    62,   nil,
-    52,    54,    57,   nil,    62,   281,    45,    54,    57,   nil,
-    56,   195,    45,   nil,    66,   nil,    56,   195,    49,   111,
-    66,    54,    57,    62,   nil,   111,   nil,    54,    57,    62,
-   208,    45,   nil,   nil,   nil,    56,   195,    45,   nil,    66,
-   nil,    56,   195,   nil,   111,    66,    54,    57,    62,   nil,
-   111,    45,    54,    57,    62,    56,   195,    45,   nil,    66,
-   nil,    56,   195,   nil,   111,    66,   131,   nil,    62,   nil,
-   111,   nil,   203,   nil,    62,   nil,    45,   nil,   nil,   nil,
-    56,    59,    45,   nil,    66,   nil,    56,    59,    49,    52,
-    66,   150,   154,    62,    49,    52,   nil,   nil,   nil,    62,
+   nil,    51,    54,    57,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,    75,    54,    57,   nil,   nil,   nil,    75,    54,    57,
+   nil,    48,   nil,   nil,   nil,   nil,    45,    75,    54,    57,
+    56,    59,    45,   nil,    66,   nil,    56,    59,   nil,    52,
+    66,   nil,    45,    62,    49,    52,    56,    59,    45,    62,
+    66,   nil,    56,    59,   nil,    52,    66,   nil,    45,    62,
+   nil,    52,    56,    59,   nil,    62,    66,    54,    57,    54,
+    57,    52,   nil,   nil,   nil,    62,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,    54,    57,    54,    57,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,    45,   nil,    45,
+   nil,    56,   195,    56,   195,    66,   nil,    66,    54,    57,
+   111,    49,   111,    45,    62,    45,    62,    56,   195,    56,
+   195,    66,   nil,    66,   nil,   nil,   111,   nil,   111,   nil,
+    62,   nil,    62,    54,    57,    54,    57,   284,    45,   nil,
+   nil,   nil,    56,   195,   nil,   nil,    66,   nil,   nil,    54,
+    57,   111,   208,   nil,   nil,    62,    54,    57,   nil,   nil,
+   nil,   nil,   nil,    45,   nil,    45,   nil,    56,   195,    56,
+   195,    66,   nil,    66,   nil,   nil,   111,   nil,   111,    45,
+    62,   nil,    62,    56,   195,   nil,    45,    66,    54,    57,
+    56,   195,   111,   nil,    66,   nil,    62,   nil,   nil,   111,
+   nil,   nil,   nil,    62,    54,    57,   nil,   nil,   131,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    45,   nil,
+   nil,   nil,    56,    59,   203,   nil,    66,   nil,   nil,   nil,
+    49,    52,   nil,   nil,    45,    62,   nil,   nil,    56,    59,
+   nil,   nil,    66,   150,   154,   nil,    49,    52,   nil,   nil,
+   nil,    62,   146,   148,   151,   153,   150,   154,   nil,   nil,
+   nil,   nil,   nil,   nil,   212,   146,   148,   151,   153,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   156,   157,   158,   144,   145,   147,   nil,   nil,   nil,   149,
+   152,   150,   154,   156,   157,   158,   144,   145,   147,   nil,
    146,   148,   151,   153,   150,   154,   nil,   nil,   nil,   nil,
-   nil,   nil,   212,   146,   148,   151,   153,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   156,   157,
-   158,   144,   145,   147,   nil,   nil,   nil,   149,   152,   150,
+   nil,   nil,   nil,   146,   148,   151,   153,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   149,   152,   nil,   nil,   156,   157,
+   158,   144,   145,   147,   nil,   nil,   296,   nil,   152,   150,
    154,   156,   157,   158,   144,   145,   147,   nil,   146,   148,
-   151,   153,   150,   154,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   146,   148,   151,   153,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   149,   152,   nil,   nil,   156,   157,   158,   144,
-   145,   147,   nil,   nil,   293,   nil,   152,   150,   154,   156,
-   157,   158,   144,   145,   147,   nil,   146,   148,   151,   153,
-   nil,   nil,   nil,   nil,   nil,    16,   nil,    23,    27,   291,
-     1,     5,   nil,    10,   nil,    13,   nil,    20,   nil,    28,
-   149,   152,     4,     8,   156,   157,   158,   144,   145,   147,
-    16,   290,    23,    27,   nil,     1,     5,   nil,    10,   nil,
-    13,   nil,    20,   nil,    28,   nil,   nil,     4,     8,   nil,
-   268,   nil,    16,   nil,    23,    27,   nil,     1,     5,   nil,
+   151,   153,   nil,   nil,   nil,   nil,   nil,    16,   nil,    23,
+    27,   294,     1,     5,   nil,    10,   nil,    13,   nil,    20,
+   nil,    28,   149,   152,     4,     8,   156,   157,   158,   144,
+   145,   147,    16,   293,    23,    27,   nil,     1,     5,   nil,
     10,   nil,    13,   nil,    20,   nil,    28,   nil,   nil,     4,
-     8,    16,   305,    23,    27,   nil,     1,     5,   nil,    10,
-   nil,    13,   nil,    20,   nil,    28,   nil,   nil,     4,     8,
-   nil,   310,   nil,    16,   nil,    23,    27,   nil,     1,     5,
-   nil,    10,   nil,    13,   nil,    20,   nil,    28,   nil,   nil,
-     4,     8,    16,   262,    23,    27,   nil,     1,     5,   nil,
-    10,   nil,    13,   nil,    20,   nil,    28,   nil,   nil,     4,
-     8,   nil,   312,   nil,    16,   nil,    23,    27,   nil,     1,
+     8,   nil,   269,   nil,    16,   nil,    23,    27,   nil,     1,
      5,   nil,    10,   nil,    13,   nil,    20,   nil,    28,   nil,
-   nil,     4,     8,    16,   255,    23,    27,   nil,     1,     5,
+   nil,     4,     8,    16,   226,    23,    27,   nil,     1,     5,
    nil,    10,   nil,    13,   nil,    20,   nil,    28,   nil,   nil,
-     4,     8,   nil,   313,   nil,    16,   nil,    23,    27,   nil,
+     4,     8,   nil,   308,   nil,    16,   nil,    23,    27,   nil,
      1,     5,   nil,    10,   nil,    13,   nil,    20,   nil,    28,
-   nil,   nil,     4,     8,    16,   nil,    23,    27,   nil,     1,
+   nil,   nil,     4,     8,    16,   312,    23,    27,   nil,     1,
      5,   nil,    10,   nil,    13,   nil,    20,   nil,    28,   nil,
-   nil,     4,     8,    16,   nil,    23,    27,   nil,     1,     5,
-   nil,    10,   nil,    13,   nil,    20,   nil,    28,   nil,   nil,
-     4,     8,    16,   nil,    23,    27,   nil,     1,     5,   nil,
-    10,   nil,    13,   nil,    20,   nil,    28,   nil,   nil,     4,
-     8,    16,   nil,    23,    27,   nil,     1,     5,   nil,    10,
-   nil,    13,   nil,    20,   nil,    28,   nil,   nil,     4,     8,
-    16,   nil,    23,    27,   nil,     1,     5,   nil,    10,   nil,
-    13,   nil,    20,   nil,    28,   nil,   nil,     4,     8 ]
+   nil,     4,     8,   nil,   314,   nil,    16,   nil,    23,    27,
+   nil,     1,     5,   nil,    10,   nil,    13,   nil,    20,   nil,
+    28,   nil,   nil,     4,     8,    16,   263,    23,    27,   nil,
+     1,     5,   nil,    10,   nil,    13,   nil,    20,   nil,    28,
+   nil,   nil,     4,     8,   nil,   315,   nil,    16,   nil,    23,
+    27,   nil,     1,     5,   nil,    10,   nil,    13,   nil,    20,
+   nil,    28,   nil,   nil,     4,     8,    16,   256,    23,    27,
+   nil,     1,     5,   nil,    10,   nil,    13,   nil,    20,   nil,
+    28,   nil,   nil,     4,     8,   nil,   316,   nil,    16,   nil,
+    23,    27,   nil,     1,     5,   nil,    10,   nil,    13,   nil,
+    20,   nil,    28,   nil,   nil,     4,     8,    16,   nil,    23,
+    27,   nil,     1,     5,   nil,    10,   nil,    13,   nil,    20,
+   nil,    28,   nil,   nil,     4,     8,    16,   nil,    23,    27,
+   nil,     1,     5,   nil,    10,   nil,    13,   nil,    20,   nil,
+    28,   nil,   nil,     4,     8,    16,   nil,    23,    27,   nil,
+     1,     5,   nil,    10,   nil,    13,   nil,    20,   nil,    28,
+   nil,   nil,     4,     8 ]
 
 racc_action_check = [
-    33,    33,    33,   231,   105,   129,   129,   241,    17,   170,
-    59,   116,    17,   140,   174,   241,   246,   140,   140,   174,
-    33,   158,   158,   158,   116,    17,    10,    10,   231,   231,
-    59,    33,   126,   126,    42,    33,    33,   170,   170,    33,
-   129,   158,   220,   129,    33,    33,   105,    90,    33,    17,
-   220,    33,   158,   144,   144,   144,   158,   158,    90,    42,
-   158,    10,   175,    90,    10,   158,   158,   126,    77,   158,
-   126,    71,   158,   144,    76,    76,    76,   247,   220,   220,
-   220,   220,   220,   220,   144,   135,   227,   227,   144,   144,
-   247,   165,   144,   135,    76,   223,   179,   144,   144,   165,
-    92,   144,   180,   223,   144,    76,   145,   145,   145,    76,
-    76,    92,    70,    76,     5,   288,    92,    27,    76,    76,
-   288,     5,    76,   185,    27,    76,   145,    72,    72,    72,
-    68,   223,   223,   223,   223,   223,   223,   145,   187,   134,
-   188,   145,   145,   134,   134,   145,   189,    72,   221,    67,
-   145,   145,   195,   162,   145,    65,   221,   145,    72,   154,
-   154,   154,    72,    72,   162,   201,    72,   108,   202,   162,
-   108,    72,    72,    63,   108,    72,   226,   226,    72,   154,
-    84,    84,    84,   209,   221,   221,   221,   221,   221,   221,
-   154,   161,   171,   160,   154,   154,   171,   171,   154,    79,
-    84,   218,    61,   154,   154,    60,   234,   154,    80,   218,
-   154,    84,    16,    16,    16,    84,    84,   234,    58,    84,
-     1,     1,   234,    53,    84,    84,    23,    23,    84,   266,
-   266,    84,    16,   146,   146,   146,    52,   218,   218,   218,
-   218,   218,   218,    16,    81,   159,    50,    16,    16,   159,
-   159,    16,    82,   146,    24,    87,    16,    16,   173,   173,
-    16,    24,    24,    16,   146,   230,    89,    94,   146,   146,
-    85,    36,   146,   217,   217,   217,   217,   146,   146,    85,
-    85,   146,    95,    35,   146,    97,   244,   245,    85,    85,
-    85,    85,    78,    99,   153,   153,   153,   224,   224,   224,
-   224,   224,   224,   216,   216,   216,   216,   216,   216,    28,
-   106,   260,    85,    85,   153,   109,    85,    85,    85,    85,
-    85,    85,   112,   113,   268,   153,   152,   152,   152,   153,
-   153,   271,   273,   153,   215,   215,   215,   215,   153,   153,
-   274,   275,   153,   277,   282,   153,   152,   147,   147,   147,
-   114,    15,   130,   127,     6,   125,   295,   152,   296,   299,
-     2,   152,   152,   119,   118,   152,   115,   147,   nil,   nil,
-   152,   152,   nil,   nil,   152,   nil,   nil,   152,   147,   148,
-   148,   148,   147,   147,   nil,   nil,   147,   nil,   nil,   nil,
-   nil,   147,   147,   nil,   nil,   147,   nil,   nil,   147,   148,
+   158,   158,   158,   232,   105,   129,   129,   135,    17,   170,
+    59,   116,    17,   140,   174,   135,   202,   140,   140,   174,
+   158,    84,    84,    84,   116,    17,    10,    10,   232,   232,
+    59,   158,   126,   126,    42,   158,   158,   170,   170,   158,
+   129,    84,   221,   129,   158,   158,   105,   162,   158,    17,
+   221,   158,    84,   144,   144,   144,    84,    84,   162,    42,
+    84,    10,   175,   162,    10,    84,    84,   126,    78,    84,
+   126,    77,    84,   144,   145,   145,   145,   248,   221,   221,
+   221,   221,   221,   221,   144,   165,   179,   242,   144,   144,
+   248,    92,   144,   165,   145,   242,     5,   144,   144,   227,
+   227,   144,    92,     5,   144,   145,   223,    92,    24,   145,
+   145,    85,    90,   145,   223,    24,    24,    27,   145,   145,
+    85,    85,   145,    90,    27,   145,   228,   228,    90,    85,
+    85,    85,    85,   180,   159,   146,   146,   146,   159,   159,
+     1,     1,   223,   223,   223,   223,   223,   223,   217,   217,
+   217,   217,    71,    85,    85,   146,   218,    85,    85,    85,
+    85,    85,    85,   185,   218,   235,   146,   157,   157,   157,
+   146,   146,   291,    70,   146,   108,   235,   291,   108,   146,
+   146,   235,   108,   146,    23,    23,   146,   157,   154,   154,
+   154,   187,   218,   218,   218,   218,   218,   218,   157,   188,
+   171,   189,   157,   157,   171,   171,   157,    68,   154,   220,
+   195,   157,   157,   267,   267,   157,    67,   220,   157,   154,
+    16,    16,    16,   154,   154,   134,   201,   154,    79,   134,
+   134,    65,   154,   154,   173,   173,   154,   209,   161,   154,
+    16,   147,   147,   147,   160,   220,   220,   220,   220,   220,
+   220,    16,    80,    63,    61,    16,    16,    60,    81,    16,
+    58,   147,    53,    82,    16,    16,    52,   226,    16,    87,
+    89,    16,   147,   153,   153,   153,   147,   147,   231,    94,
+   147,   215,   215,   215,   215,   147,   147,    50,    95,   147,
+    97,    36,   147,   153,   152,   152,   152,   224,   224,   224,
+   224,   224,   224,    99,   153,   245,   246,   247,   153,   153,
+   106,    35,   153,    28,   152,   261,   109,   153,   153,   112,
+   113,   153,   269,   271,   153,   152,    76,    76,    76,   152,
+   152,   274,   276,   152,   277,   278,   280,   285,   152,   152,
+   114,   115,   152,    15,   130,   152,    76,   151,   151,   151,
+   216,   216,   216,   216,   216,   216,   127,    76,     6,   298,
+   299,    76,    76,   125,     2,    76,   119,   151,   118,   nil,
+    76,    76,   nil,   nil,    76,   nil,   nil,    76,   151,   148,
+   148,   148,   151,   151,   nil,   nil,   151,   nil,   nil,   nil,
+   nil,   151,   151,   nil,   nil,   151,   nil,   nil,   151,   148,
    149,   149,   149,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    148,   nil,   nil,   nil,   148,   148,   nil,   nil,   148,   nil,
    149,   nil,   nil,   148,   148,   nil,   nil,   148,   nil,   nil,
-   148,   149,   156,   156,   156,   149,   149,   nil,   nil,   149,
+   148,   149,    72,    72,    72,   149,   149,   nil,   nil,   149,
    nil,   nil,   nil,   nil,   149,   149,   nil,   nil,   149,   nil,
-   nil,   149,   156,    34,    34,    34,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   156,   nil,   nil,   nil,   156,   156,   nil,
-   nil,   156,   nil,    34,   nil,   nil,   156,   156,   nil,   nil,
-   156,   nil,   nil,   156,    34,   151,   151,   151,    34,    34,
+   nil,   149,    72,    34,    34,    34,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,    72,   nil,   nil,   nil,    72,    72,   nil,
+   nil,    72,   nil,    34,   nil,   nil,    72,    72,   nil,   nil,
+    72,   nil,   nil,    72,    34,   150,   150,   150,    34,    34,
    nil,   nil,    34,   nil,   nil,   nil,   nil,    34,    34,   nil,
-   nil,    34,   nil,   nil,    34,   151,   150,   150,   150,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   151,   196,   196,   196,
-   151,   151,   nil,   nil,   151,   nil,   150,   nil,   nil,   151,
-   151,   nil,   nil,   151,   nil,   nil,   151,   150,   157,   157,
-   157,   150,   150,   nil,   nil,   150,   nil,   nil,   196,   nil,
-   150,   150,   196,   196,   150,   nil,   196,   150,   157,   nil,
-   nil,   196,    38,    38,    38,   196,   nil,   nil,   nil,   157,
-   nil,   nil,   nil,   157,   157,   nil,   nil,   157,   177,   177,
-   177,   nil,   157,   157,   nil,   nil,   157,   nil,   nil,   157,
-   nil,   nil,   nil,    38,    51,    51,    51,    38,    38,   nil,
-   nil,    38,   nil,   nil,   nil,   nil,    38,   nil,   nil,   177,
-    38,   nil,   nil,   177,   177,   nil,   nil,   177,    75,    75,
-    75,    75,   177,   nil,   nil,    51,   177,   nil,   nil,    51,
-    51,   nil,   nil,    51,   267,   267,   267,   nil,    51,   nil,
-   nil,   nil,    51,   nil,    88,    88,    88,   nil,   nil,    75,
-   285,   285,   285,    75,    75,   nil,   nil,    75,   nil,   nil,
-   nil,   nil,    75,   nil,   nil,   267,    75,   nil,   nil,   267,
-   267,   nil,   nil,   267,   nil,    88,   nil,   nil,   267,    88,
-    88,   285,   267,    88,   nil,   285,   285,   nil,    88,   285,
-   nil,   nil,    88,   nil,   285,    20,    20,    20,   285,   nil,
-   nil,   178,   178,   178,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    13,    13,    13,   nil,   nil,
-   nil,   186,   186,   186,   nil,   nil,    20,   nil,   nil,   nil,
-    20,    20,   178,   nil,    20,    13,   178,   178,   nil,    20,
-   178,   232,   232,    20,   nil,   178,    13,   208,   208,   178,
-    13,    13,   186,   nil,    13,   nil,   186,   186,    13,    13,
-   186,   283,   283,    13,   nil,   186,   284,   284,   284,   186,
-   nil,   232,   nil,   nil,   nil,   232,   232,   208,   nil,   232,
-   nil,   208,   208,   nil,   232,   208,   132,   132,   232,   nil,
-   208,   283,   294,   294,   208,   283,   283,   284,   nil,   283,
-   nil,   284,   284,   nil,   283,   284,   nil,   nil,   283,   nil,
-   284,   239,   239,   nil,   284,   239,   132,   233,   233,   nil,
-   132,   132,   294,   nil,   132,   nil,   294,   294,   132,   132,
-   294,   172,   172,   132,   nil,   294,   nil,   137,   137,   294,
-   137,   239,   nil,   nil,   nil,   239,   239,   233,   nil,   239,
-   nil,   233,   233,   nil,   239,   233,    48,    48,   239,   nil,
-   233,   172,   136,   136,   233,   172,   172,   137,   nil,   172,
-   nil,   137,   137,   nil,   172,   137,    48,   nil,   172,   nil,
-   137,   nil,   136,   nil,   137,   nil,    48,   nil,   nil,   nil,
-    48,    48,   136,   nil,    48,   nil,   136,   136,    48,    48,
-   136,   222,   222,    48,   136,   136,   nil,   nil,   nil,   136,
-   222,   222,   222,   222,   139,   139,   nil,   nil,   nil,   nil,
-   nil,   nil,   139,   139,   139,   139,   139,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   222,   222,
-   222,   222,   222,   222,   nil,   nil,   nil,   139,   139,   101,
-   101,   139,   139,   139,   139,   139,   139,   nil,   101,   101,
-   101,   101,   219,   219,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   219,   219,   219,   219,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   101,   101,   nil,   nil,   101,   101,   101,   101,
-   101,   101,   nil,   nil,   261,   nil,   219,   102,   102,   219,
-   219,   219,   219,   219,   219,   nil,   102,   102,   102,   102,
-   nil,   nil,   nil,   nil,   nil,   261,   nil,   261,   261,   254,
-   261,   261,   nil,   261,   nil,   261,   nil,   261,   nil,   261,
-   102,   102,   261,   261,   102,   102,   102,   102,   102,   102,
-   254,   249,   254,   254,   nil,   254,   254,   nil,   254,   nil,
-   254,   nil,   254,   nil,   254,   nil,   nil,   254,   254,   nil,
-   225,   nil,   249,   nil,   249,   249,   nil,   249,   249,   nil,
-   249,   nil,   249,   nil,   249,   nil,   249,   nil,   nil,   249,
-   249,   225,   289,   225,   225,   nil,   225,   225,   nil,   225,
-   nil,   225,   nil,   225,   nil,   225,   nil,   nil,   225,   225,
-   nil,   300,   nil,   289,   nil,   289,   289,   nil,   289,   289,
-   nil,   289,   nil,   289,   nil,   289,   nil,   289,   nil,   nil,
-   289,   289,   300,   191,   300,   300,   nil,   300,   300,   nil,
-   300,   nil,   300,   nil,   300,   nil,   300,   nil,   nil,   300,
-   300,   nil,   309,   nil,   191,   nil,   191,   191,   nil,   191,
-   191,   nil,   191,   nil,   191,   nil,   191,   nil,   191,   nil,
-   nil,   191,   191,   309,   184,   309,   309,   nil,   309,   309,
-   nil,   309,   nil,   309,   nil,   309,   nil,   309,   nil,   nil,
-   309,   309,   nil,   311,   nil,   184,   nil,   184,   184,   nil,
-   184,   184,   nil,   184,   nil,   184,   nil,   184,   nil,   184,
-   nil,   nil,   184,   184,   311,   nil,   311,   311,   nil,   311,
-   311,   nil,   311,   nil,   311,   nil,   311,   nil,   311,   nil,
-   nil,   311,   311,   308,   nil,   308,   308,   nil,   308,   308,
-   nil,   308,   nil,   308,   nil,   308,   nil,   308,   nil,   nil,
-   308,   308,   155,   nil,   155,   155,   nil,   155,   155,   nil,
-   155,   nil,   155,   nil,   155,   nil,   155,   nil,   nil,   155,
-   155,    19,   nil,    19,    19,   nil,    19,    19,   nil,    19,
-   nil,    19,   nil,    19,   nil,    19,   nil,   nil,    19,    19,
-     0,   nil,     0,     0,   nil,     0,     0,   nil,     0,   nil,
-     0,   nil,     0,   nil,     0,   nil,   nil,     0,     0 ]
+   nil,    34,   nil,   nil,    34,   150,   156,   156,   156,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   150,    38,    38,    38,
+   150,   150,   nil,   nil,   150,   nil,   156,   nil,   nil,   150,
+   150,   nil,   nil,   150,   nil,   nil,   150,   156,    33,    33,
+    33,   156,   156,   nil,   nil,   156,   nil,   nil,    38,   nil,
+   156,   156,    38,    38,   156,   nil,    38,   156,    33,   nil,
+   nil,    38,   196,   196,   196,    38,   nil,   nil,   nil,    33,
+   nil,   nil,   nil,    33,    33,   nil,   nil,    33,    75,    75,
+    75,    75,    33,    33,   nil,   nil,    33,   nil,   nil,    33,
+   nil,   nil,   nil,   196,    51,    51,    51,   196,   196,   nil,
+   nil,   196,   nil,   nil,   nil,   nil,   196,   nil,   nil,    75,
+   196,   nil,   nil,    75,    75,   nil,   nil,    75,   268,   268,
+   268,   nil,    75,   nil,   nil,    51,    75,   nil,   nil,    51,
+    51,   nil,   nil,    51,    20,    20,    20,   nil,    51,   nil,
+   nil,   nil,    51,   nil,   186,   186,   186,   nil,   nil,   268,
+   287,   287,   287,   268,   268,   nil,   nil,   268,   nil,   nil,
+   nil,   nil,   268,   nil,   nil,    20,   268,   nil,   nil,    20,
+    20,   nil,   nil,    20,   nil,   186,   nil,   nil,    20,   186,
+   186,   287,    20,   186,   nil,   287,   287,   nil,   186,   287,
+   nil,   nil,   186,   nil,   287,   288,   288,   288,   287,   nil,
+   nil,    13,    13,    13,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   178,   178,   178,   nil,   nil,   nil,   177,   177,   177,
+   nil,    13,   nil,   nil,   nil,   nil,   288,    88,    88,    88,
+   288,   288,    13,   nil,   288,   nil,    13,    13,   nil,   288,
+    13,   nil,   178,   288,    13,    13,   178,   178,   177,    13,
+   178,   nil,   177,   177,   nil,   178,   177,   nil,    88,   178,
+   nil,   177,    88,    88,   nil,   177,    88,   208,   208,   132,
+   132,    88,   nil,   nil,   nil,    88,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   233,   233,   234,   234,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   208,   nil,   132,
+   nil,   208,   208,   132,   132,   208,   nil,   132,   286,   286,
+   208,   132,   132,   233,   208,   234,   132,   233,   233,   234,
+   234,   233,   nil,   234,   nil,   nil,   233,   nil,   234,   nil,
+   233,   nil,   234,   240,   240,   297,   297,   240,   286,   nil,
+   nil,   nil,   286,   286,   nil,   nil,   286,   nil,   nil,   137,
+   137,   286,   137,   nil,   nil,   286,   172,   172,   nil,   nil,
+   nil,   nil,   nil,   240,   nil,   297,   nil,   240,   240,   297,
+   297,   240,   nil,   297,   nil,   nil,   240,   nil,   297,   137,
+   240,   nil,   297,   137,   137,   nil,   172,   137,    48,    48,
+   172,   172,   137,   nil,   172,   nil,   137,   nil,   nil,   172,
+   nil,   nil,   nil,   172,   136,   136,   nil,   nil,    48,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    48,   nil,
+   nil,   nil,    48,    48,   136,   nil,    48,   nil,   nil,   nil,
+    48,    48,   nil,   nil,   136,    48,   nil,   nil,   136,   136,
+   nil,   nil,   136,   222,   222,   nil,   136,   136,   nil,   nil,
+   nil,   136,   222,   222,   222,   222,   139,   139,   nil,   nil,
+   nil,   nil,   nil,   nil,   139,   139,   139,   139,   139,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   222,   222,   222,   222,   222,   222,   nil,   nil,   nil,   139,
+   139,   102,   102,   139,   139,   139,   139,   139,   139,   nil,
+   102,   102,   102,   102,   219,   219,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   219,   219,   219,   219,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   102,   102,   nil,   nil,   102,   102,
+   102,   102,   102,   102,   nil,   nil,   262,   nil,   219,   101,
+   101,   219,   219,   219,   219,   219,   219,   nil,   101,   101,
+   101,   101,   nil,   nil,   nil,   nil,   nil,   262,   nil,   262,
+   262,   255,   262,   262,   nil,   262,   nil,   262,   nil,   262,
+   nil,   262,   101,   101,   262,   262,   101,   101,   101,   101,
+   101,   101,   255,   250,   255,   255,   nil,   255,   255,   nil,
+   255,   nil,   255,   nil,   255,   nil,   255,   nil,   nil,   255,
+   255,   nil,   225,   nil,   250,   nil,   250,   250,   nil,   250,
+   250,   nil,   250,   nil,   250,   nil,   250,   nil,   250,   nil,
+   nil,   250,   250,   225,   155,   225,   225,   nil,   225,   225,
+   nil,   225,   nil,   225,   nil,   225,   nil,   225,   nil,   nil,
+   225,   225,   nil,   292,   nil,   155,   nil,   155,   155,   nil,
+   155,   155,   nil,   155,   nil,   155,   nil,   155,   nil,   155,
+   nil,   nil,   155,   155,   292,   302,   292,   292,   nil,   292,
+   292,   nil,   292,   nil,   292,   nil,   292,   nil,   292,   nil,
+   nil,   292,   292,   nil,   303,   nil,   302,   nil,   302,   302,
+   nil,   302,   302,   nil,   302,   nil,   302,   nil,   302,   nil,
+   302,   nil,   nil,   302,   302,   303,   191,   303,   303,   nil,
+   303,   303,   nil,   303,   nil,   303,   nil,   303,   nil,   303,
+   nil,   nil,   303,   303,   nil,   311,   nil,   191,   nil,   191,
+   191,   nil,   191,   191,   nil,   191,   nil,   191,   nil,   191,
+   nil,   191,   nil,   nil,   191,   191,   311,   184,   311,   311,
+   nil,   311,   311,   nil,   311,   nil,   311,   nil,   311,   nil,
+   311,   nil,   nil,   311,   311,   nil,   313,   nil,   184,   nil,
+   184,   184,   nil,   184,   184,   nil,   184,   nil,   184,   nil,
+   184,   nil,   184,   nil,   nil,   184,   184,   313,   nil,   313,
+   313,   nil,   313,   313,   nil,   313,   nil,   313,   nil,   313,
+   nil,   313,   nil,   nil,   313,   313,     0,   nil,     0,     0,
+   nil,     0,     0,   nil,     0,   nil,     0,   nil,     0,   nil,
+     0,   nil,   nil,     0,     0,    19,   nil,    19,    19,   nil,
+    19,    19,   nil,    19,   nil,    19,   nil,    19,   nil,    19,
+   nil,   nil,    19,    19 ]
 
 racc_action_pointer = [
-  1252,   207,   354,   nil,   nil,    76,   348,   nil,   nil,   nil,
-    23,   nil,   nil,   713,   nil,   351,   210,     6,   nil,  1233,
-   693,   nil,   nil,   223,   216,   nil,   nil,    79,   267,   nil,
-   nil,   nil,   nil,    -2,   451,   245,   236,   nil,   560,   nil,
-   nil,   nil,    24,   nil,   nil,   nil,   nil,   nil,   853,   nil,
-   236,   592,   234,   213,   nil,   nil,   nil,   nil,   197,     8,
-   184,   200,   nil,   152,   nil,   134,   nil,   128,   109,   nil,
-    91,    71,   125,   nil,   nil,   616,    72,    47,   271,   178,
-   187,   223,   231,   nil,   178,   264,   nil,   234,   642,   228,
-    25,   nil,    78,   nil,   261,   272,   nil,   279,   nil,   271,
-   nil,   934,   982,   nil,   nil,    -5,   300,   nil,   129,   309,
-   nil,   nil,   283,   302,   340,   345,     2,   nil,   343,   345,
-   nil,   nil,   nil,   nil,   nil,   334,    29,   347,   nil,     2,
-   329,   nil,   783,   nil,   134,    47,   859,   834,   nil,   899,
-     8,   nil,   nil,   nil,    51,   104,   231,   345,   377,   398,
-   504,   483,   324,   292,   157,  1214,   430,   536,    19,   240,
-   183,   182,   131,   nil,   nil,    75,   nil,   nil,   nil,   nil,
-   -11,   148,   828,   255,   -19,    56,   nil,   576,   699,    89,
-    64,   nil,   nil,   nil,  1157,   116,   719,   131,   102,   108,
-   nil,  1116,   nil,   nil,   nil,   130,   515,   nil,   nil,   nil,
-   nil,   163,   145,   nil,   nil,   nil,   nil,   nil,   744,   174,
-   nil,   nil,   nil,   nil,   nil,   282,   251,   221,   185,   947,
-    26,   132,   886,    79,   245,  1053,   122,    32,   nil,   nil,
-   258,   -20,   738,   814,   184,   nil,   nil,   nil,   nil,   808,
-   nil,    -3,   nil,   nil,   273,   274,    -7,    67,   nil,  1034,
-   nil,   nil,   nil,   nil,  1012,   nil,   nil,   nil,   nil,   nil,
-   301,   987,   nil,   nil,   nil,   nil,   220,   632,   295,   nil,
-   nil,   310,   nil,   311,   319,   320,   nil,   322,   nil,   nil,
-   nil,   nil,   338,   758,   764,   648,   nil,   nil,    82,  1075,
-   nil,   nil,   nil,   nil,   789,   349,   351,   nil,   nil,   353,
-  1094,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  1195,  1135,
-   nil,  1176,   nil,   nil ]
+  1278,   127,   358,   nil,   nil,    58,   352,   nil,   nil,   nil,
+    23,   nil,   nil,   699,   nil,   343,   218,     6,   nil,  1297,
+   632,   nil,   nil,   181,    70,   nil,   nil,    79,   271,   nil,
+   nil,   nil,   nil,   536,   451,   273,   256,   nil,   515,   nil,
+   nil,   nil,    24,   nil,   nil,   nil,   nil,   nil,   885,   nil,
+   277,   592,   264,   252,   nil,   nil,   nil,   nil,   239,     8,
+   236,   252,   nil,   232,   nil,   210,   nil,   195,   186,   nil,
+   152,   152,   430,   nil,   nil,   576,   324,    50,    47,   207,
+   231,   237,   242,   nil,    19,   105,   nil,   248,   725,   232,
+    90,   nil,    69,   nil,   273,   278,   nil,   284,   nil,   281,
+   nil,  1024,   976,   nil,   nil,    -5,   300,   nil,   137,   310,
+   nil,   nil,   280,   299,   330,   320,     2,   nil,   347,   348,
+   nil,   nil,   nil,   nil,   nil,   342,    29,   350,   nil,     2,
+   321,   nil,   766,   nil,   220,   -31,   901,   846,   nil,   941,
+     8,   nil,   nil,   nil,    51,    72,   133,   239,   377,   398,
+   483,   345,   292,   271,   186,  1117,   504,   165,    -2,   129,
+   234,   229,    25,   nil,   nil,    69,   nil,   nil,   nil,   nil,
+   -11,   156,   853,   231,   -19,    56,   nil,   715,   709,    79,
+    95,   nil,   nil,   nil,  1240,   156,   642,   184,   161,   163,
+   nil,  1199,   nil,   nil,   nil,   188,   560,   nil,   nil,   nil,
+   nil,   224,    -7,   nil,   nil,   nil,   nil,   nil,   764,   228,
+   nil,   nil,   nil,   nil,   nil,   229,   298,    96,   140,   989,
+   193,    26,   928,    90,   245,  1095,   238,    45,    72,   nil,
+   nil,   271,   -20,   780,   782,   143,   nil,   nil,   nil,   nil,
+   830,   nil,    77,   nil,   nil,   292,   293,   284,    67,   nil,
+  1076,   nil,   nil,   nil,   nil,  1054,   nil,   nil,   nil,   nil,
+   nil,   305,  1029,   nil,   nil,   nil,   nil,   204,   616,   293,
+   nil,   317,   nil,   nil,   310,   nil,   311,   313,   314,   nil,
+   315,   nil,   nil,   nil,   nil,   331,   805,   648,   693,   nil,
+   nil,   139,  1136,   nil,   nil,   nil,   nil,   832,   352,   353,
+   nil,   nil,  1158,  1177,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,  1218,   nil,  1259,   nil,   nil,   nil ]
 
 racc_action_default = [
-  -167,  -191,  -191,    -7,  -160,  -191,  -191,    -8,  -158,    -9,
-  -191,   -10,   -11,  -159,   -12,  -191,  -191,  -191,   -13,    -1,
-  -191,   -14,    -2,  -191,  -191,   -15,    -3,  -191,   -40,   -16,
-    -5,   -17,    -6,  -191,  -191,   -79,  -167,  -159,   -72,  -165,
-  -164,  -163,  -167,  -161,  -166,  -184,   -33,   -20,  -191,   -32,
-   -21,  -191,   -63,   -22,  -102,   -23,  -104,  -103,   -25,   -62,
-   -26,  -191,   -61,   -27,  -147,   -28,  -148,   -29,  -191,   -30,
-   -31,  -191,  -191,  -110,   -97,  -191,  -191,   -91,   -95,   -92,
-   -99,   -93,   -98,   -96,  -191,  -191,   -94,   -90,  -191,   -72,
-  -167,   -42,  -167,    -4,  -191,  -151,  -149,  -191,   -39,  -167,
-   -41,   -70,   -71,   -78,   -80,  -191,  -189,   -77,  -191,  -191,
-  -180,   -63,   -59,   -65,  -189,   -68,   -62,   -57,   -66,  -191,
-  -146,  -145,   -69,   -67,   -73,   -64,  -191,  -191,  -178,  -191,
-  -191,   -19,  -191,   -82,  -191,  -191,  -191,  -191,   314,  -191,
-  -191,  -186,  -124,  -117,  -191,  -191,  -191,  -191,  -191,  -191,
-  -191,  -191,  -191,  -191,  -191,  -191,  -191,  -191,  -191,  -191,
-  -189,  -191,  -167,   -46,   -48,  -191,   -55,   -62,   -54,   -45,
-  -191,  -191,  -191,  -191,  -168,  -191,  -169,  -191,  -191,  -191,
-  -190,  -181,  -182,  -183,  -191,  -191,   -60,  -191,  -190,   -72,
-  -179,  -191,  -162,   -18,   -24,   -62,  -191,  -105,  -187,  -188,
-   -34,  -191,  -191,  -101,  -136,  -141,  -144,  -142,  -191,  -191,
-  -143,  -135,  -127,  -185,  -113,  -115,  -119,  -116,  -121,  -126,
-  -123,  -120,  -125,  -122,  -118,  -191,  -111,  -112,  -114,  -106,
-  -191,  -191,  -191,  -191,  -191,   -51,   -50,   -44,   -43,  -191,
-  -129,  -191,  -133,  -150,  -177,  -175,  -191,  -191,  -172,  -191,
-   -76,   -75,   -38,   -81,  -191,  -155,   -35,   -58,   -36,   -74,
-  -189,  -191,  -157,   -83,  -100,  -138,  -189,  -191,  -108,   -37,
-   -49,   -85,   -52,   -89,   -86,   -87,   -88,   -84,   -53,   -47,
-  -130,  -128,  -191,  -191,  -191,  -191,  -170,  -171,  -191,  -191,
-  -153,  -154,   -56,  -156,  -191,  -191,  -188,  -140,  -107,  -191,
-  -191,  -134,  -176,  -174,  -173,  -152,  -139,  -137,  -191,  -191,
-  -132,  -191,  -131,  -109 ]
+  -169,  -193,  -193,    -7,  -162,  -193,  -193,    -8,  -160,    -9,
+  -193,   -10,   -11,  -161,   -12,  -193,  -193,  -193,   -13,    -1,
+  -193,   -14,    -2,  -193,  -193,   -15,    -3,  -193,   -40,   -16,
+    -5,   -17,    -6,  -193,  -193,   -79,  -169,  -161,   -72,  -167,
+  -166,  -165,  -169,  -163,  -168,  -186,   -33,   -20,  -193,   -32,
+   -21,  -193,   -63,   -22,  -102,   -23,  -104,  -103,   -25,   -62,
+   -26,  -193,   -61,   -27,  -149,   -28,  -150,   -29,  -193,   -30,
+   -31,  -193,  -193,  -112,   -97,  -193,  -193,   -91,   -95,   -92,
+   -99,   -93,   -98,   -96,  -193,  -193,   -94,   -90,  -193,   -72,
+  -169,   -42,  -169,    -4,  -193,  -153,  -151,  -193,   -39,  -169,
+   -41,   -70,   -71,   -78,   -80,  -193,  -191,   -77,  -193,  -193,
+  -182,   -63,   -59,   -65,  -191,   -68,   -62,   -57,   -66,  -193,
+  -148,  -147,   -69,   -67,   -73,   -64,  -193,  -193,  -180,  -193,
+  -193,   -19,  -193,   -82,  -193,  -193,  -193,  -193,   317,  -193,
+  -193,  -188,  -126,  -119,  -193,  -193,  -193,  -193,  -193,  -193,
+  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,
+  -191,  -193,  -169,   -46,   -48,  -193,   -55,   -62,   -54,   -45,
+  -193,  -193,  -193,  -193,  -170,  -193,  -171,  -193,  -193,  -193,
+  -192,  -183,  -184,  -185,  -193,  -193,   -60,  -193,  -192,   -72,
+  -181,  -193,  -164,   -18,   -24,   -62,  -193,  -105,  -189,  -190,
+   -34,  -193,  -193,  -101,  -138,  -143,  -146,  -144,  -193,  -193,
+  -145,  -137,  -129,  -187,  -115,  -117,  -121,  -118,  -123,  -128,
+  -125,  -122,  -127,  -124,  -120,  -193,  -109,  -113,  -114,  -116,
+  -106,  -193,  -193,  -193,  -193,  -193,   -51,   -50,   -44,   -43,
+  -193,  -131,  -193,  -135,  -152,  -179,  -177,  -193,  -193,  -174,
+  -193,   -76,   -75,   -38,   -81,  -193,  -157,   -35,   -58,   -36,
+   -74,  -191,  -193,  -159,   -83,  -100,  -140,  -191,  -193,  -109,
+  -108,  -193,   -37,   -49,   -85,   -52,   -89,   -86,   -87,   -88,
+   -84,   -53,   -47,  -132,  -130,  -193,  -193,  -193,  -193,  -172,
+  -173,  -193,  -193,  -155,  -156,   -56,  -158,  -193,  -193,  -190,
+  -142,  -107,  -193,  -193,  -136,  -178,  -176,  -175,  -154,  -141,
+  -139,  -193,  -111,  -193,  -134,  -110,  -133 ]
 
 racc_goto_table = [
-     2,    70,    19,   122,    17,    93,    47,   104,   117,   107,
-   179,    96,   209,    46,   204,    43,    36,   240,   187,     2,
-    15,   134,   114,    17,    64,   248,   125,   279,    97,    22,
-   170,    91,   171,   272,   278,   294,    70,   298,    99,   239,
-   106,   130,   185,   211,    63,   140,   112,   242,    46,    64,
-   266,    95,   175,    58,   109,    42,   127,   194,   159,    64,
-   246,   247,    98,   181,   230,   110,   nil,   nil,   nil,   118,
-   nil,   128,   nil,   160,   nil,   nil,   nil,   nil,   113,    63,
-   nil,   nil,   nil,   209,   280,   265,   nil,    69,    58,   nil,
+     2,   179,    93,    17,   209,    43,    19,   204,    47,   187,
+   249,   122,   104,    46,    36,    70,    22,   114,   107,     2,
+   241,   170,    17,   171,   117,    96,   270,    97,    15,   134,
+   275,   281,   282,   297,    91,   240,    99,   106,   185,   243,
+   125,   211,   112,   130,   267,    95,    64,   175,    46,   109,
+    70,    42,   110,   140,   127,   231,   194,   247,   128,    67,
+   248,    98,   181,   nil,   nil,   nil,   159,   nil,   160,   301,
+    69,    64,   nil,   nil,   nil,   209,   nil,   nil,   266,   nil,
+   nil,    64,   nil,   nil,   121,   nil,   nil,   nil,   283,   nil,
+   nil,   nil,   nil,   232,    67,   123,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    69,   nil,   243,   nil,   nil,
+   nil,    94,   nil,   nil,   nil,   176,   nil,   182,   nil,   nil,
+   nil,   190,   nil,   nil,   192,    65,   nil,   307,   nil,   nil,
+   nil,   202,   nil,   nil,    70,   200,    46,   nil,    70,   210,
+   nil,   nil,   133,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   120,   nil,   nil,   304,   nil,     2,   295,   254,    17,   122,
+    65,   225,   298,   107,   209,    64,   133,   309,   261,    64,
+    64,   260,   258,   nil,   210,   244,   nil,   nil,    67,   133,
+   nil,   nil,    67,   121,     2,   nil,   nil,    17,   125,    69,
+   255,     2,   nil,    69,    17,   nil,   nil,   262,   nil,    60,
+   nil,   nil,    63,   nil,   nil,    64,   nil,   nil,    93,   nil,
+   210,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   121,    64,
+   nil,   nil,   nil,   nil,   115,     2,   nil,   118,    17,   nil,
+   nil,   nil,   121,   nil,    60,   280,   280,    63,    93,   nil,
+   nil,    64,   210,   123,    65,    93,   nil,   nil,    65,   120,
+     2,   nil,   nil,    17,   121,     2,   292,   nil,    17,   nil,
+   nil,   nil,     2,   nil,   nil,    17,    64,    64,   251,   252,
+   nil,   nil,   nil,    64,   nil,    93,   168,   nil,   168,   121,
+   121,   nil,   nil,   nil,   120,   nil,   121,   264,   210,   nil,
+   279,   279,     2,   nil,    93,    17,    93,   nil,   120,   210,
+   nil,   nil,     2,     2,   nil,    17,    17,   nil,   311,   313,
+   nil,     2,    58,     2,    17,   nil,    17,    85,    60,    64,
+   120,    63,    60,   206,   nil,    63,   207,   nil,   nil,   nil,
+    64,   nil,   121,   nil,   101,   102,   nil,   113,   nil,   nil,
+   nil,   nil,   nil,   121,   nil,   278,   278,    58,   168,   nil,
+   nil,   nil,   120,   nil,   nil,   nil,   nil,   nil,   206,   300,
+   nil,   207,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   115,   139,   nil,   118,   nil,   142,   305,   306,
+   nil,   nil,   nil,   nil,   nil,   143,   nil,   nil,   nil,   166,
+   nil,   166,   nil,   nil,   206,   nil,   nil,   207,   120,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   120,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   276,
+   276,   168,   277,   277,   nil,   nil,   206,   nil,   nil,   207,
+   nil,    58,   nil,   nil,   nil,    58,   205,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   214,   215,   216,   217,   218,
+   219,   220,   221,   222,   223,   224,   nil,   227,   228,   229,
+   nil,   166,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   205,   206,   nil,   nil,   207,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   206,   nil,   113,   207,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   205,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   231,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    94,   123,   nil,   242,   nil,   nil,   nil,   nil,   182,
-    70,   nil,    69,   nil,    70,   210,   nil,   nil,   176,   202,
-   166,   190,   166,   nil,   192,   200,    46,   nil,   nil,   304,
-   nil,   nil,   133,    64,   nil,   nil,   nil,    64,    64,   nil,
-   nil,   122,   253,   nil,   107,     2,   257,   225,   301,    17,
-   210,   243,   259,    63,   292,   nil,   133,    63,   207,   209,
-   295,   306,    58,   260,   125,   nil,    58,   205,   nil,   133,
-   nil,   nil,   nil,    64,     2,   nil,   254,   nil,    17,   nil,
-   nil,     2,   nil,   261,   nil,    17,   210,    64,    65,   nil,
-   nil,   nil,   166,   207,   nil,   nil,    69,    67,   nil,   nil,
-    69,    93,   205,   nil,   nil,   nil,   nil,   118,   nil,    64,
-   277,   277,   nil,   120,   nil,     2,   113,   210,   nil,    17,
-   nil,   nil,   121,    65,   nil,   nil,   nil,   nil,   nil,   207,
-    93,    60,    67,    64,    64,   nil,   nil,    93,   205,     2,
-    64,   289,   nil,    17,     2,   nil,   nil,   nil,    17,   nil,
-   123,     2,   nil,   274,   274,    17,   115,   nil,   250,   251,
-   207,   210,   271,   271,   166,    93,    60,   nil,   nil,   205,
-   nil,   nil,   210,   nil,   nil,   nil,   nil,   263,   nil,     2,
-   nil,   nil,   nil,    17,    64,    93,   nil,    93,   nil,   nil,
-     2,   nil,   309,   nil,    17,    64,   276,   276,     2,     2,
-   311,     2,    17,    17,   207,    17,   nil,    65,   168,   nil,
-   168,    65,   120,   205,   nil,   207,    67,   nil,   nil,   nil,
-    67,   121,   nil,   nil,   205,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   120,   297,   nil,
-    60,   nil,   nil,   nil,    60,   206,   121,   nil,   nil,   nil,
-   nil,   120,   nil,   nil,   nil,   302,   303,   nil,   nil,   nil,
-   121,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   168,   nil,   nil,   120,   nil,    85,   nil,   nil,   nil,   nil,
-   206,   nil,   121,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   101,   102,   115,   nil,   nil,   275,   275,   nil,
-   nil,   nil,   nil,   nil,   120,   nil,   121,   121,   nil,   nil,
-   nil,   nil,   nil,   121,   nil,   nil,   206,   nil,   nil,   nil,
+   nil,   nil,   274,   274,   166,   nil,   nil,   nil,   nil,   205,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   139,   nil,   nil,   nil,   142,   nil,   nil,   nil,   nil,
-   273,   273,   168,   143,   nil,   nil,   nil,   206,   120,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   121,   nil,   120,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   121,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   206,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   206,   214,   215,   216,   217,   218,   219,   220,
-   221,   222,   223,   224,   nil,   226,   227,   228 ]
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   205,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   205 ]
 
 racc_goto_check = [
-    29,    28,     2,    48,    35,     4,    18,    53,    45,    50,
-    34,    28,    60,    29,    62,    69,    30,    58,    34,    29,
-     1,    54,    33,    35,    47,    72,    28,    40,    35,     3,
-    39,    38,    39,    44,    44,    55,    28,    56,    30,    57,
-    36,    18,    32,    61,    24,    54,    31,    60,    29,    47,
-    63,    64,    65,    22,    66,    67,    68,    21,    54,    47,
-    70,    71,     5,    73,    34,     3,   nil,   nil,   nil,    24,
-   nil,     3,   nil,    33,   nil,   nil,   nil,   nil,    22,    24,
-   nil,   nil,   nil,    60,    58,    62,   nil,    27,    22,   nil,
+    29,    34,     4,    35,    60,    69,     2,    62,    18,    34,
+    72,    48,    53,    29,    30,    28,     3,    33,    50,    29,
+    58,    39,    35,    39,    45,    28,    56,    35,     1,    54,
+    44,    44,    40,    55,    38,    57,    30,    36,    32,    60,
+    28,    61,    31,    18,    63,    64,    47,    65,    29,    66,
+    28,    67,     3,    54,    68,    34,    21,    70,     3,    26,
+    71,     5,    73,   nil,   nil,   nil,    54,   nil,    33,    56,
+    27,    47,   nil,   nil,   nil,    60,   nil,   nil,    62,   nil,
+   nil,    47,   nil,   nil,    26,   nil,   nil,   nil,    58,   nil,
+   nil,   nil,   nil,    39,    26,    27,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    27,   nil,    60,   nil,   nil,
+   nil,    51,   nil,   nil,   nil,     3,   nil,    30,   nil,   nil,
+   nil,    69,   nil,   nil,    69,    25,   nil,    72,   nil,   nil,
+   nil,    18,   nil,   nil,    28,    29,    29,   nil,    28,    28,
+   nil,   nil,    51,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+    25,   nil,   nil,    60,   nil,    29,    34,    53,    35,    48,
+    25,     2,    34,    50,    60,    47,    51,    62,    33,    47,
+    47,    50,    45,   nil,    28,    28,   nil,   nil,    26,    51,
+   nil,   nil,    26,    26,    29,   nil,   nil,    35,    28,    27,
+     2,    29,   nil,    27,    35,   nil,   nil,     2,   nil,    23,
+   nil,   nil,    24,   nil,   nil,    47,   nil,   nil,     4,   nil,
+    28,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    26,    47,
+   nil,   nil,   nil,   nil,    23,    29,   nil,    24,    35,   nil,
+   nil,   nil,    26,   nil,    23,    28,    28,    24,     4,   nil,
+   nil,    47,    28,    27,    25,     4,   nil,   nil,    25,    25,
+    29,   nil,   nil,    35,    26,    29,     2,   nil,    35,   nil,
+   nil,   nil,    29,   nil,   nil,    35,    47,    47,    51,    51,
+   nil,   nil,   nil,    47,   nil,     4,    23,   nil,    23,    26,
+    26,   nil,   nil,   nil,    25,   nil,    26,    51,    28,   nil,
+    27,    27,    29,   nil,     4,    35,     4,   nil,    25,    28,
+   nil,   nil,    29,    29,   nil,    35,    35,   nil,     2,     2,
+   nil,    29,    22,    29,    35,   nil,    35,    49,    23,    47,
+    25,    24,    23,    23,   nil,    24,    24,   nil,   nil,   nil,
+    47,   nil,    26,   nil,    49,    49,   nil,    22,   nil,   nil,
+   nil,   nil,   nil,    26,   nil,    25,    25,    22,    23,   nil,
+   nil,   nil,    25,   nil,   nil,   nil,   nil,   nil,    23,    51,
+   nil,    24,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    23,    49,   nil,    24,   nil,    49,    51,    51,
+   nil,   nil,   nil,   nil,   nil,    49,   nil,   nil,   nil,    22,
+   nil,    22,   nil,   nil,    23,   nil,   nil,    24,    25,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    23,
+    23,    23,    24,    24,   nil,   nil,    23,   nil,   nil,    24,
+   nil,    22,   nil,   nil,   nil,    22,    22,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    49,    49,    49,    49,    49,
+    49,    49,    49,    49,    49,    49,   nil,    49,    49,    49,
+   nil,    22,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,    22,    23,   nil,   nil,    24,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,    23,   nil,    22,    24,   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,   nil,    39,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    51,    27,   nil,    60,   nil,   nil,   nil,   nil,    30,
-    28,   nil,    27,   nil,    28,    28,   nil,   nil,     3,    18,
-    22,    69,    22,   nil,    69,    29,    29,   nil,   nil,    72,
-   nil,   nil,    51,    47,   nil,   nil,   nil,    47,    47,   nil,
-   nil,    48,    53,   nil,    50,    29,    45,     2,    60,    35,
-    28,    28,    50,    24,    34,   nil,    51,    24,    24,    60,
-    34,    62,    22,    33,    28,   nil,    22,    22,   nil,    51,
-   nil,   nil,   nil,    47,    29,   nil,     2,   nil,    35,   nil,
-   nil,    29,   nil,     2,   nil,    35,    28,    47,    25,   nil,
-   nil,   nil,    22,    24,   nil,   nil,    27,    26,   nil,   nil,
-    27,     4,    22,   nil,   nil,   nil,   nil,    24,   nil,    47,
-    28,    28,   nil,    25,   nil,    29,    22,    28,   nil,    35,
-   nil,   nil,    26,    25,   nil,   nil,   nil,   nil,   nil,    24,
-     4,    23,    26,    47,    47,   nil,   nil,     4,    22,    29,
-    47,     2,   nil,    35,    29,   nil,   nil,   nil,    35,   nil,
-    27,    29,   nil,    24,    24,    35,    23,   nil,    51,    51,
-    24,    28,    22,    22,    22,     4,    23,   nil,   nil,    22,
-   nil,   nil,    28,   nil,   nil,   nil,   nil,    51,   nil,    29,
-   nil,   nil,   nil,    35,    47,     4,   nil,     4,   nil,   nil,
-    29,   nil,     2,   nil,    35,    47,    27,    27,    29,    29,
-     2,    29,    35,    35,    24,    35,   nil,    25,    23,   nil,
-    23,    25,    25,    22,   nil,    24,    26,   nil,   nil,   nil,
-    26,    26,   nil,   nil,    22,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    22,    22,    22,   nil,   nil,   nil,   nil,    22,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,    51,   nil,
-    23,   nil,   nil,   nil,    23,    23,    26,   nil,   nil,   nil,
-   nil,    25,   nil,   nil,   nil,    51,    51,   nil,   nil,   nil,
-    26,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    23,   nil,   nil,    25,   nil,    49,   nil,   nil,   nil,   nil,
-    23,   nil,    26,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    49,    49,    23,   nil,   nil,    25,    25,   nil,
-   nil,   nil,   nil,   nil,    25,   nil,    26,    26,   nil,   nil,
-   nil,   nil,   nil,    26,   nil,   nil,    23,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    49,   nil,   nil,   nil,    49,   nil,   nil,   nil,   nil,
-    23,    23,    23,    49,   nil,   nil,   nil,    23,    25,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    26,   nil,    25,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    26,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    23,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    23,    49,    49,    49,    49,    49,    49,    49,
-    49,    49,    49,    49,   nil,    49,    49,    49 ]
+   nil,   nil,   nil,   nil,   nil,    22,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,    22 ]
 
 racc_goto_pointer = [
-   nil,    20,     2,    29,   -14,    38,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    -7,   nil,
-   nil,   -75,    40,   228,    31,   185,   194,    74,   -12,     0,
-    11,     8,   -70,   -16,   -96,     4,     5,   nil,    14,   -60,
-  -207,   nil,   nil,   nil,  -199,   -30,   nil,    11,   -35,   379,
-   -26,    91,   nil,   -28,   -30,  -231,  -231,  -133,  -155,   nil,
-  -125,   -94,  -123,  -158,    28,   -47,    18,    45,    14,     5,
-  -114,  -113,  -149,   -45 ]
+   nil,    28,     6,    16,   -17,    37,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    -5,   nil,
+   nil,   -76,   299,   186,   189,   112,    46,    57,     2,     0,
+     9,     4,   -74,   -21,  -105,     3,     2,   nil,    17,   -69,
+  -203,   nil,   nil,   nil,  -203,   -14,   nil,    33,   -27,   301,
+   -17,    91,   nil,   -23,   -22,  -234,  -200,  -137,  -152,   nil,
+  -133,   -96,  -130,  -164,    22,   -52,    13,    41,    12,    -5,
+  -117,  -114,  -164,   -46 ]
 
 racc_goto_default = [
    nil,   nil,   nil,   169,    26,    30,    32,     3,     7,     9,
     11,    12,    14,    18,    21,    25,    29,    31,   nil,    50,
     53,    55,    77,    78,    79,    81,    82,    86,    87,    74,
      6,   nil,   nil,   nil,   nil,    61,   nil,    24,   nil,   nil,
-   163,   234,   164,   165,   nil,   nil,   119,    80,    83,   nil,
-   124,    73,   103,   nil,   nil,   196,   nil,   nil,   nil,   241,
+   163,   235,   164,   165,   nil,   nil,   119,    80,    83,   nil,
+   124,    73,   103,   nil,   nil,   196,   nil,   nil,   nil,   242,
     68,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil ]
 
@@ -1528,138 +1552,161 @@ module_eval <<'.,.,', 'grammar.ra', 421
   end
 .,.,
 
- # reduce 108 omitted
+module_eval <<'.,.,', 'grammar.ra', 433
+  def _reduce_108( val, _values, result )
+    args = {
+        :test => val[1],
+        :statements => ast(AST::Nop)
+    }
 
-module_eval <<'.,.,', 'grammar.ra', 426
-  def _reduce_109( val, _values, result )
-    result = ast AST::Else, :statements => val[2]
+    if val[4]
+        args[:else] = val[4]
+    end
+
+    result = ast AST::IfStatement, args
    result
   end
 .,.,
 
- # reduce 110 omitted
+ # reduce 109 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 443
-  def _reduce_111( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
+module_eval <<'.,.,', 'grammar.ra', 438
+  def _reduce_110( val, _values, result )
+    result = ast AST::Else, :statements => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 446
-  def _reduce_112( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
+module_eval <<'.,.,', 'grammar.ra', 441
+  def _reduce_111( val, _values, result )
+    result = ast AST::Else, :statements => ast(AST::Nop)
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 449
+ # reduce 112 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 458
   def _reduce_113( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 452
+module_eval <<'.,.,', 'grammar.ra', 461
   def _reduce_114( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 455
+module_eval <<'.,.,', 'grammar.ra', 464
   def _reduce_115( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 458
+module_eval <<'.,.,', 'grammar.ra', 467
   def _reduce_116( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 461
+module_eval <<'.,.,', 'grammar.ra', 470
   def _reduce_117( val, _values, result )
-    result = ast AST::Minus, :value => val[1]
+    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 464
+module_eval <<'.,.,', 'grammar.ra', 473
   def _reduce_118( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
+    result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 467
+module_eval <<'.,.,', 'grammar.ra', 476
   def _reduce_119( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
+    result = ast AST::Minus, :value => val[1]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 470
+module_eval <<'.,.,', 'grammar.ra', 479
   def _reduce_120( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 473
+module_eval <<'.,.,', 'grammar.ra', 482
   def _reduce_121( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 476
+module_eval <<'.,.,', 'grammar.ra', 485
   def _reduce_122( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 479
+module_eval <<'.,.,', 'grammar.ra', 488
   def _reduce_123( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 482
+module_eval <<'.,.,', 'grammar.ra', 491
   def _reduce_124( val, _values, result )
-    result = ast AST::Not, :value => val[1]
+    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 485
+module_eval <<'.,.,', 'grammar.ra', 494
   def _reduce_125( val, _values, result )
-    result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2]
+    result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 488
+module_eval <<'.,.,', 'grammar.ra', 497
   def _reduce_126( val, _values, result )
-    result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2]
+    result = ast AST::Not, :value => val[1]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 491
+module_eval <<'.,.,', 'grammar.ra', 500
   def _reduce_127( val, _values, result )
-    result = val[1]
+    result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 499
+module_eval <<'.,.,', 'grammar.ra', 503
   def _reduce_128( val, _values, result )
+    result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2]
+   result
+  end
+.,.,
+
+module_eval <<'.,.,', 'grammar.ra', 506
+  def _reduce_129( val, _values, result )
+    result = val[1]
+   result
+  end
+.,.,
+
+module_eval <<'.,.,', 'grammar.ra', 514
+  def _reduce_130( val, _values, result )
     options = val[3]
     unless options.instance_of?(AST::ASTArray)
         options = ast AST::ASTArray, :children => [val[3]]
@@ -1669,10 +1716,10 @@ module_eval <<'.,.,', 'grammar.ra', 499
   end
 .,.,
 
- # reduce 129 omitted
+ # reduce 131 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 509
-  def _reduce_130( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 524
+  def _reduce_132( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push val[1]
         result = val[0]
@@ -1683,15 +1730,15 @@ module_eval <<'.,.,', 'grammar.ra', 509
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 513
-  def _reduce_131( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 528
+  def _reduce_133( val, _values, result )
     result = ast AST::CaseOpt, :value => val[0], :statements => val[3]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 518
-  def _reduce_132( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 533
+  def _reduce_134( val, _values, result )
     result = ast(AST::CaseOpt,
         :value => val[0],
         :statements => ast(AST::ASTArray)
@@ -1700,10 +1747,10 @@ module_eval <<'.,.,', 'grammar.ra', 518
   end
 .,.,
 
- # reduce 133 omitted
+ # reduce 135 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 528
-  def _reduce_134( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 543
+  def _reduce_136( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -1714,26 +1761,26 @@ module_eval <<'.,.,', 'grammar.ra', 528
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 532
-  def _reduce_135( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 547
+  def _reduce_137( val, _values, result )
     result = ast AST::Selector, :param => val[0], :values => val[2]
    result
   end
 .,.,
 
- # reduce 136 omitted
+ # reduce 138 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 534
-  def _reduce_137( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 549
+  def _reduce_139( val, _values, result )
  result = val[1]
    result
   end
 .,.,
 
- # reduce 138 omitted
+ # reduce 140 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 545
-  def _reduce_139( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 560
+  def _reduce_141( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -1744,17 +1791,13 @@ module_eval <<'.,.,', 'grammar.ra', 545
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 549
-  def _reduce_140( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 564
+  def _reduce_142( val, _values, result )
     result = ast AST::ResourceParam, :param => val[0], :value => val[2]
    result
   end
 .,.,
 
- # reduce 141 omitted
-
- # reduce 142 omitted
-
  # reduce 143 omitted
 
  # reduce 144 omitted
@@ -1765,29 +1808,33 @@ module_eval <<'.,.,', 'grammar.ra', 549
 
  # reduce 147 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 560
-  def _reduce_148( val, _values, result )
+ # reduce 148 omitted
+
+ # reduce 149 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 575
+  def _reduce_150( val, _values, result )
     result = ast AST::Default, :value => val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 562
-  def _reduce_149( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 577
+  def _reduce_151( val, _values, result )
  result = [val[0].value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 566
-  def _reduce_150( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 581
+  def _reduce_152( val, _values, result )
     results = val[0] << val[2].value
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 574
-  def _reduce_151( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 589
+  def _reduce_153( val, _values, result )
     val[1].each do |file|
         import(file)
     end
@@ -1797,8 +1844,8 @@ module_eval <<'.,.,', 'grammar.ra', 574
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 584
-  def _reduce_152( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 599
+  def _reduce_154( val, _values, result )
     newdefine classname(val[1]), :arguments => val[2], :code => val[4]
     @lexer.indefine = false
     result = nil
@@ -1808,8 +1855,8 @@ module_eval <<'.,.,', 'grammar.ra', 584
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 588
-  def _reduce_153( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 603
+  def _reduce_155( val, _values, result )
     newdefine classname(val[1]), :arguments => val[2]
     @lexer.indefine = false
     result = nil
@@ -1817,8 +1864,8 @@ module_eval <<'.,.,', 'grammar.ra', 588
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 596
-  def _reduce_154( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 611
+  def _reduce_156( val, _values, result )
     # Our class gets defined in the parent namespace, not our own.
     @lexer.namepop
     newclass classname(val[1]), :code => val[4], :parent => val[2]
@@ -1827,8 +1874,8 @@ module_eval <<'.,.,', 'grammar.ra', 596
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 601
-  def _reduce_155( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 616
+  def _reduce_157( val, _values, result )
     # Our class gets defined in the parent namespace, not our own.
     @lexer.namepop
     newclass classname(val[1]), :parent => val[2]
@@ -1837,32 +1884,32 @@ module_eval <<'.,.,', 'grammar.ra', 601
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 606
-  def _reduce_156( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 621
+  def _reduce_158( val, _values, result )
     newnode val[1], :parent => val[2], :code => val[4]
     result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 609
-  def _reduce_157( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 624
+  def _reduce_159( val, _values, result )
     newnode val[1], :parent => val[2]
     result = nil
    result
   end
 .,.,
 
- # reduce 158 omitted
-
- # reduce 159 omitted
-
  # reduce 160 omitted
 
  # reduce 161 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 623
-  def _reduce_162( val, _values, result )
+ # reduce 162 omitted
+
+ # reduce 163 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 638
+  def _reduce_164( val, _values, result )
     result = val[0]
     result = [result] unless result.is_a?(Array)
     result << val[2]
@@ -1870,49 +1917,49 @@ module_eval <<'.,.,', 'grammar.ra', 623
   end
 .,.,
 
- # reduce 163 omitted
-
- # reduce 164 omitted
-
  # reduce 165 omitted
 
  # reduce 166 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 632
-  def _reduce_167( val, _values, result )
+ # reduce 167 omitted
+
+ # reduce 168 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 647
+  def _reduce_169( val, _values, result )
     result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 636
-  def _reduce_168( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 651
+  def _reduce_170( val, _values, result )
     result = ast AST::ASTArray, :children => []
    result
   end
 .,.,
 
- # reduce 169 omitted
+ # reduce 171 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 641
-  def _reduce_170( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 656
+  def _reduce_172( val, _values, result )
     result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 645
-  def _reduce_171( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 660
+  def _reduce_173( val, _values, result )
     result = val[1]
     result = [result] unless result[0].is_a?(Array)
    result
   end
 .,.,
 
- # reduce 172 omitted
+ # reduce 174 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 652
-  def _reduce_173( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 667
+  def _reduce_175( val, _values, result )
     result = val[0]
     result = [result] unless result[0].is_a?(Array)
     result << val[2]
@@ -1920,67 +1967,67 @@ module_eval <<'.,.,', 'grammar.ra', 652
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 657
-  def _reduce_174( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 672
+  def _reduce_176( val, _values, result )
     Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
     result = [val[0], val[2]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 661
-  def _reduce_175( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 676
+  def _reduce_177( val, _values, result )
     Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
     result = [val[0]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 663
-  def _reduce_176( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 678
+  def _reduce_178( val, _values, result )
     result = [val[0], val[2]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 665
-  def _reduce_177( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 680
+  def _reduce_179( val, _values, result )
     result = [val[0]]
    result
   end
 .,.,
 
- # reduce 178 omitted
+ # reduce 180 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 670
-  def _reduce_179( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 685
+  def _reduce_181( val, _values, result )
     result = val[1]
    result
   end
 .,.,
 
- # reduce 180 omitted
+ # reduce 182 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 675
-  def _reduce_181( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 690
+  def _reduce_183( val, _values, result )
     result = val[1]
    result
   end
 .,.,
 
- # reduce 182 omitted
+ # reduce 184 omitted
 
- # reduce 183 omitted
+ # reduce 185 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 681
-  def _reduce_184( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 696
+  def _reduce_186( val, _values, result )
     result = ast AST::Variable, :value => val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 689
-  def _reduce_185( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 704
+  def _reduce_187( val, _values, result )
     if val[1].instance_of?(AST::ASTArray)
         result = val[1]
     else
@@ -1990,21 +2037,21 @@ module_eval <<'.,.,', 'grammar.ra', 689
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 691
-  def _reduce_186( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 706
+  def _reduce_188( val, _values, result )
     result = ast AST::ASTArray
    result
   end
 .,.,
 
- # reduce 187 omitted
+ # reduce 189 omitted
 
- # reduce 188 omitted
+ # reduce 190 omitted
 
- # reduce 189 omitted
+ # reduce 191 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 696
-  def _reduce_190( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 711
+  def _reduce_192( val, _values, result )
  result = nil
    result
   end
diff --git a/spec/unit/parser/ast/nop.rb b/spec/unit/parser/ast/nop.rb
new file mode 100755
index 0000000..5a71325
--- /dev/null
+++ b/spec/unit/parser/ast/nop.rb
@@ -0,0 +1,20 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+describe Puppet::Parser::AST::Nop do
+
+    before do
+        @scope = mock 'scope'
+    end
+
+    it "should do nothing on evaluation" do
+        Puppet::Parser::AST.expects(:safeevaluate).never
+        Puppet::Parser::AST::Nop.new({}).evaluate(@scope)
+    end
+
+    it "should not return anything" do
+        Puppet::Parser::AST::Nop.new({}).evaluate(@scope).should be_nil
+    end
+
+end
diff --git a/spec/unit/parser/parser.rb b/spec/unit/parser/parser.rb
index 0092a99..c0d22a2 100755
--- a/spec/unit/parser/parser.rb
+++ b/spec/unit/parser/parser.rb
@@ -116,4 +116,30 @@ describe Puppet::Parser do
         
     end
      
+    describe Puppet::Parser, "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
+
  end
diff --git a/test/data/snippets/emptyifelse.pp b/test/data/snippets/emptyifelse.pp
new file mode 100644
index 0000000..598b486
--- /dev/null
+++ b/test/data/snippets/emptyifelse.pp
@@ -0,0 +1,9 @@
+
+if false {
+} else {
+  # nothing here
+}
+
+if true {
+  # still nothing
+}

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list