rubinius-ast 1.3.0 → 2.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a80878e26807379f1033812a3b4696f07acdff5
4
- data.tar.gz: 4ed3c3310f69aa17f6115d113a7c8dfb2b540b72
3
+ metadata.gz: c50ef0b73b000204cb9e7a73a1c6efdeacd9477e
4
+ data.tar.gz: c2c2532d06bf487f2ca3ace10dea8eec45a263bc
5
5
  SHA512:
6
- metadata.gz: 208fd3f1cdfd68adf2f82695c8012b9c0806e56b68ef1730049d2489298299be8f78ba0a14775b067ad6535fa0f1d7d40f9305bbaa6a7c92d14ec7142411c05c
7
- data.tar.gz: 7e4f788c9b910342ab1a170ab47b3df0a14f2e17a21eb8a56b7a2d7590f0bf7841e46fb6af625cce69d1051bcdd4d3f6940d500e227c689330b307d1fe5effb5
6
+ metadata.gz: 23aba6963dd1e3e42d6721772ae6387e4ea3a176c54f847d6762185e3f50fb064021ffb213e12bb9301baf407610a3d7c06fd998bf345a4f12930098cedf44a3
7
+ data.tar.gz: e0b18cf80a291e1be52329e750396e57a872efe6d2027baba9dd55e4f163d047dbdb2f39a600dbb4f616d584f2fcb74cd7a67ecd40507ab2dc765993f973a7b2
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
 
6
6
  class TypeConstant < Node
@@ -204,8 +204,7 @@ module CodeTools
204
204
  pos(g)
205
205
 
206
206
  if g.state.op_asgn?
207
- g.push_rubinius
208
- g.find_const :Runtime
207
+ g.push_literal Compiler::Runtime
209
208
  g.push_literal @name
210
209
  g.push_scope
211
210
  g.send :find_constant_for_op_asign_or, 2
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class Case < Node
6
6
  attr_accessor :whens, :else
@@ -28,10 +28,6 @@ module CodeTools
28
28
  done.set!
29
29
  end
30
30
 
31
- def defined(g)
32
- g.push :nil
33
- end
34
-
35
31
  def receiver_sexp
36
32
  nil
37
33
  end
@@ -209,8 +205,7 @@ module CodeTools
209
205
  g.dup
210
206
  @condition.bytecode(g)
211
207
  g.cast_array
212
- g.push_rubinius
213
- g.find_const :Runtime
208
+ g.push_literal Compiler::Runtime
214
209
  g.rotate(3)
215
210
  g.send :matches_when, 2
216
211
  g.git body
@@ -272,16 +267,14 @@ module CodeTools
272
267
  end
273
268
 
274
269
  def get_flip_flop(g, index)
275
- g.push_rubinius
276
- g.find_const :Runtime
270
+ g.push_literal Compiler::Runtime
277
271
  g.push_scope
278
272
  g.push_literal index
279
273
  g.send(:get_flip_flop, 2)
280
274
  end
281
275
 
282
276
  def set_flip_flop(g, index, value)
283
- g.push_rubinius
284
- g.find_const :Runtime
277
+ g.push_literal Compiler::Runtime
285
278
  g.push_scope
286
279
  g.push_literal index
287
280
  g.push_literal value
@@ -335,10 +328,6 @@ module CodeTools
335
328
  done.set!
336
329
  end
337
330
 
338
- def defined(g)
339
- g.push :nil
340
- end
341
-
342
331
  def to_sexp
343
332
  else_sexp = @else.kind_of?(NilLiteral) ? nil : @else.to_sexp
344
333
  [:if, @condition.to_sexp, @body.to_sexp, else_sexp]
@@ -416,10 +405,6 @@ module CodeTools
416
405
  g.pop_modifiers
417
406
  end
418
407
 
419
- def defined(g)
420
- g.push :nil
421
- end
422
-
423
408
  def sexp_name
424
409
  :while
425
410
  end
@@ -566,10 +551,6 @@ module CodeTools
566
551
  end
567
552
  end
568
553
 
569
- def defined(g)
570
- g.push :nil
571
- end
572
-
573
554
  def sexp_name
574
555
  :break
