duby 0.0.2-java

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 (77) hide show
  1. data/History.txt +8 -0
  2. data/README.txt +39 -0
  3. data/Rakefile +13 -0
  4. data/bin/duby +9 -0
  5. data/bin/dubyc +9 -0
  6. data/bin/dubyp +9 -0
  7. data/examples/README +16 -0
  8. data/examples/appengine/Rakefile +72 -0
  9. data/examples/appengine/Readme +27 -0
  10. data/examples/appengine/config.ru +7 -0
  11. data/examples/appengine/lib/duby/plugin/datastore.rb +171 -0
  12. data/examples/appengine/src/com/google/appengine/ext/duby/db/Model.duby +132 -0
  13. data/examples/appengine/src/com/ribrdb/DubyApp.duby +28 -0
  14. data/examples/appengine/src/com/ribrdb/list.dhtml +15 -0
  15. data/examples/construction.duby +8 -0
  16. data/examples/edb.duby +3 -0
  17. data/examples/fib.duby +24 -0
  18. data/examples/fields.duby +22 -0
  19. data/examples/fractal.duby +57 -0
  20. data/examples/java_thing.duby +13 -0
  21. data/examples/simple_class.duby +12 -0
  22. data/examples/swing.duby +20 -0
  23. data/examples/tak.duby +15 -0
  24. data/examples/test.edb +9 -0
  25. data/javalib/JRubyParser.jar +0 -0
  26. data/lib/duby.rb +168 -0
  27. data/lib/duby/ast.rb +386 -0
  28. data/lib/duby/ast/call.rb +145 -0
  29. data/lib/duby/ast/class.rb +154 -0
  30. data/lib/duby/ast/flow.rb +332 -0
  31. data/lib/duby/ast/intrinsics.rb +56 -0
  32. data/lib/duby/ast/literal.rb +97 -0
  33. data/lib/duby/ast/local.rb +92 -0
  34. data/lib/duby/ast/method.rb +244 -0
  35. data/lib/duby/ast/structure.rb +62 -0
  36. data/lib/duby/ast/type.rb +93 -0
  37. data/lib/duby/c/compiler.rb +134 -0
  38. data/lib/duby/compiler.rb +282 -0
  39. data/lib/duby/jvm/compiler.rb +766 -0
  40. data/lib/duby/jvm/method_lookup.rb +193 -0
  41. data/lib/duby/jvm/source_compiler.rb +605 -0
  42. data/lib/duby/jvm/source_generator/builder.rb +387 -0
  43. data/lib/duby/jvm/source_generator/loops.rb +110 -0
  44. data/lib/duby/jvm/source_generator/precompile.rb +170 -0
  45. data/lib/duby/jvm/source_generator/typer.rb +11 -0
  46. data/lib/duby/jvm/typer.rb +131 -0
  47. data/lib/duby/jvm/types.rb +331 -0
  48. data/lib/duby/jvm/types/basic_types.rb +19 -0
  49. data/lib/duby/jvm/types/boolean.rb +11 -0
  50. data/lib/duby/jvm/types/enumerable.rb +63 -0
  51. data/lib/duby/jvm/types/factory.rb +155 -0
  52. data/lib/duby/jvm/types/floats.rb +70 -0
  53. data/lib/duby/jvm/types/integers.rb +110 -0
  54. data/lib/duby/jvm/types/intrinsics.rb +230 -0
  55. data/lib/duby/jvm/types/literals.rb +82 -0
  56. data/lib/duby/jvm/types/methods.rb +381 -0
  57. data/lib/duby/jvm/types/number.rb +92 -0
  58. data/lib/duby/nbcompiler.rb +29 -0
  59. data/lib/duby/old/compiler_old.rb +845 -0
  60. data/lib/duby/old/declaration.rb +72 -0
  61. data/lib/duby/old/mapper.rb +72 -0
  62. data/lib/duby/old/signature.rb +52 -0
  63. data/lib/duby/old/typer_old.rb +163 -0
  64. data/lib/duby/plugin/edb.rb +25 -0
  65. data/lib/duby/plugin/java.rb +42 -0
  66. data/lib/duby/plugin/math.rb +84 -0
  67. data/lib/duby/transform.rb +1028 -0
  68. data/lib/duby/typer.rb +369 -0
  69. data/test/TestUser.class +0 -0
  70. data/test/test_ast.rb +391 -0
  71. data/test/test_compilation.rb +98 -0
  72. data/test/test_java_typer.rb +199 -0
  73. data/test/test_javac_compiler.rb +58 -0
  74. data/test/test_jvm_compiler.rb +1770 -0
  75. data/test/test_math_plugin.rb +87 -0
  76. data/test/test_typer.rb +246 -0
  77. metadata +156 -0
