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
data/test/test_expr.rb ADDED
@@ -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
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
data/test/test_if.rb ADDED
@@ -0,0 +1,28 @@
1
+ class TestIf
2
+ def test
3
+ puts "OK" if true
4
+ puts "NOT OK" if false
5
+ puts "OK" unless false
6
+ puts "NOT OK" unless true
7
+ puts "OK" if true and true and (true or false) and (!false)
8
+
9
+ puts "OK" if 5 < 6 and 6 < 7
10
+
11
+ # test the "||" operator
12
+ p(false || "a") # => "a"
13
+ p(nil || "a") # => "a"
14
+ p(true || "a") # => true
15
+ p("b" || "a") # => "b"
16
+
17
+ # test the "&&" operator
18
+
19
+ p(false && "a") # => false
20
+ p(nil && "a") # => nil
21
+ p(true && "a") # => "a"
22
+ p("b" && "a") # => "a"
23
+ end
24
+
25
+ def self.main
26
+ new.test
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ class TestInspect
2
+ def test
3
+ o = [{"Hello"=>'Rubyconf'}]
4
+ puts o.inspect
5
+ end
6
+
7
+ def self.main
8
+ new.test
9
+ end
10
+ end
@@ -0,0 +1,39 @@
1
+ class TestLebewesen
2
+ def self.main
3
+ leni = Katze.new("AA-BB", "Leni")
4
+ flocki = Katze.new("AC-DC", "Flocki")
5
+ bello = Hund.new("AA-ZZ")
6
+ leni.miau
7
+ bello.wau
8
+ bello.jage(leni)
9
+ end
10
+ end
11
+
12
+ class Lebewesen
13
+ def initialize(dns)
14
+ @dns = dns
15
+ end
16
+ end
17
+
18
+ class Katze < Lebewesen
19
+ attr_reader :name
20
+
21
+ def initialize(dns, name)
22
+ super(dns)
23
+ @name = name
24
+ end
25
+
26
+ def miau
27
+ puts "miau, ich bin " + @name
28
+ end
29
+ end
30
+
31
+ class Hund < Lebewesen
32
+ def wau
33
+ puts "wau wau"
34
+ end
35
+
36
+ def jage(katze)
37
+ puts "ich jage " + katze.name
38
+ end
39
+ end
@@ -0,0 +1,66 @@
1
+ class TestMassign
2
+ def self.main
3
+ a, b = 1, 2
4
+ p a
5
+ p b
6
+ puts "--"
7
+
8
+ a, b = 1, 2, 3
9
+ p a
10
+ p b
11
+ puts "--"
12
+
13
+ c = 5
14
+ a, b, c = 1, 2
15
+ p a
16
+ p b
17
+ p c
18
+ puts "--"
19
+
20
+ @a, b, @c = 1, 2, 3
21
+ p @a
22
+ p b
23
+ p @c
24
+ puts "--"
25
+
26
+ puts "swap"
27
+ # swap
28
+ a, b = 1, 2
29
+ p a
30
+ p b
31
+ a, b = b, a
32
+ p a
33
+ p b
34
+ puts "--"
35
+
36
+ puts "splat1"
37
+ a, b, c, *d = 1, 2
38
+ p a
39
+ p b
40
+ p c
41
+ p d
42
+ puts "--"
43
+
44
+ puts "splat2"
45
+ a, *b = 1, 2
46
+ p a
47
+ p b
48
+ puts "--"
49
+
50
+ puts "splat3"
51
+ a, *b = 1, 2, 3, 4, 5
52
+ p a
53
+ p b
54
+ puts "--"
55
+
56
+ puts "splat with globals"
57
+ p $a
58
+ p $b
59
+ $a, $b = 1, 2
60
+ p $a
61
+ p $b
62
+ puts "--"
63
+
64
+ #TODO: a, b = 1 (to_ary)
65
+ end
66
+ end
data/test/test_new.rb ADDED
@@ -0,0 +1,12 @@
1
+ class TestNew
2
+ def initialize
3
+ end
4
+
5
+ def test
6
+ puts "test"
7
+ end
8
+
9
+ def self.main()
10
+ new().test
11
+ end
12
+ end
@@ -0,0 +1,53 @@
1
+ class TestRange
2
+ def test
3
+ a = Range.new(0,2)
4
+ p a.first
5
+ p a.last
6
+ p a
7
+
8
+ p ((0..2).to_s)
9
+ p ((0...2).to_s)
10
+
11
+ (0..4).each do |i| p i end
12
+ (0...4).each do |i| p i end
13
+ (-1..-4).each do |i| p i end
14
+
15
+ p ((0..4).include?(4))
16
+ p ((0..4).include?(5))
17
+ p ((0...4).include?(5))
18
+ p ((0...4).include?(4))
19
+ p ((0...4).include?(3))
20
+ p ((0...4).include?(0))
21
+ p ((0...4).include?(-1))
22
+
23
+ p ((-1..-5).to_a)
24
+ p ((-5..-1).to_a)
25
+
26
+ r = Range.new(0, 4)
27
+ p r.first
28
+ p r.begin
29
+ p r.last
30
+ p r.end
31
+ p r.exclude_end?
32
+
33
+ r = 1...5
34
+ p r.first
35
+ p r.begin
36
+ p r.last
37
+ p r.end
38
+ p r.exclude_end?
39
+
40
+ p (false == false)
41
+ p (false == true)
42
+ p (true == false)
43
+ p (true == true)
44
+
45
+ p ((0..2) == (0..2))
46
+ p ((0..2) == Range.new(0,2))
47
+ p ((0..2) == (0...2))
48
+ end
49
+
50
+ def self.main
51
+ new.test
52
+ end
53
+ end
@@ -0,0 +1,22 @@
1
+ class TestRegexp
2
+ def test
3
+ p "okay" if "hallo" =~ /ll/
4
+ pos = "hallo" =~ /ll/
5
+ p pos
6
+
7
+ "hallo" =~ /(ll)/
8
+ p $1
9
+ p $2
10
+ p $3
11
+
12
+ "hallo" =~ /a(ll)(o)/
13
+ p $1
14
+ p $2
15
+ p $3
16
+ p $4
17
+ end
18
+
19
+ def self.main
20
+ new.test
21
+ end
22
+ end
data/test/test_send.rb ADDED
@@ -0,0 +1,65 @@
1
+ class A
2
+ def a_method(a,b)
3
+ p a, b
4
+ end
5
+ end
6
+
7
+ class B < A
8
+ def a_method(b, a)
9
+ p "in B"
10
+ super
11
+ end
12
+
13
+ def c_method(b)
14
+ end
15
+ end
16
+
17
+ class C
18
+ def method_missing(id, *args, &block)
19
+ p "mm: #{id}, #{args}"
20
+ end
21
+ end
22
+
23
+ class TestSend
24
+ def self.main
25
+ puts "send"
26
+ p A.new.send("a_method", 1, 2)
27
+ p B.new.send("a_method", 1, 2)
28
+
29
+ puts "respond_to?"
30
+ p A.new.respond_to?(:a_method)
31
+ p A.new.respond_to?(:to_s)
32
+ p A.new.respond_to?(:inspect)
33
+ p A.new.respond_to?(:b_method)
34
+ p A.new.respond_to?(:c_method)
35
+
36
+ puts "method_missing"
37
+ p C.new.respond_to?(:blah_blah)
38
+ C.new.blah_blah(1,2,3)
39
+
40
+ begin
41
+ A.new.blah_blah
42
+ puts "FAILURE?"
43
+ rescue NoMethodError
44
+ puts "catched!!!"
45
+ end
46
+
47
+ begin
48
+ A.not_a_method
49
+ rescue NoMethodError
50
+ p "goood"
51
+ end
52
+
53
+ puts "class Method"
54
+ m = "hallo".method(:to_s)
55
+ p m
56
+ p m.call
57
+
58
+ a = [1,2,3]
59
+ m = a.method(:+)
60
+ p m
61
+ p m.call([2,3])
62
+ p m
63
+ p a
64
+ end
65
+ end
@@ -0,0 +1,5 @@
1
+ class TestSimpleOutput
2
+ def self.main()
3
+ puts "Hello World from RubyJS"
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ class TestSplat
2
+ def m(*args)
3
+ p args
4
+ end
5
+
6
+ def self.main
7
+ obj = new()
8
+
9
+ obj.m
10
+ obj.m(*[])
11
+
12
+ obj.m(1)
13
+ obj.m(*[1])
14
+ obj.m(1,*[])
15
+
16
+ obj.m(1,2)
17
+ obj.m(*[1,2])
18
+ obj.m(1,*[2])
19
+ obj.m(1,*[1,2])
20
+ end
21
+ end
@@ -0,0 +1,51 @@
1
+ class TestString
2
+ def test
3
+ # inspect
4
+ p "hello"
5
+ p "hallo\b\t\n"
6
+ p "hallo\\leute"
7
+ p '"super"'
8
+
9
+ # index
10
+ p "hello".index('e')
11
+ p "hello".index('lo')
12
+ p "hello".index('a')
13
+ p "hello hello".index('ll')
14
+ p "hello hello".index('ll', 3)
15
+
16
+ # []
17
+ p "hallo"[0,1]
18
+ p "hallo"[0,2]
19
+ p "hallo"[0,5]
20
+
21
+ p ("10".rjust(10, "0"))
22
+ p ("10".rjust(1, "blah"))
23
+ p ("x".rjust(4, "()"))
24
+
25
+ p ("10".ljust(10, "0"))
26
+ p ("10".ljust(1, "blah"))
27
+ p ("x".ljust(4, "()"))
28
+
29
+
30
+ # string interpolation
31
+ p "abc #{ 1 + 2 } def"
32
+ @a = "hallo".inspect
33
+ @b = 4.5
34
+ p "#{@a},#{@b}"
35
+
36
+ # gsub
37
+ s = "hallo".gsub("l", "r")
38
+ p s
39
+ s = "hallo".gsub(/ll/, "rr")
40
+ p s
41
+ s = "hallo".gsub(/l/) { "r" }
42
+ p s
43
+ s = "hallo".gsub(/ll/) { "blah blah" }
44
+ p s
45
+ "hallllllo".gsub(/(l)l/) {|i| p i }
46
+ end
47
+
48
+ def self.main
49
+ new.test
50
+ end
51
+ end
@@ -0,0 +1,152 @@
1
+ class TestYield
2
+ def three_times_yield
3
+ yield 1
4
+ yield 2
5
+ yield 3
6
+ end
7
+
8
+ def test_three_times_yield
9
+ puts "three_times_yield"
10
+ three_times_yield {|i| p i }
11
+ puts "--"
12
+ end
13
+
14
+ def three_times_block(&block)
15
+ block.call(1)
16
+ block.call(2)
17
+ block.call(3)
18
+ end
19
+
20
+ def test_three_times_block
21
+ puts "three_times_block"
22
+ three_times_block {|i| p i }
23
+ puts "--"
24
+ end
25
+
26
+ def three_times_indirect(&block)
27
+ three_times_yield(&block)
28
+ three_times_block(&block)
29
+ end
30
+
31
+ def test_three_times_indirect
32
+ puts "three_times_indirect"
33
+ three_times_indirect {|i| p i}
34
+ puts "--"
35
+ end
36
+
37
+ def three_times_yield2
38
+ p yield(1)
39
+ p yield(2)
40
+ p yield(3)
41
+ end
42
+
43
+ def test_three_times_yield2
44
+ puts "three_times_yield2"
45
+ three_times_yield2 {|i|
46
+ if i == 1
47
+ i
48
+ else
49
+ next i+1
50
+ end
51
+ }
52
+ end
53
+
54
+ def loop
55
+ while true
56
+ yield
57
+ end
58
+ p "not reached"
59
+ end
60
+
61
+ def loop2(&block)
62
+ while true
63
+ block.call
64
+ end
65
+ p "not reached"
66
+ end
67
+
68
+ def test_loop
69
+ puts "loop"
70
+ i = 0
71
+ res = loop do
72
+ i += 1
73
+ next if i % 2 == 1
74
+ p i
75
+ break "out", i if i > 8
76
+ end
77
+ p res
78
+ puts "--"
79
+ end
80
+
81
+ def test_loop2
82
+ puts "loop2"
83
+ i = 0
84
+ res = loop2 do
85
+ i += 1
86
+ next if i % 2 == 1
87
+ p i
88
+ break "out", i if i > 8
89
+ end
90
+ p res
91
+ puts "--"
92
+ end
93
+
94
+ def test_while_loop
95
+ puts "while-loop"
96
+ i = 0
97
+ while true
98
+ i += 1
99
+ next if i % 2 == 1
100
+ p i
101
+ break if i > 8
102
+ end
103
+ puts "----"
104
+ while i > 0
105
+ p i
106
+ i -= 1
107
+ end
108
+ puts "--"
109
+ end
110
+
111
+ def return_in_block(&block)
112
+ p "return_in_block before"
113
+ block.call
114
+ p "return_in_block after"
115
+ end
116
+
117
+ def test_return_in_block
118
+ p "before"
119
+ return_in_block { return 4 }
120
+ p "after (NOT)"
121
+ end
122
+
123
+ def test_proc
124
+ p "test_proc"
125
+ a = proc { return 0 }
126
+ p a.call
127
+ a = Proc.new { break 3 }
128
+ p a.call
129
+ end
130
+
131
+ def test
132
+ test_three_times_yield
133
+ test_three_times_block
134
+ test_three_times_indirect
135
+ test_three_times_yield2
136
+ test_loop
137
+ test_loop2
138
+ test_while_loop
139
+
140
+ begin
141
+ test_proc
142
+ rescue LocalJumpError => e
143
+ p e
144
+ end
145
+
146
+ p test_return_in_block()
147
+ end
148
+
149
+ def self.main
150
+ new.test
151
+ end
152
+ end