|
From: <mir...@us...> - 2007-01-16 15:10:56
|
Revision: 1777
http://svn.sourceforge.net/rubyeclipse/?rev=1777&view=rev
Author: mirkostocker
Date: 2007-01-16 07:10:48 -0800 (Tue, 16 Jan 2007)
Log Message:
-----------
lots of changes:
- updated to jruby from svn and added some of our patches. They'll be removed and replaced by a new JRuby from head as soon as they are accepted by JRuby.
- modified the code to use the new AST features
- added the TI tests to the suite, since they are all green now
Modified Paths:
--------------
trunk/org.jruby/.classpath
trunk/org.jruby/META-INF/MANIFEST.MF
trunk/org.jruby/lib/jruby.jar
trunk/org.rubypeople.eclipse.shams/src/org/rubypeople/eclipse/shams/resources/ShamFile.java
trunk/org.rubypeople.eclipse.shams/src/org/rubypeople/eclipse/shams/resources/ShamProject.java
trunk/org.rubypeople.eclipse.shams/src/org/rubypeople/eclipse/shams/resources/ShamResource.java
trunk/org.rubypeople.rdt.astviewer/META-INF/MANIFEST.MF
trunk/org.rubypeople.rdt.astviewer/plugin.xml
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/preferences/AstViewerPreferencePage.java
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/preferences/PreferenceConstants.java
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/preferences/PreferenceInitializer.java
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/views/AstUtility.java
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/views/AstView.java
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/views/TreeObject.java
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/views/TreeParent.java
trunk/org.rubypeople.rdt.astviewer/src/org/rubypeople/rdt/astviewer/views/ViewContentProvider.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/core/RubyConventions.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/codeassist/CompletionEngine.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/CreateMethodOperation.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyModelManager.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/RubyScriptStructureBuilder.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/builder/RubyBuilder.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/parser/InOrderVisitor.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/parser/MarkerUtility.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/parser/RubyLintVisitor.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/parser/RubyParser.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/util/ASTUtil.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/util/DOMFinder.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DataFlowTypeInferrer.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultOccurrencesFinder.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultReferenceFinder.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/DefaultTypeInferrer.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/ScopingVisitor.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/TypeInferenceHelper.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/TypeInferenceVisitor.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/Variable.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/MethodDefinitionLocator.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/MethodInvocationLocator.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/NodeLocator.java
trunk/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/ti/util/OffsetNodeLocator.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/core/TS_Core.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/core/TS_InternalCore.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/core/builder/TC_IndexUpdater.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/core/builder/TS_InternalCoreBuilder.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/core/parser/TC_RubyParser.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/core/parser/TS_InternalCoreParser.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/core/symbols/TS_CoreSymbols.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/core/util/TS_Util.java
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/formatter/TS_InternalFormatter.java
trunk/org.rubypeople.rdt.debug.core/src/org/rubypeople/rdt/internal/debug/core/RubyDebuggerProxy.java
trunk/org.rubypeople.rdt.debug.core/src/org/rubypeople/rdt/internal/debug/core/parsing/BreakpointAddedReader.java
trunk/org.rubypeople.rdt.debug.core.tests/src/org/rubypeople/rdt/debug/core/tests/TestXmlStreamReader.java
trunk/org.rubypeople.rdt.debug.core.tests/src/org/rubypeople/rdt/debug/core/tests/WasteReader.java
trunk/org.rubypeople.rdt.debug.ui.tests/src/org/rubypeople/rdt/internal/debug/ui/launcher/TC_RubyApplicationShortcut.java
trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/InterpreterRunnerConfiguration.java
trunk/org.rubypeople.rdt.launching/src/org/rubypeople/rdt/internal/launching/RubyRuntime.java
trunk/org.rubypeople.rdt.launching.tests/src/org/rubypeople/rdt/internal/launching/EvaluateRubyProcessOutput.java
trunk/org.rubypeople.rdt.launching.tests/src/org/rubypeople/rdt/internal/launching/TC_RubyInterpreter.java
trunk/org.rubypeople.rdt.launching.tests/src/org/rubypeople/rdt/internal/launching/TC_RubyRuntime.java
trunk/org.rubypeople.rdt.launching.tests/src/org/rubypeople/rdt/internal/launching/TC_RunnerLaunching.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/RubyCompletionProcessor.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/hover/RubyCodeTextHover.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/wizards/NewElementWizard.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/ui/extensions/ITextHoverProvider.java
trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/symbols/TC_BlockingSymbolFinder.java
trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyWordFinder.java
Added Paths:
-----------
trunk/org.jruby/patches/
trunk/org.jruby/patches/README
trunk/org.jruby/patches/globalvarnode_name.patch
trunk/org.jruby/patches/position_and_ast.patch
trunk/org.jruby/patches/rewriter.patch
trunk/org.jruby/patches/rootnode_position.patch
trunk/org.jruby/src.zip
trunk/org.rubypeople.rdt.core.tests/src/org/rubypeople/rdt/internal/ti/TS_TypeInference.java
Removed Paths:
-------------
trunk/org.rubypeople.rdt.astviewer/bin/
Modified: trunk/org.jruby/.classpath
===================================================================
--- trunk/org.jruby/.classpath 2007-01-16 14:59:14 UTC (rev 1776)
+++ trunk/org.jruby/.classpath 2007-01-16 15:10:48 UTC (rev 1777)
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry exported="true" kind="lib" path="lib/jruby.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry exported="true" kind="lib" path="lib/jruby.jar" sourcepath="src.zip"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Modified: trunk/org.jruby/META-INF/MANIFEST.MF
===================================================================
--- trunk/org.jruby/META-INF/MANIFEST.MF 2007-01-16 14:59:14 UTC (rev 1776)
+++ trunk/org.jruby/META-INF/MANIFEST.MF 2007-01-16 15:10:48 UTC (rev 1777)
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: Jruby Plug-in
Bundle-SymbolicName: org.jruby
-Bundle-Version: 1.0.0
+Bundle-Version: 0.9.2.2742
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime
Eclipse-LazyStart: false
Modified: trunk/org.jruby/lib/jruby.jar
===================================================================
(Binary files differ)
Added: trunk/org.jruby/patches/README
===================================================================
--- trunk/org.jruby/patches/README (rev 0)
+++ trunk/org.jruby/patches/README 2007-01-16 15:10:48 UTC (rev 1777)
@@ -0,0 +1 @@
+Patches applied to JRuby (revision 2742), can be removed as soon as they are accepted and included into official JRuby -- Mirko Stocker
Added: trunk/org.jruby/patches/globalvarnode_name.patch
===================================================================
--- trunk/org.jruby/patches/globalvarnode_name.patch (rev 0)
+++ trunk/org.jruby/patches/globalvarnode_name.patch 2007-01-16 15:10:48 UTC (rev 1777)
@@ -0,0 +1,21 @@
+Index: src/org/jruby/ast/GlobalVarNode.java
+===================================================================
+--- src/org/jruby/ast/GlobalVarNode.java (revision 1122)
++++ src/org/jruby/ast/GlobalVarNode.java (working copy)
+@@ -33,6 +33,7 @@
+ import java.io.IOException;
+ import java.util.List;
+
++import org.jruby.ast.types.INameNode;
+ import org.jruby.ast.visitor.NodeVisitor;
+ import org.jruby.evaluator.Instruction;
+ import org.jruby.lexer.yacc.ISourcePosition;
+@@ -41,7 +42,7 @@
+ * access to a global variable.
+ * @author jpetersen
+ */
+-public class GlobalVarNode extends Node {
++public class GlobalVarNode extends Node implements INameNode {
+ static final long serialVersionUID = -8913633094119740033L;
+
+ private String name;
Added: trunk/org.jruby/patches/position_and_ast.patch
===================================================================
--- trunk/org.jruby/patches/position_and_ast.patch (rev 0)
+++ trunk/org.jruby/patches/position_and_ast.patch 2007-01-16 15:10:48 UTC (rev 1777)
@@ -0,0 +1,3783 @@
+Index: test/testPositions.rb
+===================================================================
+--- test/testPositions.rb (revision 2701)
++++ test/testPositions.rb (working copy)
+@@ -778,7 +778,7 @@
+ nil,
+ nil, #['NewlineNode',0,3,0,22],
+ ['DStrNode',0,2,0,21],
+- ['StrNode',1,1,5,10], # ENEBO: What should this really be?
++ ['StrNode',0,1,0,10], # ENEBO: What should this really be? # MIRKO: This would be much easier for the rewriter
+ ['EvStrNode',1,1,10,17],
+ nil, #['NewlineNode',1,1,12,18],
+ ['VCallNode',1,1,12,16],
+@@ -1037,7 +1037,7 @@
+ list = [
+ nil,
+ nil, #['NewlineNode',0,1,0,9]
+- ['LocalAsgnNode',0,0,0,1],
++ ['LocalAsgnNode',0,0,0,22],
+ ['RescueNode',0,0,10,22],
+ ['RescueBodyNode',0,0,10,22],
+ ['FCallNode',0,0,17,22],
+@@ -1142,3 +1142,372 @@
+ end
+ EOF
+
++#test calls:
++list = [
++nil,
++nil,
++['CallNode', 0, 0, 0, 10],
++nil
++]
++test_tree(list, <<END)
++String.new
++END
++
++list = [
++nil,
++nil,
++['CallNode', 0, 0, 0, 12],
++nil
++]
++test_tree(list, <<END)
++String.new()
++END
++
++list = [
++nil,
++nil,
++['CallNode', 0, 0, 0, 17],
++nil
++]
++test_tree(list, <<END)
++String.new("aaa")
++END
++
++list = [
++nil,
++nil,
++['CallNode', 0, 0, 0, 24],
++nil
++]
++test_tree(list, <<END)
++String.new "aaa" + "bbb"
++END
++
++list = [
++nil,
++nil,
++['CallNode', 0, 0, 0, 17],
++nil
++]
++test_tree(list, <<END)
++String.new 5.to_s
++END
++
++#test arrays
++
++list = [
++nil,
++nil,
++['CallNode', 0, 0, 0, 30],
++['ConstNode', 0, 0, 0, 5],
++['ArrayNode', 0, 0, 10, 30]
++]
++test_tree(list, <<END)
++Array.new "aa", 11000, 20, 340
++END
++
++list = [
++nil,
++nil,
++['CallNode', 0, 0, 0, 26],
++]
++test_tree(list, <<END)
++Array.new String.new(1234)
++END
++
++list = [
++nil,
++nil,
++['ArrayNode', 0, 0, 0, 12],
++]
++test_tree(list, <<END)
++[55, "test"]
++END
++
++list = [
++nil,
++nil,
++nil,
++['ConstNode', 0, 0, 0, 5],
++['ArrayNode', 0, 0, 9, 14],
++]
++test_tree(list, <<END)
++Array.new("a")
++END
++
++list = [
++nil,
++nil,
++nil,
++['DAsgnNode', 0, 0, 12, 19],
++nil,
++nil,
++]
++test_tree(list, <<END, "dasgn node")
++[].each do |element|
++end
++END
++
++list = [
++nil,
++nil,
++nil,
++nil,
++nil,
++['DAsgnNode', 0, 0, 12, 20],
++['DAsgnNode', 0, 0, 22, 30],
++nil,
++nil,
++]
++test_tree(list, <<END, "multiple dasgn nodes")
++[].each do |element1, element2|
++end
++END
++
++list = [
++nil,
++nil,
++['MultipleAsgnNode', 0, 0, 0, 13],
++['ArrayNode', 0, 0, 0, 4],
++['LocalAsgnNode', 0, 0, 0, 1],
++['LocalAsgnNode', 0, 0, 3, 4],
++['ArrayNode', 0, 0, 7, 13],
++['ZArrayNode', 0, 0, 7, 9],
++['HashNode', 0, 0, 11, 13],
++]
++test_tree(list, <<END, "multipleasgn node")
++a, b = [], {}
++END
++
++list = [
++nil,
++nil,
++['IterNode', 0, 2, 15, 34],
++['DAsgnNode', 0, 0, 19, 20],
++nil,
++['FCallNode', 1, 1, 24, 30],
++['ArrayNode', 1, 1, 29, 30],
++['DVarNode', 1, 1, 29, 30],
++['CallNode', 0, 2, 0, 34],
++['ArrayNode', 0, 0, 0, 9],
++['FixnumNode', 0, 0, 1, 2],
++['FixnumNode', 0, 0, 4, 5],
++['FixnumNode', 0, 0, 7, 8]
++]
++test_tree(list, <<END, "iter node")
++[1, 2, 3].each do |i|
++ puts i
++end
++END
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 1, 0, 7],
++['LocalAsgnNode', 0, 0, 0, 6],
++['CallNode', 0, 0, 0, 6],
++['LocalVarNode', 0, 0, 0, 1],
++['ArrayNode', 0, 0, 5, 6],
++['FixnumNode', 0, 0, 5, 6]
++]
++test_tree(list, <<END, "+= assignment")
++a += 5
++END
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 6, 0, 70],
++['ClassNode', 0, 6, 0, 70],
++['Colon2Node', 0, 0, 6, 10],
++nil, #['NewlineNode', 1, 6, 13, 67],
++['DefnNode', 1, 5, 13, 66],
++['ArgumentNode', 1, 1, 17, 21],
++['ArgsNode', 2, 2, 22, 22],
++nil, #['NewlineNode', 2, 5, 26, 61],
++['WhileNode', 2, 4, 26, 60],
++['TrueNode', 2, 2, 32, 36],
++nil, #['NewlineNode', 3, 4, 43, 53],
++['FCallNode', 3, 3, 43, 52],
++['ArrayNode', 3, 3, 48, 52],
++['TrueNode', 3, 3, 48, 52]
++]
++test_tree(list, <<END)
++class Test
++ def test
++ while true
++ puts true
++ end
++ end
++end
++END
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 4, 0, 78],
++['ClassNode', 0, 4, 0, 78],
++['Colon2Node', 0, 0, 6, 14],
++nil, #['NewlineNode', 1, 4, 17, 75],
++['DefnNode', 1, 3, 17, 73],
++['ArgumentNode', 1, 1, 21, 27],
++['ArgsNode', 1, 1, 28, 32],
++['ListNode', 1, 1, 28, 32],
++['ArgumentNode', 1, 1, 28, 29],
++['ArgumentNode', 1, 1, 31, 32],
++nil, #['NewlineNode', 2, 3, 38, 68],
++['LocalAsgnNode', 2, 2, 38, 66],
++['CallNode', 2, 2, 42, 66],
++['ConstNode', 2, 2, 42, 50],
++['ArrayNode', 2, 2, 62, 66],
++['LocalVarNode', 2, 2, 62, 63],
++['LocalVarNode', 2, 2, 65, 66]
++]
++test_tree(list, <<END)
++class Triangle
++ def printC a, b
++ c = Triangle.hypotenuse a, b
++ end
++end
++END
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 7, 0, 91],
++['ClassNode', 0, 7, 0, 90],
++['Colon2Node', 0, 0, 6, 10],
++['BlockNode', 1, 7, 13, 87],
++nil, #['NewlineNode', 1, 4, 13, 49],
++['DefsNode', 1, 3, 13, 48],
++['ConstNode', 1, 1, 17, 21],
++['ArgumentNode', 1, 1, 22, 26],
++['ArgsNode', 1, 1, 27, 31],
++['ListNode', 1, 1, 27, 31],
++['ArgumentNode', 1, 1, 27, 31],
++nil, #['NewlineNode', 2, 3, 36, 43],
++['ReturnNode', 2, 2, 36, 42],
++nil, #['NewlineNode', 1, 7, 13, 87],
++['DefsNode', 4, 6, 51, 86],
++['SelfNode', 4, 4, 55, 59],
++['ArgumentNode', 4, 4, 60, 64],
++['ArgsNode', 4, 4, 65, 69],
++['ListNode', 4, 4, 65, 69],
++['ArgumentNode', 4, 4, 65, 69],
++nil, #['NewlineNode', 5, 6, 74, 81],
++['ReturnNode', 5, 5, 74, 80]
++]
++test_tree(list, <<END, "class methods")
++class Test
++ def Test.test huhu
++ return
++ end
++ def self.test huhu
++ return
++ end
++end
++END
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 4, 0, 67],
++['DefnNode', 0, 4, 0, 67],
++['ArgumentNode', 0, 0, 4, 20],
++['ArgsNode', 1, 1, 21, 21],
++['RescueNode', 1, 4, 23, 67],
++['RescueBodyNode', 2, 4, 33, 67],
++nil, #['NewlineNode', 3, 4, 42, 64],
++['FCallNode', 3, 3, 42, 63],
++['ArrayNode', 3, 3, 47, 63],
++['StrNode', 3, 3, 47, 63],
++nil, #['NewlineNode', 1, 2, 23, 33],
++['LocalAsgnNode', 1, 1, 23, 32],
++['FixnumNode', 1, 1, 31, 32]
++]
++test_tree(list, <<END)
++def value_assertions
++ value = 5
++rescue
++ puts "to the rescue!"
++end
++END
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 6, 0, 63],
++['ClassNode', 0, 6, 0, 63],
++['Colon2Node', 0, 0, 6, 7],
++nil, #['NewlineNode', 1, 6, 11, 60],
++['DefnNode', 1, 5, 11, 58],
++['ArgumentNode', 1, 1, 15, 16],
++['ArgsNode', 2, 2, 18, 18],
++['BlockNode', 2, 5, 22, 53],
++nil, #['NewlineNode', 2, 3, 22, 31],
++['YieldNode', 2, 2, 22, 30],
++['FixnumNode', 2, 2, 28, 29],
++nil, #['NewlineNode', 2, 4, 22, 43],
++['YieldNode', 3, 3, 35, 42],
++nil, #['NewlineNode', 2, 5, 22, 53],
++['YieldNode', 4, 4, 47, 52]
++]
++test_tree(list, <<END, "yield")
++class X
++ def x
++ yield(5)
++ yield()
++ yield
++ end
++end
++END
++
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 1, 0, 25],
++['IterNode', 0, 0, 8, 24],
++nil, #['NewlineNode', 0, 0, 10, 24],
++['FCallNode', 0, 0, 10, 22],
++['ArrayNode', 0, 0, 15, 22],
++['StrNode', 0, 0, 15, 22],
++['CallNode', 0, 0, 0, 24],
++['FixnumNode', 0, 0, 0, 1]
++]
++test_tree(list, <<END)
++5.times { puts "hello" }
++END
++
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 4, 0, 44],
++['ClassNode', 0, 4, 0, 44],
++['Colon2Node', 0, 0, 6, 7],
++nil, #['NewlineNode', 1, 4, 10, 41],
++['DefnNode', 1, 3, 10, 40],
++['ArgumentNode', 1, 1, 14, 24],
++['ArgsNode', 2, 2, 25, 25],
++nil, #['NewlineNode', 2, 3, 29, 35],
++['ZSuperNode', 2, 2, 29, 34]
++]
++test_tree(list, <<END, "zsuper")
++class X
++ def initialize
++ super
++ end
++end
++END
++
++
++list = [
++nil,
++nil, #['NewlineNode', 0, 2, 0, 35],
++['DefnNode', 0, 1, 0, 34],
++['ArgumentNode', 0, 0, 4, 8],
++['ArgsNode', 0, 0, 9, 30],
++['ListNode', 0, 0, 9, 16],
++['ArgumentNode', 0, 0, 9, 10],
++['ArgumentNode', 0, 0, 12, 13],
++['ArgumentNode', 0, 0, 15, 16],
++['BlockArgNode', 0, 0, 24, 30],
++nil, #['ScopeNode', 1, 1, 33, 34]
++]
++test_tree(list, <<END, "method with opt and block arg")
++def test a, b, c, *opt, &block
++end
++END
+Index: src/org/jruby/lexer/yacc/RubyYaccLexer.java
+===================================================================
+--- src/org/jruby/lexer/yacc/RubyYaccLexer.java (revision 2701)
++++ src/org/jruby/lexer/yacc/RubyYaccLexer.java (working copy)
+@@ -160,7 +160,7 @@
+ return src.getPosition(startPosition, inclusive);
+ }
+
+- protected ISourcePosition getPosition() {
++ public ISourcePosition getPosition() {
+ return src.getPosition(null, false);
+ }
+
+Index: src/org/jruby/lexer/yacc/SourcePosition.java
+===================================================================
+--- src/org/jruby/lexer/yacc/SourcePosition.java (revision 2701)
++++ src/org/jruby/lexer/yacc/SourcePosition.java (working copy)
+@@ -157,6 +157,7 @@
+ */
+ public void adjustStartOffset(int relativeValue) {
+ startOffset += relativeValue;
++ if(startOffset < 0) startOffset = 0;
+ }
+
+ /**
+Index: src/org/jruby/parser/DefaultRubyParser.java
+===================================================================
+--- src/org/jruby/parser/DefaultRubyParser.java (revision 2701)
++++ src/org/jruby/parser/DefaultRubyParser.java (working copy)
+@@ -1,4 +1,4 @@
+-// created by jay 1.0.2 (c) 2002-2004 at...@cs...
++// created by jay 1.0 (c) 2002 at...@cs...
+ // skeleton Java 1.0 (c) 2002 at...@cs...
+
+ // line 2 "DefaultRubyParser.y"
+@@ -270,7 +270,7 @@
+
+ /** number of final state.
+ */
+- protected static final int yyFinal = 1;
++ protected static final int yyFinal = 1;
+
+ /** parser tables.
+ Order is mandated by <i>jay</i>.
+@@ -995,7 +995,7 @@
+ case 10:
+ // line 307 "DefaultRubyParser.y"
+ {
+- yyVal = new AliasNode(getPosition(((Token)yyVals[-3+yyTop])), (String) ((Token)yyVals[-2+yyTop]).getValue(), (String) ((Token)yyVals[0+yyTop]).getValue());
++ yyVal = new AliasNode(support.union(((Token)yyVals[-3+yyTop]), ((Token)yyVals[0+yyTop])), (String) ((Token)yyVals[-2+yyTop]).getValue(), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 11:
+@@ -1178,89 +1178,90 @@
+ {
+ ((AssignableNode)yyVals[-2+yyTop]).setValueNode(((Node)yyVals[0+yyTop]));
+ yyVal = ((MultipleAsgnNode)yyVals[-2+yyTop]);
++ ((MultipleAsgnNode)yyVals[-2+yyTop]).setPosition(support.union(((MultipleAsgnNode)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])));
+ }
+ break;
+ case 36:
+- // line 425 "DefaultRubyParser.y"
++ // line 426 "DefaultRubyParser.y"
+ {
+ yyVal = support.newAndNode(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 37:
+- // line 428 "DefaultRubyParser.y"
++ // line 429 "DefaultRubyParser.y"
+ {
+ yyVal = support.newOrNode(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 38:
+- // line 431 "DefaultRubyParser.y"
++ // line 432 "DefaultRubyParser.y"
+ {
+ yyVal = new NotNode(support.union(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])), support.getConditionNode(((Node)yyVals[0+yyTop])));
+ }
+ break;
+ case 39:
+- // line 434 "DefaultRubyParser.y"
++ // line 435 "DefaultRubyParser.y"
+ {
+ yyVal = new NotNode(support.union(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])), support.getConditionNode(((Node)yyVals[0+yyTop])));
+ }
+ break;
+ case 41:
+- // line 439 "DefaultRubyParser.y"
++ // line 440 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 44:
+- // line 445 "DefaultRubyParser.y"
++ // line 446 "DefaultRubyParser.y"
+ {
+ yyVal = new ReturnNode(support.union(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])), support.ret_args(((Node)yyVals[0+yyTop]), getPosition(((Token)yyVals[-1+yyTop]))));
+ }
+ break;
+ case 45:
+- // line 448 "DefaultRubyParser.y"
++ // line 449 "DefaultRubyParser.y"
+ {
+ yyVal = new BreakNode(support.union(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])), support.ret_args(((Node)yyVals[0+yyTop]), getPosition(((Token)yyVals[-1+yyTop]))));
+ }
+ break;
+ case 46:
+- // line 451 "DefaultRubyParser.y"
++ // line 452 "DefaultRubyParser.y"
+ {
+ yyVal = new NextNode(support.union(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])), support.ret_args(((Node)yyVals[0+yyTop]), getPosition(((Token)yyVals[-1+yyTop]))));
+ }
+ break;
+ case 48:
+- // line 456 "DefaultRubyParser.y"
++ // line 457 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_call(((Node)yyVals[-3+yyTop]), ((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 49:
+- // line 459 "DefaultRubyParser.y"
++ // line 460 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_call(((Node)yyVals[-3+yyTop]), ((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 50:
+- // line 463 "DefaultRubyParser.y"
++ // line 464 "DefaultRubyParser.y"
+ {
+ support.pushBlockScope();
+ }
+ break;
+ case 51:
+- // line 465 "DefaultRubyParser.y"
++ // line 466 "DefaultRubyParser.y"
+ {
+ yyVal = new IterNode(getPosition(((Token)yyVals[-4+yyTop])), ((Node)yyVals[-2+yyTop]), support.getCurrentScope(), ((Node)yyVals[-1+yyTop]), null);
+ support.popCurrentScope();
+ }
+ break;
+ case 52:
+- // line 470 "DefaultRubyParser.y"
++ // line 471 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_fcall(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 53:
+- // line 473 "DefaultRubyParser.y"
++ // line 474 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_fcall(((Token)yyVals[-2+yyTop]), ((Node)yyVals[-1+yyTop]));
+ if (((IterNode)yyVals[0+yyTop]) != null) {
+@@ -1273,13 +1274,13 @@
+ }
+ break;
+ case 54:
+- // line 483 "DefaultRubyParser.y"
++ // line 484 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_call(((Node)yyVals[-3+yyTop]), ((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])); /*.setPosFrom($1);*/
+ }
+ break;
+ case 55:
+- // line 486 "DefaultRubyParser.y"
++ // line 487 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_call(((Node)yyVals[-4+yyTop]), ((Token)yyVals[-2+yyTop]), ((Node)yyVals[-1+yyTop]));
+ if (((IterNode)yyVals[0+yyTop]) != null) {
+@@ -1292,13 +1293,13 @@
+ }
+ break;
+ case 56:
+- // line 496 "DefaultRubyParser.y"
++ // line 497 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_call(((Node)yyVals[-3+yyTop]), ((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 57:
+- // line 499 "DefaultRubyParser.y"
++ // line 500 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_call(((Node)yyVals[-4+yyTop]), ((Token)yyVals[-2+yyTop]), ((Node)yyVals[-1+yyTop]));
+ if (((IterNode)yyVals[0+yyTop]) != null) {
+@@ -1311,115 +1312,117 @@
+ }
+ break;
+ case 58:
+- // line 509 "DefaultRubyParser.y"
++ // line 510 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_super(((Node)yyVals[0+yyTop]), ((Token)yyVals[-1+yyTop])); /* .setPosFrom($2);*/
+ }
+ break;
+ case 59:
+- // line 512 "DefaultRubyParser.y"
++ // line 513 "DefaultRubyParser.y"
+ {
+ yyVal = support.new_yield(getPosition(((Token)yyVals[-1+yyTop])), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 61:
+- // line 517 "DefaultRubyParser.y"
++ // line 518 "DefaultRubyParser.y"
+ {
+ yyVal = ((MultipleAsgnNode)yyVals[-1+yyTop]);
+ }
+ break;
+ case 63:
+- // line 522 "DefaultRubyParser.y"
++ // line 523 "DefaultRubyParser.y"
+ {
+ yyVal = new MultipleAsgnNode(getPosition(((Token)yyVals[-2+yyTop])), new ArrayNode(getPosition(((Token)yyVals[-2+yyTop])), ((MultipleAsgnNode)yyVals[-1+yyTop])), null);
+ }
+ break;
+ case 64:
+- // line 526 "DefaultRubyParser.y"
++ // line 527 "DefaultRubyParser.y"
+ {
+ yyVal = new MultipleAsgnNode(getPosition(((ListNode)yyVals[0+yyTop])), ((ListNode)yyVals[0+yyTop]), null);
+ }
+ break;
+ case 65:
+- // line 529 "DefaultRubyParser.y"
++ // line 530 "DefaultRubyParser.y"
+ {
+- yyVal = new MultipleAsgnNode(getPosition(((ListNode)yyVals[-1+yyTop])), ((ListNode)yyVals[-1+yyTop]).add(((Node)yyVals[0+yyTop])), null);
++/*mirko: check*/
++ yyVal = new MultipleAsgnNode(support.union(((Node)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])), ((ListNode)yyVals[-1+yyTop]).add(((Node)yyVals[0+yyTop])), null);
++ ((Node)yyVals[-1+yyTop]).setPosition(support.union(((Node)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])));
+ }
+ break;
+ case 66:
+- // line 532 "DefaultRubyParser.y"
++ // line 535 "DefaultRubyParser.y"
+ {
+ yyVal = new MultipleAsgnNode(getPosition(((ListNode)yyVals[-2+yyTop])), ((ListNode)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 67:
+- // line 535 "DefaultRubyParser.y"
++ // line 538 "DefaultRubyParser.y"
+ {
+ yyVal = new MultipleAsgnNode(getPosition(((ListNode)yyVals[-1+yyTop])), ((ListNode)yyVals[-1+yyTop]), new StarNode(getPosition(null)));
+ }
+ break;
+ case 68:
+- // line 538 "DefaultRubyParser.y"
++ // line 541 "DefaultRubyParser.y"
+ {
+ yyVal = new MultipleAsgnNode(getPosition(((Token)yyVals[-1+yyTop])), null, ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 69:
+- // line 541 "DefaultRubyParser.y"
++ // line 544 "DefaultRubyParser.y"
+ {
+ yyVal = new MultipleAsgnNode(getPosition(((Token)yyVals[0+yyTop])), null, new StarNode(getPosition(null)));
+ }
+ break;
+ case 71:
+- // line 546 "DefaultRubyParser.y"
++ // line 549 "DefaultRubyParser.y"
+ {
+ yyVal = ((MultipleAsgnNode)yyVals[-1+yyTop]);
+ }
+ break;
+ case 72:
+- // line 550 "DefaultRubyParser.y"
++ // line 553 "DefaultRubyParser.y"
+ {
+ yyVal = new ArrayNode(((Node)yyVals[-1+yyTop]).getPosition(), ((Node)yyVals[-1+yyTop]));
+ }
+ break;
+ case 73:
+- // line 553 "DefaultRubyParser.y"
++ // line 556 "DefaultRubyParser.y"
+ {
+ yyVal = ((ListNode)yyVals[-2+yyTop]).add(((Node)yyVals[-1+yyTop]));
+ }
+ break;
+ case 74:
+- // line 557 "DefaultRubyParser.y"
++ // line 560 "DefaultRubyParser.y"
+ {
+ yyVal = support.assignable(((Token)yyVals[0+yyTop]), null);
+ }
+ break;
+ case 75:
+- // line 560 "DefaultRubyParser.y"
++ // line 563 "DefaultRubyParser.y"
+ {
+ yyVal = support.aryset(((Node)yyVals[-3+yyTop]), ((Node)yyVals[-1+yyTop]));
+ }
+ break;
+ case 76:
+- // line 563 "DefaultRubyParser.y"
++ // line 566 "DefaultRubyParser.y"
+ {
+ yyVal = support.attrset(((Node)yyVals[-2+yyTop]), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 77:
+- // line 566 "DefaultRubyParser.y"
++ // line 569 "DefaultRubyParser.y"
+ {
+ yyVal = support.attrset(((Node)yyVals[-2+yyTop]), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 78:
+- // line 569 "DefaultRubyParser.y"
++ // line 572 "DefaultRubyParser.y"
+ {
+ yyVal = support.attrset(((Node)yyVals[-2+yyTop]), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 79:
+- // line 572 "DefaultRubyParser.y"
++ // line 575 "DefaultRubyParser.y"
+ {
+ if (support.isInDef() || support.isInSingle()) {
+ yyerror("dynamic constant assignment");
+@@ -1429,7 +1432,7 @@
+ }
+ break;
+ case 80:
+- // line 579 "DefaultRubyParser.y"
++ // line 582 "DefaultRubyParser.y"
+ {
+ if (support.isInDef() || support.isInSingle()) {
+ yyerror("dynamic constant assignment");
+@@ -1441,43 +1444,43 @@
+ }
+ break;
+ case 81:
+- // line 588 "DefaultRubyParser.y"
++ // line 591 "DefaultRubyParser.y"
+ {
+ support.backrefAssignError(((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 82:
+- // line 592 "DefaultRubyParser.y"
++ // line 595 "DefaultRubyParser.y"
+ {
+ yyVal = support.assignable(((Token)yyVals[0+yyTop]), null);
+ }
+ break;
+ case 83:
+- // line 595 "DefaultRubyParser.y"
++ // line 598 "DefaultRubyParser.y"
+ {
+ yyVal = support.aryset(((Node)yyVals[-3+yyTop]), ((Node)yyVals[-1+yyTop]));
+ }
+ break;
+ case 84:
+- // line 598 "DefaultRubyParser.y"
++ // line 601 "DefaultRubyParser.y"
+ {
+ yyVal = support.attrset(((Node)yyVals[-2+yyTop]), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 85:
+- // line 601 "DefaultRubyParser.y"
++ // line 604 "DefaultRubyParser.y"
+ {
+ yyVal = support.attrset(((Node)yyVals[-2+yyTop]), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 86:
+- // line 604 "DefaultRubyParser.y"
++ // line 607 "DefaultRubyParser.y"
+ {
+ yyVal = support.attrset(((Node)yyVals[-2+yyTop]), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 87:
+- // line 607 "DefaultRubyParser.y"
++ // line 610 "DefaultRubyParser.y"
+ {
+ if (support.isInDef() || support.isInSingle()) {
+ yyerror("dynamic constant assignment");
+@@ -1487,7 +1490,7 @@
+ }
+ break;
+ case 88:
+- // line 614 "DefaultRubyParser.y"
++ // line 617 "DefaultRubyParser.y"
+ {
+ if (support.isInDef() || support.isInSingle()) {
+ yyerror("dynamic constant assignment");
+@@ -1499,69 +1502,69 @@
+ }
+ break;
+ case 89:
+- // line 623 "DefaultRubyParser.y"
++ // line 626 "DefaultRubyParser.y"
+ {
+ support.backrefAssignError(((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 90:
+- // line 627 "DefaultRubyParser.y"
++ // line 630 "DefaultRubyParser.y"
+ {
+ yyerror("class/module name must be CONSTANT");
+ }
+ break;
+ case 92:
+- // line 632 "DefaultRubyParser.y"
++ // line 635 "DefaultRubyParser.y"
+ {
+ yyVal = new Colon3Node(support.union(((Token)yyVals[-1+yyTop]), ((Token)yyVals[0+yyTop])), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 93:
+- // line 635 "DefaultRubyParser.y"
++ // line 638 "DefaultRubyParser.y"
+ {
+ yyVal = new Colon2Node(((Token)yyVals[0+yyTop]).getPosition(), null, (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 94:
+- // line 638 "DefaultRubyParser.y"
++ // line 641 "DefaultRubyParser.y"
+ {
+ yyVal = new Colon2Node(support.union(((Node)yyVals[-2+yyTop]), ((Token)yyVals[0+yyTop])), ((Node)yyVals[-2+yyTop]), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 98:
+- // line 644 "DefaultRubyParser.y"
++ // line 647 "DefaultRubyParser.y"
+ {
+ lexer.setState(LexState.EXPR_END);
+ yyVal = ((Token)yyVals[0+yyTop]);
+ }
+ break;
+ case 99:
+- // line 649 "DefaultRubyParser.y"
++ // line 652 "DefaultRubyParser.y"
+ {
+ lexer.setState(LexState.EXPR_END);
+ yyVal = yyVals[0+yyTop];
+ }
+ break;
+ case 102:
+- // line 656 "DefaultRubyParser.y"
++ // line 659 "DefaultRubyParser.y"
+ {
+ yyVal = new UndefNode(getPosition(((Token)yyVals[0+yyTop])), (String) ((Token)yyVals[0+yyTop]).getValue());
+ }
+ break;
+ case 103:
+- // line 659 "DefaultRubyParser.y"
++ // line 662 "DefaultRubyParser.y"
+ {
+ lexer.setState(LexState.EXPR_FNAME);
+ }
+ break;
+ case 104:
+- // line 661 "DefaultRubyParser.y"
++ // line 664 "DefaultRubyParser.y"
+ {
+ yyVal = support.appendToBlock(((Node)yyVals[-3+yyTop]), new UndefNode(getPosition(((Node)yyVals[-3+yyTop])), (String) ((Token)yyVals[0+yyTop]).getValue()));
+ }
+ break;
+ case 172:
+- // line 680 "DefaultRubyParser.y"
++ // line 683 "DefaultRubyParser.y"
+ {
+ yyVal = support.node_assign(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ /* FIXME: Consider fixing node_assign itself rather than single case*/
+@@ -1569,14 +1572,14 @@
+ }
+ break;
+ case 173:
+- // line 685 "DefaultRubyParser.y"
++ // line 688 "DefaultRubyParser.y"
+ {
+ ISourcePosition position = support.union(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop]));
+ yyVal = support.node_assign(((Node)yyVals[-4+yyTop]), new RescueNode(position, ((Node)yyVals[-2+yyTop]), new RescueBodyNode(position, null, ((Node)yyVals[0+yyTop]), null), null));
+ }
+ break;
+ case 174:
+- // line 689 "DefaultRubyParser.y"
++ // line 692 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[0+yyTop]));
+ String name = ((INameNode)yyVals[-2+yyTop]).getName();
+@@ -1590,118 +1593,119 @@
+ yyVal = new OpAsgnAndNode(getPosition(((AssignableNode)yyVals[-2+yyTop])), support.gettable2(name, ((AssignableNode)yyVals[-2+yyTop]).getPosition()), ((AssignableNode)yyVals[-2+yyTop]));
+ } else {
+ ((AssignableNode)yyVals[-2+yyTop]).setValueNode(support.getOperatorCallNode(support.gettable2(name, ((AssignableNode)yyVals[-2+yyTop]).getPosition()), asgnOp, ((Node)yyVals[0+yyTop])));
++ ((AssignableNode)yyVals[-2+yyTop]).setPosition(support.union(((AssignableNode)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])));
+ yyVal = ((AssignableNode)yyVals[-2+yyTop]);
+ }
+ }
+ break;
+ case 175:
+- // line 705 "DefaultRubyParser.y"
++ // line 709 "DefaultRubyParser.y"
+ {
+ yyVal = new OpElementAsgnNode(getPosition(((Node)yyVals[-5+yyTop])), ((Node)yyVals[-5+yyTop]), (String) ((Token)yyVals[-1+yyTop]).getValue(), ((Node)yyVals[-3+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 176:
+- // line 708 "DefaultRubyParser.y"
++ // line 712 "DefaultRubyParser.y"
+ {
+ yyVal = new OpAsgnNode(getPosition(((Node)yyVals[-4+yyTop])), ((Node)yyVals[-4+yyTop]), ((Node)yyVals[0+yyTop]), (String) ((Token)yyVals[-2+yyTop]).getValue(), (String) ((Token)yyVals[-1+yyTop]).getValue());
+ }
+ break;
+ case 177:
+- // line 711 "DefaultRubyParser.y"
++ // line 715 "DefaultRubyParser.y"
+ {
+ yyVal = new OpAsgnNode(getPosition(((Node)yyVals[-4+yyTop])), ((Node)yyVals[-4+yyTop]), ((Node)yyVals[0+yyTop]), (String) ((Token)yyVals[-2+yyTop]).getValue(), (String) ((Token)yyVals[-1+yyTop]).getValue());
+ }
+ break;
+ case 178:
+- // line 714 "DefaultRubyParser.y"
++ // line 718 "DefaultRubyParser.y"
+ {
+ yyVal = new OpAsgnNode(getPosition(((Node)yyVals[-4+yyTop])), ((Node)yyVals[-4+yyTop]), ((Node)yyVals[0+yyTop]), (String) ((Token)yyVals[-2+yyTop]).getValue(), (String) ((Token)yyVals[-1+yyTop]).getValue());
+ }
+ break;
+ case 179:
+- // line 717 "DefaultRubyParser.y"
++ // line 721 "DefaultRubyParser.y"
+ {
+ yyerror("constant re-assignment");
+ }
+ break;
+ case 180:
+- // line 720 "DefaultRubyParser.y"
++ // line 724 "DefaultRubyParser.y"
+ {
+ yyerror("constant re-assignment");
+ }
+ break;
+ case 181:
+- // line 723 "DefaultRubyParser.y"
++ // line 727 "DefaultRubyParser.y"
+ {
+ support.backrefAssignError(((Node)yyVals[-2+yyTop]));
+ }
+ break;
+ case 182:
+- // line 726 "DefaultRubyParser.y"
++ // line 730 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[-2+yyTop]));
+ support.checkExpression(((Node)yyVals[0+yyTop]));
+- yyVal = new DotNode(getPosition(((Node)yyVals[-2+yyTop])), ((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]), false);
++ yyVal = new DotNode(support.union(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])), ((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]), false);
+ }
+ break;
+ case 183:
+- // line 731 "DefaultRubyParser.y"
++ // line 735 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[-2+yyTop]));
+ support.checkExpression(((Node)yyVals[0+yyTop]));
+- yyVal = new DotNode(getPosition(((Node)yyVals[-2+yyTop])), ((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]), true);
++ yyVal = new DotNode(support.union(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])), ((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]), true);
+ }
+ break;
+ case 184:
+- // line 736 "DefaultRubyParser.y"
++ // line 740 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "+", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 185:
+- // line 739 "DefaultRubyParser.y"
++ // line 743 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "-", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 186:
+- // line 742 "DefaultRubyParser.y"
++ // line 746 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "*", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 187:
+- // line 745 "DefaultRubyParser.y"
++ // line 749 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "/", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 188:
+- // line 748 "DefaultRubyParser.y"
++ // line 752 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "%", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 189:
+- // line 751 "DefaultRubyParser.y"
++ // line 755 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "**", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 190:
+- // line 754 "DefaultRubyParser.y"
++ // line 758 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "**", ((Node)yyVals[0+yyTop])), "-@");
+ }
+ break;
+ case 191:
+- // line 757 "DefaultRubyParser.y"
++ // line 761 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "**", ((Node)yyVals[0+yyTop])), "-@");
+ }
+ break;
+ case 192:
+- // line 760 "DefaultRubyParser.y"
++ // line 764 "DefaultRubyParser.y"
+ {
+ if (((Node)yyVals[0+yyTop]) != null && ((Node)yyVals[0+yyTop]) instanceof ILiteralNode) {
+ yyVal = ((Node)yyVals[0+yyTop]);
+@@ -1711,253 +1715,253 @@
+ }
+ break;
+ case 193:
+- // line 767 "DefaultRubyParser.y"
++ // line 771 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[0+yyTop]), "-@");
+ }
+ break;
+ case 194:
+- // line 770 "DefaultRubyParser.y"
++ // line 774 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "|", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 195:
+- // line 773 "DefaultRubyParser.y"
++ // line 777 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "^", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 196:
+- // line 776 "DefaultRubyParser.y"
++ // line 780 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "&", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 197:
+- // line 779 "DefaultRubyParser.y"
++ // line 783 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "<=>", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 198:
+- // line 782 "DefaultRubyParser.y"
++ // line 786 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), ">", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 199:
+- // line 785 "DefaultRubyParser.y"
++ // line 789 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), ">=", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 200:
+- // line 788 "DefaultRubyParser.y"
++ // line 792 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "<", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 201:
+- // line 791 "DefaultRubyParser.y"
++ // line 795 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "<=", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 202:
+- // line 794 "DefaultRubyParser.y"
++ // line 798 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "==", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 203:
+- // line 797 "DefaultRubyParser.y"
++ // line 801 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "===", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 204:
+- // line 800 "DefaultRubyParser.y"
++ // line 804 "DefaultRubyParser.y"
+ {
+ yyVal = new NotNode(support.union(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])), support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "==", ((Node)yyVals[0+yyTop])));
+ }
+ break;
+ case 205:
+- // line 803 "DefaultRubyParser.y"
++ // line 807 "DefaultRubyParser.y"
+ {
+ yyVal = support.getMatchNode(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 206:
+- // line 806 "DefaultRubyParser.y"
++ // line 810 "DefaultRubyParser.y"
+ {
+ yyVal = new NotNode(support.union(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])), support.getMatchNode(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])));
+ }
+ break;
+ case 207:
+- // line 809 "DefaultRubyParser.y"
++ // line 813 "DefaultRubyParser.y"
+ {
+ yyVal = new NotNode(support.union(((Token)yyVals[-1+yyTop]), ((Node)yyVals[0+yyTop])), support.getConditionNode(((Node)yyVals[0+yyTop])));
+ }
+ break;
+ case 208:
+- // line 812 "DefaultRubyParser.y"
++ // line 816 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[0+yyTop]), "~");
+ }
+ break;
+ case 209:
+- // line 815 "DefaultRubyParser.y"
++ // line 819 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), "<<", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 210:
+- // line 818 "DefaultRubyParser.y"
++ // line 822 "DefaultRubyParser.y"
+ {
+ yyVal = support.getOperatorCallNode(((Node)yyVals[-2+yyTop]), ">>", ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 211:
+- // line 821 "DefaultRubyParser.y"
++ // line 825 "DefaultRubyParser.y"
+ {
+ yyVal = support.newAndNode(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 212:
+- // line 824 "DefaultRubyParser.y"
++ // line 828 "DefaultRubyParser.y"
+ {
+ yyVal = support.newOrNode(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 213:
+- // line 827 "DefaultRubyParser.y"
++ // line 831 "DefaultRubyParser.y"
+ {
+ yyVal = new DefinedNode(getPosition(((Token)yyVals[-2+yyTop])), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 214:
+- // line 830 "DefaultRubyParser.y"
++ // line 834 "DefaultRubyParser.y"
+ {
+ yyVal = new IfNode(getPosition(((Node)yyVals[-4+yyTop])), support.getConditionNode(((Node)yyVals[-4+yyTop])), ((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 215:
+- // line 833 "DefaultRubyParser.y"
++ // line 837 "DefaultRubyParser.y"
+ {
+ yyVal = ((Node)yyVals[0+yyTop]);
+ }
+ break;
+ case 216:
+- // line 837 "DefaultRubyParser.y"
++ // line 841 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[0+yyTop]));
+ yyVal = ((Node)yyVals[0+yyTop]);
+ }
+ break;
+ case 218:
+- // line 843 "DefaultRubyParser.y"
++ // line 847 "DefaultRubyParser.y"
+ {
+ warnings.warn(getPosition(((Node)yyVals[-1+yyTop])), "parenthesize argument(s) for future version");
+ yyVal = new ArrayNode(getPosition(((Node)yyVals[-1+yyTop])), ((Node)yyVals[-1+yyTop]));
+ }
+ break;
+ case 219:
+- // line 847 "DefaultRubyParser.y"
++ // line 851 "DefaultRubyParser.y"
+ {
+ yyVal = ((ListNode)yyVals[-1+yyTop]);
+ }
+ break;
+ case 220:
+- // line 850 "DefaultRubyParser.y"
++ // line 854 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_concat(getPosition(((ListNode)yyVals[-4+yyTop])), ((ListNode)yyVals[-4+yyTop]), ((Node)yyVals[-1+yyTop]));
+ }
+ break;
+ case 221:
+- // line 854 "DefaultRubyParser.y"
++ // line 858 "DefaultRubyParser.y"
+ {
+ yyVal = new ArrayNode(getPosition(((ListNode)yyVals[-1+yyTop])), new HashNode(getPosition(null), ((ListNode)yyVals[-1+yyTop])));
+ }
+ break;
+ case 222:
+- // line 857 "DefaultRubyParser.y"
++ // line 861 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[-1+yyTop]));
+ yyVal = new NewlineNode(getPosition(((Token)yyVals[-2+yyTop])), new SplatNode(getPosition(((Token)yyVals[-2+yyTop])), ((Node)yyVals[-1+yyTop])));
+ }
+ break;
+ case 223:
+- // line 862 "DefaultRubyParser.y"
++ // line 866 "DefaultRubyParser.y"
+ {
+ yyVal = new ArrayNode(support.union(((Token)yyVals[-2+yyTop]), ((Token)yyVals[0+yyTop])));
+ }
+ break;
+ case 224:
+- // line 865 "DefaultRubyParser.y"
++ // line 869 "DefaultRubyParser.y"
+ {
+ yyVal = ((Node)yyVals[-2+yyTop]);
+ ((Node)yyVal).setPosition(support.union(((Token)yyVals[-3+yyTop]), ((Token)yyVals[0+yyTop])));
+ }
+ break;
+ case 225:
+- // line 869 "DefaultRubyParser.y"
++ // line 873 "DefaultRubyParser.y"
+ {
+ warnings.warn(getPosition(((Token)yyVals[-3+yyTop])), "parenthesize argument(s) for future version");
+ yyVal = new ArrayNode(getPosition(((Token)yyVals[-3+yyTop])), ((Node)yyVals[-2+yyTop]));
+ }
+ break;
+ case 226:
+- // line 873 "DefaultRubyParser.y"
++ // line 877 "DefaultRubyParser.y"
+ {
+ warnings.warn(getPosition(((Token)yyVals[-5+yyTop])), "parenthesize argument(s) for future version");
+ yyVal = ((ListNode)yyVals[-4+yyTop]).add(((Node)yyVals[-2+yyTop]));
+ }
+ break;
+ case 229:
+- // line 881 "DefaultRubyParser.y"
++ // line 885 "DefaultRubyParser.y"
+ {
+ warnings.warn(getPosition(((Node)yyVals[0+yyTop])), "parenthesize argument(s) for future version");
+ yyVal = new ArrayNode(getPosition(((Node)yyVals[0+yyTop])), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 230:
+- // line 885 "DefaultRubyParser.y"
++ // line 889 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_blk_pass(((ListNode)yyVals[-1+yyTop]), ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 231:
+- // line 888 "DefaultRubyParser.y"
++ // line 892 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_concat(getPosition(((ListNode)yyVals[-4+yyTop])), ((ListNode)yyVals[-4+yyTop]), ((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_blk_pass(((Node)yyVal), ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 232:
+- // line 892 "DefaultRubyParser.y"
++ // line 896 "DefaultRubyParser.y"
+ {
+ yyVal = new ArrayNode(getPosition(((ListNode)yyVals[-1+yyTop])), new HashNode(getPosition(null), ((ListNode)yyVals[-1+yyTop])));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 233:
+- // line 896 "DefaultRubyParser.y"
++ // line 900 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_concat(getPosition(((ListNode)yyVals[-4+yyTop])), new ArrayNode(getPosition(((ListNode)yyVals[-4+yyTop])), new HashNode(getPosition(null), ((ListNode)yyVals[-4+yyTop]))), ((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 234:
+- // line 900 "DefaultRubyParser.y"
++ // line 904 "DefaultRubyParser.y"
+ {
+ yyVal = ((ListNode)yyVals[-3+yyTop]).add(new HashNode(getPosition(null), ((ListNode)yyVals[-1+yyTop])));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 235:
+- // line 904 "DefaultRubyParser.y"
++ // line 908 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_concat(getPosition(((ListNode)yyVals[-6+yyTop])), ((ListNode)yyVals[-6+yyTop]).add(new HashNode(getPosition(null), ((ListNode)yyVals[-4+yyTop]))), ((Node)yyVals[-1+yyTop]));
+@@ -1965,226 +1969,226 @@
+ }
+ break;
+ case 236:
+- // line 909 "DefaultRubyParser.y"
++ // line 913 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_blk_pass(new SplatNode(getPosition(((Token)yyVals[-2+yyTop])), ((Node)yyVals[-1+yyTop])), ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 237:
+- // line 912 "DefaultRubyParser.y"
++ // line 916 "DefaultRubyParser.y"
+ {}
+ break;
+ case 238:
+- // line 914 "DefaultRubyParser.y"
++ // line 918 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_blk_pass(new ArrayNode(getPosition(((Node)yyVals[-3+yyTop])), ((Node)yyVals[-3+yyTop])).addAll(((ListNode)yyVals[-1+yyTop])), ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 239:
+- // line 917 "DefaultRubyParser.y"
++ // line 921 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_blk_pass(new ArrayNode(getPosition(((Node)yyVals[-2+yyTop])), ((Node)yyVals[-2+yyTop])), ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 240:
+- // line 920 "DefaultRubyParser.y"
++ // line 924 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_concat(getPosition(((Node)yyVals[-4+yyTop])), new ArrayNode(getPosition(((Node)yyVals[-4+yyTop])), ((Node)yyVals[-4+yyTop])), ((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 241:
+- // line 924 "DefaultRubyParser.y"
++ // line 928 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_concat(getPosition(((Node)yyVals[-6+yyTop])), new ArrayNode(getPosition(((Node)yyVals[-6+yyTop])), ((Node)yyVals[-6+yyTop])).addAll(new HashNode(getPosition(null), ((ListNode)yyVals[-4+yyTop]))), ((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 242:
+- // line 928 "DefaultRubyParser.y"
++ // line 932 "DefaultRubyParser.y"
+ {
+ yyVal = new ArrayNode(getPosition(((ListNode)yyVals[-1+yyTop])), new HashNode(getPosition(null), ((ListNode)yyVals[-1+yyTop])));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 243:
+- // line 932 "DefaultRubyParser.y"
++ // line 936 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_concat(getPosition(((ListNode)yyVals[-4+yyTop])), new ArrayNode(getPosition(((ListNode)yyVals[-4+yyTop])), new HashNode(getPosition(null), ((ListNode)yyVals[-4+yyTop]))), ((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 244:
+- // line 936 "DefaultRubyParser.y"
++ // line 940 "DefaultRubyParser.y"
+ {
+ yyVal = new ArrayNode(getPosition(((Node)yyVals[-3+yyTop])), ((Node)yyVals[-3+yyTop])).add(new HashNode(getPosition(null), ((ListNode)yyVals[-1+yyTop])));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 245:
+- // line 940 "DefaultRubyParser.y"
++ // line 944 "DefaultRubyParser.y"
+ {
+ yyVal = new ArrayNode(getPosition(((Node)yyVals[-5+yyTop])), ((Node)yyVals[-5+yyTop])).addAll(((ListNode)yyVals[-3+yyTop])).add(new HashNode(getPosition(null), ((ListNode)yyVals[-1+yyTop])));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 246:
+- // line 944 "DefaultRubyParser.y"
++ // line 948 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_concat(getPosition(((Node)yyVals[-6+yyTop])), new ArrayNode(getPosition(((Node)yyVals[-6+yyTop])), ((Node)yyVals[-6+yyTop])).add(new HashNode(getPosition(null), ((ListNode)yyVals[-4+yyTop]))), ((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 247:
+- // line 948 "DefaultRubyParser.y"
++ // line 952 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_concat(getPosition(((Node)yyVals[-8+yyTop])), new ArrayNode(getPosition(((Node)yyVals[-8+yyTop])), ((Node)yyVals[-8+yyTop])).addAll(((ListNode)yyVals[-6+yyTop])).add(new HashNode(getPosition(null), ((ListNode)yyVals[-4+yyTop]))), ((Node)yyVals[-1+yyTop]));
+ yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 248:
+- // line 952 "DefaultRubyParser.y"
++ // line 956 "DefaultRubyParser.y"
+ {
+ yyVal = support.arg_blk_pass(new SplatNode(getPosition(((Token)yyVals[-2+yyTop])), ((Node)yyVals[-1+yyTop])), ((BlockPassNode)yyVals[0+yyTop]));
+ }
+ break;
+ case 249:
+- // line 955 "DefaultRubyParser.y"
++ // line 959 "DefaultRubyParser.y"
+ {}
+ break;
+ case 250:
+- // line 957 "DefaultRubyParser.y"
++ // line 961 "DefaultRubyParser.y"
+ {
+ yyVal = new Long(lexer.getCmdArgumentState().begin());
+ }
+ break;
+ case 251:
+- // line 959 "DefaultRubyParser.y"
++ // line 963 "DefaultRubyParser.y"
+ {
+ lexer.getCmdArgumentState().reset(((Long)yyVals[-1+yyTop]).longValue());
+ yyVal = ((Node)yyVals[0+yyTop]);
+ }
+ break;
+ case 253:
+- // line 965 "DefaultRubyParser.y"
++ // line 969 "DefaultRubyParser.y"
+ {
+ lexer.setState(LexState.EXPR_ENDARG);
+ }
+ break;
+ case 254:
+- // line 967 "DefaultRubyParser.y"
++ // line 971 "DefaultRubyParser.y"
+ {
+ warnings.warn(getPosition(((Token)yyVals[-2+yyTop])), "don't put space before argument parentheses");
+ yyVal = null;
+ }
+ break;
+ case 255:
+- // line 971 "DefaultRubyParser.y"
++ // line 975 "DefaultRubyParser.y"
+ {
+ lexer.setState(LexState.EXPR_ENDARG);
+ }
+ break;
+ case 256:
+- // line 973 "DefaultRubyParser.y"
++ // line 977 "DefaultRubyParser.y"
+ {
+ warnings.warn(getPosition(((Token)yyVals[-3+yyTop])), "don't put space before argument parentheses");
+ yyVal = ((Node)yyVals[-2+yyTop]);
+ }
+ break;
+ case 257:
+- // line 978 "DefaultRubyParser.y"
++ // line 982 "DefaultRubyParser.y"
+ {
+ support.checkExpression(((Node)yyVals[0+yyTop]));
+ yyVal = new BlockPassNode(getPosition(((Token)yyVals[-1+yyTop])), ((Node)yyVals[0+yyTop]));
+ }
+ break;
+ case 258:
+- // line 983 "DefaultRubyParser.y"
++ // line 987 "DefaultRubyParser.y"
+ ...
[truncated message content] |