575
556
  end
@@ -706,10 +687,6 @@ module CodeTools
706
687
  end
707
688
  end
708
689
 
709
- def defined(g)
710
- g.push :nil
711
- end
712
-
713
690
  def to_sexp
714
691
  sexp = [:return]
715
692
  sexp << @value.to_sexp if @value
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class EndData < Node
6
6
  attr_accessor :data
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class Alias < Node
6
6
  attr_accessor :to, :from
@@ -330,15 +330,7 @@ module CodeTools
330
330
  @required.size
331
331
  end
332
332
 
333
- def arity
334
- arity = required_args
335
-
336
- if @splat or not @optional.empty?
337
- arity = -(arity + 1)
338
- end
339
-
340
- arity
341
- end
333
+ alias_method :arity, :required_args
342
334
 
343
335
  def post_args
344
336
  0
@@ -447,11 +439,17 @@ module CodeTools
447
439
  splat = nil
448
440
  end
449
441
 
442
+ @post = []
450
443
  if post
451
- names.concat post
452
- @post = post
453
- else
454
- @post = []
444
+ post.each do |arg|
445
+ case arg
446
+ when MultipleAssignment
447
+ @post << PatternArguments.from_masgn(arg)
448
+ when Symbol
449
+ @post << arg
450
+ names << arg
451
+ end
452
+ end
455
453
  end
456
454
 
457
455
  if block
@@ -501,8 +499,18 @@ module CodeTools
501
499
 
502
500
  @defaults.map_arguments scope if @defaults
503
501
  scope.new_local @splat if @splat.kind_of? Symbol
504
- @post.each { |arg| scope.new_local arg }
502
+
503
+ @post.each do |arg|
504
+ case arg
505
+ when PatternArguments
506
+ arg.map_arguments scope
507
+ when Symbol
508
+ scope.new_local arg
509
+ end
510
+ end
511
+
505
512
  scope.assign_local_reference @block_arg if @block_arg
513
+
506
514
  end
507
515
 
508
516
  def bytecode(g)
@@ -516,9 +524,15 @@ module CodeTools
516
524
  g.pop
517
525
  end
518
526
  end
519
-
520
527
  @defaults.bytecode(g) if @defaults
521
528
  @block_arg.bytecode(g) if @block_arg
529
+ @post.each do |arg|
530
+ if arg.kind_of? PatternArguments
531
+ arg.argument.position_bytecode(g)
532
+ arg.bytecode(g)
533
+ g.pop
534
+ end
535
+ end
522
536
  g.state.check_for_locals = true
523
537
  end
524
538
  end
@@ -560,6 +574,7 @@ module CodeTools
560
574
  n = node.splat
561
575
  case n
562
576
  when EmptySplat
577
+ array << SplatPatternVariable.new(n.line, :*)
563
578
  when SplatAssignment, SplatWrapped, SplatArray
564
579
  array << SplatPatternVariable.new(n.value.line, n.value.name)
565
580
  end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class Encoding < Node
6
6
  attr_accessor :name
@@ -13,16 +13,11 @@ module CodeTools
13
13
  def bytecode(g)
14
14
  pos(g)
15
15
 
16
- g.push_rubinius
17
- g.find_const :Runtime
16
+ g.push_literal Compiler::Runtime
18
17
  g.push_literal @name
19
18
  g.send :get_encoding, 1
20
19
  end
21
20
 
22
- def defined(g)
23
- g.push_literal "expression"
24
- end
25
-
26
21
  def to_sexp
27
22
  [:encoding, @name]
28
23
  end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class Begin < Node
6
6
  attr_accessor :rescue
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class File < Node
6
6
  def bytecode(g)
@@ -10,10 +10,6 @@ module CodeTools
10
10
  g.send :active_path, 0
11
11
  end
12
12
 
13
- def defined(g)
14
- g.push_literal "expression"
15
- end
16
-
17
13
  def to_sexp
18
14
  [:file]
19
15
  end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class AsciiGrapher
6
6
  def initialize(ast, node_kind=Node)
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class ArrayLiteral < Node
6
6
  attr_accessor :body
@@ -446,21 +446,8 @@ module CodeTools
446
446
  end
