bitescript 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,18 +1,12 @@
1
+ === 0.0.5 / 2010-02-04
2
+
3
+ * Get tests and examples all working nicely again
4
+ * Clean up some -w noise from mangled ASM path
5
+ * Annotations, exceptions, many other Java features added
6
+
1
7
  === 0.0.4 / 2009-10-27
2
8
 
3
- * Multiple improvements to support Duby (thanks to Ryan Brown!):
4
- * Add support for shadowing local variables
5
- * Interface and "throws" support.
6
- * Add an accessor for ClassBuilder.interfaces
7
- * ignore nil line numbers
8
- * Fix typo in line numbering
9
- * Improve debug info support
10
- * Fix class.stop to generate a valid constructor when one is not defined.
11
- * Fix void comparison bugs
12
- * Fix string concat
13
- * Allow custom classes to represent primitive types
14
- * Add support for big locals (long/double)
15
- * Add a static? accessor to MethodBuilder.
9
+ * Numeric fixes and feature additions to support Duby and other consumers
16
10
 
17
11
  === 0.0.3 / 2009-06-14
18
12
 
data/Rakefile CHANGED
@@ -1,17 +1,11 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
3
  require 'rake/rdoctask'
4
- require 'hoe'
5
4
  $: << './lib'
6
- require 'bitescript.rb'
7
-
8
- Hoe.new('bitescript', BiteScript::VERSION) do |p|
9
- p.rubyforge_name = 'jruby-extras'
10
- p.url = "http://kenai.com/projects/jvmscript"
11
- p.author = "charles.nutter@sun.com"
12
- p.summary = "BiteScript is a Ruby DSL for generating Java bytecode."
13
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
14
- p.developer('Charles Oliver Nutter', 'charles.nutter@sun.com')
15
- end
16
5
 
17
6
  task :default => :test
