rubyjs 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. data/README +128 -0
  2. data/Rakefile +9 -0
  3. data/bin/rubyjs +140 -0
  4. data/examples/ex1/Rakefile +7 -0
  5. data/examples/ex1/ex1.js +771 -0
  6. data/examples/ex1/ex1.rb +42 -0
  7. data/examples/ex1/index.html +7 -0
  8. data/examples/hw/Rakefile +9 -0
  9. data/examples/hw/hw.js +635 -0
  10. data/examples/hw/hw.rb +7 -0
  11. data/examples/hw/index.html +7 -0
  12. data/patches/parse_tree.rb.diff +34 -0
  13. data/rubyjs.gemspec +24 -0
  14. data/src/rubyjs.rb +4 -0
  15. data/src/rubyjs/code_generator.rb +474 -0
  16. data/src/rubyjs/compiler.rb +2007 -0
  17. data/src/rubyjs/debug_name_generator.rb +75 -0
  18. data/src/rubyjs/encoder.rb +171 -0
  19. data/src/rubyjs/eval_into.rb +59 -0
  20. data/src/rubyjs/lib/core.rb +1008 -0
  21. data/src/rubyjs/lib/json.rb +101 -0
  22. data/src/rubyjs/model.rb +287 -0
  23. data/src/rubyjs/name_generator.rb +71 -0
  24. data/src/rwt/AbsolutePanel.rb +161 -0
  25. data/src/rwt/DOM.Konqueror.rb +89 -0
  26. data/src/rwt/DOM.Opera.rb +65 -0
  27. data/src/rwt/DOM.rb +1044 -0
  28. data/src/rwt/Event.Opera.rb +35 -0
  29. data/src/rwt/Event.rb +429 -0
  30. data/src/rwt/HTTPRequest.IE6.rb +5 -0
  31. data/src/rwt/HTTPRequest.rb +74 -0
  32. data/src/rwt/Label.rb +164 -0
  33. data/src/rwt/Panel.rb +90 -0
  34. data/src/rwt/RootPanel.rb +16 -0
  35. data/src/rwt/UIObject.rb +495 -0
  36. data/src/rwt/Widget.rb +193 -0
  37. data/src/rwt/ported-from/AbsolutePanel.java +158 -0
  38. data/src/rwt/ported-from/DOM.java +571 -0
  39. data/src/rwt/ported-from/DOMImpl.java +426 -0
  40. data/src/rwt/ported-from/DOMImplOpera.java +82 -0
  41. data/src/rwt/ported-from/DOMImplStandard.java +234 -0
  42. data/src/rwt/ported-from/HTTPRequest.java +81 -0
  43. data/src/rwt/ported-from/HTTPRequestImpl.java +103 -0
  44. data/src/rwt/ported-from/Label.java +163 -0
  45. data/src/rwt/ported-from/Panel.java +99 -0
  46. data/src/rwt/ported-from/UIObject.java +614 -0
  47. data/src/rwt/ported-from/Widget.java +221 -0
  48. data/test/benchmark/bm_call_conv1.js +16 -0
  49. data/test/benchmark/bm_call_conv2.js +14 -0
  50. data/test/benchmark/bm_var_acc1.js +13 -0
  51. data/test/benchmark/bm_var_acc2.js +11 -0
  52. data/test/benchmark/bm_vm1_block.js +15 -0
  53. data/test/benchmark/bm_vm1_block.rb +15 -0
  54. data/test/benchmark/bm_vm1_const.js +13 -0
  55. data/test/benchmark/bm_vm1_const.rb +13 -0
  56. data/test/benchmark/bm_vm1_ensure.js +17 -0
  57. data/test/benchmark/bm_vm1_ensure.rb +15 -0
  58. data/test/benchmark/common.js +4 -0
  59. data/test/benchmark/common.rb +5 -0
  60. data/test/benchmark/params.yaml +7 -0
  61. data/test/browser.test.html +4059 -0
  62. data/test/browser.test.js +3225 -0
  63. data/test/common.Browser.rb +13 -0
  64. data/test/common.rb +8 -0
  65. data/test/gen_browser_test_suite.rb +129 -0
  66. data/test/gen_test_suite.rb +41 -0
  67. data/test/run_benchs.rb +58 -0
  68. data/test/run_tests.rb +22 -0
  69. data/test/test_args.rb +24 -0
  70. data/test/test_array.rb +26 -0
  71. data/test/test_case.rb +35 -0
  72. data/test/test_class.rb +55 -0
  73. data/test/test_eql.rb +9 -0
  74. data/test/test_exception.rb +61 -0
  75. data/test/test_expr.rb +12 -0
  76. data/test/test_hash.rb +29 -0
  77. data/test/test_if.rb +28 -0
  78. data/test/test_inspect.rb +10 -0
  79. data/test/test_lebewesen.rb +39 -0
  80. data/test/test_massign.rb +66 -0
  81. data/test/test_new.rb +12 -0
  82. data/test/test_range.rb +53 -0
  83. data/test/test_regexp.rb +22 -0
  84. data/test/test_send.rb +65 -0
  85. data/test/test_simple_output.rb +5 -0
  86. data/test/test_splat.rb +21 -0
  87. data/test/test_string.rb +51 -0
  88. data/test/test_yield.rb +152 -0
  89. data/utils/js/Makefile +9 -0
  90. data/utils/js/RunScript.class +0 -0
  91. data/utils/js/RunScript.java +73 -0
  92. data/utils/js/js.jar +0 -0
  93. data/utils/js/run.sh +3 -0
  94. data/utils/jsc/Makefile +7 -0
  95. data/utils/jsc/README +3 -0
  96. data/utils/jsc/RunScript.c +93 -0
  97. data/utils/jsc/run.sh +15 -0
  98. data/utils/yuicompressor/README +1 -0
  99. data/utils/yuicompressor/yuicompressor-2.2.5.jar +0 -0
  100. data/vendor/ParseTree-1.7.1-patched/History.txt +217 -0
  101. data/vendor/ParseTree-1.7.1-patched/Manifest.txt +22 -0
  102. data/vendor/ParseTree-1.7.1-patched/README.txt +110 -0
  103. data/vendor/ParseTree-1.7.1-patched/Rakefile +41 -0
  104. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_abc +89 -0
  105. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_audit +28 -0
  106. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_deps +62 -0
  107. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_show +49 -0
  108. data/vendor/ParseTree-1.7.1-patched/demo/printer.rb +20 -0
  109. data/vendor/ParseTree-1.7.1-patched/lib/composite_sexp_processor.rb +49 -0
  110. data/vendor/ParseTree-1.7.1-patched/lib/parse_tree.rb +1013 -0
  111. data/vendor/ParseTree-1.7.1-patched/lib/sexp.rb +235 -0
  112. data/vendor/ParseTree-1.7.1-patched/lib/sexp_processor.rb +330 -0
  113. data/vendor/ParseTree-1.7.1-patched/lib/unique.rb +15 -0
  114. data/vendor/ParseTree-1.7.1-patched/test/pt_testcase.rb +1221 -0
  115. data/vendor/ParseTree-1.7.1-patched/test/something.rb +53 -0
  116. data/vendor/ParseTree-1.7.1-patched/test/test_all.rb +13 -0
  117. data/vendor/ParseTree-1.7.1-patched/test/test_composite_sexp_processor.rb +69 -0
  118. data/vendor/ParseTree-1.7.1-patched/test/test_parse_tree.rb +216 -0
  119. data/vendor/ParseTree-1.7.1-patched/test/test_sexp.rb +291 -0
  120. data/vendor/ParseTree-1.7.1-patched/test/test_sexp_processor.rb +244 -0
  121. data/vendor/ParseTree-1.7.1-patched/validate.sh +31 -0
  122. data/vendor/ParseTree-1.7.1/History.txt +217 -0
  123. data/vendor/ParseTree-1.7.1/Manifest.txt +22 -0
  124. data/vendor/ParseTree-1.7.1/README.txt +110 -0
  125. data/vendor/ParseTree-1.7.1/Rakefile +41 -0
  126. data/vendor/ParseTree-1.7.1/bin/parse_tree_abc +89 -0
  127. data/vendor/ParseTree-1.7.1/bin/parse_tree_audit +28 -0
  128. data/vendor/ParseTree-1.7.1/bin/parse_tree_deps +62 -0
  129. data/vendor/ParseTree-1.7.1/bin/parse_tree_show +49 -0
  130. data/vendor/ParseTree-1.7.1/demo/printer.rb +20 -0
  131. data/vendor/ParseTree-1.7.1/lib/composite_sexp_processor.rb +49 -0
  132. data/vendor/ParseTree-1.7.1/lib/parse_tree.rb +1004 -0
  133. data/vendor/ParseTree-1.7.1/lib/sexp.rb +235 -0
  134. data/vendor/ParseTree-1.7.1/lib/sexp_processor.rb +330 -0
  135. data/vendor/ParseTree-1.7.1/lib/unique.rb +15 -0
  136. data/vendor/ParseTree-1.7.1/test/pt_testcase.rb +1221 -0
  137. data/vendor/ParseTree-1.7.1/test/something.rb +53 -0
  138. data/vendor/ParseTree-1.7.1/test/test_all.rb +13 -0
  139. data/vendor/ParseTree-1.7.1/test/test_composite_sexp_processor.rb +69 -0
  140. data/vendor/ParseTree-1.7.1/test/test_parse_tree.rb +216 -0
  141. data/vendor/ParseTree-1.7.1/test/test_sexp.rb +291 -0
  142. data/vendor/ParseTree-1.7.1/test/test_sexp_processor.rb +244 -0
  143. data/vendor/ParseTree-1.7.1/validate.sh +31 -0
  144. metadata +230 -0