447
447
 
448
448
  def defined(g)
449
- f = g.new_label
450
- done = g.new_label
451
-
452
- @array.each do |x|
453
- x.value_defined(g, f)
454
- g.pop
455
- end
456
-
457
449
  g.push_literal "expression"
458
- g.goto done
459
-
460
- f.set!
461
- g.push :nil
462
-
463
- done.set!
450
+ g.string_dup
464
451
  end
465
452
 
466
453
  def sexp_name
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class Node
6
6
  attr_accessor :line
@@ -64,7 +64,6 @@ module CodeTools
64
64
  blk.total_args = arguments.total_args
65
65
  blk.splat_index = arguments.splat_index
66
66
  blk.block_index = arguments.block_index
67
- blk.arity = arguments.arity
68
67
 
69
68
  blk
70
69
  end
@@ -80,7 +79,6 @@ module CodeTools
80
79
  meth.total_args = arguments.total_args
81
80
  meth.splat_index = arguments.splat_index
82
81
  meth.block_index = arguments.block_index
83
- meth.arity = arguments.arity
84
82
  end
85
83
 
86
84
  meth
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: us-ascii -*-
2
2
 
3
- module CodeTools
3
+ module Rubinius::ToolSet.current::TS
4
4
  module AST
5
5
  class And < Node
6
6
  attr_accessor :left, :right
@@ -28,35 +28,8 @@ module CodeTools
28
28
  end
29
29
 
30
30
  def defined(g)
31
- t = g.new_label
32
- f = g.new_label
33
- done = g.new_label
34
-
35
- case @left
36
- when GlobalVariableAccess, InstanceVariableAccess
37
- g.goto t
38
- else
39
- @left.value_defined(g, f)
40
- g.pop
41
- end
42
-
43
- case @right
44
- when GlobalVariableAccess, InstanceVariableAccess
45
- g.goto t
46
- else
47
- @right.value_defined(g, f)
48
- g.pop
49
- end
50
-
51
- t.set!
52
31
  g.push_literal "expression"
53
32
  g.string_dup
54
- g.goto done
55
-
56
- f.set!
57
- g.push :nil
58
-
59
- done.set!
60
33
  end
61
34
 
62
35
  def sexp_name
@@ -129,7 +102,7 @@ module CodeTools
129
102
  end
130
103
  end
131
104
 
132
- class OpAssignElement < Node
105
+ class OpAssign1 < Node
133
106
  attr_accessor :receiver, :op, :arguments, :value
134
107
 
135
108
  def initialize(line, receiver, arguments, op, value)
@@ -173,7 +146,6 @@ module CodeTools
173
146
  if @op == :or or @op == :and
174
147
  fnd = g.new_label
175
148
  fin = g.new_label
176
- assign = g.new_label
177
149
 
178
150
  # We dup the value from [] to leave it as the value of the
179
151
  # expression
@@ -190,25 +162,8 @@ module CodeTools
190
162
 
191
163
  # The receiver and arguments are still on the stack
192
164
 
193
- old_break = g.break
194
- new_break = g.new_label
195
- g.break = new_break
196
-
197
165
  @value.bytecode(g)
198
166
 
199
- g.goto assign
200
-
201
- new_break.set!
202
- if old_break
203
- g.pop_many recv_stack + 1
204
- g.push :nil
205
- g.goto old_break
206
- end
207
-
208
- g.break = old_break
209
-
210
- assign.set!
211
-
212
167
  # retain the rhs as the expression value
213
168
  g.dup
214
169
  g.move_down recv_stack + 1
@@ -233,30 +188,11 @@ module CodeTools
233
188
 
234
189
  fin.set!
235
190
  else
236
- assign = g.new_label
237
-
238
- old_break = g.break
239
- new_break = g.new_label
240
- g.break = new_break
241
-
242
191
  # @op is something like + or -
243
192
  # We pull in @value to the stack
244
193
  @value.bytecode(g)
245
194
  # X: 3 TOS
246
195
 
