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.
- data/README +131 -0
- data/Rakefile +65 -0
- data/bin/rubyjs +144 -0
- data/rubyjs.gemspec +112 -0
- data/src/rubyjs.rb +3 -0
- data/src/rubyjs/code_generator.rb +474 -0
- data/src/rubyjs/compiler.rb +2061 -0
- data/src/rubyjs/debug_name_generator.rb +95 -0
- data/src/rubyjs/encoder.rb +171 -0
- data/src/rubyjs/eval_into.rb +59 -0
- data/src/rubyjs/lib/core.rb +1016 -0
- data/src/rubyjs/lib/dom_element.rb +66 -0
- data/src/rubyjs/lib/json.rb +101 -0
- data/src/rubyjs/lib/microunit.rb +188 -0
- data/src/rubyjs/model.rb +293 -0
- data/src/rubyjs/name_generator.rb +71 -0
- data/src/rwt/AbsolutePanel.rb +161 -0
- data/src/rwt/DOM.Konqueror.rb +89 -0
- data/src/rwt/DOM.Opera.rb +65 -0
- data/src/rwt/DOM.rb +1044 -0
- data/src/rwt/Event.Opera.rb +35 -0
- data/src/rwt/Event.rb +429 -0
- data/src/rwt/HTTPRequest.IE6.rb +5 -0
- data/src/rwt/HTTPRequest.rb +74 -0
- data/src/rwt/Label.rb +164 -0
- data/src/rwt/Panel.rb +90 -0
- data/src/rwt/RootPanel.rb +16 -0
- data/src/rwt/UIObject.rb +495 -0
- data/src/rwt/Widget.rb +193 -0
- data/src/rwt/ported-from/AbsolutePanel.java +158 -0
- data/src/rwt/ported-from/DOM.java +571 -0
- data/src/rwt/ported-from/DOMImpl.java +426 -0
- data/src/rwt/ported-from/DOMImplOpera.java +82 -0
- data/src/rwt/ported-from/DOMImplStandard.java +234 -0
- data/src/rwt/ported-from/HTTPRequest.java +81 -0
- data/src/rwt/ported-from/HTTPRequestImpl.java +103 -0
- data/src/rwt/ported-from/Label.java +163 -0
- data/src/rwt/ported-from/Panel.java +99 -0
- data/src/rwt/ported-from/UIObject.java +614 -0
- data/src/rwt/ported-from/Widget.java +221 -0
- data/test/benchmark/bm_vm1_block.rb +15 -0
- data/test/benchmark/bm_vm1_const.rb +13 -0
- data/test/benchmark/bm_vm1_ensure.rb +15 -0
- data/test/benchmark/common.rb +5 -0
- data/test/benchmark/params.yaml +7 -0
- data/test/common.Browser.rb +13 -0
- data/test/common.rb +8 -0
- data/test/gen_browser_test_suite.rb +129 -0
- data/test/gen_test_suite.rb +41 -0
- data/test/run_benchs.rb +58 -0
- data/test/run_tests.rb +22 -0
- data/test/test_args.rb +24 -0
- data/test/test_array.rb +22 -0
- data/test/test_case.rb +35 -0
- data/test/test_class.rb +55 -0
- data/test/test_eql.rb +9 -0
- data/test/test_exception.rb +61 -0
- data/test/test_expr.rb +12 -0
- data/test/test_hash.rb +29 -0
- data/test/test_hot_ruby.rb +146 -0
- data/test/test_if.rb +28 -0
- data/test/test_insertion_sort.rb +25 -0
- data/test/test_inspect.rb +10 -0
- data/test/test_lebewesen.rb +39 -0
- data/test/test_massign.rb +66 -0
- data/test/test_new.rb +12 -0
- data/test/test_range.rb +70 -0
- data/test/test_regexp.rb +22 -0
- data/test/test_send.rb +65 -0
- data/test/test_simple_output.rb +5 -0
- data/test/test_splat.rb +21 -0
- data/test/test_string.rb +51 -0
- data/test/test_test.rb +17 -0
- data/test/test_yield.rb +154 -0
- data/utils/js/Makefile +9 -0
- data/utils/js/RunScript.class +0 -0
- data/utils/js/RunScript.java +73 -0
- data/utils/js/js.jar +0 -0
- data/utils/js/run.sh +3 -0
- data/utils/jsc/Makefile +7 -0
- data/utils/jsc/README +3 -0
- data/utils/jsc/RunScript.c +93 -0
- data/utils/jsc/run.sh +15 -0
- data/utils/yuicompressor/README +1 -0
- data/utils/yuicompressor/yuicompressor-2.2.5.jar +0 -0
- metadata +157 -0
data/test/run_benchs.rb
ADDED
@@ -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
|
data/test/test_array.rb
ADDED
@@ -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
|
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
|
data/test/test_class.rb
ADDED
@@ -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,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
|
data/test/test_expr.rb
ADDED
data/test/test_hash.rb
ADDED
@@ -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
|