opal 0.3.2 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +85 -127
- data/bin/opal +3 -3
- data/lib/core.rb +114 -0
- data/{gems/core/lib → lib}/core/array.rb +68 -187
- data/{gems/core/lib → lib}/core/basic_object.rb +22 -5
- data/lib/core/class.rb +38 -0
- data/{gems/core/lib → lib}/core/dir.rb +1 -1
- data/lib/core/enumerable.rb +33 -0
- data/{gems/core/lib → lib}/core/error.rb +1 -4
- data/{gems/core/lib → lib}/core/false_class.rb +0 -0
- data/{gems/core/lib → lib}/core/file.rb +11 -3
- data/{gems/core/lib → lib}/core/hash.rb +12 -0
- data/{gems/core/lib → lib}/core/kernel.rb +114 -86
- data/lib/core/match_data.rb +33 -0
- data/lib/core/module.rb +97 -0
- data/{gems/core/lib → lib}/core/nil_class.rb +0 -0
- data/{gems/core/lib → lib}/core/numeric.rb +5 -0
- data/{gems/core/lib → lib}/core/object.rb +0 -0
- data/{gems/core/lib → lib}/core/proc.rb +13 -3
- data/{gems/core/lib → lib}/core/range.rb +10 -0
- data/{gems/core/lib → lib}/core/regexp.rb +33 -1
- data/{gems/core/lib → lib}/core/string.rb +25 -10
- data/{gems/core/lib → lib}/core/symbol.rb +3 -3
- data/{gems/core/lib → lib}/core/top_self.rb +0 -0
- data/{gems/core/lib → lib}/core/true_class.rb +0 -0
- data/lib/dev.rb +169 -0
- data/{gems/ospec/lib → lib}/ospec.rb +1 -0
- data/lib/ospec/autorun.rb +8 -0
- data/{gems/ospec/lib → lib}/ospec/dsl.rb +2 -2
- data/{gems/ospec/lib → lib}/ospec/example.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/example/before_and_after_hooks.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/example/errors.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/example/example_group.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/example/example_group_factory.rb +0 -3
- data/{gems/ospec/lib → lib}/ospec/example/example_group_hierarchy.rb +4 -3
- data/{gems/ospec/lib → lib}/ospec/example/example_group_methods.rb +1 -1
- data/{gems/ospec/lib → lib}/ospec/example/example_group_proxy.rb +3 -2
- data/{gems/ospec/lib → lib}/ospec/example/example_methods.rb +1 -1
- data/{gems/ospec/lib → lib}/ospec/example/example_proxy.rb +7 -7
- data/{gems/ospec/lib → lib}/ospec/expectations.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/expectations/errors.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/expectations/fail_with.rb +4 -3
- data/{gems/ospec/lib → lib}/ospec/expectations/handler.rb +6 -0
- data/lib/ospec/helpers/scratch.rb +18 -0
- data/{gems/ospec/lib → lib}/ospec/matchers.rb +2 -2
- data/{gems/ospec/lib → lib}/ospec/matchers/be.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/matchers/generated_descriptions.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/matchers/operator_matcher.rb +2 -0
- data/lib/ospec/matchers/raise_error.rb +38 -0
- data/lib/ospec/runner.rb +90 -0
- data/{gems/ospec/lib → lib}/ospec/runner/example_group_runner.rb +10 -13
- data/lib/ospec/runner/formatter/html_formatter.rb +139 -0
- data/{gems/ospec/lib → lib}/ospec/runner/formatter/terminal_formatter.rb +0 -0
- data/{gems/ospec/lib → lib}/ospec/runner/options.rb +1 -3
- data/{gems/ospec/lib → lib}/ospec/runner/reporter.rb +0 -9
- data/lib/racc/parser.rb +165 -0
- data/lib/strscan.rb +52 -0
- data/{lib → opal_lib}/opal.rb +2 -0
- data/opal_lib/opal/build_methods.rb +51 -0
- data/opal_lib/opal/builder.rb +164 -0
- data/opal_lib/opal/bundle.rb +70 -0
- data/opal_lib/opal/command.rb +68 -0
- data/{lib → opal_lib}/opal/context.rb +21 -9
- data/{lib → opal_lib}/opal/context/console.rb +0 -2
- data/opal_lib/opal/context/file_system.rb +34 -0
- data/{lib → opal_lib}/opal/context/loader.rb +26 -8
- data/opal_lib/opal/gem.rb +84 -0
- data/{lib → opal_lib}/opal/rake/builder_task.rb +2 -2
- data/opal_lib/opal/rake/spec_task.rb +32 -0
- data/{lib → opal_lib}/opal/ruby/nodes.rb +730 -109
- data/{lib → opal_lib}/opal/ruby/parser.rb +90 -23
- data/opal_lib/opal/ruby/ruby_parser.rb +4862 -0
- data/opal_lib/opal/ruby/ruby_parser.y +1454 -0
- data/opal_lib/opal/version.rb +4 -0
- data/runtime/class.js +359 -0
- data/runtime/debug.js +84 -0
- data/runtime/fs.js +199 -0
- data/runtime/init.js +558 -0
- data/runtime/loader.js +351 -0
- data/runtime/module.js +109 -0
- data/runtime/post.js +10 -0
- data/runtime/pre.js +7 -0
- data/runtime/runtime.js +351 -0
- metadata +88 -175
- data/.gitignore +0 -7
- data/Changelog +0 -31
- data/LICENSE +0 -75
- data/Rakefile +0 -86
- data/gems/core/README.md +0 -14
- data/gems/core/Rakefile +0 -8
- data/gems/core/core.gemspec +0 -13
- data/gems/core/lib/core.rb +0 -34
- data/gems/core/lib/core/class.rb +0 -31
- data/gems/core/lib/core/module.rb +0 -100
- data/gems/core/lib/core/vm.rb +0 -16
- data/gems/core/spec/core/array/append_spec.rb +0 -30
- data/gems/core/spec/core/array/assoc_spec.rb +0 -29
- data/gems/core/spec/core/array/at_spec.rb +0 -37
- data/gems/core/spec/core/array/clear_spec.rb +0 -22
- data/gems/core/spec/core/array/collect_bang_spec.rb +0 -27
- data/gems/core/spec/core/array/collect_spec.rb +0 -27
- data/gems/core/spec/core/array/compact_spec.rb +0 -41
- data/gems/core/spec/core/array/concat_spec.rb +0 -15
- data/gems/core/spec/core/array/constructor_spec.rb +0 -14
- data/gems/core/spec/core/array/each_spec.rb +0 -9
- data/gems/core/spec/core/array/element_reference_spec.rb +0 -4
- data/gems/core/spec/core/array/first_spec.rb +0 -35
- data/gems/core/spec/core/array/include_spec.rb +0 -9
- data/gems/core/spec/core/array/join_spec.rb +0 -6
- data/gems/core/spec/core/array/last_spec.rb +0 -51
- data/gems/core/spec/core/array/length_spec.rb +0 -6
- data/gems/core/spec/core/array/map_spec.rb +0 -33
- data/gems/core/spec/core/array/reverse_spec.rb +0 -6
- data/gems/core/spec/core/builtin_constants/builtin_constants_spec.rb +0 -7
- data/gems/core/spec/core/false/and_spec.rb +0 -10
- data/gems/core/spec/core/false/inspect_spec.rb +0 -6
- data/gems/core/spec/core/false/or_spec.rb +0 -10
- data/gems/core/spec/core/false/to_s_spec.rb +0 -6
- data/gems/core/spec/core/false/xor_spec.rb +0 -10
- data/gems/core/spec/core/file/join_spec.rb +0 -19
- data/gems/core/spec/core/hash/assoc_spec.rb +0 -32
- data/gems/core/spec/core/kernel/instance_eval_spec.rb +0 -0
- data/gems/core/spec/core/kernel/loop_spec.rb +0 -24
- data/gems/core/spec/core/kernel/raise_spec.rb +0 -0
- data/gems/core/spec/core/module/attr_accessor_spec.rb +0 -28
- data/gems/core/spec/core/number/lt_spec.rb +0 -12
- data/gems/core/spec/core/string/sub_spec.rb +0 -24
- data/gems/core/spec/core/true/and_spec.rb +0 -10
- data/gems/core/spec/core/true/inspect_spec.rb +0 -6
- data/gems/core/spec/core/true/or_spec.rb +0 -10
- data/gems/core/spec/core/true/to_s_spec.rb +0 -6
- data/gems/core/spec/core/true/xor_spec.rb +0 -10
- data/gems/core/spec/language/and_spec.rb +0 -61
- data/gems/core/spec/language/array_spec.rb +0 -68
- data/gems/core/spec/language/block_spec.rb +0 -38
- data/gems/core/spec/language/break_spec.rb +0 -36
- data/gems/core/spec/language/case_spec.rb +0 -103
- data/gems/core/spec/language/def_spec.rb +0 -21
- data/gems/core/spec/language/eigenclass_spec.rb +0 -60
- data/gems/core/spec/language/file_spec.rb +0 -13
- data/gems/core/spec/language/fixtures/block.rb +0 -21
- data/gems/core/spec/language/fixtures/super.rb +0 -293
- data/gems/core/spec/language/hash_spec.rb +0 -29
- data/gems/core/spec/language/if_spec.rb +0 -54
- data/gems/core/spec/language/loop_spec.rb +0 -11
- data/gems/core/spec/language/metaclass_spec.rb +0 -21
- data/gems/core/spec/language/method_spec.rb +0 -124
- data/gems/core/spec/language/next_spec.rb +0 -25
- data/gems/core/spec/language/or_spec.rb +0 -34
- data/gems/core/spec/language/redo_spec.rb +0 -24
- data/gems/core/spec/language/regexp_spec.rb +0 -26
- data/gems/core/spec/language/rescue_spec.rb +0 -20
- data/gems/core/spec/language/return_spec.rb +0 -47
- data/gems/core/spec/language/string_spec.rb +0 -25
- data/gems/core/spec/language/super_spec.rb +0 -32
- data/gems/core/spec/language/until_spec.rb +0 -157
- data/gems/core/spec/language/variables_spec.rb +0 -155
- data/gems/core/spec/language/while_spec.rb +0 -163
- data/gems/core/spec/spec_helper.rb +0 -5
- data/gems/core_fs/README.md +0 -19
- data/gems/dev/Rakefile +0 -5
- data/gems/dev/lib/dev.js +0 -99
- data/gems/dev/lib/dev/generator.js +0 -1264
- data/gems/dev/lib/dev/parser.js +0 -979
- data/gems/dev/lib/dev/ruby_parser.js +0 -1088
- data/gems/dev/lib/dev/ruby_parser.y +0 -1267
- data/gems/dev/lib/dev/string_scanner.js +0 -38
- data/gems/dev/tools/racc2js/README.md +0 -39
- data/gems/dev/tools/racc2js/math_parser.js +0 -222
- data/gems/dev/tools/racc2js/math_parser.rb +0 -133
- data/gems/dev/tools/racc2js/math_parser.y +0 -28
- data/gems/dev/tools/racc2js/parser.js +0 -218
- data/gems/dev/tools/racc2js/racc2js.rb +0 -153
- data/gems/json/README.md +0 -4
- data/gems/json/json.gemspec +0 -14
- data/gems/json/lib/json.rb +0 -64
- data/gems/json/lib/json/ext.rb +0 -51
- data/gems/json/lib/json/json2.js +0 -481
- data/gems/ospec/README.md +0 -0
- data/gems/ospec/lib/ospec/autorun.rb +0 -3
- data/gems/ospec/lib/ospec/runner.rb +0 -40
- data/gems/ospec/lib/ospec/runner/formatter/html_formatter.rb +0 -91
- data/gems/ospec/ospec.gemspec +0 -0
- data/gems/rquery/README.md +0 -9
- data/gems/rquery/lib/rquery.rb +0 -10
- data/gems/rquery/lib/rquery/ajax.rb +0 -4
- data/gems/rquery/lib/rquery/css.rb +0 -96
- data/gems/rquery/lib/rquery/document.rb +0 -25
- data/gems/rquery/lib/rquery/element.rb +0 -292
- data/gems/rquery/lib/rquery/event.rb +0 -108
- data/gems/rquery/lib/rquery/jquery.js +0 -8177
- data/gems/rquery/lib/rquery/request.rb +0 -138
- data/gems/rquery/lib/rquery/response.rb +0 -49
- data/gems/rquery/rquery.gemspec +0 -16
- data/lib/opal.js +0 -1597
- data/lib/opal/builder.rb +0 -117
- data/lib/opal/bundle.rb +0 -131
- data/lib/opal/command.rb +0 -11
- data/lib/opal/context/file_system.rb +0 -19
- data/lib/opal/gem.rb +0 -153
- data/lib/opal/ruby/ruby_parser.rb +0 -5170
- data/lib/opal/ruby/ruby_parser.y +0 -1298
- data/opal.gemspec +0 -15
|
@@ -0,0 +1,1454 @@
|
|
|
1
|
+
class Opal::RubyParser
|
|
2
|
+
|
|
3
|
+
token CLASS MODULE DEF UNDEF BEGIN RESCUE ENSURE END IF UNLESS
|
|
4
|
+
THEN ELSIF ELSE CASE WHEN WHILE UNTIL FOR BREAK NEXT
|
|
5
|
+
REDO RETRY IN DO DO_COND DO_BLOCK RETURN YIELD SUPER
|
|
6
|
+
SELF NIL TRUE FALSE AND OR NOT IF_MOD UNLESS_MOD WHILE_MOD
|
|
7
|
+
UNTIL_MOD RESCUE_MOD ALIAS DEFINED klBEGIN klEND LINE
|
|
8
|
+
FILE IDENTIFIER FID GVAR IVAR CONSTANT CVAR NTH_REF
|
|
9
|
+
BACK_REF STRING_CONTENT INTEGER FLOAT REGEXP_END '+@'
|
|
10
|
+
'-@' '-@NUM' '**' '<=>' '==' '===' '!=' '>=' '<=' '&&'
|
|
11
|
+
'||' '=~' '!~' '.' '..' '...' '[]' '[]=' '<<' '>>'
|
|
12
|
+
'::' '::@' OP_ASGN '=>' PAREN_BEG '(' ')' tLPAREN_ARG
|
|
13
|
+
ARRAY_BEG ']' tLBRACE tLBRACE_ARG SPLAT '*' '&@' '&'
|
|
14
|
+
'~' '%' '/' '+' '-' '<' '>' '|' '!' '^'
|
|
15
|
+
'{@' '}' BACK_REF2 SYMBOL_BEG STRING_BEG XSTRING_BEG REGEXP_BEG
|
|
16
|
+
WORDS_BEG AWORDS_BEG STRING_DBEG STRING_DVAR STRING_END STRING
|
|
17
|
+
SYMBOL '\\n' '?' ':' ',' SPACE ';' LABEL
|
|
18
|
+
|
|
19
|
+
prechigh
|
|
20
|
+
right '!' '~' '+@'
|
|
21
|
+
right '**'
|
|
22
|
+
right '-@NUM' '-@'
|
|
23
|
+
left '*' '/' '%'
|
|
24
|
+
left '+' '-'
|
|
25
|
+
left '<<' '>>'
|
|
26
|
+
left '&'
|
|
27
|
+
left '|' '^'
|
|
28
|
+
left '>' '>=' '<' '<='
|
|
29
|
+
nonassoc '<=>' '==' '===' '!=' '=~' '!~'
|
|
30
|
+
left '&&'
|
|
31
|
+
left '||'
|
|
32
|
+
nonassoc '..' '...'
|
|
33
|
+
right '?' ':'
|
|
34
|
+
left RESCUE_MOD
|
|
35
|
+
right '=' OP_ASGN
|
|
36
|
+
nonassoc DEFINED
|
|
37
|
+
right NOT
|
|
38
|
+
left OR AND
|
|
39
|
+
nonassoc IF_MOD UNLESS_MOD WHILE_MOD UNTIL_MOD
|
|
40
|
+
nonassoc tLBRACE_ARG
|
|
41
|
+
nonassoc LOWEST
|
|
42
|
+
preclow
|
|
43
|
+
|
|
44
|
+
rule
|
|
45
|
+
|
|
46
|
+
target:
|
|
47
|
+
compstmt
|
|
48
|
+
{
|
|
49
|
+
result = val[0]
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
bodystmt:
|
|
53
|
+
compstmt opt_rescue opt_else opt_ensure
|
|
54
|
+
{
|
|
55
|
+
result = BodyStatementsNode.new val[0], val[1], val[2], val[3]
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
compstmt:
|
|
59
|
+
stmts opt_terms
|
|
60
|
+
{
|
|
61
|
+
result = val[0]
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
stmts:
|
|
65
|
+
none
|
|
66
|
+
{
|
|
67
|
+
result = StatementsNode.new []
|
|
68
|
+
}
|
|
69
|
+
| stmt
|
|
70
|
+
{
|
|
71
|
+
result = StatementsNode.new [val[0]]
|
|
72
|
+
}
|
|
73
|
+
| stmts terms stmt
|
|
74
|
+
{
|
|
75
|
+
val[0] << val[2]
|
|
76
|
+
result = val[0]
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
stmt:
|
|
80
|
+
ALIAS fitem fitem
|
|
81
|
+
| ALIAS GVAR GVAR
|
|
82
|
+
| ALIAS GVAR BACK_REF
|
|
83
|
+
| ALIAS GVAR NTH_REF
|
|
84
|
+
| UNDEF undef_list
|
|
85
|
+
{
|
|
86
|
+
result = UndefNode.new val[0], val[1]
|
|
87
|
+
}
|
|
88
|
+
| stmt IF_MOD expr_value
|
|
89
|
+
{
|
|
90
|
+
result = IfNode.new val[1], val[2], StatementsNode.new([val[0]]), [], val[1]
|
|
91
|
+
}
|
|
92
|
+
| stmt UNLESS_MOD expr_value
|
|
93
|
+
{
|
|
94
|
+
result = IfModNode.new val[1], val[2], val[0]
|
|
95
|
+
}
|
|
96
|
+
| stmt WHILE_MOD expr_value
|
|
97
|
+
{
|
|
98
|
+
result = WhileNode.new val[1], val[2], StatementsNode.new([val[0]]), val[1]
|
|
99
|
+
}
|
|
100
|
+
| stmt UNTIL_MOD expr_value
|
|
101
|
+
{
|
|
102
|
+
result = WhileNode.new val[1], val[2], StatementsNode.new([val[0]]), val[1]
|
|
103
|
+
}
|
|
104
|
+
| stmt RESCUE_MOD stmt
|
|
105
|
+
| klBEGIN '{@' compstmt '}'
|
|
106
|
+
| klEND '{@' compstmt '}'
|
|
107
|
+
| lhs '=' command_call
|
|
108
|
+
{
|
|
109
|
+
result = AssignNode.new val[0], val[2], val[1]
|
|
110
|
+
}
|
|
111
|
+
| mlhs '=' command_call
|
|
112
|
+
{
|
|
113
|
+
result = MlhsAssignNode.new val[1], val[0], val[2]
|
|
114
|
+
}
|
|
115
|
+
| var_lhs OP_ASGN command_call
|
|
116
|
+
{
|
|
117
|
+
result = OpAsgnNode.new val[1], val[0], val[2]
|
|
118
|
+
}
|
|
119
|
+
| primary_value '[@' aref_args ']' OP_ASGN command_call
|
|
120
|
+
# {
|
|
121
|
+
# result = OpAsgnNode.new(val[4], ArefNode.new(val[0], val[2]), val[5])
|
|
122
|
+
# }
|
|
123
|
+
| primary_value '.' IDENTIFIER OP_ASGN command_call
|
|
124
|
+
{
|
|
125
|
+
result = OpAsgnNode.new(val[3], CallNode.new(val[0], val[2], []), val[4])
|
|
126
|
+
}
|
|
127
|
+
| primary_value '.' CONSTANT OP_ASGN command_call
|
|
128
|
+
| primary_value '::' IDENTIFIER OP_ASGN command_call
|
|
129
|
+
| backref OP_ASGN command_call
|
|
130
|
+
| lhs '=' mrhs
|
|
131
|
+
| mlhs '=' arg_value
|
|
132
|
+
{
|
|
133
|
+
result = MlhsAssignNode.new val[1], val[0], val[2]
|
|
134
|
+
}
|
|
135
|
+
| mlhs '=' mrhs
|
|
136
|
+
{
|
|
137
|
+
result = MlhsAssignNode.new val[1], val[0], val[2]
|
|
138
|
+
}
|
|
139
|
+
| expr
|
|
140
|
+
|
|
141
|
+
expr:
|
|
142
|
+
command_call
|
|
143
|
+
| expr AND expr
|
|
144
|
+
{
|
|
145
|
+
result = AndNode.new val[1], val[0], val[2]
|
|
146
|
+
}
|
|
147
|
+
| expr OR expr
|
|
148
|
+
{
|
|
149
|
+
result = OrNode.new val[1], val[0], val[2]
|
|
150
|
+
}
|
|
151
|
+
| NOT expr
|
|
152
|
+
{
|
|
153
|
+
result = CallNode.new val[1], {:value => '!', :line => 0}, []
|
|
154
|
+
}
|
|
155
|
+
| '!' command_call
|
|
156
|
+
{
|
|
157
|
+
result = CallNode.new val[1], val[0], []
|
|
158
|
+
}
|
|
159
|
+
| arg
|
|
160
|
+
|
|
161
|
+
expr_value:
|
|
162
|
+
expr
|
|
163
|
+
|
|
164
|
+
command_call:
|
|
165
|
+
command
|
|
166
|
+
| block_command
|
|
167
|
+
| RETURN call_args
|
|
168
|
+
{
|
|
169
|
+
result = ReturnNode.new val[0], val[1]
|
|
170
|
+
}
|
|
171
|
+
| BREAK call_args
|
|
172
|
+
{
|
|
173
|
+
result = BreakNode.new val[0], val[1]
|
|
174
|
+
}
|
|
175
|
+
| NEXT call_args
|
|
176
|
+
{
|
|
177
|
+
result = NextNode.new val[0], val[1]
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
block_command:
|
|
181
|
+
block_call
|
|
182
|
+
| block_call '.' operation2 command_args
|
|
183
|
+
| block_call '::' operation2 command_args
|
|
184
|
+
|
|
185
|
+
cmd_brace_block:
|
|
186
|
+
tLBRACE_ARG opt_block_var compstmt '}'
|
|
187
|
+
|
|
188
|
+
command:
|
|
189
|
+
operation command_args =LOWEST
|
|
190
|
+
{
|
|
191
|
+
result = CallNode.new nil, val[0], val[1]
|
|
192
|
+
}
|
|
193
|
+
| operation command_args cmd_brace_block
|
|
194
|
+
| primary_value '.' operation2 command_args =LOWEST
|
|
195
|
+
{
|
|
196
|
+
result = CallNode.new val[0], val[2], val[3]
|
|
197
|
+
}
|
|
198
|
+
| primary_value '.' operation2 command_args cmd_brace_block
|
|
199
|
+
| primary_value '::' operation2 command_args =LOWEST
|
|
200
|
+
{
|
|
201
|
+
result = "result = ['call', val[0], val[2], val[3]];"
|
|
202
|
+
}
|
|
203
|
+
| primary_value '::' operation2 command_args cmd_brace_block
|
|
204
|
+
| SUPER command_args
|
|
205
|
+
{
|
|
206
|
+
result = SuperNode.new val[0], val[1]
|
|
207
|
+
}
|
|
208
|
+
| YIELD command_args
|
|
209
|
+
{
|
|
210
|
+
result = YieldNode.new val[0], val[1]
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
mlhs:
|
|
214
|
+
mlhs_basic
|
|
215
|
+
{
|
|
216
|
+
result = val[0]
|
|
217
|
+
}
|
|
218
|
+
| PAREN_BEG mlhs_entry ')'
|
|
219
|
+
{
|
|
220
|
+
result = val[1]
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
mlhs_entry:
|
|
224
|
+
mlhs_basic
|
|
225
|
+
{
|
|
226
|
+
result = val[0]
|
|
227
|
+
}
|
|
228
|
+
| PAREN_BEG mlhs_entry ')'
|
|
229
|
+
{
|
|
230
|
+
result = val[1]
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
mlhs_basic:
|
|
234
|
+
mlhs_head
|
|
235
|
+
{
|
|
236
|
+
result = [val[0]]
|
|
237
|
+
}
|
|
238
|
+
| mlhs_head mlhs_item
|
|
239
|
+
{
|
|
240
|
+
result = [val[0] << val[1]]
|
|
241
|
+
}
|
|
242
|
+
| mlhs_head SPLAT mlhs_node
|
|
243
|
+
| mlhs_head SPLAT
|
|
244
|
+
| SPLAT mlhs_node
|
|
245
|
+
| SPLAT
|
|
246
|
+
|
|
247
|
+
mlhs_item:
|
|
248
|
+
mlhs_node
|
|
249
|
+
{
|
|
250
|
+
result = val[0]
|
|
251
|
+
}
|
|
252
|
+
| PAREN_BEG mlhs_entry ')'
|
|
253
|
+
{
|
|
254
|
+
result = val[1]
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
mlhs_head:
|
|
258
|
+
mlhs_item ','
|
|
259
|
+
{
|
|
260
|
+
result = [val[0]]
|
|
261
|
+
}
|
|
262
|
+
| mlhs_head mlhs_item ','
|
|
263
|
+
{
|
|
264
|
+
result = val[0] << val[1]
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
mlhs_node:
|
|
268
|
+
variable
|
|
269
|
+
| primary_value '[@' aref_args ']'
|
|
270
|
+
| primary_value '.' IDENTIFIER
|
|
271
|
+
| primary_value '::' IDENTIFIER
|
|
272
|
+
| primary_value '.' CONSTANT
|
|
273
|
+
| primary_value '::' CONSTANT
|
|
274
|
+
| '::@' CONSTANT
|
|
275
|
+
| backref
|
|
276
|
+
|
|
277
|
+
lhs:
|
|
278
|
+
variable
|
|
279
|
+
| primary_value '[@' aref_args ']'
|
|
280
|
+
{
|
|
281
|
+
result = ArefNode.new val[0], val[2]
|
|
282
|
+
}
|
|
283
|
+
| primary_value '.' IDENTIFIER
|
|
284
|
+
{
|
|
285
|
+
result = CallNode.new val[0], val[2], [[]]
|
|
286
|
+
}
|
|
287
|
+
| primary_value '::' IDENTIFIER
|
|
288
|
+
| primary_value '.' CONSTANT
|
|
289
|
+
| primary_value '::' CONSTANT
|
|
290
|
+
| '::@' CONSTANT
|
|
291
|
+
| backref
|
|
292
|
+
|
|
293
|
+
cname:
|
|
294
|
+
CONSTANT
|
|
295
|
+
|
|
296
|
+
cpath:
|
|
297
|
+
'::@' cname
|
|
298
|
+
{
|
|
299
|
+
result = "result = ['::', val[1]];"
|
|
300
|
+
}
|
|
301
|
+
| cname
|
|
302
|
+
{
|
|
303
|
+
result = [nil, val[0]]
|
|
304
|
+
}
|
|
305
|
+
| primary_value '::' cname
|
|
306
|
+
{
|
|
307
|
+
result = [val[0], val[2]]
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
fname:
|
|
311
|
+
IDENTIFIER
|
|
312
|
+
| CONSTANT
|
|
313
|
+
| FID
|
|
314
|
+
| op
|
|
315
|
+
| reswords
|
|
316
|
+
|
|
317
|
+
fitem:
|
|
318
|
+
fname
|
|
319
|
+
| symbol
|
|
320
|
+
|
|
321
|
+
undef_list:
|
|
322
|
+
fitem
|
|
323
|
+
{
|
|
324
|
+
result = [val[0]]
|
|
325
|
+
}
|
|
326
|
+
| undef_list ',' fitem
|
|
327
|
+
{
|
|
328
|
+
result = val[0] << val[2]
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
op:
|
|
332
|
+
'|' | '^' | '&' | '<=>' | '==' | '==='
|
|
333
|
+
| '=~' | '>' | '>=' | '<' | '<=' | '<<'
|
|
334
|
+
| '>>' | '+' | '-' | '*' | SPLAT | '/'
|
|
335
|
+
| '%' | '**' | '~' | '+@' | '-@' | '[]'
|
|
336
|
+
| '[]=' | BACK_REF2 | '!' | '!='
|
|
337
|
+
|
|
338
|
+
reswords:
|
|
339
|
+
LINE | FILE | klBEGIN | klEND | ALIAS | AND
|
|
340
|
+
| BEGIN | BREAK | CASE | CLASS | DEF | DEFINED
|
|
341
|
+
| DO | ELSE | ELSIF | END | ENSURE | FALSE
|
|
342
|
+
| FOR | IN | MODULE | NEXT | NIL | NOT
|
|
343
|
+
| OR | REDO | RESCUE | RETRY | RETURN | SELF
|
|
344
|
+
| SUPER | THEN | TRUE | UNDEF | WHEN | YIELD
|
|
345
|
+
| IF_MOD | UNLESS_MOD | WHILE_MOD | UNTIL_MOD | RESCUE_MOD
|
|
346
|
+
|
|
347
|
+
arg:
|
|
348
|
+
lhs '=' arg
|
|
349
|
+
{
|
|
350
|
+
result = AssignNode.new val[0], val[2], val[1]
|
|
351
|
+
}
|
|
352
|
+
| lhs '=' arg RESCUE_MOD arg
|
|
353
|
+
| var_lhs OP_ASGN arg
|
|
354
|
+
{
|
|
355
|
+
result = OpAsgnNode.new val[1], val[0], val[2]
|
|
356
|
+
}
|
|
357
|
+
| primary_value '[@' aref_args ']' OP_ASGN arg
|
|
358
|
+
{
|
|
359
|
+
result = OpAsgnNode.new val[4], ArefNode.new(val[0], val[2]), val[5]
|
|
360
|
+
}
|
|
361
|
+
| primary_value '.' IDENTIFIER OP_ASGN arg
|
|
362
|
+
{
|
|
363
|
+
result = OpAsgnNode.new(val[3], CallNode.new(val[0], val[2], [[]]), val[4])
|
|
364
|
+
}
|
|
365
|
+
| primary_value '.' CONSTANT OP_ASGN arg
|
|
366
|
+
| primary_value '::' IDENTIFIER OP_ASGN arg
|
|
367
|
+
| primary_value '::' CONSTANT OP_ASGN arg
|
|
368
|
+
| '::@' CONSTANT OP_ASGN arg
|
|
369
|
+
| backref OP_ASGN arg
|
|
370
|
+
| arg '..' arg
|
|
371
|
+
{
|
|
372
|
+
result = RangeNode.new val[1], val[0], val[2]
|
|
373
|
+
}
|
|
374
|
+
| arg '...' arg
|
|
375
|
+
{
|
|
376
|
+
result = RangeNode.new val[1], val[0], val[2]
|
|
377
|
+
}
|
|
378
|
+
| arg '+' arg
|
|
379
|
+
{
|
|
380
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
381
|
+
}
|
|
382
|
+
| arg '-' arg
|
|
383
|
+
{
|
|
384
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
385
|
+
}
|
|
386
|
+
| arg '*' arg
|
|
387
|
+
{
|
|
388
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
389
|
+
}
|
|
390
|
+
| arg '/' arg
|
|
391
|
+
{
|
|
392
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
393
|
+
}
|
|
394
|
+
| arg '%' arg
|
|
395
|
+
{
|
|
396
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
397
|
+
}
|
|
398
|
+
| arg '**' arg
|
|
399
|
+
{
|
|
400
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
401
|
+
}
|
|
402
|
+
| '-@NUM' INTEGER '**' arg
|
|
403
|
+
| '-@NUM' FLOAT '**' arg
|
|
404
|
+
| '+@' arg
|
|
405
|
+
{
|
|
406
|
+
result = CallNode.new val[1], val[0], []
|
|
407
|
+
}
|
|
408
|
+
| '-@' arg
|
|
409
|
+
{
|
|
410
|
+
result = CallNode.new val[1], val[0], []
|
|
411
|
+
}
|
|
412
|
+
| arg '|' arg
|
|
413
|
+
{
|
|
414
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
415
|
+
}
|
|
416
|
+
| arg '^' arg
|
|
417
|
+
{
|
|
418
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
419
|
+
}
|
|
420
|
+
| arg '&' arg
|
|
421
|
+
{
|
|
422
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
423
|
+
}
|
|
424
|
+
| arg '<=>' arg
|
|
425
|
+
{
|
|
426
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
427
|
+
}
|
|
428
|
+
| arg '>' arg
|
|
429
|
+
{
|
|
430
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
431
|
+
}
|
|
432
|
+
| arg '>=' arg
|
|
433
|
+
{
|
|
434
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
435
|
+
}
|
|
436
|
+
| arg '<' arg
|
|
437
|
+
{
|
|
438
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
439
|
+
}
|
|
440
|
+
| arg '<=' arg
|
|
441
|
+
{
|
|
442
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
443
|
+
}
|
|
444
|
+
| arg '==' arg
|
|
445
|
+
{
|
|
446
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
447
|
+
}
|
|
448
|
+
| arg '===' arg
|
|
449
|
+
{
|
|
450
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
451
|
+
}
|
|
452
|
+
| arg '!=' arg
|
|
453
|
+
{
|
|
454
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
455
|
+
}
|
|
456
|
+
| arg '=~' arg
|
|
457
|
+
{
|
|
458
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
459
|
+
}
|
|
460
|
+
| arg '!~' arg
|
|
461
|
+
{
|
|
462
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
463
|
+
}
|
|
464
|
+
| '!' arg
|
|
465
|
+
{
|
|
466
|
+
result = CallNode.new val[1], val[0], []
|
|
467
|
+
}
|
|
468
|
+
| '~' arg
|
|
469
|
+
{
|
|
470
|
+
result = CallNode.new val[1], val[0], []
|
|
471
|
+
}
|
|
472
|
+
| arg '<<' arg
|
|
473
|
+
{
|
|
474
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
475
|
+
}
|
|
476
|
+
| arg '>>' arg
|
|
477
|
+
{
|
|
478
|
+
result = CallNode.new val[0], val[1], [[val[2]]]
|
|
479
|
+
}
|
|
480
|
+
| arg '&&' arg
|
|
481
|
+
{
|
|
482
|
+
result = AndNode.new val[1], val[0], val[2]
|
|
483
|
+
}
|
|
484
|
+
| arg '||' arg
|
|
485
|
+
{
|
|
486
|
+
result = OrNode.new val[1], val[0], val[2]
|
|
487
|
+
}
|
|
488
|
+
| DEFINED opt_nl arg
|
|
489
|
+
| arg '?' arg ':' arg
|
|
490
|
+
{
|
|
491
|
+
result = TernaryNode.new val[0], val[2], val[4]
|
|
492
|
+
}
|
|
493
|
+
| primary
|
|
494
|
+
|
|
495
|
+
arg_value:
|
|
496
|
+
arg
|
|
497
|
+
|
|
498
|
+
aref_args:
|
|
499
|
+
none
|
|
500
|
+
{
|
|
501
|
+
result = [[], nil]
|
|
502
|
+
}
|
|
503
|
+
| command opt_nl
|
|
504
|
+
| args trailer
|
|
505
|
+
{
|
|
506
|
+
result = [val[0], nil]
|
|
507
|
+
}
|
|
508
|
+
| args ',' SPLAT arg opt_nl
|
|
509
|
+
{
|
|
510
|
+
result = [val[0], val[3]]
|
|
511
|
+
}
|
|
512
|
+
| assocs trailer
|
|
513
|
+
{
|
|
514
|
+
result = [[HashNode.new(val[0], {}, {})], nil]
|
|
515
|
+
}
|
|
516
|
+
| SPLAT arg opt_nl
|
|
517
|
+
{
|
|
518
|
+
result = [[], val[1]]
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
paren_args:
|
|
522
|
+
'(' none ')'
|
|
523
|
+
{
|
|
524
|
+
result = [[]]
|
|
525
|
+
}
|
|
526
|
+
| '(' call_args opt_nl ')'
|
|
527
|
+
{
|
|
528
|
+
result = val[1]
|
|
529
|
+
}
|
|
530
|
+
| '(' block_call opt_nl ')'
|
|
531
|
+
| '(' args ',' block_call opt_nl ')'
|
|
532
|
+
|
|
533
|
+
opt_paren_args:
|
|
534
|
+
none
|
|
535
|
+
{
|
|
536
|
+
result = []
|
|
537
|
+
}
|
|
538
|
+
| paren_args
|
|
539
|
+
|
|
540
|
+
call_args:
|
|
541
|
+
command
|
|
542
|
+
{
|
|
543
|
+
result = [[val[0]], nil, nil, nil]
|
|
544
|
+
}
|
|
545
|
+
| args opt_block_arg
|
|
546
|
+
{
|
|
547
|
+
result = [val[0], nil, nil, val[1]]
|
|
548
|
+
}
|
|
549
|
+
| args ',' SPLAT arg_value opt_block_arg
|
|
550
|
+
{
|
|
551
|
+
result = [val[0], val[3], nil, val[4]]
|
|
552
|
+
}
|
|
553
|
+
| assocs opt_block_arg
|
|
554
|
+
{
|
|
555
|
+
result = [nil, nil, val[0], val[1]]
|
|
556
|
+
}
|
|
557
|
+
| assocs ',' SPLAT arg_value opt_block_arg
|
|
558
|
+
{
|
|
559
|
+
result = [nil, val[3], val[0], val[4]]
|
|
560
|
+
}
|
|
561
|
+
| args ',' assocs opt_block_arg
|
|
562
|
+
{
|
|
563
|
+
result = [val[0], nil, val[2], val[3]]
|
|
564
|
+
}
|
|
565
|
+
| args ',' assocs ',' SPLAT arg opt_block_arg
|
|
566
|
+
{
|
|
567
|
+
result = [val[0], val[5], val[2], val[6]]
|
|
568
|
+
}
|
|
569
|
+
| SPLAT arg_value opt_block_arg
|
|
570
|
+
{
|
|
571
|
+
result = [nil, val[1], nil, val[2]]
|
|
572
|
+
}
|
|
573
|
+
| block_arg
|
|
574
|
+
{
|
|
575
|
+
result = [nil, nil, nil, val[0]]
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
call_args2:
|
|
579
|
+
arg_value ',' args opt_block_arg
|
|
580
|
+
| arg_value ',' block_arg
|
|
581
|
+
| arg_value ',' SPLAT arg_value opt_block_arg
|
|
582
|
+
| arg_value ',' args ',' SPLAT arg_value opt_block_arg
|
|
583
|
+
| assocs opt_block_arg
|
|
584
|
+
| assocs ',' SPLAT arg_value opt_block_arg
|
|
585
|
+
| arg_value ',' assocs opt_block_arg
|
|
586
|
+
| arg_value ',' args ',' assocs opt_block_arg
|
|
587
|
+
| arg_value ',' assocs ',' SPLAT arg_value opt_block_arg
|
|
588
|
+
| arg_value ',' args ',' assocs ',' SPLAT arg_value opt_block_arg
|
|
589
|
+
| SPLAT arg_value opt_block_arg
|
|
590
|
+
| block_arg
|
|
591
|
+
|
|
592
|
+
command_args:
|
|
593
|
+
{
|
|
594
|
+
cmdarg_push 1
|
|
595
|
+
}
|
|
596
|
+
open_args
|
|
597
|
+
{
|
|
598
|
+
cmdarg_pop
|
|
599
|
+
result = val[1]
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
open_args:
|
|
603
|
+
call_args
|
|
604
|
+
| tLPAREN_ARG ')'
|
|
605
|
+
{
|
|
606
|
+
result = [[]]
|
|
607
|
+
}
|
|
608
|
+
| tLPAREN_ARG call_args2 ')'
|
|
609
|
+
{
|
|
610
|
+
result = val[1]
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
block_arg:
|
|
614
|
+
'&@' arg_value
|
|
615
|
+
{
|
|
616
|
+
result = val[1]
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
opt_block_arg:
|
|
620
|
+
',' block_arg
|
|
621
|
+
{
|
|
622
|
+
result = val[1]
|
|
623
|
+
}
|
|
624
|
+
| none_block_pass
|
|
625
|
+
{
|
|
626
|
+
result = nil
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
args:
|
|
630
|
+
arg_value
|
|
631
|
+
{
|
|
632
|
+
result = [val[0]]
|
|
633
|
+
}
|
|
634
|
+
| args ',' arg_value
|
|
635
|
+
{
|
|
636
|
+
result = val[0] << val[2]
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
mrhs:
|
|
640
|
+
args ',' arg_value
|
|
641
|
+
| args ',' SPLAT arg_value
|
|
642
|
+
| SPLAT arg_value
|
|
643
|
+
|
|
644
|
+
primary:
|
|
645
|
+
literal
|
|
646
|
+
| strings
|
|
647
|
+
| xstring
|
|
648
|
+
| regexp
|
|
649
|
+
| words
|
|
650
|
+
| awords
|
|
651
|
+
| var_ref
|
|
652
|
+
| backref
|
|
653
|
+
| FID
|
|
654
|
+
| BEGIN bodystmt END
|
|
655
|
+
{
|
|
656
|
+
result = BeginNode.new val[0], val[1], val[2]
|
|
657
|
+
}
|
|
658
|
+
| tLPAREN_ARG expr opt_nl ')'
|
|
659
|
+
| PAREN_BEG compstmt ')'
|
|
660
|
+
{
|
|
661
|
+
result = ParenNode.new val[0], val[1], val[2]
|
|
662
|
+
}
|
|
663
|
+
| primary_value '::' CONSTANT
|
|
664
|
+
{
|
|
665
|
+
result = Colon2Node.new val[0], val[2]
|
|
666
|
+
}
|
|
667
|
+
| '::@' CONSTANT
|
|
668
|
+
{
|
|
669
|
+
result = Colon3Node.new val[1]
|
|
670
|
+
}
|
|
671
|
+
| primary_value '[@' aref_args ']'
|
|
672
|
+
{
|
|
673
|
+
result = CallNode.new val[0], { :line => val[0].line, :value => '[]' }, val[2]
|
|
674
|
+
}
|
|
675
|
+
| '[' aref_args ']'
|
|
676
|
+
{
|
|
677
|
+
result = ArrayNode.new val[1], val[0], val[2]
|
|
678
|
+
}
|
|
679
|
+
| '{' assoc_list '}'
|
|
680
|
+
{
|
|
681
|
+
result = HashNode.new val[1], val[0], val[2]
|
|
682
|
+
}
|
|
683
|
+
| RETURN
|
|
684
|
+
{
|
|
685
|
+
result = ReturnNode.new val[0], [nil]
|
|
686
|
+
}
|
|
687
|
+
| YIELD '(' call_args ')'
|
|
688
|
+
{
|
|
689
|
+
result = YieldNode.new val[0], val[2]
|
|
690
|
+
}
|
|
691
|
+
| YIELD '(' ')'
|
|
692
|
+
{
|
|
693
|
+
result = YieldNode.new val[0], []
|
|
694
|
+
}
|
|
695
|
+
| YIELD
|
|
696
|
+
{
|
|
697
|
+
result = YieldNode.new val[0], []
|
|
698
|
+
}
|
|
699
|
+
| DEFINED opt_nl '(' expr ')'
|
|
700
|
+
| operation brace_block
|
|
701
|
+
{
|
|
702
|
+
result = CallNode.new nil, val[0], [[]]
|
|
703
|
+
result.block = val[1]
|
|
704
|
+
}
|
|
705
|
+
| method_call
|
|
706
|
+
| method_call brace_block
|
|
707
|
+
{
|
|
708
|
+
result = val[0];
|
|
709
|
+
result.block = val[1]
|
|
710
|
+
}
|
|
711
|
+
| IF expr_value then compstmt if_tail END
|
|
712
|
+
{
|
|
713
|
+
result = IfNode.new val[0], val[1], val[3], val[4], val[5]
|
|
714
|
+
}
|
|
715
|
+
| UNLESS expr_value then compstmt opt_else END
|
|
716
|
+
{
|
|
717
|
+
result = IfNode.new val[0], val[1], val[3], val[4], val[5]
|
|
718
|
+
}
|
|
719
|
+
| WHILE
|
|
720
|
+
{
|
|
721
|
+
cond_push 1
|
|
722
|
+
}
|
|
723
|
+
expr_value do
|
|
724
|
+
{
|
|
725
|
+
cond_pop
|
|
726
|
+
}
|
|
727
|
+
compstmt END
|
|
728
|
+
{
|
|
729
|
+
result = WhileNode.new val[0], val[2], val[5], val[6]
|
|
730
|
+
}
|
|
731
|
+
| UNTIL
|
|
732
|
+
{
|
|
733
|
+
result = "this.cond_push(1);"
|
|
734
|
+
}
|
|
735
|
+
expr_value do
|
|
736
|
+
{
|
|
737
|
+
result = "this.cond_pop();"
|
|
738
|
+
}
|
|
739
|
+
compstmt END
|
|
740
|
+
{
|
|
741
|
+
result = "result = ['while', val[0], val[2], val[5]];"
|
|
742
|
+
}
|
|
743
|
+
| CASE expr_value opt_terms case_body END
|
|
744
|
+
{
|
|
745
|
+
result = CaseNode.new val[0], val[1], val[3], val[4]
|
|
746
|
+
}
|
|
747
|
+
| CASE opt_terms case_body END
|
|
748
|
+
{
|
|
749
|
+
result = "result = ['case', null, val[2]];"
|
|
750
|
+
}
|
|
751
|
+
| CASE opt_terms ELSE compstmt END
|
|
752
|
+
| FOR block_var IN
|
|
753
|
+
{
|
|
754
|
+
result = "this.cond_push(1);"
|
|
755
|
+
}
|
|
756
|
+
expr_value do
|
|
757
|
+
{
|
|
758
|
+
result = "this.cond_pop();"
|
|
759
|
+
}
|
|
760
|
+
compstmt END
|
|
761
|
+
| CLASS cpath superclass bodystmt END
|
|
762
|
+
{
|
|
763
|
+
result = ClassNode.new val[0], val[1], val[2], val[3], val[4]
|
|
764
|
+
}
|
|
765
|
+
| CLASS '<<' expr term bodystmt END
|
|
766
|
+
{
|
|
767
|
+
result = ClassShiftNode.new val[0], val[2], val[4], val[5]
|
|
768
|
+
}
|
|
769
|
+
| MODULE cpath bodystmt END
|
|
770
|
+
{
|
|
771
|
+
result = ModuleNode.new val[0], val[1], val[2], val[3]
|
|
772
|
+
}
|
|
773
|
+
| DEF fname f_arglist bodystmt END
|
|
774
|
+
{
|
|
775
|
+
result = DefNode.new val[0], nil, val[1], val[2], val[3], val[4]
|
|
776
|
+
}
|
|
777
|
+
| DEF singleton dot_or_colon fname f_arglist bodystmt END
|
|
778
|
+
{
|
|
779
|
+
result = DefNode.new val[0], val[1], val[3], val[4], val[5], val[6]
|
|
780
|
+
}
|
|
781
|
+
| BREAK
|
|
782
|
+
{
|
|
783
|
+
result = BreakNode.new val[0], []
|
|
784
|
+
}
|
|
785
|
+
| NEXT
|
|
786
|
+
{
|
|
787
|
+
result = NextNode.new val[0], []
|
|
788
|
+
}
|
|
789
|
+
| REDO
|
|
790
|
+
{
|
|
791
|
+
result = RedoNode.new val[0]
|
|
792
|
+
}
|
|
793
|
+
| RETRY
|
|
794
|
+
|
|
795
|
+
primary_value:
|
|
796
|
+
primary
|
|
797
|
+
|
|
798
|
+
then:
|
|
799
|
+
term
|
|
800
|
+
| ':'
|
|
801
|
+
| THEN
|
|
802
|
+
| term THEN
|
|
803
|
+
|
|
804
|
+
do:
|
|
805
|
+
term
|
|
806
|
+
| ':'
|
|
807
|
+
| DO_COND
|
|
808
|
+
|
|
809
|
+
if_tail:
|
|
810
|
+
opt_else
|
|
811
|
+
{
|
|
812
|
+
result = val[0]
|
|
813
|
+
}
|
|
814
|
+
| ELSIF expr_value then compstmt if_tail
|
|
815
|
+
{
|
|
816
|
+
result = [[val[0], val[1], val[3]]].concat val[4]
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
opt_else:
|
|
820
|
+
none
|
|
821
|
+
{
|
|
822
|
+
result = []
|
|
823
|
+
}
|
|
824
|
+
| ELSE compstmt
|
|
825
|
+
{
|
|
826
|
+
result = [[val[0], val[1]]]
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
block_var:
|
|
830
|
+
block_var_args
|
|
831
|
+
{
|
|
832
|
+
result = [val[0], nil]
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
block_var_args:
|
|
836
|
+
f_arg ',' f_block_optarg ',' f_rest_arg opt_f_block_arg
|
|
837
|
+
{
|
|
838
|
+
result = [val[0], val[2], val[4], val[5]]
|
|
839
|
+
}
|
|
840
|
+
| f_arg ',' f_block_optarg opt_f_block_arg
|
|
841
|
+
{
|
|
842
|
+
result = [val[0], val[2], nil, val[3]]
|
|
843
|
+
}
|
|
844
|
+
| f_arg ',' f_rest_arg opt_f_block_arg
|
|
845
|
+
{
|
|
846
|
+
result = [val[0], nil, val[2], val[3]]
|
|
847
|
+
}
|
|
848
|
+
| f_arg opt_f_block_arg
|
|
849
|
+
{
|
|
850
|
+
result = [val[0], nil, nil, val[1]]
|
|
851
|
+
}
|
|
852
|
+
| f_block_optarg ',' f_rest_arg opt_f_block_arg
|
|
853
|
+
{
|
|
854
|
+
result = [nil, val[0], val[2], val[3]]
|
|
855
|
+
}
|
|
856
|
+
| f_block_optarg opt_f_block_arg
|
|
857
|
+
{
|
|
858
|
+
result = [nil, val[0], nil, val[1]]
|
|
859
|
+
}
|
|
860
|
+
| f_rest_arg opt_f_block_arg
|
|
861
|
+
{
|
|
862
|
+
result = [nil, nil, val[0], val[1]]
|
|
863
|
+
}
|
|
864
|
+
| f_block_arg
|
|
865
|
+
{
|
|
866
|
+
result = [nil, nil, nil, val[0]]
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
f_block_optarg:
|
|
870
|
+
f_block_opt
|
|
871
|
+
{
|
|
872
|
+
result = [val[0]]
|
|
873
|
+
}
|
|
874
|
+
| f_block_optarg ',' f_block_opt
|
|
875
|
+
{
|
|
876
|
+
val[0] << val[2]
|
|
877
|
+
result = val[0]
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
f_block_opt:
|
|
881
|
+
IDENTIFIER '=' primary_value
|
|
882
|
+
{
|
|
883
|
+
result = [val[0], val[2]]
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
opt_block_var:
|
|
887
|
+
none
|
|
888
|
+
{
|
|
889
|
+
result = [nil]
|
|
890
|
+
}
|
|
891
|
+
| '|' '|'
|
|
892
|
+
{
|
|
893
|
+
result = [nil]
|
|
894
|
+
}
|
|
895
|
+
| '||'
|
|
896
|
+
{
|
|
897
|
+
result = [nil]
|
|
898
|
+
}
|
|
899
|
+
| '|' block_var '|'
|
|
900
|
+
{
|
|
901
|
+
result = val[1]
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
do_block:
|
|
905
|
+
DO_BLOCK
|
|
906
|
+
{
|
|
907
|
+
# result = "print('doing half command');"
|
|
908
|
+
}
|
|
909
|
+
opt_block_var compstmt END
|
|
910
|
+
{
|
|
911
|
+
result = BlockNode.new val[0], val[2], val[3], val[4]
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
block_call:
|
|
915
|
+
command do_block
|
|
916
|
+
{
|
|
917
|
+
result = val[0]
|
|
918
|
+
val[0].block = val[1]
|
|
919
|
+
}
|
|
920
|
+
| block_call '.' operation2 opt_paren_args
|
|
921
|
+
| block_call '::' operation2 opt_paren_args
|
|
922
|
+
|
|
923
|
+
method_call:
|
|
924
|
+
operation paren_args
|
|
925
|
+
{
|
|
926
|
+
result = CallNode.new nil, val[0], val[1]
|
|
927
|
+
}
|
|
928
|
+
| primary_value '.' operation2 opt_paren_args
|
|
929
|
+
{
|
|
930
|
+
result = CallNode.new val[0], val[2], val[3]
|
|
931
|
+
}
|
|
932
|
+
| primary_value '::' operation2 paren_args
|
|
933
|
+
| primary_value '::' operation3
|
|
934
|
+
| SUPER paren_args
|
|
935
|
+
{
|
|
936
|
+
result = SuperNode.new val[0], val[1]
|
|
937
|
+
}
|
|
938
|
+
| SUPER
|
|
939
|
+
{
|
|
940
|
+
result = SuperNode.new val[0], []
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
brace_block:
|
|
944
|
+
'{@' opt_block_var compstmt '}'
|
|
945
|
+
{
|
|
946
|
+
result = BlockNode.new val[0], val[1], val[2], val[3]
|
|
947
|
+
}
|
|
948
|
+
| DO opt_block_var compstmt END
|
|
949
|
+
{
|
|
950
|
+
result = BlockNode.new val[0], val[1], val[2], val[3]
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
case_body:
|
|
954
|
+
WHEN when_args then compstmt cases
|
|
955
|
+
{
|
|
956
|
+
# result = "result = [['when', val[1], val[3]]].concat(val[4]);"
|
|
957
|
+
result = [[val[0], val[1], val[3]]] + val[4]
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
when_args:
|
|
961
|
+
args
|
|
962
|
+
{
|
|
963
|
+
result = val[0]
|
|
964
|
+
}
|
|
965
|
+
| args ',' SPLAT arg_value
|
|
966
|
+
{
|
|
967
|
+
result = val[0]
|
|
968
|
+
}
|
|
969
|
+
| SPLAT arg_value
|
|
970
|
+
{
|
|
971
|
+
result = []
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
cases:
|
|
975
|
+
opt_else
|
|
976
|
+
| case_body
|
|
977
|
+
|
|
978
|
+
opt_rescue:
|
|
979
|
+
RESCUE exc_list exc_var then compstmt opt_rescue
|
|
980
|
+
{
|
|
981
|
+
result = [[val[0], val[1], val[2], val[4]]]
|
|
982
|
+
result.concat val[5]
|
|
983
|
+
}
|
|
984
|
+
|
|
|
985
|
+
{
|
|
986
|
+
result = []
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
exc_list:
|
|
990
|
+
arg_value
|
|
991
|
+
| mrhs
|
|
992
|
+
| none
|
|
993
|
+
|
|
994
|
+
exc_var:
|
|
995
|
+
'=>' lhs
|
|
996
|
+
{
|
|
997
|
+
result = val[1]
|
|
998
|
+
}
|
|
999
|
+
| none
|
|
1000
|
+
{
|
|
1001
|
+
result = nil
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
opt_ensure:
|
|
1005
|
+
ENSURE compstmt
|
|
1006
|
+
| none
|
|
1007
|
+
|
|
1008
|
+
literal:
|
|
1009
|
+
numeric
|
|
1010
|
+
| symbol
|
|
1011
|
+
| dsym
|
|
1012
|
+
|
|
1013
|
+
strings:
|
|
1014
|
+
string
|
|
1015
|
+
|
|
1016
|
+
string:
|
|
1017
|
+
string1
|
|
1018
|
+
| string string1
|
|
1019
|
+
|
|
1020
|
+
string1:
|
|
1021
|
+
STRING_BEG string_contents STRING_END
|
|
1022
|
+
{
|
|
1023
|
+
result = StringNode.new val[1], val[2]
|
|
1024
|
+
}
|
|
1025
|
+
| STRING
|
|
1026
|
+
|
|
1027
|
+
xstring:
|
|
1028
|
+
XSTRING_BEG xstring_contents STRING_END
|
|
1029
|
+
{
|
|
1030
|
+
result = XStringNode.new val[0], val[1], val[2]
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
regexp:
|
|
1034
|
+
REGEXP_BEG xstring_contents REGEXP_END
|
|
1035
|
+
{
|
|
1036
|
+
result = RegexpNode.new val[0], val[1]
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
words:
|
|
1040
|
+
WORDS_BEG SPACE STRING_END
|
|
1041
|
+
{
|
|
1042
|
+
result = WordsNode.new val[0], [], val[2]
|
|
1043
|
+
}
|
|
1044
|
+
| WORDS_BEG word_list STRING_END
|
|
1045
|
+
{
|
|
1046
|
+
result = WordsNode.new val[0], val[1], val[2]
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
word_list:
|
|
1050
|
+
none
|
|
1051
|
+
{
|
|
1052
|
+
result = []
|
|
1053
|
+
}
|
|
1054
|
+
| word_list word SPACE
|
|
1055
|
+
{
|
|
1056
|
+
result = val[0].concat([val[1]])
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
word:
|
|
1060
|
+
string_content
|
|
1061
|
+
{
|
|
1062
|
+
result = val[0]
|
|
1063
|
+
}
|
|
1064
|
+
| word string_content
|
|
1065
|
+
{
|
|
1066
|
+
result = val[0].concat([val[1]])
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
awords:
|
|
1070
|
+
AWORDS_BEG SPACE STRING_END
|
|
1071
|
+
{
|
|
1072
|
+
result = WordsNode.new val[0], [], val[2]
|
|
1073
|
+
}
|
|
1074
|
+
| AWORDS_BEG qword_list STRING_END
|
|
1075
|
+
{
|
|
1076
|
+
result = WordsNode.new val[0], val[1], val[2]
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
qword_list:
|
|
1080
|
+
none
|
|
1081
|
+
{
|
|
1082
|
+
result = []
|
|
1083
|
+
}
|
|
1084
|
+
| qword_list STRING_CONTENT SPACE
|
|
1085
|
+
{
|
|
1086
|
+
result = val[0].concat([['string_content', val[1]]])
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
string_contents:
|
|
1090
|
+
none
|
|
1091
|
+
{
|
|
1092
|
+
result = []
|
|
1093
|
+
}
|
|
1094
|
+
| string_contents string_content
|
|
1095
|
+
{
|
|
1096
|
+
result = val[0] << val[1]
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
xstring_contents:
|
|
1100
|
+
none
|
|
1101
|
+
{
|
|
1102
|
+
result = []
|
|
1103
|
+
}
|
|
1104
|
+
| xstring_contents string_content
|
|
1105
|
+
{
|
|
1106
|
+
result = val[0].concat [val[1]]
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
string_content:
|
|
1110
|
+
STRING_CONTENT
|
|
1111
|
+
{
|
|
1112
|
+
result = ['string_content', val[0]]
|
|
1113
|
+
}
|
|
1114
|
+
| STRING_DVAR string_dvar
|
|
1115
|
+
{
|
|
1116
|
+
result = ['string_dvar', val[1]]
|
|
1117
|
+
}
|
|
1118
|
+
| STRING_DBEG
|
|
1119
|
+
{
|
|
1120
|
+
cond_push 0
|
|
1121
|
+
cmdarg_push 0
|
|
1122
|
+
}
|
|
1123
|
+
compstmt '}'
|
|
1124
|
+
{
|
|
1125
|
+
cond_lexpop
|
|
1126
|
+
cmdarg_lexpop
|
|
1127
|
+
result = ['string_dbegin', val[2]]
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
string_dvar:
|
|
1131
|
+
GVAR
|
|
1132
|
+
| IVAR
|
|
1133
|
+
| CVAR
|
|
1134
|
+
| backref
|
|
1135
|
+
|
|
1136
|
+
|
|
1137
|
+
symbol:
|
|
1138
|
+
SYMBOL_BEG sym
|
|
1139
|
+
{
|
|
1140
|
+
result = SymbolNode.new val[1]
|
|
1141
|
+
}
|
|
1142
|
+
| SYMBOL
|
|
1143
|
+
|
|
1144
|
+
sym: fname
|
|
1145
|
+
| IVAR
|
|
1146
|
+
| GVAR
|
|
1147
|
+
| CVAR
|
|
1148
|
+
|
|
1149
|
+
dsym:
|
|
1150
|
+
SYMBOL_BEG xstring_contents STRING_END
|
|
1151
|
+
{
|
|
1152
|
+
result = "result = ['dsym', val[1]];"
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
numeric:
|
|
1156
|
+
INTEGER
|
|
1157
|
+
{
|
|
1158
|
+
result = NumericNode.new val[0]
|
|
1159
|
+
}
|
|
1160
|
+
| FLOAT
|
|
1161
|
+
{
|
|
1162
|
+
result = NumericNode.new val[0]
|
|
1163
|
+
}
|
|
1164
|
+
| '-@NUM' INTEGER =LOWEST
|
|
1165
|
+
| '-@NUM' FLOAT =LOWEST
|
|
1166
|
+
|
|
1167
|
+
variable:
|
|
1168
|
+
IDENTIFIER
|
|
1169
|
+
{
|
|
1170
|
+
result = IdentifierNode.new val[0]
|
|
1171
|
+
}
|
|
1172
|
+
| IVAR
|
|
1173
|
+
{
|
|
1174
|
+
result = IvarNode.new val[0]
|
|
1175
|
+
}
|
|
1176
|
+
| GVAR
|
|
1177
|
+
{
|
|
1178
|
+
result = GvarNode.new val[0];
|
|
1179
|
+
}
|
|
1180
|
+
| CONSTANT
|
|
1181
|
+
{
|
|
1182
|
+
result = ConstantNode.new val[0]
|
|
1183
|
+
}
|
|
1184
|
+
| CVAR
|
|
1185
|
+
{
|
|
1186
|
+
result = "result = ['cvar', val[0]];"
|
|
1187
|
+
}
|
|
1188
|
+
| NIL
|
|
1189
|
+
{
|
|
1190
|
+
result = NilNode.new val[0]
|
|
1191
|
+
}
|
|
1192
|
+
| SELF
|
|
1193
|
+
{
|
|
1194
|
+
result = SelfNode.new val[0]
|
|
1195
|
+
}
|
|
1196
|
+
| TRUE
|
|
1197
|
+
{
|
|
1198
|
+
result = TrueNode.new val[0]
|
|
1199
|
+
}
|
|
1200
|
+
| FALSE
|
|
1201
|
+
{
|
|
1202
|
+
result = FalseNode.new val[0]
|
|
1203
|
+
}
|
|
1204
|
+
| FILE
|
|
1205
|
+
{
|
|
1206
|
+
result = FileNode.new val[0]
|
|
1207
|
+
}
|
|
1208
|
+
| LINE
|
|
1209
|
+
{
|
|
1210
|
+
result = LineNode.new val[0]
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
var_ref:
|
|
1214
|
+
variable
|
|
1215
|
+
|
|
1216
|
+
var_lhs:
|
|
1217
|
+
variable
|
|
1218
|
+
|
|
1219
|
+
backref:
|
|
1220
|
+
NTH_REF
|
|
1221
|
+
| BACK_REF
|
|
1222
|
+
|
|
1223
|
+
superclass:
|
|
1224
|
+
term
|
|
1225
|
+
{
|
|
1226
|
+
result = nil
|
|
1227
|
+
}
|
|
1228
|
+
| '<' expr_value term
|
|
1229
|
+
{
|
|
1230
|
+
result = val[1]
|
|
1231
|
+
}
|
|
1232
|
+
| error term
|
|
1233
|
+
{
|
|
1234
|
+
result = nil
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
f_arglist:
|
|
1238
|
+
'(' f_args opt_nl ')'
|
|
1239
|
+
{
|
|
1240
|
+
result = val[1]
|
|
1241
|
+
}
|
|
1242
|
+
| f_args term
|
|
1243
|
+
{
|
|
1244
|
+
result = val[0]
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
f_args:
|
|
1248
|
+
f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
|
|
1249
|
+
{
|
|
1250
|
+
result = [val[0], val[2], val[4], val[5]]
|
|
1251
|
+
}
|
|
1252
|
+
| f_arg ',' f_optarg opt_f_block_arg
|
|
1253
|
+
{
|
|
1254
|
+
result = [val[0], val[2], nil, val[3]]
|
|
1255
|
+
}
|
|
1256
|
+
| f_arg ',' f_rest_arg opt_f_block_arg
|
|
1257
|
+
{
|
|
1258
|
+
result = [val[0], nil, val[2], val[3]]
|
|
1259
|
+
}
|
|
1260
|
+
| f_arg opt_f_block_arg
|
|
1261
|
+
{
|
|
1262
|
+
result = [val[0], nil, nil, val[1]]
|
|
1263
|
+
}
|
|
1264
|
+
| f_optarg ',' f_rest_arg opt_f_block_arg
|
|
1265
|
+
{
|
|
1266
|
+
rsult = [nil, val[0], val[2], val[3]]
|
|
1267
|
+
}
|
|
1268
|
+
| f_optarg opt_f_block_arg
|
|
1269
|
+
{
|
|
1270
|
+
result = [nil, val[0], nil, val[1]]
|
|
1271
|
+
}
|
|
1272
|
+
| f_rest_arg opt_f_block_arg
|
|
1273
|
+
{
|
|
1274
|
+
result = [nil, nil, val[0], val[1]]
|
|
1275
|
+
}
|
|
1276
|
+
| f_block_arg
|
|
1277
|
+
{
|
|
1278
|
+
result = [nil, nil, nil, val[0]]
|
|
1279
|
+
}
|
|
1280
|
+
|
|
|
1281
|
+
{
|
|
1282
|
+
result = [nil, nil, nil, nil]
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
f_norm_arg:
|
|
1286
|
+
CONSTANT
|
|
1287
|
+
{
|
|
1288
|
+
result = "this.yyerror('formal argument cannot be a constant');"
|
|
1289
|
+
}
|
|
1290
|
+
| IVAR
|
|
1291
|
+
{
|
|
1292
|
+
result = "this.yyerror('formal argument cannot be an instance variable');"
|
|
1293
|
+
}
|
|
1294
|
+
| CVAR
|
|
1295
|
+
{
|
|
1296
|
+
result = "this.yyerror('formal argument cannot be a class variable');"
|
|
1297
|
+
}
|
|
1298
|
+
| GVAR
|
|
1299
|
+
{
|
|
1300
|
+
result = "this.yyerror('formal argument cannot be a global variable');"
|
|
1301
|
+
}
|
|
1302
|
+
| IDENTIFIER
|
|
1303
|
+
|
|
1304
|
+
f_arg:
|
|
1305
|
+
f_norm_arg
|
|
1306
|
+
{
|
|
1307
|
+
result = [val[0]]
|
|
1308
|
+
}
|
|
1309
|
+
| f_arg ',' f_norm_arg
|
|
1310
|
+
{
|
|
1311
|
+
val[0] << val[2]
|
|
1312
|
+
result = val[0]
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
f_opt:
|
|
1316
|
+
IDENTIFIER '=' arg_value
|
|
1317
|
+
{
|
|
1318
|
+
result = [val[0], val[2]]
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
f_optarg:
|
|
1322
|
+
f_opt
|
|
1323
|
+
{
|
|
1324
|
+
result = [val[0]]
|
|
1325
|
+
}
|
|
1326
|
+
| f_optarg ',' f_opt
|
|
1327
|
+
{
|
|
1328
|
+
result = val[0]
|
|
1329
|
+
val[0] << val[2]
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1332
|
+
restarg_mark:
|
|
1333
|
+
'*'
|
|
1334
|
+
| SPLAT
|
|
1335
|
+
|
|
1336
|
+
f_rest_arg:
|
|
1337
|
+
restarg_mark IDENTIFIER
|
|
1338
|
+
{
|
|
1339
|
+
result = val[1]
|
|
1340
|
+
}
|
|
1341
|
+
| restarg_mark
|
|
1342
|
+
{
|
|
1343
|
+
result = val[0]
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
blkarg_mark:
|
|
1347
|
+
'&'
|
|
1348
|
+
| '&@'
|
|
1349
|
+
|
|
1350
|
+
f_block_arg:
|
|
1351
|
+
blkarg_mark IDENTIFIER
|
|
1352
|
+
{
|
|
1353
|
+
result = val[1]
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
opt_f_block_arg:
|
|
1357
|
+
',' f_block_arg
|
|
1358
|
+
{
|
|
1359
|
+
result = val[1]
|
|
1360
|
+
}
|
|
1361
|
+
|
|
|
1362
|
+
{
|
|
1363
|
+
result = nil
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
singleton:
|
|
1367
|
+
var_ref
|
|
1368
|
+
{
|
|
1369
|
+
result = val[0]
|
|
1370
|
+
}
|
|
1371
|
+
| '(' expr opt_nl ')'
|
|
1372
|
+
{
|
|
1373
|
+
result = val[1]
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
assoc_list:
|
|
1377
|
+
none
|
|
1378
|
+
{
|
|
1379
|
+
result = []
|
|
1380
|
+
}
|
|
1381
|
+
| assocs trailer
|
|
1382
|
+
{
|
|
1383
|
+
result = val[0]
|
|
1384
|
+
}
|
|
1385
|
+
| args trailer
|
|
1386
|
+
{
|
|
1387
|
+
raise "unsupported assoc list type (#@line_number)"
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
assocs:
|
|
1391
|
+
assoc
|
|
1392
|
+
{
|
|
1393
|
+
result = [val[0]]
|
|
1394
|
+
}
|
|
1395
|
+
| assocs ',' assoc
|
|
1396
|
+
{
|
|
1397
|
+
result = val[0] << val[2]
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
assoc:
|
|
1401
|
+
arg_value '=>' arg_value
|
|
1402
|
+
{
|
|
1403
|
+
result = [val[0], val[2]]
|
|
1404
|
+
}
|
|
1405
|
+
| LABEL arg_value
|
|
1406
|
+
{
|
|
1407
|
+
result = [SymbolNode.new(val[0]), val[1]]
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
operation:
|
|
1411
|
+
IDENTIFIER
|
|
1412
|
+
| CONSTANT
|
|
1413
|
+
| FID
|
|
1414
|
+
|
|
1415
|
+
operation2:
|
|
1416
|
+
IDENTIFIER
|
|
1417
|
+
| CONSTANT
|
|
1418
|
+
| FID
|
|
1419
|
+
| op
|
|
1420
|
+
|
|
1421
|
+
operation3:
|
|
1422
|
+
IDENTIFIER
|
|
1423
|
+
| FID
|
|
1424
|
+
| op
|
|
1425
|
+
|
|
1426
|
+
dot_or_colon:
|
|
1427
|
+
'.'
|
|
1428
|
+
| '::'
|
|
1429
|
+
|
|
1430
|
+
opt_terms:
|
|
1431
|
+
| terms
|
|
1432
|
+
|
|
1433
|
+
opt_nl:
|
|
1434
|
+
| '\\n'
|
|
1435
|
+
|
|
1436
|
+
trailer:
|
|
1437
|
+
| '\\n'
|
|
1438
|
+
| ','
|
|
1439
|
+
|
|
1440
|
+
term:
|
|
1441
|
+
';'
|
|
1442
|
+
| '\\n'
|
|
1443
|
+
|
|
1444
|
+
terms:
|
|
1445
|
+
term
|
|
1446
|
+
| terms ';'
|
|
1447
|
+
|
|
1448
|
+
none:
|
|
1449
|
+
|
|
1450
|
+
none_block_pass:
|
|
1451
|
+
|
|
1452
|
+
end
|
|
1453
|
+
|
|
1454
|
+
---- inner
|