7
+
8
+ Rake::TestTask.new :test do |t|
9
+ t.libs << "lib"
10
+ t.test_files = FileList["test/**/*.rb"]
11
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{bitescript}
5
+ s.version = "0.0.5"
6
+ s.authors = ["Charles Oliver Nutter", "Ryan Brown"]
7
+ s.date = Time.now.strftime('YYYY-MM-DD')
8
+ s.description = %q{BiteScript is a Ruby DSL for generating Java bytecode and classes.}
9
+ s.email = ["headius@headius.com", "ribrdb@gmail.com"]
10
+ s.executables = ["bite", "bitec"]
11
+ s.extra_rdoc_files = Dir['*.txt']
12
+ s.files = Dir['{bin,examples,lib,nbproject,test}/**/*'] + Dir['{*.txt,*.gemspec,Rakefile}']
13
+ puts s.files
14
+ s.homepage = %q{http://kenai.com/projects/jvmscript}
15
+ s.rdoc_options = ["--main", "README.txt"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{jruby-extras}
18
+ s.rubygems_version = %q{1.3.5}
19
+ s.summary = %q{BiteScript is a Ruby DSL for generating Java bytecode.}
20
+ s.test_files = Dir["test/test*.rb"]
21
+ end
data/examples/fib.bs CHANGED
@@ -58,7 +58,7 @@ main do
58
58
  returnvoid
59
59
  end
60
60
 
61
- public_static_method "fib", int, int do
61
+ public_static_method "fib", [], int, int do
62
62
  iload 0
63
63
  ldc 2
64
64
  recurse = label
@@ -0,0 +1,5 @@
1
+ main do
2
+ ldc "Hello, world!"
3
+ aprintln
4
+ returnvoid
5
+ end
@@ -0,0 +1,23 @@
1
+ import java.lang.System
2
+ import java.io.PrintStream
3
+
4
+ macro :aprintln do
5
+ getstatic System, :out, PrintStream
6
+ swap
7
+ invokevirtual PrintStream, println, [Object]
8
+ end
9
+
10
+ macro :aprint do
11
+ getstatic System, :out, PrintStream
12
+ swap
13
+ invokevirtual PrintStream, print, [Object]
14
+ end
15
+
16
+ main do
17
+ ldc "Hello, "
18
+ aprint
19
+ aload 0
20
+ aaload 0
21
+ aprintln
22
+ returnvoid
23
+ end
data/examples/indy.bs ADDED
@@ -0,0 +1 @@
1
+ main { aload 0; invokedynamic object, 'foo', [object]; returnvoid }
@@ -10,7 +10,7 @@ builder = BiteScript::FileBuilder.build("somefile.source") do
10
10
  public_class "MyClass", object do
11
11
  public_field "list", ArrayList
12
12
 
13
- public_constructor string, ArrayList do
13
+ public_constructor [], string, ArrayList do
14
14
  aload 0
15
15
  invokespecial object, "<init>", [void]
16
16
  aload 0
@@ -23,7 +23,7 @@ builder = BiteScript::FileBuilder.build("somefile.source") do
23
23
  returnvoid
24
24
  end
25
25
 
26
- public_static_method "foo", this, string do
26
+ public_static_method "foo", [], this, string do
27
27
  new this
28
28
  dup
29
29
  aload 0
@@ -34,7 +34,7 @@ builder = BiteScript::FileBuilder.build("somefile.source") do
34
34
  areturn
35
35
  end
36
36
 
37
- public_method "bar", ArrayList, string, ArrayList do
37
+ public_method "bar", [], ArrayList, string, ArrayList do
38
38
  aload 1
39
39
  invokevirtual(string, "toLowerCase", string)
40
40
  aload 2
@@ -44,13 +44,13 @@ builder = BiteScript::FileBuilder.build("somefile.source") do
44
44
  areturn
45
45
  end
46
46
 
47
- public_method("getList", ArrayList) do
47
+ public_method("getList", [], ArrayList) do
48
48
  aload 0
49
49
  getfield this, "list", ArrayList
50
50
  areturn
51
51
  end
52
52
 
53
- public_static_method("main", void, string[]) do
53
+ public_static_method("main", [], void, string[]) do
54
54
  aload 0
55
55
  ldc_int 0
56
56
  aaload
@@ -4,7 +4,7 @@ include BiteScript
4
4
 
5
5
  fb = FileBuilder.build(__FILE__) do
6
6
  public_class "SimpleLoop" do
7
- public_static_method "main", void, string[] do
7
+ public_static_method "main", [], void, string[] do
8
8
  aload 0
9
9
  push_int 0
10
10
  aaload
@@ -0,0 +1,7 @@
1
+ main do
2
+ 5.times do
3
+ ldc "Wow!"
4
+ aprintln
5
+ end
6
+ returnvoid
7
+ end
@@ -4,6 +4,9 @@ module BiteScript
4
4
  module ASM
5
5
  begin
6
6
  # try mangled names for the version included with JRuby
7
+ java.lang.Class.for_name 'jruby.objectweb.asm.Opcodes'
8
+
9
+ # no error, proceed with mangled name
7
10
  asm_package = Java::jruby.objectweb.asm
8
11
  java_import asm_package.Opcodes
9
12
  rescue Exception
@@ -13,5 +16,6 @@ module BiteScript
13
16
  end
14
17
  java_import asm_package.Label
15
18
  java_import asm_package.Type
19
+ java_import asm_package.ClassWriter
16
20
  end
17
21
  end
@@ -58,6 +58,29 @@ module BiteScript
58
58
  nil
59
59
  end
60
60
  end
61
+
62
+ module Annotatable
63
+ java_import "java.lang.annotation.Retention"
64
+ def annotate(cls, runtime=nil)
65
+ if Java::JavaClass === cls
66
+ java_class = cls
67
+ else
68
+ java_class = cls.java_class
69
+ end
70
+
71
+ if runtime.nil?
72
+ retention = java_class.annotation(Retention.java_class)
73
+ return if retention && retention.value.name == 'CLASS'
74
+ runtime = retention && retention.value.name == 'RUNTIME'
75
+ end
76
+
77
+ annotation = visit_annotation(Signature.ci(java_class), runtime)
78
+ annotation.extend AnnotationBuilder
79
+
80
+ yield annotation
81
+ annotation.visit_end
82
+ end
83
+ end
61
84
 
62
85
  class FileBuilder
63
86
  include Util
@@ -173,14 +196,8 @@ module BiteScript
173
196
  class ClassBuilder
174
197
  include Util
175
198
  include QuickTypes
176
-
177
- begin
178
- java_import "jruby.objectweb.asm.Opcodes"
179
- java_import "jruby.objectweb.asm.ClassWriter"
180
- rescue
181
- java_import "org.objectweb.asm.Opcodes"
182
- java_import "org.objectweb.asm.ClassWriter"
183
- end
199
+ include Annotatable
200
+ include ASM
184
201
 
185
202
  java_import java.lang.Object
186
203
  java_import java.lang.Void
@@ -202,7 +219,7 @@ module BiteScript
202
219
  @interface = opts[:interface]
203
220
  flags = Opcodes::ACC_SUPER
204
221
  if @interface
205
- flags |= Opcodes::ACC_INTERFACE | Opcodes::ACC_ABSTRACT
222
+ flags = Opcodes::ACC_INTERFACE | Opcodes::ACC_ABSTRACT
206
223
  end
207
224
 
208
225
  @class_writer = ClassWriter.new(ClassWriter::COMPUTE_MAXS)
@@ -271,32 +288,32 @@ module BiteScript
271
288
  ", binding, __FILE__, __LINE__
272
289
  # instance methods; also defines a "this" local at index 0
273
290
  eval "
274
- def #{modifier}_method(name, exceptions, *signature, &block)
291
+ def #{modifier}_method(name, exceptions=[], *signature, &block)
275
292
  method(Opcodes::ACC_#{modifier.upcase}, name, signature, exceptions, &block)
276
293
  end
277
294
  ", binding, __FILE__, __LINE__
278
295
  # static methods
279
296
  eval "
280
- def #{modifier}_static_method(name, exceptions, *signature, &block)
297
+ def #{modifier}_static_method(name, exceptions=[], *signature, &block)
281
298
  method(Opcodes::ACC_STATIC | Opcodes::ACC_#{modifier.upcase}, name, signature, exceptions, &block)
282
299
  end
283
300
  ", binding, __FILE__, __LINE__
284
301
  # native methods
285
302
  eval "
286
- def #{modifier}_native_method(name, exceptions, *signature)
303
+ def #{modifier}_native_method(name, exceptions=[], *signature)
287
304
  method(Opcodes::ACC_NATIVE | Opcodes::ACC_#{modifier.upcase}, name, signature, exceptions)
288
305
  end
289
306
  ", binding, __FILE__, __LINE__
290
307
  # constructors; also defines a "this" local at index 0
291
308
  eval "
292
- def #{modifier}_constructor(exceptions, *signature, &block)
309
+ def #{modifier}_constructor(exceptions=[], *signature, &block)
293
310
  @constructor = method(Opcodes::ACC_#{modifier.upcase}, \"<init>\", [nil, *signature], exceptions, &block)
294
311
  end
295
312
  ", binding, __FILE__, __LINE__
296
313
  end
297
314
 
298
315
  def static_init(&block)
299
- method(Opcodes::ACC_STATIC, "<clinit>", [void], &block)
316
+ method(Opcodes::ACC_STATIC, "<clinit>", [void], [], &block)
300
317
  end
301
318
 
302
319
  def method(flags, name, signature, exceptions, &block)
@@ -350,7 +367,8 @@ module BiteScript
350
367
  end
351
368
 
352
369
  def field(flags, name, type)
353
- @class_writer.visit_field(flags, name, ci(type), nil, nil)
370
+ field = @class_writer.visit_field(flags, name, ci(type), nil, nil)
371
+ field.extend Annotatable
354
372
  end
355
373
 
356
374
  # name for signature generation using the class being generated
@@ -372,9 +390,15 @@ module BiteScript
372
390
  self
373
391
  end
374
392
 
393
+ def visit_annotation(*args)
394
+ @class_writer.visit_annotation(*args)
395
+ end
396
+
375
397
  def new_method(modifiers, name, signature, exceptions)
376
398
  exceptions ||= []
377
- raise ArgumentError unless exceptions.kind_of?(Array)
399
+ unless exceptions.kind_of?(Array)
400
+ raise ArgumentError, "Expected array of exceptions, got #{exceptions.inspect}"
401
+ end
378
402
  exceptions = exceptions.map {|e| path(e)}
379
403
  @class_writer.visit_method(modifiers, name, sig(*signature), nil, exceptions.to_java(:string))
380
404
  end
@@ -385,14 +409,10 @@ module BiteScript
385
409
  end
386
410
 
387
411
  class MethodBuilder
388
- begin
389
- java_import "jruby.objectweb.asm.Opcodes"
390
- rescue
391
- java_import "org.objectweb.asm.Opcodes"
392
- end
393
-
394
412
  include QuickTypes
413
+ include Annotatable
395
414
  include BiteScript::Bytecode
415
+ include ASM
396
416
 
397
417
  attr_reader :method_visitor
398
418
  attr_reader :static
@@ -458,7 +478,7 @@ module BiteScript
458
478
  @class_builder
459
479
  end
460
480
 
461
- def local(name, type)
481
+ def local(name, type=nil)
462
482
  if name == "this" && @static
463
483
  raise "'this' attempted to load from static method"
464
484
  end
@@ -466,6 +486,7 @@ module BiteScript
466
486
  if @locals[name]
467
487
  return @locals[name][-1][0]
468
488
  else
489
+ raise ArgumentError, 'Local type required' unless type
469
490
  return push_local(name, type, @start_label)
470
491
  end
471
492
  end
@@ -508,22 +529,13 @@ module BiteScript
508
529
  @locals[name][-1][-1] = here if @locals[name].size > 0
509
530
  end
510
531
 
511
- def annotate(cls, runtime = false)
512
- if Java::JavaClass == cls
513
- java_class = cls
514
- else
515
- java_class = cls.java_class
516
- end
517
-
518
- annotation = @method_visitor.visit_annotation(ci(java_class), true)
519
- annotation.extend AnnotationBuilder
520
-
521
- yield annotation
522
- annotation.visit_end
532
+ def visit_annotation(*args)
533
+ @method_visitor.visit_annotation(*args)
523
534
  end
524
535
  end
525
536
 
526
537
  module AnnotationBuilder
538
+ include Signature
527
539
  def method_missing(name, val)
528
540
  name_str = name.to_s
529
541
  if name_str[-1] == ?=
@@ -543,7 +555,7 @@ module BiteScript
543
555
  visit k, v
544
556
  end
545
557
  def annotation(name, cls)
546
- if Java::JavaClass == cls
558
+ if Java::JavaClass === cls
547
559
  java_class = cls
548
560
  else
549
561
  java_class = cls.java_class
data/lib/bitescript.rb CHANGED
@@ -5,8 +5,6 @@ require 'bitescript/bytecode'
5
5
  require 'bitescript/builder'
6
6
 
7
7
  module BiteScript
8
- VERSION = '0.0.4'
9
-
10
8
  include BiteScript::ASM
11
9
  JAVA1_4 = Opcodes::V1_4
12
10
  JAVA1_5 = Opcodes::V1_5
File without changes
@@ -0,0 +1,3 @@
1
+ file.reference.jvmscript-lib=/Users/headius/projects/bitescript/lib
2
+ file.reference.jvmscript-test=/Users/headius/projects/bitescript/test
3
+ platform.active=default
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
3
+ <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
4
+ </project-private>
@@ -0,0 +1,9 @@
1
+ file.reference.jvmscript-lib=lib
2
+ file.reference.jvmscript-test=test
3
+ javac.classpath=
4
+ main.file=
5
+ platform.active=default
6
+ source.encoding=UTF-8
7
+ src.examples.dir=examples
8
+ src.lib.dir=lib
9
+ test.test.dir=test
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://www.netbeans.org/ns/project/1">
3
+ <type>org.netbeans.modules.ruby.rubyproject</type>
4
+ <configuration>
5
+ <data xmlns="http://www.netbeans.org/ns/ruby-project/1">
6
+ <name>BiteScript</name>
7
+ <source-roots>
8
+ <root id="src.examples.dir"/>
9
+ <root id="src.lib.dir"/>
10
+ </source-roots>
11
+ <test-roots>
12
+ <root id="test.test.dir"/>
13
+ </test-roots>
14
+ </data>
15
+ </configuration>
16
+ </project>
data/test/test_builder.rb CHANGED
@@ -20,7 +20,7 @@ class TestBuilder < Test::Unit::TestCase
20
20
  end
21
21
 
22
22
  def dummy_constructor(class_builder)
23
- class_builder.public_constructor do
23
+ class_builder.public_constructor([]) do
24
24
  aload local 'this'
25
25
  invokespecial object, '<init>', [void]
26
26
  returnvoid
@@ -43,7 +43,7 @@ class TestBuilder < Test::Unit::TestCase
43
43
  def try(return_type, &b)
44
44
  class_name = new_class_name
45
45
  cb = @builder.public_class(class_name, @builder.object);
46
- cb.public_static_method("foo", return_type, &b)
46
+ cb.public_static_method("foo", [], return_type, &b)
47
47
  dummy_constructor(cb)
48
48
  cls = load(class_name, cb)
49
49
  cls.foo
@@ -75,7 +75,6 @@ class TestBuilder < Test::Unit::TestCase
75
75
  pop
76
76
  aload 0
77
77
  # monitorexit
78
- label :end
79
78
  trycatch(:begin, :finally, :finally, nil)
80
79
  trycatch(:finally, :end, :finally, nil)
81
80
  after.set!
@@ -171,7 +170,6 @@ class TestBuilder < Test::Unit::TestCase
171
170
  label :catch
172
171
  ldc 2
173
172
  ireturn
174
- label :end
175
173
  trycatch(:begin, :catch, :catch, java.lang.Exception)
176
174
  }
177
175
  end
@@ -248,10 +246,10 @@ class TestBuilder < Test::Unit::TestCase
248
246
 
249
247
  def test_instance_method_this
250
248
  cb = @builder.public_class(@class_name, @builder.object);
251
- method = cb.public_method("foo", cb.this) {aload local 'this'; areturn}
249
+ method = cb.public_method("foo", [], cb.this) {aload local 'this'; areturn}
252
250
 
253
251
  # ensure "this" is taking slot zero
254
- method.local('another')
252
+ method.local('another', Java::int)
255
253
  assert_equal(method.local('this'), 0)
256
254
  assert_equal(method.local('another'), 1)
257
255
 
@@ -264,7 +262,7 @@ class TestBuilder < Test::Unit::TestCase
264
262
  def test_constructor_this
265
263
  cb = @builder.public_class(@class_name, @builder.object);
266
264
  cb.private_field "self", cb.this
267
- constructor = cb.public_constructor do
265
+ constructor = cb.public_constructor([]) do
268
266
  aload 0
269
267
  dup
270
268
  invokespecial object, "<init>", [void]
@@ -273,14 +271,14 @@ class TestBuilder < Test::Unit::TestCase
273
271
  returnvoid
274
272
  end
275
273
 
276
- cb.public_method "get_self", cb.this do
274
+ cb.public_method "get_self", [], cb.this do
277
275
  aload 0
278
276
  getfield this, "self", this
279
277
  areturn
280
278
  end
281
279
 
282
280
  # ensure "this" is taking slot zero
283
- constructor.local('another')
281
+ constructor.local('another', Java::int)
284
282
  assert_equal(constructor.local('this'), 0)
285
283
  assert_equal(constructor.local('another'), 1)
286
284
 
@@ -292,7 +290,7 @@ class TestBuilder < Test::Unit::TestCase
292
290
  cb = @builder.public_class(@class_name, @builder.object);
293
291
 
294
292
  body_called = false
295
- cb.public_native_method("yoohoo") {body_called = true}
293
+ cb.public_native_method("yoohoo", []) {body_called = true}
296
294
 
297
295
  assert !body_called
298
296
 
@@ -309,10 +307,10 @@ class TestBuilder < Test::Unit::TestCase
309
307
  cb.public_field('inst_field', JString)
310
308
  cb.public_static_field('static_field', JString)
311
309
 
312
- cb.public_method('set_inst', cb.void) {aload 0; ldc 'instance'; putfield this, 'inst_field', JString; returnvoid}
313
- cb.public_method('set_static', cb.void) {ldc 'static'; putstatic this, 'static_field', JString; returnvoid}
314
- cb.public_method('get_inst', JString) {aload 0; getfield this, 'inst_field', JString; areturn}
315
- cb.public_method('get_static', JString) {getstatic this, 'static_field', JString; areturn}
310
+ cb.public_method('set_inst', [], cb.void) {aload 0; ldc 'instance'; putfield this, 'inst_field', JString; returnvoid}
311
+ cb.public_method('set_static', [], cb.void) {ldc 'static'; putstatic this, 'static_field', JString; returnvoid}
312
+ cb.public_method('get_inst', [], JString) {aload 0; getfield this, 'inst_field', JString; areturn}
313
+ cb.public_method('get_static', [], JString) {getstatic this, 'static_field', JString; areturn}
316
314
 
317
315
  dummy_constructor(cb)
318
316
  obj = load_and_construct(@class_name, cb);
@@ -328,15 +326,15 @@ class TestBuilder < Test::Unit::TestCase
328
326
  def test_arrays
329
327
  cb = @builder.public_class(@class_name, @builder.object);
330
328
 
331
- cb.public_method("newbooleanarray", cb.boolean[]) {ldc 5; newbooleanarray; dup; ldc 1; ldc true; bastore; dup; dup; ldc 2; swap; ldc 1; baload; bastore; areturn}
332
- cb.public_method("newbytearray", cb.byte[]) {ldc 5; newbytearray; dup; ldc 1; ldc 1; bastore; dup; dup; ldc 2; swap; ldc 1; baload; bastore; areturn}
333
- cb.public_method("newshortarray", cb.short[]) {ldc 5; newshortarray; dup; ldc 1; ldc 1; sastore; dup; dup; ldc 2; swap; ldc 1; saload; sastore; areturn}
334
- cb.public_method("newchararray", cb.char[]) {ldc 5; newchararray; dup; ldc 1; ldc 1; castore; dup; dup; ldc 2; swap; ldc 1; caload; castore; areturn}
335
- cb.public_method("newintarray", cb.int[]) {ldc 5; newintarray; dup; ldc 1; ldc 1; iastore; dup; dup; ldc 2; swap; ldc 1; iaload; iastore; areturn}
336
- cb.public_method("newlongarray", cb.long[]) {ldc 5; newlongarray; dup; ldc 1; ldc_long 1; lastore; dup; dup; ldc 2; swap; ldc 1; laload; lastore; areturn}
337
- cb.public_method("newfloatarray", cb.float[]) {ldc 5; newfloatarray; dup; ldc 1; ldc_float 1.0; fastore; dup; dup; ldc 2; swap; ldc 1; faload; fastore; areturn}
338
- cb.public_method("newdoublearray", cb.double[]) {ldc 5; newdoublearray; dup; ldc 1; ldc 1.0; dastore; dup; dup; ldc 2; swap; ldc 1; daload; dastore; areturn}
339
- cb.public_method("anewarray", cb.string[]) {ldc 5; anewarray JString; dup; ldc 1; ldc 'foo'; aastore; dup; dup; ldc 2; swap; ldc 1; aaload; aastore; areturn}
329
+ cb.public_method("newbooleanarray", [], cb.boolean[]) {ldc 5; newbooleanarray; dup; ldc 1; ldc true; bastore; dup; dup; ldc 2; swap; ldc 1; baload; bastore; areturn}
330
+ cb.public_method("newbytearray", [], cb.byte[]) {ldc 5; newbytearray; dup; ldc 1; ldc 1; bastore; dup; dup; ldc 2; swap; ldc 1; baload; bastore; areturn}
331
+ cb.public_method("newshortarray", [], cb.short[]) {ldc 5; newshortarray; dup; ldc 1; ldc 1; sastore; dup; dup; ldc 2; swap; ldc 1; saload; sastore; areturn}
332
+ cb.public_method("newchararray", [], cb.char[]) {ldc 5; newchararray; dup; ldc 1; ldc 1; castore; dup; dup; ldc 2; swap; ldc 1; caload; castore; areturn}
333
+ cb.public_method("newintarray", [], cb.int[]) {ldc 5; newintarray; dup; ldc 1; ldc 1; iastore; dup; dup; ldc 2; swap; ldc 1; iaload; iastore; areturn}
334
+ cb.public_method("newlongarray", [], cb.long[]) {ldc 5; newlongarray; dup; ldc 1; ldc_long 1; lastore; dup; dup; ldc 2; swap; ldc 1; laload; lastore; areturn}
335
+ cb.public_method("newfloatarray", [], cb.float[]) {ldc 5; newfloatarray; dup; ldc 1; ldc_float 1.0; fastore; dup; dup; ldc 2; swap; ldc 1; faload; fastore; areturn}
336
+ cb.public_method("newdoublearray", [], cb.double[]) {ldc 5; newdoublearray; dup; ldc 1; ldc 1.0; dastore; dup; dup; ldc 2; swap; ldc 1; daload; dastore; areturn}
337
+ cb.public_method("anewarray", [], cb.string[]) {ldc 5; anewarray JString; dup; ldc 1; ldc 'foo'; aastore; dup; dup; ldc 2; swap; ldc 1; aaload; aastore; areturn}
340
338
 
341
339
  dummy_constructor(cb)
342
340
  obj = load_and_construct(@class_name, cb);
@@ -404,7 +402,7 @@ class TestBuilder < Test::Unit::TestCase
404
402
  def test_annotation
405
403
  cb = @builder.public_class(@class_name, @builder.object);
406
404
 
407
- cb.public_method("annotated", cb.void) do
405
+ cb.public_method("annotated", [], cb.void) do
408
406
  annotate(JRubyMethod, true) do |anno|
409
407
  anno.name = ["foo"]
410
408
  anno.required = 1
@@ -70,8 +70,8 @@ class TestBytecode < Test::Unit::TestCase
70
70
 
71
71
  assert_equal([:visit_int_insn, Opcodes::SIPUSH, -129], @dummy.single {ldc(-129)})
72
72
  assert_equal([:visit_int_insn, Opcodes::SIPUSH, 128], @dummy.single {ldc(128)})
73
- assert_equal([:visit_ldc_insn, -65537], @dummy.single {ldc(-65537)})
74
- assert_equal([:visit_ldc_insn, 65536], @dummy.single {ldc(65536)})
73
+ assert_equal([:visit_ldc_insn, java.lang.Integer.new(-32769)], @dummy.single {ldc(-32769)})
74
+ assert_equal([:visit_ldc_insn, java.lang.Integer.new(32768)], @dummy.single {ldc(32768)})
75
75
  assert_equal([:visit_ldc_insn, java.lang.Integer::MIN_VALUE - 1], @dummy.single {ldc(java.lang.Integer::MIN_VALUE - 1)})
76
76
  assert_equal([:visit_ldc_insn, java.lang.Integer::MAX_VALUE + 1], @dummy.single {ldc(java.lang.Integer::MAX_VALUE + 1)})
77
77
 
@@ -394,7 +394,8 @@ class TestBytecode < Test::Unit::TestCase
394
394
 
395
395
  def test_label
396
396
  l1 = label
397
- assert_equal([:visit_label, l1.label], l1.set!)
397
+ l1.set!
398
+ assert_equal([:visit_label, l1.label], @dummy.all.first)
398
399
  end
399
400
 
400
401
  def test_aprintln
@@ -19,8 +19,8 @@ class TestJavaClass < Test::Unit::TestCase
19
19
  assert_equal [java.lang.String.java_class], cons2.parameter_types
20
20
 
21
21
  cls = BiteScript::FileBuilder.new('x').#{visibility}_class('y')
22
- cls.public_constructor()
23
- cls.public_constructor(java.lang.String.java_class)
22
+ cls.public_constructor([])
23
+ cls.public_constructor([], java.lang.String.java_class)
24
24
 
25
25
  cons1 = cls.constructor()
26
26
  cons2 = cls.constructor(java.lang.String.java_class)
@@ -47,8 +47,8 @@ class TestJavaClass < Test::Unit::TestCase
47
47
  assert_equal [java.lang.Object.java_class], m2.parameter_types
48
48
 
49
49
  cls = BiteScript::FileBuilder.new('x').#{visibility}_class('y')
50
- cls.public_method('toString', java.lang.String.java_class)
51
- cls.public_method('equals', Java::boolean.java_class, java.lang.Object.java_class)
50
+ cls.public_method('toString', [], java.lang.String.java_class)
51
+ cls.public_method('equals', [], Java::boolean.java_class, java.lang.Object.java_class)
52
52
 
53
53
  m1 = cls.java_method('toString')
54
54
  m2 = cls.java_method('equals', java.lang.Object.java_class)
metadata CHANGED
@@ -1,30 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitescript
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
- - charles.nutter@sun.comCharles Oliver Nutter
7
+ - Charles Oliver Nutter
8
+ - Ryan Brown
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2009-10-27 00:00:00 -05:00
13
+ date: 2010-02-15 12:41:28.313000 -06:00
13
14
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: hoe
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 2.3.3
24
- version:
15
+ dependencies: []
16
+
25
17
  description: BiteScript is a Ruby DSL for generating Java bytecode and classes.
26
18
  email:
27
- - charles.nutter@sun.com
19
+ - headius@headius.com
20
+ - ribrdb@gmail.com
28
21
  executables:
29
22
  - bite
30
23
  - bitec
@@ -33,29 +26,37 @@ extensions: []
33
26
  extra_rdoc_files:
34
27
  - History.txt
35
28
  - LICENSE.txt
36
- - Manifest.txt
37
29
  - README.txt
38
30
  files:
39
- - History.txt
40
- - LICENSE.txt
41
- - Manifest.txt
42
- - README.txt
43
- - Rakefile
44
31
  - bin/bite
45
32
  - bin/bitec
46
33
  - examples/fib.bs
34
+ - examples/hello_world.bs
35
+ - examples/hello_world_macro.bs
36
+ - examples/indy.bs
47
37
  - examples/mixed_bag.rb
48
38
  - examples/simple_loop.rb
39
+ - examples/using_ruby.bs
49
40
  - lib/bitescript.rb
50
41
  - lib/bitescript/asm.rb
51
42
  - lib/bitescript/builder.rb
52
43
  - lib/bitescript/bytecode.rb
53
44
  - lib/bitescript/signature.rb
45
+ - nbproject/project.properties
46
+ - nbproject/project.xml
47
+ - nbproject/private/config.properties
48
+ - nbproject/private/private.properties
49
+ - nbproject/private/private.xml
54
50
  - test/test_bitescript.rb
55
51
  - test/test_builder.rb
56
52
  - test/test_bytecode.rb
57
53
  - test/test_java_class.rb
58
54
  - test/test_signature.rb
55
+ - History.txt
56
+ - LICENSE.txt
57
+ - README.txt
58
+ - bitescript.gemspec
59
+ - Rakefile
59
60
  has_rdoc: true
60
61
  homepage: http://kenai.com/projects/jvmscript
61
62
  licenses: []
data/Manifest.txt DELETED
@@ -1,20 +0,0 @@
1
- History.txt
2
- LICENSE.txt
3
- Manifest.txt
4
- README.txt
5
- Rakefile
6
- bin/bite
7
- bin/bitec
8
- examples/fib.bs
9
- examples/mixed_bag.rb
10
- examples/simple_loop.rb
11
- lib/bitescript.rb
12
- lib/bitescript/asm.rb
13
- lib/bitescript/builder.rb
14
- lib/bitescript/bytecode.rb
15
- lib/bitescript/signature.rb
16
- test/test_bitescript.rb
17
- test/test_builder.rb
18
- test/test_bytecode.rb
19
- test/test_java_class.rb
20
- test/test_signature.rb