superchris-rubyjs 0.8.2

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.
Files changed (86) hide show
  1. data/README +131 -0
  2. data/Rakefile +65 -0
  3. data/bin/rubyjs +144 -0
  4. data/rubyjs.gemspec +112 -0
  5. data/src/rubyjs.rb +3 -0
  6. data/src/rubyjs/code_generator.rb +474 -0
  7. data/src/rubyjs/compiler.rb +2061 -0
  8. data/src/rubyjs/debug_name_generator.rb +95 -0
  9. data/src/rubyjs/encoder.rb +171 -0
  10. data/src/rubyjs/eval_into.rb +59 -0
  11. data/src/rubyjs/lib/core.rb +1016 -0
  12. data/src/rubyjs/lib/dom_element.rb +66 -0
  13. data/src/rubyjs/lib/json.rb +101 -0
  14. data/src/rubyjs/lib/microunit.rb +188 -0
  15. data/src/rubyjs/model.rb +293 -0
  16. data/src/rubyjs/name_generator.rb +71 -0
  17. data/src/rwt/AbsolutePanel.rb +161 -0
  18. data/src/rwt/DOM.Konqueror.rb +89 -0
  19. data/src/rwt/DOM.Opera.rb +65 -0
  20. data/src/rwt/DOM.rb +1044 -0
  21. data/src/rwt/Event.Opera.rb +35 -0
  22. data/src/rwt/Event.rb +429 -0
  23. data/src/rwt/HTTPRequest.IE6.rb +5 -0
  24. data/src/rwt/HTTPRequest.rb +74 -0
  25. data/src/rwt/Label.rb +164 -0
  26. data/src/rwt/Panel.rb +90 -0
  27. data/src/rwt/RootPanel.rb +16 -0
  28. data/src/rwt/UIObject.rb +495 -0
  29. data/src/rwt/Widget.rb +193 -0
  30. data/src/rwt/ported-from/AbsolutePanel.java +158 -0
  31. data/src/rwt/ported-from/DOM.java +571 -0
  32. data/src/rwt/ported-from/DOMImpl.java +426 -0
  33. data/src/rwt/ported-from/DOMImplOpera.java +82 -0
  34. data/src/rwt/ported-from/DOMImplStandard.java +234 -0
  35. data/src/rwt/ported-from/HTTPRequest.java +81 -0
  36. data/src/rwt/ported-from/HTTPRequestImpl.java +103 -0
  37. data/src/rwt/ported-from/Label.java +163 -0
  38. data/src/rwt/ported-from/Panel.java +99 -0
  39. data/src/rwt/ported-from/UIObject.java +614 -0
  40. data/src/rwt/ported-from/Widget.java +221 -0
  41. data/test/benchmark/bm_vm1_block.rb +15 -0
  42. data/test/benchmark/bm_vm1_const.rb +13 -0
  43. data/test/benchmark/bm_vm1_ensure.rb +15 -0
  44. data/test/benchmark/common.rb +5 -0
  45. data/test/benchmark/params.yaml +7 -0
  46. data/test/common.Browser.rb +13 -0
  47. data/test/common.rb +8 -0
  48. data/test/gen_browser_test_suite.rb +129 -0
  49. data/test/gen_test_suite.rb +41 -0
  50. data/test/run_benchs.rb +58 -0
  51. data/test/run_tests.rb +22 -0
  52. data/test/test_args.rb +24 -0
  53. data/test/test_array.rb +22 -0
  54. data/test/test_case.rb +35 -0
  55. data/test/test_class.rb +55 -0
  56. data/test/test_eql.rb +9 -0
  57. data/test/test_exception.rb +61 -0
  58. data/test/test_expr.rb +12 -0
  59. data/test/test_hash.rb +29 -0
  60. data/test/test_hot_ruby.rb +146 -0
  61. data/test/test_if.rb +28 -0
  62. data/test/test_insertion_sort.rb +25 -0
  63. data/test/test_inspect.rb +10 -0
  64. data/test/test_lebewesen.rb +39 -0
  65. data/test/test_massign.rb +66 -0
  66. data/test/test_new.rb +12 -0
  67. data/test/test_range.rb +70 -0
  68. data/test/test_regexp.rb +22 -0
  69. data/test/test_send.rb +65 -0
  70. data/test/test_simple_output.rb +5 -0
  71. data/test/test_splat.rb +21 -0
  72. data/test/test_string.rb +51 -0
  73. data/test/test_test.rb +17 -0
  74. data/test/test_yield.rb +154 -0
  75. data/utils/js/Makefile +9 -0
  76. data/utils/js/RunScript.class +0 -0
  77. data/utils/js/RunScript.java +73 -0
  78. data/utils/js/js.jar +0 -0
  79. data/utils/js/run.sh +3 -0
  80. data/utils/jsc/Makefile +7 -0
  81. data/utils/jsc/README +3 -0
  82. data/utils/jsc/RunScript.c +93 -0
  83. data/utils/jsc/run.sh +15 -0
  84. data/utils/yuicompressor/README +1 -0
  85. data/utils/yuicompressor/yuicompressor-2.2.5.jar +0 -0
  86. metadata +157 -0
