ruby2ruby 1.1.2 → 1.1.3

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/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ == 1.1.3 / 2006-12-20
2
+
3
+ * 1 minor enhancement
4
+ * Unit tests do self-translation and retesting for 3 generations! Solid. BAM!
5
+ * 1 bug fixes
6
+ * iasgn inside masgn was totally borked in ruby2ruby.
7
+
1
8
  == 1.1.2 / 2006-12-19
2
9
 
3
10
  * 2 minor enhancements
data/lib/ruby2ruby.rb CHANGED
@@ -11,9 +11,9 @@ class NilClass # Objective-C trick
11
11
  end
12
12
 
13
13
  class RubyToRuby < SexpProcessor
14
- VERSION = '1.1.2'
14
+ VERSION = '1.1.3'
15
15
 
16
- def self.translate(klass_or_str, method=nil)
16
+ def self.translate(klass_or_str, method = nil)
17
17
  self.new.process(ParseTree.translate(klass_or_str, method))
18
18
  end
19
19
 
@@ -448,7 +448,12 @@ class RubyToRuby < SexpProcessor
448
448
  end
449
449
 
450
450
  def process_iasgn(exp)
451
- "#{exp.shift} = #{process exp.shift}"
451
+ lhs = exp.shift
452
+ if exp.empty? then # part of an masgn
453
+ lhs.to_s
454
+ else
455
+ "#{lhs} = #{process exp.shift}"
456
+ end
452
457
  end
453
458
 
454
459
  def cond_indent_process(pt)
@@ -522,7 +527,7 @@ class RubyToRuby < SexpProcessor
522
527
 
523
528
  def process_masgn(exp)
524
529
  lhs = exp.shift
525
- rhs = exp.shift
530
+ rhs = exp.shift rescue nil
526
531
 
527
532
  assert_type lhs, :array
528
533
  lhs.shift
@@ -46,103 +46,27 @@ class TestRubyToRuby < Test::Unit::TestCase
46
46
  assert_equal out, @processor.rewrite_resbody(inn)
47
47
  end
48
48
 
49
+ eval ParseTreeTestCase.testcases.map { |node, data|
50
+ "def test_#{node}
51
+ pt = #{data['ParseTree'].inspect}
52
+ rb = #{(data['Ruby2Ruby'] || data['Ruby']).inspect}
49
53
 
50
- ParseTreeTestCase.testcases.each do |node, data|
51
- define_method :"test_#{node}" do
52
- pt = data['ParseTree'].deep_clone
53
- rb = (data['Ruby2Ruby'] || data['Ruby']).deep_clone
54
+ assert_not_nil pt, \"ParseTree for #{node} undefined\"
55
+ assert_not_nil rb, \"Ruby for #{node} undefined\"
54
56
 
55
- result = @processor.process(pt)
56
-
57
- assert_not_nil pt, "ParseTree for #{node} undefined"
58
- assert_not_nil rb, "Ruby for #{node} undefined"
59
- assert_equal rb, result
60
- end
61
- end
62
-
63
- def test_self_translation
64
- r2r2r = RubyToRuby.translate(RubyToRuby).sub("RubyToRuby","RubyToRubyToRuby")
65
-
66
- begin
67
- Object.class_eval r2r2r
68
- rescue SyntaxError => e
69
- $stderr.puts r2r2r
70
- flunk "syntax error, see above (#{e.inspect})"
71
- end
72
-
73
- r2r2r2 = RubyToRubyToRuby.translate(RubyToRuby).sub("RubyToRuby","RubyToRubyToRuby")
74
- r2r2r2r = RubyToRubyToRuby.translate(RubyToRubyToRuby)
75
- assert_equal(r2r2r, r2r2r2, "first generation must equal second generation")
76
- assert_equal(r2r2r, r2r2r2r, "first generation must equal third generation")
77
- end
78
-
79
- def hairy_method(z,x=10,y=20*z.abs,&blok)
80
- n = 1 + 2 * 40.0 / (z - 2)
81
- retried = false
82
- begin
83
- raise ArgumentError, n if retried
84
- n -= yield x,y,z,[z,x,y].map(&blok)
85
- n = n / 1.1 until n < 500 # TODO: translated isn't respecting post iter
86
- n = "hop hop #{"%.4f" % n}"
87
- raise n
88
- rescue RuntimeError => e
89
- raise if n != e.message
90
- n = lambda do |i|
91
- lambda do |j|
92
- "#{i} #{z+2*2} #{j.message.reverse}"
93
- end
94
- end[n].call(e)
95
- unless retried
96
- retried = true
97
- retry
98
- end
99
- rescue ArgumentError => e
100
- e.message
101
- rescue
102
- end
103
- ensure
104
- x << "ensure a-working"
105
- end
106
-
107
- def foobar a, &block; block.call(a) end
108
- def k; foobar [1,2,3].each { |x| x*2 } do |x| x*2 end end
109
-
110
- def test_block_precedence_escape
111
- eval RubyToRuby.translate(self.class, :k).sub(" k"," l")
112
- assert_equal(k, l)
113
- end
114
-
115
- def test_hairy_method
116
- src = RubyToRuby.translate(self.class, :hairy_method).sub(" h", " f")
57
+ assert_equal rb, @processor.process(pt)
58
+ end"
59
+ }.join("\n")
60
+ end
117
61
 
118
- eval src
62
+ # Self-Translation: 1st Generation
63
+ eval RubyToRuby.translate(RubyToRuby).sub("RubyToRuby", "RubyToRuby2")
119
64
 
120
- blk = lambda{|x,y,z,arr|
121
- unless y
122
- x.to_i*2
123
- else
124
- x.to_i*y*z*arr.inject(1){|s,i| s+i}
125
- end
126
- }
127
- x1 = ""
128
- x2 = ""
129
- res = [hairy_method(-5,x1,&blk), fairy_method(-5,x2,&blk)]
130
- assert_equal(res.first, res.last)
131
- assert_equal(x1, x2)
132
- assert_equal("ensure a-working", x1)
65
+ class TestRubyToRuby2 < TestRubyToRuby
66
+ def setup
67
+ @processor = RubyToRuby2.new
133
68
  end
134
69
  end
135
70
 
136
- # TODO: pass your tests through yourself and run them again
137
- # r2r2 = RubyToRuby.translate(RubyToRuby).sub("RubyToRuby","RubyToRuby2")
138
- # begin
139
- # Object.class_eval r2r2
140
- # rescue SyntaxError => e
141
- # $stderr.puts r2r2
142
- # flunk "syntax error, see above (#{e.inspect})"
143
- # end
144
- # class TestRubyToRubyToRuby < TestRubyToRuby
145
- # def setup
146
- # @processor = RubyToRuby2.new
147
- # end
148
- # end
71
+ # Self-Translation: 2nd Generation - against the tests this time
72
+ eval RubyToRuby2.translate(TestRubyToRuby).sub("TestRubyToRuby", "TestRubyToRuby3")
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: ruby2ruby
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.1.2
7
- date: 2006-12-19 00:00:00 -08:00
6
+ version: 1.1.3
7
+ date: 2006-12-20 00:00:00 -08:00
8
8
  summary: ruby2ruby provides a means of generating pure ruby code easily from ParseTree's Sexps.
9
9
  require_paths:
10
10
  - lib