@@ -0,0 +1,13 @@
1
+ module Kernel
2
+ =begin
3
+ def puts(obj="")
4
+ obj = obj.to_s.gsub("&", "&amp;").gsub("<", "&lt;").gsub(">", "&gt;") + "<br/>"
5
+ `document.getElementById('out').innerHTML += #<obj>`
6
+ end
7
+ =end
8
+
9
+ def puts(obj="")
10
+ obj = obj.to_s
11
+ `STDOUT_puts(#<obj>)`
12
+ end
13
+ end
data/test/common.rb ADDED
@@ -0,0 +1,8 @@
1
+ if $RUBYJS
2
+ module Kernel
3
+ def puts(obj="")
4
+ obj = obj.to_s
5
+ `println(#<obj>)`
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,129 @@
1
+ require 'tempfile'
2
+ require 'test/gen_test_suite'
3
+
4
+ if ARGV.empty?
5
+ tests = Dir['test/test_*.rb']
6
+ else
7
+ tests = Dir["test/test_{" + ARGV.join(',') + "}.rb"]
8
+ end
9
+
10
+ rubycode = Tempfile.new('rubyjs')
11
+ script = gen_test_suite(tests)
12
+ rubycode.write(script)
13
+ rubycode.close(false)
14
+
15
+ #
16
+ # Generate Javascript code
17
+ #
18
+
19
+ RED = '#ff8888'
20
+ GREEN = '#aaffaa'
21
+
22
+ expected = `ruby -I./test < #{rubycode.path}`.chomp. # remove last newline
23
+ gsub("&", "&amp;").
24
+ gsub("<", "&lt;").
25
+ gsub(">", "&gt;").split("\n")
26
+
27
+ jscode = `./bin/rubyjs -I./test --opt PrettyPrint -P Browser -m TestSuite #{rubycode.path}`
28
+ jscode << <<END_JS
29
+ var STDOUT_LINE_NO = 0;
30
+ var FAILURES = 0;
31
+ var TOTAL = #{expected.size};
32
+
33
+ function STDOUT_puts(str)
34
+ {
35
+ var out = document.getElementById('out_' + STDOUT_LINE_NO);
36
+ var expected = document.getElementById('exp_' + STDOUT_LINE_NO);
37
+
38
+ out.innerHTML = str.replace(/[&]/g, "&amp;").replace(/[<]/g, "&lt;").replace(/[>]/g, "&gt;");
39
+
40
+ if (out.innerHTML === expected.innerHTML)
41
+ {
42
+ document.getElementById('line_' + STDOUT_LINE_NO).style.background = '#{GREEN}';
43
+ }
44
+ else
45
+ {
46
+ FAILURES += 1;
47
+ }
48
+
49
+ STDOUT_LINE_NO += 1;
50
+
51
+ document.getElementById('status').innerHTML =
52
+ "<b>" + STDOUT_LINE_NO + "</b> / " + TOTAL + " (" + FAILURES + " failures)";
53
+ }
54
+
55
+ function start()
56
+ {
57
+ main();
58
+ }
59
+ END_JS
60
+
61
+ File.open('test/browser.test.js', 'w+') {|f| f << jscode}
62
+
63
+ html_script = script.gsub("&", "&amp;").
64
+ gsub("<", "&lt;").
65
+ gsub(">", "&gt;").gsub("\n", "<br/>")
66
+
67
+ File.open('test/browser.test.html', 'w+') do |f|
68
+ f.puts %{<html><head><script language="javascript" src="browser.test.js"></script>
69
+ <style>
70
+ #expected { background: #ccc; }
71
+ </style>
72
+ <body onload="start();">
73
+ <h1>RubyJS Test Suite Runner</h1>
74
+
75
+ <a href="#source">View Ruby source code</a>&nbsp;|&nbsp;
76
+ <a href="browser.test.js">View Javascript source code</a><br/>
77
+
78
+ <p>
79
+ Test status (tests run / total # of tests): <div id="status"></div>
80
+ </p>
81
+
82
+ <table cellspacing="5" cellpadding="5">
83
+ <thead>
84
+ <tr>
85
+ <td width="50%"><b>Output</b></td>
86
+ <td width="50%"><b>Expected</b></td>
87
+ </tr>
88
+ </thead>
89
+ <tbody>
90
+ }
91
+
92
+ expected.each_with_index do |line, i|
93
+ f.puts %{
94
+ <tr id="line_#{i}" style="background: #{RED}">
95
+ <td>
96
+ <pre id="out_#{i}"></pre>
97
+ </td>
98
+ <td>
99
+ <pre id="exp_#{i}">#{line}</pre>
100
+ </td>
101
+ </tr>
102
+ }
103
+ end
104
+
105
+ f.puts %{
106
+ <tr><td colspan="2" style="background: grey">&nbsp;</td></tr>
107
+ }
108
+
109
+ # Add some "overflow" rows, in case the RubyJS test output
110
+ # is longer as expected.
111
+ 10.times do |i|
112
+ f.puts %{
113
+ <tr id="line_#{i+expected.size}">
114
+ <td>
115
+ <pre id="out_#{i+expected.size}"></pre>
116
+ </td>
117
+ <td>
118
+ <pre id="exp_#{i+expected.size}"></pre>
119
+ </td>
120
+ </tr>
121
+ }
122
+ end
123
+
124
+ f.puts %{
125
+ </tbody>
126
+ </table>
127
+ <pre id="source">#{html_script}</pre>
128
+ </body></html>}
129
+ end
@@ -0,0 +1,41 @@
1
+ def gen_test_suite(tests)
2
+ script = ""
3
+ body = ""
4
+
5
+ script << "require 'common'\n\n"
6
+ tests.each_with_index do |file, i|
7
+ basename = File.basename(file)[0..-4]
8
+ klassname = basename.gsub(/(^|_)./) {|m| m[-1,1].upcase}
9
+ humanname = basename.gsub('_', ' ').capitalize
10
+
11
+ script << "#\n"
12
+ script << "# file: #{file}\n"
13
+ script << "#\n\n"
14
+ script << "module T_#{klassname}\n"
15
+ script << File.read(file)
16
+ script << "end\n"
17
+ script << "\n\n"
18
+ body << %{
19
+ puts '~~~~~~~~~~~~~~~~~~~~'
20
+ puts '#{humanname}'
21
+ puts '~~~~~~~~~~~~~~~~~~~~'
22
+ T_#{klassname}::#{klassname}.main
23
+ }
24
+ end
25
+
26
+ script << %{
27
+ class TestSuite
28
+ def self.main
29
+ begin
30
+ #{body}
31
+ rescue Exception => a
32
+ p "unhandled exception"
33
+ p a
34
+ end
35
+ end
36
+ end
37
+ TestSuite.main unless $RUBYJS
38
+ }
39
+
40
+ return script
41
+ end
@@ -0,0 +1,58 @@
1
+ require 'yaml'
2
+ require 'tempfile'
3
+ params = YAML.load(File.read('test/benchmark/params.yaml'))
4
+ benchs = Dir["test/benchmark/bm_*.{rb,js}"]
5
+ OPTS = "--opt NoArgumentArityChecks --opt OptimizeArithOps"
6
+
7
+ def run_rubyjs(param, klassname, file)
8
+ par = param ? param.inspect : "nil"
9
+ cmd_rubyjs_gen =
10
+ %{./rubyjs_gen -I./test -o - -o /tmp/#{klassname} -r common -r benchmark/common #{OPTS} -m #{klassname} -a "main(undefined, #{par})" #{file}}
11
+
12
+ cmd_run_js = %{/usr/bin/time ./utils/js/run.sh 2>&1}
13
+
14
+ result = `#{cmd_rubyjs_gen} | #{cmd_run_js}`
15
+ arr = result.split("\n")
16
+ time = arr.pop.split(" ")[2].sub(",", ".").to_f # user
17
+ return [file, klassname, param, time.to_f, arr.join("\n")]
18
+ end
19
+
20
+ def run_js(param, klassname, file)
21
+ par = param ? param.inspect : "null"
22
+
23
+ script = ""
24
+ script << File.read('./test/benchmark/common.js')
25
+ script << "\n"
26
+ script << File.read(file)
27
+ script << "\n"
28
+ script << "main(#{par});"
29
+
30
+ jscode = Tempfile.new('rubyjs')
31
+ jscode.write(script)
32
+ jscode.close(false)
33
+
34
+ cmd_run_js = %{/usr/bin/time ./utils/js/run.sh 2>&1}
35
+
36
+ result = `#{cmd_run_js} < #{jscode.path}`
37
+ arr = result.split("\n")
38
+ time = arr.pop.split(" ")[2].sub(",", ".").to_f # user
39
+ return [file, klassname, param, time.to_f, arr.join("\n")]
40
+ end
41
+
42
+ benchs.sort.each do |file|
43
+ basename = File.basename(file)[0..-4]
44
+ klassname = basename.gsub(/(^|_)./) {|m| m[-1,1].upcase}
45
+ humanname = basename.gsub('_', ' ').capitalize
46
+ ext = File.extname(file)
47
+
48
+ (params[klassname] || [nil]).each do |i|
49
+ case ext
50
+ when '.rb'
51
+ p run_rubyjs(i, klassname, file)
52
+ when '.js'
53
+ p run_js(i, klassname, file)
54
+ else
55
+ raise
56
+ end
57
+ end
58
+ end
data/test/run_tests.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'tempfile'
2
+ require 'test/gen_test_suite'
3
+
4
+ if ARGV.empty?
5
+ tests = Dir['test/test_*.rb']
6
+ else
7
+ tests = Dir["test/test_{" + ARGV.join(',') + "}.rb"]
8
+ end
9
+
10
+ rubycode = Tempfile.new('rubyjs')
11
+ script = gen_test_suite(tests)
12
+ rubycode.write(script)
13
+ rubycode.close(false)
14
+
15
+ jsout = `./bin/rubyjs -I./test -a ";main()" -m TestSuite #{rubycode.path} | ./utils/js/run.sh`
16
+ rbout = `ruby -I./test < #{rubycode.path}`
17
+
18
+ if jsout == rbout
19
+ else
20
+ puts "FAILED"
21
+ exit 1
22
+ end
data/test/test_args.rb ADDED
@@ -0,0 +1,24 @@
1
+ class TestArgs
2
+ def m(a, b=1, c="hallo", *args)
3
+ p a
4
+ p b
5
+ p c
6
+ p args
7
+ end
8
+
9
+ def self.main
10
+ obj = new()
11
+
12
+ obj.m(0)
13
+ puts "--"
14
+ obj.m(1,2)
15
+ puts "--"
16
+ obj.m(1,2,9)
17
+ puts "--"
18
+ obj.m(1,2,9,5)
19
+ puts "--"
20
+ obj.m(1,2,9,5,6)
21
+ puts "--"
22
+ obj.m(1,2,9,5,6,7,8,9,10,11,12)
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ class TestArray
2
+ if $RUBYJS
3
+ def array
4
+ [1, 2, `null`, [`null`, `null`, 4]]
5
+ end
6
+ else
7
+ def array
8
+ [1, 2, nil, [nil, nil, 4]]
9
+ end
10
+ end
11
+
12
+ def test
13
+ # delete
14
+ a = [ "a", "b", "b", "b", "c" ]
15
+ p a.delete("b") #=> "b"
16
+ p a #=> ["a", "c"]
17
+ p a.delete("z") #=> nil
18
+
19
+ puts "test native JS array mapping"
20
+ p array()
21
+ end
22
+
23
+ def self.main
24
+ new.test
25
+ end
26
+ end
data/test/test_case.rb ADDED
@@ -0,0 +1,35 @@
1
+ class TestCase
2
+ def test
3
+ case 1+1
4
+ when 1, 3
5
+ puts "NOT OKAY"
6
+ when 2
7
+ puts "OKAY"
8
+ else
9
+ puts "NOT OKAY"
10
+ end
11
+
12
+ p (Array === [])
13
+ p (RuntimeError === RuntimeError.new)
14
+
15
+ case 1
16
+ when Fixnum
17
+ puts "OK"
18
+ when 1
19
+ puts "OK"
20
+ end
21
+
22
+ case 4
23
+ when 0..3
24
+ puts "NOT OKAY"
25
+ when 1...4
26
+ puts "NOT OKAY"
27
+ when 2..4
28
+ puts "OKAY"
29
+ end
30
+ end
31
+
32
+ def self.main
33
+ new.test
34
+ end
35
+ end
@@ -0,0 +1,55 @@
1
+ module X
2
+ end
3
+
4
+ class A
5
+ include X
6
+ end
7
+
8
+ class B < A
9
+ end
10
+
11
+ class C < B
12
+ end
13
+
14
+ class D
15
+ end
16
+
17
+ class TestClass
18
+ def self.main
19
+ p A.new.instance_of?(A) # => true
20
+ p A.new.instance_of?(B) # => false
21
+ p B.new.instance_of?(A) # => false
22
+ p A.new.instance_of?(X) # => false
23
+ p B.new.instance_of?(X) # => false
24
+
25
+ p A.new.kind_of?(A) # => true
26
+ p A.new.kind_of?(B) # => false
27
+ p B.new.kind_of?(A) # => true
28
+ p A.new.kind_of?(X) # => true
29
+ p B.new.kind_of?(X) # => true
30
+
31
+ p C.new.kind_of?(X) # => true
32
+ p C.new.kind_of?(A) # => true
33
+ p C.new.kind_of?(B) # => true
34
+ p C.new.kind_of?(C) # => true
35
+ p C.new.kind_of?(D) # => false
36
+ p C.new.kind_of?(Object) # => true
37
+ p C.new.kind_of?(Kernel) # => true
38
+ p C.new.kind_of?(Class) # => false
39
+
40
+ p ("hallo".class.name)
41
+ p (nil.class.name)
42
+ p (nil.instance_of?(NilClass))
43
+ p ("hallo".instance_of?(String))
44
+ p ("hallo".class)
45
+ p A
46
+ p B
47
+ p C
48
+ p D
49
+ p X
50
+
51
+ p X.name
52
+ p A.name
53
+ p B.name
54
+ end
55
+ end
data/test/test_eql.rb ADDED
@@ -0,0 +1,9 @@
1
+ class TestEql
2
+ def self.main
3
+ p "a".eql?("a") # => true
4
+ p "a".eql?(1) # => false
5
+ p "1".eql?(1) # => false
6
+ p [1,2].eql?([1,2]) # => true
7
+ p 1.eql?("1") # => false
8
+ end
9
+ end
@@ -0,0 +1,61 @@
1
+ class TestException
2
+ def self.main
3
+
4
+ p "before block"
5
+ begin
6
+ p "in block"
7
+ end
8
+ p "after block"
9
+
10
+ ###
11
+ begin
12
+ p "block"
13
+ rescue
14
+ p "rescue"
15
+ rescue Exception => a
16
+ p "another rescue"
17
+ p a
18
+ else
19
+ p "else"
20
+ end
21
+
22
+ p RuntimeError.new("test")
23
+
24
+ puts "before begin"
25
+ begin
26
+ puts "before raise"
27
+ raise Exception, "blah"
28
+ puts "after raise"
29
+ rescue
30
+ puts "noooo"
31
+ rescue Exception => a
32
+ p a
33
+ puts "yes"
34
+ ensure
35
+ puts "ensure"
36
+ end
37
+ puts "after begin"
38
+
39
+ puts "--"
40
+
41
+ begin
42
+ puts "abc"
43
+ raise "r"
44
+ rescue
45
+ p $!
46
+ puts "b"
47
+ ensure
48
+ puts "e"
49
+ end
50
+
51
+ #
52
+ # Test arity checks
53
+ #
54
+
55
+ begin
56
+ p("hallo".to_s(2))
57
+ rescue ArgumentError => a
58
+ p a
59
+ end
60
+ end
61
+ end