@@ -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
@@ -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
@@ -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,22 @@
1
+ require 'microunit'
2
+
3
+ class TestArray < MicroUnit::TestCase
4
+
5
+ def test_array
6
+ a = [1, 2, `null`, [`null`, `null`, 4]]
7
+ assert_equal a, [1, 2, nil, [nil, nil, 4]]
8
+ assert a.eql? [1, 2, nil, [nil, nil, 4]]
9
+ end
10
+
11
+ def test_delete
12
+ a = [ "a", "b", "b", "b", "c" ]
13
+ a.delete "b"
14
+ assert_equal a, ["a", "c"]
15
+ end
16
+
17
+ def test_include
18
+ assert [1, 2, 3].include? 5
19
+ assert ! [1, 3].include?(2)
20
+ end
21
+
22
+ end
@@ -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
@@ -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
@@ -0,0 +1,12 @@
1
+ class TestExpr
2
+ def test
3
+ i = if true then 1 else 2 end
4
+ p i
5
+ i = true or return
6
+ p i
7
+ end
8
+
9
+ def self.main
10
+ new.test
11
+ end
12
+ end
@@ -0,0 +1,29 @@
1
+ class TestHash
2
+ if $RUBYJS
3
+ def hash
4
+ `var el = {}; el["1"] = null; return el`
5
+ end
6
+ else
7
+ def hash
8
+ {"1" => nil}
9
+ end
10
+ end
11
+
12
+ def test
13
+ h = {"a" => 6, "b" => 7, "1" => 1, 1 => 2, "1,2" => "hello", [1,2] => "good"}
14
+ p h["a"]
15
+ p h["b"]
16
+ p h["1"]
17
+ p h[1]
18
+ p h["1,2"]
19
+ p h[[1,2]]
20
+
21
+ puts "test native JS hash"
22
+ a = hash()
23
+ #p a
24
+ end
25
+
26
+ def self.main
27
+ new.test
28
+ end
29
+ end
@@ -0,0 +1,146 @@
1
+ #
2
+ # Examples taken from: http://hotruby.accelart.jp/
3
+ #
4
+ class TestHotRuby
5
+ def sort ary
6
+ puts "Before insertion sort:"
7
+ p ary
8
+
9
+ for i in 1..(ary.length-1) do
10
+ n = i
11
+ while n >= 1 && ary[n] < ary[n - 1] do
12
+ if ary[n] < ary[n - 1]
13
+ tmp = ary[n]
14
+ ary[n] = ary[n - 1]
15
+ ary[n - 1] = tmp
16
+ end
17
+ n -= 1
18
+ end
19
+ end
20
+
21
+ puts "After insertion sort:"
22
+ p ary
23
+ end
24
+
25
+ def addPrint a, b, c
26
+ puts a + b + c
27
+ end
28
+
29
+ def self.main
30
+ t = new()
31
+
32
+ puts "InsertionSort"
33
+ t.sort [3, 6, 2, 5, 3, 7, 1, 8]
34
+
35
+ puts "Array args"
36
+ ary = [' World ', '!']
37
+ t.addPrint 'Hello', *ary
38
+
39
+ puts "Block"
40
+ Foo.new.main
41
+
42
+ puts "Class"
43
+ puts Pi::PI
44
+ # different precision on Ruby vs. Javascript
45
+ puts Pi.new.calc.to_s[0,13]
46
+
47
+
48
+ puts "Const"
49
+ # FIXME
50
+ =begin
51
+ Bar_::Baz_.new.run
52
+ Bar2.new.run
53
+ Object::Bar2.new.run
54
+ Bar3.new.run
55
+ =end
56
+ end
57
+ end
58
+
59
+ #
60
+ # Block
61
+ #
62
+ class Hoge
63
+ def add_msg &block
64
+ block.call "is" # s/yield/call/
65
+ end
66
+ end
67
+
68
+ class Foo
69
+ NAME = ' - William Shakespeare'
70
+ def main
71
+ pre = "Action"
72
+ @space = " "
73
+ Hoge.new.add_msg do |msg|
74
+ fuga = "eloquence"
75
+ puts pre + @space + msg + @space + fuga + NAME
76
+ end
77
+ end
78
+ end
79
+
80
+ #
81
+ # Class
82
+ #
83
+ class Pi
84
+ def initialize
85
+ @a = 355.0
86
+ end
87
+
88
+ def calc
89
+ b = 113.0
90
+ return @a / b
91
+ end
92
+
93
+ PI = 'PI is about'
94
+ end
95
+
96
+ #
97
+ # Const
98
+ #
99
+ class Foo_
100
+ CONST = 'Foo'
101
+ end
102
+
103
+ class Bar_
104
+ CONST = 'Bar'
105
+
106
+ class Baz_ < Foo_
107
+ def run
108
+ puts CONST # => "Bar" Outer class const
109
+ # In this case, you have to specify if you want to see parent class const.
110
+ puts Foo_::CONST # => "Foo"
111
+ end
112
+ end
113
+ end
114
+
115
+ class Foo2
116
+ CONST = 'Foo'
117
+ end
118
+
119
+ CONST = 'Object'
120
+
121
+ class Bar2 < Foo2
122
+ def run
123
+ puts CONST # => "Foo"
124
+ end
125
+ end
126
+
127
+ # If you specify "Object", then const in Object is searched before.
128
+ class Object
129
+ class Bar2 < Foo2
130
+ def run
131
+ puts CONST # => "Object"
132
+ end
133
+ end
134
+ end
135
+
136
+ class Foo3
137
+ CONST = 'Foo'
138
+ end
139
+ class Bar3 < Foo3
140
+ def run
141
+ puts CONST # => "Foo"
142
+ #CONST = 'Bar' # Define Bar's const "CONST"
143
+ puts CONST # => "Bar" (Foo::CONST is hidden)
144
+ puts Foo3::CONST # => "Foo" (You can see by "::")
145
+ end
146
+ end