edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/ClassInitGenerator/Program.cs;C404624 File: Program.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/ClassInitGenerator/Program.cs;C404624 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/ClassInitGenerator/Program.cs;Super17 @@ -76,6 +76,11 @@ Class } + private enum HiddenMethod { + ClrInvisible, + Undefined + } + private class ModuleDef { public string/*!*/ QualifiedName; public string/*!*/ SimpleName; @@ -87,8 +92,8 @@ public IDictionary/*!*/ ClassMethods = new SortedDictionary(); public IDictionary/*!*/ Constants = new SortedDictionary(); - public IDictionary/*!*/ HiddenInstanceMethods = new SortedDictionary(); - public IDictionary/*!*/ HiddenClassMethods = new SortedDictionary(); + public IDictionary/*!*/ HiddenInstanceMethods = new SortedDictionary(); + public IDictionary/*!*/ HiddenClassMethods = new SortedDictionary(); public List/*!*/ Factories = new List(); @@ -315,16 +320,26 @@ ReflectConstants(def); ReflectAliases(def); - // removed CLR methods: + // hidden CLR methods: foreach (HideMethodAttribute method in trait.GetCustomAttributes(typeof(HideMethodAttribute), false)) { // TODO: warning, method already removed, method not found ... if (method.IsStatic) { - def.HiddenClassMethods[method.Name] = true; + def.HiddenClassMethods[method.Name] = HiddenMethod.ClrInvisible; } else { - def.HiddenInstanceMethods[method.Name] = true; + def.HiddenInstanceMethods[method.Name] = HiddenMethod.ClrInvisible; } } + // undefined methods: + foreach (UndefineMethodAttribute method in trait.GetCustomAttributes(typeof(UndefineMethodAttribute), false)) { + // TODO: warning, method already removed, method not found ... + if (method.IsStatic) { + def.HiddenClassMethods[method.Name] = HiddenMethod.Undefined; + } else { + def.HiddenInstanceMethods[method.Name] = HiddenMethod.Undefined; + } + } + if (def.Extends == typeof(Object)) { _hasPrimitives = true; } @@ -813,9 +828,13 @@ } } - private void GenerateHiddenMethods(IDictionary/*!*/ methods) { - foreach (string name in methods.Keys) { - _output.WriteLine("module.HideMethod(\"{0}\");", name); + private void GenerateHiddenMethods(IDictionary/*!*/ methods) { + foreach (KeyValuePair entry in methods) { + if (entry.Value == HiddenMethod.Undefined) { + _output.WriteLine("module.UndefineMethod(\"{0}\");", entry.Key); + } else { + _output.WriteLine("module.HideMethod(\"{0}\");", entry.Key); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Helpers.cs;C417101 File: Helpers.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Helpers.cs;C417101 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Helpers.cs;Super17 @@ -26,6 +26,7 @@ using Microsoft.Scripting.Runtime; using Microsoft.Scripting.Generation; using Ruby.Compiler; +using System.Diagnostics; namespace Ruby.Tests { @@ -76,16 +77,29 @@ public RubyExecutionContext ExecutionContext { get { return _driver.TestRuntime.ExecutionContext; } } public RubyContext Context { get { return _driver.TestRuntime.Context; } } + public string/*!*/ Eval(bool eval, string/*!*/ code) { + if (eval) { + return code.Replace("#<","eval %q{").Replace("#>", "}"); + } else { + return code.Replace("#<", "").Replace("#>", ""); + } + } + public void CompilerTest(string/*!*/ code) { - CompilerTest(code, null); + CompilerTest(code, 0, 0); } - public void CompilerTest(string/*!*/ code, ErrorSink sink) { - ScriptSource source; + public void CompilerTest(string/*!*/ code, int expectedCompilerWarningCount, int expectedRuntimeWarningCount) { + LoggingErrorSink log = new LoggingErrorSink(true); + CompilerTest(code, log); + Assert(log.ErrorCount == 0 && log.FatalErrorCount == 0, "Compile time error"); + Assert(log.WarningCount == expectedCompilerWarningCount, "Wrong number of compile time errors/warnings"); + Assert(ExecutionContext.RuntimeErrorSink.WarningCount == expectedRuntimeWarningCount, "Wrong number of runtime warnings"); + } - if (sink == null) { - sink = ErrorSink.Default; - } + public void CompilerTest(string/*!*/ code, ErrorSink/*!*/ sink) { + Debug.Assert(code != null && sink != null); + SourceUnit source; string name = _driver.TestRuntime.TestName; @@ -93,15 +107,18 @@ string path = Path.Combine(Snippets.Shared.SnippetsDirectory, name + ".rb"); Directory.CreateDirectory(Snippets.Shared.SnippetsDirectory); File.WriteAllText(path, code); - source = Engine.CreateScriptSourceFromFile(path); + source = _driver.TestRuntime.Context.CreateFileUnit(path); } else { - source = Engine.CreateScriptSourceFromString(code, name + ".rb", SourceCodeKind.File); + source = _driver.TestRuntime.Context.CreateSnippet(code, name + ".rb", SourceCodeKind.File); } if (_driver.OptimizedScopes) { source.Execute(); } else { - source.Execute(Engine.CreateScope()); + ScriptCode compiledCode = source.Compile(new RubyCompilerOptions(), sink); + if (compiledCode != null) { + compiledCode.Run(new Scope()); + } } } @@ -180,7 +197,7 @@ StringBuilder builder = new StringBuilder(); using (StringWriter output = new StringWriter(builder)) { - RedirectOutput(output, TextWriter.Null, f); + RedirectOutput(output, Console.Error, f); } string actualOutput = builder.ToString(); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/IronRuby.Tests.csproj;C420856 File: IronRuby.Tests.csproj =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/IronRuby.Tests.csproj;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/IronRuby.Tests.csproj;Super17 @@ -63,6 +63,7 @@ + =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C427406 File: RubyTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C427406 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;Super17 @@ -50,6 +50,7 @@ Scenario_RubyScopes3, Scenario_RubyScopes4, Scenario_RubyScopes5, + Scenario_RubyScopes6, Scenario_RubyNumericLiterals1, Scenario_RubyStrings1, @@ -80,6 +81,7 @@ Scenario_MethodAliases1, Scenario_MethodUndef1, Scenario_MethodUndef2, + MethodUndefExpression, Scenario_Assignment1, Scenario_ParallelAssignment1, @@ -92,6 +94,7 @@ Scenario_ParallelAssignment9, Scenario_ParallelAssignment10, + BlockEmpty, Scenario_RubyBlocks0, ProcYieldCaching1, ProcCallCaching1, @@ -118,6 +121,10 @@ Scenario_RubyBlockArgs4, Scenario_RubyProcs1, + RubyProcArgConversion1, + RubyProcArgConversion2, + RubyProcArgConversion3, + RubyProcArgConversion4, Scenario_DefineMethod1, Scenario_RubyInitializers0, @@ -162,12 +169,14 @@ Scenario_RubyBoolExpressions3, Scenario_RubyBoolExpressions4, Scenario_RubyBoolExpressionsWithReturn1, + Scenario_RubyBoolExpressionsWithReturn2, Scenario_RubyBoolAssignment, Scenario_RubyIfExpression1, Scenario_RubyIfExpression2, Scenario_RubyUnlessExpression1, Scenario_RubyConditionalExpression1, - Scenario_RubyConditionalStatement1, + ConditionalStatement1, + ConditionalStatement2, Scenario_UninitializedVars1, Scenario_UninitializedVars2, @@ -226,10 +235,14 @@ Scenario_RubyExceptions_Globals, Scenario_RubyRescueStatement1, Scenario_RubyRescueExpression1, + Scenario_RubyRescueExpression2, ClassVariables1, UnqualifiedConstants2, + AliasMethodLookup, + UndefMethodLookup, + Scenario_Singletons1, Scenario_Singletons2, Scenario_Singletons3, @@ -237,7 +250,11 @@ Scenario_Singletons5, Scenario_ClassVariables_Singletons, - Scenario_RubySuper1, + Super1, + SuperParameterless1, + Super2, + SuperInDefineMethod1, + SuperInDefineMethod2, Scenario_RubyDefinedOperator_Globals1, Scenario_RubyDefinedOperator_Globals2, @@ -255,7 +272,8 @@ Scenario_RubyThreads1, Scenario_YieldCodeGen, - Methods, + Methods, + MethodAliasExpression, // eval, binding: Eval1, @@ -269,6 +287,10 @@ ModuleEvalProc3, ModuleEvalString1, ModuleEvalString2, + + SuperEval1, + // TODO: SuperParameterlessEval1, + SuperInDefineMethodEval1, }; } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BlockTests.cs;C427406 File: BlockTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BlockTests.cs;C427406 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BlockTests.cs;Super17 @@ -31,6 +31,10 @@ namespace Ruby.Tests { public partial class Tests { + public void BlockEmpty() { + CompilerTest("1.times { }"); + } + public void Scenario_RubyBlocks0() { AssertOutput(delegate() { CompilerTest(@" @@ -455,7 +459,7 @@ e { |x| puts x.inspect } f { |x| puts x.inspect } g { |(x,)| puts x.inspect } -"); +", 0, 2); // 2 runtime warnings }, @" nil 1 @@ -465,7 +469,6 @@ [1, 2] nil "); - Debug.Assert(ExecutionContext.RuntimeErrorSink.WarningCount == 2); } public void Scenario_RubyBlockArgs2() { @@ -550,18 +553,121 @@ "); } + public void RubyProcArgConversion1() { + AssertOutput(delegate() { + CompilerTest(@" +class C + def to_proc + lambda { |x| puts x } + end +end + +class D + def to_proc + lambda { |x| puts x + 1 } + end +end + +class E +end + +1.times(&C.new) +1.times(&D.new) +1.times(&E.new) rescue puts 'error' +"); + }, @" +0 +1 +error +"); + } + + public void RubyProcArgConversion2() { + AssertOutput(delegate() { + CompilerTest(@" +class C + def to_proc; 1; end +end + +class D + def to_proc; lambda { puts 'ok2' }; end +end + +1.times(&lambda { puts 'ok1' }) +1.times(&C.new) rescue puts 'error' # TODO: puts $! -> # +1.times(&D.new) +"); + }, @" +ok1 +error +ok2 +"); + } + + public void RubyProcArgConversion3() { + AssertOutput(delegate() { + CompilerTest(@" +def foo &b + p b +end + +foo(&nil) +"); + }, @"nil"); + } + + public void RubyProcArgConversion4() { + AssertOutput(delegate() { + CompilerTest(@" +class C + def respond_to? name + puts name + $has_to_proc + end + + def to_proc + lambda { puts 'ok' } + end +end + +$has_to_proc = false +1.times(&C.new) rescue puts 'error' + +$has_to_proc = true +1.times(&C.new) +"); + }, @" +to_proc +error +to_proc +ok +"); + } + public void Scenario_DefineMethod1() { AssertOutput(delegate() { CompilerTest(@" class C - define_method(:foo) { - self.class - } + def foo + $x = lambda { + puts self.class + } + + $x.call + end end -puts C.new.foo +C.new.foo + +class D + define_method :goo, &$x +end + +D.new.goo "); - }, @"C"); + }, @" +C +D"); } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BoolAndConditionalTests.cs;C417101 File: BoolAndConditionalTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BoolAndConditionalTests.cs;C417101 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/BoolAndConditionalTests.cs;Super17 @@ -179,6 +179,18 @@ "); } + public void Scenario_RubyBoolExpressionsWithReturn2() { + AssertOutput(delegate() { + CompilerTest(@" +def foo + false || return + puts 'unreachable' +end +foo +"); + }, @""); + } + public void Scenario_RubyBoolAssignment() { AssertOutput(delegate() { CompilerTest(@" @@ -278,7 +290,7 @@ "); } - public void Scenario_RubyConditionalStatement1() { + public void ConditionalStatement1() { AssertOutput(delegate() { CompilerTest(@" def t; puts 1; true; end @@ -309,5 +321,17 @@ 2 "); } + + public void ConditionalStatement2() { + AssertOutput(delegate() { + CompilerTest(@" +p x = (1 if true) +p x = (1 if false) +"); + }, @" +1 +nil +"); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ExceptionTests.cs;C417101 File: ExceptionTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ExceptionTests.cs;C417101 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ExceptionTests.cs;Super17 @@ -549,5 +549,22 @@ "); }, @"2"); } + + public void Scenario_RubyRescueExpression2() { + AssertOutput(delegate() { + CompilerTest(@" +def foo + raise +end + +def bar + x = foo rescue return + puts 'unreachable' +end + +bar +"); + }, @""); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/MiscTests.cs;C420856 File: MiscTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/MiscTests.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/MiscTests.cs;Super17 @@ -386,6 +386,24 @@ "); } + /// + /// Nested module scopes - they don't have DLR tuples and therefore need to be skipped when looking up a storage from closure. + /// + public void Scenario_RubyScopes6() { + CompilerTest(@" +1.times { + module M + module N + z = 1 + 1.times { + x = z + } + end + end +} +"); + } + public void Scenario_RubyNumericLiterals1() { AssertOutput(delegate() { CompilerTest(@" @@ -659,7 +677,31 @@ "); } + /// + /// Alias (unlike undef) looks up the method in Object. + /// + public void AliasMethodLookup() { + AssertOutput(delegate() { + CompilerTest(@" +module Kernel; def m_kernel; end; end +class Object; def m_object; end; end +module N + def m_n + end + + module M + alias x m_object rescue puts '!alias m_object' + alias x m_kernel rescue puts '!alias m_kernel' + alias x m_n rescue puts '!alias m_n' + end +end +"); + }, @" +!alias m_n +"); + } + public void Scenario_RubyReturnValues1() { AssertOutput(delegate() { CompilerTest(@" @@ -896,29 +938,6 @@ "); } - /// - /// Calls to super with block and no arguments (was bug in parser/AST). - /// - public void Scenario_RubySuper1() { - AssertOutput(delegate() { - CompilerTest(@" -class C - def foo - yield - end -end - -class D < C - def foo - super { puts 'foo' } - end -end - -D.new.foo -"); - }, @"foo"); - } - public void Scenario_MainSingleton() { AssertOutput(delegate() { CompilerTest(@" @@ -1003,5 +1022,14 @@ 3 "); } + + public void MethodAliasExpression() { + AssertOutput(delegate() { + CompilerTest(@" +def b; end +p ((alias a b)) +", 1, 0); + }, "nil"); + } } } =================================================================== add: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/SuperTests.cs File: SuperTests.cs =================================================================== --- [no source file] +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/SuperTests.cs;Super17 @@ -1,0 +1,206 @@ +?/* **************************************************************************** + * + * Copyright (c) Microsoft Corporation. + * + * This source code is subject to terms and conditions of the Microsoft Public License. A + * copy of the license can be found in the License.html file at the root of this distribution. If + * you cannot locate the Microsoft Public License, please send an email to + * ironruby@microsoft.com. By using this source code in any fashion, you are agreeing to be bound + * by the terms of the Microsoft Public License. + * + * You must not remove this notice, or any other, from this software. + * + * + * ***************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; + +using Microsoft.Scripting; +using Microsoft.Scripting.Hosting; +using Microsoft.Scripting.Math; + +using Ruby.Compiler; +using Ruby.Compiler.Ast; +using Ruby.Runtime; + +namespace Ruby.Tests { + public partial class Tests { + private void Super1_Test(bool eval) { + AssertOutput(delegate() { + CompilerTest(Eval(eval, @" +class C + def foo a + puts 'C.foo' + puts a + end +end + +class D < C + def foo + puts 'D.foo' + # + end +end + +D.new.foo +")); + }, @" +D.foo +C.foo +arg"); + } + + public void Super1() { + Super1_Test(false); + } + + public void SuperEval1() { + Super1_Test(true); + } + + public void SuperParameterless1() { + SuperParameterless1_Test(false); + } + + public void SuperParameterlessEval1() { + SuperParameterless1_Test(true); + } + + public void SuperParameterless1_Test(bool eval) { + AssertOutput(delegate() { + CompilerTest(Eval(eval, @" +class C + def foo a + puts 'C.foo' + puts a + end +end + +class D < C + def foo a + puts 'D.foo' + # + end +end + +D.new.foo 'arg' +")); + }, @" +D.foo +C.foo +arg"); + } + + /// + /// Calls to super with block and no arguments (was bug in parser/AST). + /// + public void Super2() { + AssertOutput(delegate() { + CompilerTest(@" +class C + def foo + yield + end +end + +class D < C + def foo + super { puts 'foo' } + end +end + +D.new.foo +"); + }, @"foo"); + } + + // TODO: parameters + + public void SuperInDefineMethod1() { + SuperInDefineMethod1_Test(false); + } + + public void SuperInDefineMethodEval1() { + SuperInDefineMethod1_Test(true); + } + + /// + /// Super in proc invoked via a call to a method defined by define_method uses the method's name and declaring module for super-method lookup. + /// + public void SuperInDefineMethod1_Test(bool eval) { + AssertOutput(delegate() { + CompilerTest(Eval(eval, @" +def def_lambda + 1.times { + $p = lambda { + 1.times { + p self.class + # + } + } + } +end + +class C + def foo + puts 'C.foo' + end +end + +def_lambda + +class D < C + define_method :foo, &$p +end + +D.new.foo +")); + }, @" +D +C.foo +"); + } + + /// + /// Super in proc invoked via "call" uses the self and parameters captured in closure by the block. + /// + public void SuperInDefineMethod2() { + AssertOutput(delegate() { + CompilerTest(@" +class A + def def_lambda a + puts 'A.def_lambda' + puts a + end +end + +class B < A + def def_lambda a + 1.times { + $p = lambda { + 1.times { + p self.class + super + } + } + } + end +end + +B.new.def_lambda 'arg' +$p.call 'foo' +"); + }, @" +B +A.def_lambda +arg +"); + } + } + +} =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/UndefTests.cs;C417101 File: UndefTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/UndefTests.cs;C417101 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/UndefTests.cs;Super17 @@ -31,7 +31,6 @@ namespace Ruby.Tests { public partial class Tests { - public void Scenario_MethodUndef1() { AssertOutput(delegate() { CompilerTest(@" @@ -147,5 +146,41 @@ "); AssertEquals(ExecutionContext.GetGlobalVariable("o"), 10); } + + public void MethodUndefExpression() { + AssertOutput(delegate() { + CompilerTest(@" +def u; end +p ((undef u)) +", 1, 0); + }, "nil"); + } + + /// + /// Undef (unlike alias) doesn't look up the method in Object. + /// + public void UndefMethodLookup() { + AssertOutput(delegate() { + CompilerTest(@" +module Kernel; def m_kernel; end; end +class Object; def m_object; end; end + +module N + def m_n + end + + module M + undef m_object rescue puts '!undef m_object' + undef m_kernel rescue puts '!undef m_kernel' + undef m_n rescue puts '!undef m_n' + end +end +"); + }, @" +!undef m_object +!undef m_kernel +!undef m_n +"); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializer.Generated.cs;C428766 File: Initializer.Generated.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializer.Generated.cs;C428766 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Initializer.Generated.cs;Super17 @@ -44,9 +44,9 @@ #endif // Skipped primitive: Object Ruby.Builtins.RubyModule def34 = DefineModule("System::Collections::Generic::IDictionary", typeof(System.Collections.Generic.IDictionary), new System.Action(LoadSystem__Collections__Generic__IDictionary_Instance), null, new Ruby.Builtins.RubyModule[] {def28, }); - DefineModule("System::Collections::IEnumerable", typeof(System.Collections.IEnumerable), new System.Action(LoadSystem__Collections__IEnumerable_Instance), null, new Ruby.Builtins.RubyModule[] {def28, }); + Ruby.Builtins.RubyModule def47 = DefineModule("System::Collections::IEnumerable", typeof(System.Collections.IEnumerable), new System.Action(LoadSystem__Collections__IEnumerable_Instance), null, new Ruby.Builtins.RubyModule[] {def28, }); Ruby.Builtins.RubyModule def42 = DefineModule("System::Collections::IList", typeof(System.Collections.IList), new System.Action(LoadSystem__Collections__IList_Instance), null, new Ruby.Builtins.RubyModule[] {def28, }); - Ruby.Builtins.RubyModule def47 = DefineModule("System::IComparable", typeof(System.IComparable), new System.Action(LoadSystem__IComparable_Instance), null, new Ruby.Builtins.RubyModule[] {def40, }); + DefineModule("System::IComparable", typeof(System.IComparable), new System.Action(LoadSystem__IComparable_Instance), null, new Ruby.Builtins.RubyModule[] {def40, }); DefineGlobalClass("Time", typeof(System.DateTime), typeof(Ruby.Builtins.TimeOps), new System.Action(LoadTime_Instance), new System.Action(LoadTime_Class), classRef1, new Ruby.Builtins.RubyModule[] {def40, }, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.TimeOps.Create), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.TimeOps.Create), @@ -318,11 +318,11 @@ }); module.DefineMethod("private", 0x9, new System.Delegate[] { - new Microsoft.Scripting.Utils.Function(Ruby.Builtins.MainSingletonOps.SetPrivateVisibility), + new Microsoft.Scripting.Utils.Function(Ruby.Builtins.MainSingletonOps.SetPrivateVisibility), }); module.DefineMethod("public", 0x9, new System.Delegate[] { - new Microsoft.Scripting.Utils.Function(Ruby.Builtins.MainSingletonOps.SetPublicVisibility), + new Microsoft.Scripting.Utils.Function(Ruby.Builtins.MainSingletonOps.SetPublicVisibility), }); module.DefineMethod("to_s", 0x9, new System.Delegate[] { @@ -566,6 +566,9 @@ private void LoadClass_Instance(Ruby.Builtins.RubyModule/*!*/ module) { + module.UndefineMethod("append_features"); + module.UndefineMethod("extend_object"); + module.UndefineMethod("module_function"); module.DefineMethod("[]", 0x9, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ClassOps.Of), }); @@ -1770,6 +1773,10 @@ new Microsoft.Scripting.Utils.Function(Ruby.Builtins.Kernel.GetLocalScope), }); + module.DefineMethod("block_given?", 0xa, new System.Delegate[] { + new Microsoft.Scripting.Utils.Function(Ruby.Builtins.Kernel.HasBlock), + }); + module.DefineMethod("class", 0x9, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.Kernel.GetClass), }); @@ -1882,6 +1889,10 @@ new Microsoft.Scripting.Utils.Function(Ruby.Builtins.Kernel.IsKindOf), }); + module.DefineMethod("iterator?", 0xa, new System.Delegate[] { + new Microsoft.Scripting.Utils.Function(Ruby.Builtins.Kernel.HasBlock), + }); + module.DefineMethod("kind_of?", 0x9, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.Kernel.IsKindOf), }); @@ -2362,6 +2373,7 @@ }); module.DefineMethod("class_eval", 0x9, new System.Delegate[] { + new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.Evaluate), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.Evaluate), }); @@ -2444,11 +2456,15 @@ new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.MethodDefined), }); - module.DefineMethod("module_eval", 0xa, new System.Delegate[] { + module.DefineMethod("module_eval", 0x9, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.Evaluate), new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.Evaluate), }); + module.DefineMethod("module_function", 0xa, new System.Delegate[] { + new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.CopyMethodsToModuleSingleton), + }); + module.DefineMethod("name", 0x9, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.GetName), }); @@ -2537,10 +2553,6 @@ private void LoadModule_Class(Ruby.Builtins.RubyModule/*!*/ module) { - module.DefineMethod("class_eval", 0x11, new System.Delegate[] { - new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.Evaluate), - }); - module.DefineMethod("constants", 0x11, new System.Delegate[] { new Microsoft.Scripting.Utils.Function(Ruby.Builtins.ModuleOps.GetGlobalConstants), }); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Protocols.cs;C417565 File: Protocols.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Protocols.cs;C417565 (server) 5/3/2008 1:33 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Protocols.cs;Super17 @@ -99,7 +99,7 @@ return str; } - throw RubyExceptions.MethodShouldReturnType(obj, "to_str", "String"); + throw RubyExceptions.MethodShouldReturnType(context, obj, "to_str", "String"); } return null; @@ -151,7 +151,7 @@ if (RubySites.RespondTo(context, value, "to_f")) { object obj = _ToF.Invoke(context, value); if (!(obj is double)) { - throw RubyExceptions.MethodShouldReturnType(value, "to_f", "Float"); + throw RubyExceptions.MethodShouldReturnType(context, value, "to_f", "Float"); } return (double)obj; } @@ -198,7 +198,7 @@ return result; } - throw RubyExceptions.MethodShouldReturnType(obj, "to_int", "Integer"); + throw RubyExceptions.MethodShouldReturnType(context, obj, "to_int", "Integer"); } if (RubySites.RespondTo(context, obj, "to_i")) { @@ -207,7 +207,7 @@ return result; } - throw RubyExceptions.MethodShouldReturnType(obj, "to_i", "Integer"); + throw RubyExceptions.MethodShouldReturnType(context, obj, "to_i", "Integer"); } return null; @@ -375,7 +375,7 @@ return ary; } - throw RubyExceptions.MethodShouldReturnType(obj, "to_a", "Array"); + throw RubyExceptions.MethodShouldReturnType(context, obj, "to_a", "Array"); } return null; @@ -413,7 +413,7 @@ return ary; } - throw RubyExceptions.MethodShouldReturnType(obj, "to_ary", "Array"); + throw RubyExceptions.MethodShouldReturnType(context, obj, "to_ary", "Array"); } return null; =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ClassOps.cs;C420856 File: ClassOps.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ClassOps.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ClassOps.cs;Super17 @@ -38,6 +38,9 @@ using Ruby.Compiler.Ast; [RubyClass("Class", Extends = typeof(RubyClass), Inherits = typeof(RubyModule))] + [UndefineMethod("extend_object")] + [UndefineMethod("append_features")] + [UndefineMethod("module_function")] public sealed class ClassOps { #region Private Instance Methods // TODO =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Kernel.cs;C428766 File: Kernel.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Kernel.cs;C428766 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Kernel.cs;Super17 @@ -107,12 +107,11 @@ return new Binding(RubyUtils.GetScope(context)); } - // TODO: - //[RubyMethod("block_given?", RubyMethodAttributes.PrivateInstance)] - //[RubyMethod("iterator?", RubyMethodAttributes.PrivateInstance)] - //public static bool HasBlock(CodeContext/*!*/ context, object self) { - // return GetLocalScope(context).Block != null; - //} + [RubyMethod("block_given?", RubyMethodAttributes.PrivateInstance)] + [RubyMethod("iterator?", RubyMethodAttributes.PrivateInstance)] + public static bool HasBlock(CodeContext/*!*/ context, object self) { + return RubyUtils.GetScope(context).GetInnerMostMethodScope().BlockParameter != null; + } //callcc //caller @@ -126,34 +125,16 @@ [RubyMethod("eval", RubyMethodAttributes.PublicSingleton)] public static object Evaluate(CodeContext/*!*/ context, object self, [NotNull]MutableString/*!*/ code, [Optional]Binding binding, [Optional, NotNull]MutableString file, [Optional, DefaultValue(1)]int line) { - return Evaluate(context, self, code, (binding != null) ? binding.LocalScope : RubyUtils.GetScope(context), file, line); + return RubyUtils.Evaluate(self, code, (binding != null) ? binding.LocalScope : RubyUtils.GetScope(context), file, line); } [RubyMethod("eval", RubyMethodAttributes.PrivateInstance)] [RubyMethod("eval", RubyMethodAttributes.PublicSingleton)] public static object Evaluate(CodeContext/*!*/ context, object self, [NotNull]MutableString/*!*/ code, [NotNull]Proc/*!*/ procBinding, [Optional, NotNull]MutableString file, [Optional, DefaultValue(1)]int line) { - return Evaluate(context, self, code, procBinding.LocalScope, file, line); + return RubyUtils.Evaluate(self, code, procBinding.LocalScope, file, line); } - internal static object Evaluate(CodeContext/*!*/ context, object self, MutableString/*!*/ code, RubyScope/*!*/ targetScope, MutableString file, int line) { - Assert.NotNull(context, code, targetScope); - - RubyContext language = (RubyContext)context.LanguageContext; - Scope globalScope = targetScope.GlobalScope; - - SourceUnit source = language.CreateSnippet(code.ToString()); - - RubyCompilerOptions options = new RubyCompilerOptions(); - options.IsEval = true; - options.LocalNames = targetScope.GetVisibleLocalNames(); - - ScriptCode compiledCode = source.Compile(options, language.ExecutionContext.RuntimeErrorSink); - Debug.Assert(compiledCode != null); - - return compiledCode.Run(targetScope, false); - } - //exec [RubyMethod("exit", RubyMethodAttributes.PrivateInstance)] =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/LibrarySites.cs;C415805 File: LibrarySites.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/LibrarySites.cs;C415805 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/LibrarySites.cs;Super17 @@ -215,8 +215,7 @@ for (int i = 0; i < args.Length; ++i) { argInfos[i + 1] = new ArgumentInfo(args[i]); } - return InvokeMemberAction.Make(RubyContext.RubyBinder, name, InvokeMemberActionFlags.IsCallWithThis | InvokeMemberActionFlags.ReturnNonCallable, - new CallSignature(argInfos)); + return InvokeMemberAction.Make(RubyContext.RubyBinder, name, new CallSignature(argInfos)); } #endregion =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ModuleOps.cs;C428766 File: ModuleOps.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ModuleOps.cs;C428766 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/ModuleOps.cs;Super17 @@ -165,85 +165,68 @@ // initialize // initialize_copy - #region private, protected, public + #region private, protected, public, module_function - private static SymbolId[]/*!*/ CastToSymbols(CodeContext/*!*/ context, object[]/*!*/ objects) { - SymbolId[] result = new SymbolId[objects.Length]; - for (int i = 0; i < objects.Length; i++) - result[i] = Protocols.CastToSymbol(context, objects[i]); - return result; - } - - internal static void SetVisibility(CodeContext/*!*/ context, SymbolId[]/*!*/ methodNames, RubyMethodVisibility visibility) { - ContractUtils.RequiresNotNull(context, "context"); - ContractUtils.RequiresNotNull(methodNames, "methodNames"); - - if (methodNames.Length > 0) { - // TODO: - //foreach (SymbolId methodName in methodNames) { - // self.ResolveMethod(methodName, true).Visibility = visibility; - // self.ResolveMethod(methodName, false).Visibility = visibility; - //} - } else { - RubyUtils.GetScope(context).Visibility = visibility; - } - } - - //--------------------------------------------------------- Module#private - // private => self - // private(symbol, ...) => self - //------------------------------------------------------------------------ - // With no arguments, sets the default visibility for subsequently - // defined methods to private. With arguments, sets the named methods - // to have private visibility. - - // module Mod - // def a() end - // def b() end - // private - // def c() end - // private :a - // end - // Mod.private_instance_methods #=> ["a", "c"] - [RubyMethod("private", RubyMethodAttributes.PrivateInstance)] public static RubyModule/*!*/ SetPrivateVisibility(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params object[]/*!*/ methodNames) { - SetVisibility(context, CastToSymbols(context, methodNames), RubyMethodVisibility.Private); + // overwrites methods to instance: + SetMethodAttributes(context, self, methodNames, RubyMethodAttributes.PrivateInstance); return self; } - //------------------------------------------------------- Module#protected - // protected => self - // protected(symbol, ...) => self - //------------------------------------------------------------------------ - // With no arguments, sets the default visibility for subsequently - // defined methods to protected. With arguments, sets the named - // methods to have protected visibility. - [RubyMethod("protected", RubyMethodAttributes.PrivateInstance)] public static RubyModule/*!*/ SetProtectedVisibility(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params object[]/*!*/ methodNames) { - SetVisibility(context, CastToSymbols(context, methodNames), RubyMethodVisibility.Protected); + // overwrites methods to instance: + SetMethodAttributes(context, self, methodNames, RubyMethodAttributes.ProtectedInstance); return self; } - //---------------------------------------------------------- Module#public - // public => self - // public(symbol, ...) => self - //------------------------------------------------------------------------ - // With no arguments, sets the default visibility for subsequently - // defined methods to public. With arguments, sets the named methods - // to have public visibility. - [RubyMethod("public", RubyMethodAttributes.PrivateInstance)] public static RubyModule/*!*/ SetPublicVisibility(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params object[]/*!*/ methodNames) { - SetVisibility(context, CastToSymbols(context, methodNames), RubyMethodVisibility.Public); + // overwrites methods to instance: + SetMethodAttributes(context, self, methodNames, RubyMethodAttributes.PublicInstance); return self; } + [RubyMethod("module_function", RubyMethodAttributes.PrivateInstance)] + public static RubyModule/*!*/ CopyMethodsToModuleSingleton(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params object[]/*!*/ methodNames) { + // overwrites visibility to public: + SetMethodAttributes(context, self, methodNames, RubyMethodAttributes.PublicSingleton); + return self; + } + + internal static void SetMethodAttributes(CodeContext/*!*/ context, RubyModule/*!*/ module, object[]/*!*/ methodNames, RubyMethodAttributes attributes) { + ContractUtils.RequiresNotNull(context, "context"); + ContractUtils.RequiresNotNull(methodNames, "methodNames"); + + if (methodNames.Length == 0) { + RubyUtils.GetScope(context).MethodAttributes = attributes; + } else { + foreach (SymbolId methodName in CastToSymbols(context, methodNames)) { + RubyMemberInfo method = module.ResolveMethod(methodName); + if (method == null) { + throw RubyExceptions.CreateMethodMissing(context, module, methodName); + } + + if ((attributes & RubyMethodAttributes.Singleton) != 0) { + Debug.Assert(!module.SingletonClass.IsDummySingletonClass); + module.SingletonClass.SetMethod(methodName, method); + } + + method.Visibility = (RubyMethodVisibility)(attributes & RubyMethodAttributes.VisibilityMask); + } + } + } + + private static SymbolId[]/*!*/ CastToSymbols(CodeContext/*!*/ context, object[]/*!*/ objects) { + SymbolId[] result = new SymbolId[objects.Length]; + for (int i = 0; i < objects.Length; i++) + result[i] = Protocols.CastToSymbol(context, objects[i]); + return result; + } + #endregion - // module_function - [RubyMethod("define_method", RubyMethodAttributes.PrivateInstance)] public static Proc/*!*/ DefineMethod(CodeContext/*!*/ context, RubyModule/*!*/ self, BlockParam/*!*/ block, SymbolId methodName) { // TODO: [NotNull] attribute should work for BlockParams but doesn't @@ -254,7 +237,7 @@ RubyScope scope = RubyUtils.GetScope(context); Proc lambda = block.Proc.ToLambda(); - self.SetMethod(methodName, Proc.ToLambdaMethodInfo(lambda, scope.Visibility, self)); + self.SetMethod(methodName, Proc.ToLambdaMethodInfo(lambda, methodName, scope.Visibility, self)); return lambda; } @@ -524,8 +507,8 @@ #region module_eval, class_eval - [RubyMethod("module_eval", RubyMethodAttributes.PrivateInstance)] - [RubyMethod("class_eval", RubyMethodAttributes.PublicSingleton)] + [RubyMethod("module_eval")] + [RubyMethod("class_eval")] public static object Evaluate(CodeContext/*!*/ context, RubyModule/*!*/ self, BlockParam block, [NotNull]MutableString/*!*/ code, [Optional, NotNull]MutableString file, [Optional, DefaultValue(1)]int line) { @@ -534,30 +517,14 @@ throw RubyExceptions.CreateArgumentError("wrong number of arguments"); } - Assert.NotNull(context, self, code); - - RubyContext language = (RubyContext)context.LanguageContext; - SourceUnit source = language.CreateSnippet(code.ToString()); - - RubyCompilerOptions options = new RubyCompilerOptions(); - - // we want to create a new top-level local scope: - options.IsIncluded = true; - - ScriptCode compiledCode = source.Compile(options, language.ExecutionContext.RuntimeErrorSink); - Debug.Assert(compiledCode != null); - - // TODO: this is hack - we need arbitrary signature of the Initialize method: - ModuleEvalScope moduleEvalScope = new ModuleEvalScope((RubyScope)context, self); - - return compiledCode.Run(moduleEvalScope, false); + return RubyUtils.EvaluateInModule(context, self, code, file, line); } private static DynamicSite _ClassEvalSite = DynamicSite.Create(YieldAction.Make(RubyContext.RubyBinder, 2)); + [RubyMethod("module_eval")] [RubyMethod("class_eval")] - [RubyMethod("module_eval")] public static object Evaluate(CodeContext/*!*/ context, RubyModule/*!*/ self, BlockParam/*!*/ block) { if (block == null) { throw RubyExceptions.CreateArgumentError("block not supplied"); @@ -739,6 +706,8 @@ stop = true; } + } else if (method.IsUndefined) { + visited.Add(name, true); } else if (method.Visibility == visibility && !visited.ContainsKey(name)) { result.Add(new MutableString(name)); visited.Add(name, true); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/SingletonOps.cs;C413883 File: SingletonOps.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/SingletonOps.cs;C413883 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/SingletonOps.cs;Super17 @@ -47,19 +47,20 @@ } [RubyMethod("public", RubyMethodAttributes.PublicInstance)] - public static RubyModule/*!*/ SetPublicVisibility(CodeContext/*!*/ context, object/*!*/ self, [NotNull]params SymbolId[]/*!*/ methodNames) { - return SetVisibility(context, self, methodNames, RubyMethodVisibility.Public); + public static RubyModule/*!*/ SetPublicVisibility(CodeContext/*!*/ context, object/*!*/ self, [NotNull]params object[]/*!*/ methodNames) { + return SetVisibility(context, self, methodNames, RubyMethodAttributes.PublicInstance); } [RubyMethod("private", RubyMethodAttributes.PublicInstance)] - public static RubyModule/*!*/ SetPrivateVisibility(CodeContext/*!*/ context, object/*!*/ self, [NotNull]params SymbolId[]/*!*/ methodNames) { - return SetVisibility(context, self, methodNames, RubyMethodVisibility.Private); + public static RubyModule/*!*/ SetPrivateVisibility(CodeContext/*!*/ context, object/*!*/ self, [NotNull]params object[]/*!*/ methodNames) { + return SetVisibility(context, self, methodNames, RubyMethodAttributes.PrivateInstance); } - private static RubyModule/*!*/ SetVisibility(CodeContext/*!*/ context, object/*!*/ self, SymbolId[]/*!*/ methodNames, RubyMethodVisibility visibility) { + private static RubyModule/*!*/ SetVisibility(CodeContext/*!*/ context, object/*!*/ self, object[]/*!*/ methodNames, RubyMethodAttributes attributes) { Assert.NotNull(context, self, methodNames); - ModuleOps.SetVisibility(context, methodNames, visibility); - return RubyUtils.GetExecutionContext(context).GetClassOf(self); + RubyClass cls = RubyUtils.GetExecutionContext(context).GetClassOf(self); + ModuleOps.SetMethodAttributes(context, cls, methodNames, attributes); + return cls; } [RubyMethod("include", RubyMethodAttributes.PublicInstance)] @@ -113,7 +114,9 @@ public static RubyClass/*!*/ GetSuperClass(RubyClass/*!*/ self) { RubyClass result = self.SingletonClass; Debug.Assert(result != null && result.IsSingletonClass); - return result; + + // do not return dummy singletons, also do not create a new singleton (MRI does): + return result.IsDummySingletonClass ? self : result; } [RubyMethod("new", RubyMethodAttributes.PublicInstance)] =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Attributes.cs;C413883 File: Attributes.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Attributes.cs;C413883 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Attributes.cs;Super17 @@ -262,5 +262,19 @@ _name = name; } } + + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true)] + public sealed class UndefineMethodAttribute : Attribute { + private readonly string/*!*/ _name; + private bool _isStatic; + + public string/*!*/ Name { get { return _name; } } + public bool IsStatic { get { return _isStatic; } set { _isStatic = value; } } + + public UndefineMethodAttribute(string/*!*/ name) { + ContractUtils.RequiresNotNull(name, "name"); + _name = name; + } + } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Ruby.csproj;C427406 File: Ruby.csproj =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Ruby.csproj;C427406 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Ruby.csproj;Super17 @@ -110,6 +110,8 @@ + + @@ -222,7 +224,7 @@ - + =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C428685 File: Proc.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Proc.cs;Super17 @@ -118,6 +118,7 @@ SetProcCallRule(rule, binder, callerContext, procExpression, // proc object Ast.ReadProperty(procExpression, Proc.SelfProperty), // self captured by the block closure + Ast.Null(typeof(RubyLambdaMethodInfo)), // do not pass calling method yieldArgs // user args ); } @@ -128,6 +129,7 @@ internal void SetProcCallRule(RuleBuilder/*!*/ rule, ActionBinder/*!*/ binder, CodeContext/*!*/ callerContext, Expression/*!*/ procExpression, // proc object Expression/*!*/ selfExpression, // self passed to the proc + Expression/*!*/ callingMethodExpression, // RubyLambdaMethodInfo passed to the proc via BlockParam CallArguments/*!*/ yieldArgs // user arguments passed to the proc ) { @@ -145,7 +147,10 @@ return Ast.Comma( Ast.Assign(bfcVariable, - Ast.Call(BlockParam.GetMethod("CreateForProcCall"), Ast.ConvertHelper(procExpression, typeof(Proc))) + Ast.Call(BlockParam.GetMethod("CreateForProcCall"), + Ast.ConvertHelper(procExpression, typeof(Proc)), + callingMethodExpression + ) ), Ast.Try( Ast.Assign(resultVariable, expression) @@ -210,8 +215,9 @@ return result; } - public static RubyMemberInfo/*!*/ ToLambdaMethodInfo(Proc/*!*/ lambda, RubyMethodVisibility visibility, RubyModule/*!*/ owner) { - return new RubyLambdaMethodInfo(lambda, visibility, owner); + public static RubyMemberInfo/*!*/ ToLambdaMethodInfo(Proc/*!*/ lambda, SymbolId definitionName, RubyMethodVisibility visibility, + RubyModule/*!*/ owner) { + return new RubyLambdaMethodInfo(lambda, definitionName, visibility, owner); } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C428685 File: RubyClass.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;Super17 @@ -352,7 +352,7 @@ targetExpr = Ast.Comma( Ast.Assign(newInstanceVariable, targetExpr), - AstFactory.MakeUserMethodBody(args.Expressions[blockArg], rfcVariable, null, null, null, methodUnwinder, SymbolTable.StringToId("ctor"), + AstFactory.MakeUserMethodBody(args.Expressions[blockArg], rfcVariable, null, null, null, methodUnwinder, null, Ast.Assign(resultVariable, MakeInitializerCall(binder, rule, args, newInstanceVariable)) ), Ast.Condition( @@ -380,7 +380,7 @@ Expression[] ps = ArrayUtils.Insert(Ast.CodeContext(), args.Expressions); ps[1] = newInstanceExpr; - return Ast.Action.InvokeMember(binder, Symbols.Initialize, typeof(object), InvokeMemberActionFlags.IsCallWithThis, args.Signature, ps); + return Ast.Action.InvokeMember(binder, Symbols.Initialize, typeof(object), args.Signature, ps); } #endregion =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C428403 File: RubyModule.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;C428403 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyModule.cs;Super17 @@ -453,6 +453,10 @@ Updated(); } + public void UndefineMethod(string/*!*/ name) { + UndefineMethod(SymbolTable.StringToId(name)); + } + public void HideMethod(SymbolId name) { EnsureInitialized(); _methods[name] = RubyMethodInfo.HiddenMethod; @@ -675,15 +679,8 @@ #region IDynamicObject Members public virtual RuleBuilder GetRule(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) where T : class { - switch (action.Kind) { - case DynamicActionKind.InvokeMember: - RuleBuilder result = new RuleBuilder(); - RubyBinder.MakeRuleForInvokeMember(result, (InvokeMemberAction)action, callerContext, args); - return result; - - default: - return null; - } + RuleBuilder rule = new RuleBuilder(); + return RubyBinder.SetRule(rule, action, callerContext, args) ? rule : null; } public LanguageContext/*!*/ LanguageContext { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubySites.cs;C415805 File: RubySites.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubySites.cs;C415805 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubySites.cs;Super17 @@ -224,7 +224,6 @@ return InvokeMemberAction.Make( RubyContext.RubyBinder, name, - InvokeMemberActionFlags.IsCallWithThis | InvokeMemberActionFlags.ReturnNonCallable, new CallSignature(ArrayUtils.InsertAt(argKinds, 0, ArgumentKind.Instance)) ); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/AstGenerator.cs;C428685 File: AstGenerator.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/AstGenerator.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/AstGenerator.cs;Super17 @@ -18,6 +18,7 @@ using System.Diagnostics; using System.Collections.Generic; using System.Reflection; +using System.Threading; using Microsoft.Scripting; using Microsoft.Scripting.Hosting; @@ -32,16 +33,20 @@ using AstUtils = Microsoft.Scripting.Ast.Utils; internal sealed class AstGenerator { + private static int _UniqueId; private readonly ActionBinder/*!*/ _binder; private readonly RubyCompilerOptions/*!*/ _compilerOptions; + private readonly bool _debugCompiler; public RubyCompilerOptions/*!*/ CompilerOptions { get { return _compilerOptions; } } + public bool DebugCompiler { get { return _debugCompiler; } } - internal AstGenerator(CompilerContext/*!*/ compilerContext) { + internal AstGenerator(CompilerContext/*!*/ compilerContext, bool debugCompiler) { Assert.NotNull(compilerContext); _binder = compilerContext.SourceUnit.LanguageContext.Binder; _compilerOptions = (RubyCompilerOptions)compilerContext.Options; + _debugCompiler = debugCompiler; } internal ActionBinder Binder { @@ -57,16 +62,16 @@ } public sealed class LoopScope : LexicalScope { - private readonly MSA.VariableExpression/*!*/ _redoVariable; - private readonly MSA.VariableExpression/*!*/ _resultVariable; + private readonly MSA.Expression/*!*/ _redoVariable; + private readonly MSA.Expression/*!*/ _resultVariable; private readonly MSA.LabelTarget/*!*/ _label; public LoopScope _parentLoop; - public MSA.VariableExpression/*!*/ RedoVariable { + public MSA.Expression/*!*/ RedoVariable { get { return _redoVariable; } } - public MSA.VariableExpression/*!*/ ResultVariable { + public MSA.Expression/*!*/ ResultVariable { get { return _resultVariable; } } @@ -79,7 +84,7 @@ set { _parentLoop = value; } } - public LoopScope(MSA.VariableExpression/*!*/ redoVariable, MSA.VariableExpression/*!*/ resultVariable, MSA.LabelTarget/*!*/ label) { + public LoopScope(MSA.Expression/*!*/ redoVariable, MSA.Expression/*!*/ resultVariable, MSA.LabelTarget/*!*/ label) { Assert.NotNull(redoVariable, resultVariable, label); _redoVariable = redoVariable; _resultVariable = resultVariable; @@ -88,12 +93,12 @@ } public sealed class RescueScope : LexicalScope { - private readonly MSA.VariableExpression/*!*/ _retryingVariable; + private readonly MSA.Expression/*!*/ _retryingVariable; private readonly MSA.LabelTarget/*!*/ _label; public RescueScope _parentRescue; - public MSA.VariableExpression/*!*/ RetryingVariable { + public MSA.Expression/*!*/ RetryingVariable { get { return _retryingVariable; } } @@ -106,7 +111,7 @@ get { return _label; } } - public RescueScope(MSA.VariableExpression/*!*/ retryingVariable, MSA.LabelTarget/*!*/ label) { + public RescueScope(MSA.Expression/*!*/ retryingVariable, MSA.LabelTarget/*!*/ label) { Assert.NotNull(retryingVariable, label); _retryingVariable = retryingVariable; _label = label; @@ -133,8 +138,11 @@ } public abstract class FrameScope : SelfScope { + // A unique id of the scope per app-domain. Used for caching calls in dynamic sites. + private readonly int _uniqueId; + private readonly MSA.LambdaBuilder/*!*/ _codeBlock; - private readonly MSA.VariableExpression/*!*/ _runtimeScopeVariable; + private readonly MSA.Expression/*!*/ _runtimeScopeVariable; private BlockScope _parentBlock; private RescueScope _parentRescue; private LoopScope _parentLoop; @@ -143,28 +151,33 @@ get { return _codeBlock; } } - public MSA.VariableExpression/*!*/ RuntimeScopeVariable { + public MSA.Expression/*!*/ RuntimeScopeVariable { get { return _runtimeScopeVariable; } } + public int UniqueId { + get { return _uniqueId; } + } + public BlockScope ParentBlock { get { return _parentBlock; } set { _parentBlock = value; } } public RescueScope ParentRescue { get { return _parentRescue; } set { _parentRescue = value; } } public LoopScope ParentLoop { get { return _parentLoop; } set { _parentLoop = value; } } - public FrameScope(MSA.LambdaBuilder/*!*/ codeBlock, MSA.Expression/*!*/ selfVariable, MSA.VariableExpression/*!*/ runtimeScopeVariable) + public FrameScope(MSA.LambdaBuilder/*!*/ codeBlock, MSA.Expression/*!*/ selfVariable, MSA.Expression/*!*/ runtimeScopeVariable) : base(selfVariable) { Assert.NotNull(codeBlock, runtimeScopeVariable); _codeBlock = codeBlock; _runtimeScopeVariable = runtimeScopeVariable; + _uniqueId = Interlocked.Increment(ref _UniqueId); } } public sealed class BlockScope : FrameScope { - private readonly MSA.ParameterExpression/*!*/ _bfcVariable; + private readonly MSA.Expression/*!*/ _bfcVariable; private readonly MSA.LabelTarget/*!*/ _redoLabel; - public MSA.ParameterExpression/*!*/ BfcVariable { + public MSA.Expression/*!*/ BfcVariable { get { return _bfcVariable; } } @@ -172,8 +185,8 @@ get { return _redoLabel; } } - public BlockScope(MSA.LambdaBuilder/*!*/ codeBlock, MSA.VariableExpression/*!*/ selfVariable, MSA.VariableExpression/*!*/ runtimeScopeVariable, - MSA.ParameterExpression/*!*/ bfcVariable, MSA.LabelTarget/*!*/ redoLabel) + public BlockScope(MSA.LambdaBuilder/*!*/ codeBlock, MSA.Expression/*!*/ selfVariable, MSA.Expression/*!*/ runtimeScopeVariable, + MSA.Expression/*!*/ bfcVariable, MSA.LabelTarget/*!*/ redoLabel) : base(codeBlock, selfVariable, runtimeScopeVariable) { Assert.NotNull(bfcVariable, redoLabel); _bfcVariable = bfcVariable; @@ -182,18 +195,18 @@ } public sealed class MethodScope : FrameScope { - private readonly MSA.ParameterExpression _blockVariable; - private readonly MSA.VariableExpression/*!*/ _rfcVariable; - private readonly MSA.VariableExpression _methodOwner; + private readonly MSA.Expression _blockVariable; + private readonly MSA.Expression/*!*/ _rfcVariable; + private readonly MSA.Expression _currentMethodVariable; private readonly SymbolId _methodName; private readonly Parameters _parameters; private MethodScope _parentMethod; - public MSA.ParameterExpression BlockVariable { + public MSA.Expression BlockVariable { get { return _blockVariable; } } - public MSA.VariableExpression/*!*/ RfcVariable { + public MSA.Expression/*!*/ RfcVariable { get { return _rfcVariable; } } @@ -202,39 +215,48 @@ set { _parentMethod = value; } } + // TODO: super call // non-empty if !IsTopLevelCode public SymbolId MethodName { get { return _methodName; } } + // TODO: super call // non-null if !IsTopLevelCode public Parameters Parameters { get { return _parameters; } } // non-null if !IsTopLevelCode - public MSA.VariableExpression MethodOwner { - get { return _methodOwner; } + public MSA.Expression CurrentMethodVariable { + get { return _currentMethodVariable; } } public bool IsTopLevelCode { get { return _parentMethod == null; } } - public MethodScope(MSA.LambdaBuilder/*!*/ codeBlock, MSA.Expression/*!*/ selfVariable, MSA.VariableExpression/*!*/ runtimeScopeVariable, - MSA.ParameterExpression blockVariable, MSA.VariableExpression/*!*/ rfcVariable, MSA.VariableExpression methodOwner, SymbolId methodName, Parameters parameters) + public MethodScope( + MSA.LambdaBuilder/*!*/ codeBlock, + MSA.Expression/*!*/ selfVariable, + MSA.Expression/*!*/ runtimeScopeVariable, + MSA.Expression blockVariable, + MSA.Expression/*!*/ rfcVariable, + MSA.Expression currentMethodVariable, + SymbolId methodName, + Parameters parameters) : base(codeBlock, selfVariable, runtimeScopeVariable) { Assert.NotNull(rfcVariable); _blockVariable = blockVariable; _rfcVariable = rfcVariable; _methodName = methodName; _parameters = parameters; - _methodOwner = methodOwner; + _currentMethodVariable = currentMethodVariable; } } public sealed class ModuleScope : SelfScope { - private readonly MSA.VariableExpression/*!*/ _runtimeScopeVariable; + private readonly MSA.Expression/*!*/ _runtimeScopeVariable; private readonly bool _isSingleton; private ModuleScope _parentModule; @@ -247,11 +269,11 @@ get { return _isSingleton; } } - public MSA.VariableExpression/*!*/ RuntimeScopeVariable { + public MSA.Expression/*!*/ RuntimeScopeVariable { get { return _runtimeScopeVariable; } } - public ModuleScope(MSA.VariableExpression/*!*/ selfVariable, MSA.VariableExpression/*!*/ runtimeScopeVariable, bool isSingleton) + public ModuleScope(MSA.Expression/*!*/ selfVariable, MSA.Expression/*!*/ runtimeScopeVariable, bool isSingleton) : base(selfVariable) { Assert.NotNull(runtimeScopeVariable); _runtimeScopeVariable = runtimeScopeVariable; @@ -294,7 +316,7 @@ get { return _currentRescue; } } - public MSA.VariableExpression/*!*/ CurrentRfcVariable { + public MSA.Expression/*!*/ CurrentRfcVariable { get { return CurrentMethod.RfcVariable; } } @@ -302,7 +324,7 @@ get { return _currentSelfScope.SelfVariable; } } - public MSA.VariableExpression/*!*/ CurrentScopeVariable { + public MSA.Expression/*!*/ CurrentScopeVariable { get { return (CurrentModule != null) ? CurrentModule.RuntimeScopeVariable : CurrentFrame.RuntimeScopeVariable; } } @@ -322,7 +344,7 @@ #region Entering and Leaving Lexical Scopes - public void EnterLoop(MSA.VariableExpression/*!*/ redoVariable, MSA.VariableExpression/*!*/ resultVariable, MSA.LabelTarget/*!*/ label) { + public void EnterLoop(MSA.Expression/*!*/ redoVariable, MSA.Expression/*!*/ resultVariable, MSA.LabelTarget/*!*/ label) { Assert.NotNull(redoVariable, resultVariable, label); LoopScope loop = new LoopScope(redoVariable, resultVariable, label); @@ -339,7 +361,7 @@ _currentLoop = _currentLoop.ParentLoop; } - public void EnterRescueClause(MSA.VariableExpression/*!*/ retryingVariable, MSA.LabelTarget/*!*/ label) { + public void EnterRescueClause(MSA.Expression/*!*/ retryingVariable, MSA.LabelTarget/*!*/ label) { Assert.NotNull(retryingVariable, label); RescueScope body = new RescueScope(retryingVariable, label); @@ -356,8 +378,8 @@ _currentRescue = _currentRescue.ParentRescue; } - public void EnterBlockDefinition(MSA.LambdaBuilder/*!*/ codeBlock, MSA.ParameterExpression/*!*/ bfcVariable, - MSA.VariableExpression/*!*/ selfVariable, MSA.VariableExpression/*!*/ runtimeScopeVariable, MSA.LabelTarget/*!*/ redoLabel) { + public void EnterBlockDefinition(MSA.LambdaBuilder/*!*/ codeBlock, MSA.Expression/*!*/ bfcVariable, + MSA.Expression/*!*/ selfVariable, MSA.Expression/*!*/ runtimeScopeVariable, MSA.LabelTarget/*!*/ redoLabel) { Assert.NotNull(codeBlock, bfcVariable, selfVariable, redoLabel); BlockScope block = new BlockScope(codeBlock, selfVariable, runtimeScopeVariable, bfcVariable, redoLabel); @@ -388,15 +410,25 @@ public void EnterMethodDefinition( MSA.LambdaBuilder/*!*/ codeBlock, MSA.Expression/*!*/ selfParameter, - MSA.VariableExpression/*!*/ runtimeScopeVariable, - MSA.ParameterExpression blockParameter, - MSA.VariableExpression/*!*/ rfcVariable, - MSA.VariableExpression methodOwnerVariable, + MSA.Expression/*!*/ runtimeScopeVariable, + MSA.Expression blockParameter, + MSA.Expression/*!*/ rfcVariable, + MSA.Expression currentMethodVariable, SymbolId methodName, Parameters parameters) { - Assert.NotNull(codeBlock, selfParameter, rfcVariable); + Assert.NotNull(codeBlock, selfParameter, runtimeScopeVariable, rfcVariable); - MethodScope method = new MethodScope(codeBlock, selfParameter, runtimeScopeVariable, blockParameter, rfcVariable, methodOwnerVariable, methodName, parameters); + MethodScope method = new MethodScope( + codeBlock, + selfParameter, + runtimeScopeVariable, + blockParameter, + rfcVariable, + currentMethodVariable, + methodName, + parameters + ); + method.Parent = _currentElement; method.ParentRescue = _currentRescue; method.ParentLoop = _currentLoop; @@ -424,7 +456,7 @@ _currentMethod = oldMethod.ParentMethod; } - public void EnterModuleDefinition(MSA.VariableExpression/*!*/ selfVariable, MSA.VariableExpression/*!*/ runtimeScopeVariable, bool isSingleton) { + public void EnterModuleDefinition(MSA.Expression/*!*/ selfVariable, MSA.Expression/*!*/ runtimeScopeVariable, bool isSingleton) { Assert.NotNull(selfVariable); ModuleScope module = new ModuleScope(selfVariable, runtimeScopeVariable, isSingleton); @@ -446,14 +478,29 @@ _currentModule = oldModule.ParentModule; } - public void EnterSourceUnit(MSA.LambdaBuilder/*!*/ codeBlock, MSA.VariableExpression/*!*/ rfcVariable, MSA.VariableExpression/*!*/ selfVariable, - MSA.VariableExpression/*!*/ runtimeScopeVariable) { - Assert.NotNull(codeBlock, rfcVariable, selfVariable, runtimeScopeVariable); + public void EnterSourceUnit( + MSA.LambdaBuilder/*!*/ codeBlock, + MSA.Expression/*!*/ selfParameter, + MSA.Expression/*!*/ runtimeScopeVariable, + MSA.Expression blockParameter, + MSA.Expression/*!*/ rfcVariable, + MSA.Expression currentMethodVariable, + SymbolId methodName, + Parameters parameters) { + Assert.NotNull(codeBlock, selfParameter, runtimeScopeVariable, rfcVariable); Debug.Assert(_currentElement == null && _currentLoop == null && _currentRescue == null && _currentSelfScope == null && _currentModule == null && _currentBlock == null && _currentMethod == null); - EnterMethodDefinition(codeBlock, selfVariable, runtimeScopeVariable, null, rfcVariable, null, SymbolId.Empty, null); + EnterMethodDefinition( + codeBlock, + selfParameter, + runtimeScopeVariable, + blockParameter, + rfcVariable, + currentMethodVariable, + methodName, + parameters); } public void LeaveSourceUnit() { @@ -491,7 +538,7 @@ return Ast.SimpleCallHelper(CurrentRfcVariable, RuntimeFlowControl.GetMethod(methodName), args); } - internal MSA.MethodCallExpression/*!*/ RfcCall(string/*!*/ methodName, MSA.VariableExpression/*!*/ arg) { + internal MSA.MethodCallExpression/*!*/ RfcCall(string/*!*/ methodName, MSA.Expression/*!*/ arg) { Assert.NotNull(methodName, arg); Debug.Assert(_currentMethod != null); @@ -542,93 +589,53 @@ return result; } - internal MSA.Block/*!*/ TransformStatements(List/*!*/ statements, ResultOperation resultOperation) { + internal MSA.Expression/*!*/ TransformStatements(List/*!*/ statements, ResultOperation resultOperation) { Assert.NotNullItems(statements); - if (resultOperation.IsIgnore) { - return TransformStatements(statements); - } - - ExpressionStatement exprStmt; - - // if the last statement is an expression-statement, the result is , otherwise it's Null: if (statements.Count > 0) { - exprStmt = statements[statements.Count - 1] as ExpressionStatement; - } else { - exprStmt = null; - } + MSA.Expression[] result = new MSA.Expression[statements.Count]; - MSA.Expression[] result = new MSA.Expression[statements.Count + (exprStmt == null ? 1 : 0)]; + // transform all but the last statement if it is an expression stmt: + for (int i = 0; i < statements.Count - 1; i++) { + result[i] = statements[i].Transform(this); + } - // transform all but the last statement if it is an expression stmt: - for (int i = 0; i < statements.Count - (exprStmt != null ? 1 : 0); i++) { - result[i] = statements[i].Transform(this); - } + if (resultOperation.IsIgnore) { + result[result.Length - 1] = statements[statements.Count - 1].Transform(this); + } else { + result[result.Length - 1] = statements[statements.Count - 1].TransformResult(this, resultOperation); + } - MSA.Expression resultExpr; - SourceSpan location; - - if (exprStmt != null) { - resultExpr = exprStmt.Expression.TransformRead(this); - location = exprStmt.Location; + return Ast.Block(result); } else { - resultExpr = Ast.Null(); - location = SourceSpan.None; + if (resultOperation.IsIgnore) { + return Ast.Empty(); + } else if (resultOperation.Variable != null) { + return Ast.Assign(resultOperation.Variable, Ast.Null(resultOperation.Variable.Type)); + } else { + return AstUtils.Return(Ast.Null(), SourceSpan.None); + } } + } - if (resultOperation.Variable != null) { - result[result.Length - 1] = Ast.Assign(resultOperation.Variable, Ast.Convert(resultExpr, resultOperation.Variable.Type)); - } else { - result[result.Length - 1] = AstUtils.Return(resultExpr, location); + internal MSA.Expression/*!*/ TransformStatementsToExpression(List statements) { + if (statements == null || statements.Count == 0) { + return Ast.Null(); } - return Ast.Block(result); - } + if (statements.Count == 1) { + return statements[0].TransformRead(this); + } - internal MSA.Block/*!*/ TransformStatements(List/*!*/ statements) { - Assert.NotNull(statements); - MSA.Expression[] result = new MSA.Expression[statements.Count]; - for (int i = 0; i < result.Length; i++) { + for (int i = 0; i < result.Length - 1; i++) { result[i] = statements[i].Transform(this); } + result[result.Length - 1] = statements[statements.Count - 1].TransformRead(this); - return Ast.Block(result); + return Ast.Comma(result); } - internal MSA.Expression/*!*/ TransformStatementsToExpression(List statements) { - if (statements != null && statements.Count > 0) { - MSA.Expression[] result; - - ExpressionStatement lastExprStmt = statements[statements.Count - 1] as ExpressionStatement; - if (lastExprStmt != null) { - - if (statements.Count == 1) { - return lastExprStmt.Expression.TransformRead(this); - } - - result = new MSA.Expression[statements.Count]; - - for (int i = 0; i < result.Length - 1; i++) { - result[i] = statements[i].Transform(this); - } - result[result.Length - 1] = lastExprStmt.Expression.TransformRead(this); - - } else { - result = new MSA.Expression[statements.Count + 1]; - - for (int i = 0; i < result.Length - 1; i++) { - result[i] = statements[i].Transform(this); - } - result[result.Length - 1] = Ast.Null(); - } - return Ast.Comma(result); - - } else { - return Ast.Null(); - } - } - internal List/*!*/ TransformMapletsToExpressions(IList/*!*/ maplets) { Assert.NotNullItems(maplets); return TransformMapletsToExpressions(maplets, new List(maplets.Count * 2)); @@ -659,26 +666,12 @@ ); } + internal MSA.Expression/*!*/ DebugMarker(string/*!*/ marker) { + return _debugCompiler ? AstFactory.OpCall("X", Ast.Constant(marker)) : (MSA.Expression)Ast.Empty(); + } - public MSA.Expression Condition(MSA.Expression test, MSA.Expression ifTrue, MSA.Expression ifFalse) { - Debug.Assert(test != null); - - if (test.Type != typeof(bool)) { - test = Ast.Action.ConvertTo(_binder, typeof(bool), Ast.CodeContext(), test); - } - - if (ifTrue.Type != ifFalse.Type) { - if (ifTrue.Type.IsAssignableFrom(ifFalse.Type)) { - ifFalse = Ast.Convert(ifFalse, ifTrue.Type); - } else if (ifFalse.Type.IsAssignableFrom(ifTrue.Type)) { - ifTrue = Ast.Convert(ifTrue, ifFalse.Type); - } else { - ifTrue = Ast.Convert(ifTrue, typeof(object)); - ifFalse = Ast.Convert(ifFalse, typeof(object)); - } - } - - return Ast.Condition(test, ifTrue, ifFalse); + internal MSA.Expression/*!*/ DebugMark(MSA.Expression/*!*/ expression, string/*!*/ marker) { + return _debugCompiler ? Ast.Comma(AstFactory.OpCall("X", Ast.Constant(marker)), expression) : expression; } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ResultOperation.cs;C402444 File: ResultOperation.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ResultOperation.cs;C402444 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/ResultOperation.cs;Super17 @@ -27,19 +27,19 @@ public static readonly ResultOperation Return = new ResultOperation(null, true); public static readonly ResultOperation Ignore = new ResultOperation(null, false); - private MSA.VariableExpression _variable; + private MSA.Expression _variable; private bool _doReturn; - public MSA.VariableExpression Variable { get { return _variable; } } + public MSA.Expression Variable { get { return _variable; } } public bool DoReturn { get { return _doReturn; } } public bool IsIgnore { get { return _variable == null && !_doReturn; } } - public ResultOperation(MSA.VariableExpression variable, bool doReturn) { + public ResultOperation(MSA.Expression variable, bool doReturn) { _variable = variable; _doReturn = doReturn; } - public static ResultOperation Store(MSA.VariableExpression/*!*/ variable) { + public static ResultOperation Store(MSA.Expression/*!*/ variable) { Assert.NotNull(variable); return new ResultOperation(variable, false); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/RubyCompilerOptions.cs;C420856 File: RubyCompilerOptions.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/RubyCompilerOptions.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/RubyCompilerOptions.cs;Super17 @@ -24,24 +24,33 @@ private bool _isEval; private bool _isIncluded; private bool _isWrapped; + private SymbolId _topLevelMethodName; private List _localNames; - public bool IsEval { + internal bool IsEval { get { return _isEval; } set { _isEval = value; } } - public bool IsIncluded { + internal bool IsIncluded { get { return _isIncluded; } set { _isIncluded = value; } } - public bool IsWrapped { + internal bool IsWrapped { get { return _isWrapped; } set { _isWrapped = value; } } - public List LocalNames { + /// + /// Method name used by super in eval. + /// + internal SymbolId TopLevelMethodName { + get { return _topLevelMethodName; } + set { _topLevelMethodName = value; } + } + + internal List LocalNames { get { return _localNames; } set { _localNames = value; } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/AstFactory.cs;C428685 File: AstFactory.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/AstFactory.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/AstFactory.cs;Super17 @@ -28,6 +28,7 @@ namespace Ruby.Compiler.Ast { using Ast = Microsoft.Scripting.Ast.Expression; + using AstUtils = Microsoft.Scripting.Ast.Utils; using MSA = Microsoft.Scripting.Ast; internal static class AstFactory { @@ -37,7 +38,7 @@ #region Assignments - public static MSA.Expression/*!*/ AssignValueWithCast(MSA.VariableExpression/*!*/ variable, Type/*!*/ variableType, FieldInfo/*!*/ field, object value) { + public static MSA.Expression/*!*/ AssignValueWithCast(MSA.Expression/*!*/ variable, Type/*!*/ variableType, FieldInfo/*!*/ field, object value) { Assert.NotNull(variable, variableType, field); return Ast.AssignField( Ast.Convert(variable, variableType), field, Ast.Constant(value) @@ -48,30 +49,31 @@ #region Control Flow - public static MSA.Expression/*!*/ MakeUserMethodBody(MSA.Expression/*!*/ blockParameter, MSA.VariableExpression/*!*/ rfcVariable, - MSA.VariableExpression parentScopeVariable, - MSA.VariableExpression scopeVariable, + public static MSA.Expression/*!*/ MakeUserMethodBody(MSA.Expression/*!*/ blockParameter, MSA.Expression/*!*/ rfcVariable, + MSA.Expression parentScopeVariable, + MSA.Expression scopeVariable, MSA.Expression selfVariable, MSA.VariableExpression/*!*/ methodUnwinder, - SymbolId name, + MSA.Expression methodDefinition, MSA.Expression/*!*/ bodyStatement) { Assert.NotNull(blockParameter, rfcVariable, bodyStatement, methodUnwinder); - Debug.Assert(((parentScopeVariable == null) == (scopeVariable == null))); - Debug.Assert(((parentScopeVariable == null) == (selfVariable == null))); + bool isGenerated = parentScopeVariable == null; + + Debug.Assert(isGenerated == (scopeVariable == null)); + Debug.Assert(isGenerated == (selfVariable == null)); + Debug.Assert(isGenerated == (methodDefinition == null)); + return Ast.Try( // initialize frame (RFC): Ast.Assign(rfcVariable, Ast.Call(RuntimeFlowControl.GetMethod("CreateForMethod"), blockParameter)), + + (isGenerated) ? Ast.Empty() : + (MSA.Expression)Ast.Assign(scopeVariable, + AstFactory.OpCall("InitializeMethodScope", methodDefinition, Ast.CodeContext(), rfcVariable, selfVariable, blockParameter) + ), - (scopeVariable == null) ? Ast.Empty() : - (MSA.Expression)Ast.Assign(scopeVariable, AstFactory.OpCall("InitializeMethodScope", -#if DEBUG - Ast.Constant(name), -#endif - Ast.CodeContext(), rfcVariable, selfVariable - )), - bodyStatement ).Filter(typeof(MethodUnwinder), methodUnwinder, AstFactory.Equal(methodUnwinder, MethodUnwinder.TargetFrameField, rfcVariable, null), @@ -85,13 +87,17 @@ #endregion - public static MSA.Expression/*!*/ Result(MSA.VariableExpression/*!*/ resultVariable, MSA.Expression/*!*/ statement) { + public static MSA.Expression/*!*/ Result(MSA.Expression/*!*/ resultVariable, MSA.Expression/*!*/ statement) { return Ast.Comma( statement, resultVariable ); } + public static MSA.Expression/*!*/ Infinite(MSA.LabelTarget/*!*/ label, params MSA.Expression[]/*!*/ body) { + return AstUtils.Infinite(Ast.Block(body), label); + } + public static MSA.MethodCallExpression/*!*/ OptimizedOpCall(string/*!*/ methodName, params MSA.Expression[]/*!*/ args) { Assert.NotNull(methodName, args); @@ -112,13 +118,31 @@ return Ast.SimpleCallHelper(typeof(RubyOps).GetMethod(methodName, BindingFlags.Public | BindingFlags.Static), args); } + public static MSA.Expression/*!*/ Condition(MSA.Expression/*!*/ test, MSA.Expression/*!*/ ifTrue, MSA.Expression/*!*/ ifFalse) { + Assert.NotNull(test, ifTrue, ifFalse); + Debug.Assert(test.Type == typeof(bool)); + + if (ifTrue.Type != ifFalse.Type) { + if (ifTrue.Type.IsAssignableFrom(ifFalse.Type)) { + ifFalse = Ast.Convert(ifFalse, ifTrue.Type); + } else if (ifFalse.Type.IsAssignableFrom(ifTrue.Type)) { + ifTrue = Ast.Convert(ifTrue, ifFalse.Type); + } else { + ifTrue = Ast.Convert(ifTrue, typeof(object)); + ifFalse = Ast.Convert(ifFalse, typeof(object)); + } + } + + return Ast.Condition(test, ifTrue, ifFalse); + } + #region Equal - public static MSA.Expression/*!*/ Equal(MSA.VariableExpression leftVariable, FieldInfo leftField, object value) { + public static MSA.Expression/*!*/ Equal(MSA.Expression leftVariable, FieldInfo leftField, object value) { return Equal(leftVariable, leftField, Ast.Constant(value)); } - public static MSA.Expression/*!*/ Equal(MSA.VariableExpression leftVariable, FieldInfo leftField, MSA.Expression/*!*/ expression) { + public static MSA.Expression/*!*/ Equal(MSA.Expression leftVariable, FieldInfo leftField, MSA.Expression/*!*/ expression) { Debug.Assert(expression != null); Debug.Assert(leftVariable != null || leftField != null); @@ -127,7 +151,7 @@ return Ast.Equal(lhs, expression); } - public static MSA.Expression/*!*/ Equal(MSA.VariableExpression leftVariable, FieldInfo leftField, MSA.VariableExpression rightVariable, FieldInfo rightField) { + public static MSA.Expression/*!*/ Equal(MSA.Expression leftVariable, FieldInfo leftField, MSA.Expression rightVariable, FieldInfo rightField) { Debug.Assert(rightVariable != null || rightField != null); MSA.Expression rhs = (rightField == null) ? rightVariable : =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockDefinition.cs;C428685 File: BlockDefinition.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockDefinition.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockDefinition.cs;Super17 @@ -60,8 +60,8 @@ } private MSA.ParameterExpression[]/*!*/ DefineParameters(MSA.LambdaBuilder/*!*/ block, - out MSA.ParameterExpression/*!*/ selfVariable, - out MSA.ParameterExpression/*!*/ blockParamVariable) { + out MSA.Expression/*!*/ selfVariable, + out MSA.Expression/*!*/ blockParamVariable) { MSA.ParameterExpression[] parameters = new MSA.ParameterExpression[ HiddenParameterCount + @@ -72,12 +72,13 @@ // hidden parameters: // #proc must be the first one - it is used as instance target for method invocation: blockParamVariable = parameters[0] = Ast.Parameter(typeof(BlockParam), "#proc"); - selfVariable = parameters[1] = Ast.Parameter(typeof(object), "#self-param"); // TODO + selfVariable = parameters[1] = Ast.Parameter(typeof(object), "#self"); for (int i = HiddenParameterCount; i < parameters.Length; i++) { parameters[i] = Ast.Parameter(typeof(object), "#" + (i - HiddenParameterCount)); } + block.Parameters.AddRange(parameters); return parameters; } @@ -92,18 +93,16 @@ string id = System.Threading.Interlocked.Increment(ref _id).ToString(); // define hidden parameters and RHS-placeholders (#1..#n will be used as RHS of a parallel assignment): - MSA.ParameterExpression blockParamVariable, selfParameter; - // TODO: remove - MSA.VariableExpression selfVariable = codeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#self-temp"), typeof(object)); - MSA.ParameterExpression[] parameters = DefineParameters(codeBlock, out selfParameter, out blockParamVariable); - // TODO: - MSA.VariableExpression scopeVariable = gen.CurrentScopeVariable; //codeBlock.CreateLocalVariable(SymbolTable.StringToId("#scope" + id), typeof(RubyScope)); + MSA.Expression blockParameter, selfParameter; + MSA.Expression[] parameters = DefineParameters(codeBlock, out selfParameter, out blockParameter); + + MSA.Expression scopeVariable = codeBlock.CreateLocalVariable(SymbolTable.StringToId("#scope" + id), typeof(RubyScope)); MSA.LabelTarget loopLabel = Ast.Label(); gen.EnterBlockDefinition( codeBlock, - blockParamVariable, - selfVariable, + blockParameter, + selfParameter, scopeVariable, loopLabel ); @@ -113,15 +112,13 @@ } MSA.Expression paramInit = Ast.Block(MakeParametersInitialization(gen, parameters)); - MSA.VariableExpression blockUnwinder = codeBlock.CreateLocalVariable(SymbolTable.StringToId("#unwinder"), typeof(BlockUnwinder)); + MSA.Expression blockUnwinder = codeBlock.CreateLocalVariable(SymbolTable.StringToId("#unwinder"), typeof(BlockUnwinder)); codeBlock.Body = Ast.Block( - // TODO: remove: - Ast.Assign(selfVariable, selfParameter), - + Ast.Assign(scopeVariable, AstFactory.OpCall("InitializeBlockScope", Ast.CodeContext(), blockParameter, selfParameter)), paramInit, - AstUtils.Infinite( + AstFactory.Infinite(loopLabel, Ast.Try( gen.TransformStatements(_body, ResultOperation.Return) ).Catch(typeof(BlockUnwinder), blockUnwinder, @@ -130,8 +127,7 @@ // next: Ast.Return(Ast.ReadField(blockUnwinder, BlockUnwinder.ReturnValueField)) - ), - loopLabel + ) ) ); @@ -148,7 +144,7 @@ }); } - private List/*!*/ MakeParametersInitialization(AstGenerator/*!*/ gen, MSA.ParameterExpression[]/*!*/ parameters) { + private List/*!*/ MakeParametersInitialization(AstGenerator/*!*/ gen, MSA.Expression[]/*!*/ parameters) { Assert.NotNull(gen); Assert.NotNullItems(parameters); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockReference.cs;C402444 File: BlockReference.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockReference.cs;C402444 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/BlockReference.cs;Super17 @@ -16,10 +16,13 @@ using Microsoft.Scripting; using Microsoft.Scripting.Utils; +using Ruby.Runtime.Calls; +using Ruby.Builtins; + namespace Ruby.Compiler.Ast { using MSA = Microsoft.Scripting.Ast; using Ast = Microsoft.Scripting.Ast.Expression; - + public partial class BlockReference : Block { private readonly Expression/*!*/ _expression; @@ -38,8 +41,12 @@ internal override MSA.Expression/*!*/ Transform(AstGenerator/*!*/ gen) { Assert.NotNull(gen); - return _expression.TransformRead(gen); + return Ast.Action.ActionExpression( + Annotations.Empty, + ConvertToProcAction.Instance, + new MSA.Expression[] { Ast.CodeContext(), _expression.TransformRead(gen) }, + typeof(Proc) + ); } - } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Body.cs;C428685 File: Body.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Body.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Body.cs;Super17 @@ -69,7 +69,7 @@ Assert.NotNull(gen); if (HasExceptionHandling) { - MSA.VariableExpression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#block-result"), typeof(object)); + MSA.Expression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#block-result"), typeof(object)); return Ast.Comma( TransformExceptionHandling(gen, ResultOperation.Store(resultVariable)), @@ -94,12 +94,12 @@ private MSA.Expression/*!*/ TransformExceptionHandling(AstGenerator/*!*/ gen, ResultOperation resultOperation) { Assert.NotNull(gen); - MSA.VariableExpression/*!*/ exceptionThrownVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#exception-thrown"), typeof(bool)); + MSA.Expression/*!*/ exceptionThrownVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#exception-thrown"), typeof(bool)); MSA.VariableExpression/*!*/ exceptionVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#exception"), typeof(Exception)); - MSA.VariableExpression/*!*/ exceptionRethrowVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#exception-rethrow"), typeof(bool)); - MSA.VariableExpression/*!*/ retryingVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#retrying"), typeof(bool)); + MSA.Expression/*!*/ exceptionRethrowVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#exception-rethrow"), typeof(bool)); + MSA.Expression/*!*/ retryingVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#retrying"), typeof(bool)); MSA.VariableExpression/*!*/ evalUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(EvalUnwinder)); - MSA.VariableExpression/*!*/ oldExceptionVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#old-exception"), typeof(Exception)); + MSA.Expression/*!*/ oldExceptionVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#old-exception"), typeof(Exception)); MSA.Expression/*!*/ transformedBody; MSA.Expression/*!*/ transformedEnsure; @@ -187,7 +187,7 @@ )); } - MSA.Expression result = AstUtils.Infinite(Ast.Block( + MSA.Expression result = AstFactory.Infinite(label, Ast.Assign(exceptionThrownVariable, Ast.False()), Ast.Assign(exceptionRethrowVariable, Ast.False()), Ast.Assign(retryingVariable, Ast.False()), @@ -224,9 +224,9 @@ transformedEnsure )) ), - // break + Ast.Break(label) - ), label); + ); return result; } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/CallBuilder.cs;C427097 File: CallBuilder.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/CallBuilder.cs;C427097 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/CallBuilder.cs;Super17 @@ -20,6 +20,10 @@ namespace Ruby.Compiler.Ast { using MSA = Microsoft.Scripting.Ast; using Ast = Microsoft.Scripting.Ast.Expression; + using Ruby.Runtime.Calls; + using Microsoft.Scripting.Ast; + using Microsoft.Scripting.Utils; + using System; /// /// Simple helper for building up method invoke/call actions @@ -53,13 +57,17 @@ _args.Insert(index, new KeyValuePair(expression, kind)); } - public MSA.Expression/*!*/ MakeInvokeAction(SymbolId name, bool hasExplicitTarget) { - InvokeMemberActionFlags flags = InvokeMemberActionFlags.ReturnNonCallable; - if (hasExplicitTarget) flags |= InvokeMemberActionFlags.IsCallWithThis; + public MSA.Expression/*!*/ MakeInvokeAction(SymbolId name) { + return Ast.Action.InvokeMember(_gen.Binder, name, typeof(object), new CallSignature(ArgumentKinds), GetExpressions()); + } - return Ast.Action.InvokeMember( - _gen.Binder, - name, typeof(object), flags, new CallSignature(ArgumentKinds), GetExpressions()); + public MSA.Expression/*!*/ MakeSuperCallAction(int lexicalScopeId) { + return Ast.Action.ActionExpression( + Annotations.Empty, + SuperCallAction.Make(_gen.Binder, new CallSignature(ArgumentKinds), lexicalScopeId), + GetExpressions(), + typeof(object) + ); } public MSA.Expression/*!*/ MakeCallAction() { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Parameters.cs;C428685 File: Parameters.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Parameters.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Parameters.cs;Super17 @@ -74,7 +74,7 @@ if (_optional == null) return Ast.Empty(); - MSA.VariableExpression singleton = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#default"), typeof(object)); + MSA.Expression singleton = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#default"), typeof(object)); MSA.Expression result = Ast.Empty(); for (int i = 0; i < _optional.Count; i++) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/SourceUnitTree.cs;C428685 File: SourceUnitTree.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/SourceUnitTree.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/SourceUnitTree.cs;Super17 @@ -17,17 +17,18 @@ using System.Text; using System.Diagnostics; using Microsoft.Scripting; +using Microsoft.Scripting.Utils; +using Microsoft.Scripting.Actions; + using Ruby.Runtime; -using Microsoft.Scripting.Utils; +using Ruby.Builtins; +using Ruby.Runtime.Calls; namespace Ruby.Compiler.Ast { - using MSA = Microsoft.Scripting.Ast; using Ast = Microsoft.Scripting.Ast.Expression; using AstUtils = Microsoft.Scripting.Ast.Utils; - using Microsoft.Scripting.Hosting; - using Microsoft.Scripting.Actions; - using Ruby.Builtins; - + using MSA = Microsoft.Scripting.Ast; + public partial class SourceUnitTree : Node { private readonly LexicalScope/*!*/ _definedScope; @@ -57,52 +58,65 @@ MSA.LambdaBuilder method = AstUtils.Lambda(typeof(object), "main", Location); method.Dictionary = true; - MSA.VariableExpression rfcVariable, selfVariable, runtimeScopeVariable, resultVariable; - MSA.Expression scopeInit, print; + MSA.Expression rfcVariable, selfVariable, runtimeScopeVariable; + MSA.Expression blockParameter = null, currentMethodVariable = null; + List body = new List(); rfcVariable = method.CreateLocalVariable(SymbolTable.StringToId("#rfc"), typeof(RuntimeFlowControl)); selfVariable = method.CreateLocalVariable(SymbolTable.StringToId("#self"), typeof(object)); runtimeScopeVariable = method.CreateLocalVariable(SymbolTable.StringToId("#scope"), typeof(RubyScope)); - gen.EnterSourceUnit(method, rfcVariable, selfVariable, runtimeScopeVariable); - if (gen.CompilerOptions.IsEval) { method.ScopeFactory = typeof(RubyOps).GetMethod("CreateEvalScope"); - scopeInit = Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeEvalScope", Ast.CodeContext())); + body.Add(Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeEvalScope", Ast.CodeContext()))); + + blockParameter = method.CreateLocalVariable(SymbolTable.StringToId("#block"), typeof(Proc)); + currentMethodVariable = method.CreateLocalVariable(SymbolTable.StringToId("#method"), typeof(RubyMethodInfo)); + body.Add(Ast.Assign(blockParameter, AstFactory.OpCall("GetCurrentMethodBlockParameter", runtimeScopeVariable))); + body.Add(Ast.Assign(currentMethodVariable, AstFactory.OpCall("GetCurrentMethodDefinition", runtimeScopeVariable))); + } else if (!gen.CompilerOptions.IsIncluded) { method.ScopeFactory = typeof(RubyOps).GetMethod("CreateMainTopLevelScope"); - scopeInit = Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeTopLevelScope", Ast.CodeContext())); + body.Add(Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeTopLevelScope", Ast.CodeContext()))); } else if (gen.CompilerOptions.IsWrapped) { method.ScopeFactory = typeof(RubyOps).GetMethod("CreateTopLevelScope"); - scopeInit = Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeWrappedTopLevelScope", Ast.CodeContext())); + body.Add(Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeWrappedTopLevelScope", Ast.CodeContext()))); } else { method.ScopeFactory = typeof(RubyOps).GetMethod("CreateTopLevelScope"); - scopeInit = Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeTopLevelScope", Ast.CodeContext())); + body.Add(Ast.Assign(runtimeScopeVariable, AstFactory.OpCall("InitializeTopLevelScope", Ast.CodeContext()))); } - if (kind == SourceCodeKind.InteractiveCode) { - resultVariable = method.CreateTemporaryVariable(SymbolTable.StringToId("#result"), typeof(object)); - print = AstFactory.OpCall("PrintInteractiveResult", runtimeScopeVariable, - Ast.Action.InvokeMember(RubySites.InstanceCallAction("inspect"), typeof(object), Ast.CodeContext(), resultVariable) - ); - } else { - resultVariable = null; - print = Ast.Empty(); - } + body.Add(Ast.Assign(rfcVariable, AstFactory.OpCall("GetRfc", runtimeScopeVariable))); + body.Add(Ast.Assign(selfVariable, AstFactory.OpCall("GetSelf", runtimeScopeVariable))); + + gen.EnterSourceUnit( + method, + selfVariable, + runtimeScopeVariable, + blockParameter, + rfcVariable, + currentMethodVariable, + gen.CompilerOptions.TopLevelMethodName, // method name + null // parameters + ); _definedScope.TransformLocals(method, gen); - method.Body = Ast.Block( - scopeInit, - Ast.Assign(rfcVariable, AstFactory.OpCall("GetRfc", runtimeScopeVariable)), - Ast.Assign(selfVariable, AstFactory.OpCall("GetSelf", runtimeScopeVariable)), + if (kind == SourceCodeKind.InteractiveCode) { + MSA.Expression resultVariable = method.CreateTemporaryVariable(SymbolTable.StringToId("#result"), typeof(object)); + + body.Add(gen.TransformStatements(_statements, ResultOperation.Store(resultVariable))); - gen.TransformStatements(_statements, (kind != SourceCodeKind.InteractiveCode) ? - ResultOperation.Return : ResultOperation.Store(resultVariable)), + body.Add(AstFactory.OpCall("PrintInteractiveResult", runtimeScopeVariable, + Ast.Action.InvokeMember(RubySites.InstanceCallAction("inspect"), typeof(object), Ast.CodeContext(), resultVariable) + )); - print - ); + } else { + body.Add(gen.TransformStatements(_statements, ResultOperation.Return)); + } + method.Body = Ast.Block(body); + gen.LeaveSourceUnit(); return method.MakeLambda(); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Clauses/RescueClause.cs;C428685 File: RescueClause.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Clauses/RescueClause.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Clauses/RescueClause.cs;Super17 @@ -77,7 +77,7 @@ MSA.Expression[] temps = new MSA.Expression[_types.Count]; MSA.Expression[] exprs = new MSA.Expression[_types.Count + 1]; for (int i = 0; i < temps.Length; i++) { - MSA.VariableExpression tmp = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#type_" + i), typeof(object)); + MSA.Expression tmp = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#type_" + i), typeof(object)); temps[i] = tmp; exprs[i] = Ast.Assign(tmp, _types[i].TransformRead(gen)); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/MethodDeclaration.cs;C428685 File: MethodDeclaration.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/MethodDeclaration.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/MethodDeclaration.cs;Super17 @@ -14,14 +14,16 @@ * ***************************************************************************/ using Microsoft.Scripting; +using Microsoft.Scripting.Utils; + using Ruby.Builtins; using Ruby.Runtime; +using Ruby.Runtime.Calls; namespace Ruby.Compiler.Ast { using Ast = Microsoft.Scripting.Ast.Expression; using AstUtils = Microsoft.Scripting.Ast.Utils; using MSA = Microsoft.Scripting.Ast; - using Microsoft.Scripting.Utils; public partial class MethodDeclaration : DeclarationExpression { @@ -57,7 +59,7 @@ _parameters = parameters ?? Parameters.Empty; } - private MSA.ParameterExpression[]/*!*/ DefineParameters(AstGenerator/*!*/ gen, MSA.LambdaBuilder/*!*/ block) { + private MSA.Expression[]/*!*/ DefineParameters(AstGenerator/*!*/ gen, MSA.LambdaBuilder/*!*/ block) { // user defined locals/args: MSA.ParameterExpression[] parameters = DefinedScope.TransformParameters(_parameters, HiddenParameterCount); @@ -76,23 +78,21 @@ return parameters; } - internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { - MSA.VariableExpression methodOwnerVar = gen.CurrentCodeBlock.CreateLocalVariable(SymbolTable.StringToId("#method-owner"), typeof(RubyModule)); - MSA.Expression transformedTarget = (_target != null) ? _target.TransformRead(gen) : Ast.Null(); + private MSA.Expression/*!*/ TransformBody(AstGenerator/*!*/ gen, MSA.Expression/*!*/ methodDefinitionVariable) { + MSA.LambdaBuilder methodBlock = AstUtils.Lambda(typeof(object), SymbolTable.IdToString(_name), Location); - MSA.LambdaBuilder methodBlock = AstUtils.Lambda(typeof(object), SymbolTable.IdToString(_name), Location); - methodBlock.ScopeFactory = typeof(RubyOps).GetMethod("CreateMethodScope"); methodBlock.Dictionary = true; // enable closure: - MSA.VariableExpression parentScopeVariable = gen.CurrentScopeVariable; + MSA.Expression parentScopeVariable = gen.CurrentScopeVariable; - MSA.ParameterExpression[] parameters = DefineParameters(gen, methodBlock); - MSA.VariableExpression rfcVariable = methodBlock.CreateLocalVariable(SymbolTable.StringToId("#rfc"), typeof(RuntimeFlowControl)); - MSA.VariableExpression scopeVariable = methodBlock.CreateLocalVariable(SymbolTable.StringToId("#scope"), typeof(RubyScope)); - MSA.ParameterExpression selfParameter = parameters[0]; - MSA.ParameterExpression blockParameter = parameters[1]; + MSA.Expression[] parameters = DefineParameters(gen, methodBlock); + MSA.Expression currentMethodVariable = methodBlock.CreateLocalVariable(SymbolTable.StringToId("#method"), typeof(RubyMethodInfo)); + MSA.Expression rfcVariable = methodBlock.CreateLocalVariable(SymbolTable.StringToId("#rfc"), typeof(RuntimeFlowControl)); + MSA.Expression scopeVariable = methodBlock.CreateLocalVariable(SymbolTable.StringToId("#scope"), typeof(RubyScope)); + MSA.Expression selfParameter = parameters[0]; + MSA.Expression blockParameter = parameters[1]; gen.EnterMethodDefinition( methodBlock, @@ -100,7 +100,7 @@ scopeVariable, blockParameter, rfcVariable, - methodOwnerVar, + currentMethodVariable, _name, _parameters ); @@ -110,14 +110,15 @@ MSA.VariableExpression unwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(MethodUnwinder)); methodBlock.Body = AstFactory.MakeUserMethodBody( - blockParameter, - rfcVariable, - parentScopeVariable, - scopeVariable, + blockParameter, + rfcVariable, + parentScopeVariable, + scopeVariable, selfParameter, unwinder, - _name, + methodDefinitionVariable, Ast.Block( + Ast.Assign(currentMethodVariable, methodDefinitionVariable), _parameters.TransformOptionalsInitialization(gen), Body.TransformToStatement(gen, ResultOperation.Return) ) @@ -125,24 +126,28 @@ gen.LeaveMethodDefinition(); + return AstFactory.LambdaExpression(methodBlock); + } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { + MSA.Expression methodDefinitionVariable = gen.CurrentCodeBlock.CreateLocalVariable( + SymbolTable.StringToId("#method_" + SymbolTable.IdToString(_name)), typeof(RubyMethodInfo) + ); + return Ast.Comma( - Ast.Assign( - methodOwnerVar, - Ast.Call(RubyOps.GetMethod("GetMethodOwner"), + Ast.Assign(methodDefinitionVariable, + AstFactory.OpCall("DefineMethod", + (_target != null) ? _target.TransformRead(gen) : gen.CurrentSelfVariable, // target Ast.CodeContext(), - transformedTarget, - Ast.Constant(_target != null) + Ast.Constant(_target != null), // isSingleton? + Ast.Constant(_name), + TransformBody(gen, methodDefinitionVariable), + Ast.Constant(_parameters.MandatoryCount), + Ast.Constant(_parameters.OptionalCount), + Ast.Constant(_parameters.Array != null) // hasParamsArray ) ), - AstFactory.OpCall("DefineMethod", - Ast.CodeContext(), - methodOwnerVar, - Ast.Constant(_name), - AstFactory.LambdaExpression(methodBlock), - Ast.Constant(_parameters.MandatoryCount), - Ast.Constant(_parameters.OptionalCount), - Ast.Constant(_parameters.Array != null) - ) + Ast.Null() ); } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/ModuleDeclaration.cs;C428685 File: ModuleDeclaration.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/ModuleDeclaration.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Declarations/ModuleDeclaration.cs;Super17 @@ -78,14 +78,14 @@ // definition needs to take place outside the defined lexical scope: MSA.Expression definition = MakeDefinitionExpression(gen); - MSA.VariableExpression rfcVariable = gen.CurrentRfcVariable; + MSA.Expression rfcVariable = gen.CurrentRfcVariable; // TODO: do we need this? string id = Interlocked.Increment(ref _ModuleId).ToString(); - MSA.VariableExpression selfVariable = gen.CurrentCodeBlock.CreateLocalVariable(SymbolTable.StringToId("#module" + id), typeof(RubyModule)); - MSA.VariableExpression scopeVariable = gen.CurrentCodeBlock.CreateLocalVariable(SymbolTable.StringToId("#scope" + id), typeof(RubyScope)); - MSA.VariableExpression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#result" + id), typeof(object)); + MSA.Expression selfVariable = gen.CurrentCodeBlock.CreateLocalVariable(SymbolTable.StringToId("#module" + id), typeof(RubyModule)); + MSA.Expression scopeVariable = gen.CurrentCodeBlock.CreateLocalVariable(SymbolTable.StringToId("#scope" + id), typeof(RubyScope)); + MSA.Expression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#result" + id), typeof(object)); gen.EnterModuleDefinition(selfVariable, scopeVariable, IsSingletonDeclaration); // locals defined within the module def: @@ -96,7 +96,7 @@ // // end MSA.Expression result = Ast.Comma( - Ast.DebugMarker(debugString), + gen.DebugMarker(debugString), Ast.Assign(selfVariable, definition), Ast.Scope( Ast.Block( @@ -104,8 +104,8 @@ Ast.Assign(resultVariable, Body.TransformToExpression(gen)) ), typeof(RubyOps).GetMethod("CreateModuleScope", BindingFlags.Public | BindingFlags.Static) - ), - Ast.DebugMarker("END OF " + debugString), + ), + gen.DebugMarker("END OF " + debugString), resultVariable ); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/CaseExpression.cs;C428685 File: CaseExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/CaseExpression.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/CaseExpression.cs;Super17 @@ -77,11 +77,10 @@ // generates into: // RubyOps.IsTrue() if the case has no value, otherise: // RubyOps.IsTrue(InvokeMember("===", , )) - private static MSA.Expression/*!*/ MakeTest(AstGenerator/*!*/ gen, MSA.Expression/*!*/ expr, MSA.VariableExpression/*!*/ value) { + private static MSA.Expression/*!*/ MakeTest(AstGenerator/*!*/ gen, MSA.Expression/*!*/ expr, MSA.Expression/*!*/ value) { if (value != null) { // InvokeMember("===", , ) expr = Ast.Action.InvokeMember(gen.Binder, Symbols.StrictEqual, typeof(object), - InvokeMemberActionFlags.IsCallWithThis | InvokeMemberActionFlags.ReturnNonCallable, new CallSignature(MSA.ArgumentKind.Instance, MSA.ArgumentKind.Simple), Ast.CodeContext(), expr, @@ -102,9 +101,9 @@ // break; // } // } - private static MSA.Expression/*!*/ MakeArrayTest(AstGenerator/*!*/ gen, MSA.Expression/*!*/ array, MSA.VariableExpression value) { - MSA.VariableExpression enumVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#case-enumerator"), typeof(IEnumerator)); - MSA.VariableExpression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#case-compare-result"), typeof(bool)); + private static MSA.Expression/*!*/ MakeArrayTest(AstGenerator/*!*/ gen, MSA.Expression/*!*/ array, MSA.Expression value) { + MSA.Expression enumVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#case-enumerator"), typeof(IEnumerator)); + MSA.Expression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#case-compare-result"), typeof(bool)); MSA.LabelTarget label = Ast.Label(); return AstFactory.Result(resultVariable, @@ -114,7 +113,7 @@ typeof(IEnumerable).GetMethod("GetEnumerator"))), Ast.Assign(resultVariable, Ast.False()), AstUtils.While( - Ast.Call(enumVariable, typeof(IEnumerator).GetMethod("MoveNext")), + Ast.Call(enumVariable, typeof(IEnumerator).GetMethod("MoveNext")), Ast.If( MakeTest(gen, Ast.ReadProperty(enumVariable, typeof(IEnumerator).GetProperty("Current")), value), Ast.Block( @@ -132,7 +131,7 @@ // when , ... [*] // generates: // () || () || ... [ || () ] - internal static MSA.Expression/*!*/ TransformWhenCondition(AstGenerator/*!*/ gen, Arguments/*!*/ args, MSA.VariableExpression value) { + internal static MSA.Expression/*!*/ TransformWhenCondition(AstGenerator/*!*/ gen, Arguments/*!*/ args, MSA.Expression value) { MSA.Expression result; if (args.Array != null) { result = MakeArrayTest(gen, args.Array.TransformRead(gen), value); @@ -162,7 +161,7 @@ result = Ast.Null(); } - MSA.VariableExpression value; + MSA.Expression value; if (_value != null) { value = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#case-compare-value"), typeof(object)); } else { @@ -171,7 +170,7 @@ for (int i = _whenClauses.Count - 1; i >= 0; i-- ) { // emit: else (if (condition) body else result) - result = gen.Condition( + result = AstFactory.Condition( TransformWhenCondition(gen, _whenClauses[i].Comparison, value), gen.TransformStatementsToExpression(_whenClauses[i].Statements), result =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalExpression.cs;C415805 File: ConditionalExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalExpression.cs;C415805 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalExpression.cs;Super17 @@ -53,8 +53,8 @@ } internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { - return gen.Condition( - _condition.TransformRead(gen), + return AstFactory.Condition( + AstFactory.OpCall("IsTrue", _condition.TransformRead(gen)), _trueExpression.TransformRead(gen), _falseExpression.TransformRead(gen) ); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalJumpExpression.cs;C428685 File: ConditionalJumpExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalJumpExpression.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ConditionalJumpExpression.cs;Super17 @@ -57,7 +57,7 @@ internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { MSA.Expression transformedCondition = _condition.TransformRead(gen); - MSA.VariableExpression tmpVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("tmp_cond"), transformedCondition.Type); + MSA.Expression tmpVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("tmp_cond"), transformedCondition.Type); return Ast.Comma( Ast.Assign(tmpVariable, transformedCondition), =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ForLoopExpression.cs;C428685 File: ForLoopExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ForLoopExpression.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/ForLoopExpression.cs;Super17 @@ -55,10 +55,9 @@ MSA.Expression transformedBlock = _block.Transform(gen); - MSA.VariableExpression blockArgVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#forloop-block"), typeof(Proc)); + MSA.Expression blockArgVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#forloop-block"), typeof(Proc)); MSA.Expression result = Ast.Action.InvokeMember(gen.Binder, Symbols.Each, typeof(object), - InvokeMemberActionFlags.IsCallWithThis | InvokeMemberActionFlags.ReturnNonCallable, new CallSignature( new ArgumentInfo(MSA.ArgumentKind.Instance), new ArgumentInfo(MSA.ArgumentKind.Block) @@ -68,7 +67,7 @@ blockArgVariable ); - return Ast.DebugMark(MethodCall.MakeCallWithBlockRetryable(gen, result, blockArgVariable, transformedBlock, true), + return gen.DebugMark(MethodCall.MakeCallWithBlockRetryable(gen, result, blockArgVariable, transformedBlock, true), "#RB: method call with a block ('for-loop')"); } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/IfExpression.cs;C415805 File: IfExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/IfExpression.cs;C415805 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/IfExpression.cs;Super17 @@ -76,7 +76,7 @@ while (i >= 0) { // emit: else (if (condition) body else result) - result = gen.Condition( + result = AstFactory.Condition( AstFactory.OpCall("IsTrue", _elseIfClauses[i].Condition.TransformRead(gen)), gen.TransformStatementsToExpression(_elseIfClauses[i].Statements), result @@ -85,7 +85,7 @@ } // if (condition) body else result - return gen.Condition( + return AstFactory.Condition( AstFactory.OpCall("IsTrue", _condition.TransformRead(gen)), gen.TransformStatementsToExpression(_body), result =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;C428685 File: MethodCall.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/MethodCall.cs;Super17 @@ -21,8 +21,8 @@ namespace Ruby.Compiler.Ast { using Ast = Microsoft.Scripting.Ast.Expression; + using AstUtils = Microsoft.Scripting.Ast.Utils; using MSA = Microsoft.Scripting.Ast; - using AstUtils = Microsoft.Scripting.Ast.Utils; /// /// target.method_id(args) @@ -65,7 +65,7 @@ callBuilder.Add((target != null) ? target.TransformRead(gen) : gen.CurrentSelfVariable, MSA.ArgumentKind.Instance); bool isCallWithBlock = arguments != null && arguments.Block != null; - MSA.VariableExpression blockArgVariable = null; + MSA.Expression blockArgVariable = null; MSA.Expression transformedBlock = null; if (isCallWithBlock) { @@ -82,10 +82,13 @@ callBuilder.Add(rhsArgument); } - MSA.Expression result = callBuilder.MakeInvokeAction(methodName, target != null); + MSA.Expression result = gen.DebugMark( + callBuilder.MakeInvokeAction(methodName), + SymbolTable.IdToString(methodName) + ); if (isCallWithBlock) { - result = Ast.DebugMark(MakeCallWithBlockRetryable(gen, result, blockArgVariable, transformedBlock, arguments.Block.IsDefinition), + result = gen.DebugMark(MakeCallWithBlockRetryable(gen, result, blockArgVariable, transformedBlock, arguments.Block.IsDefinition), "#RB: method call with a block ('" + SymbolTable.IdToString(methodName) + "')"); } @@ -93,21 +96,21 @@ } internal static MSA.Expression/*!*/ MakeCallWithBlockRetryable(AstGenerator/*!*/ gen, MSA.Expression/*!*/ invoke, - MSA.VariableExpression blockArgVariable, MSA.Expression transformedBlock, bool isBlockDefinition) { + MSA.Expression blockArgVariable, MSA.Expression transformedBlock, bool isBlockDefinition) { Assert.NotNull(invoke); Debug.Assert((blockArgVariable == null) == (transformedBlock == null)); // see Ruby Language.doc/Control Flow Implementation/Method Call With a Block - MSA.VariableExpression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#method-result"), typeof(object)); - MSA.VariableExpression evalUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(EvalUnwinder)); + MSA.Expression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#method-result"), typeof(object)); + MSA.Expression evalUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(EvalUnwinder)); MSA.LabelTarget label = Ast.Label(); return Ast.Comma( Ast.Assign(blockArgVariable, Ast.Convert(transformedBlock, blockArgVariable.Type)), - AstUtils.Infinite(Ast.Block( + AstFactory.Infinite(label, (!isBlockDefinition) ? - (MSA.Expression)Ast.Empty() : + (MSA.Expression)Ast.Empty() : (MSA.Expression)AstFactory.OpCall("InitializeBlock", blockArgVariable), Ast.Try( @@ -122,7 +125,8 @@ // if blockParam == #block then retry end (gen.CurrentMethod.IsTopLevelCode) ? AstFactory.EmptyStatement : Ast.IfThen(Ast.Equal(gen.MakeMethodBlockParameterRead(), blockArgVariable), RetryStatement.TransformRetry(gen)) - ), label), + + ), resultVariable ); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/RescueExpression.cs;C413883 File: RescueExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/RescueExpression.cs;C413883 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/RescueExpression.cs;Super17 @@ -21,27 +21,28 @@ using Ast = Microsoft.Scripting.Ast.Expression; using Microsoft.Scripting.Utils; - // expression rescue expression + // x = expression rescue jump_statement + // x = expression rescue expression public partial class RescueExpression : Expression { private readonly SourceSpan _rescueSpan; private readonly Expression/*!*/ _guardedExpression; - private readonly Expression/*!*/ _rescueClauseExpression; + private readonly Statement/*!*/ _rescueClauseStatement; public Expression/*!*/ GuardedExpression { get { return _guardedExpression; } } - public Expression/*!*/ RescueClauseExpression { - get { return _rescueClauseExpression; } + public Statement/*!*/ RescueClauseStatement { + get { return _rescueClauseStatement; } } - - public RescueExpression(Expression/*!*/ guardedExpression, Expression/*!*/ rescueClauseExpression, SourceSpan rescueSpan, SourceSpan location) + + public RescueExpression(Expression/*!*/ guardedExpression, Statement/*!*/ rescueClauseStatement, SourceSpan rescueSpan, SourceSpan location) : base(location) { ContractUtils.RequiresNotNull(guardedExpression, "guardedExpression"); - ContractUtils.RequiresNotNull(rescueClauseExpression, "rescueClauseExpression"); + ContractUtils.RequiresNotNull(rescueClauseStatement, "rescueClauseStatement"); _guardedExpression = guardedExpression; - _rescueClauseExpression = rescueClauseExpression; + _rescueClauseStatement = rescueClauseStatement; _rescueSpan = rescueSpan; } @@ -49,7 +50,7 @@ return new Body( CollectionUtils.MakeList(new ExpressionStatement(_guardedExpression)), CollectionUtils.MakeList( - new RescueClause(CollectionUtils.MakeList(new ExpressionStatement(_rescueClauseExpression)), _rescueSpan) + new RescueClause(CollectionUtils.MakeList(_rescueClauseStatement), _rescueSpan) ), null, null, Location).TransformToExpression(gen); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;C428685 File: SuperCall.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/SuperCall.cs;Super17 @@ -20,6 +20,7 @@ namespace Ruby.Compiler.Ast { using Ast = Microsoft.Scripting.Ast.Expression; using MSA = Microsoft.Scripting.Ast; + using System; /// /// super(args) @@ -41,35 +42,28 @@ } internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { - if (gen.CurrentMethod.IsTopLevelCode) { - return AstFactory.OpCall("ThrowTopLevelSuperException"); + if (gen.CurrentMethod.IsTopLevelCode && !gen.CompilerOptions.IsEval) { + return Ast.Throw(AstFactory.OpCall("MakeTopLevelSuperException")); } - // TODO: if we are in a block, we need special logic to detect if the block - // is now a method (e.g. define_method). The logic looks like this: - // - // if then - // call method name indicated on flag (passing block args if no args given) - // else - // perform a normal super call on the enclosing method (passing method args if no args given) - // end - // - // where is an object that contains: the method name & the declaring class - // so we know what to call + bool isCallWithBlock = Arguments == null || Arguments.Block != null; + MSA.Expression blockArgVariable = null; + MSA.Expression transformedBlock = null; + bool isBlockDefinition = false; + // invoke super member action: CallBuilder callBuilder = new CallBuilder(gen); - callBuilder.Add(gen.CurrentMethod.SelfVariable, MSA.ArgumentKind.Instance); - bool isCallWithBlock = Arguments == null || Arguments.Block != null; - MSA.VariableExpression blockArgVariable = null; - MSA.Expression transformedBlock = null; - bool isBlockDefinition = false; + // self: + callBuilder.Add(gen.CurrentSelfVariable, MSA.ArgumentKind.Instance); + // block: if (isCallWithBlock) { blockArgVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#super-call-block"), typeof(Proc)); callBuilder.Add(blockArgVariable, MSA.ArgumentKind.Block); } + // arguments: if (Arguments != null) { if (Arguments.Block != null) { transformedBlock = Arguments.Block.Transform(gen); @@ -82,19 +76,17 @@ transformedBlock = gen.MakeMethodBlockParameterRead(); + // TODO: parameters in top-level eval LexicalScope.TransformParametersToSuperCall(gen, callBuilder, gen.CurrentMethod.Parameters); } - // need to pass on the lexically enclosing module so we know where to start the search for the "super" method - callBuilder.Add(gen.CurrentMethod.MethodOwner); + // TODO: this could be improved, currently the right method name and declaring module is always searched for at run-time (at the site): + MSA.Expression result = gen.DebugMark( + callBuilder.MakeSuperCallAction(gen.CurrentFrame.UniqueId), + "super"); - // magic argument to tell the binder to do a super call - callBuilder.Add(AstFactory.OpCall("GetSuperCallToken")); - - MSA.Expression result = callBuilder.MakeInvokeAction(gen.CurrentMethod.MethodName, false); - if (isCallWithBlock) { - result = Ast.DebugMark(MethodCall.MakeCallWithBlockRetryable(gen, result, blockArgVariable, transformedBlock, isBlockDefinition), + result = gen.DebugMark(MethodCall.MakeCallWithBlockRetryable(gen, result, blockArgVariable, transformedBlock, isBlockDefinition), "#RB: super call with a block ('" + SymbolTable.IdToString(gen.CurrentMethod.MethodName) + "')"); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/UnlessExpression.cs;C415805 File: UnlessExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/UnlessExpression.cs;C415805 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/UnlessExpression.cs;Super17 @@ -54,7 +54,7 @@ } internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { - return gen.Condition( + return AstFactory.Condition( AstFactory.OpCall("IsFalse", _condition.TransformRead(gen)), gen.TransformStatementsToExpression(_statements), gen.TransformStatementsToExpression(_elseClause != null ? _elseClause.Statements : null) =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/WhileLoopExpression.cs;C428685 File: WhileLoopExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/WhileLoopExpression.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/WhileLoopExpression.cs;Super17 @@ -24,7 +24,6 @@ namespace Ruby.Compiler.Ast { using MSA = Microsoft.Scripting.Ast; using Ast = Microsoft.Scripting.Ast.Expression; - using AstUtils = Microsoft.Scripting.Ast.Utils; public partial class WhileLoopExpression : Expression { // while/until cond @@ -62,9 +61,9 @@ // see Ruby Language.doc/Runtime/Control Flow Implementation/While-Until internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { - MSA.VariableExpression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#loop-result"), typeof(object)); - MSA.VariableExpression redoVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#skip-condition"), typeof(bool)); - MSA.VariableExpression blockUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(BlockUnwinder)); + MSA.Expression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#loop-result"), typeof(object)); + MSA.Expression redoVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#skip-condition"), typeof(bool)); + MSA.Expression blockUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(BlockUnwinder)); MSA.VariableExpression evalUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(EvalUnwinder)); @@ -73,7 +72,7 @@ MSA.LabelTarget loopLabel = Ast.Label(); gen.EnterLoop(redoVariable, resultVariable, loopLabel); - MSA.Block transformedBody = gen.TransformStatements(_statements, ResultOperation.Ignore); + MSA.Expression transformedBody = gen.TransformStatements(_statements, ResultOperation.Ignore); MSA.Expression transformedCondition = AstFactory.OpCall("IsTrue", _condition.TransformRead(gen)); gen.LeaveLoop(); @@ -92,10 +91,10 @@ MSA.Expression loop = Ast.Block( Ast.Assign(redoVariable, Ast.False()), - AstUtils.Infinite( + AstFactory.Infinite(loopLabel, Ast.Try( - Ast.If(redoVariable, + Ast.If(redoVariable, Ast.Assign(redoVariable, Ast.False()) ).ElseIf(transformedCondition, conditionPositiveStmt @@ -113,8 +112,7 @@ // result = unwinder.ReturnValue Ast.Assign(resultVariable, Ast.ReadField(evalUnwinder, EvalUnwinder.ReturnValueField)), Ast.Break(loopLabel) - ), - loopLabel + ) ) ); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/YieldCall.cs;C428685 File: YieldCall.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/YieldCall.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Expressions/YieldCall.cs;Super17 @@ -38,9 +38,9 @@ // see Ruby Language.doc/Runtime/Control Flow Implementation/Yield internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { - MSA.VariableExpression bfcVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#yielded-bfc"), typeof(BlockParam)); - MSA.VariableExpression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#result"), typeof(object)); - MSA.VariableExpression evalUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(EvalUnwinder)); + MSA.Expression bfcVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#yielded-bfc"), typeof(BlockParam)); + MSA.Expression resultVariable = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#result"), typeof(object)); + MSA.Expression evalUnwinder = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#unwinder"), typeof(EvalUnwinder)); MSA.Expression postYield; @@ -63,7 +63,7 @@ } return Ast.Comma( - Ast.DebugMarker("#RB: yield begin"), + gen.DebugMarker("#RB: yield begin"), Ast.Assign(bfcVariable, gen.BfcStaticCall("CreateForYield", gen.MakeMethodBlockParameterRead())), @@ -74,9 +74,9 @@ ), Ast.IfThen(postYield, Ast.Return(resultVariable)), - - Ast.DebugMarker("#RB: yield end"), + gen.DebugMarker("#RB: yield end"), + resultVariable ); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/JumpStatements/JumpStatement.cs;C402444 File: JumpStatement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/JumpStatements/JumpStatement.cs;C402444 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/JumpStatements/JumpStatement.cs;Super17 @@ -42,5 +42,14 @@ internal MSA.Expression/*!*/ TransformReturnValue(AstGenerator/*!*/ gen) { return Arguments.TransformToReturnValue(gen, _arguments); } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { + return Ast.Convert(Transform(gen), typeof(object)); + } + + internal override MSA.Expression TransformResult(AstGenerator/*!*/ gen, ResultOperation resultOperation) { + // the code will jump, ignore the result variable: + return Transform(gen); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/CompoundLeftValue.cs;C428685 File: CompoundLeftValue.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/CompoundLeftValue.cs;C428685 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/CompoundLeftValue.cs;Super17 @@ -132,7 +132,7 @@ optimizeReads = !rightNoneSplat; } - MSA.VariableExpression result = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#rhs"), typeof(List)); + MSA.Expression result = gen.CurrentCodeBlock.CreateTemporaryVariable(SymbolTable.StringToId("#rhs"), typeof(List)); writes.Add(Ast.Assign(result, resultExpression)); MethodInfo itemGetter = typeof(List).GetMethod("get_Item"); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/ConstantVariable.cs;C420856 File: ConstantVariable.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/ConstantVariable.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/LeftValues/ConstantVariable.cs;Super17 @@ -86,9 +86,6 @@ // statically (lexically) implicitly bound to the enclosing module: transformedQualifier = gen.CurrentModule.SelfVariable; // TODO: remove, should be retrieved from code context/scope return StaticScopeKind.EnclosingModule; - } else if (gen.CompilerOptions.IsEval) { - // dynamically bound to the Object or enclosing module: - throw new NotImplementedException("TODO"); // TODO: scopes } else { // statically (lexically) implicitly bound to top declaring module: transformedQualifier = null; =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/AliasStatement.cs;C402444 File: AliasStatement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/AliasStatement.cs;C402444 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/AliasStatement.cs;Super17 @@ -40,5 +40,9 @@ Ast.CodeContext(), Ast.Constant(_newName), Ast.Constant(_oldName) ); } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { + return Ast.Comma(Transform(gen), Ast.Null()); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/ConditionalStatement.cs;C413883 File: ConditionalStatement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/ConditionalStatement.cs;C413883 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/ConditionalStatement.cs;Super17 @@ -54,11 +54,16 @@ _negateCondition = negateCondition; } + private MSA.Expression/*!*/ TransformCondition(AstGenerator/*!*/ gen) { + return AstFactory.OpCall(_negateCondition ? "IsFalse" : "IsTrue", _condition.TransformRead(gen)); + } + internal override MSA.Expression/*!*/ Transform(AstGenerator/*!*/ gen) { - return Ast.IfThen( - AstFactory.OpCall(_negateCondition ? "IsFalse" : "IsTrue", _condition.TransformRead(gen)), - _body.Transform(gen) - ); + return Ast.IfThen(TransformCondition(gen), _body.Transform(gen)); } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { + return Ast.Condition(TransformCondition(gen), Ast.Convert(_body.TransformRead(gen), typeof(object)), Ast.Null()); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/ExpressionStatement.cs;C428685 File: ExpressionStatement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/ExpressionStatement.cs;C428685 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/ExpressionStatement.cs;Super17 @@ -35,8 +35,9 @@ _expression = expression; } - internal override MSA.Expression Transform(AstGenerator/*!*/ gen) { + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { return AstUtils.Comma(Location, _expression.TransformRead(gen)); } } } + =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Finalizer.cs;C402444 File: Finalizer.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Finalizer.cs;C402444 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Finalizer.cs;Super17 @@ -42,6 +42,10 @@ _definedScope = definedScope; _statements = statements; } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { + throw new NotImplementedException(); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Initializer.cs;C402444 File: Initializer.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Initializer.cs;C402444 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Initializer.cs;Super17 @@ -42,5 +42,9 @@ _definedScope = definedScope; _statements = statements; } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { + throw new NotImplementedException(); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/RescueStatement.cs;C413883 File: RescueStatement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/RescueStatement.cs;C413883 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/RescueStatement.cs;Super17 @@ -50,11 +50,19 @@ _rescueSpan = rescueSpan; } - internal override MSA.Expression/*!*/ Transform(AstGenerator/*!*/ gen) { + private Body/*!*/ ToBody(AstGenerator/*!*/ gen) { return new Body( CollectionUtils.MakeList(_guardedStatement), CollectionUtils.MakeList(new RescueClause(CollectionUtils.MakeList(_rescueClauseStatement), _rescueSpan)), - null, null, Location).TransformToStatement(gen, ResultOperation.Ignore); + null, null, Location); } + + internal override MSA.Expression/*!*/ Transform(AstGenerator/*!*/ gen) { + return ToBody(gen).TransformToStatement(gen, ResultOperation.Ignore); + } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator gen) { + return ToBody(gen).TransformToExpression(gen); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Statement.cs;C402444 File: Statement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Statement.cs;C402444 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/Statement.cs;Super17 @@ -20,6 +20,7 @@ namespace Ruby.Compiler.Ast { using MSA = Microsoft.Scripting.Ast; using Ast = Microsoft.Scripting.Ast.Expression; + using AstUtils = Microsoft.Scripting.Ast.Utils; public abstract class Statement : Node { internal static readonly List/*!*/ EmptyList = new List(); @@ -29,7 +30,19 @@ } internal virtual MSA.Expression/*!*/ Transform(AstGenerator/*!*/ gen) { - throw new NotImplementedException("Statement transformation not implemented: " + GetType().Name); + return TransformRead(gen); } + + internal virtual MSA.Expression/*!*/ TransformResult(AstGenerator/*!*/ gen, ResultOperation resultOperation) { + MSA.Expression resultExpression = TransformRead(gen); + + if (resultOperation.Variable != null) { + return Ast.Assign(resultOperation.Variable, Ast.Convert(resultExpression, resultOperation.Variable.Type)); + } else { + return AstUtils.Return(resultExpression, Location); + } + } + + internal abstract MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen); } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/UndefineStatement.cs;C402444 File: UndefineStatement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/UndefineStatement.cs;C402444 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/UndefineStatement.cs;Super17 @@ -40,5 +40,9 @@ } return Ast.Block(result); } + + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { + return Ast.Comma(Transform(gen), Ast.Null()); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/WhileLoopStatement.cs;C402444 File: WhileLoopStatement.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/WhileLoopStatement.cs;C402444 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Statements/WhileLoopStatement.cs;Super17 @@ -64,7 +64,7 @@ _isPostTest = isPostTest; } - internal override MSA.Expression/*!*/ Transform(AstGenerator/*!*/ gen) { + internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) { List stmt = new List(1); if (_statements != null) { stmt.Add(_statements); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Walkers/Walker.cs;C390406 File: Walker.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Walkers/Walker.cs;C390406 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Ast/Walkers/Walker.cs;Super17 @@ -392,7 +392,7 @@ internal protected virtual void Walk(RescueExpression/*!*/ node) { if (Enter(node)) { node.GuardedExpression.Walk(this); - node.RescueClauseExpression.Walk(this); + node.RescueClauseStatement.Walk(this); } Exit(node); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/LexicalScope.cs;C420856 File: LexicalScope.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/LexicalScope.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/LexicalScope.cs;Super17 @@ -241,7 +241,7 @@ } } - internal void SetTransformedParameter(SymbolId name, MSA.ParameterExpression/*!*/ variable) { + internal void SetTransformedParameter(SymbolId name, MSA.Expression/*!*/ variable) { Debug.Assert(_locals[name].Kind == VariableKind.Parameter && variable != null); _locals[name].TransformedVariable = variable; } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Parser.Generated.cs;C428766 File: Parser.Generated.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Parser.Generated.cs;C428766 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Parser.Generated.cs;Super17 @@ -41,57 +41,54 @@ tables.EofToken = (int)Tokens.EndOfFile; tables.States = BuildStates(new short[] { - 880, - 0,2, /* default action: */ -2, /* gotos: */ -1,1,-96,3, + 889, + 0,2, /* default action: */ -2, /* gotos: */ -1,1,-99,3, 1,0, /* actions: */ 129,2, /* default action: */ -1, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,129,-5, /* gotos: */ -4,4,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,129,-5, /* gotos: */ -4,4,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, /* default action: */ -3, - 11,3, /* actions: */ 59,682,10,683,129,-489,143,-489,125,-489,148,-489,147,-489,142,-489,150,-489,41,-489,141,-489, /* gotos: */ -97,6,-98,7,-122,785, + 11,3, /* actions: */ 59,686,10,687,129,-495,143,-495,125,-495,148,-495,147,-495,142,-495,150,-495,41,-495,141,-495, /* gotos: */ -100,6,-101,7,-125,789, /* default action: */ -4, - 66,35, /* actions: */ 59,784,177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,129,-490,143,-490,125,-490,148,-490,147,-490,142,-490,150,-490,41,-490,141,-490, /* gotos: */ -2,8,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 16,0, /* actions: */ 172,9,173,26,174,591,175,593,176,595,59,-7,10,-7,129,-7,143,-7,125,-7,148,-7,147,-7,142,-7,150,-7,41,-7,141,-7, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,10,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 18,0, /* actions: */ 169,11,170,13,172,-11,173,-11,174,-11,175,-11,176,-11,59,-11,10,-11,129,-11,143,-11,125,-11,148,-11,147,-11,142,-11,150,-11,41,-11,141,-11, - 51,27, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,162,249,154,342,155,353,156,361,157,362, /* gotos: */ -9,12,-6,879,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - /* default action: */ -50, - 51,27, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,162,249,154,342,155,353,156,361,157,362, /* gotos: */ -9,14,-6,15,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - /* default action: */ -51, + 66,38, /* actions: */ 59,788,177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,129,-496,143,-496,125,-496,148,-496,147,-496,142,-496,150,-496,41,-496,141,-496, /* gotos: */ -2,8,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 16,0, /* actions: */ 172,9,173,26,174,595,175,597,176,599,59,-7,10,-7,129,-7,143,-7,125,-7,148,-7,147,-7,142,-7,150,-7,41,-7,141,-7, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,10,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 18,0, /* actions: */ 169,11,170,13,172,-44,173,-44,174,-44,175,-44,176,-44,59,-44,10,-44,129,-44,143,-44,125,-44,148,-44,147,-44,142,-44,150,-44,41,-44,141,-44, + 51,29, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,162,251,154,344,155,355,156,364,157,365, /* gotos: */ -12,12,-6,888,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512,-7,250,-8,363, /* default action: */ -53, - /* default action: */ -49, - 22,1, /* actions: */ 161,19,169,-57,170,-57,172,-57,173,-57,174,-57,175,-57,176,-57,59,-57,10,-57,129,-57,143,-57,125,-57,148,-57,147,-57,142,-57,150,-57,41,-57,141,-57,58,-57,146,-57,160,-57, /* gotos: */ -33,18, - /* default action: */ -352, - 0,1, /* default action: */ -349, /* gotos: */ -129,20, - 62,1, /* actions: */ 124,597,193,617,177,-345,139,-345,179,-345,180,-345,225,-345,162,-345,154,-345,155,-345,156,-345,157,-345,214,-345,218,-345,215,-345,221,-345,222,-345,223,-345,235,-345,233,-345,227,-345,229,-345,228,-345,230,-345,231,-345,217,-345,216,-345,219,-345,166,-345,165,-345,167,-345,168,-345,182,-345,181,-345,203,-345,208,-345,209,-345,163,-345,178,-345,144,-345,145,-345,151,-345,152,-345,149,-345,153,-345,207,-345,205,-345,140,-345,136,-345,137,-345,138,-345,164,-345,171,-345,33,-345,183,-345,184,-345,126,-345,211,-345,128,-345,143,-345,59,-345,10,-345, /* gotos: */ -93,21, - 0,1, /* default action: */ -350, /* gotos: */ -130,22, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,143,-5, /* gotos: */ -4,23,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, + 51,29, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,162,251,154,344,155,355,156,364,157,365, /* gotos: */ -12,14,-6,15,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512,-7,250,-8,363, + /* default action: */ -54, + /* default action: */ -56, + /* default action: */ -52, + 22,1, /* actions: */ 161,19,169,-60,170,-60,172,-60,173,-60,174,-60,175,-60,176,-60,59,-60,10,-60,129,-60,143,-60,125,-60,148,-60,147,-60,142,-60,150,-60,41,-60,141,-60,58,-60,146,-60,160,-60, /* gotos: */ -36,18, + /* default action: */ -358, + 0,1, /* default action: */ -355, /* gotos: */ -132,20, + 62,1, /* actions: */ 124,601,193,621,177,-351,139,-351,179,-351,180,-351,225,-351,162,-351,154,-351,155,-351,156,-351,157,-351,214,-351,218,-351,215,-351,221,-351,222,-351,223,-351,235,-351,233,-351,227,-351,229,-351,228,-351,230,-351,231,-351,217,-351,216,-351,219,-351,166,-351,165,-351,167,-351,168,-351,182,-351,181,-351,203,-351,208,-351,209,-351,163,-351,178,-351,144,-351,145,-351,151,-351,152,-351,149,-351,153,-351,207,-351,205,-351,140,-351,136,-351,137,-351,138,-351,164,-351,171,-351,33,-351,183,-351,184,-351,126,-351,211,-351,128,-351,143,-351,59,-351,10,-351, /* gotos: */ -96,21, + 0,1, /* default action: */ -356, /* gotos: */ -133,22, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,143,-5, /* gotos: */ -4,23,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, 1,0, /* actions: */ 143,24, - /* default action: */ -351, - 16,0, /* actions: */ 172,9,173,26,174,591,175,593,176,595,59,-6,10,-6,129,-6,143,-6,125,-6,148,-6,147,-6,142,-6,150,-6,41,-6,141,-6, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,27,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 18,0, /* actions: */ 169,11,170,13,172,-12,173,-12,174,-12,175,-12,176,-12,59,-12,10,-12,129,-12,143,-12,125,-12,148,-12,147,-12,142,-12,150,-12,41,-12,141,-12, - 50,4, /* actions: */ 123,336,159,489,40,455,214,-260,217,-260,216,-260,218,-260,219,-260,166,-260,165,-260,167,-260,168,-260,182,-260,181,-260,221,-260,222,-260,223,-260,235,-260,233,-260,227,-260,229,-260,228,-260,230,-260,231,-260,225,-260,215,-260,203,-260,208,-260,209,-260,163,-260,178,-260,144,-260,145,-260,151,-260,152,-260,149,-260,153,-260,207,-260,205,-260,140,-260,136,-260,137,-260,138,-260,164,-260,183,-260,184,-260,33,-260,126,-260,211,-260,212,-260, /* gotos: */ -41,29,-32,487,-39,488,-108,310, - 24,1, /* actions: */ 210,31,161,-65,169,-65,170,-65,172,-65,173,-65,174,-65,175,-65,176,-65,59,-65,10,-65,129,-65,143,-65,125,-65,148,-65,147,-65,142,-65,150,-65,41,-65,141,-65,58,-65,146,-65,160,-65,93,-65, /* gotos: */ -31,30, - /* default action: */ -66, - 0,1, /* default action: */ -62, /* gotos: */ -102,32, - 62,1, /* actions: */ 124,597,193,617,177,-345,139,-345,179,-345,180,-345,225,-345,162,-345,154,-345,155,-345,156,-345,157,-345,214,-345,218,-345,215,-345,221,-345,222,-345,223,-345,235,-345,233,-345,227,-345,229,-345,228,-345,230,-345,231,-345,217,-345,216,-345,219,-345,166,-345,165,-345,167,-345,168,-345,182,-345,181,-345,203,-345,208,-345,209,-345,163,-345,178,-345,144,-345,145,-345,151,-345,152,-345,149,-345,153,-345,207,-345,205,-345,140,-345,136,-345,137,-345,138,-345,164,-345,171,-345,33,-345,183,-345,184,-345,126,-345,211,-345,128,-345,125,-345,59,-345,10,-345, /* gotos: */ -93,33, - 0,1, /* default action: */ -63, /* gotos: */ -103,34, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,125,-5, /* gotos: */ -4,35,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, + /* default action: */ -357, + 16,0, /* actions: */ 172,9,173,26,174,595,175,597,176,599,59,-6,10,-6,129,-6,143,-6,125,-6,148,-6,147,-6,142,-6,150,-6,41,-6,141,-6, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,27,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 18,0, /* actions: */ 169,11,170,13,172,-45,173,-45,174,-45,175,-45,176,-45,59,-45,10,-45,129,-45,143,-45,125,-45,148,-45,147,-45,142,-45,150,-45,41,-45,141,-45, + 50,4, /* actions: */ 123,338,159,493,40,459,214,-266,217,-266,216,-266,218,-266,219,-266,166,-266,165,-266,167,-266,168,-266,182,-266,181,-266,221,-266,222,-266,223,-266,235,-266,233,-266,227,-266,229,-266,228,-266,230,-266,231,-266,225,-266,215,-266,203,-266,208,-266,209,-266,163,-266,178,-266,144,-266,145,-266,151,-266,152,-266,149,-266,153,-266,207,-266,205,-266,140,-266,136,-266,137,-266,138,-266,164,-266,183,-266,184,-266,33,-266,126,-266,211,-266,212,-266, /* gotos: */ -44,29,-35,491,-42,492,-111,312, + 24,1, /* actions: */ 210,31,161,-68,169,-68,170,-68,172,-68,173,-68,174,-68,175,-68,176,-68,59,-68,10,-68,129,-68,143,-68,125,-68,148,-68,147,-68,142,-68,150,-68,41,-68,141,-68,58,-68,146,-68,160,-68,93,-68, /* gotos: */ -34,30, + /* default action: */ -69, + 0,1, /* default action: */ -65, /* gotos: */ -105,32, + 62,1, /* actions: */ 124,601,193,621,177,-351,139,-351,179,-351,180,-351,225,-351,162,-351,154,-351,155,-351,156,-351,157,-351,214,-351,218,-351,215,-351,221,-351,222,-351,223,-351,235,-351,233,-351,227,-351,229,-351,228,-351,230,-351,231,-351,217,-351,216,-351,219,-351,166,-351,165,-351,167,-351,168,-351,182,-351,181,-351,203,-351,208,-351,209,-351,163,-351,178,-351,144,-351,145,-351,151,-351,152,-351,149,-351,153,-351,207,-351,205,-351,140,-351,136,-351,137,-351,138,-351,164,-351,171,-351,33,-351,183,-351,184,-351,126,-351,211,-351,128,-351,125,-351,59,-351,10,-351, /* gotos: */ -96,33, + 0,1, /* default action: */ -66, /* gotos: */ -106,34, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,125,-5, /* gotos: */ -4,35,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, 1,0, /* actions: */ 125,36, - /* default action: */ -64, + /* default action: */ -67, /* default action: */ -9, - 72,5, /* actions: */ 216,122,214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -84,39,-82,42,-81,46,-104,73,-83,115, - 0,1, /* default action: */ -23, /* gotos: */ -101,40, - 71,5, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -84,41,-82,42,-81,46,-104,73,-83,115, - /* default action: */ -24, + 72,5, /* actions: */ 216,122,214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -87,39,-85,42,-84,46,-107,73,-86,115, + 0,1, /* default action: */ -19, /* gotos: */ -104,40, + 71,5, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -87,41,-85,42,-84,46,-107,73,-86,115, + /* default action: */ -20, + /* default action: */ -113, + /* default action: */ -108, + /* default action: */ -109, /* default action: */ -110, - /* default action: */ -105, - /* default action: */ -106, - /* default action: */ -107, - /* default action: */ -108, - /* default action: */ -115, - /* default action: */ -116, - /* default action: */ -117, + /* default action: */ -111, /* default action: */ -118, /* default action: */ -119, /* default action: */ -120, @@ -115,10 +112,10 @@ /* default action: */ -138, /* default action: */ -139, /* default action: */ -140, - /* default action: */ -109, /* default action: */ -141, /* default action: */ -142, /* default action: */ -143, + /* default action: */ -112, /* default action: */ -144, /* default action: */ -145, /* default action: */ -146, @@ -157,782 +154,795 @@ /* default action: */ -179, /* default action: */ -180, /* default action: */ -181, - /* default action: */ -111, - 73,4, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,217,119,216,120,219,121, /* gotos: */ -77,117,-82,118,-81,46,-104,73, - /* default action: */ -412, - /* default action: */ -413, - /* default action: */ -414, - /* default action: */ -415, - /* default action: */ -416, - 2,1, /* actions: */ 216,123,225,125, /* gotos: */ -74,124, - /* default action: */ -25, - /* default action: */ -26, - /* default action: */ -436, - 71,6, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -28,127,-84,131,-82,42,-81,46,-104,73,-83,115, + /* default action: */ -182, + /* default action: */ -183, + /* default action: */ -184, + /* default action: */ -114, + 73,4, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,217,119,216,120,219,121, /* gotos: */ -80,117,-85,118,-84,46,-107,73, + /* default action: */ -418, + /* default action: */ -419, + /* default action: */ -420, + /* default action: */ -421, + /* default action: */ -422, + 2,1, /* actions: */ 216,123,225,125, /* gotos: */ -77,124, + /* default action: */ -21, + /* default action: */ -22, + /* default action: */ -442, + 71,6, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -31,127,-87,131,-85,42,-84,46,-107,73,-86,115, 17,0, /* actions: */ 44,128,172,-10,173,-10,174,-10,175,-10,176,-10,59,-10,10,-10,129,-10,143,-10,125,-10,148,-10,147,-10,142,-10,150,-10,41,-10,141,-10, - 0,1, /* default action: */ -113, /* gotos: */ -105,129, - 71,5, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -84,130,-82,42,-81,46,-104,73,-83,115, - /* default action: */ -114, - /* default action: */ -112, - 0,1, /* default action: */ -16, /* gotos: */ -99,133, + 0,1, /* default action: */ -116, /* gotos: */ -108,129, + 71,5, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,233,116, /* gotos: */ -87,130,-85,42,-84,46,-107,73,-86,115, + /* default action: */ -117, + /* default action: */ -115, + 0,1, /* default action: */ -11, /* gotos: */ -102,133, 1,0, /* actions: */ 123,134, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,125,-5, /* gotos: */ -4,135,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,125,-5, /* gotos: */ -4,135,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, 1,0, /* actions: */ 125,136, - /* default action: */ -17, - 0,1, /* default action: */ -18, /* gotos: */ -100,138, + /* default action: */ -12, + 0,1, /* default action: */ -13, /* gotos: */ -103,138, 1,0, /* actions: */ 123,139, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,125,-5, /* gotos: */ -4,140,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,125,-5, /* gotos: */ -4,140,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, 1,0, /* actions: */ 125,141, - /* default action: */ -19, - 50,0, /* actions: */ 220,143,46,-281,202,-281,91,-281,43,-281,45,-281,42,-281,47,-281,37,-281,185,-281,124,-281,94,-281,38,-281,186,-281,62,-281,190,-281,60,-281,191,-281,187,-281,188,-281,189,-281,194,-281,195,-281,200,-281,201,-281,192,-281,193,-281,196,-281,197,-281,63,-281,169,-281,170,-281,172,-281,173,-281,174,-281,175,-281,176,-281,59,-281,10,-281,129,-281,143,-281,125,-281,148,-281,147,-281,142,-281,150,-281,41,-281,141,-281,61,-99,44,-91, - 45,25, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517, /* gotos: */ -23,144,-15,145,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-91,200,-90,508, - /* default action: */ -20, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-191,170,-191,172,-191,173,-191,174,-191,175,-191,176,-191,59,-191,10,-191,129,-191,143,-191,125,-191,148,-191,147,-191,142,-191,150,-191,41,-191,141,-191,58,-191,146,-191,160,-191,204,-191,44,-191,93,-191,210,-191,161,-191, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,147,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-192,45,-192,42,150,47,152,37,154,185,156,124,-192,94,-192,38,-192,186,-192,62,-192,190,-192,60,-192,191,-192,187,-192,188,-192,189,-192,194,-192,195,-192,200,-192,201,-192,192,-192,193,-192,196,-192,197,-192,63,-192,169,-192,170,-192,172,-192,173,-192,174,-192,175,-192,176,-192,59,-192,10,-192,129,-192,143,-192,125,-192,148,-192,147,-192,142,-192,150,-192,41,-192,141,-192,58,-192,146,-192,160,-192,204,-192,44,-192,93,-192,210,-192,161,-192, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,149,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-193,45,-193,42,150,47,152,37,154,185,156,124,-193,94,-193,38,-193,186,-193,62,-193,190,-193,60,-193,191,-193,187,-193,188,-193,189,-193,194,-193,195,-193,200,-193,201,-193,192,-193,193,-193,196,-193,197,-193,63,-193,169,-193,170,-193,172,-193,173,-193,174,-193,175,-193,176,-193,59,-193,10,-193,129,-193,143,-193,125,-193,148,-193,147,-193,142,-193,150,-193,41,-193,141,-193,58,-193,146,-193,160,-193,204,-193,44,-193,93,-193,210,-193,161,-193, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,151,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-194,45,-194,42,-194,47,-194,37,-194,185,156,124,-194,94,-194,38,-194,186,-194,62,-194,190,-194,60,-194,191,-194,187,-194,188,-194,189,-194,194,-194,195,-194,200,-194,201,-194,192,-194,193,-194,196,-194,197,-194,63,-194,169,-194,170,-194,172,-194,173,-194,174,-194,175,-194,176,-194,59,-194,10,-194,129,-194,143,-194,125,-194,148,-194,147,-194,142,-194,150,-194,41,-194,141,-194,58,-194,146,-194,160,-194,204,-194,44,-194,93,-194,210,-194,161,-194, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,153,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-195,45,-195,42,-195,47,-195,37,-195,185,156,124,-195,94,-195,38,-195,186,-195,62,-195,190,-195,60,-195,191,-195,187,-195,188,-195,189,-195,194,-195,195,-195,200,-195,201,-195,192,-195,193,-195,196,-195,197,-195,63,-195,169,-195,170,-195,172,-195,173,-195,174,-195,175,-195,176,-195,59,-195,10,-195,129,-195,143,-195,125,-195,148,-195,147,-195,142,-195,150,-195,41,-195,141,-195,58,-195,146,-195,160,-195,204,-195,44,-195,93,-195,210,-195,161,-195, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,155,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-196,45,-196,42,-196,47,-196,37,-196,185,156,124,-196,94,-196,38,-196,186,-196,62,-196,190,-196,60,-196,191,-196,187,-196,188,-196,189,-196,194,-196,195,-196,200,-196,201,-196,192,-196,193,-196,196,-196,197,-196,63,-196,169,-196,170,-196,172,-196,173,-196,174,-196,175,-196,176,-196,59,-196,10,-196,129,-196,143,-196,125,-196,148,-196,147,-196,142,-196,150,-196,41,-196,141,-196,58,-196,146,-196,160,-196,204,-196,44,-196,93,-196,210,-196,161,-196, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,157,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-197,45,-197,42,-197,47,-197,37,-197,185,156,124,-197,94,-197,38,-197,186,-197,62,-197,190,-197,60,-197,191,-197,187,-197,188,-197,189,-197,194,-197,195,-197,200,-197,201,-197,192,-197,193,-197,196,-197,197,-197,63,-197,169,-197,170,-197,172,-197,173,-197,174,-197,175,-197,176,-197,59,-197,10,-197,129,-197,143,-197,125,-197,148,-197,147,-197,142,-197,150,-197,41,-197,141,-197,58,-197,146,-197,160,-197,204,-197,44,-197,93,-197,210,-197,161,-197, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,159,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-203,94,-203,38,162,186,-203,62,-203,190,-203,60,-203,191,-203,187,-203,188,-203,189,-203,194,-203,195,-203,200,184,201,186,192,-203,193,-203,196,-203,197,-203,63,-203,169,-203,170,-203,172,-203,173,-203,174,-203,175,-203,176,-203,59,-203,10,-203,129,-203,143,-203,125,-203,148,-203,147,-203,142,-203,150,-203,41,-203,141,-203,58,-203,146,-203,160,-203,204,-203,44,-203,93,-203,210,-203,161,-203, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,161,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-204,94,-204,38,162,186,-204,62,-204,190,-204,60,-204,191,-204,187,-204,188,-204,189,-204,194,-204,195,-204,200,184,201,186,192,-204,193,-204,196,-204,197,-204,63,-204,169,-204,170,-204,172,-204,173,-204,174,-204,175,-204,176,-204,59,-204,10,-204,129,-204,143,-204,125,-204,148,-204,147,-204,142,-204,150,-204,41,-204,141,-204,58,-204,146,-204,160,-204,204,-204,44,-204,93,-204,210,-204,161,-204, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,163,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-205,94,-205,38,-205,186,-205,62,-205,190,-205,60,-205,191,-205,187,-205,188,-205,189,-205,194,-205,195,-205,200,184,201,186,192,-205,193,-205,196,-205,197,-205,63,-205,169,-205,170,-205,172,-205,173,-205,174,-205,175,-205,176,-205,59,-205,10,-205,129,-205,143,-205,125,-205,148,-205,147,-205,142,-205,150,-205,41,-205,141,-205,58,-205,146,-205,160,-205,204,-205,44,-205,93,-205,210,-205,161,-205, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,165,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-206,193,-206,196,-206,197,-206,63,-206,169,-206,170,-206,172,-206,173,-206,174,-206,175,-206,176,-206,59,-206,10,-206,129,-206,143,-206,125,-206,148,-206,147,-206,142,-206,150,-206,41,-206,141,-206,58,-206,146,-206,160,-206,204,-206,44,-206,93,-206,210,-206,161,-206, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,167,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-207,62,-207,190,-207,60,-207,191,-207,187,-207,188,-207,189,-207,194,-207,195,-207,200,184,201,186,192,-207,193,-207,196,-207,197,-207,63,-207,169,-207,170,-207,172,-207,173,-207,174,-207,175,-207,176,-207,59,-207,10,-207,129,-207,143,-207,125,-207,148,-207,147,-207,142,-207,150,-207,41,-207,141,-207,58,-207,146,-207,160,-207,204,-207,44,-207,93,-207,210,-207,161,-207, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,169,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-208,62,-208,190,-208,60,-208,191,-208,187,-208,188,-208,189,-208,194,-208,195,-208,200,184,201,186,192,-208,193,-208,196,-208,197,-208,63,-208,169,-208,170,-208,172,-208,173,-208,174,-208,175,-208,176,-208,59,-208,10,-208,129,-208,143,-208,125,-208,148,-208,147,-208,142,-208,150,-208,41,-208,141,-208,58,-208,146,-208,160,-208,204,-208,44,-208,93,-208,210,-208,161,-208, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,171,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-209,62,-209,190,-209,60,-209,191,-209,187,-209,188,-209,189,-209,194,-209,195,-209,200,184,201,186,192,-209,193,-209,196,-209,197,-209,63,-209,169,-209,170,-209,172,-209,173,-209,174,-209,175,-209,176,-209,59,-209,10,-209,129,-209,143,-209,125,-209,148,-209,147,-209,142,-209,150,-209,41,-209,141,-209,58,-209,146,-209,160,-209,204,-209,44,-209,93,-209,210,-209,161,-209, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,173,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-210,62,-210,190,-210,60,-210,191,-210,187,-210,188,-210,189,-210,194,-210,195,-210,200,184,201,186,192,-210,193,-210,196,-210,197,-210,63,-210,169,-210,170,-210,172,-210,173,-210,174,-210,175,-210,176,-210,59,-210,10,-210,129,-210,143,-210,125,-210,148,-210,147,-210,142,-210,150,-210,41,-210,141,-210,58,-210,146,-210,160,-210,204,-210,44,-210,93,-210,210,-210,161,-210, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,175,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-211,193,-211,196,-211,197,-211,63,-211,169,-211,170,-211,172,-211,173,-211,174,-211,175,-211,176,-211,59,-211,10,-211,129,-211,143,-211,125,-211,148,-211,147,-211,142,-211,150,-211,41,-211,141,-211,58,-211,146,-211,160,-211,204,-211,44,-211,93,-211,210,-211,161,-211, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,177,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-212,193,-212,196,-212,197,-212,63,-212,169,-212,170,-212,172,-212,173,-212,174,-212,175,-212,176,-212,59,-212,10,-212,129,-212,143,-212,125,-212,148,-212,147,-212,142,-212,150,-212,41,-212,141,-212,58,-212,146,-212,160,-212,204,-212,44,-212,93,-212,210,-212,161,-212, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,179,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-213,193,-213,196,-213,197,-213,63,-213,169,-213,170,-213,172,-213,173,-213,174,-213,175,-213,176,-213,59,-213,10,-213,129,-213,143,-213,125,-213,148,-213,147,-213,142,-213,150,-213,41,-213,141,-213,58,-213,146,-213,160,-213,204,-213,44,-213,93,-213,210,-213,161,-213, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,181,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-214,193,-214,196,-214,197,-214,63,-214,169,-214,170,-214,172,-214,173,-214,174,-214,175,-214,176,-214,59,-214,10,-214,129,-214,143,-214,125,-214,148,-214,147,-214,142,-214,150,-214,41,-214,141,-214,58,-214,146,-214,160,-214,204,-214,44,-214,93,-214,210,-214,161,-214, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,183,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, + /* default action: */ -14, + 50,0, /* actions: */ 220,143,46,-287,202,-287,91,-287,43,-287,45,-287,42,-287,47,-287,37,-287,185,-287,124,-287,94,-287,38,-287,186,-287,62,-287,190,-287,60,-287,191,-287,187,-287,188,-287,189,-287,194,-287,195,-287,200,-287,201,-287,192,-287,193,-287,196,-287,197,-287,63,-287,169,-287,170,-287,172,-287,173,-287,174,-287,175,-287,176,-287,59,-287,10,-287,129,-287,143,-287,125,-287,148,-287,147,-287,142,-287,150,-287,41,-287,141,-287,61,-102,44,-94, + 45,25, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521, /* gotos: */ -26,144,-18,145,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-94,200,-93,512, + /* default action: */ -15, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-195,170,-195,172,-195,173,-195,174,-195,175,-195,176,-195,59,-195,10,-195,129,-195,143,-195,125,-195,148,-195,147,-195,142,-195,150,-195,41,-195,141,-195,58,-195,146,-195,160,-195,204,-195,44,-195,93,-195,210,-195,161,-195, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,147,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-196,45,-196,42,150,47,152,37,154,185,156,124,-196,94,-196,38,-196,186,-196,62,-196,190,-196,60,-196,191,-196,187,-196,188,-196,189,-196,194,-196,195,-196,200,-196,201,-196,192,-196,193,-196,196,-196,197,-196,63,-196,169,-196,170,-196,172,-196,173,-196,174,-196,175,-196,176,-196,59,-196,10,-196,129,-196,143,-196,125,-196,148,-196,147,-196,142,-196,150,-196,41,-196,141,-196,58,-196,146,-196,160,-196,204,-196,44,-196,93,-196,210,-196,161,-196, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,149,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-197,45,-197,42,150,47,152,37,154,185,156,124,-197,94,-197,38,-197,186,-197,62,-197,190,-197,60,-197,191,-197,187,-197,188,-197,189,-197,194,-197,195,-197,200,-197,201,-197,192,-197,193,-197,196,-197,197,-197,63,-197,169,-197,170,-197,172,-197,173,-197,174,-197,175,-197,176,-197,59,-197,10,-197,129,-197,143,-197,125,-197,148,-197,147,-197,142,-197,150,-197,41,-197,141,-197,58,-197,146,-197,160,-197,204,-197,44,-197,93,-197,210,-197,161,-197, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,151,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-198,45,-198,42,-198,47,-198,37,-198,185,156,124,-198,94,-198,38,-198,186,-198,62,-198,190,-198,60,-198,191,-198,187,-198,188,-198,189,-198,194,-198,195,-198,200,-198,201,-198,192,-198,193,-198,196,-198,197,-198,63,-198,169,-198,170,-198,172,-198,173,-198,174,-198,175,-198,176,-198,59,-198,10,-198,129,-198,143,-198,125,-198,148,-198,147,-198,142,-198,150,-198,41,-198,141,-198,58,-198,146,-198,160,-198,204,-198,44,-198,93,-198,210,-198,161,-198, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,153,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-199,45,-199,42,-199,47,-199,37,-199,185,156,124,-199,94,-199,38,-199,186,-199,62,-199,190,-199,60,-199,191,-199,187,-199,188,-199,189,-199,194,-199,195,-199,200,-199,201,-199,192,-199,193,-199,196,-199,197,-199,63,-199,169,-199,170,-199,172,-199,173,-199,174,-199,175,-199,176,-199,59,-199,10,-199,129,-199,143,-199,125,-199,148,-199,147,-199,142,-199,150,-199,41,-199,141,-199,58,-199,146,-199,160,-199,204,-199,44,-199,93,-199,210,-199,161,-199, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,155,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-200,45,-200,42,-200,47,-200,37,-200,185,156,124,-200,94,-200,38,-200,186,-200,62,-200,190,-200,60,-200,191,-200,187,-200,188,-200,189,-200,194,-200,195,-200,200,-200,201,-200,192,-200,193,-200,196,-200,197,-200,63,-200,169,-200,170,-200,172,-200,173,-200,174,-200,175,-200,176,-200,59,-200,10,-200,129,-200,143,-200,125,-200,148,-200,147,-200,142,-200,150,-200,41,-200,141,-200,58,-200,146,-200,160,-200,204,-200,44,-200,93,-200,210,-200,161,-200, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,157,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-201,45,-201,42,-201,47,-201,37,-201,185,156,124,-201,94,-201,38,-201,186,-201,62,-201,190,-201,60,-201,191,-201,187,-201,188,-201,189,-201,194,-201,195,-201,200,-201,201,-201,192,-201,193,-201,196,-201,197,-201,63,-201,169,-201,170,-201,172,-201,173,-201,174,-201,175,-201,176,-201,59,-201,10,-201,129,-201,143,-201,125,-201,148,-201,147,-201,142,-201,150,-201,41,-201,141,-201,58,-201,146,-201,160,-201,204,-201,44,-201,93,-201,210,-201,161,-201, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,159,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-207,94,-207,38,162,186,-207,62,-207,190,-207,60,-207,191,-207,187,-207,188,-207,189,-207,194,-207,195,-207,200,184,201,186,192,-207,193,-207,196,-207,197,-207,63,-207,169,-207,170,-207,172,-207,173,-207,174,-207,175,-207,176,-207,59,-207,10,-207,129,-207,143,-207,125,-207,148,-207,147,-207,142,-207,150,-207,41,-207,141,-207,58,-207,146,-207,160,-207,204,-207,44,-207,93,-207,210,-207,161,-207, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,161,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-208,94,-208,38,162,186,-208,62,-208,190,-208,60,-208,191,-208,187,-208,188,-208,189,-208,194,-208,195,-208,200,184,201,186,192,-208,193,-208,196,-208,197,-208,63,-208,169,-208,170,-208,172,-208,173,-208,174,-208,175,-208,176,-208,59,-208,10,-208,129,-208,143,-208,125,-208,148,-208,147,-208,142,-208,150,-208,41,-208,141,-208,58,-208,146,-208,160,-208,204,-208,44,-208,93,-208,210,-208,161,-208, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,163,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-209,94,-209,38,-209,186,-209,62,-209,190,-209,60,-209,191,-209,187,-209,188,-209,189,-209,194,-209,195,-209,200,184,201,186,192,-209,193,-209,196,-209,197,-209,63,-209,169,-209,170,-209,172,-209,173,-209,174,-209,175,-209,176,-209,59,-209,10,-209,129,-209,143,-209,125,-209,148,-209,147,-209,142,-209,150,-209,41,-209,141,-209,58,-209,146,-209,160,-209,204,-209,44,-209,93,-209,210,-209,161,-209, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,165,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-210,193,-210,196,-210,197,-210,63,-210,169,-210,170,-210,172,-210,173,-210,174,-210,175,-210,176,-210,59,-210,10,-210,129,-210,143,-210,125,-210,148,-210,147,-210,142,-210,150,-210,41,-210,141,-210,58,-210,146,-210,160,-210,204,-210,44,-210,93,-210,210,-210,161,-210, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,167,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-211,62,-211,190,-211,60,-211,191,-211,187,-211,188,-211,189,-211,194,-211,195,-211,200,184,201,186,192,-211,193,-211,196,-211,197,-211,63,-211,169,-211,170,-211,172,-211,173,-211,174,-211,175,-211,176,-211,59,-211,10,-211,129,-211,143,-211,125,-211,148,-211,147,-211,142,-211,150,-211,41,-211,141,-211,58,-211,146,-211,160,-211,204,-211,44,-211,93,-211,210,-211,161,-211, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,169,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-212,62,-212,190,-212,60,-212,191,-212,187,-212,188,-212,189,-212,194,-212,195,-212,200,184,201,186,192,-212,193,-212,196,-212,197,-212,63,-212,169,-212,170,-212,172,-212,173,-212,174,-212,175,-212,176,-212,59,-212,10,-212,129,-212,143,-212,125,-212,148,-212,147,-212,142,-212,150,-212,41,-212,141,-212,58,-212,146,-212,160,-212,204,-212,44,-212,93,-212,210,-212,161,-212, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,171,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-213,62,-213,190,-213,60,-213,191,-213,187,-213,188,-213,189,-213,194,-213,195,-213,200,184,201,186,192,-213,193,-213,196,-213,197,-213,63,-213,169,-213,170,-213,172,-213,173,-213,174,-213,175,-213,176,-213,59,-213,10,-213,129,-213,143,-213,125,-213,148,-213,147,-213,142,-213,150,-213,41,-213,141,-213,58,-213,146,-213,160,-213,204,-213,44,-213,93,-213,210,-213,161,-213, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,173,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,-214,62,-214,190,-214,60,-214,191,-214,187,-214,188,-214,189,-214,194,-214,195,-214,200,184,201,186,192,-214,193,-214,196,-214,197,-214,63,-214,169,-214,170,-214,172,-214,173,-214,174,-214,175,-214,176,-214,59,-214,10,-214,129,-214,143,-214,125,-214,148,-214,147,-214,142,-214,150,-214,41,-214,141,-214,58,-214,146,-214,160,-214,204,-214,44,-214,93,-214,210,-214,161,-214, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,175,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-215,193,-215,196,-215,197,-215,63,-215,169,-215,170,-215,172,-215,173,-215,174,-215,175,-215,176,-215,59,-215,10,-215,129,-215,143,-215,125,-215,148,-215,147,-215,142,-215,150,-215,41,-215,141,-215,58,-215,146,-215,160,-215,204,-215,44,-215,93,-215,210,-215,161,-215, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,185,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-218,94,-218,38,-218,186,-218,62,-218,190,-218,60,-218,191,-218,187,-218,188,-218,189,-218,194,-218,195,-218,200,-218,201,-218,192,-218,193,-218,196,-218,197,-218,63,-218,169,-218,170,-218,172,-218,173,-218,174,-218,175,-218,176,-218,59,-218,10,-218,129,-218,143,-218,125,-218,148,-218,147,-218,142,-218,150,-218,41,-218,141,-218,58,-218,146,-218,160,-218,204,-218,44,-218,93,-218,210,-218,161,-218, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,187,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-219,94,-219,38,-219,186,-219,62,-219,190,-219,60,-219,191,-219,187,-219,188,-219,189,-219,194,-219,195,-219,200,-219,201,-219,192,-219,193,-219,196,-219,197,-219,63,-219,169,-219,170,-219,172,-219,173,-219,174,-219,175,-219,176,-219,59,-219,10,-219,129,-219,143,-219,125,-219,148,-219,147,-219,142,-219,150,-219,41,-219,141,-219,58,-219,146,-219,160,-219,204,-219,44,-219,93,-219,210,-219,161,-219, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,189,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-220,193,-220,196,-220,197,-220,63,-220,169,-220,170,-220,172,-220,173,-220,174,-220,175,-220,176,-220,59,-220,10,-220,129,-220,143,-220,125,-220,148,-220,147,-220,142,-220,150,-220,41,-220,141,-220,58,-220,146,-220,160,-220,204,-220,44,-220,93,-220,210,-220,161,-220, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,191,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,-221,196,-221,197,-221,63,-221,169,-221,170,-221,172,-221,173,-221,174,-221,175,-221,176,-221,59,-221,10,-221,129,-221,143,-221,125,-221,148,-221,147,-221,142,-221,150,-221,41,-221,141,-221,58,-221,146,-221,160,-221,204,-221,44,-221,93,-221,210,-221,161,-221, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,193,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,-222,169,-222,170,-222,172,-222,173,-222,174,-222,175,-222,176,-222,59,-222,10,-222,129,-222,143,-222,125,-222,148,-222,147,-222,142,-222,150,-222,41,-222,141,-222,58,-222,146,-222,160,-222,204,-222,44,-222,93,-222,210,-222,161,-222, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,195,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,-223,169,-223,170,-223,172,-223,173,-223,174,-223,175,-223,176,-223,59,-223,10,-223,129,-223,143,-223,125,-223,148,-223,147,-223,142,-223,150,-223,41,-223,141,-223,58,-223,146,-223,160,-223,204,-223,44,-223,93,-223,210,-223,161,-223, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,197,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,177,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-216,193,-216,196,-216,197,-216,63,-216,169,-216,170,-216,172,-216,173,-216,174,-216,175,-216,176,-216,59,-216,10,-216,129,-216,143,-216,125,-216,148,-216,147,-216,142,-216,150,-216,41,-216,141,-216,58,-216,146,-216,160,-216,204,-216,44,-216,93,-216,210,-216,161,-216, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,179,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-217,193,-217,196,-217,197,-217,63,-217,169,-217,170,-217,172,-217,173,-217,174,-217,175,-217,176,-217,59,-217,10,-217,129,-217,143,-217,125,-217,148,-217,147,-217,142,-217,150,-217,41,-217,141,-217,58,-217,146,-217,160,-217,204,-217,44,-217,93,-217,210,-217,161,-217, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,181,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-218,193,-218,196,-218,197,-218,63,-218,169,-218,170,-218,172,-218,173,-218,174,-218,175,-218,176,-218,59,-218,10,-218,129,-218,143,-218,125,-218,148,-218,147,-218,142,-218,150,-218,41,-218,141,-218,58,-218,146,-218,160,-218,204,-218,44,-218,93,-218,210,-218,161,-218, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,183,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-219,193,-219,196,-219,197,-219,63,-219,169,-219,170,-219,172,-219,173,-219,174,-219,175,-219,176,-219,59,-219,10,-219,129,-219,143,-219,125,-219,148,-219,147,-219,142,-219,150,-219,41,-219,141,-219,58,-219,146,-219,160,-219,204,-219,44,-219,93,-219,210,-219,161,-219, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,185,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-222,94,-222,38,-222,186,-222,62,-222,190,-222,60,-222,191,-222,187,-222,188,-222,189,-222,194,-222,195,-222,200,-222,201,-222,192,-222,193,-222,196,-222,197,-222,63,-222,169,-222,170,-222,172,-222,173,-222,174,-222,175,-222,176,-222,59,-222,10,-222,129,-222,143,-222,125,-222,148,-222,147,-222,142,-222,150,-222,41,-222,141,-222,58,-222,146,-222,160,-222,204,-222,44,-222,93,-222,210,-222,161,-222, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,187,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,-223,94,-223,38,-223,186,-223,62,-223,190,-223,60,-223,191,-223,187,-223,188,-223,189,-223,194,-223,195,-223,200,-223,201,-223,192,-223,193,-223,196,-223,197,-223,63,-223,169,-223,170,-223,172,-223,173,-223,174,-223,175,-223,176,-223,59,-223,10,-223,129,-223,143,-223,125,-223,148,-223,147,-223,142,-223,150,-223,41,-223,141,-223,58,-223,146,-223,160,-223,204,-223,44,-223,93,-223,210,-223,161,-223, + 50,22, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,162,883,154,884,155,885,156,364,157,365, /* gotos: */ -18,189,-8,887,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,-224,193,-224,196,-224,197,-224,63,-224,169,-224,170,-224,172,-224,173,-224,174,-224,175,-224,176,-224,59,-224,10,-224,129,-224,143,-224,125,-224,148,-224,147,-224,142,-224,150,-224,41,-224,141,-224,58,-224,146,-224,160,-224,204,-224,44,-224,93,-224,210,-224,161,-224, + 50,22, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,162,883,154,884,155,885,156,364,157,365, /* gotos: */ -18,191,-8,886,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,-225,196,-225,197,-225,63,-225,169,-225,170,-225,172,-225,173,-225,174,-225,175,-225,176,-225,59,-225,10,-225,129,-225,143,-225,125,-225,148,-225,147,-225,142,-225,150,-225,41,-225,141,-225,58,-225,146,-225,160,-225,204,-225,44,-225,93,-225,210,-225,161,-225, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,193,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,-228,169,-228,170,-228,172,-228,173,-228,174,-228,175,-228,176,-228,59,-228,10,-228,129,-228,143,-228,125,-228,148,-228,147,-228,142,-228,150,-228,41,-228,141,-228,58,-228,146,-228,160,-228,204,-228,44,-228,93,-228,210,-228,161,-228, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,195,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,-229,169,-229,170,-229,172,-229,173,-229,174,-229,175,-229,176,-229,59,-229,10,-229,129,-229,143,-229,125,-229,148,-229,147,-229,142,-229,150,-229,41,-229,141,-229,58,-229,146,-229,160,-229,204,-229,44,-229,93,-229,210,-229,161,-229, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,197,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, 27,0, /* actions: */ 58,198,43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,199,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-225,170,-225,172,-225,173,-225,174,-225,175,-225,176,-225,59,-225,10,-225,129,-225,143,-225,125,-225,148,-225,147,-225,142,-225,150,-225,41,-225,141,-225,58,-225,146,-225,160,-225,204,-225,44,-225,93,-225,210,-225,161,-225, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,199,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-231,170,-231,172,-231,173,-231,174,-231,175,-231,176,-231,59,-231,10,-231,129,-231,143,-231,125,-231,148,-231,147,-231,142,-231,150,-231,41,-231,141,-231,58,-231,146,-231,160,-231,204,-231,44,-231,93,-231,210,-231,161,-231, 1,0, /* actions: */ 61,201, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,202,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 176,203,43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-182,170,-182,172,-182,173,-182,174,-182,175,-182,59,-182,10,-182,129,-182,143,-182,125,-182,148,-182,147,-182,142,-182,150,-182,41,-182,141,-182,58,-182,146,-182,160,-182,204,-182,44,-182,93,-182,210,-182,161,-182, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,204,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-183,170,-183,172,-183,173,-183,174,-183,175,-183,176,-183,59,-183,10,-183,129,-183,143,-183,125,-183,148,-183,147,-183,142,-183,150,-183,41,-183,141,-183,58,-183,146,-183,160,-183,204,-183,44,-183,93,-183,210,-183,161,-183, - 57,0, /* actions: */ 61,-92,46,-434,202,-434,91,-434,43,-434,45,-434,42,-434,47,-434,37,-434,185,-434,124,-434,94,-434,38,-434,186,-434,62,-434,190,-434,60,-434,191,-434,187,-434,188,-434,189,-434,194,-434,195,-434,200,-434,201,-434,192,-434,193,-434,196,-434,197,-434,63,-434,169,-434,170,-434,172,-434,173,-434,174,-434,175,-434,176,-434,59,-434,10,-434,129,-434,143,-434,125,-434,148,-434,147,-434,142,-434,150,-434,41,-434,141,-434,58,-434,146,-434,160,-434,204,-434,44,-434,93,-434,210,-434,161,-434,220,-435, - 108,0, /* actions: */ 46,-423,202,-423,91,-423,43,-423,45,-423,42,-423,47,-423,37,-423,185,-423,124,-423,94,-423,38,-423,186,-423,62,-423,190,-423,60,-423,191,-423,187,-423,188,-423,189,-423,194,-423,195,-423,200,-423,201,-423,192,-423,193,-423,196,-423,197,-423,63,-423,169,-423,170,-423,172,-423,173,-423,174,-423,175,-423,176,-423,59,-423,10,-423,129,-423,61,-423,220,-423,44,-423,143,-423,125,-423,148,-423,147,-423,142,-423,150,-423,41,-423,141,-423,58,-423,146,-423,160,-423,204,-423,93,-423,210,-423,161,-423,158,-423,123,-477,159,-477,40,-477,214,-477,217,-477,216,-477,218,-477,219,-477,166,-477,165,-477,167,-477,168,-477,182,-477,181,-477,221,-477,222,-477,223,-477,235,-477,233,-477,227,-477,229,-477,228,-477,230,-477,231,-477,225,-477,215,-477,203,-477,208,-477,209,-477,163,-477,178,-477,144,-477,145,-477,151,-477,152,-477,149,-477,153,-477,207,-477,205,-477,140,-477,136,-477,137,-477,138,-477,164,-477,183,-477,184,-477,33,-477,126,-477,211,-477,212,-477, - /* default action: */ -424, - /* default action: */ -425, - 108,0, /* actions: */ 46,-426,202,-426,91,-426,43,-426,45,-426,42,-426,47,-426,37,-426,185,-426,124,-426,94,-426,38,-426,186,-426,62,-426,190,-426,60,-426,191,-426,187,-426,188,-426,189,-426,194,-426,195,-426,200,-426,201,-426,192,-426,193,-426,196,-426,197,-426,63,-426,169,-426,170,-426,172,-426,173,-426,174,-426,175,-426,176,-426,59,-426,10,-426,129,-426,61,-426,220,-426,44,-426,143,-426,125,-426,148,-426,147,-426,142,-426,150,-426,41,-426,141,-426,58,-426,146,-426,160,-426,204,-426,93,-426,210,-426,161,-426,158,-426,123,-478,159,-478,40,-478,214,-478,217,-478,216,-478,218,-478,219,-478,166,-478,165,-478,167,-478,168,-478,182,-478,181,-478,221,-478,222,-478,223,-478,235,-478,233,-478,227,-478,229,-478,228,-478,230,-478,231,-478,225,-478,215,-478,203,-478,208,-478,209,-478,163,-478,178,-478,144,-478,145,-478,151,-478,152,-478,149,-478,153,-478,207,-478,205,-478,140,-478,136,-478,137,-478,138,-478,164,-478,183,-478,184,-478,33,-478,126,-478,211,-478,212,-478, - /* default action: */ -427, - /* default action: */ -428, - /* default action: */ -429, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,202,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 176,203,43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-185,170,-185,172,-185,173,-185,174,-185,175,-185,59,-185,10,-185,129,-185,143,-185,125,-185,148,-185,147,-185,142,-185,150,-185,41,-185,141,-185,58,-185,146,-185,160,-185,204,-185,44,-185,93,-185,210,-185,161,-185, + 50,22, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,162,883,154,884,155,885,156,364,157,365, /* gotos: */ -18,204,-8,205,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-186,170,-186,172,-186,173,-186,174,-186,175,-186,176,-186,59,-186,10,-186,129,-186,143,-186,125,-186,148,-186,147,-186,142,-186,150,-186,41,-186,141,-186,58,-186,146,-186,160,-186,204,-186,44,-186,93,-186,210,-186,161,-186, + /* default action: */ -187, + 57,0, /* actions: */ 61,-95,46,-440,202,-440,91,-440,43,-440,45,-440,42,-440,47,-440,37,-440,185,-440,124,-440,94,-440,38,-440,186,-440,62,-440,190,-440,60,-440,191,-440,187,-440,188,-440,189,-440,194,-440,195,-440,200,-440,201,-440,192,-440,193,-440,196,-440,197,-440,63,-440,169,-440,170,-440,172,-440,173,-440,174,-440,175,-440,176,-440,59,-440,10,-440,129,-440,143,-440,125,-440,148,-440,147,-440,142,-440,150,-440,41,-440,141,-440,58,-440,146,-440,160,-440,204,-440,44,-440,93,-440,210,-440,161,-440,220,-441, + 108,0, /* actions: */ 46,-429,202,-429,91,-429,43,-429,45,-429,42,-429,47,-429,37,-429,185,-429,124,-429,94,-429,38,-429,186,-429,62,-429,190,-429,60,-429,191,-429,187,-429,188,-429,189,-429,194,-429,195,-429,200,-429,201,-429,192,-429,193,-429,196,-429,197,-429,63,-429,169,-429,170,-429,172,-429,173,-429,174,-429,175,-429,176,-429,59,-429,10,-429,129,-429,61,-429,220,-429,44,-429,143,-429,125,-429,148,-429,147,-429,142,-429,150,-429,41,-429,141,-429,58,-429,146,-429,160,-429,204,-429,93,-429,210,-429,161,-429,158,-429,123,-483,159,-483,40,-483,214,-483,217,-483,216,-483,218,-483,219,-483,166,-483,165,-483,167,-483,168,-483,182,-483,181,-483,221,-483,222,-483,223,-483,235,-483,233,-483,227,-483,229,-483,228,-483,230,-483,231,-483,225,-483,215,-483,203,-483,208,-483,209,-483,163,-483,178,-483,144,-483,145,-483,151,-483,152,-483,149,-483,153,-483,207,-483,205,-483,140,-483,136,-483,137,-483,138,-483,164,-483,183,-483,184,-483,33,-483,126,-483,211,-483,212,-483, /* default action: */ -430, /* default action: */ -431, - /* default action: */ -432, + 108,0, /* actions: */ 46,-432,202,-432,91,-432,43,-432,45,-432,42,-432,47,-432,37,-432,185,-432,124,-432,94,-432,38,-432,186,-432,62,-432,190,-432,60,-432,191,-432,187,-432,188,-432,189,-432,194,-432,195,-432,200,-432,201,-432,192,-432,193,-432,196,-432,197,-432,63,-432,169,-432,170,-432,172,-432,173,-432,174,-432,175,-432,176,-432,59,-432,10,-432,129,-432,61,-432,220,-432,44,-432,143,-432,125,-432,148,-432,147,-432,142,-432,150,-432,41,-432,141,-432,58,-432,146,-432,160,-432,204,-432,93,-432,210,-432,161,-432,158,-432,123,-484,159,-484,40,-484,214,-484,217,-484,216,-484,218,-484,219,-484,166,-484,165,-484,167,-484,168,-484,182,-484,181,-484,221,-484,222,-484,223,-484,235,-484,233,-484,227,-484,229,-484,228,-484,230,-484,231,-484,225,-484,215,-484,203,-484,208,-484,209,-484,163,-484,178,-484,144,-484,145,-484,151,-484,152,-484,149,-484,153,-484,207,-484,205,-484,140,-484,136,-484,137,-484,138,-484,164,-484,183,-484,184,-484,33,-484,126,-484,211,-484,212,-484, /* default action: */ -433, - 55,0, /* actions: */ 91,218,202,877,46,878,43,-226,45,-226,42,-226,47,-226,37,-226,185,-226,124,-226,94,-226,38,-226,186,-226,62,-226,190,-226,60,-226,191,-226,187,-226,188,-226,189,-226,194,-226,195,-226,200,-226,201,-226,192,-226,193,-226,196,-226,197,-226,63,-226,169,-226,170,-226,172,-226,173,-226,174,-226,175,-226,176,-226,59,-226,10,-226,129,-226,143,-226,125,-226,148,-226,147,-226,142,-226,150,-226,41,-226,141,-226,58,-226,146,-226,160,-226,204,-226,44,-226,93,-226,210,-226,161,-226, - 47,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,557,93,-227, /* gotos: */ -35,219,-25,301,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-16,546,-15,313,-91,200,-90,508,-49,554,-50,556, - 1,0, /* actions: */ 93,220, - 57,0, /* actions: */ 220,221,61,-93,46,-285,202,-285,91,-285,43,-285,45,-285,42,-285,47,-285,37,-285,185,-285,124,-285,94,-285,38,-285,186,-285,62,-285,190,-285,60,-285,191,-285,187,-285,188,-285,189,-285,194,-285,195,-285,200,-285,201,-285,192,-285,193,-285,196,-285,197,-285,63,-285,169,-285,170,-285,172,-285,173,-285,174,-285,175,-285,176,-285,59,-285,10,-285,129,-285,143,-285,125,-285,148,-285,147,-285,142,-285,150,-285,41,-285,141,-285,58,-285,146,-285,160,-285,204,-285,44,-285,93,-285,210,-285,161,-285, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,222,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-185,170,-185,172,-185,173,-185,174,-185,175,-185,176,-185,59,-185,10,-185,129,-185,143,-185,125,-185,148,-185,147,-185,142,-185,150,-185,41,-185,141,-185,58,-185,146,-185,160,-185,204,-185,44,-185,93,-185,210,-185,161,-185, - /* default action: */ -272, - /* default action: */ -417, - /* default action: */ -418, - /* default action: */ -419, - 3,0, /* actions: */ 221,228,222,871,223,874, - 55,0, /* actions: */ 185,229,46,-420,202,-420,91,-420,43,-420,45,-420,42,-420,47,-420,37,-420,124,-420,94,-420,38,-420,186,-420,62,-420,190,-420,60,-420,191,-420,187,-420,188,-420,189,-420,194,-420,195,-420,200,-420,201,-420,192,-420,193,-420,196,-420,197,-420,63,-420,169,-420,170,-420,172,-420,173,-420,174,-420,175,-420,176,-420,59,-420,10,-420,129,-420,143,-420,125,-420,148,-420,147,-420,142,-420,150,-420,41,-420,141,-420,58,-420,146,-420,160,-420,204,-420,44,-420,93,-420,210,-420,161,-420, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,230,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-198,45,-198,42,-198,47,-198,37,-198,185,156,124,-198,94,-198,38,-198,186,-198,62,-198,190,-198,60,-198,191,-198,187,-198,188,-198,189,-198,194,-198,195,-198,200,-198,201,-198,192,-198,193,-198,196,-198,197,-198,63,-198,169,-198,170,-198,172,-198,173,-198,174,-198,175,-198,176,-198,59,-198,10,-198,129,-198,143,-198,125,-198,148,-198,147,-198,142,-198,150,-198,41,-198,141,-198,58,-198,146,-198,160,-198,204,-198,44,-198,93,-198,210,-198,161,-198, - /* default action: */ -273, - 77,5, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,217,119,216,120,219,121,206,-401,224,-401,213,-401,232,-401, /* gotos: */ -77,117,-62,233,-82,118,-81,46,-104,73, - 4,1, /* actions: */ 206,234,224,236,213,237,232,244, /* gotos: */ -61,235, - /* default action: */ -389, - /* default action: */ -402, - /* default action: */ -403, - 0,1, /* default action: */ -404, /* gotos: */ -135,238, - 4,2, /* actions: */ 216,240,225,125,217,242,219,243, /* gotos: */ -60,239,-74,241, - /* default action: */ -405, + /* default action: */ -434, + /* default action: */ -435, + /* default action: */ -436, + /* default action: */ -437, + /* default action: */ -438, + /* default action: */ -439, + 55,0, /* actions: */ 91,219,202,881,46,882,43,-232,45,-232,42,-232,47,-232,37,-232,185,-232,124,-232,94,-232,38,-232,186,-232,62,-232,190,-232,60,-232,191,-232,187,-232,188,-232,189,-232,194,-232,195,-232,200,-232,201,-232,192,-232,193,-232,196,-232,197,-232,63,-232,169,-232,170,-232,172,-232,173,-232,174,-232,175,-232,176,-232,59,-232,10,-232,129,-232,143,-232,125,-232,148,-232,147,-232,142,-232,150,-232,41,-232,141,-232,58,-232,146,-232,160,-232,204,-232,44,-232,93,-232,210,-232,161,-232, + 47,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,561,93,-233, /* gotos: */ -38,220,-28,303,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-19,550,-18,315,-94,200,-93,512,-52,558,-53,560, + 1,0, /* actions: */ 93,221, + 57,0, /* actions: */ 220,222,61,-96,46,-291,202,-291,91,-291,43,-291,45,-291,42,-291,47,-291,37,-291,185,-291,124,-291,94,-291,38,-291,186,-291,62,-291,190,-291,60,-291,191,-291,187,-291,188,-291,189,-291,194,-291,195,-291,200,-291,201,-291,192,-291,193,-291,196,-291,197,-291,63,-291,169,-291,170,-291,172,-291,173,-291,174,-291,175,-291,176,-291,59,-291,10,-291,129,-291,143,-291,125,-291,148,-291,147,-291,142,-291,150,-291,41,-291,141,-291,58,-291,146,-291,160,-291,204,-291,44,-291,93,-291,210,-291,161,-291, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,223,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-189,170,-189,172,-189,173,-189,174,-189,175,-189,176,-189,59,-189,10,-189,129,-189,143,-189,125,-189,148,-189,147,-189,142,-189,150,-189,41,-189,141,-189,58,-189,146,-189,160,-189,204,-189,44,-189,93,-189,210,-189,161,-189, + /* default action: */ -278, + /* default action: */ -423, + /* default action: */ -424, + /* default action: */ -425, + 3,0, /* actions: */ 221,229,222,875,223,878, + 55,0, /* actions: */ 185,230,46,-426,202,-426,91,-426,43,-426,45,-426,42,-426,47,-426,37,-426,124,-426,94,-426,38,-426,186,-426,62,-426,190,-426,60,-426,191,-426,187,-426,188,-426,189,-426,194,-426,195,-426,200,-426,201,-426,192,-426,193,-426,196,-426,197,-426,63,-426,169,-426,170,-426,172,-426,173,-426,174,-426,175,-426,176,-426,59,-426,10,-426,129,-426,143,-426,125,-426,148,-426,147,-426,142,-426,150,-426,41,-426,141,-426,58,-426,146,-426,160,-426,204,-426,44,-426,93,-426,210,-426,161,-426, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,231,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-202,45,-202,42,-202,47,-202,37,-202,185,156,124,-202,94,-202,38,-202,186,-202,62,-202,190,-202,60,-202,191,-202,187,-202,188,-202,189,-202,194,-202,195,-202,200,-202,201,-202,192,-202,193,-202,196,-202,197,-202,63,-202,169,-202,170,-202,172,-202,173,-202,174,-202,175,-202,176,-202,59,-202,10,-202,129,-202,143,-202,125,-202,148,-202,147,-202,142,-202,150,-202,41,-202,141,-202,58,-202,146,-202,160,-202,204,-202,44,-202,93,-202,210,-202,161,-202, + /* default action: */ -279, + 77,5, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,217,119,216,120,219,121,206,-407,224,-407,213,-407,232,-407, /* gotos: */ -80,117,-65,234,-85,118,-84,46,-107,73, + 4,1, /* actions: */ 206,235,224,237,213,238,232,245, /* gotos: */ -64,236, + /* default action: */ -395, /* default action: */ -408, /* default action: */ -409, - /* default action: */ -410, + 0,1, /* default action: */ -410, /* gotos: */ -138,239, + 4,2, /* actions: */ 216,241,225,125,217,243,219,244, /* gotos: */ -63,240,-77,242, /* default action: */ -411, - 0,1, /* default action: */ -406, /* gotos: */ -136,245, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,125,-5, /* gotos: */ -4,246,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 125,247, - /* default action: */ -407, - /* default action: */ -21, - 68,27, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,631,212,484,172,-27,173,-27,174,-27,175,-27,176,-27,59,-27,10,-27,129,-27,143,-27,125,-27,148,-27,147,-27,142,-27,150,-27,41,-27,141,-27,169,-27,170,-27,58,-27,146,-27,160,-27, /* gotos: */ -36,250,-16,251,-15,313,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-49,625,-50,556,-29,634,-25,812, - /* default action: */ -28, - 25,1, /* actions: */ 44,253,172,-269,173,-269,174,-269,175,-269,176,-269,59,-269,10,-269,129,-269,143,-269,125,-269,148,-269,147,-269,142,-269,150,-269,41,-269,141,-269,169,-269,170,-269,58,-269,146,-269,160,-269,210,-269,161,-269,93,-269, /* gotos: */ -30,252, - /* default action: */ -239, - 47,24, /* actions: */ 211,479,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -15,254,-49,618,-29,483,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508,-50,556, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,204,255,44,-271,172,-271,173,-271,174,-271,175,-271,176,-271,59,-271,10,-271,129,-271,143,-271,125,-271,148,-271,147,-271,142,-271,150,-271,41,-271,141,-271,169,-271,170,-271,58,-271,146,-271,160,-271,210,-271,161,-271,93,-271, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,256,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 51,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-476,10,-476,93,-476,172,-476,173,-476,174,-476,175,-476,176,-476,59,-476,129,-476,143,-476,125,-476,148,-476,147,-476,142,-476,150,-476,41,-476,141,-476,169,-476,170,-476,58,-476,146,-476,160,-476,210,-476,161,-476, - /* default action: */ -274, - 56,1, /* actions: */ 227,260,46,-275,202,-275,91,-275,43,-275,45,-275,42,-275,47,-275,37,-275,185,-275,124,-275,94,-275,38,-275,186,-275,62,-275,190,-275,60,-275,191,-275,187,-275,188,-275,189,-275,194,-275,195,-275,200,-275,201,-275,192,-275,193,-275,196,-275,197,-275,63,-275,169,-275,170,-275,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,58,-275,146,-275,160,-275,204,-275,44,-275,93,-275,210,-275,161,-275, /* gotos: */ -63,259, - /* default action: */ -386, - 0,1, /* default action: */ -401, /* gotos: */ -62,261, - 4,1, /* actions: */ 206,262,224,236,213,237,232,244, /* gotos: */ -61,235, - /* default action: */ -387, - /* default action: */ -385, - /* default action: */ -276, - 0,1, /* default action: */ -401, /* gotos: */ -62,266, - 4,1, /* actions: */ 206,267,224,236,213,237,232,244, /* gotos: */ -61,235, - /* default action: */ -388, - /* default action: */ -277, - 0,1, /* default action: */ -401, /* gotos: */ -62,270, - 4,1, /* actions: */ 226,271,224,236,213,237,232,244, /* gotos: */ -61,235, - /* default action: */ -390, - /* default action: */ -278, - 5,1, /* actions: */ 135,274,206,-393,224,-393,213,-393,232,-393, /* gotos: */ -67,276, - 1,0, /* actions: */ 206,275, + /* default action: */ -414, + /* default action: */ -415, + /* default action: */ -416, + /* default action: */ -417, + 0,1, /* default action: */ -412, /* gotos: */ -139,246, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,125,-5, /* gotos: */ -4,247,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 125,248, + /* default action: */ -413, + /* default action: */ -16, + /* default action: */ -23, + 68,27, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,635,212,488,172,-28,173,-28,174,-28,175,-28,176,-28,59,-28,10,-28,129,-28,143,-28,125,-28,148,-28,147,-28,142,-28,150,-28,41,-28,141,-28,169,-28,170,-28,58,-28,146,-28,160,-28, /* gotos: */ -39,252,-19,253,-18,315,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-52,629,-53,560,-32,638,-28,816, + /* default action: */ -25, + 25,1, /* actions: */ 44,255,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,169,-275,170,-275,58,-275,146,-275,160,-275,210,-275,161,-275,93,-275, /* gotos: */ -33,254, + /* default action: */ -245, + 47,24, /* actions: */ 211,483,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -18,256,-52,622,-32,487,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512,-53,560, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,204,257,44,-277,172,-277,173,-277,174,-277,175,-277,176,-277,59,-277,10,-277,129,-277,143,-277,125,-277,148,-277,147,-277,142,-277,150,-277,41,-277,141,-277,169,-277,170,-277,58,-277,146,-277,160,-277,210,-277,161,-277,93,-277, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,258,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 51,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-482,10,-482,93,-482,172,-482,173,-482,174,-482,175,-482,176,-482,59,-482,129,-482,143,-482,125,-482,148,-482,147,-482,142,-482,150,-482,41,-482,141,-482,169,-482,170,-482,58,-482,146,-482,160,-482,210,-482,161,-482, + /* default action: */ -280, + 56,1, /* actions: */ 227,262,46,-281,202,-281,91,-281,43,-281,45,-281,42,-281,47,-281,37,-281,185,-281,124,-281,94,-281,38,-281,186,-281,62,-281,190,-281,60,-281,191,-281,187,-281,188,-281,189,-281,194,-281,195,-281,200,-281,201,-281,192,-281,193,-281,196,-281,197,-281,63,-281,169,-281,170,-281,172,-281,173,-281,174,-281,175,-281,176,-281,59,-281,10,-281,129,-281,143,-281,125,-281,148,-281,147,-281,142,-281,150,-281,41,-281,141,-281,58,-281,146,-281,160,-281,204,-281,44,-281,93,-281,210,-281,161,-281, /* gotos: */ -66,261, + /* default action: */ -392, + 0,1, /* default action: */ -407, /* gotos: */ -65,263, + 4,1, /* actions: */ 206,264,224,237,213,238,232,245, /* gotos: */ -64,236, + /* default action: */ -393, /* default action: */ -391, - 4,2, /* actions: */ 206,277,224,236,213,237,232,244, /* gotos: */ -66,278,-61,281, - /* default action: */ -392, - 4,1, /* actions: */ 135,279,224,236,213,237,232,244, /* gotos: */ -61,280, + /* default action: */ -282, + 0,1, /* default action: */ -407, /* gotos: */ -65,268, + 4,1, /* actions: */ 206,269,224,237,213,238,232,245, /* gotos: */ -64,236, /* default action: */ -394, + /* default action: */ -283, + 0,1, /* default action: */ -407, /* gotos: */ -65,272, + 4,1, /* actions: */ 226,273,224,237,213,238,232,245, /* gotos: */ -64,236, /* default action: */ -396, - /* default action: */ -395, - /* default action: */ -279, - 3,1, /* actions: */ 135,284,206,-399,224,-399, /* gotos: */ -68,286, - 1,0, /* actions: */ 206,285, + /* default action: */ -284, + 5,1, /* actions: */ 135,276,206,-399,224,-399,213,-399,232,-399, /* gotos: */ -70,278, + 1,0, /* actions: */ 206,277, /* default action: */ -397, - 2,0, /* actions: */ 206,287,224,288, + 4,2, /* actions: */ 206,279,224,237,213,238,232,245, /* gotos: */ -69,280,-64,283, /* default action: */ -398, - 1,0, /* actions: */ 135,289, + 4,1, /* actions: */ 135,281,224,237,213,238,232,245, /* gotos: */ -64,282, /* default action: */ -400, - /* default action: */ -280, - 57,0, /* actions: */ 220,292,46,-281,202,-281,91,-281,43,-281,45,-281,42,-281,47,-281,37,-281,185,-281,124,-281,94,-281,38,-281,186,-281,62,-281,190,-281,60,-281,191,-281,187,-281,188,-281,189,-281,194,-281,195,-281,200,-281,201,-281,192,-281,193,-281,196,-281,197,-281,63,-281,169,-281,170,-281,172,-281,173,-281,174,-281,175,-281,176,-281,59,-281,10,-281,129,-281,143,-281,125,-281,148,-281,147,-281,142,-281,150,-281,41,-281,141,-281,58,-281,146,-281,160,-281,204,-281,44,-281,93,-281,210,-281,161,-281,61,-99, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,145,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 105,0, /* actions: */ 46,-282,202,-282,91,-282,43,-282,45,-282,42,-282,47,-282,37,-282,185,-282,124,-282,94,-282,38,-282,186,-282,62,-282,190,-282,60,-282,191,-282,187,-282,188,-282,189,-282,194,-282,195,-282,200,-282,201,-282,192,-282,193,-282,196,-282,197,-282,63,-282,169,-282,170,-282,172,-282,173,-282,174,-282,175,-282,176,-282,59,-282,10,-282,129,-282,143,-282,125,-282,148,-282,147,-282,142,-282,150,-282,41,-282,141,-282,58,-282,146,-282,160,-282,204,-282,44,-282,93,-282,210,-282,161,-282,123,-479,159,-479,40,-479,214,-479,217,-479,216,-479,218,-479,219,-479,166,-479,165,-479,167,-479,168,-479,182,-479,181,-479,221,-479,222,-479,223,-479,235,-479,233,-479,227,-479,229,-479,228,-479,230,-479,231,-479,225,-479,215,-479,203,-479,208,-479,209,-479,163,-479,178,-479,144,-479,145,-479,151,-479,152,-479,149,-479,153,-479,207,-479,205,-479,140,-479,136,-479,137,-479,138,-479,164,-479,183,-479,184,-479,33,-479,126,-479,211,-479,212,-479, - 1,0, /* actions: */ 218,295, - 57,0, /* actions: */ 220,296,46,-284,202,-284,91,-284,43,-284,45,-284,42,-284,47,-284,37,-284,185,-284,124,-284,94,-284,38,-284,186,-284,62,-284,190,-284,60,-284,191,-284,187,-284,188,-284,189,-284,194,-284,195,-284,200,-284,201,-284,192,-284,193,-284,196,-284,197,-284,63,-284,169,-284,170,-284,172,-284,173,-284,174,-284,175,-284,176,-284,59,-284,10,-284,129,-284,143,-284,125,-284,148,-284,147,-284,142,-284,150,-284,41,-284,141,-284,58,-284,146,-284,160,-284,204,-284,44,-284,93,-284,210,-284,161,-284,61,-98, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,297,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-190,170,-190,172,-190,173,-190,174,-190,175,-190,176,-190,59,-190,10,-190,129,-190,143,-190,125,-190,148,-190,147,-190,142,-190,150,-190,41,-190,141,-190,58,-190,146,-190,160,-190,204,-190,44,-190,93,-190,210,-190,161,-190, - 47,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,557,93,-227, /* gotos: */ -35,299,-25,301,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-16,546,-15,313,-91,200,-90,508,-49,554,-50,556, - 1,0, /* actions: */ 93,300, + /* default action: */ -402, + /* default action: */ -401, + /* default action: */ -285, + 3,1, /* actions: */ 135,286,206,-405,224,-405, /* gotos: */ -71,288, + 1,0, /* actions: */ 206,287, + /* default action: */ -403, + 2,0, /* actions: */ 206,289,224,290, + /* default action: */ -404, + 1,0, /* actions: */ 135,291, + /* default action: */ -406, /* default action: */ -286, - 2,1, /* actions: */ 10,303,93,-491, /* gotos: */ -106,302, - /* default action: */ -228, - /* default action: */ -492, - 55,0, /* actions: */ 46,305,202,867,91,218,43,-226,45,-226,42,-226,47,-226,37,-226,185,-226,124,-226,94,-226,38,-226,186,-226,62,-226,190,-226,60,-226,191,-226,187,-226,188,-226,189,-226,194,-226,195,-226,200,-226,201,-226,192,-226,193,-226,196,-226,197,-226,63,-226,169,-226,170,-226,172,-226,173,-226,174,-226,175,-226,176,-226,59,-226,10,-226,129,-226,143,-226,125,-226,148,-226,147,-226,142,-226,150,-226,41,-226,141,-226,58,-226,146,-226,160,-226,204,-226,44,-226,93,-226,210,-226,161,-226, - 29,2, /* actions: */ 214,863,218,865,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,306,-81,470, - 105,4, /* actions: */ 40,455,214,-260,217,-260,216,-260,218,-260,219,-260,166,-260,165,-260,167,-260,168,-260,182,-260,181,-260,221,-260,222,-260,223,-260,235,-260,233,-260,227,-260,229,-260,228,-260,230,-260,231,-260,225,-260,215,-260,203,-260,208,-260,209,-260,163,-260,178,-260,144,-260,145,-260,151,-260,152,-260,149,-260,153,-260,207,-260,205,-260,140,-260,136,-260,137,-260,138,-260,164,-260,183,-260,184,-260,33,-260,126,-260,211,-260,212,-260,123,-237,159,-237,46,-237,202,-237,91,-237,43,-237,45,-237,42,-237,47,-237,37,-237,185,-237,124,-237,94,-237,38,-237,186,-237,62,-237,190,-237,60,-237,191,-237,187,-237,188,-237,189,-237,194,-237,195,-237,200,-237,201,-237,192,-237,193,-237,196,-237,197,-237,63,-237,169,-237,170,-237,172,-237,173,-237,174,-237,175,-237,176,-237,59,-237,10,-237,129,-237,143,-237,125,-237,148,-237,147,-237,142,-237,150,-237,41,-237,141,-237,58,-237,146,-237,160,-237,204,-237,44,-237,93,-237,210,-237,161,-237, /* gotos: */ -41,307,-40,309,-108,310,-39,466, - 24,1, /* actions: */ 210,31,161,-67,169,-67,170,-67,172,-67,173,-67,174,-67,175,-67,176,-67,59,-67,10,-67,129,-67,143,-67,125,-67,148,-67,147,-67,142,-67,150,-67,41,-67,141,-67,58,-67,146,-67,160,-67,93,-67, /* gotos: */ -31,308, - /* default action: */ -68, - /* default action: */ -356, - 47,28, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,823,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,631,212,484, /* gotos: */ -38,311,-36,312,-16,251,-15,313,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-49,625,-50,556,-29,634,-25,812, - /* default action: */ -261, - /* default action: */ -262, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,204,255,44,-270,10,-270,93,-270,172,-270,173,-270,174,-270,175,-270,176,-270,59,-270,129,-270,143,-270,125,-270,148,-270,147,-270,142,-270,150,-270,41,-270,141,-270,169,-270,170,-270,58,-270,146,-270,160,-270,210,-270,161,-270, - 46,24, /* actions: */ 125,315,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -49,316,-16,819,-50,556,-15,313,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - /* default action: */ -287, - 3,1, /* actions: */ 44,319,10,553,125,-493, /* gotos: */ -107,317, - 1,0, /* actions: */ 125,318, - /* default action: */ -288, - 47,22, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,125,-495,93,-495, /* gotos: */ -50,320,-15,321,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - /* default action: */ -475, - 27,0, /* actions: */ 204,255,43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196, - 56,0, /* actions: */ 40,323,91,-292,202,-292,46,-292,43,-292,45,-292,42,-292,47,-292,37,-292,185,-292,124,-292,94,-292,38,-292,186,-292,62,-292,190,-292,60,-292,191,-292,187,-292,188,-292,189,-292,194,-292,195,-292,200,-292,201,-292,192,-292,193,-292,196,-292,197,-292,63,-292,169,-292,170,-292,172,-292,173,-292,174,-292,175,-292,176,-292,59,-292,10,-292,129,-292,143,-292,125,-292,148,-292,147,-292,142,-292,150,-292,41,-292,141,-292,58,-292,146,-292,160,-292,204,-292,44,-292,93,-292,210,-292,161,-292, - 48,27, /* actions: */ 41,326,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,631,212,484, /* gotos: */ -36,324,-16,251,-15,313,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-49,625,-50,556,-29,634,-25,812, - 1,0, /* actions: */ 41,325, - /* default action: */ -290, - /* default action: */ -291, - 103,2, /* actions: */ 40,323,46,-292,202,-292,91,-292,43,-292,45,-292,42,-292,47,-292,37,-292,185,-292,124,-292,94,-292,38,-292,186,-292,62,-292,190,-292,60,-292,191,-292,187,-292,188,-292,189,-292,194,-292,195,-292,200,-292,201,-292,192,-292,193,-292,196,-292,197,-292,63,-292,169,-292,170,-292,172,-292,173,-292,174,-292,175,-292,176,-292,59,-292,10,-292,129,-292,143,-292,125,-292,148,-292,147,-292,142,-292,150,-292,41,-292,141,-292,58,-292,146,-292,160,-292,204,-292,44,-292,93,-292,210,-292,161,-292,214,-260,217,-260,216,-260,218,-260,219,-260,166,-260,165,-260,167,-260,168,-260,182,-260,181,-260,221,-260,222,-260,223,-260,235,-260,233,-260,227,-260,229,-260,228,-260,230,-260,231,-260,225,-260,215,-260,203,-260,208,-260,209,-260,163,-260,178,-260,144,-260,145,-260,151,-260,152,-260,149,-260,153,-260,207,-260,205,-260,140,-260,136,-260,137,-260,138,-260,164,-260,183,-260,184,-260,33,-260,126,-260,211,-260,212,-260, /* gotos: */ -41,328,-108,310, - /* default action: */ -72, - 47,1, /* actions: */ 10,303,40,-491,214,-491,217,-491,216,-491,218,-491,219,-491,166,-491,165,-491,167,-491,168,-491,182,-491,181,-491,221,-491,222,-491,223,-491,235,-491,233,-491,227,-491,229,-491,228,-491,230,-491,231,-491,225,-491,215,-491,203,-491,208,-491,209,-491,163,-491,178,-491,144,-491,145,-491,151,-491,152,-491,149,-491,153,-491,207,-491,205,-491,140,-491,136,-491,137,-491,138,-491,164,-491,183,-491,184,-491,33,-491,126,-491, /* gotos: */ -106,330, - 46,21, /* actions: */ 40,331,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,818,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,332,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 3,0, /* actions: */ 41,333,169,11,170,13, + 57,0, /* actions: */ 220,294,46,-287,202,-287,91,-287,43,-287,45,-287,42,-287,47,-287,37,-287,185,-287,124,-287,94,-287,38,-287,186,-287,62,-287,190,-287,60,-287,191,-287,187,-287,188,-287,189,-287,194,-287,195,-287,200,-287,201,-287,192,-287,193,-287,196,-287,197,-287,63,-287,169,-287,170,-287,172,-287,173,-287,174,-287,175,-287,176,-287,59,-287,10,-287,129,-287,143,-287,125,-287,148,-287,147,-287,142,-287,150,-287,41,-287,141,-287,58,-287,146,-287,160,-287,204,-287,44,-287,93,-287,210,-287,161,-287,61,-102, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,145,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 105,0, /* actions: */ 46,-288,202,-288,91,-288,43,-288,45,-288,42,-288,47,-288,37,-288,185,-288,124,-288,94,-288,38,-288,186,-288,62,-288,190,-288,60,-288,191,-288,187,-288,188,-288,189,-288,194,-288,195,-288,200,-288,201,-288,192,-288,193,-288,196,-288,197,-288,63,-288,169,-288,170,-288,172,-288,173,-288,174,-288,175,-288,176,-288,59,-288,10,-288,129,-288,143,-288,125,-288,148,-288,147,-288,142,-288,150,-288,41,-288,141,-288,58,-288,146,-288,160,-288,204,-288,44,-288,93,-288,210,-288,161,-288,123,-485,159,-485,40,-485,214,-485,217,-485,216,-485,218,-485,219,-485,166,-485,165,-485,167,-485,168,-485,182,-485,181,-485,221,-485,222,-485,223,-485,235,-485,233,-485,227,-485,229,-485,228,-485,230,-485,231,-485,225,-485,215,-485,203,-485,208,-485,209,-485,163,-485,178,-485,144,-485,145,-485,151,-485,152,-485,149,-485,153,-485,207,-485,205,-485,140,-485,136,-485,137,-485,138,-485,164,-485,183,-485,184,-485,33,-485,126,-485,211,-485,212,-485, + 1,0, /* actions: */ 218,297, + 57,0, /* actions: */ 220,298,46,-290,202,-290,91,-290,43,-290,45,-290,42,-290,47,-290,37,-290,185,-290,124,-290,94,-290,38,-290,186,-290,62,-290,190,-290,60,-290,191,-290,187,-290,188,-290,189,-290,194,-290,195,-290,200,-290,201,-290,192,-290,193,-290,196,-290,197,-290,63,-290,169,-290,170,-290,172,-290,173,-290,174,-290,175,-290,176,-290,59,-290,10,-290,129,-290,143,-290,125,-290,148,-290,147,-290,142,-290,150,-290,41,-290,141,-290,58,-290,146,-290,160,-290,204,-290,44,-290,93,-290,210,-290,161,-290,61,-101, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,299,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-194,170,-194,172,-194,173,-194,174,-194,175,-194,176,-194,59,-194,10,-194,129,-194,143,-194,125,-194,148,-194,147,-194,142,-194,150,-194,41,-194,141,-194,58,-194,146,-194,160,-194,204,-194,44,-194,93,-194,210,-194,161,-194, + 47,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,561,93,-233, /* gotos: */ -38,301,-28,303,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-19,550,-18,315,-94,200,-93,512,-52,558,-53,560, + 1,0, /* actions: */ 93,302, + /* default action: */ -292, + 2,1, /* actions: */ 10,305,93,-497, /* gotos: */ -109,304, + /* default action: */ -234, + /* default action: */ -498, + 55,0, /* actions: */ 46,307,202,871,91,219,43,-232,45,-232,42,-232,47,-232,37,-232,185,-232,124,-232,94,-232,38,-232,186,-232,62,-232,190,-232,60,-232,191,-232,187,-232,188,-232,189,-232,194,-232,195,-232,200,-232,201,-232,192,-232,193,-232,196,-232,197,-232,63,-232,169,-232,170,-232,172,-232,173,-232,174,-232,175,-232,176,-232,59,-232,10,-232,129,-232,143,-232,125,-232,148,-232,147,-232,142,-232,150,-232,41,-232,141,-232,58,-232,146,-232,160,-232,204,-232,44,-232,93,-232,210,-232,161,-232, + 29,2, /* actions: */ 214,867,218,869,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,308,-84,474, + 105,4, /* actions: */ 40,459,214,-266,217,-266,216,-266,218,-266,219,-266,166,-266,165,-266,167,-266,168,-266,182,-266,181,-266,221,-266,222,-266,223,-266,235,-266,233,-266,227,-266,229,-266,228,-266,230,-266,231,-266,225,-266,215,-266,203,-266,208,-266,209,-266,163,-266,178,-266,144,-266,145,-266,151,-266,152,-266,149,-266,153,-266,207,-266,205,-266,140,-266,136,-266,137,-266,138,-266,164,-266,183,-266,184,-266,33,-266,126,-266,211,-266,212,-266,123,-243,159,-243,46,-243,202,-243,91,-243,43,-243,45,-243,42,-243,47,-243,37,-243,185,-243,124,-243,94,-243,38,-243,186,-243,62,-243,190,-243,60,-243,191,-243,187,-243,188,-243,189,-243,194,-243,195,-243,200,-243,201,-243,192,-243,193,-243,196,-243,197,-243,63,-243,169,-243,170,-243,172,-243,173,-243,174,-243,175,-243,176,-243,59,-243,10,-243,129,-243,143,-243,125,-243,148,-243,147,-243,142,-243,150,-243,41,-243,141,-243,58,-243,146,-243,160,-243,204,-243,44,-243,93,-243,210,-243,161,-243, /* gotos: */ -44,309,-43,311,-111,312,-42,470, + 24,1, /* actions: */ 210,31,161,-70,169,-70,170,-70,172,-70,173,-70,174,-70,175,-70,176,-70,59,-70,10,-70,129,-70,143,-70,125,-70,148,-70,147,-70,142,-70,150,-70,41,-70,141,-70,58,-70,146,-70,160,-70,93,-70, /* gotos: */ -34,310, + /* default action: */ -71, + /* default action: */ -362, + 47,28, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,827,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,635,212,488, /* gotos: */ -41,313,-39,314,-19,253,-18,315,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-52,629,-53,560,-32,638,-28,816, + /* default action: */ -267, + /* default action: */ -268, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,204,257,44,-276,10,-276,93,-276,172,-276,173,-276,174,-276,175,-276,176,-276,59,-276,129,-276,143,-276,125,-276,148,-276,147,-276,142,-276,150,-276,41,-276,141,-276,169,-276,170,-276,58,-276,146,-276,160,-276,210,-276,161,-276, + 46,24, /* actions: */ 125,317,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -52,318,-19,823,-53,560,-18,315,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, /* default action: */ -293, - 57,1, /* actions: */ 123,336,159,489,46,-295,202,-295,91,-295,43,-295,45,-295,42,-295,47,-295,37,-295,185,-295,124,-295,94,-295,38,-295,186,-295,62,-295,190,-295,60,-295,191,-295,187,-295,188,-295,189,-295,194,-295,195,-295,200,-295,201,-295,192,-295,193,-295,196,-295,197,-295,63,-295,169,-295,170,-295,172,-295,173,-295,174,-295,175,-295,176,-295,59,-295,10,-295,129,-295,143,-295,125,-295,148,-295,147,-295,142,-295,150,-295,41,-295,141,-295,58,-295,146,-295,160,-295,204,-295,44,-295,93,-295,210,-295,161,-295, /* gotos: */ -32,335, + 3,1, /* actions: */ 44,321,10,557,125,-499, /* gotos: */ -110,319, + 1,0, /* actions: */ 125,320, + /* default action: */ -294, + 47,22, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,125,-501,93,-501, /* gotos: */ -53,322,-18,323,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + /* default action: */ -481, + 27,0, /* actions: */ 204,257,43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196, + 56,0, /* actions: */ 40,325,91,-298,202,-298,46,-298,43,-298,45,-298,42,-298,47,-298,37,-298,185,-298,124,-298,94,-298,38,-298,186,-298,62,-298,190,-298,60,-298,191,-298,187,-298,188,-298,189,-298,194,-298,195,-298,200,-298,201,-298,192,-298,193,-298,196,-298,197,-298,63,-298,169,-298,170,-298,172,-298,173,-298,174,-298,175,-298,176,-298,59,-298,10,-298,129,-298,143,-298,125,-298,148,-298,147,-298,142,-298,150,-298,41,-298,141,-298,58,-298,146,-298,160,-298,204,-298,44,-298,93,-298,210,-298,161,-298, + 48,27, /* actions: */ 41,328,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,635,212,488, /* gotos: */ -39,326,-19,253,-18,315,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-52,629,-53,560,-32,638,-28,816, + 1,0, /* actions: */ 41,327, /* default action: */ -296, - 0,1, /* default action: */ -361, /* gotos: */ -131,337, - 62,1, /* actions: */ 124,597,193,617,177,-345,139,-345,179,-345,180,-345,225,-345,162,-345,154,-345,155,-345,156,-345,157,-345,214,-345,218,-345,215,-345,221,-345,222,-345,223,-345,235,-345,233,-345,227,-345,229,-345,228,-345,230,-345,231,-345,217,-345,216,-345,219,-345,166,-345,165,-345,167,-345,168,-345,182,-345,181,-345,203,-345,208,-345,209,-345,163,-345,178,-345,144,-345,145,-345,151,-345,152,-345,149,-345,153,-345,207,-345,205,-345,140,-345,136,-345,137,-345,138,-345,164,-345,171,-345,33,-345,183,-345,184,-345,126,-345,211,-345,128,-345,125,-345,59,-345,10,-345, /* gotos: */ -93,338, - 0,1, /* default action: */ -362, /* gotos: */ -132,339, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,125,-5, /* gotos: */ -4,340,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 125,341, - /* default action: */ -363, - 68,27, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,631,212,484,172,-29,173,-29,174,-29,175,-29,176,-29,59,-29,10,-29,129,-29,143,-29,125,-29,148,-29,147,-29,142,-29,150,-29,41,-29,141,-29,169,-29,170,-29,58,-29,146,-29,160,-29, /* gotos: */ -36,343,-16,251,-15,313,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-49,625,-50,556,-29,634,-25,812, - /* default action: */ -30, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,345,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 6,2, /* actions: */ 169,11,170,13,59,682,10,683,58,749,146,750, /* gotos: */ -111,346,-122,747, - 62,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,148,-5,147,-5,143,-5, /* gotos: */ -4,347,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 3,2, /* actions: */ 148,351,147,813,143,-341, /* gotos: */ -27,348,-26,350, - 1,0, /* actions: */ 143,349, /* default action: */ -297, - /* default action: */ -339, - 61,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,143,-5,142,-5, /* gotos: */ -4,352,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - /* default action: */ -342, - 68,27, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,631,212,484,172,-31,173,-31,174,-31,175,-31,176,-31,59,-31,10,-31,129,-31,143,-31,125,-31,148,-31,147,-31,142,-31,150,-31,41,-31,141,-31,169,-31,170,-31,58,-31,146,-31,160,-31, /* gotos: */ -36,354,-16,251,-15,313,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-49,625,-50,556,-29,634,-25,812, + 103,2, /* actions: */ 40,325,46,-298,202,-298,91,-298,43,-298,45,-298,42,-298,47,-298,37,-298,185,-298,124,-298,94,-298,38,-298,186,-298,62,-298,190,-298,60,-298,191,-298,187,-298,188,-298,189,-298,194,-298,195,-298,200,-298,201,-298,192,-298,193,-298,196,-298,197,-298,63,-298,169,-298,170,-298,172,-298,173,-298,174,-298,175,-298,176,-298,59,-298,10,-298,129,-298,143,-298,125,-298,148,-298,147,-298,142,-298,150,-298,41,-298,141,-298,58,-298,146,-298,160,-298,204,-298,44,-298,93,-298,210,-298,161,-298,214,-266,217,-266,216,-266,218,-266,219,-266,166,-266,165,-266,167,-266,168,-266,182,-266,181,-266,221,-266,222,-266,223,-266,235,-266,233,-266,227,-266,229,-266,228,-266,230,-266,231,-266,225,-266,215,-266,203,-266,208,-266,209,-266,163,-266,178,-266,144,-266,145,-266,151,-266,152,-266,149,-266,153,-266,207,-266,205,-266,140,-266,136,-266,137,-266,138,-266,164,-266,183,-266,184,-266,33,-266,126,-266,211,-266,212,-266, /* gotos: */ -44,330,-111,312, + /* default action: */ -75, + 47,1, /* actions: */ 10,305,40,-497,214,-497,217,-497,216,-497,218,-497,219,-497,166,-497,165,-497,167,-497,168,-497,182,-497,181,-497,221,-497,222,-497,223,-497,235,-497,233,-497,227,-497,229,-497,228,-497,230,-497,231,-497,225,-497,215,-497,203,-497,208,-497,209,-497,163,-497,178,-497,144,-497,145,-497,151,-497,152,-497,149,-497,153,-497,207,-497,205,-497,140,-497,136,-497,137,-497,138,-497,164,-497,183,-497,184,-497,33,-497,126,-497, /* gotos: */ -109,332, + 46,21, /* actions: */ 40,333,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,822,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,334,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 3,0, /* actions: */ 41,335,169,11,170,13, + /* default action: */ -299, + 57,1, /* actions: */ 123,338,159,493,46,-301,202,-301,91,-301,43,-301,45,-301,42,-301,47,-301,37,-301,185,-301,124,-301,94,-301,38,-301,186,-301,62,-301,190,-301,60,-301,191,-301,187,-301,188,-301,189,-301,194,-301,195,-301,200,-301,201,-301,192,-301,193,-301,196,-301,197,-301,63,-301,169,-301,170,-301,172,-301,173,-301,174,-301,175,-301,176,-301,59,-301,10,-301,129,-301,143,-301,125,-301,148,-301,147,-301,142,-301,150,-301,41,-301,141,-301,58,-301,146,-301,160,-301,204,-301,44,-301,93,-301,210,-301,161,-301, /* gotos: */ -35,337, + /* default action: */ -302, + 0,1, /* default action: */ -367, /* gotos: */ -134,339, + 62,1, /* actions: */ 124,601,193,621,177,-351,139,-351,179,-351,180,-351,225,-351,162,-351,154,-351,155,-351,156,-351,157,-351,214,-351,218,-351,215,-351,221,-351,222,-351,223,-351,235,-351,233,-351,227,-351,229,-351,228,-351,230,-351,231,-351,217,-351,216,-351,219,-351,166,-351,165,-351,167,-351,168,-351,182,-351,181,-351,203,-351,208,-351,209,-351,163,-351,178,-351,144,-351,145,-351,151,-351,152,-351,149,-351,153,-351,207,-351,205,-351,140,-351,136,-351,137,-351,138,-351,164,-351,171,-351,33,-351,183,-351,184,-351,126,-351,211,-351,128,-351,125,-351,59,-351,10,-351, /* gotos: */ -96,340, + 0,1, /* default action: */ -368, /* gotos: */ -135,341, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,125,-5, /* gotos: */ -4,342,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 125,343, + /* default action: */ -369, + 68,27, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,635,212,488,172,-29,173,-29,174,-29,175,-29,176,-29,59,-29,10,-29,129,-29,143,-29,125,-29,148,-29,147,-29,142,-29,150,-29,41,-29,141,-29,169,-29,170,-29,58,-29,146,-29,160,-29, /* gotos: */ -39,345,-19,253,-18,315,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-52,629,-53,560,-32,638,-28,816, + /* default action: */ -26, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,347,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 6,2, /* actions: */ 169,11,170,13,59,686,10,687,58,753,146,754, /* gotos: */ -114,348,-125,751, + 62,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,148,-5,147,-5,143,-5, /* gotos: */ -4,349,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 3,2, /* actions: */ 148,353,147,817,143,-347, /* gotos: */ -30,350,-29,352, + 1,0, /* actions: */ 143,351, + /* default action: */ -303, + /* default action: */ -345, + 61,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,143,-5,142,-5, /* gotos: */ -4,354,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + /* default action: */ -348, + 68,27, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,635,212,488,172,-30,173,-30,174,-30,175,-30,176,-30,59,-30,10,-30,129,-30,143,-30,125,-30,148,-30,147,-30,142,-30,150,-30,41,-30,141,-30,169,-30,170,-30,58,-30,146,-30,160,-30, /* gotos: */ -39,356,-19,253,-18,315,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-52,629,-53,560,-32,638,-28,816, + /* default action: */ -27, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,358,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 6,2, /* actions: */ 169,11,170,13,59,686,10,687,58,753,146,754, /* gotos: */ -114,359,-125,751, + 61,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,148,-5,143,-5, /* gotos: */ -4,360,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 2,1, /* actions: */ 148,353,143,-347, /* gotos: */ -29,361, + 1,0, /* actions: */ 143,362, + /* default action: */ -304, + /* default action: */ -24, + /* default action: */ -31, /* default action: */ -32, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,356,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 6,2, /* actions: */ 169,11,170,13,59,682,10,683,58,749,146,750, /* gotos: */ -111,357,-122,747, - 61,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,148,-5,143,-5, /* gotos: */ -4,358,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 2,1, /* actions: */ 148,351,143,-341, /* gotos: */ -26,359, - 1,0, /* actions: */ 143,360, - /* default action: */ -298, - /* default action: */ -33, - /* default action: */ -34, - /* default action: */ -22, - 18,0, /* actions: */ 169,11,170,13,172,-35,173,-35,174,-35,175,-35,176,-35,59,-35,10,-35,129,-35,143,-35,125,-35,148,-35,147,-35,142,-35,150,-35,41,-35,141,-35, - 47,0, /* actions: */ 46,366,202,796,91,807,43,-226,45,-226,42,-226,47,-226,37,-226,185,-226,124,-226,94,-226,38,-226,186,-226,62,-226,190,-226,60,-226,191,-226,187,-226,188,-226,189,-226,194,-226,195,-226,200,-226,201,-226,192,-226,193,-226,196,-226,197,-226,63,-226,169,-226,170,-226,172,-226,173,-226,174,-226,175,-226,176,-226,59,-226,10,-226,129,-226,143,-226,125,-226,148,-226,147,-226,142,-226,150,-226,41,-226,141,-226, - 29,2, /* actions: */ 214,367,218,792,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,306,-81,470, - 100,0, /* actions: */ 220,368,61,-94,44,-86,40,-480,214,-480,217,-480,216,-480,218,-480,219,-480,166,-480,165,-480,167,-480,168,-480,182,-480,181,-480,221,-480,222,-480,223,-480,235,-480,233,-480,227,-480,229,-480,228,-480,230,-480,231,-480,225,-480,215,-480,203,-480,208,-480,209,-480,163,-480,178,-480,144,-480,145,-480,151,-480,152,-480,149,-480,153,-480,207,-480,205,-480,140,-480,136,-480,137,-480,138,-480,164,-480,183,-480,184,-480,33,-480,126,-480,211,-480,212,-480,123,-480,159,-480,46,-480,202,-480,91,-480,43,-480,45,-480,42,-480,47,-480,37,-480,185,-480,124,-480,94,-480,38,-480,186,-480,62,-480,190,-480,60,-480,191,-480,187,-480,188,-480,189,-480,194,-480,195,-480,200,-480,201,-480,192,-480,193,-480,196,-480,197,-480,63,-480,169,-480,170,-480,172,-480,173,-480,174,-480,175,-480,176,-480,59,-480,10,-480,129,-480,143,-480,125,-480,148,-480,147,-480,142,-480,150,-480,41,-480,141,-480, - 45,25, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517, /* gotos: */ -15,369,-23,370,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-25,17,-24,495,-22,496, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-186,170,-186,172,-186,173,-186,174,-186,175,-186,176,-186,59,-186,10,-186,129,-186,143,-186,125,-186,148,-186,147,-186,142,-186,150,-186,41,-186,141,-186,58,-186,146,-186,160,-186,204,-186,44,-186,93,-186,210,-186,161,-186, - /* default action: */ -40, - 0,1, /* default action: */ -299, /* gotos: */ -112,372, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,373,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 6,2, /* actions: */ 169,11,170,13,59,682,10,683,58,771,160,772, /* gotos: */ -113,374,-122,770, - 0,1, /* default action: */ -300, /* gotos: */ -114,375, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,143,-5, /* gotos: */ -4,376,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,377, - /* default action: */ -301, - 50,0, /* actions: */ 46,-434,202,-434,91,-434,43,-434,45,-434,42,-434,47,-434,37,-434,185,-434,124,-434,94,-434,38,-434,186,-434,62,-434,190,-434,60,-434,191,-434,187,-434,188,-434,189,-434,194,-434,195,-434,200,-434,201,-434,192,-434,193,-434,196,-434,197,-434,63,-434,169,-434,170,-434,172,-434,173,-434,174,-434,175,-434,176,-434,59,-434,10,-434,129,-434,143,-434,125,-434,148,-434,147,-434,142,-434,150,-434,41,-434,141,-434,61,-92,220,-435,44,-84, - 1,0, /* actions: */ 218,380, - 50,0, /* actions: */ 220,296,46,-284,202,-284,91,-284,43,-284,45,-284,42,-284,47,-284,37,-284,185,-284,124,-284,94,-284,38,-284,186,-284,62,-284,190,-284,60,-284,191,-284,187,-284,188,-284,189,-284,194,-284,195,-284,200,-284,201,-284,192,-284,193,-284,196,-284,197,-284,63,-284,169,-284,170,-284,172,-284,173,-284,174,-284,175,-284,176,-284,59,-284,10,-284,129,-284,143,-284,125,-284,148,-284,147,-284,142,-284,150,-284,41,-284,141,-284,61,-98,44,-90, - 0,1, /* default action: */ -302, /* gotos: */ -115,382, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,383,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 6,2, /* actions: */ 169,11,170,13,59,682,10,683,58,771,160,772, /* gotos: */ -113,384,-122,770, - 0,1, /* default action: */ -303, /* gotos: */ -116,385, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,143,-5, /* gotos: */ -4,386,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,387, - /* default action: */ -304, - /* default action: */ -305, - 51,29, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,59,682,10,683,150,-489,148,-489,143,-489, /* gotos: */ -9,390,-97,786,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508,-98,783,-122,785, - 7,3, /* actions: */ 169,11,170,13,59,682,10,683,150,-489,148,-489,143,-489, /* gotos: */ -97,391,-98,783,-122,785, - 3,3, /* actions: */ 150,396,148,351,143,-341, /* gotos: */ -47,392,-26,780,-48,782, - 3,2, /* actions: */ 148,351,150,396,143,-341, /* gotos: */ -26,393,-48,395, - 1,0, /* actions: */ 143,394, - /* default action: */ -328, - /* default action: */ -368, - 46,23, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,211,778, /* gotos: */ -34,397,-16,773,-15,777,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 4,2, /* actions: */ 59,682,10,683,58,749,146,750, /* gotos: */ -111,398,-122,747, - 62,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,148,-5,150,-5,143,-5, /* gotos: */ -4,399,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - /* default action: */ -369, - 42,25, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,572,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,614,208,298,209,314,163,322,178,579,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,511,211,587, /* gotos: */ -92,401,-91,601,-76,602,-8,603,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,613,-75,486,-21,334,-14,388,-18,409,-19,434,-85,616,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 158,402, - 0,1, /* default action: */ -306, /* gotos: */ -117,403, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,404,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 6,2, /* actions: */ 169,11,170,13,59,682,10,683,58,771,160,772, /* gotos: */ -113,405,-122,770, - 0,1, /* default action: */ -307, /* gotos: */ -118,406, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,143,-5, /* gotos: */ -4,407,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,408, - /* default action: */ -308, - /* default action: */ -309, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,411,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 4,1, /* actions: */ 169,11,170,13,10,-311,41,-311, /* gotos: */ -119,412, - 2,1, /* actions: */ 10,303,41,-491, /* gotos: */ -106,413, - 1,0, /* actions: */ 41,414, - /* default action: */ -312, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,41,-5, /* gotos: */ -4,416,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 41,417, - /* default action: */ -313, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,41,-5, /* gotos: */ -4,416,-85,419,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-86,536,-87,584,-89,540,-88,586, - 2,0, /* actions: */ 41,420,61,421, - 5,0, /* actions: */ 44,-83,61,-75,158,-75,41,-75,124,-75, - 46,27, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,530, /* gotos: */ -23,422,-15,423,-42,424,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-91,200,-90,508,-16,525, - /* default action: */ -37, - 43,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-44,173,-44,174,-44,175,-44,176,-44,59,-44,10,-44,129,-44,143,-44,125,-44,148,-44,147,-44,142,-44,150,-44,41,-44,141,-44,44,-270, - /* default action: */ -45, - 63,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -20,426,-4,428,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,427, + /* default action: */ -17, + /* default action: */ -18, + 18,0, /* actions: */ 169,11,170,13,172,-33,173,-33,174,-33,175,-33,176,-33,59,-33,10,-33,129,-33,143,-33,125,-33,148,-33,147,-33,142,-33,150,-33,41,-33,141,-33, + 47,0, /* actions: */ 46,370,202,800,91,811,43,-232,45,-232,42,-232,47,-232,37,-232,185,-232,124,-232,94,-232,38,-232,186,-232,62,-232,190,-232,60,-232,191,-232,187,-232,188,-232,189,-232,194,-232,195,-232,200,-232,201,-232,192,-232,193,-232,196,-232,197,-232,63,-232,169,-232,170,-232,172,-232,173,-232,174,-232,175,-232,176,-232,59,-232,10,-232,129,-232,143,-232,125,-232,148,-232,147,-232,142,-232,150,-232,41,-232,141,-232, + 29,2, /* actions: */ 214,371,218,796,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,308,-84,474, + 100,0, /* actions: */ 220,372,61,-97,44,-89,40,-486,214,-486,217,-486,216,-486,218,-486,219,-486,166,-486,165,-486,167,-486,168,-486,182,-486,181,-486,221,-486,222,-486,223,-486,235,-486,233,-486,227,-486,229,-486,228,-486,230,-486,231,-486,225,-486,215,-486,203,-486,208,-486,209,-486,163,-486,178,-486,144,-486,145,-486,151,-486,152,-486,149,-486,153,-486,207,-486,205,-486,140,-486,136,-486,137,-486,138,-486,164,-486,183,-486,184,-486,33,-486,126,-486,211,-486,212,-486,123,-486,159,-486,46,-486,202,-486,91,-486,43,-486,45,-486,42,-486,47,-486,37,-486,185,-486,124,-486,94,-486,38,-486,186,-486,62,-486,190,-486,60,-486,191,-486,187,-486,188,-486,189,-486,194,-486,195,-486,200,-486,201,-486,192,-486,193,-486,196,-486,197,-486,63,-486,169,-486,170,-486,172,-486,173,-486,174,-486,175,-486,176,-486,59,-486,10,-486,129,-486,143,-486,125,-486,148,-486,147,-486,142,-486,150,-486,41,-486,141,-486, + 45,25, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521, /* gotos: */ -18,373,-26,374,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-28,17,-27,499,-25,500, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-190,170,-190,172,-190,173,-190,174,-190,175,-190,176,-190,59,-190,10,-190,129,-190,143,-190,125,-190,148,-190,147,-190,142,-190,150,-190,41,-190,141,-190,58,-190,146,-190,160,-190,204,-190,44,-190,93,-190,210,-190,161,-190, + /* default action: */ -38, + 0,1, /* default action: */ -305, /* gotos: */ -115,376, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,377,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 6,2, /* actions: */ 169,11,170,13,59,686,10,687,58,775,160,776, /* gotos: */ -116,378,-125,774, + 0,1, /* default action: */ -306, /* gotos: */ -117,379, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,143,-5, /* gotos: */ -4,380,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,381, + /* default action: */ -307, + 50,0, /* actions: */ 46,-440,202,-440,91,-440,43,-440,45,-440,42,-440,47,-440,37,-440,185,-440,124,-440,94,-440,38,-440,186,-440,62,-440,190,-440,60,-440,191,-440,187,-440,188,-440,189,-440,194,-440,195,-440,200,-440,201,-440,192,-440,193,-440,196,-440,197,-440,63,-440,169,-440,170,-440,172,-440,173,-440,174,-440,175,-440,176,-440,59,-440,10,-440,129,-440,143,-440,125,-440,148,-440,147,-440,142,-440,150,-440,41,-440,141,-440,61,-95,220,-441,44,-87, + 1,0, /* actions: */ 218,384, + 50,0, /* actions: */ 220,298,46,-290,202,-290,91,-290,43,-290,45,-290,42,-290,47,-290,37,-290,185,-290,124,-290,94,-290,38,-290,186,-290,62,-290,190,-290,60,-290,191,-290,187,-290,188,-290,189,-290,194,-290,195,-290,200,-290,201,-290,192,-290,193,-290,196,-290,197,-290,63,-290,169,-290,170,-290,172,-290,173,-290,174,-290,175,-290,176,-290,59,-290,10,-290,129,-290,143,-290,125,-290,148,-290,147,-290,142,-290,150,-290,41,-290,141,-290,61,-101,44,-93, + 0,1, /* default action: */ -308, /* gotos: */ -118,386, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,387,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 6,2, /* actions: */ 169,11,170,13,59,686,10,687,58,775,160,776, /* gotos: */ -116,388,-125,774, + 0,1, /* default action: */ -309, /* gotos: */ -119,389, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,143,-5, /* gotos: */ -4,390,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,391, + /* default action: */ -310, + /* default action: */ -311, + 51,29, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,59,686,10,687,150,-495,148,-495,143,-495, /* gotos: */ -12,394,-100,790,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512,-101,787,-125,789, + 7,3, /* actions: */ 169,11,170,13,59,686,10,687,150,-495,148,-495,143,-495, /* gotos: */ -100,395,-101,787,-125,789, + 3,3, /* actions: */ 150,400,148,353,143,-347, /* gotos: */ -50,396,-29,784,-51,786, + 3,2, /* actions: */ 148,353,150,400,143,-347, /* gotos: */ -29,397,-51,399, + 1,0, /* actions: */ 143,398, + /* default action: */ -334, + /* default action: */ -374, + 46,23, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,211,782, /* gotos: */ -37,401,-19,777,-18,781,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 4,2, /* actions: */ 59,686,10,687,58,753,146,754, /* gotos: */ -114,402,-125,751, + 62,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,148,-5,150,-5,143,-5, /* gotos: */ -4,403,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + /* default action: */ -375, + 42,25, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,576,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,618,208,300,209,316,163,324,178,583,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,515,211,591, /* gotos: */ -95,405,-94,605,-79,606,-11,607,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,617,-78,490,-24,336,-17,392,-21,413,-22,438,-88,620,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 158,406, + 0,1, /* default action: */ -312, /* gotos: */ -120,407, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,408,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 6,2, /* actions: */ 169,11,170,13,59,686,10,687,58,775,160,776, /* gotos: */ -116,409,-125,774, + 0,1, /* default action: */ -313, /* gotos: */ -121,410, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,143,-5, /* gotos: */ -4,411,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,412, /* default action: */ -314, - 4,3, /* actions: */ 141,742,148,-373,142,-373,143,-373, /* gotos: */ -45,429,-44,740,-46,769, - 3,1, /* actions: */ 148,351,142,-341,143,-341, /* gotos: */ -26,430, - 2,1, /* actions: */ 142,432,143,-383, /* gotos: */ -5,431, + /* default action: */ -315, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,415,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 4,1, /* actions: */ 169,11,170,13,10,-317,41,-317, /* gotos: */ -122,416, + 2,1, /* actions: */ 10,305,41,-497, /* gotos: */ -109,417, + 1,0, /* actions: */ 41,418, + /* default action: */ -318, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,41,-5, /* gotos: */ -4,420,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 41,421, + /* default action: */ -319, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,41,-5, /* gotos: */ -4,420,-88,423,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-89,540,-90,588,-92,544,-91,590, + 2,0, /* actions: */ 41,424,61,425, + 5,0, /* actions: */ 44,-86,61,-78,158,-78,41,-78,124,-78, + 46,27, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,534, /* gotos: */ -26,426,-18,427,-45,428,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-94,200,-93,512,-19,529, + /* default action: */ -35, + 43,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-42,173,-42,174,-42,175,-42,176,-42,59,-42,10,-42,129,-42,143,-42,125,-42,148,-42,147,-42,142,-42,150,-42,41,-42,141,-42,44,-276, + /* default action: */ -43, + 63,41, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -23,430,-4,432,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,431, + /* default action: */ -320, + 4,3, /* actions: */ 141,746,148,-379,142,-379,143,-379, /* gotos: */ -48,433,-47,744,-49,773, + 3,1, /* actions: */ 148,353,142,-347,143,-347, /* gotos: */ -29,434, + 2,1, /* actions: */ 142,436,143,-389, /* gotos: */ -5,435, + /* default action: */ -333, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,143,-5, /* gotos: */ -4,437,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + /* default action: */ -390, + /* default action: */ -316, + 42,20, /* actions: */ 200,737,203,713,218,718,214,719,221,225,222,226,223,227,235,576,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,215,295,208,300,209,316,163,324,178,583,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515, /* gotos: */ -46,440,-83,717,-11,720,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,707,-77,729,-78,490,-24,336,-17,392,-21,413,-22,438, + 4,2, /* actions: */ 59,686,10,687,60,731,128,735, /* gotos: */ -14,441,-125,730, + 0,1, /* default action: */ -321, /* gotos: */ -123,442, + 63,41, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -23,443,-4,432,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,444, + /* default action: */ -322, + 41,20, /* actions: */ 203,713,218,718,214,719,221,225,222,226,223,227,235,576,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,215,295,208,300,209,316,163,324,178,583,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515, /* gotos: */ -46,446,-83,717,-11,720,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,707,-77,729,-78,490,-24,336,-17,392,-21,413,-22,438, + 0,1, /* default action: */ -326, /* gotos: */ -127,447, + 63,41, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -23,448,-4,432,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,449, /* default action: */ -327, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,143,-5, /* gotos: */ -4,433,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - /* default action: */ -384, - /* default action: */ -310, - 42,20, /* actions: */ 200,733,203,709,218,714,214,715,221,224,222,225,223,226,235,572,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,215,293,208,298,209,314,163,322,178,579,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511, /* gotos: */ -43,436,-80,713,-8,716,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,703,-74,725,-75,486,-21,334,-14,388,-18,409,-19,434, - 4,2, /* actions: */ 59,682,10,683,60,727,128,731, /* gotos: */ -11,437,-122,726, - 0,1, /* default action: */ -315, /* gotos: */ -120,438, - 63,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -20,439,-4,428,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,440, - /* default action: */ -316, - 41,20, /* actions: */ 203,709,218,714,214,715,221,224,222,225,223,226,235,572,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,215,293,208,298,209,314,163,322,178,579,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511, /* gotos: */ -43,442,-80,713,-8,716,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,703,-74,725,-75,486,-21,334,-14,388,-18,409,-19,434, - 0,1, /* default action: */ -320, /* gotos: */ -124,443, - 63,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -20,444,-4,428,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,445, - /* default action: */ -321, - 74,6, /* actions: */ 214,694,218,695,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,696,182,697,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,698,153,92,158,93,137,94,155,95,166,699,171,97,170,98,156,99,141,100,157,101,162,102,165,700,164,104,146,105,167,701,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,217,207,216,208,219,210,40,704, /* gotos: */ -82,447,-13,684,-81,46,-104,73,-12,702,-76,703, - 0,1, /* default action: */ -322, /* gotos: */ -125,448, - 12,10, /* actions: */ 40,636,218,650,217,651,216,652,219,653,214,654,42,660,211,661,38,655,212,656,59,-451,10,-451, /* gotos: */ -51,449,-52,680,-53,640,-54,671,-58,672,-59,669,-55,677,-138,658,-56,679,-139,648, - 63,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -20,450,-4,428,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,451, - /* default action: */ -323, - 105,3, /* actions: */ 40,455,123,-360,159,-360,46,-360,202,-360,91,-360,43,-360,45,-360,42,-360,47,-360,37,-360,185,-360,124,-360,94,-360,38,-360,186,-360,62,-360,190,-360,60,-360,191,-360,187,-360,188,-360,189,-360,194,-360,195,-360,200,-360,201,-360,192,-360,193,-360,196,-360,197,-360,63,-360,169,-360,170,-360,172,-360,173,-360,174,-360,175,-360,176,-360,59,-360,10,-360,129,-360,143,-360,125,-360,148,-360,147,-360,142,-360,150,-360,41,-360,141,-360,58,-360,146,-360,160,-360,204,-360,44,-360,93,-360,210,-360,161,-360,214,-260,217,-260,216,-260,218,-260,219,-260,166,-260,165,-260,167,-260,168,-260,182,-260,181,-260,221,-260,222,-260,223,-260,235,-260,233,-260,227,-260,229,-260,228,-260,230,-260,231,-260,225,-260,215,-260,203,-260,208,-260,209,-260,163,-260,178,-260,144,-260,145,-260,151,-260,152,-260,149,-260,153,-260,207,-260,205,-260,140,-260,136,-260,137,-260,138,-260,164,-260,183,-260,184,-260,33,-260,126,-260,211,-260,212,-260, /* gotos: */ -39,453,-41,454,-108,310, + 74,6, /* actions: */ 214,698,218,699,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,700,182,701,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,702,153,92,158,93,137,94,155,95,166,703,171,97,170,98,156,99,141,100,157,101,162,102,165,704,164,104,146,105,167,705,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114,217,208,216,209,219,211,40,708, /* gotos: */ -85,451,-16,688,-84,46,-107,73,-15,706,-79,707, + 0,1, /* default action: */ -328, /* gotos: */ -128,452, + 12,10, /* actions: */ 40,640,218,654,217,655,216,656,219,657,214,658,42,664,211,665,38,659,212,660,59,-457,10,-457, /* gotos: */ -54,453,-55,684,-56,644,-57,675,-61,676,-62,673,-58,681,-141,662,-59,683,-142,652, + 63,41, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -23,454,-4,432,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,455, + /* default action: */ -329, + 105,3, /* actions: */ 40,459,123,-366,159,-366,46,-366,202,-366,91,-366,43,-366,45,-366,42,-366,47,-366,37,-366,185,-366,124,-366,94,-366,38,-366,186,-366,62,-366,190,-366,60,-366,191,-366,187,-366,188,-366,189,-366,194,-366,195,-366,200,-366,201,-366,192,-366,193,-366,196,-366,197,-366,63,-366,169,-366,170,-366,172,-366,173,-366,174,-366,175,-366,176,-366,59,-366,10,-366,129,-366,143,-366,125,-366,148,-366,147,-366,142,-366,150,-366,41,-366,141,-366,58,-366,146,-366,160,-366,204,-366,44,-366,93,-366,210,-366,161,-366,214,-266,217,-266,216,-266,218,-266,219,-266,166,-266,165,-266,167,-266,168,-266,182,-266,181,-266,221,-266,222,-266,223,-266,235,-266,233,-266,227,-266,229,-266,228,-266,230,-266,231,-266,225,-266,215,-266,203,-266,208,-266,209,-266,163,-266,178,-266,144,-266,145,-266,151,-266,152,-266,149,-266,153,-266,207,-266,205,-266,140,-266,136,-266,137,-266,138,-266,164,-266,183,-266,184,-266,33,-266,126,-266,211,-266,212,-266, /* gotos: */ -42,457,-44,458,-111,312, + /* default action: */ -365, + /* default action: */ -74, + 48,28, /* actions: */ 41,460,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,635,212,488, /* gotos: */ -39,461,-25,464,-19,478,-18,315,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-52,629,-53,560,-32,638,-28,639, + /* default action: */ -239, + 2,1, /* actions: */ 10,305,41,-497, /* gotos: */ -109,462, + 1,0, /* actions: */ 41,463, + /* default action: */ -240, + 4,1, /* actions: */ 46,467,202,475,10,305,41,-497, /* gotos: */ -109,465, + 1,0, /* actions: */ 41,466, + /* default action: */ -241, + 29,2, /* actions: */ 214,471,218,472,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,468,-84,474, + 5,2, /* actions: */ 40,459,46,-243,202,-243,10,-243,41,-243, /* gotos: */ -43,469,-42,470, /* default action: */ -359, - /* default action: */ -71, - 48,28, /* actions: */ 41,456,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,631,212,484, /* gotos: */ -36,457,-22,460,-16,474,-15,313,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-49,625,-50,556,-29,634,-25,635, - /* default action: */ -233, - 2,1, /* actions: */ 10,303,41,-491, /* gotos: */ -106,458, - 1,0, /* actions: */ 41,459, - /* default action: */ -234, - 4,1, /* actions: */ 46,463,202,471,10,303,41,-491, /* gotos: */ -106,461, - 1,0, /* actions: */ 41,462, + /* default action: */ -244, + /* default action: */ -486, + /* default action: */ -487, + /* default action: */ -488, + /* default action: */ -489, + 29,2, /* actions: */ 214,471,218,472,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,476,-84,474, + 5,2, /* actions: */ 40,459,46,-243,202,-243,10,-243,41,-243, /* gotos: */ -43,477,-42,470, + /* default action: */ -360, + 3,1, /* actions: */ 44,479,10,-275,41,-275, /* gotos: */ -33,254, + 47,26, /* actions: */ 211,483,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -25,480,-18,256,-52,622,-32,487,-28,628,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-94,200,-93,512,-53,560, + 4,1, /* actions: */ 46,467,202,475,10,305,41,-497, /* gotos: */ -109,481, + 1,0, /* actions: */ 41,482, + /* default action: */ -242, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,484,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,169,-275,170,-275,58,-275,146,-275,160,-275,210,-275,161,-275,93,-275, /* gotos: */ -33,485, + /* default action: */ -246, + 1,1, /* actions: */ 212,488, /* gotos: */ -32,487, + /* default action: */ -274, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,489,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 50,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-273,173,-273,174,-273,175,-273,176,-273,59,-273,10,-273,129,-273,143,-273,125,-273,148,-273,147,-273,142,-273,150,-273,41,-273,141,-273,169,-273,170,-273,58,-273,146,-273,160,-273,210,-273,161,-273,93,-273, + 3,2, /* actions: */ 123,338,159,493,40,459, /* gotos: */ -35,491,-42,492, + /* default action: */ -300, + /* default action: */ -361, + 0,1, /* default action: */ -370, /* gotos: */ -136,494, + 62,1, /* actions: */ 124,601,193,621,177,-351,139,-351,179,-351,180,-351,225,-351,162,-351,154,-351,155,-351,156,-351,157,-351,214,-351,218,-351,215,-351,221,-351,222,-351,223,-351,235,-351,233,-351,227,-351,229,-351,228,-351,230,-351,231,-351,217,-351,216,-351,219,-351,166,-351,165,-351,167,-351,168,-351,182,-351,181,-351,203,-351,208,-351,209,-351,163,-351,178,-351,144,-351,145,-351,151,-351,152,-351,149,-351,153,-351,207,-351,205,-351,140,-351,136,-351,137,-351,138,-351,164,-351,171,-351,33,-351,183,-351,184,-351,126,-351,211,-351,128,-351,143,-351,59,-351,10,-351, /* gotos: */ -96,495, + 0,1, /* default action: */ -371, /* gotos: */ -137,496, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,143,-5, /* gotos: */ -4,497,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,498, + /* default action: */ -372, + /* default action: */ -61, + 23,0, /* actions: */ 46,501,202,504,169,-62,170,-62,172,-62,173,-62,174,-62,175,-62,176,-62,59,-62,10,-62,129,-62,143,-62,125,-62,148,-62,147,-62,142,-62,150,-62,41,-62,141,-62,58,-62,146,-62,160,-62, + 29,2, /* actions: */ 214,471,218,472,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,502,-84,474, + 71,4, /* actions: */ 40,459,46,-243,202,-243,169,-243,170,-243,172,-243,173,-243,174,-243,175,-243,176,-243,59,-243,10,-243,129,-243,143,-243,125,-243,148,-243,147,-243,142,-243,150,-243,41,-243,141,-243,58,-243,146,-243,160,-243,214,-266,217,-266,216,-266,218,-266,219,-266,166,-266,165,-266,167,-266,168,-266,182,-266,181,-266,221,-266,222,-266,223,-266,235,-266,233,-266,227,-266,229,-266,228,-266,230,-266,231,-266,225,-266,215,-266,203,-266,208,-266,209,-266,163,-266,178,-266,144,-266,145,-266,151,-266,152,-266,149,-266,153,-266,207,-266,205,-266,140,-266,136,-266,137,-266,138,-266,164,-266,183,-266,184,-266,33,-266,126,-266,211,-266,212,-266, /* gotos: */ -43,469,-44,503,-42,470,-111,312, + /* default action: */ -63, + 29,2, /* actions: */ 214,471,218,472,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,505,-84,474, + 71,4, /* actions: */ 40,459,46,-243,202,-243,169,-243,170,-243,172,-243,173,-243,174,-243,175,-243,176,-243,59,-243,10,-243,129,-243,143,-243,125,-243,148,-243,147,-243,142,-243,150,-243,41,-243,141,-243,58,-243,146,-243,160,-243,214,-266,217,-266,216,-266,218,-266,219,-266,166,-266,165,-266,167,-266,168,-266,182,-266,181,-266,221,-266,222,-266,223,-266,235,-266,233,-266,227,-266,229,-266,228,-266,230,-266,231,-266,225,-266,215,-266,203,-266,208,-266,209,-266,163,-266,178,-266,144,-266,145,-266,151,-266,152,-266,149,-266,153,-266,207,-266,205,-266,140,-266,136,-266,137,-266,138,-266,164,-266,183,-266,184,-266,33,-266,126,-266,211,-266,212,-266, /* gotos: */ -43,477,-44,506,-42,470,-111,312, + /* default action: */ -64, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,508,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + /* default action: */ -57, + 45,25, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521, /* gotos: */ -26,510,-18,511,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-94,200,-93,512, + /* default action: */ -58, + /* default action: */ -220, + 1,0, /* actions: */ 220,513, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,514,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-188,170,-188,172,-188,173,-188,174,-188,175,-188,176,-188,59,-188,10,-188,129,-188,143,-188,125,-188,148,-188,147,-188,142,-188,150,-188,41,-188,141,-188,58,-188,146,-188,160,-188,204,-188,44,-188,93,-188,210,-188,161,-188, + 58,1, /* actions: */ 40,459,123,-366,159,-366,91,-366,202,-366,46,-366,43,-366,45,-366,42,-366,47,-366,37,-366,185,-366,124,-366,94,-366,38,-366,186,-366,62,-366,190,-366,60,-366,191,-366,187,-366,188,-366,189,-366,194,-366,195,-366,200,-366,201,-366,192,-366,193,-366,196,-366,197,-366,63,-366,169,-366,170,-366,172,-366,173,-366,174,-366,175,-366,176,-366,59,-366,10,-366,129,-366,143,-366,125,-366,148,-366,147,-366,142,-366,150,-366,41,-366,141,-366,58,-366,146,-366,160,-366,204,-366,44,-366,93,-366,210,-366,161,-366, /* gotos: */ -42,457, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,517,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + /* default action: */ -205, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,519,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-206,45,-206,42,-206,47,-206,37,-206,185,156,124,-206,94,-206,38,-206,186,-206,62,-206,190,-206,60,-206,191,-206,187,-206,188,-206,189,-206,194,-206,195,-206,200,-206,201,-206,192,-206,193,-206,196,-206,197,-206,63,-206,169,-206,170,-206,172,-206,173,-206,174,-206,175,-206,176,-206,59,-206,10,-206,129,-206,143,-206,125,-206,148,-206,147,-206,142,-206,150,-206,41,-206,141,-206,58,-206,146,-206,160,-206,204,-206,44,-206,93,-206,210,-206,161,-206, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,511,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,522,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + /* default action: */ -221, + 47,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-59,170,-59,172,-59,173,-59,174,-59,175,-59,176,-59,59,-59,10,-59,129,-59,143,-59,125,-59,148,-59,147,-59,142,-59,150,-59,41,-59,141,-59,58,-59,146,-59,160,-59, + 1,0, /* actions: */ 61,525, + 46,27, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,534, /* gotos: */ -18,526,-26,527,-45,528,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-28,17,-27,499,-25,500,-19,529, + 45,0, /* actions: */ 176,203,43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-185,170,-185,172,-185,173,-185,174,-185,175,-185,59,-185,10,-185,129,-185,143,-185,125,-185,148,-185,147,-185,142,-185,150,-185,41,-185,141,-185,44,-276, + /* default action: */ -34, + /* default action: */ -41, + 1,0, /* actions: */ 44,530, + 46,21, /* actions: */ 211,532,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,531,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 46,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-49,173,-49,174,-49,175,-49,176,-49,59,-49,10,-49,129,-49,143,-49,125,-49,148,-49,147,-49,142,-49,150,-49,41,-49,141,-49,204,-49,58,-49,146,-49,44,-277, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,533,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-50,173,-50,174,-50,175,-50,176,-50,59,-50,10,-50,129,-50,143,-50,125,-50,148,-50,147,-50,142,-50,150,-50,41,-50,141,-50,204,-50,58,-50,146,-50, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,535,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-51,173,-51,174,-51,175,-51,176,-51,59,-51,10,-51,129,-51,143,-51,125,-51,148,-51,147,-51,142,-51,150,-51,41,-51,141,-51,204,-51,58,-51,146,-51, + 1,0, /* actions: */ 220,537, + 45,25, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521, /* gotos: */ -18,514,-26,538,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-28,17,-27,499,-25,500, + /* default action: */ -36, + 1,0, /* actions: */ 61,425, + 46,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,576,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,581,208,300,209,316,163,324,178,583,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,585,140,429,136,439,137,445,138,450,164,515,211,591,61,-77,158,-77,41,-77,124,-77, /* gotos: */ -90,541,-91,543,-92,544,-79,545,-11,546,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,580,-78,490,-24,336,-17,392,-21,413,-22,438, + 5,0, /* actions: */ 44,542,61,-76,158,-76,41,-76,124,-76, + /* default action: */ -83, + /* default action: */ -79, + /* default action: */ -85, + 8,0, /* actions: */ 44,-87,61,-87,158,-87,41,-87,124,-87,91,-440,202,-440,46,-440, + 3,0, /* actions: */ 91,547,202,564,46,572, + 47,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,561,93,-233, /* gotos: */ -38,548,-28,303,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-19,550,-18,315,-94,200,-93,512,-52,558,-53,560, + 1,0, /* actions: */ 93,549, + 8,0, /* actions: */ 44,-88,61,-88,158,-88,41,-88,124,-88,91,-291,202,-291,46,-291, + 3,1, /* actions: */ 44,552,10,557,93,-499, /* gotos: */ -110,551, /* default action: */ -235, - 29,2, /* actions: */ 214,467,218,468,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,464,-81,470, - 5,2, /* actions: */ 40,455,46,-237,202,-237,10,-237,41,-237, /* gotos: */ -40,465,-39,466, - /* default action: */ -353, + 47,21, /* actions: */ 211,554,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,93,-501, /* gotos: */ -18,553,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 33,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-277,10,-277,93,-277,125,-277,59,-277,58,-277,146,-277, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,555,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,10,305,93,-497, /* gotos: */ -109,556, + /* default action: */ -236, + /* default action: */ -500, + 3,1, /* actions: */ 44,321,10,557,93,-499, /* gotos: */ -110,559, + /* default action: */ -237, + /* default action: */ -480, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,562,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,10,305,93,-497, /* gotos: */ -109,563, /* default action: */ -238, - /* default action: */ -480, - /* default action: */ -481, - /* default action: */ -482, - /* default action: */ -483, - 29,2, /* actions: */ 214,467,218,468,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,472,-81,470, - 5,2, /* actions: */ 40,455,46,-237,202,-237,10,-237,41,-237, /* gotos: */ -40,473,-39,466, + 29,3, /* actions: */ 218,565,214,569,215,570,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,566,-82,568,-84,571, + 9,0, /* actions: */ 91,-289,202,-289,46,-289,44,-92,61,-92,158,-92,41,-92,124,-92,40,-487, + 1,1, /* actions: */ 40,459, /* gotos: */ -42,567, + /* default action: */ -363, + /* default action: */ -364, + 11,0, /* actions: */ 44,-90,61,-90,158,-90,41,-90,124,-90,40,-486,123,-490,159,-490,91,-490,202,-490,46,-490, + 105,0, /* actions: */ 40,-488,214,-488,217,-488,216,-488,218,-488,219,-488,166,-488,165,-488,167,-488,168,-488,182,-488,181,-488,221,-488,222,-488,223,-488,235,-488,233,-488,227,-488,229,-488,228,-488,230,-488,231,-488,225,-488,215,-488,203,-488,208,-488,209,-488,163,-488,178,-488,144,-488,145,-488,151,-488,152,-488,149,-488,153,-488,207,-488,205,-488,140,-488,136,-488,137,-488,138,-488,164,-488,183,-488,184,-488,33,-488,126,-488,211,-488,212,-488,123,-491,159,-491,91,-491,202,-491,46,-491,43,-491,45,-491,42,-491,47,-491,37,-491,185,-491,124,-491,94,-491,38,-491,186,-491,62,-491,190,-491,60,-491,191,-491,187,-491,188,-491,189,-491,194,-491,195,-491,200,-491,201,-491,192,-491,193,-491,196,-491,197,-491,63,-491,169,-491,170,-491,172,-491,173,-491,174,-491,175,-491,176,-491,59,-491,10,-491,129,-491,143,-491,125,-491,148,-491,147,-491,142,-491,150,-491,41,-491,141,-491,58,-491,146,-491,160,-491,204,-491,44,-491,93,-491,210,-491,161,-491, + 105,0, /* actions: */ 40,-489,214,-489,217,-489,216,-489,218,-489,219,-489,166,-489,165,-489,167,-489,168,-489,182,-489,181,-489,221,-489,222,-489,223,-489,235,-489,233,-489,227,-489,229,-489,228,-489,230,-489,231,-489,225,-489,215,-489,203,-489,208,-489,209,-489,163,-489,178,-489,144,-489,145,-489,151,-489,152,-489,149,-489,153,-489,207,-489,205,-489,140,-489,136,-489,137,-489,138,-489,164,-489,183,-489,184,-489,33,-489,126,-489,211,-489,212,-489,123,-492,159,-492,91,-492,202,-492,46,-492,43,-492,45,-492,42,-492,47,-492,37,-492,185,-492,124,-492,94,-492,38,-492,186,-492,62,-492,190,-492,60,-492,191,-492,187,-492,188,-492,189,-492,194,-492,195,-492,200,-492,201,-492,192,-492,193,-492,196,-492,197,-492,63,-492,169,-492,170,-492,172,-492,173,-492,174,-492,175,-492,176,-492,59,-492,10,-492,129,-492,143,-492,125,-492,148,-492,147,-492,142,-492,150,-492,41,-492,141,-492,58,-492,146,-492,160,-492,204,-492,44,-492,93,-492,210,-492,161,-492, + 29,2, /* actions: */ 214,574,218,575,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,573,-84,474, + 58,2, /* actions: */ 40,459,123,-243,159,-243,91,-243,202,-243,46,-243,43,-243,45,-243,42,-243,47,-243,37,-243,185,-243,124,-243,94,-243,38,-243,186,-243,62,-243,190,-243,60,-243,191,-243,187,-243,188,-243,189,-243,194,-243,195,-243,200,-243,201,-243,192,-243,193,-243,196,-243,197,-243,63,-243,169,-243,170,-243,172,-243,173,-243,174,-243,175,-243,176,-243,59,-243,10,-243,129,-243,143,-243,125,-243,148,-243,147,-243,142,-243,150,-243,41,-243,141,-243,58,-243,146,-243,160,-243,204,-243,44,-243,93,-243,210,-243,161,-243, /* gotos: */ -43,311,-42,470, + 11,0, /* actions: */ 44,-89,61,-89,158,-89,41,-89,124,-89,40,-486,123,-486,159,-486,91,-486,202,-486,46,-486, + 11,0, /* actions: */ 44,-91,61,-91,158,-91,41,-91,124,-91,40,-487,123,-487,159,-487,91,-487,202,-487,46,-487, + 3,0, /* actions: */ 221,577,222,578,223,579, + /* default action: */ -426, + /* default action: */ -427, + /* default action: */ -428, + 8,0, /* actions: */ 91,-287,202,-287,46,-287,44,-94,61,-94,158,-94,41,-94,124,-94, + 1,0, /* actions: */ 218,582, + 8,0, /* actions: */ 91,-290,202,-290,46,-290,44,-93,61,-93,158,-93,41,-93,124,-93, + 2,1, /* actions: */ 10,305,40,-497, /* gotos: */ -109,584, + 1,0, /* actions: */ 40,333, + 60,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,41,-5, /* gotos: */ -4,420,-88,586,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-89,540,-90,588,-92,544,-91,590, + 2,0, /* actions: */ 41,587,61,425, + /* default action: */ -86, + 1,0, /* actions: */ 44,589, + /* default action: */ -84, + /* default action: */ -80, + 45,19, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,576,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,581,208,300,209,316,163,324,178,583,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,61,-82,158,-82,41,-82,124,-82, /* gotos: */ -92,592,-79,545,-11,546,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,580,-78,490,-24,336,-17,392,-21,413,-22,438, + /* default action: */ -81, + 56,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591, /* gotos: */ -2,594,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 16,0, /* actions: */ 172,9,173,26,174,595,175,597,176,599,59,-8,10,-8,129,-8,143,-8,125,-8,148,-8,147,-8,142,-8,150,-8,41,-8,141,-8, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,596,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 18,0, /* actions: */ 169,11,170,13,172,-46,173,-46,174,-46,175,-46,176,-46,59,-46,10,-46,129,-46,143,-46,125,-46,148,-46,147,-46,142,-46,150,-46,41,-46,141,-46, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,598,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 18,0, /* actions: */ 169,11,170,13,172,-47,173,-47,174,-47,175,-47,176,-47,59,-47,10,-47,129,-47,143,-47,125,-47,148,-47,147,-47,142,-47,150,-47,41,-47,141,-47, + 56,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591, /* gotos: */ -2,600,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + /* default action: */ -48, + 43,25, /* actions: */ 124,602,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,576,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,618,208,300,209,316,163,324,178,583,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,515,211,591, /* gotos: */ -95,603,-94,605,-79,606,-11,607,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,617,-78,490,-24,336,-17,392,-21,413,-22,438,-88,620,-89,540,-90,588,-92,544,-91,590, + /* default action: */ -352, + 1,0, /* actions: */ 124,604, /* default action: */ -354, - 3,1, /* actions: */ 44,475,10,-269,41,-269, /* gotos: */ -30,252, - 47,26, /* actions: */ 211,479,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -22,476,-15,254,-49,618,-29,483,-25,624,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-91,200,-90,508,-50,556, - 4,1, /* actions: */ 46,463,202,471,10,303,41,-491, /* gotos: */ -106,477, - 1,0, /* actions: */ 41,478, - /* default action: */ -236, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,480,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,172,-269,173,-269,174,-269,175,-269,176,-269,59,-269,10,-269,129,-269,143,-269,125,-269,148,-269,147,-269,142,-269,150,-269,41,-269,141,-269,169,-269,170,-269,58,-269,146,-269,160,-269,210,-269,161,-269,93,-269, /* gotos: */ -30,481, - /* default action: */ -240, - 1,1, /* actions: */ 212,484, /* gotos: */ -29,483, - /* default action: */ -268, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,485,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 50,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-267,173,-267,174,-267,175,-267,176,-267,59,-267,10,-267,129,-267,143,-267,125,-267,148,-267,147,-267,142,-267,150,-267,41,-267,141,-267,169,-267,170,-267,58,-267,146,-267,160,-267,210,-267,161,-267,93,-267, - 3,2, /* actions: */ 123,336,159,489,40,455, /* gotos: */ -32,487,-39,488, - /* default action: */ -294, - /* default action: */ -355, - 0,1, /* default action: */ -364, /* gotos: */ -133,490, - 62,1, /* actions: */ 124,597,193,617,177,-345,139,-345,179,-345,180,-345,225,-345,162,-345,154,-345,155,-345,156,-345,157,-345,214,-345,218,-345,215,-345,221,-345,222,-345,223,-345,235,-345,233,-345,227,-345,229,-345,228,-345,230,-345,231,-345,217,-345,216,-345,219,-345,166,-345,165,-345,167,-345,168,-345,182,-345,181,-345,203,-345,208,-345,209,-345,163,-345,178,-345,144,-345,145,-345,151,-345,152,-345,149,-345,153,-345,207,-345,205,-345,140,-345,136,-345,137,-345,138,-345,164,-345,171,-345,33,-345,183,-345,184,-345,126,-345,211,-345,128,-345,143,-345,59,-345,10,-345, /* gotos: */ -93,491, - 0,1, /* default action: */ -365, /* gotos: */ -134,492, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,143,-5, /* gotos: */ -4,493,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,494, - /* default action: */ -366, - /* default action: */ -58, - 23,0, /* actions: */ 46,497,202,500,169,-59,170,-59,172,-59,173,-59,174,-59,175,-59,176,-59,59,-59,10,-59,129,-59,143,-59,125,-59,148,-59,147,-59,142,-59,150,-59,41,-59,141,-59,58,-59,146,-59,160,-59, - 29,2, /* actions: */ 214,467,218,468,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,498,-81,470, - 71,4, /* actions: */ 40,455,46,-237,202,-237,169,-237,170,-237,172,-237,173,-237,174,-237,175,-237,176,-237,59,-237,10,-237,129,-237,143,-237,125,-237,148,-237,147,-237,142,-237,150,-237,41,-237,141,-237,58,-237,146,-237,160,-237,214,-260,217,-260,216,-260,218,-260,219,-260,166,-260,165,-260,167,-260,168,-260,182,-260,181,-260,221,-260,222,-260,223,-260,235,-260,233,-260,227,-260,229,-260,228,-260,230,-260,231,-260,225,-260,215,-260,203,-260,208,-260,209,-260,163,-260,178,-260,144,-260,145,-260,151,-260,152,-260,149,-260,153,-260,207,-260,205,-260,140,-260,136,-260,137,-260,138,-260,164,-260,183,-260,184,-260,33,-260,126,-260,211,-260,212,-260, /* gotos: */ -40,465,-41,499,-39,466,-108,310, - /* default action: */ -60, - 29,2, /* actions: */ 214,467,218,468,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,501,-81,470, - 71,4, /* actions: */ 40,455,46,-237,202,-237,169,-237,170,-237,172,-237,173,-237,174,-237,175,-237,176,-237,59,-237,10,-237,129,-237,143,-237,125,-237,148,-237,147,-237,142,-237,150,-237,41,-237,141,-237,58,-237,146,-237,160,-237,214,-260,217,-260,216,-260,218,-260,219,-260,166,-260,165,-260,167,-260,168,-260,182,-260,181,-260,221,-260,222,-260,223,-260,235,-260,233,-260,227,-260,229,-260,228,-260,230,-260,231,-260,225,-260,215,-260,203,-260,208,-260,209,-260,163,-260,178,-260,144,-260,145,-260,151,-260,152,-260,149,-260,153,-260,207,-260,205,-260,140,-260,136,-260,137,-260,138,-260,164,-260,183,-260,184,-260,33,-260,126,-260,211,-260,212,-260, /* gotos: */ -40,473,-41,502,-39,466,-108,310, - /* default action: */ -61, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,504,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - /* default action: */ -54, - 45,25, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517, /* gotos: */ -23,506,-15,507,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-91,200,-90,508, - /* default action: */ -55, - /* default action: */ -216, - 1,0, /* actions: */ 220,509, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,510,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-184,170,-184,172,-184,173,-184,174,-184,175,-184,176,-184,59,-184,10,-184,129,-184,143,-184,125,-184,148,-184,147,-184,142,-184,150,-184,41,-184,141,-184,58,-184,146,-184,160,-184,204,-184,44,-184,93,-184,210,-184,161,-184, - 58,1, /* actions: */ 40,455,123,-360,159,-360,91,-360,202,-360,46,-360,43,-360,45,-360,42,-360,47,-360,37,-360,185,-360,124,-360,94,-360,38,-360,186,-360,62,-360,190,-360,60,-360,191,-360,187,-360,188,-360,189,-360,194,-360,195,-360,200,-360,201,-360,192,-360,193,-360,196,-360,197,-360,63,-360,169,-360,170,-360,172,-360,173,-360,174,-360,175,-360,176,-360,59,-360,10,-360,129,-360,143,-360,125,-360,148,-360,147,-360,142,-360,150,-360,41,-360,141,-360,58,-360,146,-360,160,-360,204,-360,44,-360,93,-360,210,-360,161,-360, /* gotos: */ -39,453, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,513,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - /* default action: */ -201, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,515,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-202,45,-202,42,-202,47,-202,37,-202,185,156,124,-202,94,-202,38,-202,186,-202,62,-202,190,-202,60,-202,191,-202,187,-202,188,-202,189,-202,194,-202,195,-202,200,-202,201,-202,192,-202,193,-202,196,-202,197,-202,63,-202,169,-202,170,-202,172,-202,173,-202,174,-202,175,-202,176,-202,59,-202,10,-202,129,-202,143,-202,125,-202,148,-202,147,-202,142,-202,150,-202,41,-202,141,-202,58,-202,146,-202,160,-202,204,-202,44,-202,93,-202,210,-202,161,-202, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,507,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,518,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - /* default action: */ -217, - 47,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-56,170,-56,172,-56,173,-56,174,-56,175,-56,176,-56,59,-56,10,-56,129,-56,143,-56,125,-56,148,-56,147,-56,142,-56,150,-56,41,-56,141,-56,58,-56,146,-56,160,-56, - 1,0, /* actions: */ 61,521, - 46,27, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,530, /* gotos: */ -15,522,-23,523,-42,524,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-25,17,-24,495,-22,496,-16,525, - 45,0, /* actions: */ 176,203,43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-182,170,-182,172,-182,173,-182,174,-182,175,-182,59,-182,10,-182,129,-182,143,-182,125,-182,148,-182,147,-182,142,-182,150,-182,41,-182,141,-182,44,-270, - /* default action: */ -36, - /* default action: */ -43, - 1,0, /* actions: */ 44,526, - 46,21, /* actions: */ 211,528,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,527,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 46,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-46,173,-46,174,-46,175,-46,176,-46,59,-46,10,-46,129,-46,143,-46,125,-46,148,-46,147,-46,142,-46,150,-46,41,-46,141,-46,204,-46,58,-46,146,-46,44,-271, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,529,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-47,173,-47,174,-47,175,-47,176,-47,59,-47,10,-47,129,-47,143,-47,125,-47,148,-47,147,-47,142,-47,150,-47,41,-47,141,-47,204,-47,58,-47,146,-47, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,531,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,172,-48,173,-48,174,-48,175,-48,176,-48,59,-48,10,-48,129,-48,143,-48,125,-48,148,-48,147,-48,142,-48,150,-48,41,-48,141,-48,204,-48,58,-48,146,-48, - 1,0, /* actions: */ 220,533, - 45,25, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517, /* gotos: */ -15,510,-23,534,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-25,17,-24,495,-22,496, - /* default action: */ -38, - 1,0, /* actions: */ 61,421, - 46,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,572,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,577,208,298,209,314,163,322,178,579,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,581,140,425,136,435,137,441,138,446,164,511,211,587,61,-74,158,-74,41,-74,124,-74, /* gotos: */ -87,537,-88,539,-89,540,-76,541,-8,542,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,576,-75,486,-21,334,-14,388,-18,409,-19,434, - 5,0, /* actions: */ 44,538,61,-73,158,-73,41,-73,124,-73, - /* default action: */ -80, - /* default action: */ -76, - /* default action: */ -82, - 8,0, /* actions: */ 44,-84,61,-84,158,-84,41,-84,124,-84,91,-434,202,-434,46,-434, - 3,0, /* actions: */ 91,543,202,560,46,568, - 47,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,557,93,-227, /* gotos: */ -35,544,-25,301,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-16,546,-15,313,-91,200,-90,508,-49,554,-50,556, - 1,0, /* actions: */ 93,545, - 8,0, /* actions: */ 44,-85,61,-85,158,-85,41,-85,124,-85,91,-285,202,-285,46,-285, - 3,1, /* actions: */ 44,548,10,553,93,-493, /* gotos: */ -107,547, - /* default action: */ -229, - 47,21, /* actions: */ 211,550,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,93,-495, /* gotos: */ -15,549,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 33,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-271,10,-271,93,-271,125,-271,59,-271,58,-271,146,-271, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,551,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,10,303,93,-491, /* gotos: */ -106,552, - /* default action: */ -230, - /* default action: */ -494, - 3,1, /* actions: */ 44,319,10,553,93,-493, /* gotos: */ -107,555, - /* default action: */ -231, + /* default action: */ -349, + 6,0, /* actions: */ 158,-95,124,-95,91,-440,202,-440,46,-440,44,-87, + 3,0, /* actions: */ 91,608,202,611,46,614, + 47,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,561,93,-233, /* gotos: */ -38,609,-28,303,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-19,550,-18,315,-94,200,-93,512,-52,558,-53,560, + 1,0, /* actions: */ 93,610, + 6,0, /* actions: */ 158,-96,124,-96,91,-291,202,-291,46,-291,44,-88, + 29,3, /* actions: */ 218,612,214,613,215,570,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,566,-82,568,-84,571, + 7,0, /* actions: */ 91,-289,202,-289,46,-289,158,-100,124,-100,44,-92,40,-487, + 9,0, /* actions: */ 158,-98,124,-98,44,-90,40,-486,123,-490,159,-490,91,-490,202,-490,46,-490, + 29,2, /* actions: */ 214,615,218,616,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,573,-84,474, + 9,0, /* actions: */ 158,-97,124,-97,44,-89,40,-486,123,-486,159,-486,91,-486,202,-486,46,-486, + 9,0, /* actions: */ 158,-99,124,-99,44,-91,40,-487,123,-487,159,-487,91,-487,202,-487,46,-487, + 6,0, /* actions: */ 91,-287,202,-287,46,-287,158,-102,124,-102,44,-94, + 1,0, /* actions: */ 218,619, + 6,0, /* actions: */ 91,-290,202,-290,46,-290,158,-101,124,-101,44,-93, + /* default action: */ -350, + /* default action: */ -353, + 25,1, /* actions: */ 44,624,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,169,-275,170,-275,58,-275,146,-275,160,-275,210,-275,161,-275,93,-275, /* gotos: */ -33,623, + /* default action: */ -249, + 47,23, /* actions: */ 211,625,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -53,322,-32,487,-18,323,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,626,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,169,-275,170,-275,58,-275,146,-275,160,-275,210,-275,161,-275,93,-275, /* gotos: */ -33,627, + /* default action: */ -250, + 1,1, /* actions: */ 161,19, /* gotos: */ -36,18, + 25,1, /* actions: */ 44,631,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,169,-275,170,-275,58,-275,146,-275,160,-275,210,-275,161,-275,93,-275, /* gotos: */ -33,630, + /* default action: */ -247, + 47,23, /* actions: */ 211,632,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -53,322,-32,487,-18,323,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,633,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,169,-275,170,-275,58,-275,146,-275,160,-275,210,-275,161,-275,93,-275, /* gotos: */ -33,634, + /* default action: */ -248, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,636,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,172,-275,173,-275,174,-275,175,-275,176,-275,59,-275,10,-275,129,-275,143,-275,125,-275,148,-275,147,-275,142,-275,150,-275,41,-275,141,-275,169,-275,170,-275,58,-275,146,-275,160,-275,210,-275,161,-275,93,-275, /* gotos: */ -33,637, + /* default action: */ -251, + /* default action: */ -252, + 3,1, /* actions: */ 161,19,10,-253,41,-253, /* gotos: */ -36,18, + 11,9, /* actions: */ 218,654,217,655,216,656,219,657,214,658,42,664,211,665,38,659,212,660,10,-457,41,-457, /* gotos: */ -55,641,-56,644,-57,675,-61,676,-62,673,-58,681,-141,662,-59,683,-142,652, + 2,1, /* actions: */ 10,305,41,-497, /* gotos: */ -109,642, + 1,0, /* actions: */ 41,643, + /* default action: */ -447, + 4,1, /* actions: */ 44,645,59,-475,10,-475,41,-475, /* gotos: */ -60,674, + 9,7, /* actions: */ 218,654,217,655,216,656,219,657,214,658,42,664,211,665,38,659,212,660, /* gotos: */ -61,646,-57,670,-58,671,-59,651,-62,673,-141,662,-142,652, + 4,1, /* actions: */ 44,647,59,-475,10,-475,41,-475, /* gotos: */ -60,669, + 9,6, /* actions: */ 42,664,211,665,218,654,217,655,216,656,219,657,214,658,38,659,212,660, /* gotos: */ -58,648,-62,661,-59,651,-141,662,-57,666,-142,652, + 4,1, /* actions: */ 44,650,59,-475,10,-475,41,-475, /* gotos: */ -60,649, + /* default action: */ -449, + 2,2, /* actions: */ 38,659,212,660, /* gotos: */ -59,651,-142,652, + /* default action: */ -476, + 5,1, /* actions: */ 218,654,217,655,216,656,219,657,214,658, /* gotos: */ -57,653, /* default action: */ -474, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,558,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,10,303,93,-491, /* gotos: */ -106,559, - /* default action: */ -232, - 29,3, /* actions: */ 218,561,214,565,215,566,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,562,-79,564,-81,567, - 9,0, /* actions: */ 91,-283,202,-283,46,-283,44,-89,61,-89,158,-89,41,-89,124,-89,40,-481, - 1,1, /* actions: */ 40,455, /* gotos: */ -39,563, - /* default action: */ -357, - /* default action: */ -358, - 11,0, /* actions: */ 44,-87,61,-87,158,-87,41,-87,124,-87,40,-480,123,-484,159,-484,91,-484,202,-484,46,-484, - 105,0, /* actions: */ 40,-482,214,-482,217,-482,216,-482,218,-482,219,-482,166,-482,165,-482,167,-482,168,-482,182,-482,181,-482,221,-482,222,-482,223,-482,235,-482,233,-482,227,-482,229,-482,228,-482,230,-482,231,-482,225,-482,215,-482,203,-482,208,-482,209,-482,163,-482,178,-482,144,-482,145,-482,151,-482,152,-482,149,-482,153,-482,207,-482,205,-482,140,-482,136,-482,137,-482,138,-482,164,-482,183,-482,184,-482,33,-482,126,-482,211,-482,212,-482,123,-485,159,-485,91,-485,202,-485,46,-485,43,-485,45,-485,42,-485,47,-485,37,-485,185,-485,124,-485,94,-485,38,-485,186,-485,62,-485,190,-485,60,-485,191,-485,187,-485,188,-485,189,-485,194,-485,195,-485,200,-485,201,-485,192,-485,193,-485,196,-485,197,-485,63,-485,169,-485,170,-485,172,-485,173,-485,174,-485,175,-485,176,-485,59,-485,10,-485,129,-485,143,-485,125,-485,148,-485,147,-485,142,-485,150,-485,41,-485,141,-485,58,-485,146,-485,160,-485,204,-485,44,-485,93,-485,210,-485,161,-485, - 105,0, /* actions: */ 40,-483,214,-483,217,-483,216,-483,218,-483,219,-483,166,-483,165,-483,167,-483,168,-483,182,-483,181,-483,221,-483,222,-483,223,-483,235,-483,233,-483,227,-483,229,-483,228,-483,230,-483,231,-483,225,-483,215,-483,203,-483,208,-483,209,-483,163,-483,178,-483,144,-483,145,-483,151,-483,152,-483,149,-483,153,-483,207,-483,205,-483,140,-483,136,-483,137,-483,138,-483,164,-483,183,-483,184,-483,33,-483,126,-483,211,-483,212,-483,123,-486,159,-486,91,-486,202,-486,46,-486,43,-486,45,-486,42,-486,47,-486,37,-486,185,-486,124,-486,94,-486,38,-486,186,-486,62,-486,190,-486,60,-486,191,-486,187,-486,188,-486,189,-486,194,-486,195,-486,200,-486,201,-486,192,-486,193,-486,196,-486,197,-486,63,-486,169,-486,170,-486,172,-486,173,-486,174,-486,175,-486,176,-486,59,-486,10,-486,129,-486,143,-486,125,-486,148,-486,147,-486,142,-486,150,-486,41,-486,141,-486,58,-486,146,-486,160,-486,204,-486,44,-486,93,-486,210,-486,161,-486, - 29,2, /* actions: */ 214,570,218,571,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,569,-81,470, - 58,2, /* actions: */ 40,455,123,-237,159,-237,91,-237,202,-237,46,-237,43,-237,45,-237,42,-237,47,-237,37,-237,185,-237,124,-237,94,-237,38,-237,186,-237,62,-237,190,-237,60,-237,191,-237,187,-237,188,-237,189,-237,194,-237,195,-237,200,-237,201,-237,192,-237,193,-237,196,-237,197,-237,63,-237,169,-237,170,-237,172,-237,173,-237,174,-237,175,-237,176,-237,59,-237,10,-237,129,-237,143,-237,125,-237,148,-237,147,-237,142,-237,150,-237,41,-237,141,-237,58,-237,146,-237,160,-237,204,-237,44,-237,93,-237,210,-237,161,-237, /* gotos: */ -40,309,-39,466, - 11,0, /* actions: */ 44,-86,61,-86,158,-86,41,-86,124,-86,40,-480,123,-480,159,-480,91,-480,202,-480,46,-480, - 11,0, /* actions: */ 44,-88,61,-88,158,-88,41,-88,124,-88,40,-481,123,-481,159,-481,91,-481,202,-481,46,-481, - 3,0, /* actions: */ 221,573,222,574,223,575, - /* default action: */ -420, - /* default action: */ -421, - /* default action: */ -422, - 8,0, /* actions: */ 91,-281,202,-281,46,-281,44,-91,61,-91,158,-91,41,-91,124,-91, - 1,0, /* actions: */ 218,578, - 8,0, /* actions: */ 91,-284,202,-284,46,-284,44,-90,61,-90,158,-90,41,-90,124,-90, - 2,1, /* actions: */ 10,303,40,-491, /* gotos: */ -106,580, - 1,0, /* actions: */ 40,331, - 60,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,41,-5, /* gotos: */ -4,416,-85,582,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-86,536,-87,584,-89,540,-88,586, - 2,0, /* actions: */ 41,583,61,421, - /* default action: */ -83, - 1,0, /* actions: */ 44,585, - /* default action: */ -81, - /* default action: */ -77, - 45,19, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,572,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,577,208,298,209,314,163,322,178,579,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,61,-79,158,-79,41,-79,124,-79, /* gotos: */ -89,588,-76,541,-8,542,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,576,-75,486,-21,334,-14,388,-18,409,-19,434, - /* default action: */ -78, - 56,35, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587, /* gotos: */ -2,590,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 16,0, /* actions: */ 172,9,173,26,174,591,175,593,176,595,59,-8,10,-8,129,-8,143,-8,125,-8,148,-8,147,-8,142,-8,150,-8,41,-8,141,-8, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,592,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 18,0, /* actions: */ 169,11,170,13,172,-13,173,-13,174,-13,175,-13,176,-13,59,-13,10,-13,129,-13,143,-13,125,-13,148,-13,147,-13,142,-13,150,-13,41,-13,141,-13, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,594,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 18,0, /* actions: */ 169,11,170,13,172,-14,173,-14,174,-14,175,-14,176,-14,59,-14,10,-14,129,-14,143,-14,125,-14,148,-14,147,-14,142,-14,150,-14,41,-14,141,-14, - 56,35, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587, /* gotos: */ -2,596,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - /* default action: */ -15, - 43,25, /* actions: */ 124,598,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,572,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,614,208,298,209,314,163,322,178,579,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,511,211,587, /* gotos: */ -92,599,-91,601,-76,602,-8,603,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,613,-75,486,-21,334,-14,388,-18,409,-19,434,-85,616,-86,536,-87,584,-89,540,-88,586, - /* default action: */ -346, - 1,0, /* actions: */ 124,600, - /* default action: */ -348, - /* default action: */ -343, - 6,0, /* actions: */ 158,-92,124,-92,91,-434,202,-434,46,-434,44,-84, - 3,0, /* actions: */ 91,604,202,607,46,610, - 47,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,557,93,-227, /* gotos: */ -35,605,-25,301,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-16,546,-15,313,-91,200,-90,508,-49,554,-50,556, - 1,0, /* actions: */ 93,606, - 6,0, /* actions: */ 158,-93,124,-93,91,-285,202,-285,46,-285,44,-85, - 29,3, /* actions: */ 218,608,214,609,215,566,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,562,-79,564,-81,567, - 7,0, /* actions: */ 91,-283,202,-283,46,-283,158,-97,124,-97,44,-89,40,-481, - 9,0, /* actions: */ 158,-95,124,-95,44,-87,40,-480,123,-484,159,-484,91,-484,202,-484,46,-484, - 29,2, /* actions: */ 214,611,218,612,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,569,-81,470, - 9,0, /* actions: */ 158,-94,124,-94,44,-86,40,-480,123,-480,159,-480,91,-480,202,-480,46,-480, - 9,0, /* actions: */ 158,-96,124,-96,44,-88,40,-481,123,-481,159,-481,91,-481,202,-481,46,-481, - 6,0, /* actions: */ 91,-281,202,-281,46,-281,158,-99,124,-99,44,-91, - 1,0, /* actions: */ 218,615, - 6,0, /* actions: */ 91,-284,202,-284,46,-284,158,-98,124,-98,44,-90, - /* default action: */ -344, - /* default action: */ -347, - 25,1, /* actions: */ 44,620,172,-269,173,-269,174,-269,175,-269,176,-269,59,-269,10,-269,129,-269,143,-269,125,-269,148,-269,147,-269,142,-269,150,-269,41,-269,141,-269,169,-269,170,-269,58,-269,146,-269,160,-269,210,-269,161,-269,93,-269, /* gotos: */ -30,619, - /* default action: */ -243, - 47,23, /* actions: */ 211,621,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -50,320,-29,483,-15,321,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,622,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,172,-269,173,-269,174,-269,175,-269,176,-269,59,-269,10,-269,129,-269,143,-269,125,-269,148,-269,147,-269,142,-269,150,-269,41,-269,141,-269,169,-269,170,-269,58,-269,146,-269,160,-269,210,-269,161,-269,93,-269, /* gotos: */ -30,623, - /* default action: */ -244, - 1,1, /* actions: */ 161,19, /* gotos: */ -33,18, - 25,1, /* actions: */ 44,627,172,-269,173,-269,174,-269,175,-269,176,-269,59,-269,10,-269,129,-269,143,-269,125,-269,148,-269,147,-269,142,-269,150,-269,41,-269,141,-269,169,-269,170,-269,58,-269,146,-269,160,-269,210,-269,161,-269,93,-269, /* gotos: */ -30,626, - /* default action: */ -241, - 47,23, /* actions: */ 211,628,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -50,320,-29,483,-15,321,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,629,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,172,-269,173,-269,174,-269,175,-269,176,-269,59,-269,10,-269,129,-269,143,-269,125,-269,148,-269,147,-269,142,-269,150,-269,41,-269,141,-269,169,-269,170,-269,58,-269,146,-269,160,-269,210,-269,161,-269,93,-269, /* gotos: */ -30,630, - /* default action: */ -242, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,632,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 51,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,172,-269,173,-269,174,-269,175,-269,176,-269,59,-269,10,-269,129,-269,143,-269,125,-269,148,-269,147,-269,142,-269,150,-269,41,-269,141,-269,169,-269,170,-269,58,-269,146,-269,160,-269,210,-269,161,-269,93,-269, /* gotos: */ -30,633, - /* default action: */ -245, - /* default action: */ -246, - 3,1, /* actions: */ 161,19,10,-247,41,-247, /* gotos: */ -33,18, - 11,9, /* actions: */ 218,650,217,651,216,652,219,653,214,654,42,660,211,661,38,655,212,656,10,-451,41,-451, /* gotos: */ -52,637,-53,640,-54,671,-58,672,-59,669,-55,677,-138,658,-56,679,-139,648, - 2,1, /* actions: */ 10,303,41,-491, /* gotos: */ -106,638, - 1,0, /* actions: */ 41,639, - /* default action: */ -441, - 4,1, /* actions: */ 44,641,59,-469,10,-469,41,-469, /* gotos: */ -57,670, - 9,7, /* actions: */ 218,650,217,651,216,652,219,653,214,654,42,660,211,661,38,655,212,656, /* gotos: */ -58,642,-54,666,-55,667,-56,647,-59,669,-138,658,-139,648, - 4,1, /* actions: */ 44,643,59,-469,10,-469,41,-469, /* gotos: */ -57,665, - 9,6, /* actions: */ 42,660,211,661,218,650,217,651,216,652,219,653,214,654,38,655,212,656, /* gotos: */ -55,644,-59,657,-56,647,-138,658,-54,662,-139,648, - 4,1, /* actions: */ 44,646,59,-469,10,-469,41,-469, /* gotos: */ -57,645, - /* default action: */ -443, - 2,2, /* actions: */ 38,655,212,656, /* gotos: */ -56,647,-139,648, + /* default action: */ -458, + /* default action: */ -459, + /* default action: */ -460, + /* default action: */ -461, + /* default action: */ -462, + /* default action: */ -472, + /* default action: */ -473, + /* default action: */ -467, + 9,1, /* actions: */ 218,654,217,655,216,656,219,657,214,658,44,-471,59,-471,10,-471,41,-471, /* gotos: */ -57,663, /* default action: */ -470, - 5,1, /* actions: */ 218,650,217,651,216,652,219,653,214,654, /* gotos: */ -54,649, /* default action: */ -468, + /* default action: */ -469, + 1,0, /* actions: */ 61,667, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,668,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 30,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-465,59,-465,10,-465,41,-465, + /* default action: */ -450, + 5,0, /* actions: */ 61,667,44,-464,59,-464,10,-464,41,-464, + 4,1, /* actions: */ 44,650,59,-475,10,-475,41,-475, /* gotos: */ -60,672, + /* default action: */ -451, + /* default action: */ -466, /* default action: */ -452, + 5,0, /* actions: */ 61,667,44,-463,59,-463,10,-463,41,-463, + 4,1, /* actions: */ 44,677,59,-475,10,-475,41,-475, /* gotos: */ -60,680, + 9,6, /* actions: */ 42,664,211,665,218,654,217,655,216,656,219,657,214,658,38,659,212,660, /* gotos: */ -58,678,-62,661,-59,651,-141,662,-57,666,-142,652, + 4,1, /* actions: */ 44,650,59,-475,10,-475,41,-475, /* gotos: */ -60,679, /* default action: */ -453, /* default action: */ -454, + 4,1, /* actions: */ 44,650,59,-475,10,-475,41,-475, /* gotos: */ -60,682, /* default action: */ -455, /* default action: */ -456, - /* default action: */ -466, - /* default action: */ -467, - /* default action: */ -461, - 9,1, /* actions: */ 218,650,217,651,216,652,219,653,214,654,44,-465,59,-465,10,-465,41,-465, /* gotos: */ -54,659, - /* default action: */ -464, - /* default action: */ -462, - /* default action: */ -463, - 1,0, /* actions: */ 61,663, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,664,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 30,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-459,59,-459,10,-459,41,-459, - /* default action: */ -444, - 5,0, /* actions: */ 61,663,44,-458,59,-458,10,-458,41,-458, - 4,1, /* actions: */ 44,646,59,-469,10,-469,41,-469, /* gotos: */ -57,668, + 2,1, /* actions: */ 59,686,10,687, /* gotos: */ -125,685, + /* default action: */ -448, + /* default action: */ -502, + /* default action: */ -503, + 2,1, /* actions: */ 46,696,202,697, /* gotos: */ -129,689, + 0,1, /* default action: */ -330, /* gotos: */ -130,690, + 70,3, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114, /* gotos: */ -85,691,-84,46,-107,73, + 0,1, /* default action: */ -331, /* gotos: */ -131,692, + 12,10, /* actions: */ 40,640,218,654,217,655,216,656,219,657,214,658,42,664,211,665,38,659,212,660,59,-457,10,-457, /* gotos: */ -54,693,-55,684,-56,644,-57,675,-61,676,-62,673,-58,681,-141,662,-59,683,-142,652, + 63,41, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -23,694,-4,432,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,695, + /* default action: */ -332, + /* default action: */ -493, + /* default action: */ -494, + 14,0, /* actions: */ 40,-108,218,-108,217,-108,216,-108,219,-108,214,-108,42,-108,211,-108,38,-108,212,-108,59,-108,10,-108,46,-429,202,-429, + 14,0, /* actions: */ 40,-109,218,-109,217,-109,216,-109,219,-109,214,-109,42,-109,211,-109,38,-109,212,-109,59,-109,10,-109,46,-432,202,-432, + 14,0, /* actions: */ 40,-144,218,-144,217,-144,216,-144,219,-144,214,-144,42,-144,211,-144,38,-144,212,-144,59,-144,10,-144,46,-439,202,-439, + 14,0, /* actions: */ 40,-145,218,-145,217,-145,216,-145,219,-145,214,-145,42,-145,211,-145,38,-145,212,-145,59,-145,10,-145,46,-438,202,-438, + 14,0, /* actions: */ 40,-161,218,-161,217,-161,216,-161,219,-161,214,-161,42,-161,211,-161,38,-161,212,-161,59,-161,10,-161,46,-437,202,-437, + 14,0, /* actions: */ 40,-166,218,-166,217,-166,216,-166,219,-166,214,-166,42,-166,211,-166,38,-166,212,-166,59,-166,10,-166,46,-434,202,-434, + 14,0, /* actions: */ 40,-173,218,-173,217,-173,216,-173,219,-173,214,-173,42,-173,211,-173,38,-173,212,-173,59,-173,10,-173,46,-435,202,-435, + 14,0, /* actions: */ 40,-176,218,-176,217,-176,216,-176,219,-176,214,-176,42,-176,211,-176,38,-176,212,-176,59,-176,10,-176,46,-436,202,-436, + /* default action: */ -477, + /* default action: */ -440, + 0,1, /* default action: */ -478, /* gotos: */ -143,709, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,710,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 4,1, /* actions: */ 169,11,170,13,10,305,41,-497, /* gotos: */ -109,711, + 1,0, /* actions: */ 41,712, + /* default action: */ -479, + 2,1, /* actions: */ 218,715,214,716, /* gotos: */ -83,714, + /* default action: */ -105, + 67,0, /* actions: */ 202,-290,91,-290,46,-290,59,-103,10,-103,60,-103,128,-103,177,-103,139,-103,179,-103,180,-103,225,-103,162,-103,154,-103,155,-103,156,-103,157,-103,214,-103,218,-103,215,-103,221,-103,222,-103,223,-103,235,-103,233,-103,227,-103,229,-103,228,-103,230,-103,231,-103,217,-103,216,-103,219,-103,166,-103,165,-103,167,-103,168,-103,182,-103,181,-103,203,-103,208,-103,209,-103,163,-103,178,-103,144,-103,145,-103,151,-103,152,-103,149,-103,153,-103,207,-103,205,-103,140,-103,136,-103,137,-103,138,-103,164,-103,171,-103,33,-103,183,-103,184,-103,126,-103,211,-103,143,-103,141,-103,148,-103,142,-103, + /* default action: */ -104, + /* default action: */ -106, + 70,0, /* actions: */ 59,-103,10,-103,60,-103,128,-103,177,-103,139,-103,179,-103,180,-103,225,-103,162,-103,154,-103,155,-103,156,-103,157,-103,214,-103,218,-103,215,-103,221,-103,222,-103,223,-103,235,-103,233,-103,227,-103,229,-103,228,-103,230,-103,231,-103,217,-103,216,-103,219,-103,166,-103,165,-103,167,-103,168,-103,182,-103,181,-103,203,-103,208,-103,209,-103,163,-103,178,-103,144,-103,145,-103,151,-103,152,-103,149,-103,153,-103,207,-103,205,-103,140,-103,136,-103,137,-103,138,-103,164,-103,171,-103,33,-103,183,-103,184,-103,126,-103,211,-103,143,-103,141,-103,148,-103,142,-103,202,-432,91,-432,46,-432,123,-484,159,-484,40,-484, + 70,0, /* actions: */ 59,-104,10,-104,60,-104,128,-104,177,-104,139,-104,179,-104,180,-104,225,-104,162,-104,154,-104,155,-104,156,-104,157,-104,214,-104,218,-104,215,-104,221,-104,222,-104,223,-104,235,-104,233,-104,227,-104,229,-104,228,-104,230,-104,231,-104,217,-104,216,-104,219,-104,166,-104,165,-104,167,-104,168,-104,182,-104,181,-104,203,-104,208,-104,209,-104,163,-104,178,-104,144,-104,145,-104,151,-104,152,-104,149,-104,153,-104,207,-104,205,-104,140,-104,136,-104,137,-104,138,-104,164,-104,171,-104,33,-104,183,-104,184,-104,126,-104,211,-104,143,-104,141,-104,148,-104,142,-104,202,-429,91,-429,46,-429,123,-483,159,-483,40,-483, + 3,0, /* actions: */ 202,721,91,725,46,728, + 29,4, /* actions: */ 218,723,214,724,215,570,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -83,722,-81,566,-82,568,-84,571, + /* default action: */ -107, + 68,0, /* actions: */ 202,-289,91,-289,46,-289,59,-103,10,-103,60,-103,128,-103,177,-103,139,-103,179,-103,180,-103,225,-103,162,-103,154,-103,155,-103,156,-103,157,-103,214,-103,218,-103,215,-103,221,-103,222,-103,223,-103,235,-103,233,-103,227,-103,229,-103,228,-103,230,-103,231,-103,217,-103,216,-103,219,-103,166,-103,165,-103,167,-103,168,-103,182,-103,181,-103,203,-103,208,-103,209,-103,163,-103,178,-103,144,-103,145,-103,151,-103,152,-103,149,-103,153,-103,207,-103,205,-103,140,-103,136,-103,137,-103,138,-103,164,-103,171,-103,33,-103,183,-103,184,-103,126,-103,211,-103,143,-103,141,-103,148,-103,142,-103,40,-487, + 70,0, /* actions: */ 59,-104,10,-104,60,-104,128,-104,177,-104,139,-104,179,-104,180,-104,225,-104,162,-104,154,-104,155,-104,156,-104,157,-104,214,-104,218,-104,215,-104,221,-104,222,-104,223,-104,235,-104,233,-104,227,-104,229,-104,228,-104,230,-104,231,-104,217,-104,216,-104,219,-104,166,-104,165,-104,167,-104,168,-104,182,-104,181,-104,203,-104,208,-104,209,-104,163,-104,178,-104,144,-104,145,-104,151,-104,152,-104,149,-104,153,-104,207,-104,205,-104,140,-104,136,-104,137,-104,138,-104,164,-104,171,-104,33,-104,183,-104,184,-104,126,-104,211,-104,143,-104,141,-104,148,-104,142,-104,40,-486,123,-490,159,-490,202,-490,91,-490,46,-490, + 47,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,561,93,-233, /* gotos: */ -38,726,-28,303,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-19,550,-18,315,-94,200,-93,512,-52,558,-53,560, + 1,0, /* actions: */ 93,727, + /* default action: */ -291, + 29,2, /* actions: */ 214,471,218,472,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,573,-84,474, + /* default action: */ -287, + /* default action: */ -443, + 0,1, /* default action: */ -444, /* gotos: */ -140,732, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,733,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 4,1, /* actions: */ 169,11,170,13,59,686,10,687, /* gotos: */ -125,734, /* default action: */ -445, - /* default action: */ -460, + 2,1, /* actions: */ 59,686,10,687, /* gotos: */ -125,736, /* default action: */ -446, - 5,0, /* actions: */ 61,663,44,-457,59,-457,10,-457,41,-457, - 4,1, /* actions: */ 44,673,59,-469,10,-469,41,-469, /* gotos: */ -57,676, - 9,6, /* actions: */ 42,660,211,661,218,650,217,651,216,652,219,653,214,654,38,655,212,656, /* gotos: */ -55,674,-59,657,-56,647,-138,658,-54,662,-139,648, - 4,1, /* actions: */ 44,646,59,-469,10,-469,41,-469, /* gotos: */ -57,675, - /* default action: */ -447, - /* default action: */ -448, - 4,1, /* actions: */ 44,646,59,-469,10,-469,41,-469, /* gotos: */ -57,678, - /* default action: */ -449, - /* default action: */ -450, - 2,1, /* actions: */ 59,682,10,683, /* gotos: */ -122,681, - /* default action: */ -442, - /* default action: */ -496, - /* default action: */ -497, - 2,1, /* actions: */ 46,692,202,693, /* gotos: */ -126,685, - 0,1, /* default action: */ -324, /* gotos: */ -127,686, - 70,3, /* actions: */ 214,43,218,44,215,45,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72,181,74,182,75,179,76,180,77,177,78,169,79,140,80,154,81,149,82,136,83,138,84,178,85,159,86,148,87,147,88,143,89,142,90,168,91,153,92,158,93,137,94,155,95,166,96,171,97,170,98,156,99,141,100,157,101,162,102,165,103,164,104,146,105,167,106,139,107,150,108,163,109,172,110,173,111,174,112,175,113,176,114, /* gotos: */ -82,687,-81,46,-104,73, - 0,1, /* default action: */ -325, /* gotos: */ -128,688, - 12,10, /* actions: */ 40,636,218,650,217,651,216,652,219,653,214,654,42,660,211,661,38,655,212,656,59,-451,10,-451, /* gotos: */ -51,689,-52,680,-53,640,-54,671,-58,672,-59,669,-55,677,-138,658,-56,679,-139,648, - 63,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -20,690,-4,428,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,691, - /* default action: */ -326, - /* default action: */ -487, - /* default action: */ -488, - 14,0, /* actions: */ 40,-105,218,-105,217,-105,216,-105,219,-105,214,-105,42,-105,211,-105,38,-105,212,-105,59,-105,10,-105,46,-423,202,-423, - 14,0, /* actions: */ 40,-106,218,-106,217,-106,216,-106,219,-106,214,-106,42,-106,211,-106,38,-106,212,-106,59,-106,10,-106,46,-426,202,-426, - 14,0, /* actions: */ 40,-141,218,-141,217,-141,216,-141,219,-141,214,-141,42,-141,211,-141,38,-141,212,-141,59,-141,10,-141,46,-433,202,-433, - 14,0, /* actions: */ 40,-142,218,-142,217,-142,216,-142,219,-142,214,-142,42,-142,211,-142,38,-142,212,-142,59,-142,10,-142,46,-432,202,-432, - 14,0, /* actions: */ 40,-158,218,-158,217,-158,216,-158,219,-158,214,-158,42,-158,211,-158,38,-158,212,-158,59,-158,10,-158,46,-431,202,-431, - 14,0, /* actions: */ 40,-163,218,-163,217,-163,216,-163,219,-163,214,-163,42,-163,211,-163,38,-163,212,-163,59,-163,10,-163,46,-428,202,-428, - 14,0, /* actions: */ 40,-170,218,-170,217,-170,216,-170,219,-170,214,-170,42,-170,211,-170,38,-170,212,-170,59,-170,10,-170,46,-429,202,-429, - 14,0, /* actions: */ 40,-173,218,-173,217,-173,216,-173,219,-173,214,-173,42,-173,211,-173,38,-173,212,-173,59,-173,10,-173,46,-430,202,-430, - /* default action: */ -471, - /* default action: */ -434, - 0,1, /* default action: */ -472, /* gotos: */ -140,705, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,706,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 4,1, /* actions: */ 169,11,170,13,10,303,41,-491, /* gotos: */ -106,707, - 1,0, /* actions: */ 41,708, - /* default action: */ -473, - 2,1, /* actions: */ 218,711,214,712, /* gotos: */ -80,710, - /* default action: */ -102, - 67,0, /* actions: */ 202,-284,91,-284,46,-284,59,-100,10,-100,60,-100,128,-100,177,-100,139,-100,179,-100,180,-100,225,-100,162,-100,154,-100,155,-100,156,-100,157,-100,214,-100,218,-100,215,-100,221,-100,222,-100,223,-100,235,-100,233,-100,227,-100,229,-100,228,-100,230,-100,231,-100,217,-100,216,-100,219,-100,166,-100,165,-100,167,-100,168,-100,182,-100,181,-100,203,-100,208,-100,209,-100,163,-100,178,-100,144,-100,145,-100,151,-100,152,-100,149,-100,153,-100,207,-100,205,-100,140,-100,136,-100,137,-100,138,-100,164,-100,171,-100,33,-100,183,-100,184,-100,126,-100,211,-100,143,-100,141,-100,148,-100,142,-100, - /* default action: */ -101, - /* default action: */ -103, - 70,0, /* actions: */ 59,-100,10,-100,60,-100,128,-100,177,-100,139,-100,179,-100,180,-100,225,-100,162,-100,154,-100,155,-100,156,-100,157,-100,214,-100,218,-100,215,-100,221,-100,222,-100,223,-100,235,-100,233,-100,227,-100,229,-100,228,-100,230,-100,231,-100,217,-100,216,-100,219,-100,166,-100,165,-100,167,-100,168,-100,182,-100,181,-100,203,-100,208,-100,209,-100,163,-100,178,-100,144,-100,145,-100,151,-100,152,-100,149,-100,153,-100,207,-100,205,-100,140,-100,136,-100,137,-100,138,-100,164,-100,171,-100,33,-100,183,-100,184,-100,126,-100,211,-100,143,-100,141,-100,148,-100,142,-100,202,-426,91,-426,46,-426,123,-478,159,-478,40,-478, - 70,0, /* actions: */ 59,-101,10,-101,60,-101,128,-101,177,-101,139,-101,179,-101,180,-101,225,-101,162,-101,154,-101,155,-101,156,-101,157,-101,214,-101,218,-101,215,-101,221,-101,222,-101,223,-101,235,-101,233,-101,227,-101,229,-101,228,-101,230,-101,231,-101,217,-101,216,-101,219,-101,166,-101,165,-101,167,-101,168,-101,182,-101,181,-101,203,-101,208,-101,209,-101,163,-101,178,-101,144,-101,145,-101,151,-101,152,-101,149,-101,153,-101,207,-101,205,-101,140,-101,136,-101,137,-101,138,-101,164,-101,171,-101,33,-101,183,-101,184,-101,126,-101,211,-101,143,-101,141,-101,148,-101,142,-101,202,-423,91,-423,46,-423,123,-477,159,-477,40,-477, - 3,0, /* actions: */ 202,717,91,721,46,724, - 29,4, /* actions: */ 218,719,214,720,215,566,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -80,718,-78,562,-79,564,-81,567, - /* default action: */ -104, - 68,0, /* actions: */ 202,-283,91,-283,46,-283,59,-100,10,-100,60,-100,128,-100,177,-100,139,-100,179,-100,180,-100,225,-100,162,-100,154,-100,155,-100,156,-100,157,-100,214,-100,218,-100,215,-100,221,-100,222,-100,223,-100,235,-100,233,-100,227,-100,229,-100,228,-100,230,-100,231,-100,217,-100,216,-100,219,-100,166,-100,165,-100,167,-100,168,-100,182,-100,181,-100,203,-100,208,-100,209,-100,163,-100,178,-100,144,-100,145,-100,151,-100,152,-100,149,-100,153,-100,207,-100,205,-100,140,-100,136,-100,137,-100,138,-100,164,-100,171,-100,33,-100,183,-100,184,-100,126,-100,211,-100,143,-100,141,-100,148,-100,142,-100,40,-481, - 70,0, /* actions: */ 59,-101,10,-101,60,-101,128,-101,177,-101,139,-101,179,-101,180,-101,225,-101,162,-101,154,-101,155,-101,156,-101,157,-101,214,-101,218,-101,215,-101,221,-101,222,-101,223,-101,235,-101,233,-101,227,-101,229,-101,228,-101,230,-101,231,-101,217,-101,216,-101,219,-101,166,-101,165,-101,167,-101,168,-101,182,-101,181,-101,203,-101,208,-101,209,-101,163,-101,178,-101,144,-101,145,-101,151,-101,152,-101,149,-101,153,-101,207,-101,205,-101,140,-101,136,-101,137,-101,138,-101,164,-101,171,-101,33,-101,183,-101,184,-101,126,-101,211,-101,143,-101,141,-101,148,-101,142,-101,40,-480,123,-484,159,-484,202,-484,91,-484,46,-484, - 47,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,557,93,-227, /* gotos: */ -35,722,-25,301,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-16,546,-15,313,-91,200,-90,508,-49,554,-50,556, - 1,0, /* actions: */ 93,723, - /* default action: */ -285, - 29,2, /* actions: */ 214,467,218,468,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,569,-81,470, - /* default action: */ -281, - /* default action: */ -437, - 0,1, /* default action: */ -438, /* gotos: */ -137,728, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,729,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 4,1, /* actions: */ 169,11,170,13,59,682,10,683, /* gotos: */ -122,730, - /* default action: */ -439, - 2,1, /* actions: */ 59,682,10,683, /* gotos: */ -122,732, - /* default action: */ -440, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,734,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 4,1, /* actions: */ 169,11,170,13,59,-317,10,-317, /* gotos: */ -121,735, - 2,1, /* actions: */ 59,682,10,683, /* gotos: */ -122,736, - 0,1, /* default action: */ -318, /* gotos: */ -123,737, - 63,38, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -20,738,-4,428,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 1,0, /* actions: */ 143,739, - /* default action: */ -319, - 4,1, /* actions: */ 141,742,148,-374,142,-374,143,-374, /* gotos: */ -46,741, - /* default action: */ -376, - 51,24, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,211,530,204,-380,59,-380,10,-380,58,-380,146,-380, /* gotos: */ -17,743,-15,767,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508,-42,768,-16,525, - 5,1, /* actions: */ 204,751,59,-382,10,-382,58,-382,146,-382, /* gotos: */ -94,744, - 4,2, /* actions: */ 59,682,10,683,58,749,146,750, /* gotos: */ -111,745,-122,747, - 63,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -4,746,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - /* default action: */ -377, - 66,0, /* actions: */ 146,748,177,-332,139,-332,179,-332,180,-332,225,-332,162,-332,154,-332,155,-332,156,-332,157,-332,214,-332,218,-332,215,-332,221,-332,222,-332,223,-332,235,-332,233,-332,227,-332,229,-332,228,-332,230,-332,231,-332,217,-332,216,-332,219,-332,166,-332,165,-332,167,-332,168,-332,182,-332,181,-332,203,-332,208,-332,209,-332,163,-332,178,-332,144,-332,145,-332,151,-332,152,-332,149,-332,153,-332,207,-332,205,-332,140,-332,136,-332,137,-332,138,-332,164,-332,171,-332,33,-332,183,-332,184,-332,126,-332,211,-332,128,-332,148,-332,147,-332,143,-332,59,-332,10,-332,150,-332,141,-332,142,-332, - /* default action: */ -335, - /* default action: */ -333, - /* default action: */ -334, - 41,19, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,572,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,765,208,298,209,314,163,322,178,579,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511, /* gotos: */ -91,752,-76,753,-8,754,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,764,-75,486,-21,334,-14,388,-18,409,-19,434, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,738,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 4,1, /* actions: */ 169,11,170,13,59,-323,10,-323, /* gotos: */ -124,739, + 2,1, /* actions: */ 59,686,10,687, /* gotos: */ -125,740, + 0,1, /* default action: */ -324, /* gotos: */ -126,741, + 63,41, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -23,742,-4,432,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 1,0, /* actions: */ 143,743, + /* default action: */ -325, + 4,1, /* actions: */ 141,746,148,-380,142,-380,143,-380, /* gotos: */ -49,745, + /* default action: */ -382, + 51,24, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,211,534,204,-386,59,-386,10,-386,58,-386,146,-386, /* gotos: */ -20,747,-18,771,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512,-45,772,-19,529, + 5,1, /* actions: */ 204,755,59,-388,10,-388,58,-388,146,-388, /* gotos: */ -97,748, + 4,2, /* actions: */ 59,686,10,687,58,753,146,754, /* gotos: */ -114,749,-125,751, + 63,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,141,-5,148,-5,142,-5,143,-5, /* gotos: */ -4,750,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + /* default action: */ -383, + 66,0, /* actions: */ 146,752,177,-338,139,-338,179,-338,180,-338,225,-338,162,-338,154,-338,155,-338,156,-338,157,-338,214,-338,218,-338,215,-338,221,-338,222,-338,223,-338,235,-338,233,-338,227,-338,229,-338,228,-338,230,-338,231,-338,217,-338,216,-338,219,-338,166,-338,165,-338,167,-338,168,-338,182,-338,181,-338,203,-338,208,-338,209,-338,163,-338,178,-338,144,-338,145,-338,151,-338,152,-338,149,-338,153,-338,207,-338,205,-338,140,-338,136,-338,137,-338,138,-338,164,-338,171,-338,33,-338,183,-338,184,-338,126,-338,211,-338,128,-338,148,-338,147,-338,143,-338,59,-338,10,-338,150,-338,141,-338,142,-338, + /* default action: */ -341, + /* default action: */ -339, + /* default action: */ -340, + 41,19, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,576,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,769,208,300,209,316,163,324,178,583,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515, /* gotos: */ -94,756,-79,757,-11,758,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,768,-78,490,-24,336,-17,392,-21,413,-22,438, + /* default action: */ -387, + 7,0, /* actions: */ 59,-95,10,-95,58,-95,146,-95,91,-440,202,-440,46,-440, + 3,0, /* actions: */ 91,759,202,762,46,765, + 47,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,561,93,-233, /* gotos: */ -38,760,-28,303,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-19,550,-18,315,-94,200,-93,512,-52,558,-53,560, + 1,0, /* actions: */ 93,761, + 7,0, /* actions: */ 59,-96,10,-96,58,-96,146,-96,91,-291,202,-291,46,-291, + 29,3, /* actions: */ 218,763,214,764,215,570,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,566,-82,568,-84,571, + 8,0, /* actions: */ 91,-289,202,-289,46,-289,59,-100,10,-100,58,-100,146,-100,40,-487, + 10,0, /* actions: */ 59,-98,10,-98,58,-98,146,-98,40,-486,123,-490,159,-490,91,-490,202,-490,46,-490, + 29,2, /* actions: */ 214,766,218,767,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,573,-84,474, + 10,0, /* actions: */ 59,-97,10,-97,58,-97,146,-97,40,-486,123,-486,159,-486,91,-486,202,-486,46,-486, + 10,0, /* actions: */ 59,-99,10,-99,58,-99,146,-99,40,-487,123,-487,159,-487,91,-487,202,-487,46,-487, + 7,0, /* actions: */ 91,-287,202,-287,46,-287,59,-102,10,-102,58,-102,146,-102, + 1,0, /* actions: */ 218,770, + 7,0, /* actions: */ 91,-290,202,-290,46,-290,59,-101,10,-101,58,-101,146,-101, + 32,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,204,-384,59,-384,10,-384,58,-384,146,-384,44,-276, + /* default action: */ -385, /* default action: */ -381, - 7,0, /* actions: */ 59,-92,10,-92,58,-92,146,-92,91,-434,202,-434,46,-434, - 3,0, /* actions: */ 91,755,202,758,46,761, - 47,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,557,93,-227, /* gotos: */ -35,756,-25,301,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-16,546,-15,313,-91,200,-90,508,-49,554,-50,556, - 1,0, /* actions: */ 93,757, - 7,0, /* actions: */ 59,-93,10,-93,58,-93,146,-93,91,-285,202,-285,46,-285, - 29,3, /* actions: */ 218,759,214,760,215,566,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,562,-79,564,-81,567, - 8,0, /* actions: */ 91,-283,202,-283,46,-283,59,-97,10,-97,58,-97,146,-97,40,-481, - 10,0, /* actions: */ 59,-95,10,-95,58,-95,146,-95,40,-480,123,-484,159,-484,91,-484,202,-484,46,-484, - 29,2, /* actions: */ 214,762,218,763,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,569,-81,470, - 10,0, /* actions: */ 59,-94,10,-94,58,-94,146,-94,40,-480,123,-480,159,-480,91,-480,202,-480,46,-480, - 10,0, /* actions: */ 59,-96,10,-96,58,-96,146,-96,40,-481,123,-481,159,-481,91,-481,202,-481,46,-481, - 7,0, /* actions: */ 91,-281,202,-281,46,-281,59,-99,10,-99,58,-99,146,-99, - 1,0, /* actions: */ 218,766, - 7,0, /* actions: */ 91,-284,202,-284,46,-284,59,-98,10,-98,58,-98,146,-98, - 32,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,204,-378,59,-378,10,-378,58,-378,146,-378,44,-270, - /* default action: */ -379, - /* default action: */ -375, + /* default action: */ -342, + /* default action: */ -343, + /* default action: */ -344, + 5,0, /* actions: */ 44,778,59,-376,10,-376,58,-376,146,-376, + 46,21, /* actions: */ 211,779,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,553,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,780,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 30,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,59,-377,10,-377,58,-377,146,-377, + 31,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-276,59,-276,10,-276,58,-276,146,-276, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,783,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 30,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,59,-378,10,-378,58,-378,146,-378, + 1,0, /* actions: */ 143,785, /* default action: */ -336, + /* default action: */ -373, + 4,0, /* actions: */ 59,788,150,-496,148,-496,143,-496, + /* default action: */ -505, + /* default action: */ -504, + 3,3, /* actions: */ 150,400,148,353,143,-347, /* gotos: */ -50,791,-29,794,-51,786, + 3,2, /* actions: */ 148,353,150,400,143,-347, /* gotos: */ -29,792,-51,399, + 1,0, /* actions: */ 143,793, + /* default action: */ -335, + 1,0, /* actions: */ 143,795, /* default action: */ -337, - /* default action: */ -338, - 5,0, /* actions: */ 44,774,59,-370,10,-370,58,-370,146,-370, - 46,21, /* actions: */ 211,775,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,549,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,776,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 30,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,59,-371,10,-371,58,-371,146,-371, - 31,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,-270,59,-270,10,-270,58,-270,146,-270, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,779,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 30,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,59,-372,10,-372,58,-372,146,-372, - 1,0, /* actions: */ 143,781, - /* default action: */ -330, - /* default action: */ -367, - 4,0, /* actions: */ 59,784,150,-490,148,-490,143,-490, - /* default action: */ -499, - /* default action: */ -498, - 3,3, /* actions: */ 150,396,148,351,143,-341, /* gotos: */ -47,787,-26,790,-48,782, - 3,2, /* actions: */ 148,351,150,396,143,-341, /* gotos: */ -26,788,-48,395, - 1,0, /* actions: */ 143,789, - /* default action: */ -329, - 1,0, /* actions: */ 143,791, - /* default action: */ -331, - 100,0, /* actions: */ 220,793,61,-96,44,-88,40,-481,214,-481,217,-481,216,-481,218,-481,219,-481,166,-481,165,-481,167,-481,168,-481,182,-481,181,-481,221,-481,222,-481,223,-481,235,-481,233,-481,227,-481,229,-481,228,-481,230,-481,231,-481,225,-481,215,-481,203,-481,208,-481,209,-481,163,-481,178,-481,144,-481,145,-481,151,-481,152,-481,149,-481,153,-481,207,-481,205,-481,140,-481,136,-481,137,-481,138,-481,164,-481,183,-481,184,-481,33,-481,126,-481,211,-481,212,-481,123,-481,159,-481,46,-481,202,-481,91,-481,43,-481,45,-481,42,-481,47,-481,37,-481,185,-481,124,-481,94,-481,38,-481,186,-481,62,-481,190,-481,60,-481,191,-481,187,-481,188,-481,189,-481,194,-481,195,-481,200,-481,201,-481,192,-481,193,-481,196,-481,197,-481,63,-481,169,-481,170,-481,172,-481,173,-481,174,-481,175,-481,176,-481,59,-481,10,-481,129,-481,143,-481,125,-481,148,-481,147,-481,142,-481,150,-481,41,-481,141,-481, - 45,25, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517, /* gotos: */ -15,794,-23,795,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-25,17,-24,495,-22,496, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-187,170,-187,172,-187,173,-187,174,-187,175,-187,176,-187,59,-187,10,-187,129,-187,143,-187,125,-187,148,-187,147,-187,142,-187,150,-187,41,-187,141,-187,58,-187,146,-187,160,-187,204,-187,44,-187,93,-187,210,-187,161,-187, - /* default action: */ -41, - 29,3, /* actions: */ 218,797,214,803,215,566,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,800,-79,564,-81,567, - 98,0, /* actions: */ 220,798,46,-283,202,-283,91,-283,43,-283,45,-283,42,-283,47,-283,37,-283,185,-283,124,-283,94,-283,38,-283,186,-283,62,-283,190,-283,60,-283,191,-283,187,-283,188,-283,189,-283,194,-283,195,-283,200,-283,201,-283,192,-283,193,-283,196,-283,197,-283,63,-283,169,-283,170,-283,172,-283,173,-283,174,-283,175,-283,176,-283,59,-283,10,-283,129,-283,143,-283,125,-283,148,-283,147,-283,142,-283,150,-283,41,-283,141,-283,61,-97,44,-89,40,-481,214,-481,217,-481,216,-481,218,-481,219,-481,166,-481,165,-481,167,-481,168,-481,182,-481,181,-481,221,-481,222,-481,223,-481,235,-481,233,-481,227,-481,229,-481,228,-481,230,-481,231,-481,225,-481,215,-481,203,-481,208,-481,209,-481,163,-481,178,-481,144,-481,145,-481,151,-481,152,-481,149,-481,153,-481,207,-481,205,-481,140,-481,136,-481,137,-481,138,-481,164,-481,183,-481,184,-481,33,-481,126,-481,211,-481,212,-481, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,799,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-189,170,-189,172,-189,173,-189,174,-189,175,-189,176,-189,59,-189,10,-189,129,-189,143,-189,125,-189,148,-189,147,-189,142,-189,150,-189,41,-189,141,-189,58,-189,146,-189,160,-189,204,-189,44,-189,93,-189,210,-189,161,-189, - 48,3, /* actions: */ 40,455,214,-260,217,-260,216,-260,218,-260,219,-260,166,-260,165,-260,167,-260,168,-260,182,-260,181,-260,221,-260,222,-260,223,-260,235,-260,233,-260,227,-260,229,-260,228,-260,230,-260,231,-260,225,-260,215,-260,203,-260,208,-260,209,-260,163,-260,178,-260,144,-260,145,-260,151,-260,152,-260,149,-260,153,-260,207,-260,205,-260,140,-260,136,-260,137,-260,138,-260,164,-260,183,-260,184,-260,33,-260,126,-260,211,-260,212,-260, /* gotos: */ -39,563,-41,801,-108,310, - 24,1, /* actions: */ 210,31,161,-69,169,-69,170,-69,172,-69,173,-69,174,-69,175,-69,176,-69,59,-69,10,-69,129,-69,143,-69,125,-69,148,-69,147,-69,142,-69,150,-69,41,-69,141,-69,58,-69,146,-69,160,-69,93,-69, /* gotos: */ -31,802, - /* default action: */ -70, - 100,0, /* actions: */ 220,804,61,-95,44,-87,40,-480,214,-480,217,-480,216,-480,218,-480,219,-480,166,-480,165,-480,167,-480,168,-480,182,-480,181,-480,221,-480,222,-480,223,-480,235,-480,233,-480,227,-480,229,-480,228,-480,230,-480,231,-480,225,-480,215,-480,203,-480,208,-480,209,-480,163,-480,178,-480,144,-480,145,-480,151,-480,152,-480,149,-480,153,-480,207,-480,205,-480,140,-480,136,-480,137,-480,138,-480,164,-480,183,-480,184,-480,33,-480,126,-480,211,-480,212,-480,123,-484,159,-484,46,-484,202,-484,91,-484,43,-484,45,-484,42,-484,47,-484,37,-484,185,-484,124,-484,94,-484,38,-484,186,-484,62,-484,190,-484,60,-484,191,-484,187,-484,188,-484,189,-484,194,-484,195,-484,200,-484,201,-484,192,-484,193,-484,196,-484,197,-484,63,-484,169,-484,170,-484,172,-484,173,-484,174,-484,175,-484,176,-484,59,-484,10,-484,129,-484,143,-484,125,-484,148,-484,147,-484,142,-484,150,-484,41,-484,141,-484, - 45,25, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517, /* gotos: */ -15,805,-23,806,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-25,17,-24,495,-22,496, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-188,170,-188,172,-188,173,-188,174,-188,175,-188,176,-188,59,-188,10,-188,129,-188,143,-188,125,-188,148,-188,147,-188,142,-188,150,-188,41,-188,141,-188,58,-188,146,-188,160,-188,204,-188,44,-188,93,-188,210,-188,161,-188, - /* default action: */ -42, - 47,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517,211,557,93,-227, /* gotos: */ -35,808,-25,301,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-16,546,-15,313,-91,200,-90,508,-49,554,-50,556, - 1,0, /* actions: */ 93,809, - 50,0, /* actions: */ 220,810,46,-285,202,-285,91,-285,43,-285,45,-285,42,-285,47,-285,37,-285,185,-285,124,-285,94,-285,38,-285,186,-285,62,-285,190,-285,60,-285,191,-285,187,-285,188,-285,189,-285,194,-285,195,-285,200,-285,201,-285,192,-285,193,-285,196,-285,197,-285,63,-285,169,-285,170,-285,172,-285,173,-285,174,-285,175,-285,176,-285,59,-285,10,-285,129,-285,143,-285,125,-285,148,-285,147,-285,142,-285,150,-285,41,-285,141,-285,61,-93,44,-85, - 45,25, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,183,512,184,514,33,516,126,517, /* gotos: */ -15,222,-23,811,-91,200,-76,205,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,28,-21,334,-14,388,-18,409,-19,434,-90,508,-25,17,-24,495,-22,496, + 100,0, /* actions: */ 220,797,61,-99,44,-91,40,-487,214,-487,217,-487,216,-487,218,-487,219,-487,166,-487,165,-487,167,-487,168,-487,182,-487,181,-487,221,-487,222,-487,223,-487,235,-487,233,-487,227,-487,229,-487,228,-487,230,-487,231,-487,225,-487,215,-487,203,-487,208,-487,209,-487,163,-487,178,-487,144,-487,145,-487,151,-487,152,-487,149,-487,153,-487,207,-487,205,-487,140,-487,136,-487,137,-487,138,-487,164,-487,183,-487,184,-487,33,-487,126,-487,211,-487,212,-487,123,-487,159,-487,46,-487,202,-487,91,-487,43,-487,45,-487,42,-487,47,-487,37,-487,185,-487,124,-487,94,-487,38,-487,186,-487,62,-487,190,-487,60,-487,191,-487,187,-487,188,-487,189,-487,194,-487,195,-487,200,-487,201,-487,192,-487,193,-487,196,-487,197,-487,63,-487,169,-487,170,-487,172,-487,173,-487,174,-487,175,-487,176,-487,59,-487,10,-487,129,-487,143,-487,125,-487,148,-487,147,-487,142,-487,150,-487,41,-487,141,-487, + 45,25, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521, /* gotos: */ -18,798,-26,799,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-28,17,-27,499,-25,500, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-191,170,-191,172,-191,173,-191,174,-191,175,-191,176,-191,59,-191,10,-191,129,-191,143,-191,125,-191,148,-191,147,-191,142,-191,150,-191,41,-191,141,-191,58,-191,146,-191,160,-191,204,-191,44,-191,93,-191,210,-191,161,-191, /* default action: */ -39, - /* default action: */ -247, - 46,26, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517, /* gotos: */ -9,814,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,200,-90,508, - 6,2, /* actions: */ 169,11,170,13,59,682,10,683,58,749,146,750, /* gotos: */ -111,815,-122,747, - 62,37, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,249,154,342,155,353,156,361,157,362,214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,203,379,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,418,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,587,128,589,59,-5,10,-5,148,-5,147,-5,143,-5, /* gotos: */ -4,816,-3,5,-2,25,-7,37,-74,142,-6,248,-10,363,-9,364,-23,16,-25,17,-75,28,-8,365,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,378,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,519,-91,520,-90,532,-85,535,-86,536,-87,584,-89,540,-88,586, - 3,2, /* actions: */ 148,351,147,813,143,-341, /* gotos: */ -27,817,-26,350, - /* default action: */ -340, - 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-224,170,-224,172,-224,173,-224,174,-224,175,-224,176,-224,59,-224,10,-224,129,-224,143,-224,125,-224,148,-224,147,-224,142,-224,150,-224,41,-224,141,-224,58,-224,146,-224,160,-224,204,-224,44,-224,93,-224,210,-224,161,-224, - 3,1, /* actions: */ 44,822,10,553,125,-493, /* gotos: */ -107,820, - 1,0, /* actions: */ 125,821, - /* default action: */ -289, - 46,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,125,-495, /* gotos: */ -15,549,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 49,31, /* actions: */ 214,206,218,209,215,293,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,217,207,216,208,219,210,166,211,165,212,167,213,168,214,182,215,181,216,225,125,203,294,208,298,209,314,163,327,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,452,171,503,33,505,183,512,184,514,126,517,211,859,212,484,41,-263, /* gotos: */ -9,411,-109,824,-37,826,-23,16,-25,17,-75,28,-8,304,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-76,205,-74,291,-21,334,-14,388,-18,409,-19,434,-24,495,-22,496,-15,829,-91,200,-90,508,-49,853,-50,556,-29,862, - 1,0, /* actions: */ 41,825, - /* default action: */ -264, - 0,1, /* default action: */ -265, /* gotos: */ -110,827, - 1,0, /* actions: */ 41,828, - /* default action: */ -266, - 32,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,830,204,255,169,-56,170,-56,10,-56,41,-56, - 47,25, /* actions: */ 211,844,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -16,831,-29,843,-49,847,-15,313,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508,-50,556, - 2,1, /* actions: */ 44,833,41,-269, /* gotos: */ -30,832, - /* default action: */ -248, - 47,24, /* actions: */ 211,834,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -49,837,-15,254,-29,483,-50,556,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,835,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,41,-269, /* gotos: */ -30,836, - /* default action: */ -251, - 2,1, /* actions: */ 44,839,41,-269, /* gotos: */ -30,838, + 29,3, /* actions: */ 218,801,214,807,215,570,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,804,-82,568,-84,571, + 98,0, /* actions: */ 220,802,46,-289,202,-289,91,-289,43,-289,45,-289,42,-289,47,-289,37,-289,185,-289,124,-289,94,-289,38,-289,186,-289,62,-289,190,-289,60,-289,191,-289,187,-289,188,-289,189,-289,194,-289,195,-289,200,-289,201,-289,192,-289,193,-289,196,-289,197,-289,63,-289,169,-289,170,-289,172,-289,173,-289,174,-289,175,-289,176,-289,59,-289,10,-289,129,-289,143,-289,125,-289,148,-289,147,-289,142,-289,150,-289,41,-289,141,-289,61,-100,44,-92,40,-487,214,-487,217,-487,216,-487,218,-487,219,-487,166,-487,165,-487,167,-487,168,-487,182,-487,181,-487,221,-487,222,-487,223,-487,235,-487,233,-487,227,-487,229,-487,228,-487,230,-487,231,-487,225,-487,215,-487,203,-487,208,-487,209,-487,163,-487,178,-487,144,-487,145,-487,151,-487,152,-487,149,-487,153,-487,207,-487,205,-487,140,-487,136,-487,137,-487,138,-487,164,-487,183,-487,184,-487,33,-487,126,-487,211,-487,212,-487, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,803,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-193,170,-193,172,-193,173,-193,174,-193,175,-193,176,-193,59,-193,10,-193,129,-193,143,-193,125,-193,148,-193,147,-193,142,-193,150,-193,41,-193,141,-193,58,-193,146,-193,160,-193,204,-193,44,-193,93,-193,210,-193,161,-193, + 48,3, /* actions: */ 40,459,214,-266,217,-266,216,-266,218,-266,219,-266,166,-266,165,-266,167,-266,168,-266,182,-266,181,-266,221,-266,222,-266,223,-266,235,-266,233,-266,227,-266,229,-266,228,-266,230,-266,231,-266,225,-266,215,-266,203,-266,208,-266,209,-266,163,-266,178,-266,144,-266,145,-266,151,-266,152,-266,149,-266,153,-266,207,-266,205,-266,140,-266,136,-266,137,-266,138,-266,164,-266,183,-266,184,-266,33,-266,126,-266,211,-266,212,-266, /* gotos: */ -42,567,-44,805,-111,312, + 24,1, /* actions: */ 210,31,161,-72,169,-72,170,-72,172,-72,173,-72,174,-72,175,-72,176,-72,59,-72,10,-72,129,-72,143,-72,125,-72,148,-72,147,-72,142,-72,150,-72,41,-72,141,-72,58,-72,146,-72,160,-72,93,-72, /* gotos: */ -34,806, + /* default action: */ -73, + 100,0, /* actions: */ 220,808,61,-98,44,-90,40,-486,214,-486,217,-486,216,-486,218,-486,219,-486,166,-486,165,-486,167,-486,168,-486,182,-486,181,-486,221,-486,222,-486,223,-486,235,-486,233,-486,227,-486,229,-486,228,-486,230,-486,231,-486,225,-486,215,-486,203,-486,208,-486,209,-486,163,-486,178,-486,144,-486,145,-486,151,-486,152,-486,149,-486,153,-486,207,-486,205,-486,140,-486,136,-486,137,-486,138,-486,164,-486,183,-486,184,-486,33,-486,126,-486,211,-486,212,-486,123,-490,159,-490,46,-490,202,-490,91,-490,43,-490,45,-490,42,-490,47,-490,37,-490,185,-490,124,-490,94,-490,38,-490,186,-490,62,-490,190,-490,60,-490,191,-490,187,-490,188,-490,189,-490,194,-490,195,-490,200,-490,201,-490,192,-490,193,-490,196,-490,197,-490,63,-490,169,-490,170,-490,172,-490,173,-490,174,-490,175,-490,176,-490,59,-490,10,-490,129,-490,143,-490,125,-490,148,-490,147,-490,142,-490,150,-490,41,-490,141,-490, + 45,25, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521, /* gotos: */ -18,809,-26,810,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-28,17,-27,499,-25,500, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-192,170,-192,172,-192,173,-192,174,-192,175,-192,176,-192,59,-192,10,-192,129,-192,143,-192,125,-192,148,-192,147,-192,142,-192,150,-192,41,-192,141,-192,58,-192,146,-192,160,-192,204,-192,44,-192,93,-192,210,-192,161,-192, + /* default action: */ -40, + 47,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521,211,561,93,-233, /* gotos: */ -38,812,-28,303,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-19,550,-18,315,-94,200,-93,512,-52,558,-53,560, + 1,0, /* actions: */ 93,813, + 50,0, /* actions: */ 220,814,46,-291,202,-291,91,-291,43,-291,45,-291,42,-291,47,-291,37,-291,185,-291,124,-291,94,-291,38,-291,186,-291,62,-291,190,-291,60,-291,191,-291,187,-291,188,-291,189,-291,194,-291,195,-291,200,-291,201,-291,192,-291,193,-291,196,-291,197,-291,63,-291,169,-291,170,-291,172,-291,173,-291,174,-291,175,-291,176,-291,59,-291,10,-291,129,-291,143,-291,125,-291,148,-291,147,-291,142,-291,150,-291,41,-291,141,-291,61,-96,44,-88, + 45,25, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,183,516,184,518,33,520,126,521, /* gotos: */ -18,223,-26,815,-94,200,-79,206,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,28,-24,336,-17,392,-21,413,-22,438,-93,512,-28,17,-27,499,-25,500, + /* default action: */ -37, + /* default action: */ -253, + 46,26, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521, /* gotos: */ -12,818,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,200,-93,512, + 6,2, /* actions: */ 169,11,170,13,59,686,10,687,58,753,146,754, /* gotos: */ -114,819,-125,751, + 62,40, /* actions: */ 177,38,139,126,179,132,180,137,225,125,162,251,154,344,155,355,156,364,157,365,214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,203,383,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,422,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,591,128,593,59,-5,10,-5,148,-5,147,-5,143,-5, /* gotos: */ -4,820,-3,5,-2,25,-9,37,-77,142,-6,249,-7,250,-8,363,-10,366,-13,367,-12,368,-26,16,-28,17,-78,28,-11,369,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,382,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,523,-94,524,-93,536,-88,539,-89,540,-90,588,-92,544,-91,590, + 3,2, /* actions: */ 148,353,147,817,143,-347, /* gotos: */ -30,821,-29,352, + /* default action: */ -346, + 52,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,169,-230,170,-230,172,-230,173,-230,174,-230,175,-230,176,-230,59,-230,10,-230,129,-230,143,-230,125,-230,148,-230,147,-230,142,-230,150,-230,41,-230,141,-230,58,-230,146,-230,160,-230,204,-230,44,-230,93,-230,210,-230,161,-230, + 3,1, /* actions: */ 44,826,10,557,125,-499, /* gotos: */ -110,824, + 1,0, /* actions: */ 125,825, + /* default action: */ -295, + 46,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,125,-501, /* gotos: */ -18,553,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 49,31, /* actions: */ 214,207,218,210,215,295,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,217,208,216,209,219,211,166,212,165,213,167,214,168,215,182,216,181,217,225,125,203,296,208,300,209,316,163,329,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,456,171,507,33,509,183,516,184,518,126,521,211,863,212,488,41,-269, /* gotos: */ -12,415,-112,828,-40,830,-26,16,-28,17,-78,28,-11,306,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-79,206,-77,293,-24,336,-17,392,-21,413,-22,438,-27,499,-25,500,-18,833,-94,200,-93,512,-52,857,-53,560,-32,866, + 1,0, /* actions: */ 41,829, + /* default action: */ -270, + 0,1, /* default action: */ -271, /* gotos: */ -113,831, + 1,0, /* actions: */ 41,832, + /* default action: */ -272, + 32,0, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,834,204,257,169,-59,170,-59,10,-59,41,-59, + 47,25, /* actions: */ 211,848,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -19,835,-32,847,-52,851,-18,315,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512,-53,560, + 2,1, /* actions: */ 44,837,41,-275, /* gotos: */ -33,836, + /* default action: */ -254, + 47,24, /* actions: */ 211,838,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -52,841,-18,256,-32,487,-53,560,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,839,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,41,-275, /* gotos: */ -33,840, + /* default action: */ -257, + 2,1, /* actions: */ 44,843,41,-275, /* gotos: */ -33,842, + /* default action: */ -261, + 47,23, /* actions: */ 211,844,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -53,322,-32,487,-18,323,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,845,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,41,-275, /* gotos: */ -33,846, + /* default action: */ -263, /* default action: */ -255, - 47,23, /* actions: */ 211,840,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -50,320,-29,483,-15,321,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,841,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,41,-269, /* gotos: */ -30,842, - /* default action: */ -257, - /* default action: */ -249, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,845,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,41,-269, /* gotos: */ -30,846, - /* default action: */ -250, - 2,1, /* actions: */ 44,849,41,-269, /* gotos: */ -30,848, - /* default action: */ -254, - 47,23, /* actions: */ 211,850,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -50,320,-29,483,-15,321,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,851,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,41,-269, /* gotos: */ -30,852, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,849,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,41,-275, /* gotos: */ -33,850, /* default action: */ -256, - 2,1, /* actions: */ 44,855,41,-269, /* gotos: */ -30,854, - /* default action: */ -252, - 47,23, /* actions: */ 211,856,214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517,212,484, /* gotos: */ -50,320,-29,483,-15,321,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,857,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,41,-269, /* gotos: */ -30,858, - /* default action: */ -253, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,860,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,482,41,-269, /* gotos: */ -30,861, + 2,1, /* actions: */ 44,853,41,-275, /* gotos: */ -33,852, + /* default action: */ -260, + 47,23, /* actions: */ 211,854,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -53,322,-32,487,-18,323,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,855,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,41,-275, /* gotos: */ -33,856, + /* default action: */ -262, + 2,1, /* actions: */ 44,859,41,-275, /* gotos: */ -33,858, /* default action: */ -258, + 47,23, /* actions: */ 211,860,214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521,212,488, /* gotos: */ -53,322,-32,487,-18,323,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,861,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,41,-275, /* gotos: */ -33,862, /* default action: */ -259, - 107,0, /* actions: */ 220,864,61,-94,40,-480,214,-480,217,-480,216,-480,218,-480,219,-480,166,-480,165,-480,167,-480,168,-480,182,-480,181,-480,221,-480,222,-480,223,-480,235,-480,233,-480,227,-480,229,-480,228,-480,230,-480,231,-480,225,-480,215,-480,203,-480,208,-480,209,-480,163,-480,178,-480,144,-480,145,-480,151,-480,152,-480,149,-480,153,-480,207,-480,205,-480,140,-480,136,-480,137,-480,138,-480,164,-480,183,-480,184,-480,33,-480,126,-480,211,-480,212,-480,123,-480,159,-480,46,-480,202,-480,91,-480,43,-480,45,-480,42,-480,47,-480,37,-480,185,-480,124,-480,94,-480,38,-480,186,-480,62,-480,190,-480,60,-480,191,-480,187,-480,188,-480,189,-480,194,-480,195,-480,200,-480,201,-480,192,-480,193,-480,196,-480,197,-480,63,-480,169,-480,170,-480,172,-480,173,-480,174,-480,175,-480,176,-480,59,-480,10,-480,129,-480,143,-480,125,-480,148,-480,147,-480,142,-480,150,-480,41,-480,141,-480,58,-480,146,-480,160,-480,204,-480,44,-480,93,-480,210,-480,161,-480, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,369,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 107,0, /* actions: */ 220,866,61,-96,40,-481,214,-481,217,-481,216,-481,218,-481,219,-481,166,-481,165,-481,167,-481,168,-481,182,-481,181,-481,221,-481,222,-481,223,-481,235,-481,233,-481,227,-481,229,-481,228,-481,230,-481,231,-481,225,-481,215,-481,203,-481,208,-481,209,-481,163,-481,178,-481,144,-481,145,-481,151,-481,152,-481,149,-481,153,-481,207,-481,205,-481,140,-481,136,-481,137,-481,138,-481,164,-481,183,-481,184,-481,33,-481,126,-481,211,-481,212,-481,123,-481,159,-481,46,-481,202,-481,91,-481,43,-481,45,-481,42,-481,47,-481,37,-481,185,-481,124,-481,94,-481,38,-481,186,-481,62,-481,190,-481,60,-481,191,-481,187,-481,188,-481,189,-481,194,-481,195,-481,200,-481,201,-481,192,-481,193,-481,196,-481,197,-481,63,-481,169,-481,170,-481,172,-481,173,-481,174,-481,175,-481,176,-481,59,-481,10,-481,129,-481,143,-481,125,-481,148,-481,147,-481,142,-481,150,-481,41,-481,141,-481,58,-481,146,-481,160,-481,204,-481,44,-481,93,-481,210,-481,161,-481, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,794,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 29,3, /* actions: */ 218,868,214,869,215,566,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,800,-79,564,-81,567, - 105,0, /* actions: */ 220,798,46,-283,202,-283,91,-283,43,-283,45,-283,42,-283,47,-283,37,-283,185,-283,124,-283,94,-283,38,-283,186,-283,62,-283,190,-283,60,-283,191,-283,187,-283,188,-283,189,-283,194,-283,195,-283,200,-283,201,-283,192,-283,193,-283,196,-283,197,-283,63,-283,169,-283,170,-283,172,-283,173,-283,174,-283,175,-283,176,-283,59,-283,10,-283,129,-283,143,-283,125,-283,148,-283,147,-283,142,-283,150,-283,41,-283,141,-283,58,-283,146,-283,160,-283,204,-283,44,-283,93,-283,210,-283,161,-283,61,-97,40,-481,214,-481,217,-481,216,-481,218,-481,219,-481,166,-481,165,-481,167,-481,168,-481,182,-481,181,-481,221,-481,222,-481,223,-481,235,-481,233,-481,227,-481,229,-481,228,-481,230,-481,231,-481,225,-481,215,-481,203,-481,208,-481,209,-481,163,-481,178,-481,144,-481,145,-481,151,-481,152,-481,149,-481,153,-481,207,-481,205,-481,140,-481,136,-481,137,-481,138,-481,164,-481,183,-481,184,-481,33,-481,126,-481,211,-481,212,-481, - 107,0, /* actions: */ 220,870,61,-95,40,-480,214,-480,217,-480,216,-480,218,-480,219,-480,166,-480,165,-480,167,-480,168,-480,182,-480,181,-480,221,-480,222,-480,223,-480,235,-480,233,-480,227,-480,229,-480,228,-480,230,-480,231,-480,225,-480,215,-480,203,-480,208,-480,209,-480,163,-480,178,-480,144,-480,145,-480,151,-480,152,-480,149,-480,153,-480,207,-480,205,-480,140,-480,136,-480,137,-480,138,-480,164,-480,183,-480,184,-480,33,-480,126,-480,211,-480,212,-480,123,-484,159,-484,46,-484,202,-484,91,-484,43,-484,45,-484,42,-484,47,-484,37,-484,185,-484,124,-484,94,-484,38,-484,186,-484,62,-484,190,-484,60,-484,191,-484,187,-484,188,-484,189,-484,194,-484,195,-484,200,-484,201,-484,192,-484,193,-484,196,-484,197,-484,63,-484,169,-484,170,-484,172,-484,173,-484,174,-484,175,-484,176,-484,59,-484,10,-484,129,-484,143,-484,125,-484,148,-484,147,-484,142,-484,150,-484,41,-484,141,-484,58,-484,146,-484,160,-484,204,-484,44,-484,93,-484,210,-484,161,-484, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,805,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 55,0, /* actions: */ 185,872,46,-421,202,-421,91,-421,43,-421,45,-421,42,-421,47,-421,37,-421,124,-421,94,-421,38,-421,186,-421,62,-421,190,-421,60,-421,191,-421,187,-421,188,-421,189,-421,194,-421,195,-421,200,-421,201,-421,192,-421,193,-421,196,-421,197,-421,63,-421,169,-421,170,-421,172,-421,173,-421,174,-421,175,-421,176,-421,59,-421,10,-421,129,-421,143,-421,125,-421,148,-421,147,-421,142,-421,150,-421,41,-421,141,-421,58,-421,146,-421,160,-421,204,-421,44,-421,93,-421,210,-421,161,-421, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,873,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-199,45,-199,42,-199,47,-199,37,-199,185,156,124,-199,94,-199,38,-199,186,-199,62,-199,190,-199,60,-199,191,-199,187,-199,188,-199,189,-199,194,-199,195,-199,200,-199,201,-199,192,-199,193,-199,196,-199,197,-199,63,-199,169,-199,170,-199,172,-199,173,-199,174,-199,175,-199,176,-199,59,-199,10,-199,129,-199,143,-199,125,-199,148,-199,147,-199,142,-199,150,-199,41,-199,141,-199,58,-199,146,-199,160,-199,204,-199,44,-199,93,-199,210,-199,161,-199, - 55,0, /* actions: */ 185,875,46,-422,202,-422,91,-422,43,-422,45,-422,42,-422,47,-422,37,-422,124,-422,94,-422,38,-422,186,-422,62,-422,190,-422,60,-422,191,-422,187,-422,188,-422,189,-422,194,-422,195,-422,200,-422,201,-422,192,-422,193,-422,196,-422,197,-422,63,-422,169,-422,170,-422,172,-422,173,-422,174,-422,175,-422,176,-422,59,-422,10,-422,129,-422,143,-422,125,-422,148,-422,147,-422,142,-422,150,-422,41,-422,141,-422,58,-422,146,-422,160,-422,204,-422,44,-422,93,-422,210,-422,161,-422, - 45,21, /* actions: */ 214,206,217,207,216,208,218,209,219,210,166,211,165,212,167,213,168,214,182,215,181,216,221,224,222,225,223,226,235,227,233,232,227,260,229,265,228,269,230,273,231,283,225,125,215,293,203,294,208,298,209,314,163,322,178,329,144,344,145,355,151,371,152,381,149,389,153,400,207,410,205,415,140,425,136,435,137,441,138,446,164,511,183,512,184,514,33,516,126,517, /* gotos: */ -15,876,-91,200,-76,205,-8,217,-72,223,-83,231,-73,257,-64,258,-63,263,-65,264,-71,268,-69,272,-70,282,-12,290,-74,291,-75,486,-21,334,-14,388,-18,409,-19,434,-90,508, - 52,0, /* actions: */ 43,-200,45,-200,42,-200,47,-200,37,-200,185,156,124,-200,94,-200,38,-200,186,-200,62,-200,190,-200,60,-200,191,-200,187,-200,188,-200,189,-200,194,-200,195,-200,200,-200,201,-200,192,-200,193,-200,196,-200,197,-200,63,-200,169,-200,170,-200,172,-200,173,-200,174,-200,175,-200,176,-200,59,-200,10,-200,129,-200,143,-200,125,-200,148,-200,147,-200,142,-200,150,-200,41,-200,141,-200,58,-200,146,-200,160,-200,204,-200,44,-200,93,-200,210,-200,161,-200, - 29,3, /* actions: */ 218,868,214,869,215,566,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,562,-79,564,-81,567, - 29,2, /* actions: */ 214,863,218,865,215,469,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -78,569,-81,470, - /* default action: */ -52, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,864,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 28,1, /* actions: */ 43,146,45,148,42,150,47,152,37,154,185,156,124,158,94,160,38,162,186,164,62,166,190,168,60,170,191,172,187,174,188,176,189,178,194,180,195,182,200,184,201,186,192,188,193,190,196,192,197,194,63,196,44,486,41,-275, /* gotos: */ -33,865, + /* default action: */ -264, + /* default action: */ -265, + 107,0, /* actions: */ 220,868,61,-97,40,-486,214,-486,217,-486,216,-486,218,-486,219,-486,166,-486,165,-486,167,-486,168,-486,182,-486,181,-486,221,-486,222,-486,223,-486,235,-486,233,-486,227,-486,229,-486,228,-486,230,-486,231,-486,225,-486,215,-486,203,-486,208,-486,209,-486,163,-486,178,-486,144,-486,145,-486,151,-486,152,-486,149,-486,153,-486,207,-486,205,-486,140,-486,136,-486,137,-486,138,-486,164,-486,183,-486,184,-486,33,-486,126,-486,211,-486,212,-486,123,-486,159,-486,46,-486,202,-486,91,-486,43,-486,45,-486,42,-486,47,-486,37,-486,185,-486,124,-486,94,-486,38,-486,186,-486,62,-486,190,-486,60,-486,191,-486,187,-486,188,-486,189,-486,194,-486,195,-486,200,-486,201,-486,192,-486,193,-486,196,-486,197,-486,63,-486,169,-486,170,-486,172,-486,173,-486,174,-486,175,-486,176,-486,59,-486,10,-486,129,-486,143,-486,125,-486,148,-486,147,-486,142,-486,150,-486,41,-486,141,-486,58,-486,146,-486,160,-486,204,-486,44,-486,93,-486,210,-486,161,-486, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,373,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 107,0, /* actions: */ 220,870,61,-99,40,-487,214,-487,217,-487,216,-487,218,-487,219,-487,166,-487,165,-487,167,-487,168,-487,182,-487,181,-487,221,-487,222,-487,223,-487,235,-487,233,-487,227,-487,229,-487,228,-487,230,-487,231,-487,225,-487,215,-487,203,-487,208,-487,209,-487,163,-487,178,-487,144,-487,145,-487,151,-487,152,-487,149,-487,153,-487,207,-487,205,-487,140,-487,136,-487,137,-487,138,-487,164,-487,183,-487,184,-487,33,-487,126,-487,211,-487,212,-487,123,-487,159,-487,46,-487,202,-487,91,-487,43,-487,45,-487,42,-487,47,-487,37,-487,185,-487,124,-487,94,-487,38,-487,186,-487,62,-487,190,-487,60,-487,191,-487,187,-487,188,-487,189,-487,194,-487,195,-487,200,-487,201,-487,192,-487,193,-487,196,-487,197,-487,63,-487,169,-487,170,-487,172,-487,173,-487,174,-487,175,-487,176,-487,59,-487,10,-487,129,-487,143,-487,125,-487,148,-487,147,-487,142,-487,150,-487,41,-487,141,-487,58,-487,146,-487,160,-487,204,-487,44,-487,93,-487,210,-487,161,-487, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,798,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 29,3, /* actions: */ 218,872,214,873,215,570,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,804,-82,568,-84,571, + 105,0, /* actions: */ 220,802,46,-289,202,-289,91,-289,43,-289,45,-289,42,-289,47,-289,37,-289,185,-289,124,-289,94,-289,38,-289,186,-289,62,-289,190,-289,60,-289,191,-289,187,-289,188,-289,189,-289,194,-289,195,-289,200,-289,201,-289,192,-289,193,-289,196,-289,197,-289,63,-289,169,-289,170,-289,172,-289,173,-289,174,-289,175,-289,176,-289,59,-289,10,-289,129,-289,143,-289,125,-289,148,-289,147,-289,142,-289,150,-289,41,-289,141,-289,58,-289,146,-289,160,-289,204,-289,44,-289,93,-289,210,-289,161,-289,61,-100,40,-487,214,-487,217,-487,216,-487,218,-487,219,-487,166,-487,165,-487,167,-487,168,-487,182,-487,181,-487,221,-487,222,-487,223,-487,235,-487,233,-487,227,-487,229,-487,228,-487,230,-487,231,-487,225,-487,215,-487,203,-487,208,-487,209,-487,163,-487,178,-487,144,-487,145,-487,151,-487,152,-487,149,-487,153,-487,207,-487,205,-487,140,-487,136,-487,137,-487,138,-487,164,-487,183,-487,184,-487,33,-487,126,-487,211,-487,212,-487, + 107,0, /* actions: */ 220,874,61,-98,40,-486,214,-486,217,-486,216,-486,218,-486,219,-486,166,-486,165,-486,167,-486,168,-486,182,-486,181,-486,221,-486,222,-486,223,-486,235,-486,233,-486,227,-486,229,-486,228,-486,230,-486,231,-486,225,-486,215,-486,203,-486,208,-486,209,-486,163,-486,178,-486,144,-486,145,-486,151,-486,152,-486,149,-486,153,-486,207,-486,205,-486,140,-486,136,-486,137,-486,138,-486,164,-486,183,-486,184,-486,33,-486,126,-486,211,-486,212,-486,123,-490,159,-490,46,-490,202,-490,91,-490,43,-490,45,-490,42,-490,47,-490,37,-490,185,-490,124,-490,94,-490,38,-490,186,-490,62,-490,190,-490,60,-490,191,-490,187,-490,188,-490,189,-490,194,-490,195,-490,200,-490,201,-490,192,-490,193,-490,196,-490,197,-490,63,-490,169,-490,170,-490,172,-490,173,-490,174,-490,175,-490,176,-490,59,-490,10,-490,129,-490,143,-490,125,-490,148,-490,147,-490,142,-490,150,-490,41,-490,141,-490,58,-490,146,-490,160,-490,204,-490,44,-490,93,-490,210,-490,161,-490, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,809,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 55,0, /* actions: */ 185,876,46,-427,202,-427,91,-427,43,-427,45,-427,42,-427,47,-427,37,-427,124,-427,94,-427,38,-427,186,-427,62,-427,190,-427,60,-427,191,-427,187,-427,188,-427,189,-427,194,-427,195,-427,200,-427,201,-427,192,-427,193,-427,196,-427,197,-427,63,-427,169,-427,170,-427,172,-427,173,-427,174,-427,175,-427,176,-427,59,-427,10,-427,129,-427,143,-427,125,-427,148,-427,147,-427,142,-427,150,-427,41,-427,141,-427,58,-427,146,-427,160,-427,204,-427,44,-427,93,-427,210,-427,161,-427, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,877,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-203,45,-203,42,-203,47,-203,37,-203,185,156,124,-203,94,-203,38,-203,186,-203,62,-203,190,-203,60,-203,191,-203,187,-203,188,-203,189,-203,194,-203,195,-203,200,-203,201,-203,192,-203,193,-203,196,-203,197,-203,63,-203,169,-203,170,-203,172,-203,173,-203,174,-203,175,-203,176,-203,59,-203,10,-203,129,-203,143,-203,125,-203,148,-203,147,-203,142,-203,150,-203,41,-203,141,-203,58,-203,146,-203,160,-203,204,-203,44,-203,93,-203,210,-203,161,-203, + 55,0, /* actions: */ 185,879,46,-428,202,-428,91,-428,43,-428,45,-428,42,-428,47,-428,37,-428,124,-428,94,-428,38,-428,186,-428,62,-428,190,-428,60,-428,191,-428,187,-428,188,-428,189,-428,194,-428,195,-428,200,-428,201,-428,192,-428,193,-428,196,-428,197,-428,63,-428,169,-428,170,-428,172,-428,173,-428,174,-428,175,-428,176,-428,59,-428,10,-428,129,-428,143,-428,125,-428,148,-428,147,-428,142,-428,150,-428,41,-428,141,-428,58,-428,146,-428,160,-428,204,-428,44,-428,93,-428,210,-428,161,-428, + 45,21, /* actions: */ 214,207,217,208,216,209,218,210,219,211,166,212,165,213,167,214,168,215,182,216,181,217,221,225,222,226,223,227,235,228,233,233,227,262,229,267,228,271,230,275,231,285,225,125,215,295,203,296,208,300,209,316,163,324,178,331,144,346,145,357,151,375,152,385,149,393,153,404,207,414,205,419,140,429,136,439,137,445,138,450,164,515,183,516,184,518,33,520,126,521, /* gotos: */ -18,880,-94,200,-79,206,-11,218,-75,224,-86,232,-76,259,-67,260,-66,265,-68,266,-74,270,-72,274,-73,284,-15,292,-77,293,-78,490,-24,336,-17,392,-21,413,-22,438,-93,512, + 52,0, /* actions: */ 43,-204,45,-204,42,-204,47,-204,37,-204,185,156,124,-204,94,-204,38,-204,186,-204,62,-204,190,-204,60,-204,191,-204,187,-204,188,-204,189,-204,194,-204,195,-204,200,-204,201,-204,192,-204,193,-204,196,-204,197,-204,63,-204,169,-204,170,-204,172,-204,173,-204,174,-204,175,-204,176,-204,59,-204,10,-204,129,-204,143,-204,125,-204,148,-204,147,-204,142,-204,150,-204,41,-204,141,-204,58,-204,146,-204,160,-204,204,-204,44,-204,93,-204,210,-204,161,-204, + 29,3, /* actions: */ 218,872,214,873,215,570,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,566,-82,568,-84,571, + 29,2, /* actions: */ 214,867,218,869,215,473,124,47,94,48,38,49,186,50,187,51,188,52,194,53,62,54,190,55,60,56,191,57,200,58,201,59,43,60,45,61,42,62,211,63,47,64,37,65,185,66,126,67,183,68,184,69,198,70,199,71,96,72, /* gotos: */ -81,573,-84,474, + /* default action: */ -28, + /* default action: */ -29, + /* default action: */ -30, + /* default action: */ -227, + /* default action: */ -226, + /* default action: */ -55, }); - tables.RuleLhsNonTerminals = new byte[] {95, 96, 1, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 99, 2, 100, 2, 2, 2, 2, 101, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 42, 42, 42, 9, 9, 9, 9, 9, 9, 9, 9, 23, 23, 24, 24, 24, 102, 103, 31, 25, 25, 25, 25, 25, 25, 25, 25, 85, 85, 85, 85, 85, 88, 88, 86, 86, 87, 87, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 91, 91, 91, 91, 91, 80, 80, 43, 43, 43, 82, 82, 82, 82, 82, 84, 84, 28, 105, 28, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 35, 35, 35, 35, 35, 35, 39, 39, 39, 39, 40, 40, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 108, 41, 38, 109, 38, 110, 38, 29, 30, 30, 16, 16, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 112, 114, 8, 115, 116, 8, 8, 117, 118, 8, 8, 8, 119, 18, 18, 18, 120, 19, 121, 123, 19, 124, 19, 125, 19, 127, 128, 19, 20, 14, 14, 14, 14, 111, 111, 111, 111, 113, 113, 113, 27, 27, 26, 26, 92, 92, 93, 93, 93, 93, 129, 130, 33, 22, 22, 22, 21, 21, 21, 21, 21, 21, 131, 132, 32, 133, 134, 32, 47, 47, 48, 34, 34, 34, 45, 45, 44, 44, 46, 17, 17, 17, 94, 94, 5, 5, 64, 64, 63, 65, 73, 71, 69, 69, 67, 67, 66, 66, 70, 70, 68, 68, 62, 62, 61, 135, 61, 136, 61, 60, 60, 60, 60, 83, 77, 77, 77, 77, 72, 72, 72, 72, 72, 72, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 12, 90, 74, 11, 137, 11, 11, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 54, 54, 54, 54, 53, 53, 59, 58, 58, 138, 138, 55, 55, 139, 139, 56, 57, 57, 13, 140, 13, 49, 49, 50, 75, 75, 75, 78, 78, 78, 78, 79, 79, 79, 126, 126, 97, 97, 106, 106, 107, 107, 107, 122, 122, 98, 98, }; - tables.RuleRhsLengths = new byte[] {2, 0, 2, 2, 0, 1, 3, 2, 1, 2, 3, 3, 3, 3, 3, 0, 5, 0, 5, 3, 1, 1, 0, 4, 3, 3, 1, 2, 1, 2, 1, 2, 1, 1, 1, 3, 3, 3, 6, 5, 5, 5, 3, 3, 3, 3, 4, 2, 1, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 4, 4, 0, 0, 6, 2, 3, 4, 5, 4, 5, 2, 2, 2, 1, 3, 2, 1, 2, 1, 3, 2, 1, 3, 1, 4, 3, 3, 3, 3, 2, 1, 1, 4, 3, 3, 3, 3, 2, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 6, 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 5, 1, 0, 2, 2, 5, 2, 3, 2, 4, 4, 6, 0, 1, 2, 5, 2, 5, 4, 7, 3, 1, 1, 4, 3, 5, 7, 2, 5, 4, 6, 7, 9, 3, 1, 0, 2, 1, 0, 3, 0, 4, 2, 2, 0, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, 3, 2, 4, 4, 4, 3, 1, 5, 2, 1, 2, 6, 6, 0, 0, 7, 0, 0, 7, 1, 0, 0, 9, 1, 1, 0, 5, 3, 3, 0, 6, 0, 0, 8, 0, 5, 0, 6, 0, 0, 9, 4, 6, 5, 5, 4, 1, 1, 1, 2, 1, 1, 1, 1, 5, 0, 2, 1, 1, 0, 2, 1, 3, 0, 0, 6, 2, 4, 4, 2, 4, 4, 3, 2, 1, 0, 0, 6, 0, 0, 6, 1, 2, 4, 1, 4, 2, 0, 1, 1, 2, 5, 1, 1, 0, 2, 0, 0, 2, 1, 2, 3, 3, 3, 3, 3, 3, 0, 3, 1, 2, 3, 3, 0, 3, 0, 2, 1, 0, 3, 0, 4, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 2, 4, 2, 6, 4, 4, 2, 4, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 2, 0, 2, 1, 0, 5, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, }; + tables.RuleLhsNonTerminals = new byte[] {98, 99, 1, 4, 3, 3, 3, 3, 2, 2, 102, 2, 103, 2, 2, 2, 2, 2, 104, 9, 9, 9, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 45, 45, 45, 12, 12, 12, 12, 12, 12, 12, 12, 26, 26, 27, 27, 27, 105, 106, 34, 28, 28, 28, 28, 28, 28, 28, 28, 88, 88, 88, 88, 88, 91, 91, 89, 89, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 83, 83, 46, 46, 46, 85, 85, 85, 85, 85, 87, 87, 31, 108, 31, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 38, 38, 38, 38, 38, 38, 42, 42, 42, 42, 43, 43, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 111, 44, 41, 112, 41, 113, 41, 32, 33, 33, 19, 19, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 115, 117, 11, 118, 119, 11, 11, 120, 121, 11, 11, 11, 122, 21, 21, 21, 123, 22, 124, 126, 22, 127, 22, 128, 22, 130, 131, 22, 23, 17, 17, 17, 17, 114, 114, 114, 114, 116, 116, 116, 30, 30, 29, 29, 95, 95, 96, 96, 96, 96, 132, 133, 36, 25, 25, 25, 24, 24, 24, 24, 24, 24, 134, 135, 35, 136, 137, 35, 50, 50, 51, 37, 37, 37, 48, 48, 47, 47, 49, 20, 20, 20, 97, 97, 5, 5, 67, 67, 66, 68, 76, 74, 72, 72, 70, 70, 69, 69, 73, 73, 71, 71, 65, 65, 64, 138, 64, 139, 64, 63, 63, 63, 63, 86, 80, 80, 80, 80, 75, 75, 75, 75, 75, 75, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 15, 93, 77, 14, 140, 14, 14, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 57, 57, 57, 57, 57, 56, 56, 62, 61, 61, 141, 141, 58, 58, 142, 142, 59, 60, 60, 16, 143, 16, 52, 52, 53, 78, 78, 78, 81, 81, 81, 81, 82, 82, 82, 129, 129, 100, 100, 109, 109, 110, 110, 110, 125, 125, 101, 101, }; + tables.RuleRhsLengths = new byte[] {2, 0, 2, 2, 0, 1, 3, 2, 1, 2, 0, 5, 0, 5, 3, 1, 1, 1, 0, 4, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 6, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 1, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 4, 4, 0, 0, 6, 2, 3, 4, 5, 4, 5, 2, 2, 2, 1, 3, 2, 1, 2, 1, 3, 2, 1, 3, 1, 4, 3, 3, 3, 3, 2, 1, 1, 4, 3, 3, 3, 3, 2, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 5, 3, 6, 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 1, 0, 2, 2, 5, 2, 3, 2, 4, 4, 6, 0, 1, 2, 5, 2, 5, 4, 7, 3, 1, 1, 4, 3, 5, 7, 2, 5, 4, 6, 7, 9, 3, 1, 0, 2, 1, 0, 3, 0, 4, 2, 2, 0, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, 3, 2, 4, 4, 4, 3, 1, 5, 2, 1, 2, 6, 6, 0, 0, 7, 0, 0, 7, 1, 0, 0, 9, 1, 1, 0, 5, 3, 3, 0, 6, 0, 0, 8, 0, 5, 0, 6, 0, 0, 9, 4, 6, 5, 5, 4, 1, 1, 1, 2, 1, 1, 1, 1, 5, 0, 2, 1, 1, 0, 2, 1, 3, 0, 0, 6, 2, 4, 4, 2, 4, 4, 3, 2, 1, 0, 0, 6, 0, 0, 6, 1, 2, 4, 1, 4, 2, 0, 1, 1, 2, 5, 1, 1, 0, 2, 0, 0, 2, 1, 2, 3, 3, 3, 3, 3, 3, 0, 3, 1, 2, 3, 3, 0, 3, 0, 2, 1, 0, 3, 0, 4, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 2, 4, 2, 6, 4, 4, 2, 4, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 2, 0, 2, 1, 0, 5, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, }; } #if DEBUG protected override void InitializeMetadata(ParserTables tables) { tables.NonTerminalNames = new string[] {"", "program", "stmt", "stmts", "compstmt", - "ensure_opt", "jump_statement", "alias_statement", "primary", "expr", "expression_statement", + "ensure_opt", "jump_statement", "jump_statement_with_parameters", "jump_statement_parameterless", + "alias_statement", "conditional_statement", "primary", "expr", "expression_statement", "superclass", "var_ref", "singleton", "case_expression", "arg", "args", "exc_list", "block_expression", "declaration_expression", "body", "method_call", "block_call", "command_call", "block_command", "command", "else_opt", "if_tail", @@ -959,503 +969,509 @@ tables.RuleRhsSymbols = new short[] { -1, 129, // 1 // 2 - -96, -4, // 3 - -3, -97, // 4 + -99, -4, // 3 + -3, -100, // 4 // 5 -2, // 6 - -3, -98, -2, // 7 + -3, -101, -2, // 7 128, -2, // 8 - -7, // 9 - 139, -28, // 10 - -2, 172, -9, // 11 - -2, 173, -9, // 12 - -2, 174, -9, // 13 - -2, 175, -9, // 14 - -2, 176, -2, // 15 - // 16 - 179, -99, 123, -4, 125, // 17 - // 18 - 180, -100, 123, -4, 125, // 19 - -74, 220, -23, // 20 - -6, // 21 - -10, // 22 - // 23 - 177, -84, -101, -84, // 24 - 177, 216, 216, // 25 - 177, 216, -74, // 26 - 162, // 27 - 162, -36, // 28 + -9, // 9 + 139, -31, // 10 + // 11 + 179, -102, 123, -4, 125, // 12 + // 13 + 180, -103, 123, -4, 125, // 14 + -77, 220, -26, // 15 + -6, // 16 + -10, // 17 + -13, // 18 + // 19 + 177, -87, -104, -87, // 20 + 177, 216, 216, // 21 + 177, 216, -77, // 22 + -7, // 23 + -8, // 24 + 162, -39, // 25 + 154, -39, // 26 + 155, -39, // 27 + 162, // 28 154, // 29 - 154, -36, // 30 - 155, // 31 - 155, -36, // 32 - 156, // 33 - 157, // 34 - -9, // 35 - -91, 61, -23, // 36 - -85, 61, -23, // 37 - -90, 220, -23, // 38 - -8, 91, -35, 93, 220, -23, // 39 - -8, 46, 214, 220, -23, // 40 - -8, 46, 218, 220, -23, // 41 - -8, 202, 214, 220, -23, // 42 - -91, 61, -42, // 43 - -85, 61, -15, // 44 - -85, 61, -42, // 45 - -16, 44, -15, // 46 - -16, 44, 211, -15, // 47 - 211, -15, // 48 - -23, // 49 - -9, 169, -9, // 50 - -9, 170, -9, // 51 - -9, 169, -6, // 52 - -9, 170, -6, // 53 - 171, -9, // 54 - 33, -23, // 55 - -15, // 56 - -25, // 57 - -24, // 58 - -22, // 59 - -22, 46, -78, -41, // 60 - -22, 202, -78, -41, // 61 - // 62 - // 63 - 210, -102, -93, -103, -4, 125, // 64 - -75, -41, // 65 - -75, -41, -31, // 66 - -8, 46, -78, -41, // 67 - -8, 46, -78, -41, -31, // 68 - -8, 202, -78, -41, // 69 - -8, 202, -78, -41, -31, // 70 - 164, -41, // 71 - 163, -41, // 72 - -86, -87, // 73 - -86, // 74 - 205, -85, 41, // 75 - -86, -88, // 76 - -88, // 77 - 211, -89, // 78 - 211, // 79 - -86, -87, 44, // 80 - -87, 44, // 81 - -89, // 82 - 205, -85, 41, // 83 - -76, // 84 - -8, 91, -35, 93, // 85 - -8, 46, 214, // 86 - -8, 202, 214, // 87 - -8, 46, 218, // 88 - -8, 202, 218, // 89 - 203, 218, // 90 - -74, // 91 - -76, // 92 - -8, 91, -35, 93, // 93 - -8, 46, 214, // 94 - -8, 202, 214, // 95 - -8, 46, 218, // 96 - -8, 202, 218, // 97 - 203, 218, // 98 - -74, // 99 - 218, // 100 - 214, // 101 - 203, -80, // 102 - -80, // 103 - -8, 202, -80, // 104 - 214, // 105 - 218, // 106 - 215, // 107 - -81, // 108 - -104, // 109 - -82, // 110 - -83, // 111 - -84, // 112 - // 113 - -28, 44, -105, -84, // 114 - 124, // 115 - 94, // 116 - 38, // 117 - 186, // 118 - 187, // 119 - 188, // 120 - 194, // 121 - 62, // 122 - 190, // 123 - 60, // 124 - 191, // 125 - 200, // 126 - 201, // 127 - 43, // 128 - 45, // 129 - 42, // 130 - 211, // 131 - 47, // 132 - 37, // 133 - 185, // 134 - 126, // 135 - 183, // 136 - 184, // 137 - 198, // 138 - 199, // 139 - 96, // 140 - 181, // 141 - 182, // 142 - 179, // 143 - 180, // 144 - 177, // 145 - 169, // 146 - 140, // 147 - 154, // 148 - 149, // 149 - 136, // 150 - 138, // 151 - 178, // 152 - 159, // 153 - 148, // 154 - 147, // 155 - 143, // 156 - 142, // 157 - 168, // 158 - 153, // 159 - 158, // 160 - 137, // 161 - 155, // 162 - 166, // 163 - 171, // 164 - 170, // 165 - 156, // 166 - 141, // 167 - 157, // 168 - 162, // 169 - 165, // 170 - 164, // 171 - 146, // 172 - 167, // 173 - 139, // 174 - 150, // 175 - 163, // 176 - 172, // 177 - 173, // 178 - 174, // 179 - 175, // 180 - 176, // 181 - -91, 61, -15, // 182 - -91, 61, -15, 176, -15, // 183 - -90, 220, -15, // 184 - -8, 91, -35, 93, 220, -15, // 185 - -8, 46, 214, 220, -15, // 186 - -8, 46, 218, 220, -15, // 187 - -8, 202, 214, 220, -15, // 188 - -8, 202, 218, 220, -15, // 189 - 203, 218, 220, -15, // 190 - -74, 220, -15, // 191 - -15, 43, -15, // 192 - -15, 45, -15, // 193 - -15, 42, -15, // 194 - -15, 47, -15, // 195 - -15, 37, -15, // 196 - -15, 185, -15, // 197 - 235, 221, 185, -15, // 198 - 235, 222, 185, -15, // 199 - 235, 223, 185, -15, // 200 - 183, -15, // 201 - 184, -15, // 202 - -15, 124, -15, // 203 - -15, 94, -15, // 204 - -15, 38, -15, // 205 - -15, 186, -15, // 206 - -15, 62, -15, // 207 - -15, 190, -15, // 208 - -15, 60, -15, // 209 - -15, 191, -15, // 210 - -15, 187, -15, // 211 - -15, 188, -15, // 212 - -15, 189, -15, // 213 - -15, 194, -15, // 214 - -15, 195, -15, // 215 - 33, -15, // 216 - 126, -15, // 217 - -15, 200, -15, // 218 - -15, 201, -15, // 219 - -15, 192, -15, // 220 - -15, 193, -15, // 221 - -15, 196, -15, // 222 - -15, 197, -15, // 223 - 178, -106, -15, // 224 - -15, 63, -15, 58, -15, // 225 - -8, // 226 - // 227 - -25, -106, // 228 - -16, -107, // 229 - -16, 44, 211, -15, -106, // 230 - -49, -107, // 231 - 211, -15, -106, // 232 - 40, 41, // 233 - 40, -36, -106, 41, // 234 - 40, -22, -106, 41, // 235 - 40, -16, 44, -22, -106, 41, // 236 - // 237 - -39, // 238 - -16, -30, // 239 - -16, 44, 211, -15, -30, // 240 - -49, -30, // 241 - -49, 44, 211, -15, -30, // 242 - -16, 44, -49, -30, // 243 - -16, 44, -49, 44, 211, -15, -30, // 244 - 211, -15, -30, // 245 - -29, // 246 - -25, // 247 - -15, 44, -16, -30, // 248 - -15, 44, -29, // 249 - -15, 44, 211, -15, -30, // 250 - -15, 44, -16, 44, 211, -15, -30, // 251 - -49, -30, // 252 - -49, 44, 211, -15, -30, // 253 - -15, 44, -49, -30, // 254 - -15, 44, -16, 44, -49, -30, // 255 - -15, 44, -49, 44, 211, -15, -30, // 256 - -15, 44, -16, 44, -49, 44, 211, -15, -30, // 257 - 211, -15, -30, // 258 - -29, // 259 - // 260 - -108, -38, // 261 - -36, // 262 - // 263 - 207, -109, 41, // 264 - // 265 - 207, -37, -110, 41, // 266 - 212, -15, // 267 - 44, -29, // 268 + 155, // 30 + 156, // 31 + 157, // 32 + -12, // 33 + -94, 61, -26, // 34 + -88, 61, -26, // 35 + -93, 220, -26, // 36 + -11, 91, -38, 93, 220, -26, // 37 + -11, 46, 214, 220, -26, // 38 + -11, 46, 218, 220, -26, // 39 + -11, 202, 214, 220, -26, // 40 + -94, 61, -45, // 41 + -88, 61, -18, // 42 + -88, 61, -45, // 43 + -2, 172, -12, // 44 + -2, 173, -12, // 45 + -2, 174, -12, // 46 + -2, 175, -12, // 47 + -2, 176, -2, // 48 + -19, 44, -18, // 49 + -19, 44, 211, -18, // 50 + 211, -18, // 51 + -26, // 52 + -12, 169, -12, // 53 + -12, 170, -12, // 54 + -12, 169, -6, // 55 + -12, 170, -6, // 56 + 171, -12, // 57 + 33, -26, // 58 + -18, // 59 + -28, // 60 + -27, // 61 + -25, // 62 + -25, 46, -81, -44, // 63 + -25, 202, -81, -44, // 64 + // 65 + // 66 + 210, -105, -96, -106, -4, 125, // 67 + -78, -44, // 68 + -78, -44, -34, // 69 + -11, 46, -81, -44, // 70 + -11, 46, -81, -44, -34, // 71 + -11, 202, -81, -44, // 72 + -11, 202, -81, -44, -34, // 73 + 164, -44, // 74 + 163, -44, // 75 + -89, -90, // 76 + -89, // 77 + 205, -88, 41, // 78 + -89, -91, // 79 + -91, // 80 + 211, -92, // 81 + 211, // 82 + -89, -90, 44, // 83 + -90, 44, // 84 + -92, // 85 + 205, -88, 41, // 86 + -79, // 87 + -11, 91, -38, 93, // 88 + -11, 46, 214, // 89 + -11, 202, 214, // 90 + -11, 46, 218, // 91 + -11, 202, 218, // 92 + 203, 218, // 93 + -77, // 94 + -79, // 95 + -11, 91, -38, 93, // 96 + -11, 46, 214, // 97 + -11, 202, 214, // 98 + -11, 46, 218, // 99 + -11, 202, 218, // 100 + 203, 218, // 101 + -77, // 102 + 218, // 103 + 214, // 104 + 203, -83, // 105 + -83, // 106 + -11, 202, -83, // 107 + 214, // 108 + 218, // 109 + 215, // 110 + -84, // 111 + -107, // 112 + -85, // 113 + -86, // 114 + -87, // 115 + // 116 + -31, 44, -108, -87, // 117 + 124, // 118 + 94, // 119 + 38, // 120 + 186, // 121 + 187, // 122 + 188, // 123 + 194, // 124 + 62, // 125 + 190, // 126 + 60, // 127 + 191, // 128 + 200, // 129 + 201, // 130 + 43, // 131 + 45, // 132 + 42, // 133 + 211, // 134 + 47, // 135 + 37, // 136 + 185, // 137 + 126, // 138 + 183, // 139 + 184, // 140 + 198, // 141 + 199, // 142 + 96, // 143 + 181, // 144 + 182, // 145 + 179, // 146 + 180, // 147 + 177, // 148 + 169, // 149 + 140, // 150 + 154, // 151 + 149, // 152 + 136, // 153 + 138, // 154 + 178, // 155 + 159, // 156 + 148, // 157 + 147, // 158 + 143, // 159 + 142, // 160 + 168, // 161 + 153, // 162 + 158, // 163 + 137, // 164 + 155, // 165 + 166, // 166 + 171, // 167 + 170, // 168 + 156, // 169 + 141, // 170 + 157, // 171 + 162, // 172 + 165, // 173 + 164, // 174 + 146, // 175 + 167, // 176 + 139, // 177 + 150, // 178 + 163, // 179 + 172, // 180 + 173, // 181 + 174, // 182 + 175, // 183 + 176, // 184 + -94, 61, -18, // 185 + -94, 61, -18, 176, -18, // 186 + -94, 61, -18, 176, -8, // 187 + -93, 220, -18, // 188 + -11, 91, -38, 93, 220, -18, // 189 + -11, 46, 214, 220, -18, // 190 + -11, 46, 218, 220, -18, // 191 + -11, 202, 214, 220, -18, // 192 + -11, 202, 218, 220, -18, // 193 + 203, 218, 220, -18, // 194 + -77, 220, -18, // 195 + -18, 43, -18, // 196 + -18, 45, -18, // 197 + -18, 42, -18, // 198 + -18, 47, -18, // 199 + -18, 37, -18, // 200 + -18, 185, -18, // 201 + 235, 221, 185, -18, // 202 + 235, 222, 185, -18, // 203 + 235, 223, 185, -18, // 204 + 183, -18, // 205 + 184, -18, // 206 + -18, 124, -18, // 207 + -18, 94, -18, // 208 + -18, 38, -18, // 209 + -18, 186, -18, // 210 + -18, 62, -18, // 211 + -18, 190, -18, // 212 + -18, 60, -18, // 213 + -18, 191, -18, // 214 + -18, 187, -18, // 215 + -18, 188, -18, // 216 + -18, 189, -18, // 217 + -18, 194, -18, // 218 + -18, 195, -18, // 219 + 33, -18, // 220 + 126, -18, // 221 + -18, 200, -18, // 222 + -18, 201, -18, // 223 + -18, 192, -18, // 224 + -18, 193, -18, // 225 + -18, 192, -8, // 226 + -18, 193, -8, // 227 + -18, 196, -18, // 228 + -18, 197, -18, // 229 + 178, -109, -18, // 230 + -18, 63, -18, 58, -18, // 231 + -11, // 232 + // 233 + -28, -109, // 234 + -19, -110, // 235 + -19, 44, 211, -18, -109, // 236 + -52, -110, // 237 + 211, -18, -109, // 238 + 40, 41, // 239 + 40, -39, -109, 41, // 240 + 40, -25, -109, 41, // 241 + 40, -19, 44, -25, -109, 41, // 242 + // 243 + -42, // 244 + -19, -33, // 245 + -19, 44, 211, -18, -33, // 246 + -52, -33, // 247 + -52, 44, 211, -18, -33, // 248 + -19, 44, -52, -33, // 249 + -19, 44, -52, 44, 211, -18, -33, // 250 + 211, -18, -33, // 251 + -32, // 252 + -28, // 253 + -18, 44, -19, -33, // 254 + -18, 44, -32, // 255 + -18, 44, 211, -18, -33, // 256 + -18, 44, -19, 44, 211, -18, -33, // 257 + -52, -33, // 258 + -52, 44, 211, -18, -33, // 259 + -18, 44, -52, -33, // 260 + -18, 44, -19, 44, -52, -33, // 261 + -18, 44, -52, 44, 211, -18, -33, // 262 + -18, 44, -19, 44, -52, 44, 211, -18, -33, // 263 + 211, -18, -33, // 264 + -32, // 265 + // 266 + -111, -41, // 267 + -39, // 268 // 269 - -15, // 270 - -16, 44, -15, // 271 - -72, // 272 - -83, // 273 - -73, // 274 - -64, // 275 - -65, // 276 - -71, // 277 - -69, // 278 - -70, // 279 - -12, // 280 - -74, // 281 - 215, // 282 - -8, 202, 218, // 283 - 203, 218, // 284 - -8, 91, -35, 93, // 285 - 208, -35, 93, // 286 - 209, 125, // 287 - 209, -49, -107, 125, // 288 - 209, -16, -107, 125, // 289 - 163, 40, -36, 41, // 290 - 163, 40, 41, // 291 - 163, // 292 - 178, -106, 40, -9, 41, // 293 - -75, -32, // 294 - -21, // 295 - -21, -32, // 296 - 144, -9, -111, -4, -27, 143, // 297 - 145, -9, -111, -4, -26, 143, // 298 - // 299 - // 300 - 151, -112, -9, -113, -114, -4, 143, // 301 - // 302 - // 303 - 152, -115, -9, -113, -116, -4, 143, // 304 - -14, // 305 + 207, -112, 41, // 270 + // 271 + 207, -40, -113, 41, // 272 + 212, -18, // 273 + 44, -32, // 274 + // 275 + -18, // 276 + -19, 44, -18, // 277 + -75, // 278 + -86, // 279 + -76, // 280 + -67, // 281 + -68, // 282 + -74, // 283 + -72, // 284 + -73, // 285 + -15, // 286 + -77, // 287 + 215, // 288 + -11, 202, 218, // 289 + 203, 218, // 290 + -11, 91, -38, 93, // 291 + 208, -38, 93, // 292 + 209, 125, // 293 + 209, -52, -110, 125, // 294 + 209, -19, -110, 125, // 295 + 163, 40, -39, 41, // 296 + 163, 40, 41, // 297 + 163, // 298 + 178, -109, 40, -12, 41, // 299 + -78, -35, // 300 + -24, // 301 + -24, -35, // 302 + 144, -12, -114, -4, -30, 143, // 303 + 145, -12, -114, -4, -29, 143, // 304 + // 305 // 306 - // 307 - 153, -92, 158, -117, -9, -113, -118, -4, 143, // 308 - -18, // 309 - -19, // 310 - // 311 - 207, -9, -119, -106, 41, // 312 - 205, -4, 41, // 313 - 140, -20, 143, // 314 - // 315 - 136, -43, -11, -120, -20, 143, // 316 + 151, -115, -12, -116, -117, -4, 143, // 307 + // 308 + // 309 + 152, -118, -12, -116, -119, -4, 143, // 310 + -17, // 311 + // 312 + // 313 + 153, -95, 158, -120, -12, -116, -121, -4, 143, // 314 + -21, // 315 + -22, // 316 // 317 - // 318 - 136, 200, -9, -121, -122, -123, -20, 143, // 319 - // 320 - 137, -43, -124, -20, 143, // 321 - // 322 - 138, -82, -125, -51, -20, 143, // 323 + 207, -12, -122, -109, 41, // 318 + 205, -4, 41, // 319 + 140, -23, 143, // 320 + // 321 + 136, -46, -14, -123, -23, 143, // 322 + // 323 // 324 - // 325 - 138, -13, -126, -127, -82, -128, -51, -20, 143, // 326 - -4, -45, -26, -5, // 327 - 149, -9, -97, -47, -26, 143, // 328 - 149, -97, -47, -26, 143, // 329 - 149, -9, -97, -26, 143, // 330 - 149, -97, -26, 143, // 331 - -122, // 332 - 58, // 333 - 146, // 334 - -122, 146, // 335 - -122, // 336 - 58, // 337 - 160, // 338 - -26, // 339 - 147, -9, -111, -4, -27, // 340 - // 341 - 148, -4, // 342 - -91, // 343 - -85, // 344 - // 345 - 124, 124, // 346 - 193, // 347 - 124, -92, 124, // 348 - // 349 - // 350 - 161, -129, -93, -130, -4, 143, // 351 - -25, -33, // 352 - -22, 46, -78, -40, // 353 - -22, 202, -78, -40, // 354 - -75, -39, // 355 - -8, 46, -78, -40, // 356 - -8, 202, -78, -39, // 357 - -8, 202, -79, // 358 - 164, -39, // 359 - 164, // 360 - // 361 - // 362 - 123, -131, -93, -132, -4, 125, // 363 - // 364 - // 365 - 159, -133, -93, -134, -4, 143, // 366 - -48, // 367 - -47, -48, // 368 - 150, -34, -111, -4, // 369 - -16, // 370 - -16, 44, 211, -15, // 371 - 211, -15, // 372 - // 373 - -44, // 374 - -46, // 375 - -44, -46, // 376 - 141, -17, -94, -111, -4, // 377 - -15, // 378 - -42, // 379 - // 380 - 204, -91, // 381 - // 382 - // 383 - 142, -4, // 384 - -63, // 385 - -64, -63, // 386 - 227, -62, 206, // 387 - 229, -62, 206, // 388 - 233, -62, 206, // 389 - 228, -62, 226, // 390 - 230, 135, 206, // 391 - 230, -67, 206, // 392 - // 393 - -67, -66, 135, // 394 - -61, // 395 - -66, -61, // 396 - 231, 135, 206, // 397 - 231, -68, 206, // 398 + 136, 200, -12, -124, -125, -126, -23, 143, // 325 + // 326 + 137, -46, -127, -23, 143, // 327 + // 328 + 138, -85, -128, -54, -23, 143, // 329 + // 330 + // 331 + 138, -16, -129, -130, -85, -131, -54, -23, 143, // 332 + -4, -48, -29, -5, // 333 + 149, -12, -100, -50, -29, 143, // 334 + 149, -100, -50, -29, 143, // 335 + 149, -12, -100, -29, 143, // 336 + 149, -100, -29, 143, // 337 + -125, // 338 + 58, // 339 + 146, // 340 + -125, 146, // 341 + -125, // 342 + 58, // 343 + 160, // 344 + -29, // 345 + 147, -12, -114, -4, -30, // 346 + // 347 + 148, -4, // 348 + -94, // 349 + -88, // 350 + // 351 + 124, 124, // 352 + 193, // 353 + 124, -95, 124, // 354 + // 355 + // 356 + 161, -132, -96, -133, -4, 143, // 357 + -28, -36, // 358 + -25, 46, -81, -43, // 359 + -25, 202, -81, -43, // 360 + -78, -42, // 361 + -11, 46, -81, -43, // 362 + -11, 202, -81, -42, // 363 + -11, 202, -82, // 364 + 164, -42, // 365 + 164, // 366 + // 367 + // 368 + 123, -134, -96, -135, -4, 125, // 369 + // 370 + // 371 + 159, -136, -96, -137, -4, 143, // 372 + -51, // 373 + -50, -51, // 374 + 150, -37, -114, -4, // 375 + -19, // 376 + -19, 44, 211, -18, // 377 + 211, -18, // 378 + // 379 + -47, // 380 + -49, // 381 + -47, -49, // 382 + 141, -20, -97, -114, -4, // 383 + -18, // 384 + -45, // 385 + // 386 + 204, -94, // 387 + // 388 + // 389 + 142, -4, // 390 + -66, // 391 + -67, -66, // 392 + 227, -65, 206, // 393 + 229, -65, 206, // 394 + 233, -65, 206, // 395 + 228, -65, 226, // 396 + 230, 135, 206, // 397 + 230, -70, 206, // 398 // 399 - -68, 224, 135, // 400 - // 401 - -62, -61, // 402 - 224, // 403 - // 404 - 213, -135, -60, // 405 - // 406 - 232, -136, -4, 125, // 407 - 216, // 408 - -74, // 409 - 217, // 410 - 219, // 411 - 233, -77, // 412 - -82, // 413 - 217, // 414 - 216, // 415 - 219, // 416 - 221, // 417 - 222, // 418 - 223, // 419 - 235, 221, // 420 - 235, 222, // 421 - 235, 223, // 422 - 214, // 423 - 217, // 424 - 216, // 425 - 218, // 426 - 219, // 427 - 166, // 428 - 165, // 429 - 167, // 430 - 168, // 431 - 182, // 432 - 181, // 433 - -76, // 434 - -76, // 435 - 225, // 436 - -122, // 437 - // 438 - 60, -137, -9, -122, // 439 - 128, -122, // 440 - 40, -52, -106, 41, // 441 - -52, -122, // 442 - -53, 44, -58, 44, -55, -57, // 443 - -53, 44, -58, -57, // 444 - -53, 44, -55, -57, // 445 - -53, -57, // 446 - -58, 44, -55, -57, // 447 - -58, -57, // 448 - -55, -57, // 449 - -56, // 450 - // 451 - 218, // 452 - 217, // 453 - 216, // 454 - 219, // 455 - 214, // 456 - -54, // 457 - -53, 44, -54, // 458 - -54, 61, -15, // 459 - -59, // 460 - -58, 44, -59, // 461 - 42, // 462 - 211, // 463 - -138, -54, // 464 - -138, // 465 - 38, // 466 - 212, // 467 - -139, -54, // 468 - // 469 - 44, -56, // 470 - -12, // 471 - // 472 - 40, -140, -9, -106, 41, // 473 - -50, // 474 - -49, 44, -50, // 475 - -15, 204, -15, // 476 - 214, // 477 - 218, // 478 - 215, // 479 - 214, // 480 - 218, // 481 - 215, // 482 - -81, // 483 - 214, // 484 + -70, -69, 135, // 400 + -64, // 401 + -69, -64, // 402 + 231, 135, 206, // 403 + 231, -71, 206, // 404 + // 405 + -71, 224, 135, // 406 + // 407 + -65, -64, // 408 + 224, // 409 + // 410 + 213, -138, -63, // 411 + // 412 + 232, -139, -4, 125, // 413 + 216, // 414 + -77, // 415 + 217, // 416 + 219, // 417 + 233, -80, // 418 + -85, // 419 + 217, // 420 + 216, // 421 + 219, // 422 + 221, // 423 + 222, // 424 + 223, // 425 + 235, 221, // 426 + 235, 222, // 427 + 235, 223, // 428 + 214, // 429 + 217, // 430 + 216, // 431 + 218, // 432 + 219, // 433 + 166, // 434 + 165, // 435 + 167, // 436 + 168, // 437 + 182, // 438 + 181, // 439 + -79, // 440 + -79, // 441 + 225, // 442 + -125, // 443 + // 444 + 60, -140, -12, -125, // 445 + 128, -125, // 446 + 40, -55, -109, 41, // 447 + -55, -125, // 448 + -56, 44, -61, 44, -58, -60, // 449 + -56, 44, -61, -60, // 450 + -56, 44, -58, -60, // 451 + -56, -60, // 452 + -61, 44, -58, -60, // 453 + -61, -60, // 454 + -58, -60, // 455 + -59, // 456 + // 457 + 218, // 458 + 217, // 459 + 216, // 460 + 219, // 461 + 214, // 462 + -57, // 463 + -56, 44, -57, // 464 + -57, 61, -18, // 465 + -62, // 466 + -61, 44, -62, // 467 + 42, // 468 + 211, // 469 + -141, -57, // 470 + -141, // 471 + 38, // 472 + 212, // 473 + -142, -57, // 474 + // 475 + 44, -59, // 476 + -15, // 477 + // 478 + 40, -143, -12, -109, 41, // 479 + -53, // 480 + -52, 44, -53, // 481 + -18, 204, -18, // 482 + 214, // 483 + 218, // 484 215, // 485 - -81, // 486 - 46, // 487 - 202, // 488 - // 489 - -98, // 490 - // 491 - 10, // 492 - // 493 - 10, // 494 - 44, // 495 - 59, // 496 - 10, // 497 - -122, // 498 - -98, 59, // 499 + 214, // 486 + 218, // 487 + 215, // 488 + -84, // 489 + 214, // 490 + 215, // 491 + -84, // 492 + 46, // 493 + 202, // 494 + // 495 + -101, // 496 + // 497 + 10, // 498 + // 499 + 10, // 500 + 44, // 501 + 59, // 502 + 10, // 503 + -125, // 504 + -101, 59, // 505 }; } #endif @@ -1510,15 +1526,15 @@ case 45: _45(); return; case 46: _46(); return; case 47: _47(); return; + case 48: _48(); return; case 49: _49(); return; case 50: _50(); return; - case 51: _51(); return; case 52: _52(); return; case 53: _53(); return; case 54: _54(); return; + case 55: _55(); return; case 56: _56(); return; case 57: _57(); return; - case 58: _58(); return; case 59: _59(); return; case 60: _60(); return; case 61: _61(); return; @@ -1600,9 +1616,9 @@ case 137: _137(); return; case 138: _138(); return; case 139: _139(); return; - case 181: _181(); return; - case 182: _182(); return; - case 183: _183(); return; + case 140: _140(); return; + case 141: _141(); return; + case 142: _142(); return; case 184: _184(); return; case 185: _185(); return; case 186: _186(); return; @@ -1656,12 +1672,12 @@ case 234: _234(); return; case 235: _235(); return; case 236: _236(); return; + case 237: _237(); return; case 238: _238(); return; case 239: _239(); return; case 240: _240(); return; case 241: _241(); return; case 242: _242(); return; - case 243: _243(); return; case 244: _244(); return; case 245: _245(); return; case 246: _246(); return; @@ -1679,23 +1695,23 @@ case 258: _258(); return; case 259: _259(); return; case 260: _260(); return; + case 261: _261(); return; case 262: _262(); return; case 263: _263(); return; case 264: _264(); return; case 265: _265(); return; case 266: _266(); return; - case 267: _267(); return; case 268: _268(); return; case 269: _269(); return; case 270: _270(); return; + case 271: _271(); return; case 272: _272(); return; + case 273: _273(); return; case 274: _274(); return; + case 275: _275(); return; + case 276: _276(); return; + case 278: _278(); return; case 280: _280(); return; - case 281: _281(); return; - case 282: _282(); return; - case 283: _283(); return; - case 284: _284(); return; - case 285: _285(); return; case 286: _286(); return; case 287: _287(); return; case 288: _288(); return; @@ -1704,24 +1720,24 @@ case 291: _291(); return; case 292: _292(); return; case 293: _293(); return; + case 294: _294(); return; case 295: _295(); return; case 296: _296(); return; case 297: _297(); return; case 298: _298(); return; case 299: _299(); return; - case 300: _300(); return; case 301: _301(); return; case 302: _302(); return; case 303: _303(); return; + case 304: _304(); return; case 305: _305(); return; case 306: _306(); return; case 307: _307(); return; - case 310: _310(); return; + case 308: _308(); return; + case 309: _309(); return; case 311: _311(); return; case 312: _312(); return; case 313: _313(); return; - case 314: _314(); return; - case 315: _315(); return; case 316: _316(); return; case 317: _317(); return; case 318: _318(); return; @@ -1737,12 +1753,12 @@ case 328: _328(); return; case 329: _329(); return; case 330: _330(); return; - case 338: _338(); return; - case 339: _339(); return; - case 340: _340(); return; - case 341: _341(); return; - case 342: _342(); return; - case 343: _343(); return; + case 331: _331(); return; + case 332: _332(); return; + case 333: _333(); return; + case 334: _334(); return; + case 335: _335(); return; + case 336: _336(); return; case 344: _344(); return; case 345: _345(); return; case 346: _346(); return; @@ -1771,18 +1787,18 @@ case 369: _369(); return; case 370: _370(); return; case 371: _371(); return; + case 372: _372(); return; + case 373: _373(); return; case 374: _374(); return; case 375: _375(); return; case 376: _376(); return; case 377: _377(); return; - case 378: _378(); return; case 380: _380(); return; + case 381: _381(); return; + case 382: _382(); return; case 383: _383(); return; case 384: _384(); return; - case 385: _385(); return; case 386: _386(); return; - case 387: _387(); return; - case 388: _388(); return; case 389: _389(); return; case 390: _390(); return; case 391: _391(); return; @@ -1806,12 +1822,12 @@ case 409: _409(); return; case 410: _410(); return; case 411: _411(); return; + case 412: _412(); return; + case 413: _413(); return; + case 414: _414(); return; + case 415: _415(); return; case 416: _416(); return; case 417: _417(); return; - case 418: _418(); return; - case 419: _419(); return; - case 420: _420(); return; - case 421: _421(); return; case 422: _422(); return; case 423: _423(); return; case 424: _424(); return; @@ -1851,24 +1867,30 @@ case 458: _458(); return; case 459: _459(); return; case 460: _460(); return; + case 461: _461(); return; + case 462: _462(); return; case 463: _463(); return; case 464: _464(); return; - case 467: _467(); return; + case 465: _465(); return; + case 466: _466(); return; case 469: _469(); return; - case 471: _471(); return; - case 472: _472(); return; + case 470: _470(); return; case 473: _473(); return; - case 474: _474(); return; case 475: _475(); return; - case 495: _495(); return; - case 498: _498(); return; + case 477: _477(); return; + case 478: _478(); return; + case 479: _479(); return; + case 480: _480(); return; + case 481: _481(); return; + case 501: _501(); return; + case 504: _504(); return; } } private void _1() { // @1 -> -#line 157 "Parser.y" +#line 160 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_BEG); } @@ -1877,7 +1899,7 @@ private void _2() { // program -> @1 compstmt -#line 161 "Parser.y" +#line 164 "Parser.y" { _ast = new SourceUnitTree(CurrentScope, GetValue(1).Statements, _initializers, yyloc); } @@ -1886,7 +1908,7 @@ private void _3() { // compstmt -> stmts opt_terms -#line 167 "Parser.y" +#line 170 "Parser.y" { yyval.Statements = GetValue(2).Statements; } @@ -1895,7 +1917,7 @@ private void _4() { // stmts -> -#line 173 "Parser.y" +#line 176 "Parser.y" { yyval.Statements = new List(); } @@ -1904,7 +1926,7 @@ private void _5() { // stmts -> stmt -#line 177 "Parser.y" +#line 180 "Parser.y" { yyval.Statements = CollectionUtils.MakeList(GetValue(1).Statement); } @@ -1913,7 +1935,7 @@ private void _6() { // stmts -> stmts terms stmt -#line 181 "Parser.y" +#line 184 "Parser.y" { GetValue(3).Statements.Add(GetValue(1).Statement); yyval.Statements = GetValue(3).Statements; @@ -1923,7 +1945,7 @@ private void _7() { // stmts -> Error stmt -#line 186 "Parser.y" +#line 189 "Parser.y" { yyval.Statements = CollectionUtils.MakeList(GetValue(1).Statement); } @@ -1932,7 +1954,7 @@ private void _9() { // stmt -> Undef undef_list -#line 193 "Parser.y" +#line 196 "Parser.y" { yyval.Statement = new UndefineStatement(GetValue(1).Identifiers, yyloc); } @@ -1940,53 +1962,8 @@ private void _10() { - // stmt -> stmt IfMod expr -#line 197 "Parser.y" - { - yyval.Statement = new ConditionalStatement(GetValue(1).Expression, false, GetValue(3).Statement, yyloc); - } - } - - private void _11() - { - // stmt -> stmt UnlessMod expr -#line 201 "Parser.y" - { - yyval.Statement = new ConditionalStatement(GetValue(1).Expression, true, GetValue(3).Statement, yyloc); - } - } - - private void _12() - { - // stmt -> stmt WhileMod expr -#line 205 "Parser.y" - { - yyval.Statement = MakeLoopStatement(GetValue(3).Statement, GetValue(1).Expression, true, yyloc); - } - } - - private void _13() - { - // stmt -> stmt UntilMod expr -#line 209 "Parser.y" - { - yyval.Statement = MakeLoopStatement(GetValue(3).Statement, GetValue(1).Expression, false, yyloc); - } - } - - private void _14() - { - // stmt -> stmt RescueMod stmt -#line 213 "Parser.y" - { - yyval.Statement = new RescueStatement(GetValue(3).Statement, GetValue(1).Statement, MergeLocations(GetLocation(2), GetLocation(1)), yyloc); - } - } - - private void _15() - { // @2 -> -#line 217 "Parser.y" +#line 200 "Parser.y" { if (InMethod) { _tokenizer.ReportError("BEGIN in method"); @@ -1996,20 +1973,20 @@ } } - private void _16() + private void _11() { // stmt -> UppercaseBegin @2 '{' compstmt '}' -#line 225 "Parser.y" +#line 208 "Parser.y" { yyval.Statement = AddInitializer(new Initializer(CurrentScope, GetValue(2).Statements, yyloc)); LeaveScope(); } } - private void _17() + private void _12() { // @3 -> -#line 230 "Parser.y" +#line 213 "Parser.y" { if (InMethod) { ErrorSink.Add(_sourceUnit, "END in method; use at_exit", GetLocation(1), -1, Severity.Warning); @@ -2019,1548 +1996,1647 @@ } } - private void _18() + private void _13() { // stmt -> UppercaseEnd @3 '{' compstmt '}' -#line 238 "Parser.y" +#line 221 "Parser.y" { yyval.Statement = new Finalizer(CurrentScope, GetValue(2).Statements, yyloc); LeaveScope(); } } - private void _19() + private void _14() { // stmt -> match_reference Assignment command_call -#line 243 "Parser.y" +#line 226 "Parser.y" { MatchReferenceReadOnlyError(GetValue(3).RegexMatchReference); yyval.Statement = new ExpressionStatement(new ErrorExpression(yyloc)); } } - private void _20() + private void _15() { // stmt -> jump_statement -#line 248 "Parser.y" +#line 231 "Parser.y" { yyval.Statement = GetValue(1).JumpStatement; } } - private void _21() + private void _16() { + // stmt -> conditional_statement +#line 235 "Parser.y" + { + yyval.Statement = GetValue(1).Statement; + } + } + + private void _17() + { // stmt -> expression_statement -#line 252 "Parser.y" +#line 239 "Parser.y" { yyval.Statement = new ExpressionStatement(GetValue(1).Expression); } } - private void _22() + private void _18() { // @4 -> -#line 259 "Parser.y" +#line 246 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_FNAME); } } - private void _23() + private void _19() { // alias_statement -> Alias method_name_or_symbol @4 method_name_or_symbol -#line 263 "Parser.y" +#line 250 "Parser.y" { yyval.Statement = new AliasStatement(true, GetValue(3).SymbolId, GetValue(1).SymbolId, yyloc); } } - private void _24() + private void _20() { // alias_statement -> Alias GlobalVariable GlobalVariable -#line 267 "Parser.y" +#line 254 "Parser.y" { yyval.Statement = MakeGlobalAlias(GetValue(2).SymbolId, GetValue(1).SymbolId, yyloc); } } - private void _25() + private void _21() { // alias_statement -> Alias GlobalVariable match_reference -#line 271 "Parser.y" +#line 258 "Parser.y" { yyval.Statement = MakeGlobalAlias(GetValue(2).SymbolId, GetValue(1).RegexMatchReference, yyloc); } } - private void _26() + private void _22() { - // jump_statement -> Return -#line 278 "Parser.y" + // jump_statement -> jump_statement_with_parameters +#line 265 "Parser.y" { - yyval.JumpStatement = new ReturnStatement(CurrentScope, null, yyloc); + yyval.JumpStatement = GetValue(1).JumpStatement; + } + } + + private void _23() + { + // jump_statement -> jump_statement_parameterless +#line 269 "Parser.y" + { + yyval.JumpStatement = GetValue(1).JumpStatement; + } + } + + private void _24() + { + // jump_statement_with_parameters -> Return open_args +#line 276 "Parser.y" + { + yyval.JumpStatement = new ReturnStatement(CurrentScope, RequireNoBlockArg(GetValue(1).Arguments), yyloc); } } - private void _27() + private void _25() { - // jump_statement -> Return open_args -#line 282 "Parser.y" + // jump_statement_with_parameters -> Break open_args +#line 280 "Parser.y" { - yyval.JumpStatement = new ReturnStatement(CurrentScope, RequireNoBlockArg(GetValue(1).Arguments), yyloc); + yyval.JumpStatement = new BreakStatement(CurrentScope, RequireNoBlockArg(GetValue(1).Arguments), yyloc); } } - private void _28() + private void _26() { - // jump_statement -> Break -#line 286 "Parser.y" + // jump_statement_with_parameters -> Next open_args +#line 284 "Parser.y" { - yyval.JumpStatement = new BreakStatement(CurrentScope, null, yyloc); + yyval.JumpStatement = new NextStatement(CurrentScope, RequireNoBlockArg(GetValue(1).Arguments), yyloc); } } - private void _29() + private void _27() { - // jump_statement -> Break open_args -#line 290 "Parser.y" + // jump_statement_parameterless -> Return +#line 291 "Parser.y" { - yyval.JumpStatement = new BreakStatement(CurrentScope, RequireNoBlockArg(GetValue(1).Arguments), yyloc); + yyval.JumpStatement = new ReturnStatement(CurrentScope, null, yyloc); } } - private void _30() + private void _28() { - // jump_statement -> Next -#line 294 "Parser.y" + // jump_statement_parameterless -> Break +#line 295 "Parser.y" { - yyval.JumpStatement = new NextStatement(CurrentScope, null, yyloc); + yyval.JumpStatement = new BreakStatement(CurrentScope, null, yyloc); } } - private void _31() + private void _29() { - // jump_statement -> Next open_args -#line 298 "Parser.y" + // jump_statement_parameterless -> Next +#line 299 "Parser.y" { - yyval.JumpStatement = new NextStatement(CurrentScope, RequireNoBlockArg(GetValue(1).Arguments), yyloc); + yyval.JumpStatement = new NextStatement(CurrentScope, null, yyloc); } } - private void _32() + private void _30() { - // jump_statement -> Redo -#line 302 "Parser.y" + // jump_statement_parameterless -> Redo +#line 303 "Parser.y" { yyval.JumpStatement = new RedoStatement(CurrentScope, yyloc); } } - private void _33() + private void _31() { - // jump_statement -> Retry -#line 306 "Parser.y" + // jump_statement_parameterless -> Retry +#line 307 "Parser.y" { yyval.JumpStatement = new RetryStatement(CurrentScope, yyloc); } } - private void _34() + private void _32() { // expression_statement -> expr -#line 313 "Parser.y" +#line 314 "Parser.y" { yyval.Expression = GetValue(1).Expression; } } - private void _35() + private void _33() { // expression_statement -> lhs '=' command_call -#line 317 "Parser.y" +#line 318 "Parser.y" { yyval.Expression = new SimpleAssignmentExpression(GetValue(3).LeftValue, GetValue(1).CallExpression, SymbolId.Empty, yyloc); } } - private void _36() + private void _34() { // expression_statement -> compound_lhs '=' command_call -#line 321 "Parser.y" +#line 322 "Parser.y" { yyval.Expression = new ParallelAssignmentExpression(GetValue(3).CompoundLeftValue, new CompoundRightValue(CollectionUtils.MakeList(GetValue(1).CallExpression), null), SymbolId.Empty, yyloc); } } - private void _37() + private void _35() { // expression_statement -> var_lhs Assignment command_call -#line 325 "Parser.y" +#line 326 "Parser.y" { yyval.Expression = new SimpleAssignmentExpression(GetValue(3).LeftValue, GetValue(1).CallExpression, GetValue(2).SymbolId, yyloc); } } - private void _38() + private void _36() { // expression_statement -> primary '[' array_key ']' Assignment command_call -#line 329 "Parser.y" +#line 330 "Parser.y" { yyval.Expression = new SimpleAssignmentExpression(new ArrayItemAccess(GetValue(6).Expression, GetValue(4).Arguments, GetLocation(5)), GetValue(1).CallExpression, GetValue(2).SymbolId, yyloc); } } - private void _39() + private void _37() { // expression_statement -> primary '.' Identifier Assignment command_call -#line 333 "Parser.y" +#line 334 "Parser.y" { yyval.Expression = new MemberAssignmentExpression(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).SymbolId, GetValue(1).CallExpression, yyloc); } } - private void _40() + private void _38() { // expression_statement -> primary '.' ConstantIdentifier Assignment command_call -#line 337 "Parser.y" +#line 338 "Parser.y" { yyval.Expression = new MemberAssignmentExpression(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).SymbolId, GetValue(1).CallExpression, yyloc); } } - private void _41() + private void _39() { // expression_statement -> primary SeparatingDoubleColon Identifier Assignment command_call -#line 341 "Parser.y" +#line 342 "Parser.y" { yyval.Expression = new MemberAssignmentExpression(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).SymbolId, GetValue(1).CallExpression, yyloc); } } - private void _42() + private void _40() { // expression_statement -> lhs '=' compound_rhs -#line 345 "Parser.y" +#line 346 "Parser.y" { yyval.Expression = new ParallelAssignmentExpression(new CompoundLeftValue(CollectionUtils.MakeList(GetValue(3).LeftValue), null, GetLocation(3)), GetValue(1).CompoundRightValue, SymbolId.Empty, yyloc); } } - private void _43() + private void _41() { // expression_statement -> compound_lhs '=' arg -#line 349 "Parser.y" +#line 350 "Parser.y" { yyval.Expression = new ParallelAssignmentExpression(GetValue(3).CompoundLeftValue, new CompoundRightValue(CollectionUtils.MakeList(GetValue(1).Expression), null), SymbolId.Empty, yyloc); } } - private void _44() + private void _42() { // expression_statement -> compound_lhs '=' compound_rhs -#line 353 "Parser.y" +#line 354 "Parser.y" { yyval.Expression = new ParallelAssignmentExpression(GetValue(3).CompoundLeftValue, GetValue(1).CompoundRightValue, SymbolId.Empty, yyloc); } } + private void _43() + { + // conditional_statement -> stmt IfMod expr +#line 361 "Parser.y" + { + yyval.Statement = new ConditionalStatement(GetValue(1).Expression, false, GetValue(3).Statement, yyloc); + } + } + + private void _44() + { + // conditional_statement -> stmt UnlessMod expr +#line 365 "Parser.y" + { + yyval.Statement = new ConditionalStatement(GetValue(1).Expression, true, GetValue(3).Statement, yyloc); + } + } + private void _45() { + // conditional_statement -> stmt WhileMod expr +#line 369 "Parser.y" + { + yyval.Statement = MakeLoopStatement(GetValue(3).Statement, GetValue(1).Expression, true, yyloc); + } + } + + private void _46() + { + // conditional_statement -> stmt UntilMod expr +#line 373 "Parser.y" + { + yyval.Statement = MakeLoopStatement(GetValue(3).Statement, GetValue(1).Expression, false, yyloc); + } + } + + private void _47() + { + // conditional_statement -> stmt RescueMod stmt +#line 377 "Parser.y" + { + yyval.Statement = new RescueStatement(GetValue(3).Statement, GetValue(1).Statement, MergeLocations(GetLocation(2), GetLocation(1)), yyloc); + } + } + + private void _48() + { // compound_rhs -> args ',' arg -#line 360 "Parser.y" +#line 384 "Parser.y" { GetValue(3).Expressions.Add(GetValue(1).Expression); yyval.CompoundRightValue = new CompoundRightValue(GetValue(3).Expressions, null); } } - private void _46() + private void _49() { // compound_rhs -> args ',' Star arg -#line 365 "Parser.y" +#line 389 "Parser.y" { yyval.CompoundRightValue = new CompoundRightValue(GetValue(4).Expressions, GetValue(1).Expression); } } - private void _47() + private void _50() { // compound_rhs -> Star arg -#line 369 "Parser.y" +#line 393 "Parser.y" { yyval.CompoundRightValue = new CompoundRightValue(Expression.EmptyList, GetValue(1).Expression); } } - private void _49() + private void _52() { // expr -> expr And expr -#line 377 "Parser.y" +#line 401 "Parser.y" { yyval.Expression = new AndExpression(GetValue(3).Expression, GetValue(1).Expression, yyloc); } } - private void _50() + private void _53() { // expr -> expr Or expr -#line 381 "Parser.y" +#line 405 "Parser.y" { yyval.Expression = new OrExpression(GetValue(3).Expression, GetValue(1).Expression, yyloc); } } - private void _51() + private void _54() { // expr -> expr And jump_statement -#line 385 "Parser.y" +#line 409 "Parser.y" { yyval.Expression = new ConditionalJumpExpression(GetValue(3).Expression, GetValue(1).JumpStatement, false, yyloc); } } - private void _52() + private void _55() { // expr -> expr Or jump_statement -#line 389 "Parser.y" +#line 413 "Parser.y" { yyval.Expression = new ConditionalJumpExpression(GetValue(3).Expression, GetValue(1).JumpStatement, true, yyloc); } } - private void _53() + private void _56() { // expr -> Not expr -#line 393 "Parser.y" +#line 417 "Parser.y" { // TODO: warning: string literal in condition yyval.Expression = new NotExpression(GetValue(1).Expression, yyloc); } } - private void _54() + private void _57() { // expr -> '!' command_call -#line 398 "Parser.y" +#line 422 "Parser.y" { // TODO: warning: string literal in condition yyval.Expression = new NotExpression(GetValue(1).CallExpression, yyloc); } } - private void _56() + private void _59() { // command_call -> command -#line 406 "Parser.y" +#line 430 "Parser.y" { yyval.CallExpression = GetValue(1).CallExpression; } } - private void _57() + private void _60() { // command_call -> block_command -#line 410 "Parser.y" +#line 434 "Parser.y" { yyval.CallExpression = GetValue(1).CallExpression; } } - private void _58() + private void _61() { // block_command -> block_call -#line 416 "Parser.y" +#line 440 "Parser.y" { yyval.CallExpression = GetValue(1).CallExpression; } } - private void _59() + private void _62() { // block_command -> block_call '.' operation2 command_args -#line 420 "Parser.y" +#line 444 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).CallExpression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _60() + private void _63() { // block_command -> block_call SeparatingDoubleColon operation2 command_args -#line 424 "Parser.y" +#line 448 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).CallExpression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _61() + private void _64() { // @5 -> -#line 430 "Parser.y" +#line 454 "Parser.y" { EnterNewScope(ScopeKind.Block); } } - private void _62() + private void _65() { // @6 -> -#line 434 "Parser.y" +#line 458 "Parser.y" { } } - private void _63() + private void _66() { // cmd_brace_block -> LbraceArg @5 block_parameters_opt @6 compstmt '}' -#line 438 "Parser.y" +#line 462 "Parser.y" { yyval.BlockDefinition = new BlockDefinition(CurrentScope, GetValue(4).CompoundLeftValue, GetValue(2).Statements, yyloc); LeaveScope(); } } - private void _64() + private void _67() { // command -> operation command_args -#line 445 "Parser.y" +#line 469 "Parser.y" { yyval.CallExpression = new MethodCall(null, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _65() + private void _68() { // command -> operation command_args cmd_brace_block -#line 449 "Parser.y" +#line 473 "Parser.y" { GetValue(2).Arguments.Block = GetValue(1).BlockDefinition; yyval.CallExpression = new MethodCall(null, GetValue(3).SymbolId, GetValue(2).Arguments, yyloc); } } - private void _66() + private void _69() { // command -> primary '.' operation2 command_args -#line 454 "Parser.y" +#line 478 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).Expression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _67() + private void _70() { // command -> primary '.' operation2 command_args cmd_brace_block -#line 458 "Parser.y" +#line 482 "Parser.y" { GetValue(2).Arguments.Block = GetValue(1).BlockDefinition; yyval.CallExpression = new MethodCall(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).Arguments, yyloc); } } - private void _68() + private void _71() { // command -> primary SeparatingDoubleColon operation2 command_args -#line 463 "Parser.y" +#line 487 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).Expression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _69() + private void _72() { // command -> primary SeparatingDoubleColon operation2 command_args cmd_brace_block -#line 467 "Parser.y" +#line 491 "Parser.y" { GetValue(2).Arguments.Block = GetValue(1).BlockDefinition; yyval.CallExpression = new MethodCall(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).Arguments, yyloc); } } - private void _70() + private void _73() { // command -> Super command_args -#line 472 "Parser.y" +#line 496 "Parser.y" { yyval.CallExpression = new SuperCall(CurrentScope, GetValue(1).Arguments, yyloc); } } - private void _71() + private void _74() { // command -> Yield command_args -#line 476 "Parser.y" +#line 500 "Parser.y" { yyval.CallExpression = new YieldCall(GetValue(1).Arguments, yyloc); } } - private void _72() + private void _75() { // compound_lhs -> compound_lhs_head compound_lhs_item -#line 483 "Parser.y" +#line 507 "Parser.y" { GetValue(2).LeftValues.Add(GetValue(1).LeftValue); yyval.CompoundLeftValue = new CompoundLeftValue(GetValue(2).LeftValues, null, yyloc); } } - private void _73() + private void _76() { // compound_lhs -> compound_lhs_head -#line 488 "Parser.y" +#line 512 "Parser.y" { GetValue(1).LeftValues.Add(Placeholder.Singleton); yyval.CompoundLeftValue = new CompoundLeftValue(GetValue(1).LeftValues, null, yyloc); } } - private void _74() + private void _77() { // compound_lhs -> LeftParen compound_lhs ')' -#line 493 "Parser.y" +#line 517 "Parser.y" { yyval.CompoundLeftValue = new CompoundLeftValue(CollectionUtils.MakeList(GetValue(2).CompoundLeftValue), null, yyloc); } } - private void _75() + private void _78() { // compound_lhs -> compound_lhs_head compound_lhs_tail -#line 497 "Parser.y" +#line 521 "Parser.y" { yyval.CompoundLeftValue = new CompoundLeftValue(GetValue(2).LeftValues, GetValue(1).LeftValue, yyloc); } } - private void _76() + private void _79() { // compound_lhs -> compound_lhs_tail -#line 501 "Parser.y" +#line 525 "Parser.y" { yyval.CompoundLeftValue = new CompoundLeftValue(LeftValue.EmptyList, GetValue(1).LeftValue, yyloc); } } - private void _77() + private void _80() { // compound_lhs_tail -> Star compound_lhs_node -#line 508 "Parser.y" +#line 532 "Parser.y" { yyval.LeftValue = GetValue(1).LeftValue; } } - private void _78() + private void _81() { // compound_lhs_tail -> Star -#line 512 "Parser.y" +#line 536 "Parser.y" { yyval.LeftValue = null; } } - private void _79() + private void _82() { // compound_lhs_head -> compound_lhs_head compound_lhs_item ',' -#line 519 "Parser.y" +#line 543 "Parser.y" { GetValue(3).LeftValues.Add(GetValue(2).LeftValue); yyval.LeftValues = GetValue(3).LeftValues; } } - private void _80() + private void _83() { // compound_lhs_head -> compound_lhs_item ',' -#line 524 "Parser.y" +#line 548 "Parser.y" { yyval.LeftValues = CollectionUtils.MakeList(GetValue(2).LeftValue); } } - private void _81() + private void _84() { // compound_lhs_item -> compound_lhs_node -#line 531 "Parser.y" +#line 555 "Parser.y" { yyval.LeftValue = GetValue(1).LeftValue; } } - private void _82() + private void _85() { // compound_lhs_item -> LeftParen compound_lhs ')' -#line 535 "Parser.y" +#line 559 "Parser.y" { yyval.LeftValue = GetValue(2).CompoundLeftValue; } } - private void _83() + private void _86() { // compound_lhs_node -> variable -#line 542 "Parser.y" +#line 566 "Parser.y" { yyval.LeftValue = GetValue(1).VariableFactory.MakeLeftValue(this, GetValue(1).SymbolId, yyloc); } } - private void _84() + private void _87() { // compound_lhs_node -> primary '[' array_key ']' -#line 546 "Parser.y" +#line 570 "Parser.y" { yyval.LeftValue = new ArrayItemAccess(GetValue(4).Expression, GetValue(2).Arguments, yyloc); } } - private void _85() + private void _88() { // compound_lhs_node -> primary '.' Identifier -#line 550 "Parser.y" +#line 574 "Parser.y" { yyval.LeftValue = new AttributeAccess(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _86() + private void _89() { // compound_lhs_node -> primary SeparatingDoubleColon Identifier -#line 554 "Parser.y" +#line 578 "Parser.y" { yyval.LeftValue = new AttributeAccess(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _87() + private void _90() { // compound_lhs_node -> primary '.' ConstantIdentifier -#line 558 "Parser.y" +#line 582 "Parser.y" { yyval.LeftValue = new AttributeAccess(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _88() + private void _91() { // compound_lhs_node -> primary SeparatingDoubleColon ConstantIdentifier -#line 562 "Parser.y" +#line 586 "Parser.y" { yyval.LeftValue = new ConstantVariable(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _89() + private void _92() { // compound_lhs_node -> LeadingDoubleColon ConstantIdentifier -#line 566 "Parser.y" +#line 590 "Parser.y" { yyval.LeftValue = new ConstantVariable(null, GetValue(1).SymbolId, yyloc); } } - private void _90() + private void _93() { // compound_lhs_node -> match_reference -#line 570 "Parser.y" +#line 594 "Parser.y" { MatchReferenceReadOnlyError(GetValue(1).RegexMatchReference); yyval.LeftValue = new GlobalVariable(Symbols.Error, yyloc); } } - private void _91() + private void _94() { // lhs -> variable -#line 578 "Parser.y" +#line 602 "Parser.y" { yyval.LeftValue = GetValue(1).VariableFactory.MakeLeftValue(this, GetValue(1).SymbolId, yyloc); } } - private void _92() + private void _95() { // lhs -> primary '[' array_key ']' -#line 582 "Parser.y" +#line 606 "Parser.y" { yyval.LeftValue = new ArrayItemAccess(GetValue(4).Expression, GetValue(2).Arguments, yyloc); } } - private void _93() + private void _96() { // lhs -> primary '.' Identifier -#line 586 "Parser.y" +#line 610 "Parser.y" { yyval.LeftValue = new AttributeAccess(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _94() + private void _97() { // lhs -> primary SeparatingDoubleColon Identifier -#line 590 "Parser.y" +#line 614 "Parser.y" { yyval.LeftValue = new AttributeAccess(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _95() + private void _98() { // lhs -> primary '.' ConstantIdentifier -#line 594 "Parser.y" +#line 618 "Parser.y" { yyval.LeftValue = new AttributeAccess(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _96() + private void _99() { // lhs -> primary SeparatingDoubleColon ConstantIdentifier -#line 598 "Parser.y" +#line 622 "Parser.y" { yyval.LeftValue = new ConstantVariable(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _97() + private void _100() { // lhs -> LeadingDoubleColon ConstantIdentifier -#line 602 "Parser.y" +#line 626 "Parser.y" { yyval.LeftValue = new ConstantVariable(null, GetValue(1).SymbolId, yyloc); } } - private void _98() + private void _101() { // lhs -> match_reference -#line 606 "Parser.y" +#line 630 "Parser.y" { MatchReferenceReadOnlyError(GetValue(1).RegexMatchReference); yyval.LeftValue = new GlobalVariable(Symbols.Error, yyloc); } } - private void _99() + private void _102() { // module_name -> ConstantIdentifier -#line 614 "Parser.y" +#line 638 "Parser.y" { yyval.SymbolId = GetValue(1).SymbolId; } } - private void _100() + private void _103() { // module_name -> Identifier -#line 618 "Parser.y" +#line 642 "Parser.y" { _tokenizer.ReportError("Class/module name must be a constant"); yyval.SymbolId = GetValue(1).SymbolId; } } - private void _101() + private void _104() { // qualified_module_name -> LeadingDoubleColon module_name -#line 626 "Parser.y" +#line 650 "Parser.y" { yyval.ConstantVariable = new ConstantVariable(null, GetValue(1).SymbolId, yyloc); } } - private void _102() + private void _105() { // qualified_module_name -> module_name -#line 630 "Parser.y" +#line 654 "Parser.y" { yyval.ConstantVariable = new ConstantVariable(GetValue(1).SymbolId, yyloc); } } - private void _103() + private void _106() { // qualified_module_name -> primary SeparatingDoubleColon module_name -#line 634 "Parser.y" +#line 658 "Parser.y" { yyval.ConstantVariable = new ConstantVariable(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _104() + private void _107() { // method_name -> Identifier -#line 641 "Parser.y" +#line 665 "Parser.y" { yyval.SymbolId = GetValue(1).SymbolId; } } - private void _105() + private void _108() { // method_name -> ConstantIdentifier -#line 645 "Parser.y" +#line 669 "Parser.y" { yyval.SymbolId = GetValue(1).SymbolId; } } - private void _106() + private void _109() { // method_name -> FunctionIdentifier -#line 649 "Parser.y" +#line 673 "Parser.y" { yyval.SymbolId = GetValue(1).SymbolId; } } - private void _107() + private void _110() { // method_name -> op -#line 653 "Parser.y" +#line 677 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_END); yyval.SymbolId = GetValue(1).SymbolId; } } - private void _108() + private void _111() { // method_name -> reswords -#line 658 "Parser.y" +#line 682 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_END); yyval.SymbolId = GetValue(1).SymbolId; } } - private void _109() + private void _112() { // method_name_or_symbol -> method_name -#line 666 "Parser.y" +#line 690 "Parser.y" { yyval.SymbolId = GetValue(1).SymbolId; } } - private void _110() + private void _113() { // method_name_or_symbol -> symbol -#line 670 "Parser.y" +#line 694 "Parser.y" { yyval.SymbolId = GetValue(1).SymbolId; } } - private void _111() + private void _114() { // undef_list -> method_name_or_symbol -#line 677 "Parser.y" +#line 701 "Parser.y" { yyval.Identifiers = CollectionUtils.MakeList(new Identifier(GetValue(1).SymbolId, GetLocation(1))); } } - private void _112() + private void _115() { // @7 -> -#line 681 "Parser.y" +#line 705 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_FNAME); } } - private void _113() + private void _116() { // undef_list -> undef_list ',' @7 method_name_or_symbol -#line 685 "Parser.y" +#line 709 "Parser.y" { GetValue(4).Identifiers.Add(new Identifier(GetValue(1).SymbolId, GetLocation(1))); yyval.Identifiers = GetValue(4).Identifiers; } } - private void _114() + private void _117() { // op -> '|' -#line 692 "Parser.y" +#line 716 "Parser.y" { yyval.SymbolId = Symbols.BitwiseOr; } } - private void _115() + private void _118() { // op -> '^' -#line 693 "Parser.y" +#line 717 "Parser.y" { yyval.SymbolId = Symbols.Xor; } } - private void _116() + private void _119() { // op -> '&' -#line 694 "Parser.y" +#line 718 "Parser.y" { yyval.SymbolId = Symbols.BitwiseAnd; } } - private void _117() + private void _120() { // op -> Cmp -#line 695 "Parser.y" +#line 719 "Parser.y" { yyval.SymbolId = Symbols.Comparison; } } - private void _118() + private void _121() { // op -> Eq -#line 696 "Parser.y" +#line 720 "Parser.y" { yyval.SymbolId = Symbols.Equal; } } - private void _119() + private void _122() { // op -> Eqq -#line 697 "Parser.y" +#line 721 "Parser.y" { yyval.SymbolId = Symbols.StrictEqual; } } - private void _120() + private void _123() { // op -> Match -#line 698 "Parser.y" +#line 722 "Parser.y" { yyval.SymbolId = Symbols.Match; } } - private void _121() + private void _124() { // op -> '>' -#line 699 "Parser.y" +#line 723 "Parser.y" { yyval.SymbolId = Symbols.GreaterThan; } } - private void _122() + private void _125() { // op -> Geq -#line 700 "Parser.y" +#line 724 "Parser.y" { yyval.SymbolId = Symbols.GreaterEqual; } } - private void _123() + private void _126() { // op -> '<' -#line 701 "Parser.y" +#line 725 "Parser.y" { yyval.SymbolId = Symbols.LessThan; } } - private void _124() + private void _127() { // op -> Leq -#line 702 "Parser.y" +#line 726 "Parser.y" { yyval.SymbolId = Symbols.LessEqual; } } - private void _125() + private void _128() { // op -> Lshft -#line 703 "Parser.y" +#line 727 "Parser.y" { yyval.SymbolId = Symbols.LeftShift; } } - private void _126() + private void _129() { // op -> Rshft -#line 704 "Parser.y" +#line 728 "Parser.y" { yyval.SymbolId = Symbols.RightShift; } } - private void _127() + private void _130() { // op -> '+' -#line 705 "Parser.y" +#line 729 "Parser.y" { yyval.SymbolId = Symbols.Plus; } } - private void _128() + private void _131() { // op -> '-' -#line 706 "Parser.y" +#line 730 "Parser.y" { yyval.SymbolId = Symbols.Minus; } } - private void _129() + private void _132() { // op -> '*' -#line 707 "Parser.y" +#line 731 "Parser.y" { yyval.SymbolId = Symbols.Multiply; } } - private void _130() + private void _133() { // op -> Star -#line 708 "Parser.y" +#line 732 "Parser.y" { yyval.SymbolId = Symbols.Multiply; } } - private void _131() + private void _134() { // op -> '/' -#line 709 "Parser.y" +#line 733 "Parser.y" { yyval.SymbolId = Symbols.Divide; } } - private void _132() + private void _135() { // op -> '%' -#line 710 "Parser.y" +#line 734 "Parser.y" { yyval.SymbolId = Symbols.Mod; } } - private void _133() + private void _136() { // op -> Pow -#line 711 "Parser.y" +#line 735 "Parser.y" { yyval.SymbolId = Symbols.Power; } } - private void _134() + private void _137() { // op -> '~' -#line 712 "Parser.y" +#line 736 "Parser.y" { yyval.SymbolId = Symbols.BitwiseNot; } } - private void _135() + private void _138() { // op -> Uplus -#line 713 "Parser.y" +#line 737 "Parser.y" { yyval.SymbolId = Symbols.UnaryPlus; } } - private void _136() + private void _139() { // op -> Uminus -#line 714 "Parser.y" +#line 738 "Parser.y" { yyval.SymbolId = Symbols.UnaryMinus; } } - private void _137() + private void _140() { // op -> Aref -#line 715 "Parser.y" +#line 739 "Parser.y" { yyval.SymbolId = Symbols.ArrayItemRead; } } - private void _138() + private void _141() { // op -> Aset -#line 716 "Parser.y" +#line 740 "Parser.y" { yyval.SymbolId = Symbols.ArrayItemWrite; } } - private void _139() + private void _142() { // op -> '`' -#line 717 "Parser.y" +#line 741 "Parser.y" { yyval.SymbolId = Symbols.Backtick; } } - private void _181() + private void _184() { // arg -> lhs '=' arg -#line 731 "Parser.y" +#line 755 "Parser.y" { yyval.Expression = new SimpleAssignmentExpression(GetValue(3).LeftValue, GetValue(1).Expression, SymbolId.Empty, yyloc); } } - private void _182() + private void _185() { // arg -> lhs '=' arg RescueMod arg -#line 735 "Parser.y" +#line 759 "Parser.y" { - yyval.Expression = new SimpleAssignmentExpression(GetValue(5).LeftValue, new RescueExpression(GetValue(3).Expression, GetValue(1).Expression, MergeLocations(GetLocation(2), GetLocation(1)), MergeLocations(GetLocation(3), GetLocation(1))), SymbolId.Empty, yyloc); + yyval.Expression = new SimpleAssignmentExpression(GetValue(5).LeftValue, new RescueExpression(GetValue(3).Expression, new ExpressionStatement(GetValue(1).Expression), MergeLocations(GetLocation(2), GetLocation(1)), MergeLocations(GetLocation(3), GetLocation(1))), SymbolId.Empty, yyloc); } } - private void _183() + private void _186() { + // arg -> lhs '=' arg RescueMod jump_statement_parameterless +#line 763 "Parser.y" + { + yyval.Expression = new SimpleAssignmentExpression(GetValue(5).LeftValue, new RescueExpression(GetValue(3).Expression, GetValue(1).JumpStatement, MergeLocations(GetLocation(2), GetLocation(1)), MergeLocations(GetLocation(3), GetLocation(1))), SymbolId.Empty, yyloc); + } + } + + private void _187() + { // arg -> var_lhs Assignment arg -#line 739 "Parser.y" +#line 767 "Parser.y" { yyval.Expression = new SimpleAssignmentExpression(GetValue(3).LeftValue, GetValue(1).Expression, GetValue(2).SymbolId, yyloc); } } - private void _184() + private void _188() { // arg -> primary '[' array_key ']' Assignment arg -#line 743 "Parser.y" +#line 771 "Parser.y" { yyval.Expression = new SimpleAssignmentExpression(new ArrayItemAccess(GetValue(6).Expression, GetValue(4).Arguments, GetLocation(5)), GetValue(1).Expression, GetValue(2).SymbolId, yyloc); } } - private void _185() + private void _189() { // arg -> primary '.' Identifier Assignment arg -#line 747 "Parser.y" +#line 775 "Parser.y" { yyval.Expression = new MemberAssignmentExpression(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).SymbolId, GetValue(1).Expression, yyloc); } } - private void _186() + private void _190() { // arg -> primary '.' ConstantIdentifier Assignment arg -#line 751 "Parser.y" +#line 779 "Parser.y" { yyval.Expression = new MemberAssignmentExpression(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).SymbolId, GetValue(1).Expression, yyloc); } } - private void _187() + private void _191() { // arg -> primary SeparatingDoubleColon Identifier Assignment arg -#line 755 "Parser.y" +#line 783 "Parser.y" { yyval.Expression = new MemberAssignmentExpression(GetValue(5).Expression, GetValue(3).SymbolId, GetValue(2).SymbolId, GetValue(1).Expression, yyloc); } } - private void _188() + private void _192() { // arg -> primary SeparatingDoubleColon ConstantIdentifier Assignment arg -#line 759 "Parser.y" +#line 787 "Parser.y" { _tokenizer.ReportError("constant re-assignment"); yyval.Expression = new ErrorExpression(yyloc); } } - private void _189() + private void _193() { // arg -> LeadingDoubleColon ConstantIdentifier Assignment arg -#line 764 "Parser.y" +#line 792 "Parser.y" { _tokenizer.ReportError("constant re-assignment"); yyval.Expression = new ErrorExpression(yyloc); } } - private void _190() + private void _194() { // arg -> match_reference Assignment arg -#line 769 "Parser.y" +#line 797 "Parser.y" { MatchReferenceReadOnlyError(GetValue(3).RegexMatchReference); yyval.Expression = new ErrorExpression(yyloc); } } - private void _191() + private void _195() { // arg -> arg '+' arg -#line 774 "Parser.y" +#line 802 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Plus, new Arguments(GetValue(1).Expression), yyloc); } } - private void _192() + private void _196() { // arg -> arg '-' arg -#line 778 "Parser.y" +#line 806 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Minus, new Arguments(GetValue(1).Expression), yyloc); } } - private void _193() + private void _197() { // arg -> arg '*' arg -#line 782 "Parser.y" +#line 810 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Multiply, new Arguments(GetValue(1).Expression), yyloc); } } - private void _194() + private void _198() { // arg -> arg '/' arg -#line 786 "Parser.y" +#line 814 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Divide, new Arguments(GetValue(1).Expression), yyloc); } } - private void _195() + private void _199() { // arg -> arg '%' arg -#line 790 "Parser.y" +#line 818 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Mod, new Arguments(GetValue(1).Expression), yyloc); } } - private void _196() + private void _200() { // arg -> arg Pow arg -#line 794 "Parser.y" +#line 822 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Power, new Arguments(GetValue(1).Expression), yyloc); } } - private void _197() + private void _201() { // arg -> UminusNum Integer Pow arg -#line 798 "Parser.y" +#line 826 "Parser.y" { // ** has precedence over unary minus, hence -number**arg is equivalent to -(number**arg) yyval.Expression = new MethodCall(new MethodCall(new Literal(GetValue(3).Integer, GetLocation(3)), Symbols.Power, new Arguments(GetValue(1).Expression), GetLocation(2)), Symbols.UnaryMinus, new Arguments(GetLocation(4)), yyloc); } } - private void _198() + private void _202() { // arg -> UminusNum BigInteger Pow arg -#line 803 "Parser.y" +#line 831 "Parser.y" { yyval.Expression = new MethodCall(new MethodCall(new Literal(GetValue(3).BigInteger, GetLocation(3)), Symbols.Power, new Arguments(GetValue(1).Expression), GetLocation(2)), Symbols.UnaryMinus, new Arguments(GetLocation(4)), yyloc); } } - private void _199() + private void _203() { // arg -> UminusNum Float Pow arg -#line 807 "Parser.y" +#line 835 "Parser.y" { yyval.Expression = new MethodCall(new MethodCall(new Literal(GetValue(3).Double, GetLocation(3)), Symbols.Power, new Arguments(GetValue(1).Expression), GetLocation(2)), Symbols.UnaryMinus, new Arguments(GetLocation(4)), yyloc); } } - private void _200() + private void _204() { // arg -> Uplus arg -#line 811 "Parser.y" +#line 839 "Parser.y" { yyval.Expression = new MethodCall(GetValue(1).Expression, Symbols.UnaryPlus, new Arguments(GetLocation(1)), yyloc); } } - private void _201() + private void _205() { // arg -> Uminus arg -#line 815 "Parser.y" +#line 843 "Parser.y" { yyval.Expression = new MethodCall(GetValue(1).Expression, Symbols.UnaryMinus, new Arguments(GetLocation(1)), yyloc); } } - private void _202() + private void _206() { // arg -> arg '|' arg -#line 819 "Parser.y" +#line 847 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.BitwiseOr, new Arguments(GetValue(1).Expression), yyloc); } } - private void _203() + private void _207() { // arg -> arg '^' arg -#line 823 "Parser.y" +#line 851 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Xor, new Arguments(GetValue(1).Expression), yyloc); } } - private void _204() + private void _208() { // arg -> arg '&' arg -#line 827 "Parser.y" +#line 855 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.BitwiseAnd, new Arguments(GetValue(1).Expression), yyloc); } } - private void _205() + private void _209() { // arg -> arg Cmp arg -#line 831 "Parser.y" +#line 859 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Comparison, new Arguments(GetValue(1).Expression), yyloc); } } - private void _206() + private void _210() { // arg -> arg '>' arg -#line 835 "Parser.y" +#line 863 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.GreaterThan, new Arguments(GetValue(1).Expression), yyloc); } } - private void _207() + private void _211() { // arg -> arg Geq arg -#line 839 "Parser.y" +#line 867 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.GreaterEqual, new Arguments(GetValue(1).Expression), yyloc); } } - private void _208() + private void _212() { // arg -> arg '<' arg -#line 843 "Parser.y" +#line 871 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.LessThan, new Arguments(GetValue(1).Expression), yyloc); } } - private void _209() + private void _213() { // arg -> arg Leq arg -#line 847 "Parser.y" +#line 875 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.LessEqual, new Arguments(GetValue(1).Expression), yyloc); } } - private void _210() + private void _214() { // arg -> arg Eq arg -#line 851 "Parser.y" +#line 879 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Equal, new Arguments(GetValue(1).Expression), yyloc); } } - private void _211() + private void _215() { // arg -> arg Eqq arg -#line 855 "Parser.y" +#line 883 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.StrictEqual, new Arguments(GetValue(1).Expression), yyloc); } } - private void _212() + private void _216() { // arg -> arg Neq arg -#line 859 "Parser.y" +#line 887 "Parser.y" { yyval.Expression = new NotExpression(new MethodCall(GetValue(3).Expression, Symbols.Equal, new Arguments(GetValue(1).Expression), yyloc), yyloc); } } - private void _213() + private void _217() { // arg -> arg Match arg -#line 863 "Parser.y" +#line 891 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.Match, new Arguments(GetValue(1).Expression), yyloc); } } - private void _214() + private void _218() { // arg -> arg Nmatch arg -#line 867 "Parser.y" +#line 895 "Parser.y" { yyval.Expression = new NotExpression(new MethodCall(GetValue(3).Expression, Symbols.Match, new Arguments(GetValue(1).Expression), yyloc), yyloc); } } - private void _215() + private void _219() { // arg -> '!' arg -#line 871 "Parser.y" +#line 899 "Parser.y" { // TODO: warning: string literal in condition yyval.Expression = new NotExpression(GetValue(1).Expression, yyloc); } } - private void _216() + private void _220() { // arg -> '~' arg -#line 876 "Parser.y" +#line 904 "Parser.y" { yyval.Expression = new MethodCall(GetValue(1).Expression, Symbols.BitwiseNot, new Arguments(GetLocation(1)), yyloc); } } - private void _217() + private void _221() { // arg -> arg Lshft arg -#line 880 "Parser.y" +#line 908 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.LeftShift, new Arguments(GetValue(1).Expression), yyloc); } } - private void _218() + private void _222() { // arg -> arg Rshft arg -#line 884 "Parser.y" +#line 912 "Parser.y" { yyval.Expression = new MethodCall(GetValue(3).Expression, Symbols.RightShift, new Arguments(GetValue(1).Expression), yyloc); } } - private void _219() + private void _223() { // arg -> arg BitwiseAnd arg -#line 888 "Parser.y" +#line 916 "Parser.y" { yyval.Expression = new AndExpression(GetValue(3).Expression, GetValue(1).Expression, yyloc); } } - private void _220() + private void _224() { // arg -> arg BitwiseOr arg -#line 892 "Parser.y" +#line 920 "Parser.y" { yyval.Expression = new OrExpression(GetValue(3).Expression, GetValue(1).Expression, yyloc); } } - private void _221() + private void _225() { + // arg -> arg BitwiseAnd jump_statement_parameterless +#line 924 "Parser.y" + { + yyval.Expression = new ConditionalJumpExpression(GetValue(3).Expression, GetValue(1).JumpStatement, false, yyloc); + } + } + + private void _226() + { + // arg -> arg BitwiseOr jump_statement_parameterless +#line 928 "Parser.y" + { + yyval.Expression = new ConditionalJumpExpression(GetValue(3).Expression, GetValue(1).JumpStatement, true, yyloc); + } + } + + private void _227() + { // arg -> arg Dot2 arg -#line 896 "Parser.y" +#line 932 "Parser.y" { yyval.Expression = new RangeExpression(CheckNoRange(GetValue(3).Expression), CheckNoRange(GetValue(1).Expression), false, yyloc); } } - private void _222() + private void _228() { // arg -> arg Dot3 arg -#line 900 "Parser.y" +#line 936 "Parser.y" { yyval.Expression = new RangeExpression(CheckNoRange(GetValue(3).Expression), CheckNoRange(GetValue(1).Expression), true, yyloc); } } - private void _223() + private void _229() { // arg -> Defined opt_nl arg -#line 904 "Parser.y" +#line 940 "Parser.y" { yyval.Expression = new IsDefinedExpression(GetValue(1).Expression, yyloc); } } - private void _224() + private void _230() { // arg -> arg '?' arg ':' arg -#line 908 "Parser.y" +#line 944 "Parser.y" { yyval.Expression = new ConditionalExpression(GetValue(5).Expression, GetValue(3).Expression, GetValue(1).Expression, yyloc); } } - private void _225() + private void _231() { // arg -> primary -#line 912 "Parser.y" +#line 948 "Parser.y" { yyval.Expression = GetValue(1).Expression; } } - private void _226() + private void _232() { // array_key -> -#line 918 "Parser.y" +#line 954 "Parser.y" { yyval.Arguments = new Arguments(yyloc); } } - private void _227() + private void _233() { // array_key -> command opt_nl -#line 922 "Parser.y" +#line 958 "Parser.y" { _tokenizer.ReportWarning("parenthesize argument(s) for future version"); yyval.Arguments = new Arguments(GetValue(2).CallExpression); } } - private void _228() + private void _234() { // array_key -> args trailer -#line 927 "Parser.y" +#line 963 "Parser.y" { yyval.Arguments = new Arguments(GetValue(2).Expressions, null, null, null, GetLocation(2)); } } - private void _229() + private void _235() { // array_key -> args ',' Star arg opt_nl -#line 931 "Parser.y" +#line 967 "Parser.y" { yyval.Arguments = new Arguments(GetValue(5).Expressions, null, GetValue(2).Expression, null, MergeLocations(GetLocation(5), GetLocation(2))); } } - private void _230() + private void _236() { // array_key -> maplets trailer -#line 935 "Parser.y" +#line 971 "Parser.y" { yyval.Arguments = new Arguments(null, GetValue(2).Maplets, null, null, GetLocation(2)); } } - private void _231() + private void _237() { // array_key -> Star arg opt_nl -#line 939 "Parser.y" +#line 975 "Parser.y" { yyval.Arguments = new Arguments(null, null, GetValue(2).Expression, null, MergeLocations(GetLocation(3), GetLocation(2))); } } - private void _232() + private void _238() { // paren_args -> '(' ')' -#line 945 "Parser.y" +#line 981 "Parser.y" { yyval.Arguments = new Arguments(yyloc); } } - private void _233() + private void _239() { // paren_args -> '(' open_args opt_nl ')' -#line 949 "Parser.y" +#line 985 "Parser.y" { yyval.Arguments = GetValue(3).Arguments; } } - private void _234() + private void _240() { // paren_args -> '(' block_call opt_nl ')' -#line 953 "Parser.y" +#line 989 "Parser.y" { _tokenizer.ReportWarning("parenthesize argument for future version"); yyval.Arguments = new Arguments(GetValue(3).CallExpression); } } - private void _235() + private void _241() { // paren_args -> '(' args ',' block_call opt_nl ')' -#line 958 "Parser.y" +#line 994 "Parser.y" { _tokenizer.ReportWarning("parenthesize argument for future version"); GetValue(5).Expressions.Add(GetValue(3).CallExpression); @@ -3568,616 +3644,616 @@ } } - private void _236() + private void _242() { // opt_paren_args -> -#line 966 "Parser.y" +#line 1002 "Parser.y" { yyval.Arguments = new Arguments(yyloc); } } - private void _238() + private void _244() { // open_args -> args opt_block_arg -#line 974 "Parser.y" +#line 1010 "Parser.y" { yyval.Arguments = new Arguments(GetValue(2).Expressions, null, null, GetValue(1).BlockReference, yyloc); } } - private void _239() + private void _245() { // open_args -> args ',' Star arg opt_block_arg -#line 978 "Parser.y" +#line 1014 "Parser.y" { yyval.Arguments = new Arguments(GetValue(5).Expressions, null, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _240() + private void _246() { // open_args -> maplets opt_block_arg -#line 982 "Parser.y" +#line 1018 "Parser.y" { yyval.Arguments = new Arguments(null, GetValue(2).Maplets, null, GetValue(1).BlockReference, yyloc); } } - private void _241() + private void _247() { // open_args -> maplets ',' Star arg opt_block_arg -#line 986 "Parser.y" +#line 1022 "Parser.y" { yyval.Arguments = new Arguments(null, GetValue(5).Maplets, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _242() + private void _248() { // open_args -> args ',' maplets opt_block_arg -#line 990 "Parser.y" +#line 1026 "Parser.y" { yyval.Arguments = new Arguments(GetValue(4).Expressions, GetValue(2).Maplets, null, GetValue(1).BlockReference, yyloc); } } - private void _243() + private void _249() { // open_args -> args ',' maplets ',' Star arg opt_block_arg -#line 994 "Parser.y" +#line 1030 "Parser.y" { yyval.Arguments = new Arguments(GetValue(7).Expressions, GetValue(5).Maplets, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _244() + private void _250() { // open_args -> Star arg opt_block_arg -#line 998 "Parser.y" +#line 1034 "Parser.y" { yyval.Arguments = new Arguments(null, null, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _245() + private void _251() { // open_args -> block_arg -#line 1002 "Parser.y" +#line 1038 "Parser.y" { yyval.Arguments = new Arguments(null, null, null, GetValue(1).BlockReference, yyloc); } } - private void _246() + private void _252() { // open_args -> command -#line 1006 "Parser.y" +#line 1042 "Parser.y" { _tokenizer.ReportWarning("parenthesize argument(s) for future version"); yyval.Arguments = new Arguments(GetValue(1).CallExpression); } } - private void _247() + private void _253() { // closed_args -> arg ',' args opt_block_arg -#line 1013 "Parser.y" +#line 1049 "Parser.y" { GetValue(2).Expressions.Insert(0, GetValue(4).Expression); yyval.Arguments = new Arguments(GetValue(2).Expressions, null, null, GetValue(1).BlockReference, yyloc); } } - private void _248() + private void _254() { // closed_args -> arg ',' block_arg -#line 1018 "Parser.y" +#line 1054 "Parser.y" { yyval.Arguments = new Arguments(CollectionUtils.MakeList(GetValue(3).Expression), null, null, GetValue(1).BlockReference, yyloc); } } - private void _249() + private void _255() { // closed_args -> arg ',' Star arg opt_block_arg -#line 1022 "Parser.y" +#line 1058 "Parser.y" { yyval.Arguments = new Arguments(CollectionUtils.MakeList(GetValue(5).Expression), null, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _250() + private void _256() { // closed_args -> arg ',' args ',' Star arg opt_block_arg -#line 1026 "Parser.y" +#line 1062 "Parser.y" { GetValue(5).Expressions.Insert(0, GetValue(7).Expression); yyval.Arguments = new Arguments(GetValue(5).Expressions, null, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _251() + private void _257() { // closed_args -> maplets opt_block_arg -#line 1031 "Parser.y" +#line 1067 "Parser.y" { yyval.Arguments = new Arguments(null, GetValue(2).Maplets, null, GetValue(1).BlockReference, yyloc); } } - private void _252() + private void _258() { // closed_args -> maplets ',' Star arg opt_block_arg -#line 1035 "Parser.y" +#line 1071 "Parser.y" { yyval.Arguments = new Arguments(null, GetValue(5).Maplets, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _253() + private void _259() { // closed_args -> arg ',' maplets opt_block_arg -#line 1039 "Parser.y" +#line 1075 "Parser.y" { yyval.Arguments = new Arguments(CollectionUtils.MakeList(GetValue(4).Expression), GetValue(2).Maplets, null, GetValue(1).BlockReference, yyloc); } } - private void _254() + private void _260() { // closed_args -> arg ',' args ',' maplets opt_block_arg -#line 1043 "Parser.y" +#line 1079 "Parser.y" { GetValue(4).Expressions.Insert(0, GetValue(6).Expression); yyval.Arguments = new Arguments(GetValue(4).Expressions, GetValue(2).Maplets, null, GetValue(1).BlockReference, yyloc); } } - private void _255() + private void _261() { // closed_args -> arg ',' maplets ',' Star arg opt_block_arg -#line 1048 "Parser.y" +#line 1084 "Parser.y" { yyval.Arguments = new Arguments(CollectionUtils.MakeList(GetValue(7).Expression), GetValue(5).Maplets, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _256() + private void _262() { // closed_args -> arg ',' args ',' maplets ',' Star arg opt_block_arg -#line 1052 "Parser.y" +#line 1088 "Parser.y" { GetValue(7).Expressions.Insert(0, GetValue(9).Expression); yyval.Arguments = new Arguments(GetValue(7).Expressions, GetValue(5).Maplets, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _257() + private void _263() { // closed_args -> Star arg opt_block_arg -#line 1057 "Parser.y" +#line 1093 "Parser.y" { yyval.Arguments = new Arguments(null, null, GetValue(2).Expression, GetValue(1).BlockReference, yyloc); } } - private void _258() + private void _264() { // closed_args -> block_arg -#line 1061 "Parser.y" +#line 1097 "Parser.y" { yyval.Arguments = new Arguments(null, null, null, GetValue(1).BlockReference, yyloc); } } - private void _259() + private void _265() { // @8 -> -#line 1067 "Parser.y" +#line 1103 "Parser.y" { yyval.Integer = _tokenizer.CMDARG; _tokenizer.CMDARG_PUSH(1); } } - private void _260() + private void _266() { // command_args -> @8 command_args_content -#line 1072 "Parser.y" +#line 1108 "Parser.y" { _tokenizer.CMDARG = GetValue(2).Integer; yyval.Arguments = GetValue(1).Arguments; } } - private void _262() + private void _268() { // @9 -> -#line 1081 "Parser.y" +#line 1117 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_ENDARG); } } - private void _263() + private void _269() { // command_args_content -> LparenArg @9 ')' -#line 1085 "Parser.y" +#line 1121 "Parser.y" { _tokenizer.ReportWarning("don't put space before argument parentheses"); yyval.Arguments = null; } } - private void _264() + private void _270() { // @10 -> -#line 1090 "Parser.y" +#line 1126 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_ENDARG); } } - private void _265() + private void _271() { // command_args_content -> LparenArg closed_args @10 ')' -#line 1094 "Parser.y" +#line 1130 "Parser.y" { _tokenizer.ReportWarning("don't put space before argument parentheses"); yyval.Arguments = GetValue(3).Arguments; } } - private void _266() + private void _272() { // block_arg -> Ampersand arg -#line 1101 "Parser.y" +#line 1137 "Parser.y" { yyval.BlockReference = new BlockReference(GetValue(1).Expression, yyloc); } } - private void _267() + private void _273() { // opt_block_arg -> ',' block_arg -#line 1107 "Parser.y" +#line 1143 "Parser.y" { yyval.BlockReference = GetValue(1).BlockReference; } } - private void _268() + private void _274() { // opt_block_arg -> -#line 1111 "Parser.y" +#line 1147 "Parser.y" { yyval.BlockReference = null; } } - private void _269() + private void _275() { // args -> arg -#line 1117 "Parser.y" +#line 1153 "Parser.y" { yyval.Expressions = CollectionUtils.MakeList(GetValue(1).Expression); } } - private void _270() + private void _276() { // args -> args ',' arg -#line 1121 "Parser.y" +#line 1157 "Parser.y" { GetValue(3).Expressions.Add(GetValue(1).Expression); yyval.Expressions = GetValue(3).Expressions; } } - private void _272() + private void _278() { // primary -> symbol -#line 1129 "Parser.y" +#line 1165 "Parser.y" { yyval.Expression = new Literal(GetValue(1).SymbolId, yyloc); } } - private void _274() + private void _280() { // primary -> string_concatenation -#line 1134 "Parser.y" +#line 1170 "Parser.y" { yyval.Expression = new StringConstructor(GetValue(1).Expressions, StringKind.Mutable, GetLocation(1)); } } - private void _280() + private void _286() { // primary -> match_reference -#line 1143 "Parser.y" +#line 1179 "Parser.y" { yyval.Expression = GetValue(1).RegexMatchReference; } } - private void _281() + private void _287() { // primary -> FunctionIdentifier -#line 1147 "Parser.y" +#line 1183 "Parser.y" { yyval.Expression = new MethodCall(null, GetValue(1).SymbolId, new Arguments(GetLocation(1)), yyloc); } } - private void _282() + private void _288() { // primary -> primary SeparatingDoubleColon ConstantIdentifier -#line 1151 "Parser.y" +#line 1187 "Parser.y" { yyval.Expression = new ConstantVariable(GetValue(3).Expression, GetValue(1).SymbolId, yyloc); } } - private void _283() + private void _289() { // primary -> LeadingDoubleColon ConstantIdentifier -#line 1155 "Parser.y" +#line 1191 "Parser.y" { yyval.Expression = new ConstantVariable(null, GetValue(1).SymbolId, yyloc); } } - private void _284() + private void _290() { // primary -> primary '[' array_key ']' -#line 1159 "Parser.y" +#line 1195 "Parser.y" { yyval.Expression = new ArrayItemAccess(GetValue(4).Expression, GetValue(2).Arguments, yyloc); } } - private void _285() + private void _291() { // primary -> Lbrack array_key ']' -#line 1163 "Parser.y" +#line 1199 "Parser.y" { yyval.Expression = new ArrayConstructor(GetValue(2).Arguments, yyloc); } } - private void _286() + private void _292() { // primary -> Lbrace '}' -#line 1167 "Parser.y" +#line 1203 "Parser.y" { yyval.Expression = new HashConstructor(null, null, yyloc); } } - private void _287() + private void _293() { // primary -> Lbrace maplets trailer '}' -#line 1171 "Parser.y" +#line 1207 "Parser.y" { yyval.Expression = new HashConstructor(GetValue(3).Maplets, null, yyloc); } } - private void _288() + private void _294() { // primary -> Lbrace args trailer '}' -#line 1175 "Parser.y" +#line 1211 "Parser.y" { yyval.Expression = new HashConstructor(null, CheckHashExpressions(GetValue(3).Expressions, GetLocation(2)), yyloc); } } - private void _289() + private void _295() { // primary -> Yield '(' open_args ')' -#line 1179 "Parser.y" +#line 1215 "Parser.y" { yyval.Expression = new YieldCall(GetValue(2).Arguments, yyloc); } } - private void _290() + private void _296() { // primary -> Yield '(' ')' -#line 1183 "Parser.y" +#line 1219 "Parser.y" { yyval.Expression = new YieldCall(new Arguments(GetLocation(3)), yyloc); } } - private void _291() + private void _297() { // primary -> Yield -#line 1187 "Parser.y" +#line 1223 "Parser.y" { yyval.Expression = new YieldCall(new Arguments(GetLocation(1)), GetLocation(1)); } } - private void _292() + private void _298() { // primary -> Defined opt_nl '(' expr ')' -#line 1191 "Parser.y" +#line 1227 "Parser.y" { yyval.Expression = new IsDefinedExpression(GetValue(2).Expression, yyloc); } } - private void _293() + private void _299() { // primary -> operation brace_block -#line 1195 "Parser.y" +#line 1231 "Parser.y" { yyval.Expression = new MethodCall(null, GetValue(2).SymbolId, new Arguments(null, null, null, GetValue(1).BlockDefinition, GetLocation(2)), yyloc); } } - private void _295() + private void _301() { // primary -> method_call brace_block -#line 1200 "Parser.y" +#line 1236 "Parser.y" { yyval.Expression = GetValue(2).CallExpression; GetValue(2).CallExpression.SetBlockArgument(GetValue(1).BlockDefinition, GetLocation(1)); } } - private void _296() + private void _302() { // primary -> If expr then compstmt if_tail End -#line 1205 "Parser.y" +#line 1241 "Parser.y" { yyval.Expression = MakeIfExpression(GetValue(5).Expression, GetValue(3).Statements, GetValue(2).ElseIfClauses, yyloc); } } - private void _297() + private void _303() { // primary -> Unless expr then compstmt else_opt End -#line 1209 "Parser.y" +#line 1245 "Parser.y" { yyval.Expression = new UnlessExpression(GetValue(5).Expression, GetValue(3).Statements, GetValue(2).ElseIfClause, yyloc); } } - private void _298() + private void _304() { // @11 -> -#line 1213 "Parser.y" +#line 1249 "Parser.y" { _tokenizer.COND_PUSH(1); } } - private void _299() + private void _305() { // @12 -> -#line 1217 "Parser.y" +#line 1253 "Parser.y" { _tokenizer.COND_POP(); } } - private void _300() + private void _306() { // primary -> While @11 expr do @12 compstmt End -#line 1221 "Parser.y" +#line 1257 "Parser.y" { yyval.Expression = new WhileLoopExpression(CurrentScope, GetValue(5).Expression, true, GetValue(2).Statements, yyloc); } } - private void _301() + private void _307() { // @13 -> -#line 1225 "Parser.y" +#line 1261 "Parser.y" { _tokenizer.COND_PUSH(1); } } - private void _302() + private void _308() { // @14 -> -#line 1229 "Parser.y" +#line 1265 "Parser.y" { _tokenizer.COND_POP(); } } - private void _303() + private void _309() { // primary -> Until @13 expr do @14 compstmt End -#line 1233 "Parser.y" +#line 1269 "Parser.y" { yyval.Expression = new WhileLoopExpression(CurrentScope, GetValue(5).Expression, false, GetValue(2).Statements, yyloc); } } - private void _305() + private void _311() { // @15 -> -#line 1238 "Parser.y" +#line 1274 "Parser.y" { _tokenizer.COND_PUSH(1); } } - private void _306() + private void _312() { // @16 -> -#line 1242 "Parser.y" +#line 1278 "Parser.y" { _tokenizer.COND_POP(); } } - private void _307() + private void _313() { // primary -> For block_parameters In @15 expr do @16 compstmt End -#line 1246 "Parser.y" +#line 1282 "Parser.y" { yyval.Expression = new ForLoopExpression(GetValue(8).CompoundLeftValue, GetValue(5).Expression, GetValue(2).Statements, yyloc); } } - private void _310() + private void _316() { // @17 -> -#line 1255 "Parser.y" +#line 1291 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_ENDARG); } } - private void _311() + private void _317() { // block_expression -> LparenArg expr @17 opt_nl ')' -#line 1259 "Parser.y" +#line 1295 "Parser.y" { _tokenizer.ReportWarning("(...) interpreted as grouped expression"); yyval.Expression = new BlockExpression(new Body(CollectionUtils.MakeList(new ExpressionStatement(GetValue(4).Expression)), null, null, null, yyloc), yyloc); } } - private void _312() + private void _318() { // block_expression -> LeftParen compstmt ')' -#line 1264 "Parser.y" +#line 1300 "Parser.y" { yyval.Expression = new BlockExpression(new Body(GetValue(2).Statements, null, null, null, yyloc), yyloc); } } - private void _313() + private void _319() { // block_expression -> Begin body End -#line 1268 "Parser.y" +#line 1304 "Parser.y" { yyval.Expression = new BlockExpression(GetValue(2).Body, yyloc); } } - private void _314() + private void _320() { // @18 -> -#line 1275 "Parser.y" +#line 1311 "Parser.y" { EnterNewScope(ScopeKind.Module); } } - private void _315() + private void _321() { // declaration_expression -> Class qualified_module_name superclass @18 body End -#line 1279 "Parser.y" +#line 1315 "Parser.y" { if (InMethod) { ErrorSink.Add(_sourceUnit, "class definition in method body", GetLocation(6), -1, Severity.Error); @@ -4187,20 +4263,20 @@ } } - private void _316() + private void _322() { // @19 -> -#line 1287 "Parser.y" +#line 1323 "Parser.y" { yyval.Integer = _inInstanceMethodDefinition; _inInstanceMethodDefinition = 0; } } - private void _317() + private void _323() { // @20 -> -#line 1292 "Parser.y" +#line 1328 "Parser.y" { yyval.Integer = _inSingletonMethodDefinition; _inSingletonMethodDefinition = 0; @@ -4208,10 +4284,10 @@ } } - private void _318() + private void _324() { // declaration_expression -> Class Lshft expr @19 term @20 body End -#line 1298 "Parser.y" +#line 1334 "Parser.y" { _inInstanceMethodDefinition = GetValue(5).Integer; _inSingletonMethodDefinition = GetValue(3).Integer; @@ -4219,19 +4295,19 @@ } } - private void _319() + private void _325() { // @21 -> -#line 1304 "Parser.y" +#line 1340 "Parser.y" { EnterNewScope(ScopeKind.Module); } } - private void _320() + private void _326() { // declaration_expression -> Module qualified_module_name @21 body End -#line 1308 "Parser.y" +#line 1344 "Parser.y" { if (InMethod) { ErrorSink.Add(_sourceUnit, "module definition in method body", GetLocation(5), -1, Severity.Error); @@ -4241,20 +4317,20 @@ } } - private void _321() + private void _327() { // @22 -> -#line 1316 "Parser.y" +#line 1352 "Parser.y" { _inInstanceMethodDefinition++; EnterNewScope(ScopeKind.Method); } } - private void _322() + private void _328() { // declaration_expression -> Def method_name @22 parameters_declaration body End -#line 1321 "Parser.y" +#line 1357 "Parser.y" { _inInstanceMethodDefinition--; yyval.Expression = new MethodDeclaration(CurrentScope, null, GetValue(5).SymbolId, GetValue(3).Parameters, GetValue(2).Body, yyloc); @@ -4262,19 +4338,19 @@ } } - private void _323() + private void _329() { // @23 -> -#line 1327 "Parser.y" +#line 1363 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_FNAME); } } - private void _324() + private void _330() { // @24 -> -#line 1331 "Parser.y" +#line 1367 "Parser.y" { _inSingletonMethodDefinition++; _tokenizer.SetState(LexicalState.EXPR_END); @@ -4282,10 +4358,10 @@ } } - private void _325() + private void _331() { // declaration_expression -> Def singleton dot_or_colon @23 method_name @24 parameters_declaration body End -#line 1337 "Parser.y" +#line 1373 "Parser.y" { _inSingletonMethodDefinition--; yyval.Expression = new MethodDeclaration(CurrentScope, GetValue(8).Expression, GetValue(5).SymbolId, GetValue(3).Parameters, GetValue(2).Body, yyloc); @@ -4293,10 +4369,10 @@ } } - private void _326() + private void _332() { // body -> compstmt rescue_clauses_opt else_opt ensure_opt -#line 1346 "Parser.y" +#line 1382 "Parser.y" { ElseIfClause elseIf = GetValue(2).ElseIfClause; Debug.Assert(elseIf == null || elseIf.Condition == null); @@ -4309,596 +4385,596 @@ } } - private void _327() + private void _333() { // case_expression -> Case expr opt_terms when_clauses else_opt End -#line 1360 "Parser.y" +#line 1396 "Parser.y" { yyval.Expression = new CaseExpression(GetValue(5).Expression, GetValue(3).WhenClauses, GetValue(2).ElseIfClause, yyloc); } } - private void _328() + private void _334() { // case_expression -> Case opt_terms when_clauses else_opt End -#line 1364 "Parser.y" +#line 1400 "Parser.y" { yyval.Expression = new CaseExpression(null, GetValue(3).WhenClauses, GetValue(2).ElseIfClause, yyloc); } } - private void _329() + private void _335() { // case_expression -> Case expr opt_terms else_opt End -#line 1368 "Parser.y" +#line 1404 "Parser.y" { yyval.Expression = new CaseExpression(GetValue(4).Expression, null, GetValue(2).ElseIfClause, yyloc); } } - private void _330() + private void _336() { // case_expression -> Case opt_terms else_opt End -#line 1372 "Parser.y" +#line 1408 "Parser.y" { yyval.Expression = new CaseExpression(null, null, GetValue(2).ElseIfClause, yyloc); } } - private void _338() + private void _344() { // if_tail -> else_opt -#line 1392 "Parser.y" +#line 1428 "Parser.y" { yyval.ElseIfClauses = MakeListAddOpt(GetValue(1).ElseIfClause); } } - private void _339() + private void _345() { // if_tail -> Elsif expr then compstmt if_tail -#line 1396 "Parser.y" +#line 1432 "Parser.y" { GetValue(1).ElseIfClauses.Add(new ElseIfClause(GetValue(4).Expression, GetValue(2).Statements, yyloc)); yyval.ElseIfClauses = GetValue(1).ElseIfClauses; } } - private void _340() + private void _346() { // else_opt -> -#line 1403 "Parser.y" +#line 1439 "Parser.y" { yyval.ElseIfClause = null; } } - private void _341() + private void _347() { // else_opt -> Else compstmt -#line 1407 "Parser.y" +#line 1443 "Parser.y" { yyval.ElseIfClause = new ElseIfClause(null, GetValue(1).Statements, yyloc); } } - private void _342() + private void _348() { // block_parameters -> lhs -#line 1414 "Parser.y" +#line 1450 "Parser.y" { yyval.CompoundLeftValue = new CompoundLeftValue(CollectionUtils.MakeList(GetValue(1).LeftValue), null, GetLocation(1)); } } - private void _343() + private void _349() { // block_parameters -> compound_lhs -#line 1418 "Parser.y" +#line 1454 "Parser.y" { yyval.CompoundLeftValue = GetValue(1).CompoundLeftValue; } } - private void _344() + private void _350() { // block_parameters_opt -> -#line 1425 "Parser.y" +#line 1461 "Parser.y" { yyval.CompoundLeftValue = CompoundLeftValue.Null; } } - private void _345() + private void _351() { // block_parameters_opt -> '|' '|' -#line 1429 "Parser.y" +#line 1465 "Parser.y" { yyval.CompoundLeftValue = CompoundLeftValue.Null; } } - private void _346() + private void _352() { // block_parameters_opt -> BitwiseOr -#line 1433 "Parser.y" +#line 1469 "Parser.y" { yyval.CompoundLeftValue = CompoundLeftValue.Null; } } - private void _347() + private void _353() { // block_parameters_opt -> '|' block_parameters '|' -#line 1437 "Parser.y" +#line 1473 "Parser.y" { yyval.CompoundLeftValue = GetValue(2).CompoundLeftValue; } } - private void _348() + private void _354() { // @25 -> -#line 1443 "Parser.y" +#line 1479 "Parser.y" { EnterNewScope(ScopeKind.Block); } } - private void _349() + private void _355() { // @26 -> -#line 1447 "Parser.y" +#line 1483 "Parser.y" { // Empty placeholder } } - private void _350() + private void _356() { // do_block -> BlockDo @25 block_parameters_opt @26 compstmt End -#line 1451 "Parser.y" +#line 1487 "Parser.y" { yyval.BlockDefinition = new BlockDefinition(CurrentScope, GetValue(4).CompoundLeftValue, GetValue(2).Statements, yyloc); LeaveScope(); } } - private void _351() + private void _357() { // block_call -> command do_block -#line 1458 "Parser.y" +#line 1494 "Parser.y" { GetValue(2).CallExpression.Arguments.Block = GetValue(1).BlockDefinition; yyval.CallExpression = GetValue(2).CallExpression; } } - private void _352() + private void _358() { // block_call -> block_call '.' operation2 opt_paren_args -#line 1463 "Parser.y" +#line 1499 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).CallExpression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _353() + private void _359() { // block_call -> block_call SeparatingDoubleColon operation2 opt_paren_args -#line 1467 "Parser.y" +#line 1503 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).CallExpression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _354() + private void _360() { // method_call -> operation paren_args -#line 1473 "Parser.y" +#line 1509 "Parser.y" { yyval.CallExpression = new MethodCall(null, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _355() + private void _361() { // method_call -> primary '.' operation2 opt_paren_args -#line 1477 "Parser.y" +#line 1513 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).Expression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _356() + private void _362() { // method_call -> primary SeparatingDoubleColon operation2 paren_args -#line 1481 "Parser.y" +#line 1517 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(4).Expression, GetValue(2).SymbolId, GetValue(1).Arguments, yyloc); } } - private void _357() + private void _363() { // method_call -> primary SeparatingDoubleColon operation3 -#line 1485 "Parser.y" +#line 1521 "Parser.y" { yyval.CallExpression = new MethodCall(GetValue(3).Expression, GetValue(1).SymbolId, new Arguments(GetLocation(1)), yyloc); } } - private void _358() + private void _364() { // method_call -> Super paren_args -#line 1489 "Parser.y" +#line 1525 "Parser.y" { yyval.CallExpression = new SuperCall(CurrentScope, GetValue(1).Arguments, yyloc); } } - private void _359() + private void _365() { // method_call -> Super -#line 1493 "Parser.y" +#line 1529 "Parser.y" { yyval.CallExpression = new SuperCall(CurrentScope, null, yyloc); } } - private void _360() + private void _366() { // @27 -> -#line 1500 "Parser.y" +#line 1536 "Parser.y" { EnterNewScope(ScopeKind.Block); } } - private void _361() + private void _367() { // @28 -> -#line 1504 "Parser.y" +#line 1540 "Parser.y" { } } - private void _362() + private void _368() { // brace_block -> '{' @27 block_parameters_opt @28 compstmt '}' -#line 1507 "Parser.y" +#line 1543 "Parser.y" { yyval.BlockDefinition = new BlockDefinition(CurrentScope, GetValue(4).CompoundLeftValue, GetValue(2).Statements, yyloc); LeaveScope(); } } - private void _363() + private void _369() { // @29 -> -#line 1512 "Parser.y" +#line 1548 "Parser.y" { EnterNewScope(ScopeKind.Block); } } - private void _364() + private void _370() { // @30 -> -#line 1516 "Parser.y" +#line 1552 "Parser.y" { } } - private void _365() + private void _371() { // brace_block -> Do @29 block_parameters_opt @30 compstmt End -#line 1519 "Parser.y" +#line 1555 "Parser.y" { yyval.BlockDefinition = new BlockDefinition(CurrentScope, GetValue(4).CompoundLeftValue, GetValue(2).Statements, yyloc); LeaveScope(); } } - private void _366() + private void _372() { // when_clauses -> when_clause -#line 1526 "Parser.y" +#line 1562 "Parser.y" { yyval.WhenClauses = CollectionUtils.MakeList(GetValue(1).WhenClause); } } - private void _367() + private void _373() { // when_clauses -> when_clauses when_clause -#line 1530 "Parser.y" +#line 1566 "Parser.y" { GetValue(2).WhenClauses.Add(GetValue(1).WhenClause); yyval.WhenClauses = GetValue(2).WhenClauses; } } - private void _368() + private void _374() { // when_clause -> When when_args then compstmt -#line 1537 "Parser.y" +#line 1573 "Parser.y" { yyval.WhenClause = new WhenClause(GetValue(3).Arguments, GetValue(1).Statements, yyloc); } } - private void _369() + private void _375() { // when_args -> args -#line 1543 "Parser.y" +#line 1579 "Parser.y" { yyval.Arguments = new Arguments(GetValue(1).Expressions, null, null, null, yyloc); } } - private void _370() + private void _376() { // when_args -> args ',' Star arg -#line 1547 "Parser.y" +#line 1583 "Parser.y" { yyval.Arguments = new Arguments(GetValue(4).Expressions, null, GetValue(1).Expression, null, yyloc); } } - private void _371() + private void _377() { // when_args -> Star arg -#line 1551 "Parser.y" +#line 1587 "Parser.y" { yyval.Arguments = new Arguments(null, null, GetValue(1).Expression, null, yyloc); } } - private void _374() + private void _380() { // rescue_clauses -> rescue_clause -#line 1561 "Parser.y" +#line 1597 "Parser.y" { yyval.RescueClauses = CollectionUtils.MakeList(GetValue(1).RescueClause); } } - private void _375() + private void _381() { // rescue_clauses -> rescue_clauses rescue_clause -#line 1565 "Parser.y" +#line 1601 "Parser.y" { GetValue(2).RescueClauses.Add(GetValue(1).RescueClause); yyval.RescueClauses = GetValue(2).RescueClauses; } } - private void _376() + private void _382() { // rescue_clause -> Rescue exc_list exc_var then compstmt -#line 1573 "Parser.y" +#line 1609 "Parser.y" { yyval.RescueClause = new RescueClause(GetValue(4).Expressions, GetValue(3).LeftValue, GetValue(1).Statements, yyloc); } } - private void _377() + private void _383() { // exc_list -> arg -#line 1579 "Parser.y" +#line 1615 "Parser.y" { yyval.Expressions = CollectionUtils.MakeList(GetValue(1).Expression); } } - private void _378() + private void _384() { // exc_list -> compound_rhs -#line 1583 "Parser.y" +#line 1619 "Parser.y" { yyval.Expressions = GetValue(1).CompoundRightValue.RightValues; } } - private void _380() + private void _386() { // exc_var -> Assoc lhs -#line 1590 "Parser.y" +#line 1626 "Parser.y" { yyval.LeftValue = GetValue(1).LeftValue; } } - private void _383() + private void _389() { // ensure_opt -> Ensure compstmt -#line 1598 "Parser.y" +#line 1634 "Parser.y" { yyval.Statements = GetValue(1).Statements; } } - private void _384() + private void _390() { // string_concatenation -> string -#line 1605 "Parser.y" +#line 1641 "Parser.y" { yyval.Expressions = CollectionUtils.MakeList(GetValue(1).Expression); } } - private void _385() + private void _391() { // string_concatenation -> string_concatenation string -#line 1609 "Parser.y" +#line 1645 "Parser.y" { GetValue(2).Expressions.Add(GetValue(1).Expression); yyval.Expressions = GetValue(2).Expressions; } } - private void _386() + private void _392() { // string -> StringBeg string_contents StringEnd -#line 1617 "Parser.y" +#line 1653 "Parser.y" { yyval.Expression = new StringConstructor(GetValue(2).Expressions, StringKind.Mutable, yyloc); } } - private void _387() + private void _393() { // shell_string -> ShellStringBegin string_contents StringEnd -#line 1624 "Parser.y" +#line 1660 "Parser.y" { yyval.Expression = new StringConstructor(GetValue(2).Expressions, StringKind.Command, yyloc); } } - private void _388() + private void _394() { // immutable_string -> Symbeg string_contents StringEnd -#line 1631 "Parser.y" +#line 1667 "Parser.y" { yyval.Expression = new StringConstructor(GetValue(2).Expressions, StringKind.Immutable, yyloc); } } - private void _389() + private void _395() { // regexp -> RegexpBeg string_contents RegexpEnd -#line 1638 "Parser.y" +#line 1674 "Parser.y" { yyval.Expression = new RegularExpression(GetValue(2).Expressions, GetValue(1).RegExOptions, yyloc); } } - private void _390() + private void _396() { // words -> WordsBeg WordSeparator StringEnd -#line 1644 "Parser.y" +#line 1680 "Parser.y" { yyval.Expression = new ArrayConstructor(null, yyloc); } } - private void _391() + private void _397() { // words -> WordsBeg word_list StringEnd -#line 1648 "Parser.y" +#line 1684 "Parser.y" { yyval.Expression = new ArrayConstructor(new Arguments(GetValue(2).Expressions, null, null, null, GetLocation(2)), yyloc); } } - private void _392() + private void _398() { // word_list -> -#line 1654 "Parser.y" +#line 1690 "Parser.y" { yyval.Expressions = new List(); } } - private void _393() + private void _399() { // word_list -> word_list word WordSeparator -#line 1658 "Parser.y" +#line 1694 "Parser.y" { GetValue(3).Expressions.Add(new StringConstructor(GetValue(2).Expressions, StringKind.Mutable, GetLocation(2))); yyval.Expressions = GetValue(3).Expressions; } } - private void _394() + private void _400() { // word -> string_content -#line 1665 "Parser.y" +#line 1701 "Parser.y" { yyval.Expressions = CollectionUtils.MakeList(GetValue(1).Expression); } } - private void _395() + private void _401() { // word -> word string_content -#line 1669 "Parser.y" +#line 1705 "Parser.y" { GetValue(2).Expressions.Add(GetValue(1).Expression); yyval.Expressions = GetValue(2).Expressions; } } - private void _396() + private void _402() { // verbatim_words -> VerbatimWordsBegin WordSeparator StringEnd -#line 1676 "Parser.y" +#line 1712 "Parser.y" { yyval.Expression = new ArrayConstructor(null, yyloc); } } - private void _397() + private void _403() { // verbatim_words -> VerbatimWordsBegin verbatim_word_list StringEnd -#line 1680 "Parser.y" +#line 1716 "Parser.y" { yyval.Expression = new ArrayConstructor(new Arguments(GetValue(2).Expressions, null, null, null, GetLocation(2)), yyloc); } } - private void _398() + private void _404() { // verbatim_word_list -> -#line 1686 "Parser.y" +#line 1722 "Parser.y" { yyval.Expressions = new List(); } } - private void _399() + private void _405() { // verbatim_word_list -> verbatim_word_list StringContent WordSeparator -#line 1690 "Parser.y" +#line 1726 "Parser.y" { GetValue(3).Expressions.Add(new Literal(GetValue(2).String, GetLocation(2))); yyval.Expressions = GetValue(3).Expressions; } } - private void _400() + private void _406() { // string_contents -> -#line 1698 "Parser.y" +#line 1734 "Parser.y" { yyval.Expressions = new List(); } } - private void _401() + private void _407() { // string_contents -> string_contents string_content -#line 1702 "Parser.y" +#line 1738 "Parser.y" { GetValue(2).Expressions.Add(GetValue(1).Expression); yyval.Expressions = GetValue(2).Expressions; } } - private void _402() + private void _408() { // string_content -> StringContent -#line 1710 "Parser.y" +#line 1746 "Parser.y" { yyval.Expression = new Literal(GetValue(1).String, yyloc); } } - private void _403() + private void _409() { // @31 -> -#line 1714 "Parser.y" +#line 1750 "Parser.y" { // $$.term is used as a stack for nested string info @@ -4907,10 +4983,10 @@ } } - private void _404() + private void _410() { // string_content -> StringEmbeddedVariableBegin @31 string_embedded_variable -#line 1721 "Parser.y" +#line 1757 "Parser.y" { // pop _tokenizer.StringEmbeddedVariableEnd(GetValue(2).term); @@ -4918,20 +4994,20 @@ } } - private void _405() + private void _411() { // @32 -> -#line 1727 "Parser.y" +#line 1763 "Parser.y" { // push yyval.term = _tokenizer.StringEmbeddedCodeBegin(); } } - private void _406() + private void _412() { // string_content -> StringEmbeddedCodeBegin @32 compstmt '}' -#line 1732 "Parser.y" +#line 1768 "Parser.y" { // pop _tokenizer.StringEmbeddedCodeEnd(GetValue(3).term); @@ -4939,543 +5015,543 @@ } } - private void _407() + private void _413() { // string_embedded_variable -> GlobalVariable -#line 1741 "Parser.y" +#line 1777 "Parser.y" { yyval.Expression = new GlobalVariable(GetValue(1).SymbolId, yyloc); } } - private void _408() + private void _414() { // string_embedded_variable -> match_reference -#line 1745 "Parser.y" +#line 1781 "Parser.y" { yyval.Expression = GetValue(1).RegexMatchReference; } } - private void _409() + private void _415() { // string_embedded_variable -> InstanceVariable -#line 1749 "Parser.y" +#line 1785 "Parser.y" { yyval.Expression = new InstanceVariable(GetValue(1).SymbolId, yyloc); } } - private void _410() + private void _416() { // string_embedded_variable -> ClassVariable -#line 1753 "Parser.y" +#line 1789 "Parser.y" { yyval.Expression = new ClassVariable(GetValue(1).SymbolId, yyloc); } } - private void _411() + private void _417() { // symbol -> Symbeg sym -#line 1760 "Parser.y" +#line 1796 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_END); yyval.SymbolId = GetValue(1).SymbolId; } } - private void _416() + private void _422() { // numeric_literal -> Integer -#line 1775 "Parser.y" +#line 1811 "Parser.y" { // unsigned integer: yyval.Expression = new Literal(GetValue(1).Integer, yyloc); } } - private void _417() + private void _423() { // numeric_literal -> BigInteger -#line 1780 "Parser.y" +#line 1816 "Parser.y" { yyval.Expression = new Literal(GetValue(1).BigInteger, yyloc); } } - private void _418() + private void _424() { // numeric_literal -> Float -#line 1784 "Parser.y" +#line 1820 "Parser.y" { yyval.Expression = new Literal(GetValue(1).Double, yyloc); } } - private void _419() + private void _425() { // numeric_literal -> UminusNum Integer -#line 1788 "Parser.y" +#line 1824 "Parser.y" { // cannot overflow INTEGER is unsigned and Int32.MaxValue < |Int32.MinValue| yyval.Expression = new Literal(-GetValue(1).Integer, yyloc); } } - private void _420() + private void _426() { // numeric_literal -> UminusNum BigInteger -#line 1793 "Parser.y" +#line 1829 "Parser.y" { // TODO: -|Int32.MinValue| actually ends up here (converted to bigint) instead of being Int32. We should fix that. yyval.Expression = new Literal(-GetValue(1).BigInteger, yyloc); } } - private void _421() + private void _427() { // numeric_literal -> UminusNum Float -#line 1798 "Parser.y" +#line 1834 "Parser.y" { yyval.Expression = new Literal(-GetValue(1).Double, yyloc); } } - private void _422() + private void _428() { // variable -> Identifier -#line 1804 "Parser.y" +#line 1840 "Parser.y" { yyval.VariableFactory = VariableFactory.Identifier; yyval.SymbolId = GetValue(1).SymbolId; } } - private void _423() + private void _429() { // variable -> InstanceVariable -#line 1805 "Parser.y" +#line 1841 "Parser.y" { yyval.VariableFactory = VariableFactory.Instance; yyval.SymbolId = GetValue(1).SymbolId; } } - private void _424() + private void _430() { // variable -> GlobalVariable -#line 1806 "Parser.y" +#line 1842 "Parser.y" { yyval.VariableFactory = VariableFactory.Global; yyval.SymbolId = GetValue(1).SymbolId; } } - private void _425() + private void _431() { // variable -> ConstantIdentifier -#line 1807 "Parser.y" +#line 1843 "Parser.y" { yyval.VariableFactory = VariableFactory.Constant; yyval.SymbolId = GetValue(1).SymbolId; } } - private void _426() + private void _432() { // variable -> ClassVariable -#line 1808 "Parser.y" +#line 1844 "Parser.y" { yyval.VariableFactory = VariableFactory.Class; yyval.SymbolId = GetValue(1).SymbolId; } } - private void _427() + private void _433() { // variable -> Nil -#line 1809 "Parser.y" +#line 1845 "Parser.y" { yyval.VariableFactory = VariableFactory.Nil; } } - private void _428() + private void _434() { // variable -> Self -#line 1810 "Parser.y" +#line 1846 "Parser.y" { yyval.VariableFactory = VariableFactory.Self; } } - private void _429() + private void _435() { // variable -> True -#line 1811 "Parser.y" +#line 1847 "Parser.y" { yyval.VariableFactory = VariableFactory.True; } } - private void _430() + private void _436() { // variable -> False -#line 1812 "Parser.y" +#line 1848 "Parser.y" { yyval.VariableFactory = VariableFactory.False; } } - private void _431() + private void _437() { // variable -> File -#line 1813 "Parser.y" +#line 1849 "Parser.y" { yyval.VariableFactory = VariableFactory.File; } } - private void _432() + private void _438() { // variable -> Line -#line 1814 "Parser.y" +#line 1850 "Parser.y" { yyval.VariableFactory = VariableFactory.Line; } } - private void _433() + private void _439() { // var_ref -> variable -#line 1819 "Parser.y" +#line 1855 "Parser.y" { yyval.Expression = GetValue(1).VariableFactory.MakeRead(this, GetValue(1).SymbolId, yyloc); } } - private void _434() + private void _440() { // var_lhs -> variable -#line 1826 "Parser.y" +#line 1862 "Parser.y" { yyval.LeftValue = GetValue(1).VariableFactory.MakeLeftValue(this, GetValue(1).SymbolId, yyloc); } } - private void _435() + private void _441() { // match_reference -> MatchReference -#line 1833 "Parser.y" +#line 1869 "Parser.y" { yyval.RegexMatchReference = new RegexMatchReference(GetValue(1).Integer, GetLocation(1)); } } - private void _436() + private void _442() { // superclass -> term -#line 1839 "Parser.y" +#line 1875 "Parser.y" { yyval.Expression = null; } } - private void _437() + private void _443() { // @33 -> -#line 1843 "Parser.y" +#line 1879 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_BEG); } } - private void _438() + private void _444() { // superclass -> '<' @33 expr term -#line 1847 "Parser.y" +#line 1883 "Parser.y" { yyval.Expression = GetValue(2).Expression; } } - private void _439() + private void _445() { // superclass -> Error term -#line 1851 "Parser.y" +#line 1887 "Parser.y" { StopErrorRecovery(); yyval.Expression = null; } } - private void _440() + private void _446() { // parameters_declaration -> '(' parameters opt_nl ')' -#line 1858 "Parser.y" +#line 1894 "Parser.y" { yyval.Parameters = GetValue(3).Parameters; _tokenizer.SetState(LexicalState.EXPR_BEG); } } - private void _441() + private void _447() { // parameters_declaration -> parameters term -#line 1863 "Parser.y" +#line 1899 "Parser.y" { yyval.Parameters = GetValue(2).Parameters; } } - private void _442() + private void _448() { // parameters -> parameter_list ',' default_parameter_list ',' array_parameter block_parameter_opt -#line 1869 "Parser.y" +#line 1905 "Parser.y" { yyval.Parameters = new Parameters(GetValue(6).LocalVariables, GetValue(4).SimpleAssignmentExpressions, GetValue(2).LocalVariable, GetValue(1).LocalVariable, yyloc); } } - private void _443() + private void _449() { // parameters -> parameter_list ',' default_parameter_list block_parameter_opt -#line 1873 "Parser.y" +#line 1909 "Parser.y" { yyval.Parameters = new Parameters(GetValue(4).LocalVariables, GetValue(2).SimpleAssignmentExpressions, null, GetValue(1).LocalVariable, yyloc); } } - private void _444() + private void _450() { // parameters -> parameter_list ',' array_parameter block_parameter_opt -#line 1877 "Parser.y" +#line 1913 "Parser.y" { yyval.Parameters = new Parameters(GetValue(4).LocalVariables, null, GetValue(2).LocalVariable, GetValue(1).LocalVariable, yyloc); } } - private void _445() + private void _451() { // parameters -> parameter_list block_parameter_opt -#line 1881 "Parser.y" +#line 1917 "Parser.y" { yyval.Parameters = new Parameters(GetValue(2).LocalVariables, null, null, GetValue(1).LocalVariable, yyloc); } } - private void _446() + private void _452() { // parameters -> default_parameter_list ',' array_parameter block_parameter_opt -#line 1885 "Parser.y" +#line 1921 "Parser.y" { yyval.Parameters = new Parameters(null, GetValue(4).SimpleAssignmentExpressions, GetValue(2).LocalVariable, GetValue(1).LocalVariable, yyloc); } } - private void _447() + private void _453() { // parameters -> default_parameter_list block_parameter_opt -#line 1889 "Parser.y" +#line 1925 "Parser.y" { yyval.Parameters = new Parameters(null, GetValue(2).SimpleAssignmentExpressions, null, GetValue(1).LocalVariable, yyloc); } } - private void _448() + private void _454() { // parameters -> array_parameter block_parameter_opt -#line 1893 "Parser.y" +#line 1929 "Parser.y" { yyval.Parameters = new Parameters(null, null, GetValue(2).LocalVariable, GetValue(1).LocalVariable, yyloc); } } - private void _449() + private void _455() { // parameters -> block_parameter -#line 1897 "Parser.y" +#line 1933 "Parser.y" { yyval.Parameters = new Parameters(null, null, null, GetValue(1).LocalVariable, yyloc); } } - private void _450() + private void _456() { // parameters -> -#line 1901 "Parser.y" +#line 1937 "Parser.y" { yyval.Parameters = new Parameters(null, null, null, null, yyloc); } } - private void _451() + private void _457() { // parameter -> ConstantIdentifier -#line 1907 "Parser.y" +#line 1943 "Parser.y" { _tokenizer.ReportError(Errors.FormalArgumentIsConstantVariable); yyval.LocalVariable = DefineParameter(GenerateErrorConstantName(), yyloc); } } - private void _452() + private void _458() { // parameter -> InstanceVariable -#line 1912 "Parser.y" +#line 1948 "Parser.y" { _tokenizer.ReportError(Errors.FormalArgumentIsInstanceVariable); yyval.LocalVariable = DefineParameter(GenerateErrorConstantName(), yyloc); } } - private void _453() + private void _459() { // parameter -> GlobalVariable -#line 1917 "Parser.y" +#line 1953 "Parser.y" { _tokenizer.ReportError(Errors.FormalArgumentIsGlobalVariable); yyval.LocalVariable = DefineParameter(GenerateErrorConstantName(), yyloc); } } - private void _454() + private void _460() { // parameter -> ClassVariable -#line 1922 "Parser.y" +#line 1958 "Parser.y" { _tokenizer.ReportError(Errors.FormalArgumentIsClassVariable); yyval.LocalVariable = DefineParameter(GenerateErrorConstantName(), yyloc); } } - private void _455() + private void _461() { // parameter -> Identifier -#line 1927 "Parser.y" +#line 1963 "Parser.y" { yyval.LocalVariable = DefineParameter(GetValue(1).SymbolId, yyloc); } } - private void _456() + private void _462() { // parameter_list -> parameter -#line 1933 "Parser.y" +#line 1969 "Parser.y" { yyval.LocalVariables = CollectionUtils.MakeList(GetValue(1).LocalVariable); } } - private void _457() + private void _463() { // parameter_list -> parameter_list ',' parameter -#line 1937 "Parser.y" +#line 1973 "Parser.y" { GetValue(3).LocalVariables.Add(GetValue(1).LocalVariable); yyval.LocalVariables = GetValue(3).LocalVariables; } } - private void _458() + private void _464() { // default_parameter -> parameter '=' arg -#line 1944 "Parser.y" +#line 1980 "Parser.y" { yyval.SimpleAssignmentExpression = new SimpleAssignmentExpression(GetValue(3).LocalVariable, GetValue(1).Expression, SymbolId.Empty, yyloc); } } - private void _459() + private void _465() { // default_parameter_list -> default_parameter -#line 1950 "Parser.y" +#line 1986 "Parser.y" { yyval.SimpleAssignmentExpressions = CollectionUtils.MakeList(GetValue(1).SimpleAssignmentExpression); } } - private void _460() + private void _466() { // default_parameter_list -> default_parameter_list ',' default_parameter -#line 1954 "Parser.y" +#line 1990 "Parser.y" { GetValue(3).SimpleAssignmentExpressions.Add(GetValue(1).SimpleAssignmentExpression); yyval.SimpleAssignmentExpressions = GetValue(3).SimpleAssignmentExpressions; } } - private void _463() + private void _469() { // array_parameter -> array_parameter_mark parameter -#line 1965 "Parser.y" +#line 2001 "Parser.y" { yyval.LocalVariable = GetValue(1).LocalVariable; } } - private void _464() + private void _470() { // array_parameter -> array_parameter_mark -#line 1969 "Parser.y" +#line 2005 "Parser.y" { yyval.LocalVariable = DefineParameter(Symbols.RestArgsLocal, GetLocation(1)); } } - private void _467() + private void _473() { // block_parameter -> block_parameter_mark parameter -#line 1979 "Parser.y" +#line 2015 "Parser.y" { yyval.LocalVariable = GetValue(1).LocalVariable; } } - private void _469() + private void _475() { // block_parameter_opt -> ',' block_parameter -#line 1986 "Parser.y" +#line 2022 "Parser.y" { yyval.LocalVariable = GetValue(1).LocalVariable; } } - private void _471() + private void _477() { // @34 -> -#line 1993 "Parser.y" +#line 2029 "Parser.y" { _tokenizer.SetState(LexicalState.EXPR_BEG); } } - private void _472() + private void _478() { // singleton -> '(' @34 expr opt_nl ')' -#line 1997 "Parser.y" +#line 2033 "Parser.y" { yyval.Expression = GetValue(3).Expression; } } - private void _473() + private void _479() { // maplets -> maplet -#line 2003 "Parser.y" +#line 2039 "Parser.y" { yyval.Maplets = CollectionUtils.MakeList(GetValue(1).Maplet); } } - private void _474() + private void _480() { // maplets -> maplets ',' maplet -#line 2007 "Parser.y" +#line 2043 "Parser.y" { GetValue(3).Maplets.Add(GetValue(1).Maplet); yyval.Maplets = GetValue(3).Maplets; } } - private void _475() + private void _481() { // maplet -> arg Assoc arg -#line 2014 "Parser.y" +#line 2050 "Parser.y" { yyval.Maplet = new Maplet(GetValue(3).Expression, GetValue(1).Expression, yyloc); } } - private void _495() + private void _501() { // term -> ';' -#line 2052 "Parser.y" +#line 2088 "Parser.y" { StopErrorRecovery(); } } - private void _498() + private void _504() { // terms -> terms ';' -#line 2057 "Parser.y" +#line 2093 "Parser.y" { StopErrorRecovery(); } } -#line 2060 "Parser.y" +#line 2096 "Parser.y" } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Parser.y;C428766 File: Parser.y =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Parser.y;C428766 (server) 5/4/2008 10:39 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Parser.y;Super17 @@ -50,10 +50,13 @@ %token STRING_BEG REGEXP_BEG SHELL_STRING_BEGIN WORDS_BEG VERBATIM_WORDS_BEGIN STRING_EMBEDDED_CODE_BEGIN SYMBEG %type program + %type stmt %type stmts compstmt ensure_opt -%type jump_statement +%type jump_statement jump_statement_with_parameters jump_statement_parameterless %type alias_statement +%type conditional_statement + %type primary expr expression_statement superclass var_ref singleton case_expression %type arg %type args exc_list @@ -193,26 +196,6 @@ { $$ = new UndefineStatement($2, @$); } - | stmt IF_MOD expr - { - $$ = new ConditionalStatement($3, false, $1, @$); - } - | stmt UNLESS_MOD expr - { - $$ = new ConditionalStatement($3, true, $1, @$); - } - | stmt WHILE_MOD expr - { - $$ = MakeLoopStatement($1, $3, true, @$); - } - | stmt UNTIL_MOD expr - { - $$ = MakeLoopStatement($1, $3, false, @$); - } - | stmt RESCUE_MOD stmt - { - $$ = new RescueStatement($1, $3, MergeLocations(@2, @3), @$); - } | UPPERCASE_BEGIN { if (InMethod) { @@ -248,6 +231,10 @@ { $$ = $1; } + | conditional_statement + { + $$ = $1; + } | expression_statement { $$ = new ExpressionStatement($1); @@ -274,30 +261,44 @@ ; jump_statement: + jump_statement_with_parameters + { + $$ = $1; + } + | jump_statement_parameterless + { + $$ = $1; + } +; + +jump_statement_with_parameters: + RETURN open_args + { + $$ = new ReturnStatement(CurrentScope, RequireNoBlockArg($2), @$); + } + | BREAK open_args + { + $$ = new BreakStatement(CurrentScope, RequireNoBlockArg($2), @$); + } + | NEXT open_args + { + $$ = new NextStatement(CurrentScope, RequireNoBlockArg($2), @$); + } +; + +jump_statement_parameterless: RETURN { $$ = new ReturnStatement(CurrentScope, null, @$); } - | RETURN open_args - { - $$ = new ReturnStatement(CurrentScope, RequireNoBlockArg($2), @$); - } | BREAK { $$ = new BreakStatement(CurrentScope, null, @$); } - | BREAK open_args - { - $$ = new BreakStatement(CurrentScope, RequireNoBlockArg($2), @$); - } | NEXT { $$ = new NextStatement(CurrentScope, null, @$); } - | NEXT open_args - { - $$ = new NextStatement(CurrentScope, RequireNoBlockArg($2), @$); - } | REDO { $$ = new RedoStatement(CurrentScope, @$); @@ -353,8 +354,31 @@ { $$ = new ParallelAssignmentExpression($1, $3, SymbolId.Empty, @$); } - ; - +; + +conditional_statement: + stmt IF_MOD expr + { + $$ = new ConditionalStatement($3, false, $1, @$); + } + | stmt UNLESS_MOD expr + { + $$ = new ConditionalStatement($3, true, $1, @$); + } + | stmt WHILE_MOD expr + { + $$ = MakeLoopStatement($1, $3, true, @$); + } + | stmt UNTIL_MOD expr + { + $$ = MakeLoopStatement($1, $3, false, @$); + } + | stmt RESCUE_MOD stmt + { + $$ = new RescueStatement($1, $3, MergeLocations(@2, @3), @$); + } +; + compound_rhs: args ',' arg { @@ -733,6 +757,10 @@ } | lhs '=' arg RESCUE_MOD arg { + $$ = new SimpleAssignmentExpression($1, new RescueExpression($3, new ExpressionStatement($5), MergeLocations(@4, @5), MergeLocations(@3, @5)), SymbolId.Empty, @$); + } + | lhs '=' arg RESCUE_MOD jump_statement_parameterless + { $$ = new SimpleAssignmentExpression($1, new RescueExpression($3, $5, MergeLocations(@4, @5), MergeLocations(@3, @5)), SymbolId.Empty, @$); } | var_lhs ASSIGNMENT arg @@ -892,6 +920,14 @@ { $$ = new OrExpression($1, $3, @$); } + | arg BITWISE_AND jump_statement_parameterless + { + $$ = new ConditionalJumpExpression($1, $3, false, @$); + } + | arg BITWISE_OR jump_statement_parameterless + { + $$ = new ConditionalJumpExpression($1, $3, true, @$); + } | arg DOT2 arg { $$ = new RangeExpression(CheckNoRange($1), CheckNoRange($3), false, @$); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;C420856 File: Symbols.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;Super17 @@ -27,6 +27,8 @@ public static readonly SymbolId RestArgsLocal = SymbolTable.StringToId("?rest?"); public static readonly SymbolId MethodMissing = SymbolTable.StringToId("method_missing"); + public static readonly SymbolId RespondTo = SymbolTable.StringToId("respond_to?"); + public static readonly SymbolId ToProc = SymbolTable.StringToId("to_proc"); public static readonly SymbolId Initialize = SymbolTable.StringToId("initialize"); public static readonly SymbolId Object = SymbolTable.StringToId("Object"); public static readonly SymbolId Kernel = SymbolTable.StringToId("Kernel"); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Tokenizer.cs;C428766 rename, edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/BlockParam.cs;C428403 File: BlockParam.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/BlockParam.cs;C428403 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/BlockParam.cs;Super17 @@ -47,8 +47,11 @@ private readonly Proc/*!*/ _proc; private readonly BlockCallerKind _callerKind; - // Is the library method call taking this BlockParam is a proc converter - // used only for BlockParams that are passed to library method calls? + // filled by define_method: + private readonly RubyLambdaMethodInfo _methodDefinition; + + // Is the library method call taking this BlockParam a proc converter? + // Used only for BlockParams that are passed to library method calls. private readonly bool _isLibProcConverter; // -- out -- @@ -60,6 +63,7 @@ internal ProcKind SourceProcKind { get { return _sourceProcKind; } } internal BlockReturnReason ReturnReason { get { return _returnReason; } set { _returnReason = value; } } internal RuntimeFlowControl TargetFrame { get { return _targetFrame; } } + internal RubyLambdaMethodInfo MethodDefinition { get { return _methodDefinition; } } public Proc/*!*/ Proc { get { return _proc; } } // emitted: @@ -71,10 +75,11 @@ internal static PropertyInfo/*!*/ SelfProperty { get { return typeof(BlockParam).GetProperty("Self"); } } internal static PropertyInfo/*!*/ IdProperty { get { return typeof(BlockParam).GetProperty("Id"); } } - private BlockParam(Proc/*!*/ proc, BlockCallerKind callerKind, bool isLibProcConverter) { + private BlockParam(Proc/*!*/ proc, BlockCallerKind callerKind, bool isLibProcConverter, RubyLambdaMethodInfo methodDefinition) { _callerKind = callerKind; _proc = proc; _isLibProcConverter = isLibProcConverter; + _methodDefinition = methodDefinition; } internal static MethodInfo/*!*/ GetMethod(string/*!*/ name) { @@ -122,16 +127,16 @@ // emitted: public static BlockParam/*!*/ CreateForYield(Proc proc) { if (proc != null) { - return new BlockParam(proc, BlockCallerKind.Yield, false); + return new BlockParam(proc, BlockCallerKind.Yield, false, null); } else { throw new LocalJumpError("no block given"); } } // emitted: - public static BlockParam/*!*/ CreateForProcCall(Proc/*!*/ proc) { + public static BlockParam/*!*/ CreateForProcCall(Proc/*!*/ proc, RubyLambdaMethodInfo method) { Assert.NotNull(proc); - return new BlockParam(proc, BlockCallerKind.Call, false); + return new BlockParam(proc, BlockCallerKind.Call, false, method); } // emitted: @@ -148,7 +153,7 @@ isProcConverter = false; } - return new BlockParam(proc, BlockCallerKind.Yield, isProcConverter); + return new BlockParam(proc, BlockCallerKind.Yield, isProcConverter, null); } // emitted: =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/MethodVisibility.cs;C390406 File: MethodVisibility.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/MethodVisibility.cs;C390406 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/MethodVisibility.cs;Super17 @@ -20,6 +20,8 @@ namespace Ruby.Runtime { [Flags] public enum RubyMethodAttributes { + None = 0, + Public = 1, Private = 2, Protected = 4, @@ -48,6 +50,7 @@ } public enum RubyMethodVisibility { + None = 0, Public = RubyMethodAttributes.Public, Private = RubyMethodAttributes.Private, Protected = RubyMethodAttributes.Protected =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C420856 File: RubyContext.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;Super17 @@ -30,6 +30,7 @@ using Ruby.Runtime.Calls; using Microsoft.Scripting.Runtime; using System.Diagnostics; +using Microsoft.Scripting.Generation; namespace Ruby.Runtime { @@ -108,7 +109,7 @@ ContractUtils.RequiresNotNull(context, "context"); SourceUnitTree ast = new Parser().Parse(context); - return (ast != null) ? ast.Transform(new AstGenerator(context), context.SourceUnit.Kind) : null; + return (ast != null) ? ast.Transform(new AstGenerator(context, Snippets.Shared.SaveSnippets), context.SourceUnit.Kind) : null; } public override CompilerOptions/*!*/ GetCompilerOptions() { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptions.cs;C390406 File: RubyExceptions.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptions.cs;C390406 (server) 5/3/2008 1:34 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyExceptions.cs;Super17 @@ -19,6 +19,7 @@ using System.IO; using Microsoft.Scripting.Runtime; using System.Security; +using Microsoft.Scripting.Utils; namespace Ruby.Runtime { /// @@ -34,18 +35,23 @@ } public static Exception/*!*/ CreateTypeConversionError(string/*!*/ fromType, string/*!*/ toType) { + Assert.NotNull(fromType, toType); return CreateTypeError(String.Format("can't convert {0} into {1}", fromType, toType)); } - public static Exception/*!*/ CannotConvertTypeToTargetType(CodeContext/*!*/ context, object param, string toType) { + public static Exception/*!*/ CannotConvertTypeToTargetType(CodeContext/*!*/ context, object param, string/*!*/ toType) { + Assert.NotNull(context, toType); return CreateTypeConversionError(SymbolTable.IdToString(RubyUtils.GetExecutionContext(context).GetClassOf(param).Name), toType); } - public static Exception/*!*/ MethodShouldReturnType(object param, string method, string targetType) { - return new InvalidOperationException(param.GetType().Name + "#" + method + " should return " + targetType); + public static Exception/*!*/ MethodShouldReturnType(CodeContext/*!*/ context, object param, string/*!*/ method, string/*!*/ targetType) { + Assert.NotNull(context, method, targetType); + return new InvalidOperationException(String.Format("{0}#{1} should return {2}", + SymbolTable.IdToString(RubyUtils.GetExecutionContext(context).GetClassOf(param).Name), method, targetType + )); } - public static Exception/*!*/ CreateArgumentError(string message) { + public static Exception/*!*/ CreateArgumentError(string/*!*/ message) { return new ArgumentException(message); } @@ -53,23 +59,23 @@ return new ArgumentException(message, innerException); } - public static Exception/*!*/ CreateNotImplementedError(string message) { + public static Exception/*!*/ CreateNotImplementedError(string/*!*/ message) { return new NotImplementedError(message); } - public static Exception/*!*/ CreateNotImplementedError(string message, Exception innerException) { + public static Exception/*!*/ CreateNotImplementedError(string/*!*/ message, Exception innerException) { return new NotImplementedError(message, innerException); } - public static Exception/*!*/ CreateIndexError(string message) { + public static Exception/*!*/ CreateIndexError(string/*!*/ message) { return new IndexOutOfRangeException(message); } - public static Exception/*!*/ CreateIndexError(string message, Exception innerException) { + public static Exception/*!*/ CreateIndexError(string/*!*/ message, Exception innerException) { return new IndexOutOfRangeException(message, innerException); } - public static Exception/*!*/ CreateRangeError(string message) { + public static Exception/*!*/ CreateRangeError(string/*!*/ message) { return new ArgumentOutOfRangeException(String.Empty, message); } @@ -77,11 +83,11 @@ return new MemberAccessException(message); } - public static Exception/*!*/ CreateLocalJumpError(string message) { + public static Exception/*!*/ CreateLocalJumpError(string/*!*/ message) { return new LocalJumpError(message); } - public static Exception/*!*/ CreateIOError(string message) { + public static Exception/*!*/ CreateIOError(string/*!*/ message) { return new IOException(message); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C428403 File: RubyOps.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C428403 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;Super17 @@ -69,7 +69,7 @@ GlobalScopeExtension globalScope = (GlobalScopeExtension)parent.LanguageContext.EnsureScopeExtension(parent.GlobalScope); RubyScope result = new RubyTopLevelScope(globalScope, true, null, locals, names); - result.Initialize(new RuntimeFlowControl(), RubyMethodVisibility.Private, globalScope.MainObject); + result.Initialize(new RuntimeFlowControl(), RubyMethodAttributes.PrivateInstance, globalScope.MainObject); result.SetDebugName(globalScope.IsHosted ? "top-primary-hosted" : "top-primary"); // define TOPLEVEL_BINDING constant: @@ -94,11 +94,11 @@ // TODO: hack, see module_eval if (loader is ModuleEvalScope) { result = new RubyTopLevelScope(globalScope, false, (RubyModule)loader.SelfObject, locals, names); - result.Initialize(new RuntimeFlowControl(), RubyMethodVisibility.Public, loader.SelfObject); + result.Initialize(new RuntimeFlowControl(), RubyMethodAttributes.PublicInstance, loader.SelfObject); result.SetDebugName("top-module-eval"); } else { result = new RubyTopLevelScope(globalScope, false, null, locals, names); - result.Initialize(new RuntimeFlowControl(), RubyMethodVisibility.Private, globalScope.MainObject); + result.Initialize(new RuntimeFlowControl(), RubyMethodAttributes.PrivateInstance, globalScope.MainObject); result.SetDebugName("top-level"); } @@ -151,7 +151,7 @@ // TODO: RubyModuleScope result = (RubyModuleScope)scope; - result.Initialize(rfc, RubyMethodVisibility.Public, module); + result.Initialize(rfc, RubyMethodAttributes.PublicInstance, module); result.SetDebugName((module.IsClass ? "class" : "module") + " " + SymbolTable.IdToString(module.Name)); return result; } @@ -162,22 +162,24 @@ FunctionEnvironmentDictionary locals = new FunctionEnvironmentDictionary(storage, names); return new RubyMethodScope(p, locals, names); } - + // TODO: remove // emitted: - public static RubyMethodScope/*!*/ InitializeMethodScope( -#if DEBUG - SymbolId name, -#endif - CodeContext/*!*/ scope, RuntimeFlowControl/*!*/ rfc, object selfObject) { - Assert.NotNull(scope, rfc); + public static RubyMethodScope/*!*/ InitializeMethodScope(RubyMethodInfo/*!*/ methodDefinition, + CodeContext/*!*/ scope, RuntimeFlowControl/*!*/ rfc, object selfObject, Proc blockParameter) { + Assert.NotNull(methodDefinition, scope, rfc); // TODO: RubyMethodScope result = (RubyMethodScope)scope; - result.Initialize(rfc, RubyMethodVisibility.Public, selfObject); -#if DEBUG - result.SetDebugName("method" + " " + SymbolTable.IdToString(name)); -#endif + result.Initialize(rfc, RubyMethodAttributes.PublicInstance, selfObject); + result.Method = methodDefinition; + result.BlockParameter = blockParameter; + + result.SetDebugName("method " + + SymbolTable.IdToString(methodDefinition.DefinitionName) + + ((blockParameter != null) ? "&" : null) + ); + return result; } @@ -189,15 +191,17 @@ } // TODO: - // emitted: - //public static RubyScope/*!*/ CreateBlockScope(CodeContext/*!*/ context) { - // // TODO: - // RubyScope parentScope = (RubyScope)context.LocalScope; - // RubyScope result = new RubyScope(parentScope.RuntimeFlowControl, parentScope.Visibility, ScopeKind.Block, parentScope.SelfObject); - // context.LocalScope = result; - // return result; - //} + // remove: + public static RubyBlockScope/*!*/ InitializeBlockScope(CodeContext/*!*/ scope, BlockParam/*!*/ blockParam, object selfObject) { + Assert.NotNull(scope, blockParam); + RubyBlockScope result = (RubyBlockScope)scope; + RubyScope parent = (RubyScope)scope.Parent; + result.Initialize(parent.RuntimeFlowControl, parent.MethodAttributes, selfObject); + result.BlockParameter = blockParam; + return result; + } + // emitted: public static object GetSelf(RubyScope/*!*/ scope) { return scope.SelfObject; @@ -209,6 +213,18 @@ } // emitted: + public static Proc GetCurrentMethodBlockParameter(RubyScope/*!*/ scope) { + RubyMethodScope methodScope = scope.GetInnerMostMethodScope(); + return methodScope != null ? methodScope.BlockParameter : null; + } + + // emitted: + public static RubyMethodInfo GetCurrentMethodDefinition(RubyScope/*!*/ scope) { + RubyMethodScope methodScope = scope.GetInnerMostMethodScope(); + return methodScope != null ? methodScope.Method : null; + } + + // emitted: public static void PrintInteractiveResult(RubyScope/*!*/ scope, object value) { TextWriter output = scope.LanguageContext.DomainManager.SharedIO.OutputWriter; output.Write("=> "); @@ -253,34 +269,43 @@ proc.Kind = ProcKind.Block; } + // emitted: + /// + /// Called on the result of to_proc conversion in block reference operator (&). + /// + public static Proc/*!*/ RequireProc(object obj, object conversionResult, RubyScope/*!*/ scope) { + Proc result = conversionResult as Proc; + if (result == null) { + throw RubyExceptions.CreateTypeError(String.Format("{0}#to_proc should return Proc", scope.ExecutionContext.GetClassOf(obj).Name)); + } + return result; + } + #endregion #region Methods // emitted (MethodDeclaration): - // Returns the module/class that will own the defined method - public static RubyModule GetMethodOwner(CodeContext/*!*/ context, object target, bool isSingleton) { - RubyExecutionContext ec = RubyUtils.GetExecutionContext(context); + public static RubyMethodInfo/*!*/ DefineMethod(object target, CodeContext/*!*/ context, bool isSingleton, + SymbolId name, Delegate/*!*/ clrMethod, int mandatory, int optional, bool hasParamsArray) { + Assert.NotNull(context, clrMethod); - if (isSingleton) { + RubyScope scope = RubyUtils.GetScope(context); + + RubyModule owner; + + if (isSingleton || (scope.MethodAttributes & RubyMethodAttributes.Singleton) != 0) { if (!RubyUtils.CanCreateSingleton(target)) { throw RubyExceptions.CreateTypeError("can't define singleton method for literals"); } - return ec.CreateSingletonClass(target); + owner = scope.ExecutionContext.CreateSingletonClass(target); + } else { + owner = scope.ExecutionContext.GetInnerMostModule(scope); } - return ec.GetInnerMostModule(context); - } + RubyMethodInfo method = new RubyMethodInfo(clrMethod, scope, owner, name, mandatory, optional, hasParamsArray, scope.Visibility); - // emitted (MethodDeclaration): - public static object DefineMethod(CodeContext/*!*/ context, RubyModule/*!*/ owner, SymbolId name, Delegate/*!*/ clrMethod, - int mandatory, int optional, bool hasParamsArray) { - Assert.NotNull(context, clrMethod, owner); - - RubyScope scope = RubyUtils.GetScope(context); - RubyMethodInfo method = new RubyMethodInfo(clrMethod, owner, mandatory, optional, hasParamsArray, scope.Visibility); - owner.SetMethod(name, method); // expose RubyMethod in the scope (the method is bound to the main singleton instance): @@ -288,18 +313,39 @@ owner.GlobalScope.Scope.SetName(name, new RubyMethod(owner.GlobalScope.MainObject, method, name)); } - return null; + return method; } // emitted (AliasStatement): public static void AliasMethod(CodeContext/*!*/ context, SymbolId newName, SymbolId oldName) { - RubyModule owner = RubyUtils.GetExecutionContext(context).GetInnerMostModule(context); - RubyMemberInfo method = owner.ResolveMethod(oldName); - if (method == null) { - throw RubyExceptions.CreateUndefinedMethodError(owner, oldName); + RubyScope scope = (RubyScope)context; + + // lexical lookup: + RubyModule innerMostModule = scope.ExecutionContext.GetInnerMostModule(scope); + RubyMemberInfo method = innerMostModule.ResolveMethod(oldName); + if (method != null) { + innerMostModule.SetMethod(newName, method); + return; } - owner.SetMethod(newName, method); + // TODO: Ruby 1.9 doesn't check the anonymous module: + // anonymous module when loaded wrapped: + if (scope.Top.Module != null) { + method = scope.Top.Module.ResolveMethod(oldName); + if (method != null) { + innerMostModule.SetMethod(newName, method); + return; + } + } + + // Object and its ancestors: + method = scope.ExecutionContext.ObjectClass.ResolveMethod(oldName); + if (method != null) { + innerMostModule.SetMethod(newName, method); + return; + } + + throw RubyExceptions.CreateUndefinedMethodError(innerMostModule, oldName); } // emitted (UndefineMethod): @@ -781,11 +827,56 @@ return new ArgumentException(String.Format("wrong number of arguments ({0} for {1})", actual, expected)); } - // emitted - public static void ThrowTopLevelSuperException() { - throw new MissingMethodException("super called outside of method"); + // emitted (SuperCall) + public static Exception/*!*/ MakeTopLevelSuperException() { + return new MissingMethodException("super called outside of method"); } + // TODO: + // emitted (RubyBinder) + public struct SuperCallTargetInfo { + public readonly RubyModule/*!*/ DeclaringModule; + public readonly SymbolId MethodName; + + public SuperCallTargetInfo(RubyModule/*!*/ declaringModule, SymbolId methodName) { + DeclaringModule = declaringModule; + MethodName = methodName; + } + } + + // TODO: + // emitted (RubyBinder) + public static SuperCallTargetInfo GetSuperCallTarget(CodeContext/*!*/ context) { + RubyScope scope = (RubyScope)context; + while (true) { + Debug.Assert(scope != null); + + switch (scope.Kind) { + case ScopeKind.Method: + RubyMethodScope methodScope = (RubyMethodScope)scope; + return new SuperCallTargetInfo( + methodScope.Method.DeclaringModule, + methodScope.Method.DefinitionName + ); + + case ScopeKind.Block: + BlockParam blockParam = ((RubyBlockScope)scope).BlockParameter; + if (blockParam.MethodDefinition != null) { + return new SuperCallTargetInfo( + blockParam.MethodDefinition.DeclaringModule, + blockParam.MethodDefinition.DefinitionName + ); + } + break; + + case ScopeKind.TopLevel: + throw MakeTopLevelSuperException(); + } + + scope = (RubyScope)scope.Parent; + } + } + // emitted public static Exception/*!*/ MakeMissingMethodException(object target, string name, bool superCall) { string msg; @@ -826,9 +917,26 @@ return new MutableString(str.ToString()); } + #region Dynamic Actions + + // emitted (ProtocolConversionAction): + public static Proc/*!*/ ToProcValidator(string/*!*/ className, object obj) { + Proc result = obj as Proc; + if (result == null) { + throw new InvalidOperationException(String.Format("{0}#to_proc should return Proc", className)); + } + return result; + } + + // emitted (ProtocolConversionAction): + public static Exception/*!*/ CreateTypeConversionError(string/*!*/ fromType, string/*!*/ toType) { + return RubyExceptions.CreateTypeConversionError(fromType, toType); + } + // emitted: (IDO implementation for Ruby classes) - public static RuleBuilder/*!*/ GetClassRule(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) where T : class { - return RubyBinder.GetUserClassRule(action, callerContext, args); + public static RuleBuilder GetClassRule(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) where T : class { + RuleBuilder rule = new RuleBuilder(); + return RubyBinder.SetRule(rule, action, callerContext, args) ? rule : null; } // emitted: (IDO implementation for Ruby classes) @@ -836,6 +944,8 @@ return RubyContext._Default; } + #endregion + #region Called by GetHashCode/Equals methods in generated .NET classes // we need to get the right execution context here @@ -966,7 +1076,7 @@ public static object HookupEvent(EventInfo/*!*/ eventInfo, object target, Proc/*!*/ proc) { Assert.NotNull(eventInfo, proc); - BlockParam bp = BlockParam.CreateForProcCall(proc); + BlockParam bp = BlockParam.CreateForProcCall(proc, null); Delegate eh = RuntimeHelpers.GetDelegate(bp, eventInfo.EventHandlerType); MethodInfo mi = eventInfo.GetAddMethod(); @@ -977,8 +1087,11 @@ public static Delegate/*!*/ CreateDelegate(object target, Proc/*!*/ proc) { Assert.NotNull(proc); - BlockParam bp = BlockParam.CreateForProcCall(proc); + BlockParam bp = BlockParam.CreateForProcCall(proc, null); return RuntimeHelpers.GetDelegate(bp, typeof(T)); } + + public static void X(string marker) { + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;C428289 File: RubyScope.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;C428289 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;Super17 @@ -25,6 +25,7 @@ using System.Diagnostics; using Microsoft.Scripting.Runtime; using System.Text.RegularExpressions; +using Ruby.Runtime.Calls; namespace Ruby.Runtime { @@ -41,7 +42,8 @@ private Match _currentMatch; // TODO: per method scope and top level scope, not block scope private object _lastInputLine; // TODO: per method scope and top level scope, not block scope - private RubyMethodVisibility _visibility; + // set by private/public/protected/module_function + private RubyMethodAttributes _methodAttributes; public abstract ScopeKind Kind { get; } @@ -55,10 +57,14 @@ } public RubyMethodVisibility Visibility { - get { return _visibility; } - set { _visibility = value; } + get { return (RubyMethodVisibility)(_methodAttributes & RubyMethodAttributes.VisibilityMask); } } + public RubyMethodAttributes MethodAttributes { + get { return _methodAttributes; } + set { _methodAttributes = value; } + } + public RuntimeFlowControl/*!*/ RuntimeFlowControl { get { return _runtimeFlowControl; } } @@ -109,12 +115,12 @@ _top = parent.Top; } - internal void Initialize(RuntimeFlowControl/*!*/ runtimeFlowControl, RubyMethodVisibility visibility, object selfObject) { + internal void Initialize(RuntimeFlowControl/*!*/ runtimeFlowControl, RubyMethodAttributes methodAttributes, object selfObject) { Assert.NotNull(runtimeFlowControl); _selfObject = selfObject; _runtimeFlowControl = runtimeFlowControl; - _visibility = visibility; + _methodAttributes = methodAttributes; } internal MutableString GetCurrentMatchGroup(int index) { @@ -135,6 +141,14 @@ return null; } + public RubyMethodScope GetInnerMostMethodScope() { + RubyScope scope = this; + while (scope != null && scope.Kind != ScopeKind.Method) { + scope = (RubyScope)scope.Parent; + } + return (RubyMethodScope)scope; + } + #if DEBUG private string _debugName; @@ -164,8 +178,22 @@ } public sealed class RubyMethodScope : RubyScope { + // TODO: readonly + private RubyMethodInfo _method; + private Proc _blockParameter; + public override ScopeKind Kind { get { return ScopeKind.Method; } } + public RubyMethodInfo Method { + get { return _method; } + internal set { _method = value; } + } + + public Proc BlockParameter { + get { return _blockParameter; } + internal set { _blockParameter = value; } + } + internal RubyMethodScope(RubyScope/*!*/ parent, IAttributesCollection/*!*/ frame, SymbolId[]/*!*/ localNames) : base(parent, frame, localNames) { } @@ -186,6 +214,14 @@ public sealed class RubyBlockScope : RubyScope { public override ScopeKind Kind { get { return ScopeKind.Block; } } + // TODO: readonly + private BlockParam _blockParam; + + public BlockParam BlockParameter { + get { return _blockParam; } + internal set { _blockParam = value; } + } + internal RubyBlockScope(RubyScope/*!*/ parent, IAttributesCollection/*!*/ frame, SymbolId[]/*!*/ localNames) : base(parent, frame, localNames) { } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyUtils.cs;C420856 File: RubyUtils.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyUtils.cs;C420856 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyUtils.cs;Super17 @@ -23,6 +23,8 @@ using Ruby.Builtins; using Microsoft.Scripting.Runtime; using Ruby.Runtime.Calls; +using Ruby.Compiler; +using System.Diagnostics; namespace Ruby.Runtime { @@ -413,5 +415,45 @@ } return null; } + + public static object Evaluate(object self, MutableString/*!*/ code, RubyScope/*!*/ targetScope, MutableString file, int line) { + Assert.NotNull(code, targetScope); + + RubyExecutionContext ec = targetScope.ExecutionContext; + Scope globalScope = targetScope.GlobalScope; + RubyMethodScope methodScope = targetScope.GetInnerMostMethodScope(); + + SourceUnit source = ec.Context.CreateSnippet(code.ToString()); + + RubyCompilerOptions options = new RubyCompilerOptions(); + options.IsEval = true; + options.LocalNames = targetScope.GetVisibleLocalNames(); + options.TopLevelMethodName = (methodScope != null) ? methodScope.Method.DefinitionName : SymbolId.Empty; + + ScriptCode compiledCode = source.Compile(options, ec.RuntimeErrorSink); + Debug.Assert(compiledCode != null); + + return compiledCode.Run(targetScope, false); + } + + public static object EvaluateInModule(CodeContext/*!*/ context, RubyModule/*!*/ self, MutableString/*!*/ code, MutableString file, int line) { + Assert.NotNull(self, code); + + RubyContext language = self.ExecutionContext.Context; + SourceUnit source = language.CreateSnippet(code.ToString()); + + RubyCompilerOptions options = new RubyCompilerOptions(); + + // we want to create a new top-level local scope: + options.IsIncluded = true; + + ScriptCode compiledCode = source.Compile(options, self.ExecutionContext.RuntimeErrorSink); + Debug.Assert(compiledCode != null); + + // TODO: this is hack - we need arbitrary signature of the Initialize method: + ModuleEvalScope moduleEvalScope = new ModuleEvalScope((RubyScope)context, self); + + return compiledCode.Run(moduleEvalScope, false); + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/CallArguments.cs;C390406 File: CallArguments.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/CallArguments.cs;C390406 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/CallArguments.cs;Super17 @@ -56,6 +56,10 @@ : this(args, ruleParams, action.Signature.InsertArgument(new ArgumentInfo(ArgumentKind.Instance))) { } + internal CallArguments(object[]/*!*/ args, IList/*!*/ ruleParams, SuperCallAction/*!*/ action) + : this(args, ruleParams, action.Signature) { + } + internal CallArguments(object[]/*!*/ args, IList/*!*/ ruleParams, InvokeMemberAction/*!*/ action) : this(args, ruleParams, action.Signature) { } =================================================================== add: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/InvokeSuperMemberAction.cs File: InvokeSuperMemberAction.cs =================================================================== --- [no source file] +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/InvokeSuperMemberAction.cs;Super17 @@ -1,0 +1,64 @@ +?/* **************************************************************************** + * + * Copyright (c) Microsoft Corporation. + * + * This source code is subject to terms and conditions of the Microsoft Public License. A + * copy of the license can be found in the License.html file at the root of this distribution. If + * you cannot locate the Microsoft Public License, please send an email to + * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound + * by the terms of the Microsoft Public License. + * + * You must not remove this notice, or any other, from this software. + * + * + * ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; + +using Microsoft.Scripting.Actions; +using Microsoft.Scripting; +using Microsoft.Scripting.Utils; + +namespace Ruby.Runtime.Calls { + public sealed class SuperCallAction : CallAction, IEquatable { + private readonly int _lexicalScopeId; + + private SuperCallAction(ActionBinder/*!*/ binder, CallSignature/*!*/ signature, int lexicalScopeId) + : base(binder, signature) { + _lexicalScopeId = lexicalScopeId; + } + + public static SuperCallAction/*!*/ Make(ActionBinder/*!*/ binder, CallSignature/*!*/ signature, int lexicalScopeId) { + ContractUtils.RequiresNotNull(binder, "binder"); + return new SuperCallAction(binder, signature, lexicalScopeId); + } + + public static SuperCallAction/*!*/ Make(ActionBinder/*!*/ binder, int argumentCount, int lexicalScopeId) { + ContractUtils.Requires(argumentCount >= 0, "argumentCount"); + ContractUtils.RequiresNotNull(binder, "binder"); + return new SuperCallAction(binder, new CallSignature(argumentCount), lexicalScopeId); + } + + public override bool Equals(object obj) { + return Equals(obj as SuperCallAction); + } + + public override int GetHashCode() { + return base.GetHashCode() ^ _lexicalScopeId; + } + + public override string/*!*/ ToString() { + return String.Format("super({0}) #{1}", base.ToString(), _lexicalScopeId); + } + + #region IEquatable Members + + public bool Equals(SuperCallAction other) { + return base.Equals(other) && _lexicalScopeId == other._lexicalScopeId; + } + + #endregion + } +} =================================================================== add: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/ProtocolConversionAction.cs File: ProtocolConversionAction.cs =================================================================== --- [no source file] +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/ProtocolConversionAction.cs;Super17 @@ -1,0 +1,168 @@ +?/* **************************************************************************** + * + * Copyright (c) Microsoft Corporation. + * + * This source code is subject to terms and conditions of the Microsoft Public License. A + * copy of the license can be found in the License.html file at the root of this distribution. If + * you cannot locate the Microsoft Public License, please send an email to + * ironruby@microsoft.com. By using this source code in any fashion, you are agreeing to be bound + * by the terms of the Microsoft Public License. + * + * You must not remove this notice, or any other, from this software. + * + * + * ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Reflection; + +using Microsoft.Scripting.Actions; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Ast; +using Microsoft.Scripting.Utils; +using Microsoft.Scripting; + +using Ruby.Compiler; +using Ruby.Builtins; + +namespace Ruby.Runtime.Calls { + using Ast = Microsoft.Scripting.Ast.Expression; + using AstFactory = Ruby.Compiler.Ast.AstFactory; + + public abstract class ProtocolConversionAction : DynamicAction { + // TODO: ??? + public override DynamicActionKind Kind { + get { return (DynamicActionKind)(-1); } + } + + public override Rule Bind(object[] args) { + return RubyContext.RubyBinder.Bind(this, args); + } + + protected ProtocolConversionAction() + : base() { + } + + internal abstract void SetRule(RuleBuilder/*!*/ rule, CodeContext/*!*/ callerContext, object[]/*!*/ args); + } + + public abstract class ProtocolConversionAction : ProtocolConversionAction where TTargetType : class { + protected ProtocolConversionAction() + : base() { + } + + protected abstract SymbolId ToMethodName { get; } + protected abstract string/*!*/ ConversionResultValidator { get; } + protected abstract string/*!*/ TargetTypeName { get; } + + internal override void SetRule(RuleBuilder/*!*/ rule, CodeContext/*!*/ callerContext, object[]/*!*/ args) { + Assert.NotNull(rule, callerContext, args); + Debug.Assert(args.Length == 1); + Debug.Assert(rule.ParameterCount == 1); + + ActionBinder binder = callerContext.LanguageContext.Binder; + RubyExecutionContext ec = RubyUtils.GetExecutionContext(callerContext); + Expression targetParameter = rule.Parameters[0]; + object target = args[0]; + + // nil special case: + if (target == null) { + rule.AddTest(Ast.Equal(targetParameter, Ast.Null(targetParameter.Type))); + rule.Target = rule.MakeReturn(binder, Ast.Null()); + return; + } + + // check for concreate type version: + RubyBinder.AddTargetTypeTest(rule, target, targetParameter, ec); + + // conversion needed? + TTargetType convertedTarget = target as TTargetType; + if (convertedTarget != null) { + rule.Target = rule.MakeReturn(binder, Ast.Convert(targetParameter, typeof(TTargetType))); + return; + } + + SymbolId toMethodName = ToMethodName; + string targetClassName = SymbolTable.IdToString(ec.GetClassOf(target).Name); + + // Kernel#respond_to? method is not overriden => we could optimize + RubyMemberInfo respondToMethod = ec.ResolveMethod(target, Symbols.RespondTo); + if (respondToMethod == null || respondToMethod.IsUndefined || + // the method is defined in library, hasn't been replaced by user defined method (TODO: maybe we should make this check better) + (respondToMethod.DeclaringModule == ec.KernelModule && respondToMethod is RubyMethodGroupInfo)) { + + RubyMemberInfo toMethod = ec.ResolveMethod(target, toMethodName); + if (toMethod == null || toMethod.IsUndefined) { + // error: + rule.Target = rule.MakeError(AstFactory.OpCall("CreateTypeConversionError", Ast.Constant(targetClassName), Ast.Constant(TargetTypeName))); + return; + } else { + // TODO: AstFactory.OpCall(ConversionResultValidator, Ast.Constant(targetClassName), rule.Target); + + // invoke target.to_xxx() and validate it returns an instance of TTargetType: + toMethod.SetInvocationRule(SymbolTable.IdToString(toMethodName), binder, callerContext, rule, + new CallArguments( + args, + rule.Parameters, + InvokeMemberAction.Make(binder, toMethodName, new CallSignature(ArgumentKind.Instance)) + ) + ); + return; + } + } + + // slow path: invoke respond_to?, to_xxx and result validation: + + // TODO: bug in DLR AST rewriter? + // rule.Target = rule.MakeReturn(binder, If ... Then OpCall(...) Else Throw); + + rule.Target = Ast.If( + // respond_to?() + AstFactory.OpCall("IsTrue", + Ast.Action.ActionExpression(Annotations.Empty, + InvokeMemberAction.Make(binder, Symbols.RespondTo, new CallSignature(ArgumentKind.Instance, ArgumentKind.Simple)), + new Expression[] { Ast.Constant(callerContext, typeof(CodeContext)), targetParameter, Ast.Constant(toMethodName) }, + typeof(object) + ) + ), + + // Then + + // to_xxx(): + Ast.Return(AstFactory.OpCall(ConversionResultValidator, + Ast.Constant(targetClassName), + Ast.Action.ActionExpression(Annotations.Empty, + InvokeMemberAction.Make(binder, toMethodName, new CallSignature(ArgumentKind.Instance)), + new Expression[] { Ast.Constant(callerContext, typeof(CodeContext)), targetParameter }, + typeof(object) + ) + )) + ).Else( + Ast.Throw(AstFactory.OpCall("CreateTypeConversionError", Ast.Constant(targetClassName), Ast.Constant(TargetTypeName))) + ); + } + } + + public sealed class ConvertToProcAction : ProtocolConversionAction, IEquatable { + public static readonly ConvertToProcAction Instance = new ConvertToProcAction(); + + protected override SymbolId ToMethodName { get { return Symbols.ToProc; } } + protected override string/*!*/ TargetTypeName { get { return "Proc"; } } + protected override string/*!*/ ConversionResultValidator { get { return "ToProcValidator"; } } + + private ConvertToProcAction() + : base() { + } + + public static ConvertToProcAction/*!*/ Make() { + return Instance; + } + + public bool Equals(ConvertToProcAction other) { + return other != null; + } + } +} =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;C428403 File: RubyBinder.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;C428403 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyBinder.cs;Super17 @@ -30,6 +30,7 @@ namespace Ruby.Runtime.Calls { using Ast = Microsoft.Scripting.Ast.Expression; + using AstFactory = Ruby.Compiler.Ast.AstFactory; public sealed class RubyBinder : ActionBinder { private readonly RubyContext/*!*/ _rubyContext; @@ -41,6 +42,8 @@ protected override RuleBuilder MakeRule(DynamicAction/*!*/ action, object[]/*!*/ args) { object[] extracted; + + // TODO: flow codecontext expression to the sites, instead of runtime constants CodeContext callerContext = ExtractCodeContext(args, out extracted); RuleBuilder rule; @@ -56,12 +59,12 @@ } } + rule = new RuleBuilder(); + // // Try Ruby rules // - if (action.Kind == DynamicActionKind.InvokeMember) { - rule = new RuleBuilder(); - MakeRuleForInvokeMember(rule, (InvokeMemberAction)action, callerContext, extracted); + if (SetRule(rule, action, callerContext, extracted)) { return rule; } @@ -71,80 +74,73 @@ return base.MakeRule(action, args); } - protected override IList/*!*/ GetExtensionTypes(Type/*!*/ t) { - Type extentionType = _rubyContext.ExecutionContext.GetClass(t).ExtensionType; + internal static bool SetRule(RuleBuilder/*!*/ rule, DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) { + Assert.NotNull(rule, action, callerContext, args); + + SuperCallAction superCall; + InvokeMemberAction invokeMember; + ProtocolConversionAction conversion; - if (extentionType != null) { - List result = new List(); - result.Add(extentionType); - result.AddRange(base.GetExtensionTypes(t)); - return result; + if ((superCall = action as SuperCallAction) != null) { + SetSuperCallActionRule(rule, superCall, callerContext, args); + return true; + } else if ((invokeMember = action as InvokeMemberAction) != null) { + SetInvokeMemberActionRule(rule, invokeMember, callerContext, args); + return true; + } else if ((conversion = action as ProtocolConversionAction) != null) { + conversion.SetRule(rule, callerContext, args); + return true; + } else { + return false; } + } - return base.GetExtensionTypes(t); - } + internal static void SetSuperCallActionRule(RuleBuilder/*!*/ rule, SuperCallAction/*!*/ action, CodeContext/*!*/ callerContext, + object[]/*!*/ argValues) { - internal static RuleBuilder GetUserClassRule(DynamicAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ args) where T : class { - Assert.NotNull(action, callerContext, args); + RubyOps.SuperCallTargetInfo currentInfo = RubyOps.GetSuperCallTarget(callerContext); - switch (action.Kind) { - case DynamicActionKind.InvokeMember: - RuleBuilder rule = new RuleBuilder(); - MakeRuleForInvokeMember(rule, (InvokeMemberAction)action, callerContext, args); - return rule; + Type infoType = typeof(RubyOps.SuperCallTargetInfo); - default: - return null; - } + Expression targetVariable = Ast.Temporary(infoType, "#super-target"); + + rule.AddTest(Ast.Comma( + Ast.Assign(targetVariable, AstFactory.OpCall("GetSuperCallTarget", Ast.RuntimeConstant(callerContext))), + Ast.Equal(Ast.ReadField(targetVariable, infoType.GetField("DeclaringModule")), Ast.RuntimeConstant(currentInfo.DeclaringModule)), + Ast.Equal(Ast.ReadField(targetVariable, infoType.GetField("MethodName")), Ast.RuntimeConstant(currentInfo.MethodName)) + )); + + Debug.Assert(currentInfo.DeclaringModule != null); + + CallArguments args = new CallArguments(argValues, rule.Parameters, action); + SetInvocationRule(rule, currentInfo.MethodName, args, callerContext, argValues, currentInfo.DeclaringModule); } - internal static void MakeRuleForInvokeMember(RuleBuilder/*!*/ rule, InvokeMemberAction/*!*/ action, CodeContext/*!*/ callerContext, + internal static void SetInvokeMemberActionRule(RuleBuilder/*!*/ rule, InvokeMemberAction/*!*/ action, CodeContext/*!*/ callerContext, object[]/*!*/ argValues) { - Assert.NotNull(rule, callerContext, argValues, action); - Debug.Assert(argValues.Length >= 1); - Debug.Assert(action.Signature.IndexOf(ArgumentKind.Instance) == 0, "InvokeMemberAction must have an instance argument"); CallArguments args = new CallArguments(argValues, rule.Parameters, action); - SymbolId methodName = action.Name; + SetInvocationRule(rule, action.Name, args, callerContext, argValues, null); + } + + internal static void SetInvocationRule(RuleBuilder/*!*/ rule, SymbolId methodName, CallArguments/*!*/ args, CodeContext/*!*/ callerContext, + object[]/*!*/ argValues, RubyModule declaringModule) { - // handle super calls - // (which are indicated by a special last argument) - bool superCall = (args.Values[args.Length - 1] == RubyOps.GetSuperCallToken()); - RubyModule enclosingModule = null; - if (superCall) { - args = args.RemoveAt(args.Length - 1); + Debug.Assert(argValues.Length >= 1); + Debug.Assert(!methodName.IsEmpty); + Debug.Assert(args.Signature.IndexOf(ArgumentKind.Instance) == 0, "Invocation actions must have an instance argument"); - // Pull out the enclosing module & add a test - enclosingModule = (RubyModule)args.Values[args.Length - 1]; - rule.AddTest(Ast.Equal(args.Expressions[args.Length - 1], Ast.RuntimeConstant(enclosingModule))); - args = args.RemoveAt(args.Length - 1); - } - ActionBinder binder = callerContext.LanguageContext.Binder; RubyExecutionContext ec = RubyUtils.GetExecutionContext(callerContext); object target = args.Values[0]; Expression targetParameter = args.Expressions[0]; + bool isSuperCall = declaringModule != null; - // tests type of the target: - RubyModule module = AddTargetTypeTest(rule, ec, target, targetParameter); + AddTargetTypeTest(rule, target, targetParameter, ec); - // tests version of the target: - module.AddVersionTest(rule); - - // TODO: (singletons - ResolveMethod should compose the test) - RubyInstanceData id; - if (!(target is RubyModule) && ec.TryGetInstanceSingletonOf(target, out id) != null) { - rule.AddTest( - Ast.Equal( - Ast.Convert(targetParameter, typeof(object)), - Ast.Convert(Ast.RuntimeConstant(target), typeof(object)) - ) - ); - } - RubyMemberInfo method; - if (superCall) { - method = ec.ResolveSuperMethod(target, methodName, enclosingModule); + if (isSuperCall) { + method = ec.ResolveSuperMethod(target, methodName, declaringModule); } else { method = ec.ResolveMethod(target, methodName); } @@ -153,8 +149,8 @@ method = ec.ResolveMethod(target, Symbols.MethodMissing); // super calls don't go to method_missing - if (method == null || superCall) { - SetMissingMethodError(rule, targetParameter, methodName, superCall); + if (method == null || isSuperCall) { + SetMissingMethodError(rule, targetParameter, methodName, isSuperCall); Debug.Assert(rule.Target != null && rule.Test != null); return; } @@ -176,10 +172,11 @@ Debug.Assert(rule.Target != null && rule.Test != null); } - private static RubyModule AddTargetTypeTest(RuleBuilder rule, RubyExecutionContext ec, object target, Expression targetParameter) { + internal static void AddTargetTypeTest(RuleBuilder/*!*/ rule, object target, Expression/*!*/ targetParameter, RubyExecutionContext/*!*/ ec) { + // tests type of the target: RubyModule module; if (target == null) { - rule.AddTest(Ast.Equal(targetParameter, Ast.Constant(target))); + rule.AddTest(Ast.Equal(targetParameter, Ast.Null())); module = ec.NilClass; } else if (target is bool) { rule.AddTest(Ast.AndAlso( @@ -195,7 +192,20 @@ AddNonNullTypeTest(rule, target, targetParameter); module = ec.GetClassOf(target); } - return module; + + // tests version of the target: + module.AddVersionTest(rule); + + // TODO: (singletons - ResolveMethod should compose the test) + RubyInstanceData id; + if (!(target is RubyModule) && ec.TryGetInstanceSingletonOf(target, out id) != null) { + rule.AddTest( + Ast.Equal( + Ast.Convert(targetParameter, typeof(object)), + Ast.Convert(Ast.RuntimeConstant(target), typeof(object)) + ) + ); + } } internal static void AddNonNullTypeTest(RuleBuilder/*!*/ result, object/*!*/ obj, Expression/*!*/ parameter) { @@ -214,6 +224,13 @@ ); } + private static void SetInvalidSuperCallError(RuleBuilder/*!*/ rule) { + rule.Target = + rule.MakeError( + Ast.Call(RubyOps.GetMethod("MakeTopLevelSuperException")) + ); + } + internal static void AddTypeTest(RuleBuilder/*!*/ rule, Type/*!*/ type, Expression/*!*/ expr) { rule.AddTest(RuleBuilder.MakeTypeTestExpression(type, expr)); } @@ -226,6 +243,19 @@ #endregion + protected override IList/*!*/ GetExtensionTypes(Type/*!*/ t) { + Type extentionType = _rubyContext.ExecutionContext.GetClass(t).ExtensionType; + + if (extentionType != null) { + List result = new List(); + result.Add(extentionType); + result.AddRange(base.GetExtensionTypes(t)); + return result; + } + + return base.GetExtensionTypes(t); + } + #region Conversions public override object Convert(object obj, Type/*!*/ toType) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLambdaMethodInfo.cs;C427406 File: RubyLambdaMethodInfo.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLambdaMethodInfo.cs;C427406 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLambdaMethodInfo.cs;Super17 @@ -24,19 +24,23 @@ namespace Ruby.Runtime.Calls { using Ast = Microsoft.Scripting.Ast.Expression; - internal class RubyLambdaMethodInfo : RubyMemberInfo { + public class RubyLambdaMethodInfo : RubyMemberInfo { private readonly Proc/*!*/ _lambda; + private readonly SymbolId _definitionName; public Proc/*!*/ Lambda { - get { - return _lambda; - } + get { return _lambda; } } - internal RubyLambdaMethodInfo(Proc/*!*/ lambda, RubyMethodVisibility visibility, RubyModule/*!*/ declaringModule) + public SymbolId DefinitionName { + get { return _definitionName; } + } + + internal RubyLambdaMethodInfo(Proc/*!*/ lambda, SymbolId definitionName, RubyMethodVisibility visibility, RubyModule/*!*/ declaringModule) : base(visibility, declaringModule) { Assert.NotNull(lambda, declaringModule); _lambda = lambda; + _definitionName = definitionName; } internal override void SetInvocationRule(string name, ActionBinder/*!*/ binder, CodeContext/*!*/ callerContext, @@ -48,6 +52,7 @@ _lambda.SetProcCallRule(rule, binder, callerContext, Ast.RuntimeConstant(_lambda), // proc object args.Expressions[0], // self + Ast.RuntimeConstant(this), // calling method yieldArgs // user args ); } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMemberInfo.cs;C400020 File: RubyMemberInfo.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMemberInfo.cs;C400020 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMemberInfo.cs;Super17 @@ -21,10 +21,16 @@ using Microsoft.Scripting.Runtime; using System.Diagnostics; using Ruby.Builtins; +using Microsoft.Scripting.Utils; namespace Ruby.Runtime.Calls { - public abstract class RubyMemberInfo { + public class RubyMemberInfo { + // Singleton used to undefine methods: stops method resolution + internal static readonly RubyMemberInfo/*!*/ UndefinedMethod = new RubyMemberInfo(RubyMethodVisibility.None, null); + // Singleton used to hide CLR methods: doesn't stop method resolution, skips CLR method lookup + internal static readonly RubyMemberInfo/*!*/ HiddenMethod = new RubyMemberInfo(RubyMethodVisibility.None, null); + private RubyMethodVisibility _visibility; // null for procs, blocks and dummy methods @@ -44,12 +50,22 @@ get { return 0; } } + public bool IsUndefined { + get { return ReferenceEquals(this, UndefinedMethod); } + } + + public bool IsHidden { + get { return ReferenceEquals(this, HiddenMethod); } + } + protected RubyMemberInfo(RubyMethodVisibility visibility, RubyModule declaringModule) { _visibility = visibility; _declaringModule = declaringModule; } - internal abstract void SetInvocationRule(string name, ActionBinder/*!*/ binder, CodeContext/*!*/ callerContext, - RuleBuilder/*!*/ result, CallArguments/*!*/ args); + internal virtual void SetInvocationRule(string name, ActionBinder/*!*/ binder, CodeContext/*!*/ callerContext, + RuleBuilder/*!*/ result, CallArguments/*!*/ args) { + throw Assert.Unreachable; + } } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C428685 File: RubyMethodGroupInfo.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C428685 (server) 5/3/2008 2:18 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;Super17 @@ -109,7 +109,7 @@ VariableExpression bfcVariable; Expression[] actualArgs = MakeActualArgs(rule, args, blockAdjust, out bfcVariable); Expression target = bindingTarget.MakeExpression(rule, actualArgs); - VariableExpression resultVariable = rule.GetTemporary(target.Type, "#result"); + VariableExpression resultVariable = Ast.Temporary(target.Type, "#result"); if (targetTransformation != null) { target = targetTransformation(target); @@ -117,7 +117,7 @@ // a non-null proc is being passed to the callee: if (bfcVariable != null) { - VariableExpression methodUnwinder = rule.GetTemporary(typeof(MethodUnwinder), "#unwinder"); + VariableExpression methodUnwinder = Ast.Temporary(typeof(MethodUnwinder), "#unwinder"); target = Ast.Comma( Ast.Try( =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodInfo.cs;C402444 File: RubyMethodInfo.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodInfo.cs;C402444 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodInfo.cs;Super17 @@ -17,50 +17,48 @@ using System.Collections.Generic; using System.Diagnostics; +using Microsoft.Scripting; using Microsoft.Scripting.Actions; using Microsoft.Scripting.Ast; using Microsoft.Scripting.Utils; using Microsoft.Scripting.Runtime; -using AstFactory = Ruby.Compiler.Ast.AstFactory; using Ruby.Builtins; namespace Ruby.Runtime.Calls { using Ast = Microsoft.Scripting.Ast.Expression; + using AstFactory = Ruby.Compiler.Ast.AstFactory; public sealed class RubyMethodInfo : RubyMemberInfo { - // Singleton used to undefine methods: stops method resolution - internal static readonly RubyMethodInfo/*!*/ UndefinedMethod = new RubyMethodInfo(); - // Singleton used to hide CLR methods: doesn't stop method resolution, skips CLR method lookup - internal static readonly RubyMethodInfo/*!*/ HiddenMethod = new RubyMethodInfo(); + private readonly Delegate/*!*/ _method; + private readonly RubyScope/*!*/ _declaringScope; + private readonly SymbolId _definitionName; - private readonly Delegate/*!*/ _method; private readonly int _mandatoryParamCount; // always constant for a block (# special args) private readonly int _optionalParamCount; private readonly bool _hasParamsArray; public Delegate/*!*/ Method { get { return _method; } } + public RubyScope/*!*/ DeclaringScope { get { return _declaringScope; } } + public SymbolId DefinitionName { get { return _definitionName; } } public int MandatoryParamCount { get { return _mandatoryParamCount; } } public int OptionalParamCount { get { return _optionalParamCount; } } public bool HasParamsArray { get { return _hasParamsArray; } } // method: - internal RubyMethodInfo(Delegate/*!*/ method, RubyModule/*!*/ declaringModule, int mandatory, int optional, - bool hasParamsArray, RubyMethodVisibility visibility) + internal RubyMethodInfo(Delegate/*!*/ method, RubyScope/*!*/ declaringScope, RubyModule/*!*/ declaringModule, + SymbolId definitionName, int mandatory, int optional, bool hasParamsArray, RubyMethodVisibility visibility) : base(visibility, declaringModule) { - Assert.NotNull(method, declaringModule); + Assert.NotNull(method, declaringScope, declaringModule); _method = method; + _declaringScope = declaringScope; _mandatoryParamCount = mandatory; _optionalParamCount = optional; _hasParamsArray = hasParamsArray; + _definitionName = definitionName; } - // dummy: - private RubyMethodInfo() - : base(RubyMethodVisibility.Public, null) { - } - #region Dynamic Sites internal override void SetInvocationRule(string name, ActionBinder/*!*/ binder, CodeContext/*!*/ callerContext, =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Actions/InvokeMemberAction.cs;C415805 File: InvokeMemberAction.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Actions/InvokeMemberAction.cs;C415805 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Actions/InvokeMemberAction.cs;Super17 @@ -18,33 +18,20 @@ using Microsoft.Scripting.Utils; namespace Microsoft.Scripting.Actions { - - // TODO: Ruby specific flags? - [Flags] - public enum InvokeMemberActionFlags { - None = 0, - ReturnNonCallable = 1, // ?? - IsCallWithThis = 2 // HasExplicitTarget - } - // TODO: rename to match MethodCallExpression public class InvokeMemberAction : MemberAction, IEquatable { - private readonly InvokeMemberActionFlags _flags; private readonly CallSignature _signature; - public bool ReturnNonCallable { get { return (_flags & InvokeMemberActionFlags.ReturnNonCallable) != 0; } } - public bool HasExplicitTarget { get { return (_flags & InvokeMemberActionFlags.IsCallWithThis) != 0; } } public CallSignature Signature { get { return _signature; } } - protected InvokeMemberAction(ActionBinder binder, SymbolId memberName, InvokeMemberActionFlags flags, CallSignature signature) + protected InvokeMemberAction(ActionBinder binder, SymbolId memberName, CallSignature signature) : base(binder, memberName) { - _flags = flags; _signature = signature; } - public static InvokeMemberAction Make(ActionBinder binder, SymbolId memberName, InvokeMemberActionFlags flags, CallSignature signature) { + public static InvokeMemberAction Make(ActionBinder binder, SymbolId memberName, CallSignature signature) { ContractUtils.RequiresNotNull(binder, "binder"); - return new InvokeMemberAction(binder, memberName, flags, signature); + return new InvokeMemberAction(binder, memberName, signature); } public override DynamicActionKind Kind { @@ -58,21 +45,20 @@ [Confined] public override int GetHashCode() { - return _signature.GetHashCode() ^ (int)_flags; + return _signature.GetHashCode(); } [Confined] public override string/*!*/ ToString() { - return String.Format("{0}{1} {2}", base.ToString(), _signature, _flags); + return base.ToString() + _signature.ToString(); } - #region IEquatable Members [StateIndependent] public bool Equals(InvokeMemberAction other) { if (other == null) return false; - return Name == other.Name && _flags == other._flags && _signature.Equals(other._signature); + return Name == other.Name && _signature.Equals(other._signature); } #endregion =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Ast/ActionExpression.cs;C428871 File: ActionExpression.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Ast/ActionExpression.cs;C428871 (server) 5/3/2008 11:37 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Ast/ActionExpression.cs;Super17 @@ -267,17 +267,17 @@ } } - public static Expression InvokeMember(ActionBinder binder, SymbolId name, Type result, InvokeMemberActionFlags flags, CallSignature signature, + public static Expression InvokeMember(ActionBinder binder, SymbolId name, Type result, CallSignature signature, params Expression[] arguments) { ContractUtils.RequiresNotNull(arguments, "arguments"); if (arguments.Length > 0 && arguments[0] != null && arguments[0].NodeType == AstNodeType.CodeContextExpression) { - return new ActionExpression(Annotations.Empty, InvokeMemberAction.Make(binder, name, flags, signature), CollectionUtils.ToReadOnlyCollection(arguments), result); + return new ActionExpression(Annotations.Empty, InvokeMemberAction.Make(binder, name, signature), CollectionUtils.ToReadOnlyCollection(arguments), result); } else { return Expression.Call( result, arguments[0], - InvokeMemberAction.Make(binder, name, flags, signature), + InvokeMemberAction.Make(binder, name, signature), ArrayUtils.RemoveFirst(arguments) ); } @@ -433,7 +433,7 @@ return new ActionExpression(Annotations.Empty, ConvertToAction.Make(binder, toType, kind), CollectionUtils.ToReadOnlyCollection(arguments), actionExpressionType); } - internal static ActionExpression ActionExpression(Annotations annotations, CallSiteBinder action, IList arguments, Type result) { + public static ActionExpression ActionExpression(Annotations annotations, CallSiteBinder action, IList arguments, Type result) { ContractUtils.RequiresNotNull(action, "action"); ContractUtils.RequiresNotNullItems(arguments, "arguments"); ContractUtils.RequiresNotNull(result, "result"); ===================================================================