1 | ##
|
---|
2 | # Codegen tests
|
---|
3 |
|
---|
4 | assert('peephole optimization does not eliminate move whose result is reused') do
|
---|
5 | assert_raise LocalJumpError do
|
---|
6 | def method
|
---|
7 | yield
|
---|
8 | end
|
---|
9 | method(&a &&= 0)
|
---|
10 | end
|
---|
11 | end
|
---|
12 |
|
---|
13 | assert('empty condition in ternary expression parses correctly') do
|
---|
14 | assert_equal(() ? 1 : 2, 2)
|
---|
15 | end
|
---|
16 |
|
---|
17 | assert('method call with exactly 127 arguments') do
|
---|
18 | def args_to_ary(*args)
|
---|
19 | args
|
---|
20 | end
|
---|
21 |
|
---|
22 | assert_equal [0]*127, args_to_ary(
|
---|
23 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
---|
24 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
---|
25 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
---|
26 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
---|
27 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
|
---|
28 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
---|
29 | )
|
---|
30 | end
|
---|
31 |
|
---|
32 | assert('nested empty heredoc') do
|
---|
33 | _, a = nil, <<B
|
---|
34 | #{<<A}
|
---|
35 | A
|
---|
36 | B
|
---|
37 | assert_equal "\n", a
|
---|
38 | end
|
---|
39 |
|
---|
40 | assert('splat in case splat') do
|
---|
41 | a = *case
|
---|
42 | when 0
|
---|
43 | * = 1
|
---|
44 | end
|
---|
45 |
|
---|
46 | assert_equal [1], a
|
---|
47 | end
|
---|
48 |
|
---|
49 | assert('undef with 127 or more arguments') do
|
---|
50 | assert_raise NameError do
|
---|
51 | undef
|
---|
52 | a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
|
---|
53 | a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
|
---|
54 | a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
|
---|
55 | a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a
|
---|
56 | end
|
---|
57 | end
|
---|
58 |
|
---|
59 | assert('next in normal loop with 127 arguments') do
|
---|
60 | assert_raise NameError do
|
---|
61 | while true
|
---|
62 | next A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A
|
---|
63 | end
|
---|
64 | end
|
---|
65 | end
|
---|
66 |
|
---|
67 | assert('negate literal register alignment') do
|
---|
68 | a = *case
|
---|
69 | when 0
|
---|
70 | -0.0
|
---|
71 | 2
|
---|
72 | end
|
---|
73 |
|
---|
74 | assert_equal [2], a
|
---|
75 | end
|
---|