@@ -0,0 +1,87 @@
1
+ require 'test/unit'
2
+ require 'duby'
3
+ require 'duby/plugin/math'
4
+
5
+ class TestMathPlugin < Test::Unit::TestCase
6
+ include Duby
7
+
8
+ def setup
9
+ @typer = Typer::Simple.new :bar
10
+ end
11
+
12
+ def assert_resolves_to(type, script)
13
+ ast = AST.parse("1 + 1")
14
+ ast.infer(@typer)
15
+ assert_nothing_raised {@typer.resolve(true)}
16
+ assert_equal(@typer.fixnum_type, ast.inferred_type)
17
+ end
18
+
19
+ def test_plus
20
+ assert_resolves_to(@typer.fixnum_type, '1 + 1')
21
+ assert_resolves_to(@typer.float_type, '1.0 + 1.0')
22
+ end
23
+
24
+ def test_minus
25
+ assert_resolves_to(@typer.fixnum_type, '1 - 1')
26
+ assert_resolves_to(@typer.float_type, '1.0 - 1.0')
27
+ end
28
+
29
+ def test_times
30
+ assert_resolves_to(@typer.fixnum_type, '1 * 1')
31
+ assert_resolves_to(@typer.float_type, '1.0 * 1.0')
32
+ end
33
+
34
+ def test_divide
35
+ assert_resolves_to(@typer.fixnum_type, '1 / 1')
36
+ assert_resolves_to(@typer.float_type, '1.0 / 1.0')
37
+ end
38
+
39
+ def test_remainder
40
+ assert_resolves_to(@typer.fixnum_type, '1 % 1')
41
+ assert_resolves_to(@typer.float_type, '1.0 % 1.0')
42
+ end
43
+
44
+ def test_shift_left
45
+ assert_resolves_to(@typer.fixnum_type, '1 << 1')
46
+ end
47
+
48
+ def test_shift_right
49
+ assert_resolves_to(@typer.fixnum_type, '1 >> 1')
50
+ end
51
+
52
+ def test_ushift_right
53
+ assert_resolves_to(@typer.fixnum_type, '1 >>> 1')
54
+ end
55
+
56
+ def test_bitwise_and
57
+ assert_resolves_to(@typer.fixnum_type, '1 & 1')
58
+ end
59
+
60
+ def test_bitwise_or
61
+ assert_resolves_to(@typer.fixnum_type, '1 | 1')
62
+ end
63
+
64
+ def test_bitwise_xor
65
+ assert_resolves_to(@typer.fixnum_type, '1 ^ 1')
66
+ end
67
+
68
+ def test_less_than
69
+ assert_resolves_to(@typer.boolean_type, '1 < 1')
70
+ assert_resolves_to(@typer.boolean_type, '1.0 < 1.0')
71
+ end
72
+
73
+ def test_greater_than
74
+ assert_resolves_to(@typer.boolean_type, '1 > 1')
75
+ assert_resolves_to(@typer.boolean_type, '1.0 > 1.0')
76
+ end
77
+
78
+ def test_less_than_or_equal
79
+ assert_resolves_to(@typer.boolean_type, '1 <= 1')
80
+ assert_resolves_to(@typer.boolean_type, '1.0 <= 1.0')
81
+ end
82
+
83
+ def test_greater_than_or_equal
84
+ assert_resolves_to(@typer.boolean_type, '1 >= 1')
85
+ assert_resolves_to(@typer.boolean_type, '1.0 >= 1.0')
86
+ end
87
+ end
@@ -0,0 +1,246 @@
1
+ require 'test/unit'
2
+ require 'duby'
3
+
4
+ class TestTyper < Test::Unit::TestCase
5
+ include Duby
6
+
7
+ def test_fixnum
8
+ ast = AST.parse("1")
9
+
10
+ assert_equal(AST::TypeReference.new("fixnum"), ast.infer(Typer::Simple.new(:bar)))
11
+ end
12
+
13
+ def test_float
14
+ ast = AST.parse("1.0")
15
+
16
+ assert_equal(AST::TypeReference.new("float"), ast.infer(Typer::Simple.new(:bar)))
17
+ end
18
+
19
+ def test_string
20
+ ast = AST.parse("'foo'")
21
+
22
+ assert_equal(AST::TypeReference.new("string"), ast.infer(Typer::Simple.new(:bar)))
23
+ end
24
+
25
+ def test_boolean
26
+ ast1 = AST.parse("true")
27
+ ast2 = AST.parse("false")
28
+
29
+ assert_equal(AST::TypeReference.new("boolean"), ast1.infer(Typer::Simple.new(:bar)))
30
+ assert_equal(AST::TypeReference.new("boolean"), ast2.infer(Typer::Simple.new(:bar)))
31
+ end
32
+
33
+ def test_body
34
+ ast1 = AST.parse("'foo'; 1.0; 1")
35
+ ast2 = AST.parse("begin; end")
36
+
37
+ assert_equal(AST::TypeReference.new("fixnum"), ast1.infer(Typer::Simple.new(:bar)))
38
+ assert_equal(AST::no_type, ast2.infer(Typer::Simple.new(:bar)))
39
+ end
40
+
41
+ def test_local
42
+ ast1 = AST.parse("a = 1; a")
43
+ typer = Typer::Simple.new :bar
44
+
45
+ ast1.infer(typer)
46
+
47
+ assert_equal(AST::TypeReference.new("fixnum"), typer.local_type(ast1, 'a'))
48
+ assert_equal(AST::TypeReference.new("fixnum"), ast1.body.children[0].inferred_type)
49
+ assert_equal(AST::TypeReference.new("fixnum"), ast1.body.children[1].inferred_type)
50
+
51
+ ast2 = AST.parse("b = a = 1")
52
+ ast2.infer(typer)
53
+
54
+ assert_equal(AST::TypeReference.new("fixnum"), typer.local_type(ast2, 'a'))
55
+ assert_equal(AST::TypeReference.new("fixnum"), ast2.body.children[0].inferred_type)
56
+ end
57
+
58
+ def test_signature
59
+ ["def foo", "def self.foo"].each do |def_foo|
60
+ ast1 = AST.parse("#{def_foo}(a); {a => :string}; end")
61
+ typer = Typer::Simple.new :bar
62
+
63
+ ast1.infer(typer)
64
+
65
+ assert_nothing_raised {typer.resolve(true)}
66
+ assert_nothing_raised {typer.resolve}
67
+
68
+
69
+ if def_foo =~ /self/
70
+ type = typer.self_type.meta
71
+ else
72
+ type = typer.self_type
73
+ end
74
+
75
+ assert_equal(typer.no_type, typer.method_type(type, 'foo', [typer.string_type]))
76
+ assert_equal(typer.string_type, typer.local_type(ast1.body, 'a'))
77
+ assert_equal(typer.no_type, ast1.body.inferred_type)
78
+ assert_equal(typer.string_type, ast1.body.arguments.args[0].inferred_type)
79
+
80
+ ast1 = AST.parse("#{def_foo}(a); 1 end")
81
+ typer = Typer::Simple.new :bar
82
+
83
+ ast1.infer(typer)
84
+
85
+ assert_equal(typer.fixnum_type, typer.method_type(type, 'foo', [typer.default_type]))
86
+ assert_equal(typer.default_type, typer.local_type(ast1.body, 'a'))
87
+ assert_equal(typer.fixnum_type, ast1.body.inferred_type)
88
+ assert_equal(typer.default_type, ast1.body.arguments.args[0].inferred_type)
89
+
90
+ ast1 = AST.parse("#{def_foo}(a); {a => :string}; a; end")
91
+ typer = Typer::Simple.new :bar
92
+
93
+ ast1.infer(typer)
94
+
95
+ assert_equal(typer.string_type, typer.method_type(type, 'foo', [typer.string_type]))
96
+ assert_equal(typer.string_type, typer.local_type(ast1.body, 'a'))
97
+ assert_equal(typer.string_type, ast1.body.inferred_type)
98
+ assert_equal(typer.string_type, ast1.body.arguments.args[0].inferred_type)
99
+
100
+ ast1 = AST.parse("#{def_foo}(a); {:return => :string}; end")
101
+ typer = Typer::Simple.new :bar
102
+
103
+ assert_raise(Typer::InferenceError) do
104
+ ast1.infer(typer)
105
+ typer.resolve(true)
106
+ end
107
+
108
+ ast1 = AST.parse("#{def_foo}(a); a = 'foo'; end")
109
+ typer = Typer::Simple.new :bar
110
+
111
+ ast1.infer(typer)
112
+
113
+ assert_equal(typer.string_type, typer.method_type(type, 'foo', [typer.default_type]))
114
+ assert_equal(typer.string_type, typer.local_type(ast1.body, 'a'))
115
+ assert_equal(typer.string_type, ast1.body.inferred_type)
116
+ assert_equal(typer.default_type, ast1.body.arguments.args[0].inferred_type)
117
+
118
+ typer.resolve
119
+
120
+ assert_equal(typer.string_type, ast1.body.arguments.args[0].inferred_type)
121
+ end
122
+ end
123
+
124
+ def test_call
125
+ ast = AST.parse("1.foo(2)").body
126
+ typer = Typer::Simple.new "bar"
127
+
128
+ typer.learn_method_type(typer.fixnum_type, "foo", [typer.fixnum_type], typer.string_type, [])
129
+ assert_equal(typer.string_type, typer.method_type(typer.fixnum_type, "foo", [typer.fixnum_type]))
130
+
131
+ ast.infer(typer)
132
+
133
+ assert_equal(typer.string_type, ast.inferred_type)
134
+
135
+ ast = AST.parse("def bar(a, b); {a => :fixnum, b => :string}; 1.0; end; def baz; bar(1, 'x'); end").body
136
+
137
+ ast.infer(typer)
138
+
139
+ assert_equal(typer.float_type, typer.method_type(typer.self_type, "bar", [typer.fixnum_type, typer.string_type]))
140
+ assert_equal(typer.float_type, typer.method_type(typer.self_type, "baz", []))
141
+ assert_equal(typer.float_type, ast.children[0].inferred_type)
142
+ assert_equal(typer.float_type, ast.children[1].inferred_type)
143
+
144
+ # Reverse the order, ensure deferred inference succeeds
145
+ ast = AST.parse("def baz; bar(1, 'x'); end; def bar(a, b); {a => :fixnum, b => :string}; 1.0; end").body
146
+ typer = Typer::Simple.new("bar")
147
+
148
+ ast.infer(typer)
149
+
150
+ assert_equal(typer.default_type, typer.method_type(typer.self_type, "baz", []))
151
+ assert_equal(typer.float_type, typer.method_type(typer.self_type, "bar", [typer.fixnum_type, typer.string_type]))
152
+ assert_equal(typer.default_type, ast.children[0].inferred_type)
153
+ assert_equal(typer.float_type, ast.children[1].inferred_type)
154
+
155
+ # allow resolution to run
156
+ assert_nothing_raised {typer.resolve}
157
+
158
+ assert_equal(typer.float_type, typer.method_type(typer.self_type, "baz", []))
159
+ assert_equal(typer.float_type, typer.method_type(typer.self_type, "bar", [typer.fixnum_type, typer.string_type]))
160
+ assert_equal(typer.float_type, ast.children[0].inferred_type)
161
+ assert_equal(typer.float_type, ast.children[1].inferred_type)
162
+
163
+ # modify bar call to have bogus types, ensure resolution fails
164
+ ast = AST.parse("def baz; bar(1, 1); end; def bar(a, b); {a => :fixnum, b => :string}; 1.0; end").body
165
+ typer = Typer::Simple.new("bar")
166
+
167
+ ast.infer(typer)
168
+
169
+ assert_equal(typer.default_type, typer.method_type(typer.self_type, "baz", []))
170
+ assert_equal(typer.float_type, typer.method_type(typer.self_type, "bar", [typer.fixnum_type, typer.string_type]))
171
+ assert_equal(typer.default_type, ast.children[0].inferred_type)
172
+ assert_equal(typer.float_type, ast.children[1].inferred_type)
173
+
174
+ # allow resolution to run and produce error
175
+ assert_raise(Typer::InferenceError) {typer.resolve(true)}
176
+ error_nodes = typer.errors.map {|e| e.node}
177
+ inspected = "[FunctionalCall(bar)\n Fixnum(1)\n Fixnum(1)]"
178
+ assert_equal(inspected, error_nodes.inspect)
179
+ end
180
+
181
+ def test_if
182
+ ast = AST.parse("if true; 1.0; else; ''; end").body
183
+ typer = Typer::Simple.new("bar")
184
+
185
+ # incompatible body types
186
+ assert_raise(Typer::InferenceError) {ast.infer(typer)}
187
+
188
+ ast = AST.parse("if true; 1.0; else; 2.0; end").body
189
+
190
+ assert_nothing_raised {ast.infer(typer); typer.resolve(true)}
191
+
192
+ assert_equal(typer.boolean_type, ast.condition.inferred_type)
193
+ assert_equal(typer.float_type, ast.body.inferred_type)
194
+ assert_equal(typer.float_type, ast.else.inferred_type)
195
+
196
+ ast = AST.parse("if foo; bar; else; baz; end").body
197
+
198
+ assert_nothing_raised {ast.infer(typer)}
199
+
200
+ assert_equal(typer.default_type, ast.condition.inferred_type)
201
+ assert_equal(typer.default_type, ast.body.inferred_type)
202
+ assert_equal(typer.default_type, ast.else.inferred_type)
203
+
204
+ # unresolved types for the foo, bar, and baz calls
205
+ assert_raise(Typer::InferenceError) {typer.resolve(true)}
206
+
207
+ ast2 = AST.parse("def foo; 1; end; def bar; 1.0; end")
208
+
209
+ ast2.infer(typer)
210
+ ast.infer(typer)
211
+
212
+ # unresolved types for the baz call
213
+ assert_raise(Typer::InferenceError) {typer.resolve(true)}
214
+
215
+ assert_equal(AST.error_type, ast.condition.inferred_type)
216
+ assert_equal(AST.error_type, ast.body.inferred_type)
217
+ assert_equal(AST.error_type, ast.else.inferred_type)
218
+
219
+ typer.errors.clear
220
+
221
+ ast2 = AST.parse("def baz; 2.0; end")
222
+
223
+ ast2.infer(typer)
224
+ ast.infer(typer)
225
+
226
+ assert_nothing_raised {typer.resolve(true)}
227
+
228
+ assert_equal(typer.float_type, ast2.body.inferred_type)
229
+ end
230
+
231
+ def test_class
232
+ ast = AST.parse("class Foo; def foo; 1; end; def baz; foo; end; end")
233
+ cls = ast.body
234
+ foo = cls.body[0]
235
+ baz = cls.body[1]
236
+
237
+ typer = Typer::Simple.new("script")
238
+ ast.infer(typer)
239
+
240
+ assert_nothing_raised {typer.resolve(true)}
241
+
242
+ assert_not_nil(typer.known_types["Foo"])
243
+ assert(AST::TypeDefinition === typer.known_types["Foo"])
244
+ assert_equal(typer.known_types["Foo"], cls.inferred_type)
245
+ end
246
+ end
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: duby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: java
6
+ authors:
7
+ - Charles Oliver Nutter
8
+ - Ryan Brown
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2010-02-15 19:19:39.063000 -06:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bitescript
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.5
25
+ version:
26
+ description: |-
27
+ Duby is a customizable programming language featuring static types,
28
+ local type inference and a heavily Ruby-inspired syntax. Duby
29
+ currently includes a typer/compiler backend for the JVM which can
30
+ output either JVM bytecode or Java source files.
31
+ email:
32
+ - headius@headius.com
33
+ - ribrdb@google.com
34
+ executables:
35
+ - duby
36
+ - dubyc
37
+ - dubyp
38
+ extensions: []
39
+
40
+ extra_rdoc_files:
41
+ - History.txt
42
+ - README.txt
43
+ files:
44
+ - bin/duby
45
+ - bin/dubyc
46
+ - bin/dubyp
47
+ - lib/duby.rb
48
+ - lib/duby/ast.rb
49
+ - lib/duby/compiler.rb
50
+ - lib/duby/nbcompiler.rb
51
+ - lib/duby/transform.rb
52
+ - lib/duby/typer.rb
53
+ - lib/duby/ast/call.rb
54
+ - lib/duby/ast/class.rb
55
+ - lib/duby/ast/flow.rb
56
+ - lib/duby/ast/intrinsics.rb
57
+ - lib/duby/ast/literal.rb
58
+ - lib/duby/ast/local.rb
59
+ - lib/duby/ast/method.rb
60
+ - lib/duby/ast/structure.rb
61
+ - lib/duby/ast/type.rb
62
+ - lib/duby/c/compiler.rb
63
+ - lib/duby/jvm/compiler.rb
64
+ - lib/duby/jvm/method_lookup.rb
65
+ - lib/duby/jvm/source_compiler.rb
66
+ - lib/duby/jvm/typer.rb
67
+ - lib/duby/jvm/types.rb
68
+ - lib/duby/jvm/source_generator/builder.rb
69
+ - lib/duby/jvm/source_generator/loops.rb
70
+ - lib/duby/jvm/source_generator/precompile.rb
71
+ - lib/duby/jvm/source_generator/typer.rb
72
+ - lib/duby/jvm/types/basic_types.rb
73
+ - lib/duby/jvm/types/boolean.rb
74
+ - lib/duby/jvm/types/enumerable.rb
75
+ - lib/duby/jvm/types/factory.rb
76
+ - lib/duby/jvm/types/floats.rb
77
+ - lib/duby/jvm/types/integers.rb
78
+ - lib/duby/jvm/types/intrinsics.rb
79
+ - lib/duby/jvm/types/literals.rb
80
+ - lib/duby/jvm/types/methods.rb
81
+ - lib/duby/jvm/types/number.rb
82
+ - lib/duby/old/compiler_old.rb
83
+ - lib/duby/old/declaration.rb
84
+ - lib/duby/old/mapper.rb
85
+ - lib/duby/old/signature.rb
86
+ - lib/duby/old/typer_old.rb
87
+ - lib/duby/plugin/edb.rb
88
+ - lib/duby/plugin/java.rb
89
+ - lib/duby/plugin/math.rb
90
+ - test/test_ast.rb
91
+ - test/test_compilation.rb
92
+ - test/test_java_typer.rb
93
+ - test/test_javac_compiler.rb
94
+ - test/test_jvm_compiler.rb
95
+ - test/test_math_plugin.rb
96
+ - test/test_typer.rb
97
+ - test/TestUser.class
98
+ - examples/construction.duby
99
+ - examples/edb.duby
100
+ - examples/fib.duby
101
+ - examples/fields.duby
102
+ - examples/fractal.duby
103
+ - examples/java_thing.duby
104
+ - examples/README
105
+ - examples/simple_class.duby
106
+ - examples/swing.duby
107
+ - examples/tak.duby
108
+ - examples/test.edb
109
+ - examples/appengine/config.ru
110
+ - examples/appengine/Rakefile
111
+ - examples/appengine/Readme
112
+ - examples/appengine/lib/duby/plugin/datastore.rb
113
+ - examples/appengine/src/com/google/appengine/ext/duby/db/Model.duby
114
+ - examples/appengine/src/com/ribrdb/DubyApp.duby
115
+ - examples/appengine/src/com/ribrdb/list.dhtml
116
+ - javalib/JRubyParser.jar
117
+ - History.txt
118
+ - README.txt
119
+ - Rakefile
120
+ has_rdoc: true
121
+ homepage: http://kenai.com/projects/duby
122
+ licenses: []
123
+
124
+ post_install_message:
125
+ rdoc_options:
126
+ - --main
127
+ - README.txt
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: "0"
135
+ version:
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: "0"
141
+ version:
142
+ requirements: []
143
+
144
+ rubyforge_project: duby
145
+ rubygems_version: 1.3.5
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Duby is a customizable programming language featuring static types, local type inference and a heavily Ruby-inspired syntax
149
+ test_files:
150
+ - test/test_ast.rb
151
+ - test/test_compilation.rb
152
+ - test/test_java_typer.rb
153
+ - test/test_javac_compiler.rb
154
+ - test/test_jvm_compiler.rb
155
+ - test/test_math_plugin.rb
156
+ - test/test_typer.rb