247
- g.goto assign
248
-
249
- new_break.set!
250
- if old_break
251
- g.pop_many recv_stack + 2
252
- g.push :nil
253
- g.goto old_break
254
- end
255
-
256
- g.break = old_break
257
-
258
- assign.set!
259
-
260
196
  # ... then call it as an argument to @or, called on the return
261
197
  # from [].
262
198
  # X: 2 + 3
@@ -279,26 +215,18 @@ module CodeTools
279
215
  else
280
216
  g.send :[]=, @arguments.size + 1
281
217
  end
282
-
283
218
  g.pop
284
219
  end
285
220
  end
286
221
 
287
222
  def to_sexp
288
223
  arguments = [:arglist] + @arguments.to_sexp
289
- case @op
290
- when :or
291
- op = :"||"
292
- when :and
293
- op = :"&&"
294
- else
295
- op = @op
296
- end
224
+ op = @op == :or ? :"||" : :"&&"
297
225
  [:op_asgn1, @receiver.to_sexp, arguments, op, @value.to_sexp]
298
226
  end
299
227
  end
300
228
 
301
- class OpAssignAttribute < Node
229
+ class OpAssign2 < Node
302
230
  attr_accessor :receiver, :name, :assign, :op, :value
303
231
 
304
232
  def initialize(line, receiver, name, op, value)
@@ -313,7 +241,7 @@ module CodeTools
313
241
  def bytecode(g)
314
242
  pos(g)
315
243
 
316
- # X: h.a += 3, given h.a == 2
244
+ # X: h[:a] += 3, given h.a == 2
317
245
  @receiver.bytecode(g)
318
246
  # X: TOS = h
319
247
  g.dup
@@ -323,7 +251,6 @@ module CodeTools
323
251
  if @op == :or or @op == :and
324
252
  fnd = g.new_label
325
253
  fin = g.new_label
326
- assign = g.new_label
327
254
 
328
255
  g.dup
329
256
  if @op == :or
@@ -334,26 +261,8 @@ module CodeTools
334
261
 
335
262
  # Remove the copy of 2 and push @value on the stack
336
263
  g.pop
337
-
338
- old_break = g.break
339
- new_break = g.new_label
340
- g.break = new_break
341
-
342
264
  @value.bytecode(g)
343
265
 
344
- g.goto assign
345
-
346
- new_break.set!
347
- if old_break
348
- g.pop_many 2
349
- g.push :nil
350
- g.goto old_break
351
- end
352
-
353
- g.break = old_break
354
-
355
- assign.set!
356
-
357
266
  # Retain the this value to use as the expression value
358
267
  g.dup
359
268
  g.move_down 2
@@ -372,27 +281,7 @@ module CodeTools
372
281
 
373
282
  fin.set!
374
283
  else
375
- assign = g.new_label
376
-
377
- old_break = g.break
378
- new_break = g.new_label
379
- g.break = new_break
380
-
381
284
  @value.bytecode(g)
382
-
383
- g.goto assign
384
-
385
- new_break.set!
386
- if old_break
387
- g.pop_many 3
388
- g.push :nil
389
- g.goto old_break
390
- end
391
-
392
- g.break = old_break
393
-
394
- assign.set!
395
-
396
285
  # X: TOS = 3
397
286
  # X: 2 + 3
398
287
  g.send @op, 1
@@ -410,14 +299,7 @@ module CodeTools
410
299
  end
411
300
 
412
301
  def to_sexp
413
- case @op
414
- when :or
415
- op = :"||"
416
- when :and
417
- op = :"&&"
418
- else
419
- op = @op
420
- end
302
+ op = @op == :or ? :"||" : :"&&"
421
303
  [:op_asgn2, @receiver.to_sexp, :"#{@name}=", op, @value.to_sexp]
422
304
  end
423
305
  end
@@ -469,5 +351,17 @@ module CodeTools
469
351
  :op_asgn_or
470
352
  end
471
353
  end
354
+
355
+ class OpAssignOr19 < OpAssignOr
356
+ def bytecode(g)
357
+ pos(g)
358
+
359
+ g.state.push_op_asgn
360
+ @left.or_bytecode(g) do
361
+ g.state.pop_op_asgn
362
+ @right.bytecode(g)
363
+ end
364
+ end
365
+ end
472
366
  end
473
367
  end