opal 0.3.11 → 0.3.15
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +13 -0
- data/Gemfile +10 -0
- data/LICENSE +20 -0
- data/README.md +11 -116
- data/Rakefile +126 -0
- data/bin/opal +1 -2
- data/docs/spec_runner.html +16 -0
- data/index.html +434 -0
- data/lib/opal.rb +14 -15
- data/lib/opal/builder.rb +46 -148
- data/lib/opal/command.rb +45 -115
- data/lib/opal/context.rb +139 -78
- data/lib/opal/dependency_builder.rb +34 -0
- data/lib/opal/environment.rb +92 -0
- data/lib/opal/parser/grammar.rb +4915 -0
- data/lib/opal/{parser.y → parser/grammar.y} +430 -284
- data/lib/opal/parser/lexer.rb +1329 -0
- data/lib/opal/parser/parser.rb +1460 -0
- data/lib/opal/parser/scope.rb +140 -0
- data/lib/opal/parser/sexp.rb +17 -0
- data/lib/opal/version.rb +2 -1
- data/opal.gemspec +23 -0
- data/opal.js +3149 -4162
- data/runtime/README.md +25 -0
- data/runtime/corelib/alpha.rb +10 -0
- data/runtime/corelib/array.rb +962 -0
- data/runtime/corelib/basic_object.rb +66 -0
- data/runtime/corelib/boolean.rb +44 -0
- data/runtime/corelib/class.rb +43 -0
- data/runtime/corelib/comparable.rb +25 -0
- data/runtime/corelib/complex.rb +2 -0
- data/runtime/corelib/dir.rb +29 -0
- data/runtime/corelib/enumerable.rb +316 -0
- data/runtime/corelib/enumerator.rb +80 -0
- data/runtime/corelib/error.rb +25 -0
- data/runtime/corelib/file.rb +80 -0
- data/runtime/corelib/hash.rb +503 -0
- data/runtime/corelib/io.rb +44 -0
- data/runtime/corelib/kernel.rb +237 -0
- data/runtime/corelib/load_order +29 -0
- data/runtime/corelib/match_data.rb +37 -0
- data/runtime/corelib/module.rb +171 -0
- data/runtime/corelib/native.rb +50 -0
- data/runtime/corelib/nil_class.rb +47 -0
- data/runtime/corelib/numeric.rb +219 -0
- data/runtime/corelib/object.rb +21 -0
- data/runtime/corelib/proc.rb +42 -0
- data/runtime/corelib/range.rb +38 -0
- data/runtime/corelib/rational.rb +16 -0
- data/runtime/corelib/regexp.rb +63 -0
- data/runtime/corelib/string.rb +185 -0
- data/runtime/corelib/struct.rb +97 -0
- data/runtime/corelib/time.rb +196 -0
- data/runtime/corelib/top_self.rb +7 -0
- data/runtime/gemlib/alpha.rb +5 -0
- data/runtime/gemlib/kernel.rb +17 -0
- data/runtime/gemlib/load_order +2 -0
- data/runtime/kernel/class.js +256 -0
- data/runtime/kernel/debug.js +42 -0
- data/runtime/kernel/init.js +114 -0
- data/runtime/kernel/load_order +5 -0
- data/runtime/kernel/loader.js +151 -0
- data/runtime/kernel/runtime.js +414 -0
- data/runtime/spec/README.md +34 -0
- data/runtime/spec/core/array/allocate_spec.rb +15 -0
- data/runtime/spec/core/array/append_spec.rb +31 -0
- data/runtime/spec/core/array/assoc_spec.rb +29 -0
- data/runtime/spec/core/array/at_spec.rb +38 -0
- data/runtime/spec/core/array/clear_spec.rb +22 -0
- data/runtime/spec/core/array/collect_spec.rb +3 -0
- data/runtime/spec/core/array/compact_spec.rb +42 -0
- data/runtime/spec/core/array/concat_spec.rb +21 -0
- data/runtime/spec/core/array/constructor_spec.rb +24 -0
- data/runtime/spec/core/array/count_spec.rb +11 -0
- data/runtime/spec/core/array/delete_at_spec.rb +31 -0
- data/runtime/spec/core/array/delete_if_spec.rb +24 -0
- data/runtime/spec/core/array/delete_spec.rb +26 -0
- data/runtime/spec/core/array/each_index_spec.rb +33 -0
- data/runtime/spec/core/array/each_spec.rb +11 -0
- data/runtime/spec/core/array/element_reference_spec.rb +136 -0
- data/runtime/spec/core/array/element_set_spec.rb +7 -0
- data/runtime/spec/core/array/empty_spec.rb +10 -0
- data/runtime/spec/core/array/eql_spec.rb +3 -0
- data/runtime/spec/core/array/equal_value_spec.rb +3 -0
- data/runtime/spec/core/array/fetch_spec.rb +26 -0
- data/runtime/spec/core/array/first_spec.rb +54 -0
- data/runtime/spec/core/array/fixtures/classes.rb +8 -0
- data/runtime/spec/core/array/flatten_spec.rb +41 -0
- data/runtime/spec/core/array/include_spec.rb +20 -0
- data/runtime/spec/core/array/insert_spec.rb +59 -0
- data/runtime/spec/core/array/last_spec.rb +57 -0
- data/runtime/spec/core/array/length_spec.rb +3 -0
- data/runtime/spec/core/array/map_spec.rb +3 -0
- data/runtime/spec/core/array/plus_spec.rb +16 -0
- data/runtime/spec/core/array/pop_spec.rb +79 -0
- data/runtime/spec/core/array/push_spec.rb +19 -0
- data/runtime/spec/core/array/rassoc_spec.rb +12 -0
- data/runtime/spec/core/array/reject_spec.rb +54 -0
- data/runtime/spec/core/array/replace_spec.rb +3 -0
- data/runtime/spec/core/array/reverse_each_spec.rb +18 -0
- data/runtime/spec/core/array/reverse_spec.rb +9 -0
- data/runtime/spec/core/array/shared/collect.rb +53 -0
- data/runtime/spec/core/array/shared/eql.rb +19 -0
- data/runtime/spec/core/array/shared/length.rb +6 -0
- data/runtime/spec/core/array/shared/replace.rb +31 -0
- data/runtime/spec/core/class/new_spec.rb +19 -0
- data/runtime/spec/core/enumerable/all_spec.rb +102 -0
- data/runtime/spec/core/enumerable/any_spec.rb +115 -0
- data/runtime/spec/core/enumerable/collect_spec.rb +3 -0
- data/runtime/spec/core/enumerable/count_spec.rb +29 -0
- data/runtime/spec/core/enumerable/detect_spec.rb +3 -0
- data/runtime/spec/core/enumerable/find_spec.rb +3 -0
- data/runtime/spec/core/enumerable/fixtures/classes.rb +26 -0
- data/runtime/spec/core/enumerable/shared/collect.rb +12 -0
- data/runtime/spec/core/enumerable/shared/entries.rb +7 -0
- data/runtime/spec/core/enumerable/shared/find.rb +49 -0
- data/runtime/spec/core/enumerable/to_a_spec.rb +7 -0
- data/runtime/spec/core/false/and_spec.rb +11 -0
- data/runtime/spec/core/false/inspect_spec.rb +7 -0
- data/runtime/spec/core/false/or_spec.rb +11 -0
- data/runtime/spec/core/false/to_s_spec.rb +7 -0
- data/runtime/spec/core/false/xor_spec.rb +11 -0
- data/runtime/spec/core/hash/allocate_spec.rb +15 -0
- data/runtime/spec/core/hash/assoc_spec.rb +29 -0
- data/runtime/spec/core/hash/clear_spec.rb +21 -0
- data/runtime/spec/core/hash/clone_spec.rb +12 -0
- data/runtime/spec/core/hash/default_spec.rb +6 -0
- data/runtime/spec/core/hash/delete_if_spec.rb +15 -0
- data/runtime/spec/core/hash/element_reference_spec.rb +16 -0
- data/runtime/spec/core/hash/element_set_spec.rb +8 -0
- data/runtime/spec/core/hash/new_spec.rb +13 -0
- data/runtime/spec/core/matchdata/to_a_spec.rb +7 -0
- data/runtime/spec/core/nil/and_spec.rb +12 -0
- data/runtime/spec/core/nil/inspect_spec.rb +8 -0
- data/runtime/spec/core/nil/nil_spec.rb +8 -0
- data/runtime/spec/core/nil/or_spec.rb +12 -0
- data/runtime/spec/core/nil/to_a_spec.rb +8 -0
- data/runtime/spec/core/nil/to_f_spec.rb +12 -0
- data/runtime/spec/core/nil/to_i_spec.rb +12 -0
- data/runtime/spec/core/nil/to_s_spec.rb +8 -0
- data/runtime/spec/core/nil/xor_spec.rb +12 -0
- data/runtime/spec/core/numeric/equal_value_spec.rb +11 -0
- data/runtime/spec/core/object/is_a_spec.rb +2 -0
- data/runtime/spec/core/object/shared/kind_of.rb +0 -0
- data/runtime/spec/core/regexp/match_spec.rb +23 -0
- data/runtime/spec/core/regexp/shared/match.rb +11 -0
- data/runtime/spec/core/symbol/to_proc_spec.rb +8 -0
- data/runtime/spec/core/true/and_spec.rb +11 -0
- data/runtime/spec/core/true/inspect_spec.rb +7 -0
- data/runtime/spec/core/true/or_spec.rb +11 -0
- data/runtime/spec/core/true/to_s_spec.rb +7 -0
- data/runtime/spec/core/true/xor_spec.rb +11 -0
- data/runtime/spec/language/alias_spec.rb +25 -0
- data/runtime/spec/language/and_spec.rb +62 -0
- data/runtime/spec/language/array_spec.rb +68 -0
- data/runtime/spec/language/block_spec.rb +105 -0
- data/runtime/spec/language/break_spec.rb +49 -0
- data/runtime/spec/language/case_spec.rb +165 -0
- data/runtime/spec/language/defined_spec.rb +80 -0
- data/runtime/spec/language/ensure_spec.rb +82 -0
- data/runtime/spec/language/fixtures/block.rb +19 -0
- data/runtime/spec/language/fixtures/break.rb +39 -0
- data/runtime/spec/language/fixtures/defined.rb +9 -0
- data/runtime/spec/language/fixtures/ensure.rb +37 -0
- data/runtime/spec/language/fixtures/next.rb +46 -0
- data/runtime/spec/language/fixtures/send.rb +36 -0
- data/runtime/spec/language/fixtures/super.rb +43 -0
- data/runtime/spec/language/hash_spec.rb +43 -0
- data/runtime/spec/language/if_spec.rb +278 -0
- data/runtime/spec/language/loop_spec.rb +32 -0
- data/runtime/spec/language/next_spec.rb +128 -0
- data/runtime/spec/language/or_spec.rb +65 -0
- data/runtime/spec/language/predefined_spec.rb +21 -0
- data/runtime/spec/language/regexp/interpolation_spec.rb +9 -0
- data/runtime/spec/language/regexp_spec.rb +7 -0
- data/runtime/spec/language/send_spec.rb +105 -0
- data/runtime/spec/language/string_spec.rb +4 -0
- data/runtime/spec/language/super_spec.rb +18 -0
- data/runtime/spec/language/symbol_spec.rb +41 -0
- data/runtime/spec/language/undef_spec.rb +16 -0
- data/runtime/spec/language/unless_spec.rb +44 -0
- data/runtime/spec/language/until_spec.rb +137 -0
- data/runtime/spec/language/variables_spec.rb +28 -0
- data/runtime/spec/language/versions/hash_1.9.rb +20 -0
- data/runtime/spec/language/while_spec.rb +175 -0
- data/runtime/spec/library/stringscanner/scan_spec.rb +36 -0
- data/runtime/spec/opal/forwardable/def_instance_delegator_spec.rb +49 -0
- data/runtime/spec/opal/opal/defined_spec.rb +15 -0
- data/runtime/spec/opal/opal/function_spec.rb +11 -0
- data/runtime/spec/opal/opal/native_spec.rb +16 -0
- data/runtime/spec/opal/opal/null_spec.rb +10 -0
- data/runtime/spec/opal/opal/number_spec.rb +11 -0
- data/runtime/spec/opal/opal/object_spec.rb +16 -0
- data/runtime/spec/opal/opal/string_spec.rb +11 -0
- data/runtime/spec/opal/opal/typeof_spec.rb +9 -0
- data/runtime/spec/opal/opal/undefined_spec.rb +10 -0
- data/runtime/spec/opal/true/case_compare_spec.rb +12 -0
- data/runtime/spec/opal/true/class_spec.rb +10 -0
- data/runtime/spec/spec_helper.rb +25 -0
- data/runtime/stdlib/base64.rb +91 -0
- data/runtime/stdlib/date.rb +4 -0
- data/{stdlib → runtime/stdlib}/dev.rb +0 -0
- data/runtime/stdlib/forwardable.rb +33 -0
- data/runtime/stdlib/optparse.rb +0 -0
- data/runtime/stdlib/pp.rb +6 -0
- data/{stdlib → runtime/stdlib}/racc/parser.rb +0 -0
- data/runtime/stdlib/rbconfig.rb +0 -0
- data/runtime/stdlib/si.rb +17 -0
- data/runtime/stdlib/strscan.rb +53 -0
- data/runtime/stdlib/uri.rb +111 -0
- data/runtime/stdlib/uri/common.rb +1014 -0
- data/runtime/stdlib/uri/ftp.rb +261 -0
- data/runtime/stdlib/uri/generic.rb +1599 -0
- data/runtime/stdlib/uri/http.rb +106 -0
- data/runtime/stdlib/uri/https.rb +22 -0
- data/runtime/stdlib/uri/ldap.rb +260 -0
- data/runtime/stdlib/uri/ldaps.rb +20 -0
- data/runtime/stdlib/uri/mailto.rb +280 -0
- data/spec/builder/build_source_spec.rb +52 -0
- data/spec/builder/fixtures/build_source/adam.rb +0 -0
- data/spec/builder/fixtures/build_source/bar/a.rb +0 -0
- data/spec/builder/fixtures/build_source/bar/wow/b.rb +0 -0
- data/spec/builder/fixtures/build_source/bar/wow/cow/c.rb +0 -0
- data/spec/builder/fixtures/build_source/beynon.rb +0 -0
- data/spec/builder/fixtures/build_source/charles.js +0 -0
- data/spec/builder/fixtures/build_source/foo/a.rb +0 -0
- data/spec/builder/fixtures/build_source/foo/b.rb +0 -0
- data/spec/builder/fixtures/build_source/foo/x.js +0 -0
- data/spec/builder/fixtures/build_source/foo/y.js +0 -0
- data/spec/builder/output_path_spec.rb +50 -0
- data/spec/grammar/alias_spec.rb +26 -0
- data/spec/grammar/and_spec.rb +13 -0
- data/spec/grammar/array_spec.rb +22 -0
- data/spec/grammar/attrasgn_spec.rb +28 -0
- data/spec/grammar/begin_spec.rb +38 -0
- data/spec/grammar/block_spec.rb +12 -0
- data/spec/grammar/break_spec.rb +17 -0
- data/spec/grammar/call_spec.rb +58 -0
- data/spec/grammar/class_spec.rb +35 -0
- data/spec/grammar/const_spec.rb +13 -0
- data/spec/grammar/cvar_spec.rb +11 -0
- data/spec/grammar/def_spec.rb +60 -0
- data/spec/grammar/false_spec.rb +17 -0
- data/spec/grammar/file_spec.rb +7 -0
- data/spec/grammar/gvar_spec.rb +13 -0
- data/spec/grammar/hash_spec.rb +17 -0
- data/spec/grammar/iasgn_spec.rb +9 -0
- data/spec/grammar/if_spec.rb +26 -0
- data/spec/grammar/iter_spec.rb +59 -0
- data/spec/grammar/ivar_spec.rb +9 -0
- data/spec/grammar/lasgn_spec.rb +8 -0
- data/spec/grammar/line_spec.rb +8 -0
- data/spec/grammar/lvar_spec.rb +38 -0
- data/spec/grammar/module_spec.rb +27 -0
- data/spec/grammar/nil_spec.rb +17 -0
- data/spec/grammar/not_spec.rb +27 -0
- data/spec/grammar/op_asgn1_spec.rb +23 -0
- data/spec/grammar/op_asgn2_spec.rb +23 -0
- data/spec/grammar/or_spec.rb +13 -0
- data/spec/grammar/return_spec.rb +17 -0
- data/spec/grammar/sclass_spec.rb +20 -0
- data/spec/grammar/self_spec.rb +17 -0
- data/spec/grammar/str_spec.rb +96 -0
- data/spec/grammar/super_spec.rb +20 -0
- data/spec/grammar/true_spec.rb +17 -0
- data/spec/grammar/undef_spec.rb +15 -0
- data/spec/grammar/unless_spec.rb +13 -0
- data/spec/grammar/while_spec.rb +15 -0
- data/spec/grammar/xstr_spec.rb +116 -0
- data/spec/grammar/yield_spec.rb +20 -0
- data/spec/spec_helper.rb +9 -0
- metadata +346 -21
- data/lib/opal/bundle.rb +0 -34
- data/lib/opal/lexer.rb +0 -902
- data/lib/opal/nodes.rb +0 -2150
- data/lib/opal/parser.rb +0 -4894
- data/lib/opal/rake/bundle_task.rb +0 -63
- data/opal-parser.js +0 -8343
- data/stdlib/strscan.rb +0 -52
- data/templates/init/Rakefile +0 -7
- data/templates/init/index.html +0 -17
- data/templates/init/lib/__NAME__.rb +0 -2
@@ -1,4 +1,4 @@
|
|
1
|
-
class Opal::
|
1
|
+
class Opal::Grammar
|
2
2
|
|
3
3
|
token CLASS MODULE DEF UNDEF BEGIN RESCUE ENSURE END IF UNLESS
|
4
4
|
THEN ELSIF ELSE CASE WHEN WHILE UNTIL FOR BREAK NEXT
|
@@ -12,9 +12,9 @@ token CLASS MODULE DEF UNDEF BEGIN RESCUE ENSURE END IF UNLESS
|
|
12
12
|
'::' '::@' OP_ASGN '=>' PAREN_BEG '(' ')' tLPAREN_ARG
|
13
13
|
ARRAY_BEG ']' tLBRACE tLBRACE_ARG SPLAT '*' '&@' '&'
|
14
14
|
'~' '%' '/' '+' '-' '<' '>' '|' '!' '^'
|
15
|
-
|
15
|
+
LCURLY '}' BACK_REF2 SYMBOL_BEG STRING_BEG XSTRING_BEG REGEXP_BEG
|
16
16
|
WORDS_BEG AWORDS_BEG STRING_DBEG STRING_DVAR STRING_END STRING
|
17
|
-
SYMBOL '\\n' '?' ':' ',' SPACE ';' LABEL
|
17
|
+
SYMBOL '\\n' '?' ':' ',' SPACE ';' LABEL
|
18
18
|
|
19
19
|
prechigh
|
20
20
|
right '!' '~' '+@'
|
@@ -52,23 +52,29 @@ target:
|
|
52
52
|
bodystmt:
|
53
53
|
compstmt opt_rescue opt_else opt_ensure
|
54
54
|
{
|
55
|
-
result =
|
55
|
+
result = new_body val[0], val[1], val[2], val[3]
|
56
56
|
}
|
57
57
|
|
58
58
|
compstmt:
|
59
59
|
stmts opt_terms
|
60
60
|
{
|
61
|
-
|
61
|
+
comp = new_compstmt val[0]
|
62
|
+
if comp and comp[0] == :begin and comp.size == 2
|
63
|
+
result = comp[1]
|
64
|
+
result.line = comp.line
|
65
|
+
else
|
66
|
+
result = comp
|
67
|
+
end
|
62
68
|
}
|
63
69
|
|
64
70
|
stmts:
|
65
71
|
none
|
66
72
|
{
|
67
|
-
result =
|
73
|
+
result = new_block
|
68
74
|
}
|
69
75
|
| stmt
|
70
76
|
{
|
71
|
-
result =
|
77
|
+
result = new_block val[0]
|
72
78
|
}
|
73
79
|
| stmts terms stmt
|
74
80
|
{
|
@@ -78,35 +84,44 @@ stmts:
|
|
78
84
|
|
79
85
|
stmt:
|
80
86
|
ALIAS fitem fitem
|
87
|
+
{
|
88
|
+
result = s(:alias, val[1], val[2])
|
89
|
+
}
|
81
90
|
| ALIAS GVAR GVAR
|
91
|
+
{
|
92
|
+
result = s(:valias, val[1].intern, val[2].intern)
|
93
|
+
}
|
82
94
|
| ALIAS GVAR BACK_REF
|
83
95
|
| ALIAS GVAR NTH_REF
|
96
|
+
{
|
97
|
+
result = s(:valias, val[1].intern, val[2].intern)
|
98
|
+
}
|
84
99
|
| UNDEF undef_list
|
85
100
|
{
|
86
|
-
result =
|
101
|
+
result = val[1]
|
87
102
|
}
|
88
103
|
| stmt IF_MOD expr_value
|
89
104
|
{
|
90
|
-
result =
|
105
|
+
result = new_if val[2], val[0], nil
|
91
106
|
}
|
92
107
|
| stmt UNLESS_MOD expr_value
|
93
108
|
{
|
94
|
-
result =
|
109
|
+
result = new_if val[2], nil, val[0]
|
95
110
|
}
|
96
111
|
| stmt WHILE_MOD expr_value
|
97
112
|
{
|
98
|
-
result =
|
113
|
+
result = s(:while, val[2], val[0], true)
|
99
114
|
}
|
100
115
|
| stmt UNTIL_MOD expr_value
|
101
116
|
{
|
102
|
-
result =
|
117
|
+
result = s(:until, val[2], val[0], true)
|
103
118
|
}
|
104
119
|
| stmt RESCUE_MOD stmt
|
105
|
-
| klBEGIN
|
106
|
-
| klEND
|
120
|
+
| klBEGIN LCURLY compstmt '}'
|
121
|
+
| klEND LCURLY compstmt '}'
|
107
122
|
| lhs '=' command_call
|
108
123
|
{
|
109
|
-
result =
|
124
|
+
result = new_assign val[0], val[2]
|
110
125
|
}
|
111
126
|
| mlhs '=' command_call
|
112
127
|
{
|
@@ -114,7 +129,7 @@ stmt:
|
|
114
129
|
}
|
115
130
|
| var_lhs OP_ASGN command_call
|
116
131
|
{
|
117
|
-
result =
|
132
|
+
result = new_op_asgn val[1].intern, val[0], val[2]
|
118
133
|
}
|
119
134
|
| primary_value '[@' aref_args ']' OP_ASGN command_call
|
120
135
|
# {
|
@@ -122,12 +137,15 @@ stmt:
|
|
122
137
|
# }
|
123
138
|
| primary_value '.' IDENTIFIER OP_ASGN command_call
|
124
139
|
{
|
125
|
-
result =
|
140
|
+
result = s(:op_asgn2, val[0], "#{val[2]}=".intern, val[3].intern, val[4])
|
126
141
|
}
|
127
142
|
| primary_value '.' CONSTANT OP_ASGN command_call
|
128
143
|
| primary_value '::' IDENTIFIER OP_ASGN command_call
|
129
144
|
| backref OP_ASGN command_call
|
130
145
|
| lhs '=' mrhs
|
146
|
+
{
|
147
|
+
result = new_assign val[0], s(:svalue, val[2])
|
148
|
+
}
|
131
149
|
| mlhs '=' arg_value
|
132
150
|
{
|
133
151
|
result = MlhsAssignNode.new val[1], val[0], val[2]
|
@@ -142,19 +160,22 @@ expr:
|
|
142
160
|
command_call
|
143
161
|
| expr AND expr
|
144
162
|
{
|
145
|
-
result =
|
163
|
+
result = s(:and, val[0], val[2])
|
164
|
+
result.line = val[0].line
|
146
165
|
}
|
147
166
|
| expr OR expr
|
148
167
|
{
|
149
|
-
result =
|
168
|
+
result = s(:or, val[0], val[2])
|
169
|
+
result.line = val[0].line
|
150
170
|
}
|
151
171
|
| NOT expr
|
152
172
|
{
|
153
|
-
result =
|
173
|
+
result = s(:not, val[1])
|
174
|
+
result.line = val[1].line
|
154
175
|
}
|
155
176
|
| '!' command_call
|
156
177
|
{
|
157
|
-
result =
|
178
|
+
result = s(:not, val[1])
|
158
179
|
}
|
159
180
|
| arg
|
160
181
|
|
@@ -166,15 +187,21 @@ command_call:
|
|
166
187
|
| block_command
|
167
188
|
| RETURN call_args
|
168
189
|
{
|
169
|
-
|
190
|
+
args = val[1]
|
191
|
+
args = args[1] if args.size == 2
|
192
|
+
result = s(:return, args)
|
170
193
|
}
|
171
194
|
| BREAK call_args
|
172
195
|
{
|
173
|
-
|
196
|
+
args = val[1]
|
197
|
+
args = args[1] if args.size == 2
|
198
|
+
result = s(:break, args)
|
174
199
|
}
|
175
200
|
| NEXT call_args
|
176
201
|
{
|
177
|
-
|
202
|
+
args = val[1]
|
203
|
+
args = args[1] if args.size == 2
|
204
|
+
result = s(:next, args)
|
178
205
|
}
|
179
206
|
|
180
207
|
block_command:
|
@@ -188,12 +215,12 @@ cmd_brace_block:
|
|
188
215
|
command:
|
189
216
|
operation command_args =LOWEST
|
190
217
|
{
|
191
|
-
result =
|
218
|
+
result = new_call nil, val[0].intern, val[1]
|
192
219
|
}
|
193
220
|
| operation command_args cmd_brace_block
|
194
221
|
| primary_value '.' operation2 command_args =LOWEST
|
195
222
|
{
|
196
|
-
result =
|
223
|
+
result = new_call val[0], val[2].intern, val[3]
|
197
224
|
}
|
198
225
|
| primary_value '.' operation2 command_args cmd_brace_block
|
199
226
|
| primary_value '::' operation2 command_args =LOWEST
|
@@ -203,11 +230,11 @@ command:
|
|
203
230
|
| primary_value '::' operation2 command_args cmd_brace_block
|
204
231
|
| SUPER command_args
|
205
232
|
{
|
206
|
-
result =
|
233
|
+
result = new_super val[1]
|
207
234
|
}
|
208
235
|
| YIELD command_args
|
209
236
|
{
|
210
|
-
result =
|
237
|
+
result = new_yield val[1]
|
211
238
|
}
|
212
239
|
|
213
240
|
mlhs:
|
@@ -276,16 +303,27 @@ mlhs_node:
|
|
276
303
|
|
277
304
|
lhs:
|
278
305
|
variable
|
306
|
+
{
|
307
|
+
result = new_assignable val[0]
|
308
|
+
}
|
279
309
|
| primary_value '[@' aref_args ']'
|
280
310
|
{
|
281
|
-
|
311
|
+
args = val[2]
|
312
|
+
args[0] = :arglist if args[0] == :array
|
313
|
+
result = s(:attrasgn, val[0], :[]=, args)
|
282
314
|
}
|
283
315
|
| primary_value '.' IDENTIFIER
|
284
316
|
{
|
285
|
-
result =
|
317
|
+
result = s(:attrasgn, val[0], "#{val[2]}=".intern, s(:arglist))
|
286
318
|
}
|
287
319
|
| primary_value '::' IDENTIFIER
|
320
|
+
{
|
321
|
+
result = s(:attrasgn, val[0], "#{val[2]}=".intern, s(:arglist))
|
322
|
+
}
|
288
323
|
| primary_value '.' CONSTANT
|
324
|
+
{
|
325
|
+
result = s(:attrasgn, val[0], "#{val[2]}=".intern, s(:arglist))
|
326
|
+
}
|
289
327
|
| primary_value '::' CONSTANT
|
290
328
|
| '::@' CONSTANT
|
291
329
|
| backref
|
@@ -296,15 +334,15 @@ cname:
|
|
296
334
|
cpath:
|
297
335
|
'::@' cname
|
298
336
|
{
|
299
|
-
result =
|
337
|
+
result = s(:colon3, val[1].intern)
|
300
338
|
}
|
301
339
|
| cname
|
302
340
|
{
|
303
|
-
result =
|
341
|
+
result = val[0].intern
|
304
342
|
}
|
305
343
|
| primary_value '::' cname
|
306
344
|
{
|
307
|
-
result =
|
345
|
+
result = s(:colon2, val[0], val[2].intern)
|
308
346
|
}
|
309
347
|
|
310
348
|
fname:
|
@@ -312,16 +350,30 @@ fname:
|
|
312
350
|
| CONSTANT
|
313
351
|
| FID
|
314
352
|
| op
|
353
|
+
{
|
354
|
+
@lex_state = :expr_end
|
355
|
+
result = val[0]
|
356
|
+
}
|
315
357
|
| reswords
|
358
|
+
{
|
359
|
+
@lex_state = :expr_end
|
360
|
+
result = val[0]
|
361
|
+
}
|
316
362
|
|
317
363
|
fitem:
|
318
364
|
fname
|
365
|
+
{
|
366
|
+
result = s(:lit, val[0].intern)
|
367
|
+
}
|
319
368
|
| symbol
|
369
|
+
{
|
370
|
+
result = s(:lit, val[0])
|
371
|
+
}
|
320
372
|
|
321
373
|
undef_list:
|
322
374
|
fitem
|
323
375
|
{
|
324
|
-
result =
|
376
|
+
result = s(:undef, val[0])
|
325
377
|
}
|
326
378
|
| undef_list ',' fitem
|
327
379
|
{
|
@@ -347,20 +399,23 @@ reswords:
|
|
347
399
|
arg:
|
348
400
|
lhs '=' arg
|
349
401
|
{
|
350
|
-
result =
|
402
|
+
result = new_assign val[0], val[2]
|
351
403
|
}
|
352
404
|
| lhs '=' arg RESCUE_MOD arg
|
353
405
|
| var_lhs OP_ASGN arg
|
354
406
|
{
|
355
|
-
result =
|
407
|
+
result = new_op_asgn val[1].intern, val[0], val[2]
|
356
408
|
}
|
357
409
|
| primary_value '[@' aref_args ']' OP_ASGN arg
|
358
410
|
{
|
359
|
-
|
411
|
+
args = val[2]
|
412
|
+
args[0] = :arglist if args[0] == :array
|
413
|
+
result = s(:op_asgn1, val[0], val[2], val[4].intern, val[5])
|
414
|
+
result.line = val[0].line
|
360
415
|
}
|
361
416
|
| primary_value '.' IDENTIFIER OP_ASGN arg
|
362
417
|
{
|
363
|
-
result =
|
418
|
+
result = s(:op_asgn2, val[0], "#{val[2]}=".intern, val[3].intern, val[4])
|
364
419
|
}
|
365
420
|
| primary_value '.' CONSTANT OP_ASGN arg
|
366
421
|
| primary_value '::' IDENTIFIER OP_ASGN arg
|
@@ -369,124 +424,136 @@ arg:
|
|
369
424
|
| backref OP_ASGN arg
|
370
425
|
| arg '..' arg
|
371
426
|
{
|
372
|
-
result =
|
427
|
+
result = s(:dot2, val[0], val[2])
|
428
|
+
result.line = val[0].line
|
373
429
|
}
|
374
430
|
| arg '...' arg
|
375
431
|
{
|
376
|
-
result =
|
432
|
+
result = s(:dot3, val[0], val[2])
|
433
|
+
result.line = val[0].line
|
377
434
|
}
|
378
435
|
| arg '+' arg
|
379
436
|
{
|
380
|
-
result =
|
437
|
+
result = new_call val[0], :"+", s(:arglist, val[2])
|
381
438
|
}
|
382
439
|
| arg '-' arg
|
383
440
|
{
|
384
|
-
result =
|
441
|
+
result = new_call val[0], :"-", s(:arglist, val[2])
|
385
442
|
}
|
386
443
|
| arg '*' arg
|
387
444
|
{
|
388
|
-
result =
|
445
|
+
result = new_call val[0], :"*", s(:arglist, val[2])
|
389
446
|
}
|
390
447
|
| arg '/' arg
|
391
448
|
{
|
392
|
-
result =
|
449
|
+
result = new_call val[0], :"/", s(:arglist, val[2])
|
393
450
|
}
|
394
451
|
| arg '%' arg
|
395
452
|
{
|
396
|
-
result =
|
453
|
+
result = new_call val[0], :"%", s(:arglist, val[2])
|
397
454
|
}
|
398
455
|
| arg '**' arg
|
399
456
|
{
|
400
|
-
result =
|
457
|
+
result = new_call val[0], :"**", s(:arglist, val[2])
|
401
458
|
}
|
459
|
+
| '-@NUM' INTEGER '**' arg
|
460
|
+
| '-@NUM' FLOAT '**' arg
|
402
461
|
| '+@' arg
|
403
462
|
{
|
404
|
-
result =
|
463
|
+
result = new_call val[1], :"+@", s(:arglist)
|
464
|
+
result = val[1] if val[1][0] == :lit and Numeric === val[1][1]
|
405
465
|
}
|
406
466
|
| '-@' arg
|
407
467
|
{
|
408
|
-
result =
|
468
|
+
result = new_call val[1], :"-@", s(:arglist)
|
469
|
+
if val[1][0] == :lit and Numeric === val[1][1]
|
470
|
+
val[1][1] = -val[1][1]
|
471
|
+
result = val[1]
|
472
|
+
end
|
409
473
|
}
|
410
474
|
| arg '|' arg
|
411
475
|
{
|
412
|
-
result =
|
476
|
+
result = new_call val[0], :"|", s(:arglist, val[2])
|
413
477
|
}
|
414
478
|
| arg '^' arg
|
415
479
|
{
|
416
|
-
result =
|
480
|
+
result = new_call val[0], :"^", s(:arglist, val[2])
|
417
481
|
}
|
418
482
|
| arg '&' arg
|
419
483
|
{
|
420
|
-
result =
|
484
|
+
result = new_call val[0], :"&", s(:arglist, val[2])
|
421
485
|
}
|
422
486
|
| arg '<=>' arg
|
423
487
|
{
|
424
|
-
result =
|
488
|
+
result = new_call val[0], :"<=>", s(:arglist, val[2])
|
425
489
|
}
|
426
490
|
| arg '>' arg
|
427
491
|
{
|
428
|
-
result =
|
492
|
+
result = new_call val[0], :">", s(:arglist, val[2])
|
429
493
|
}
|
430
494
|
| arg '>=' arg
|
431
495
|
{
|
432
|
-
result =
|
496
|
+
result = new_call val[0], :">=", s(:arglist, val[2])
|
433
497
|
}
|
434
498
|
| arg '<' arg
|
435
499
|
{
|
436
|
-
result =
|
500
|
+
result = new_call val[0], :"<", s(:arglist, val[2])
|
437
501
|
}
|
438
502
|
| arg '<=' arg
|
439
503
|
{
|
440
|
-
result =
|
504
|
+
result = new_call val[0], :"<=", s(:arglist, val[2])
|
441
505
|
}
|
442
506
|
| arg '==' arg
|
443
507
|
{
|
444
|
-
result =
|
508
|
+
result = new_call val[0], :"==", s(:arglist, val[2])
|
445
509
|
}
|
446
510
|
| arg '===' arg
|
447
511
|
{
|
448
|
-
result =
|
512
|
+
result = new_call val[0], :"===", s(:arglist, val[2])
|
449
513
|
}
|
450
514
|
| arg '!=' arg
|
451
515
|
{
|
452
|
-
result =
|
516
|
+
result = s(:not, new_call(val[0], :"==", s(:arglist, val[2])))
|
453
517
|
}
|
454
518
|
| arg '=~' arg
|
455
519
|
{
|
456
|
-
result =
|
520
|
+
result = new_call val[0], :"=~", s(:arglist, val[2])
|
457
521
|
}
|
458
522
|
| arg '!~' arg
|
459
523
|
{
|
460
|
-
result =
|
524
|
+
result = s(:not, new_call(val[0], :"=~", s(:arglist, val[2])))
|
461
525
|
}
|
462
526
|
| '!' arg
|
463
527
|
{
|
464
|
-
result =
|
528
|
+
result = s(:not, val[1])
|
465
529
|
}
|
466
530
|
| '~' arg
|
467
531
|
{
|
468
|
-
result =
|
532
|
+
result = new_call val[1], :"~", s(:arglist)
|
469
533
|
}
|
470
534
|
| arg '<<' arg
|
471
535
|
{
|
472
|
-
result =
|
536
|
+
result = new_call val[0], :"<<", s(:arglist, val[2])
|
473
537
|
}
|
474
538
|
| arg '>>' arg
|
475
539
|
{
|
476
|
-
result =
|
540
|
+
result = new_call val[0], :">>", s(:arglist, val[2])
|
477
541
|
}
|
478
542
|
| arg '&&' arg
|
479
543
|
{
|
480
|
-
result =
|
544
|
+
result = s(:and, val[0], val[2])
|
545
|
+
result.line = val[0].line
|
481
546
|
}
|
482
547
|
| arg '||' arg
|
483
548
|
{
|
484
|
-
result =
|
549
|
+
result = s(:or, val[0], val[2])
|
550
|
+
result.line = val[0].line
|
485
551
|
}
|
486
552
|
| DEFINED opt_nl arg
|
487
553
|
| arg '?' arg ':' arg
|
488
554
|
{
|
489
|
-
result =
|
555
|
+
result = s(:if, val[0], val[2], val[4])
|
556
|
+
result.line = val[0].line
|
490
557
|
}
|
491
558
|
| primary
|
492
559
|
|
@@ -496,30 +563,24 @@ arg_value:
|
|
496
563
|
aref_args:
|
497
564
|
none
|
498
565
|
{
|
499
|
-
result =
|
566
|
+
result = nil
|
500
567
|
}
|
501
|
-
| command opt_nl
|
502
568
|
| args trailer
|
503
569
|
{
|
504
|
-
result =
|
505
|
-
}
|
506
|
-
| args ',' SPLAT arg opt_nl
|
507
|
-
{
|
508
|
-
result = [val[0], val[3]]
|
570
|
+
result = val[0]
|
509
571
|
}
|
510
572
|
| assocs trailer
|
511
573
|
{
|
512
|
-
result =
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
result = [[], val[1]]
|
574
|
+
result = s(:array, val[0])
|
575
|
+
#result.line = val[0].line
|
576
|
+
# FIXME:
|
577
|
+
result = s(:array)
|
517
578
|
}
|
518
579
|
|
519
580
|
paren_args:
|
520
581
|
'(' none ')'
|
521
582
|
{
|
522
|
-
result =
|
583
|
+
result = nil
|
523
584
|
}
|
524
585
|
| '(' call_args opt_nl ')'
|
525
586
|
{
|
@@ -530,61 +591,36 @@ paren_args:
|
|
530
591
|
|
531
592
|
opt_paren_args:
|
532
593
|
none
|
533
|
-
{
|
534
|
-
result = []
|
535
|
-
}
|
536
594
|
| paren_args
|
537
595
|
|
538
596
|
call_args:
|
539
597
|
command
|
540
598
|
{
|
541
|
-
result =
|
599
|
+
result = s(:array, val[0])
|
542
600
|
}
|
543
601
|
| args opt_block_arg
|
544
602
|
{
|
545
|
-
result =
|
546
|
-
|
547
|
-
| args ',' SPLAT arg_value opt_block_arg
|
548
|
-
{
|
549
|
-
result = [val[0], val[3], nil, val[4]]
|
603
|
+
result = val[0]
|
604
|
+
add_block_pass val[0], val[1]
|
550
605
|
}
|
551
606
|
| assocs opt_block_arg
|
552
607
|
{
|
553
|
-
result =
|
554
|
-
|
555
|
-
| assocs ',' SPLAT arg_value opt_block_arg
|
556
|
-
{
|
557
|
-
result = [nil, val[3], val[0], val[4]]
|
608
|
+
result = s(:arglist, s(:hash, *val[0]))
|
609
|
+
add_block_pass result, val[1]
|
558
610
|
}
|
559
611
|
| args ',' assocs opt_block_arg
|
560
612
|
{
|
561
|
-
result =
|
562
|
-
|
563
|
-
| args ',' assocs ',' SPLAT arg opt_block_arg
|
564
|
-
{
|
565
|
-
result = [val[0], val[5], val[2], val[6]]
|
566
|
-
}
|
567
|
-
| SPLAT arg_value opt_block_arg
|
568
|
-
{
|
569
|
-
result = [nil, val[1], nil, val[2]]
|
613
|
+
result = val[0]
|
614
|
+
result << s(:hash, *val[2])
|
570
615
|
}
|
571
616
|
| block_arg
|
572
617
|
{
|
573
|
-
result =
|
618
|
+
result = s(:arglist)
|
619
|
+
add_block_pass result, val[0]
|
574
620
|
}
|
575
621
|
|
576
622
|
call_args2:
|
577
623
|
arg_value ',' args opt_block_arg
|
578
|
-
| arg_value ',' block_arg
|
579
|
-
| arg_value ',' SPLAT arg_value opt_block_arg
|
580
|
-
| arg_value ',' args ',' SPLAT arg_value opt_block_arg
|
581
|
-
| assocs opt_block_arg
|
582
|
-
| assocs ',' SPLAT arg_value opt_block_arg
|
583
|
-
| arg_value ',' assocs opt_block_arg
|
584
|
-
| arg_value ',' args ',' assocs opt_block_arg
|
585
|
-
| arg_value ',' assocs ',' SPLAT arg_value opt_block_arg
|
586
|
-
| arg_value ',' args ',' assocs ',' SPLAT arg_value opt_block_arg
|
587
|
-
| SPLAT arg_value opt_block_arg
|
588
624
|
| block_arg
|
589
625
|
|
590
626
|
command_args:
|
@@ -601,7 +637,7 @@ open_args:
|
|
601
637
|
call_args
|
602
638
|
| tLPAREN_ARG ')'
|
603
639
|
{
|
604
|
-
result =
|
640
|
+
result = nil
|
605
641
|
}
|
606
642
|
| tLPAREN_ARG call_args2 ')'
|
607
643
|
{
|
@@ -611,7 +647,7 @@ open_args:
|
|
611
647
|
block_arg:
|
612
648
|
'&@' arg_value
|
613
649
|
{
|
614
|
-
result = val[1]
|
650
|
+
result = s(:block_pass, val[1])
|
615
651
|
}
|
616
652
|
|
617
653
|
opt_block_arg:
|
@@ -627,17 +663,32 @@ opt_block_arg:
|
|
627
663
|
args:
|
628
664
|
arg_value
|
629
665
|
{
|
630
|
-
result =
|
666
|
+
result = s(:array, val[0])
|
667
|
+
}
|
668
|
+
| SPLAT arg_value
|
669
|
+
{
|
670
|
+
result = s(:array, s(:splat, val[1]))
|
631
671
|
}
|
632
672
|
| args ',' arg_value
|
633
673
|
{
|
634
674
|
result = val[0] << val[2]
|
635
675
|
}
|
676
|
+
| args ',' SPLAT arg_value
|
677
|
+
{
|
678
|
+
result = val[0] << s(:splat, val[3])
|
679
|
+
}
|
636
680
|
|
637
681
|
mrhs:
|
638
682
|
args ',' arg_value
|
683
|
+
{
|
684
|
+
val[0] << val[2]
|
685
|
+
result = val[0]
|
686
|
+
}
|
639
687
|
| args ',' SPLAT arg_value
|
640
688
|
| SPLAT arg_value
|
689
|
+
{
|
690
|
+
result = s(:splat, val[1])
|
691
|
+
}
|
641
692
|
|
642
693
|
primary:
|
643
694
|
literal
|
@@ -649,74 +700,83 @@ primary:
|
|
649
700
|
| var_ref
|
650
701
|
| backref
|
651
702
|
| FID
|
652
|
-
| BEGIN
|
703
|
+
| BEGIN
|
653
704
|
{
|
654
|
-
result =
|
705
|
+
result = @line
|
706
|
+
}
|
707
|
+
bodystmt END
|
708
|
+
{
|
709
|
+
result = s(:begin, val[2])
|
710
|
+
result.line = val[1]
|
655
711
|
}
|
656
712
|
| tLPAREN_ARG expr opt_nl ')'
|
657
713
|
| PAREN_BEG compstmt ')'
|
658
714
|
{
|
659
|
-
result =
|
715
|
+
result = val[1] || s(:nil)
|
660
716
|
}
|
661
717
|
| primary_value '::' CONSTANT
|
662
718
|
{
|
663
|
-
result =
|
719
|
+
result = s(:colon2, val[0], val[2].intern)
|
664
720
|
}
|
665
721
|
| '::@' CONSTANT
|
666
722
|
{
|
667
|
-
result =
|
723
|
+
result = s(:colon3, val[1])
|
668
724
|
}
|
669
725
|
| primary_value '[@' aref_args ']'
|
670
726
|
{
|
671
|
-
result =
|
727
|
+
result = new_call val[0], :[], val[2]
|
672
728
|
}
|
673
729
|
| '[' aref_args ']'
|
674
730
|
{
|
675
|
-
result =
|
731
|
+
result = val[1] || s(:array)
|
676
732
|
}
|
677
733
|
| '{' assoc_list '}'
|
678
734
|
{
|
679
|
-
result =
|
735
|
+
result = s(:hash, *val[1])
|
680
736
|
}
|
681
737
|
| RETURN
|
682
738
|
{
|
683
|
-
result =
|
739
|
+
result = s(:return)
|
684
740
|
}
|
685
741
|
| YIELD '(' call_args ')'
|
686
742
|
{
|
687
|
-
result =
|
743
|
+
result = new_yield val[2]
|
688
744
|
}
|
689
745
|
| YIELD '(' ')'
|
690
746
|
{
|
691
|
-
result =
|
747
|
+
result = s(:yield)
|
692
748
|
}
|
693
749
|
| YIELD
|
694
750
|
{
|
695
|
-
result =
|
751
|
+
result = s(:yield)
|
696
752
|
}
|
697
753
|
| DEFINED opt_nl '(' expr ')'
|
754
|
+
{
|
755
|
+
result = s(:defined, val[3])
|
756
|
+
}
|
698
757
|
| operation brace_block
|
699
758
|
{
|
700
|
-
result =
|
701
|
-
result
|
759
|
+
result = val[1]
|
760
|
+
result[1] = new_call(nil, val[0].intern, s(:arglist))
|
702
761
|
}
|
703
762
|
| method_call
|
704
763
|
| method_call brace_block
|
705
764
|
{
|
706
|
-
result = val[
|
707
|
-
result
|
765
|
+
result = val[1]
|
766
|
+
result[1] = val[0]
|
708
767
|
}
|
709
768
|
| IF expr_value then compstmt if_tail END
|
710
769
|
{
|
711
|
-
result =
|
770
|
+
result = new_if val[1], val[3], val[4]
|
712
771
|
}
|
713
772
|
| UNLESS expr_value then compstmt opt_else END
|
714
773
|
{
|
715
|
-
result =
|
774
|
+
result = new_if val[1], val[4], val[3]
|
716
775
|
}
|
717
776
|
| WHILE
|
718
777
|
{
|
719
778
|
cond_push 1
|
779
|
+
result = @line
|
720
780
|
}
|
721
781
|
expr_value do
|
722
782
|
{
|
@@ -724,72 +784,123 @@ primary:
|
|
724
784
|
}
|
725
785
|
compstmt END
|
726
786
|
{
|
727
|
-
result =
|
787
|
+
result = s(:while, val[2], val[5], true)
|
788
|
+
result.line = val[1]
|
728
789
|
}
|
729
790
|
| UNTIL
|
730
791
|
{
|
731
|
-
|
792
|
+
cond_push 1
|
793
|
+
result = @line
|
732
794
|
}
|
733
795
|
expr_value do
|
734
796
|
{
|
735
|
-
|
797
|
+
cond_pop
|
736
798
|
}
|
737
799
|
compstmt END
|
738
800
|
{
|
739
|
-
result =
|
801
|
+
result = s(:until, val[2], val[5], true)
|
802
|
+
result.line = val[1]
|
740
803
|
}
|
741
804
|
| CASE expr_value opt_terms case_body END
|
742
805
|
{
|
743
|
-
result =
|
806
|
+
result = s(:case, val[1], *val[3])
|
807
|
+
result.line = val[1].line
|
744
808
|
}
|
745
809
|
| CASE opt_terms case_body END
|
746
810
|
{
|
747
|
-
result =
|
811
|
+
result = s(:case, nil, *val[2])
|
812
|
+
result.line = val[2].line
|
748
813
|
}
|
749
814
|
| CASE opt_terms ELSE compstmt END
|
815
|
+
{
|
816
|
+
result = s(:case, nil, val[3])
|
817
|
+
result.line = val[3].line
|
818
|
+
}
|
750
819
|
| FOR block_var IN
|
751
820
|
{
|
752
|
-
cond_push
|
821
|
+
result = "this.cond_push(1);"
|
753
822
|
}
|
754
823
|
expr_value do
|
755
824
|
{
|
756
|
-
cond_pop
|
825
|
+
result = "this.cond_pop();"
|
757
826
|
}
|
758
827
|
compstmt END
|
828
|
+
| CLASS
|
759
829
|
{
|
760
|
-
result =
|
830
|
+
result = @line
|
761
831
|
}
|
762
|
-
|
832
|
+
cpath superclass
|
763
833
|
{
|
764
|
-
|
834
|
+
# ...
|
765
835
|
}
|
766
|
-
|
836
|
+
bodystmt END
|
767
837
|
{
|
768
|
-
result =
|
838
|
+
result = new_class val[2], val[3], val[5]
|
839
|
+
result.line = val[1]
|
840
|
+
result.end_line = @line
|
769
841
|
}
|
770
|
-
|
|
842
|
+
| CLASS '<<'
|
771
843
|
{
|
772
|
-
result =
|
844
|
+
result = @line
|
773
845
|
}
|
774
|
-
|
846
|
+
expr term
|
775
847
|
{
|
776
|
-
|
848
|
+
# ...
|
777
849
|
}
|
778
|
-
|
850
|
+
bodystmt END
|
779
851
|
{
|
780
|
-
result =
|
852
|
+
result = new_sclass val[3], val[6]
|
853
|
+
result.line = val[2]
|
854
|
+
}
|
855
|
+
| MODULE
|
856
|
+
{
|
857
|
+
result = @line
|
858
|
+
}
|
859
|
+
cpath
|
860
|
+
{
|
861
|
+
# ...
|
862
|
+
}
|
863
|
+
bodystmt END
|
864
|
+
{
|
865
|
+
result = new_module val[2], val[4]
|
866
|
+
result.line = val[1]
|
867
|
+
result.end_line = @line
|
868
|
+
}
|
869
|
+
| DEF fname
|
870
|
+
{
|
871
|
+
result = @scope_line
|
872
|
+
push_scope
|
873
|
+
}
|
874
|
+
f_arglist bodystmt END
|
875
|
+
{
|
876
|
+
result = new_defn val[2], val[1], val[3], val[4]
|
877
|
+
pop_scope
|
878
|
+
}
|
879
|
+
| DEF singleton dot_or_colon
|
880
|
+
{
|
881
|
+
# ..
|
882
|
+
}
|
883
|
+
fname
|
884
|
+
{
|
885
|
+
result = @scope_line
|
886
|
+
push_scope
|
887
|
+
}
|
888
|
+
f_arglist bodystmt END
|
889
|
+
{
|
890
|
+
result = new_defs val[5], val[1], val[4], val[6], val[7]
|
891
|
+
pop_scope
|
781
892
|
}
|
782
893
|
| BREAK
|
783
894
|
{
|
784
|
-
result =
|
895
|
+
result = s(:break)
|
785
896
|
}
|
786
897
|
| NEXT
|
787
898
|
{
|
788
|
-
result =
|
899
|
+
result = s(:next)
|
789
900
|
}
|
790
901
|
| REDO
|
791
902
|
{
|
792
|
-
result =
|
903
|
+
result = s(:redo)
|
793
904
|
}
|
794
905
|
| RETRY
|
795
906
|
|
@@ -812,65 +923,67 @@ if_tail:
|
|
812
923
|
{
|
813
924
|
result = val[0]
|
814
925
|
}
|
815
|
-
| ELSIF
|
926
|
+
| ELSIF
|
816
927
|
{
|
817
|
-
result =
|
928
|
+
result = @line
|
929
|
+
}
|
930
|
+
expr_value then compstmt if_tail
|
931
|
+
{
|
932
|
+
result = s(:if, val[2], val[4], val[5])
|
933
|
+
result.line = val[1]
|
818
934
|
}
|
819
935
|
|
820
936
|
opt_else:
|
821
937
|
none
|
822
|
-
{
|
823
|
-
result = []
|
824
|
-
}
|
825
938
|
| ELSE compstmt
|
826
939
|
{
|
827
|
-
result =
|
940
|
+
result = val[1]
|
828
941
|
}
|
829
942
|
|
830
943
|
block_var:
|
831
944
|
block_var_args
|
832
945
|
{
|
833
|
-
result =
|
946
|
+
result = val[0]
|
834
947
|
}
|
835
948
|
|
836
949
|
block_var_args:
|
837
950
|
f_arg ',' f_block_optarg ',' f_rest_arg opt_f_block_arg
|
838
951
|
{
|
839
|
-
result =
|
952
|
+
result = new_block_args val[0], val[2], val[4], val[5]
|
840
953
|
}
|
841
954
|
| f_arg ',' f_block_optarg opt_f_block_arg
|
842
955
|
{
|
843
|
-
result =
|
956
|
+
result = new_block_args val[0], val[2], nil, val[3]
|
844
957
|
}
|
845
958
|
| f_arg ',' f_rest_arg opt_f_block_arg
|
846
959
|
{
|
847
|
-
result =
|
960
|
+
result = new_block_args val[0], nil, val[2], val[3]
|
848
961
|
}
|
849
962
|
| f_arg opt_f_block_arg
|
850
963
|
{
|
851
|
-
result =
|
964
|
+
result = new_block_args val[0], nil, nil, val[1]
|
852
965
|
}
|
853
966
|
| f_block_optarg ',' f_rest_arg opt_f_block_arg
|
854
967
|
{
|
855
|
-
result =
|
968
|
+
result = new_block_args nil, val[0], val[2], val[3]
|
856
969
|
}
|
857
970
|
| f_block_optarg opt_f_block_arg
|
858
971
|
{
|
859
|
-
result =
|
972
|
+
result = new_block_args nil, val[0], nil, val[1]
|
860
973
|
}
|
861
974
|
| f_rest_arg opt_f_block_arg
|
862
975
|
{
|
863
|
-
result =
|
976
|
+
result = new_block_args nil, nil, val[0], val[1]
|
864
977
|
}
|
865
978
|
| f_block_arg
|
866
979
|
{
|
867
|
-
result =
|
980
|
+
result = new_block_args nil, nil, nil, val[0]
|
868
981
|
}
|
869
982
|
|
870
983
|
f_block_optarg:
|
871
984
|
f_block_opt
|
872
985
|
{
|
873
|
-
result =
|
986
|
+
result = s(:block, val[0])
|
874
987
|
}
|
875
988
|
| f_block_optarg ',' f_block_opt
|
876
989
|
{
|
@@ -881,21 +994,18 @@ f_block_optarg:
|
|
881
994
|
f_block_opt:
|
882
995
|
IDENTIFIER '=' primary_value
|
883
996
|
{
|
884
|
-
result =
|
997
|
+
result = new_assign new_assignable(s(:identifier, val[0].intern)), val[2]
|
885
998
|
}
|
886
999
|
|
887
1000
|
opt_block_var:
|
888
1001
|
none
|
889
|
-
{
|
890
|
-
result = [nil]
|
891
|
-
}
|
892
1002
|
| '|' '|'
|
893
1003
|
{
|
894
|
-
result =
|
1004
|
+
result = 0
|
895
1005
|
}
|
896
1006
|
| '||'
|
897
1007
|
{
|
898
|
-
result =
|
1008
|
+
result = 0
|
899
1009
|
}
|
900
1010
|
| '|' block_var '|'
|
901
1011
|
{
|
@@ -905,18 +1015,21 @@ opt_block_var:
|
|
905
1015
|
do_block:
|
906
1016
|
DO_BLOCK
|
907
1017
|
{
|
908
|
-
|
1018
|
+
push_scope :block
|
1019
|
+
result = @line
|
909
1020
|
}
|
910
1021
|
opt_block_var compstmt END
|
911
1022
|
{
|
912
|
-
result =
|
1023
|
+
result = new_iter nil, val[2], val[3]
|
1024
|
+
result.line = val[1]
|
1025
|
+
pop_scope
|
913
1026
|
}
|
914
1027
|
|
915
1028
|
block_call:
|
916
1029
|
command do_block
|
917
1030
|
{
|
918
|
-
result = val[
|
919
|
-
|
1031
|
+
result = val[1]
|
1032
|
+
result[1] = val[0]
|
920
1033
|
}
|
921
1034
|
| block_call '.' operation2 opt_paren_args
|
922
1035
|
| block_call '::' operation2 opt_paren_args
|
@@ -924,71 +1037,85 @@ block_call:
|
|
924
1037
|
method_call:
|
925
1038
|
operation paren_args
|
926
1039
|
{
|
927
|
-
result =
|
1040
|
+
result = new_call nil, val[0].intern, val[1]
|
928
1041
|
}
|
929
1042
|
| primary_value '.' operation2 opt_paren_args
|
930
1043
|
{
|
931
|
-
result =
|
1044
|
+
result = new_call val[0], val[2].intern, val[3]
|
932
1045
|
}
|
933
1046
|
| primary_value '::' operation2 paren_args
|
934
1047
|
| primary_value '::' operation3
|
935
1048
|
| SUPER paren_args
|
936
1049
|
{
|
937
|
-
result =
|
1050
|
+
result = new_super val[1]
|
938
1051
|
}
|
939
1052
|
| SUPER
|
940
1053
|
{
|
941
|
-
result =
|
1054
|
+
result = s(:zsuper)
|
942
1055
|
}
|
943
1056
|
|
944
1057
|
brace_block:
|
945
|
-
|
1058
|
+
LCURLY
|
946
1059
|
{
|
947
|
-
|
1060
|
+
push_scope :block
|
1061
|
+
result = @line
|
948
1062
|
}
|
949
|
-
|
1063
|
+
opt_block_var compstmt '}'
|
950
1064
|
{
|
951
|
-
result =
|
1065
|
+
result = new_iter nil, val[2], val[3]
|
1066
|
+
result.line = val[1]
|
1067
|
+
pop_scope
|
952
1068
|
}
|
953
|
-
|
954
|
-
case_body:
|
955
|
-
WHEN when_args then compstmt cases
|
1069
|
+
| DO
|
956
1070
|
{
|
957
|
-
|
958
|
-
result =
|
1071
|
+
push_scope :block
|
1072
|
+
result = @line
|
959
1073
|
}
|
960
|
-
|
961
|
-
when_args:
|
962
|
-
args
|
1074
|
+
opt_block_var compstmt END
|
963
1075
|
{
|
964
|
-
result = val[
|
1076
|
+
result = new_iter nil, val[2], val[3]
|
1077
|
+
result.line = val[1]
|
1078
|
+
pop_scope
|
965
1079
|
}
|
966
|
-
|
1080
|
+
|
1081
|
+
case_body:
|
1082
|
+
WHEN
|
967
1083
|
{
|
968
|
-
result =
|
1084
|
+
result = @line
|
969
1085
|
}
|
970
|
-
|
1086
|
+
args then compstmt cases
|
971
1087
|
{
|
972
|
-
|
1088
|
+
part = s(:when, val[2], val[4])
|
1089
|
+
part.line = val[2].line
|
1090
|
+
result = [part]
|
1091
|
+
result.push *val[5] if val[5]
|
973
1092
|
}
|
974
1093
|
|
975
1094
|
cases:
|
976
1095
|
opt_else
|
1096
|
+
{
|
1097
|
+
result = [val[0]]
|
1098
|
+
}
|
977
1099
|
| case_body
|
978
1100
|
|
979
1101
|
opt_rescue:
|
980
1102
|
RESCUE exc_list exc_var then compstmt opt_rescue
|
981
1103
|
{
|
982
|
-
|
983
|
-
|
1104
|
+
exc = val[1] || s(:array)
|
1105
|
+
exc << new_assign(val[2], s(:gvar, '$!'.intern)) if val[2]
|
1106
|
+
result = [s(:resbody, exc, val[4])]
|
1107
|
+
result.push val[5].first if val[5]
|
984
1108
|
}
|
985
1109
|
|
|
986
1110
|
{
|
987
|
-
result =
|
1111
|
+
result = nil
|
988
1112
|
}
|
989
1113
|
|
990
1114
|
exc_list:
|
991
1115
|
arg_value
|
1116
|
+
{
|
1117
|
+
result = s(:array, val[0])
|
1118
|
+
}
|
992
1119
|
| mrhs
|
993
1120
|
| none
|
994
1121
|
|
@@ -1005,20 +1132,26 @@ exc_var:
|
|
1005
1132
|
opt_ensure:
|
1006
1133
|
ENSURE compstmt
|
1007
1134
|
{
|
1008
|
-
result = val[1]
|
1135
|
+
result = val[1].nil? ? s(:nil) : val[1]
|
1009
1136
|
}
|
1010
1137
|
| none
|
1011
|
-
{
|
1012
|
-
result = nil
|
1013
|
-
}
|
1014
1138
|
|
1015
1139
|
literal:
|
1016
1140
|
numeric
|
1141
|
+
{
|
1142
|
+
result = s(:lit, val[0])
|
1143
|
+
}
|
1017
1144
|
| symbol
|
1145
|
+
{
|
1146
|
+
result = s(:lit, val[0])
|
1147
|
+
}
|
1018
1148
|
| dsym
|
1019
1149
|
|
1020
1150
|
strings:
|
1021
1151
|
string
|
1152
|
+
{
|
1153
|
+
result = new_str val[0]
|
1154
|
+
}
|
1022
1155
|
|
1023
1156
|
string:
|
1024
1157
|
string1
|
@@ -1027,40 +1160,42 @@ string:
|
|
1027
1160
|
string1:
|
1028
1161
|
STRING_BEG string_contents STRING_END
|
1029
1162
|
{
|
1030
|
-
result =
|
1163
|
+
result = val[1]
|
1031
1164
|
}
|
1032
1165
|
| STRING
|
1033
1166
|
|
1034
1167
|
xstring:
|
1035
1168
|
XSTRING_BEG xstring_contents STRING_END
|
1036
1169
|
{
|
1037
|
-
result =
|
1170
|
+
result = new_xstr val[1]
|
1038
1171
|
}
|
1039
1172
|
|
1040
1173
|
regexp:
|
1041
1174
|
REGEXP_BEG xstring_contents REGEXP_END
|
1042
1175
|
{
|
1043
|
-
result =
|
1176
|
+
result = new_regexp val[1]
|
1044
1177
|
}
|
1045
1178
|
|
1046
1179
|
words:
|
1047
1180
|
WORDS_BEG SPACE STRING_END
|
1048
1181
|
{
|
1049
|
-
result =
|
1182
|
+
result = s(:array)
|
1050
1183
|
}
|
1051
1184
|
| WORDS_BEG word_list STRING_END
|
1052
1185
|
{
|
1053
|
-
result =
|
1186
|
+
result = val[1]
|
1054
1187
|
}
|
1055
1188
|
|
1056
1189
|
word_list:
|
1057
1190
|
none
|
1058
1191
|
{
|
1059
|
-
result =
|
1192
|
+
result = s(:array)
|
1060
1193
|
}
|
1061
1194
|
| word_list word SPACE
|
1062
1195
|
{
|
1063
|
-
|
1196
|
+
part = val[1]
|
1197
|
+
part = s(:dstr, "", val[1]) if part[0] == :evstr
|
1198
|
+
result = val[0] << part
|
1064
1199
|
}
|
1065
1200
|
|
1066
1201
|
word:
|
@@ -1076,75 +1211,95 @@ word:
|
|
1076
1211
|
awords:
|
1077
1212
|
AWORDS_BEG SPACE STRING_END
|
1078
1213
|
{
|
1079
|
-
result =
|
1214
|
+
result = s(:array)
|
1080
1215
|
}
|
1081
1216
|
| AWORDS_BEG qword_list STRING_END
|
1082
1217
|
{
|
1083
|
-
result =
|
1218
|
+
result = val[1]
|
1084
1219
|
}
|
1085
1220
|
|
1086
1221
|
qword_list:
|
1087
1222
|
none
|
1088
1223
|
{
|
1089
|
-
result =
|
1224
|
+
result = s(:array)
|
1090
1225
|
}
|
1091
1226
|
| qword_list STRING_CONTENT SPACE
|
1092
1227
|
{
|
1093
|
-
result = val[0]
|
1228
|
+
result = val[0] << s(:str, val[1])
|
1094
1229
|
}
|
1095
1230
|
|
1096
1231
|
string_contents:
|
1097
1232
|
none
|
1098
1233
|
{
|
1099
|
-
result =
|
1234
|
+
result = nil
|
1100
1235
|
}
|
1101
1236
|
| string_contents string_content
|
1102
1237
|
{
|
1103
|
-
result = val[0]
|
1238
|
+
result = str_append val[0], val[1]
|
1104
1239
|
}
|
1105
1240
|
|
1106
1241
|
xstring_contents:
|
1107
1242
|
none
|
1108
1243
|
{
|
1109
|
-
result =
|
1244
|
+
result = nil
|
1110
1245
|
}
|
1111
1246
|
| xstring_contents string_content
|
1112
1247
|
{
|
1113
|
-
result = val[0]
|
1248
|
+
result = str_append val[0], val[1]
|
1114
1249
|
}
|
1115
1250
|
|
1116
1251
|
string_content:
|
1117
1252
|
STRING_CONTENT
|
1118
1253
|
{
|
1119
|
-
result =
|
1254
|
+
result = s(:str, val[0])
|
1255
|
+
}
|
1256
|
+
| STRING_DVAR
|
1257
|
+
{
|
1258
|
+
result = @string_parse
|
1259
|
+
@string_parse = nil
|
1120
1260
|
}
|
1121
|
-
|
1261
|
+
string_dvar
|
1122
1262
|
{
|
1123
|
-
|
1263
|
+
@string_parse = val[1]
|
1264
|
+
result = s(:evstr, val[2])
|
1124
1265
|
}
|
1125
1266
|
| STRING_DBEG
|
1126
1267
|
{
|
1127
1268
|
cond_push 0
|
1128
1269
|
cmdarg_push 0
|
1270
|
+
result = @string_parse
|
1271
|
+
@string_parse = nil
|
1272
|
+
@lex_state = :expr_beg
|
1129
1273
|
}
|
1130
1274
|
compstmt '}'
|
1131
1275
|
{
|
1276
|
+
@string_parse = val[1]
|
1132
1277
|
cond_lexpop
|
1133
1278
|
cmdarg_lexpop
|
1134
|
-
result =
|
1279
|
+
result = s(:evstr, val[2])
|
1135
1280
|
}
|
1136
1281
|
|
1137
1282
|
string_dvar:
|
1138
1283
|
GVAR
|
1284
|
+
{
|
1285
|
+
result = s(:gvar, val[0].intern)
|
1286
|
+
}
|
1139
1287
|
| IVAR
|
1288
|
+
{
|
1289
|
+
result = s(:ivar, val[0].intern)
|
1290
|
+
}
|
1140
1291
|
| CVAR
|
1292
|
+
{
|
1293
|
+
result = s(:cvar, val[0].intern)
|
1294
|
+
}
|
1141
1295
|
| backref
|
1142
1296
|
|
1143
1297
|
|
1144
1298
|
symbol:
|
1145
1299
|
SYMBOL_BEG sym
|
1146
1300
|
{
|
1147
|
-
result =
|
1301
|
+
result = val[1].intern
|
1302
|
+
@lex_state = :expr_end
|
1148
1303
|
}
|
1149
1304
|
| SYMBOL
|
1150
1305
|
|
@@ -1156,80 +1311,72 @@ sym: fname
|
|
1156
1311
|
dsym:
|
1157
1312
|
SYMBOL_BEG xstring_contents STRING_END
|
1158
1313
|
{
|
1159
|
-
result =
|
1314
|
+
result = new_dsym val[1]
|
1160
1315
|
}
|
1161
1316
|
|
1162
1317
|
numeric:
|
1163
1318
|
INTEGER
|
1164
|
-
{
|
1165
|
-
result = NumericNode.new val[0]
|
1166
|
-
}
|
1167
1319
|
| FLOAT
|
1168
|
-
{
|
1169
|
-
result = NumericNode.new val[0]
|
1170
|
-
}
|
1171
1320
|
| '-@NUM' INTEGER =LOWEST
|
1172
1321
|
| '-@NUM' FLOAT =LOWEST
|
1173
1322
|
|
1174
1323
|
variable:
|
1175
1324
|
IDENTIFIER
|
1176
1325
|
{
|
1177
|
-
result =
|
1326
|
+
result = s(:identifier, val[0].intern)
|
1178
1327
|
}
|
1179
1328
|
| IVAR
|
1180
1329
|
{
|
1181
|
-
result =
|
1330
|
+
result = s(:ivar, val[0].intern)
|
1182
1331
|
}
|
1183
1332
|
| GVAR
|
1184
1333
|
{
|
1185
|
-
result =
|
1334
|
+
result = s(:gvar, val[0].intern)
|
1186
1335
|
}
|
1187
1336
|
| CONSTANT
|
1188
1337
|
{
|
1189
|
-
result =
|
1338
|
+
result = s(:const, val[0].intern)
|
1190
1339
|
}
|
1191
1340
|
| CVAR
|
1192
1341
|
{
|
1193
|
-
result =
|
1342
|
+
result = s(:cvar, val[0].intern)
|
1194
1343
|
}
|
1195
1344
|
| NIL
|
1196
1345
|
{
|
1197
|
-
result =
|
1198
|
-
}
|
1199
|
-
| UNDEFINED
|
1200
|
-
{
|
1201
|
-
result = UndefinedNode.new val[0]
|
1202
|
-
}
|
1203
|
-
| NULL
|
1204
|
-
{
|
1205
|
-
result = NullNode.new val[0]
|
1346
|
+
result = s(:nil)
|
1206
1347
|
}
|
1207
1348
|
| SELF
|
1208
1349
|
{
|
1209
|
-
result =
|
1350
|
+
result = s(:self)
|
1210
1351
|
}
|
1211
1352
|
| TRUE
|
1212
1353
|
{
|
1213
|
-
result =
|
1354
|
+
result = s(:true)
|
1214
1355
|
}
|
1215
1356
|
| FALSE
|
1216
1357
|
{
|
1217
|
-
result =
|
1358
|
+
result = s(:false)
|
1218
1359
|
}
|
1219
1360
|
| FILE
|
1220
1361
|
{
|
1221
|
-
result =
|
1362
|
+
result = s(:str, @file)
|
1222
1363
|
}
|
1223
1364
|
| LINE
|
1224
1365
|
{
|
1225
|
-
result =
|
1366
|
+
result = s(:lit, @line)
|
1226
1367
|
}
|
1227
1368
|
|
1228
1369
|
var_ref:
|
1229
1370
|
variable
|
1371
|
+
{
|
1372
|
+
result = new_var_ref val[0]
|
1373
|
+
}
|
1230
1374
|
|
1231
1375
|
var_lhs:
|
1232
1376
|
variable
|
1377
|
+
{
|
1378
|
+
result = new_assignable val[0]
|
1379
|
+
}
|
1233
1380
|
|
1234
1381
|
backref:
|
1235
1382
|
NTH_REF
|
@@ -1262,59 +1409,63 @@ f_arglist:
|
|
1262
1409
|
f_args:
|
1263
1410
|
f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
|
1264
1411
|
{
|
1265
|
-
result =
|
1412
|
+
result = new_args val[0], val[2], val[4], val[5]
|
1266
1413
|
}
|
1267
1414
|
| f_arg ',' f_optarg opt_f_block_arg
|
1268
1415
|
{
|
1269
|
-
result =
|
1416
|
+
result = new_args val[0], val[2], nil, val[3]
|
1270
1417
|
}
|
1271
1418
|
| f_arg ',' f_rest_arg opt_f_block_arg
|
1272
1419
|
{
|
1273
|
-
result =
|
1420
|
+
result = new_args val[0], nil, val[2], val[3]
|
1274
1421
|
}
|
1275
1422
|
| f_arg opt_f_block_arg
|
1276
1423
|
{
|
1277
|
-
result =
|
1424
|
+
result = new_args val[0], nil, nil, val[1]
|
1278
1425
|
}
|
1279
1426
|
| f_optarg ',' f_rest_arg opt_f_block_arg
|
1280
1427
|
{
|
1281
|
-
|
1428
|
+
result = new_args nil, val[0], val[2], val[3]
|
1282
1429
|
}
|
1283
1430
|
| f_optarg opt_f_block_arg
|
1284
1431
|
{
|
1285
|
-
result =
|
1432
|
+
result = new_args nil, val[0], nil, val[1]
|
1286
1433
|
}
|
1287
1434
|
| f_rest_arg opt_f_block_arg
|
1288
1435
|
{
|
1289
|
-
result =
|
1436
|
+
result = new_args nil, nil, val[0], val[1]
|
1290
1437
|
}
|
1291
1438
|
| f_block_arg
|
1292
1439
|
{
|
1293
|
-
result =
|
1440
|
+
result = new_args nil, nil, nil, val[0]
|
1294
1441
|
}
|
1295
1442
|
|
|
1296
1443
|
{
|
1297
|
-
result =
|
1444
|
+
result = s(:args)
|
1298
1445
|
}
|
1299
1446
|
|
1300
1447
|
f_norm_arg:
|
1301
1448
|
CONSTANT
|
1302
1449
|
{
|
1303
|
-
|
1450
|
+
raise 'formal argument cannot be a constant'
|
1304
1451
|
}
|
1305
1452
|
| IVAR
|
1306
1453
|
{
|
1307
|
-
|
1454
|
+
raise 'formal argument cannot be an instance variable'
|
1308
1455
|
}
|
1309
1456
|
| CVAR
|
1310
1457
|
{
|
1311
|
-
|
1458
|
+
raise 'formal argument cannot be a class variable'
|
1312
1459
|
}
|
1313
1460
|
| GVAR
|
1314
1461
|
{
|
1315
|
-
|
1462
|
+
raise 'formal argument cannot be a global variable'
|
1316
1463
|
}
|
1317
1464
|
| IDENTIFIER
|
1465
|
+
{
|
1466
|
+
result = val[0].intern
|
1467
|
+
@scope.add_local result
|
1468
|
+
}
|
1318
1469
|
|
1319
1470
|
f_arg:
|
1320
1471
|
f_norm_arg
|
@@ -1330,13 +1481,13 @@ f_arg:
|
|
1330
1481
|
f_opt:
|
1331
1482
|
IDENTIFIER '=' arg_value
|
1332
1483
|
{
|
1333
|
-
result =
|
1484
|
+
result = new_assign new_assignable(s(:identifier, val[0].intern)), val[2]
|
1334
1485
|
}
|
1335
1486
|
|
1336
1487
|
f_optarg:
|
1337
1488
|
f_opt
|
1338
1489
|
{
|
1339
|
-
result =
|
1490
|
+
result = s(:block, val[0])
|
1340
1491
|
}
|
1341
1492
|
| f_optarg ',' f_opt
|
1342
1493
|
{
|
@@ -1351,11 +1502,11 @@ restarg_mark:
|
|
1351
1502
|
f_rest_arg:
|
1352
1503
|
restarg_mark IDENTIFIER
|
1353
1504
|
{
|
1354
|
-
result = val[1]
|
1505
|
+
result = "*#{val[1]}".intern
|
1355
1506
|
}
|
1356
1507
|
| restarg_mark
|
1357
1508
|
{
|
1358
|
-
result =
|
1509
|
+
result = :"*"
|
1359
1510
|
}
|
1360
1511
|
|
1361
1512
|
blkarg_mark:
|
@@ -1365,7 +1516,7 @@ blkarg_mark:
|
|
1365
1516
|
f_block_arg:
|
1366
1517
|
blkarg_mark IDENTIFIER
|
1367
1518
|
{
|
1368
|
-
result = val[1]
|
1519
|
+
result = "&#{val[1]}".intern
|
1369
1520
|
}
|
1370
1521
|
|
1371
1522
|
opt_f_block_arg:
|
@@ -1405,11 +1556,11 @@ assoc_list:
|
|
1405
1556
|
assocs:
|
1406
1557
|
assoc
|
1407
1558
|
{
|
1408
|
-
result =
|
1559
|
+
result = val[0]
|
1409
1560
|
}
|
1410
1561
|
| assocs ',' assoc
|
1411
1562
|
{
|
1412
|
-
result = val[0]
|
1563
|
+
result = val[0].push *val[2]
|
1413
1564
|
}
|
1414
1565
|
|
1415
1566
|
assoc:
|
@@ -1419,7 +1570,7 @@ assoc:
|
|
1419
1570
|
}
|
1420
1571
|
| LABEL arg_value
|
1421
1572
|
{
|
1422
|
-
result = [
|
1573
|
+
result = [s(:lit, val[0].intern), val[1]]
|
1423
1574
|
}
|
1424
1575
|
|
1425
1576
|
operation:
|
@@ -1466,9 +1617,4 @@ none_block_pass:
|
|
1466
1617
|
|
1467
1618
|
end
|
1468
1619
|
|
1469
|
-
---- header
|
1470
|
-
|
1471
|
-
require 'opal/lexer'
|
1472
|
-
require 'opal/nodes'
|
1473
|
-
|
1474
1620
|
---- inner
|