Just join the mailing lists on the kenai project page. I've been the 
only consumer up to now, so I appreciate your input. We can look at 
cleaning it up, building out more tests, and putting out a release version.

http://kenai.com/projects/jvmscript

- Charlie

René Jansen wrote:
> Hi Charlie,
> 
> I see; it works. What is the best forum for feedback?
> 
> For starters, it took me a minute to understand that void is used as a 
> method return type, but is left out as a method argument. This is no 
> problem as long as it is stated somewhere in block letters (avoiding the 
> words large type here).
> 
> Let me know if it is this forum or somewhere else.
> 
> Thanks for the tool and your help,
>  
> best regards,
> 
> René. 
> 
> On Tue, Oct 14, 2008 at 1:19 PM, Charles Oliver Nutter 
> <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
> 
> 
>     I need to provide some better examples, but the missing bit of code is
>     generating the class files after you've done the building process:
> 
>     builder.generate do |filename, class_builder|
>       File.open(filename, 'w') {|f| f.write(class_builder.generate)}
>     end
> 
>     The generate method on the main builder passes the .class filename and
>     the ClassBuilder for each class. ClassBuilder#generate produces the
>     bytes for the class.
> 
>     Note that I've never released JVMScript officially, but I want to; if
>     you start playing around with it, keep in mind the following:
> 
>     1. I'm interested in input and willing to make changes before doing a
>     release
>     2. The Compiler namespace will probably become JVMScript
> 
>     So a shorter, more complete example:
> 
>     ~/projects/duby ➔ cat simple.rb
>     require 'jvmscript'
> 
>     builder = Compiler::FileBuilder.build('simple.source') do
>       public_class 'simple', object do
>         public_static_method 'main', void, string[] do
>           aload 0
>           ldc_int 0
>           aaload
>           aprintln
>         end
>       end
>     end
> 
>     builder.generate do |file, cls|
>       File.open(file, 'w') {|f| f.write(cls.generate)}
>     end
> 
>     ~/projects/duby ➔ jruby -I ../jvmscript/lib simple.rb
> 
>     ~/projects/duby ➔ javap -c simple
>     Compiled from "simple.source"
>     public class simple extends java.lang.Object{
>     public static void main(java.lang.String[]);
>       Code:
>        0:  aload_0
>        1:  ldc     #8; //int 0
>        3:  aaload
>        4:  dup
>        5:  getstatic       #14; //Field
>     java/lang/System.out:Ljava/io/PrintStream;
>        8:  swap
>        9:  invokevirtual   #20; //Method
>     java/io/PrintStream.println:(Ljava/lang/Object;)V
> 
>     }
> 
>     - Charlie
> 
>     René Jansen wrote:
>      > Hi Charlie,
>      >
>      > thanks for sharing this, it looks most useful. I downloaded and
>     ran it;
>      > the testcases run ok. I cannot figure out how to make it write
>      > MyClass.class; please forgive me my Ruby-ignorance here. I
>     removed the
>      > things I though to be for the testcase only, and have it execute
>     outside
>      > of a method. It executes ok, but Erik Meijer would be very happy:
>     there
>      > are no side-effects. That I know of.
>      >
>      > best regards and thanks in advance.
>      >
>      > René.
>      >
>      > On Fri, Oct 10, 2008 at 7:58 PM, Charles Oliver Nutter
>      > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>     <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>> wrote:
>      >
>      >
>      >     René Jansen wrote:
>      >      > Just a quick question: which assembler are you guys using for
>      >      > experimentation? I find myself wanting to try out some things,
>      >     but I am
>      >      > in a bind between ooLong and Jasmin or maybe ASM. Is there an
>      >     unofficial
>      >      > official assembler, preferably something with macros (old
>     s/370 bal
>      >      > programmer that I am) and its own disassembler.
>      >      >
>      >      > I noticed there is a class called Assembler in the tools
>     sources, is
>      >      > this only usable from javac or is it addressable in any
>     other way?
>      >      >
>      >      > If no disassembler goes with the package, I would prefer
>      >     something that
>      >      > is close enough to javap that I can write a small thingy
>     to rearrange
>      >      > its output into something that I can assemble - something that
>      >     ASM can
>      >      > but in a very verbose way.
>      >      >
>      >      > Please let me know what you use.
>      >
>      >     I'm using ASM exclusively, but usually wrapped behind one of
>     my own
>      >     shims.
>      >
>      >     Either this super-trivial shim that just exposes a
>     method-per-opcode:
>      >
>      >     http://is.gd/3RsP
>      >
>      >     Or my unreleased Ruby DSL for ASM, "JVMScript":
>      >
>      >     http://kenai.com/projects/jvmscript
>      >
>      >     The latter is probably more interesting to you, but obviously
>     has a
>      >     dependency on JRuby. Perhaps that's not a problem for your
>     toolchain.
>      >
>      >     Here's a short sample:
>      >
>      >         builder = Compiler::FileBuilder.build("somefile.source") do
>      >           package "org.awesome", "stuff" do
>      >             public_class "MyClass", object do
>      >               public_field "list", ArrayList
>      >
>      >               public_constructor string, ArrayList do
>      >                 aload 0
>      >                 invokespecial object, "<init>", [void]
>      >                 aload 0
>      >                 aload 1
>      >                 aload 2
>      >                 invokevirtual this, "bar", [ArrayList, string,
>     ArrayList]
>      >                 aload 0
>      >                 swap
>      >                 putfield this, "list", ArrayList
>      >                 returnvoid
>      >               end
>      >
>      >               public_static_method "foo", this, string do
>      >                 new this
>      >                 dup
>      >                 aload 0
>      >                 new ArrayList
>      >                 dup
>      >                 invokespecial ArrayList, "<init>", [void]
>      >                 invokespecial this, "<init>", [void, string,
>     ArrayList]
>      >                 areturn
>      >               end
>      >
>      >               public_method "bar", ArrayList, string, ArrayList do
>      >                 aload 1
>      >                 invokevirtual(string, "toLowerCase", string)
>      >                 aload 2
>      >                 swap
>      >                 invokevirtual(ArrayList, "add", [boolean, object])
>      >                 aload 2
>      >                 areturn
>      >               end
>      >
>      >               public_method("getList", ArrayList) do
>      >                 aload 0
>      >                 getfield this, "list", ArrayList
>      >                 areturn
>      >               end
>      >
>      >               public_static_method("main", void, string[]) do
>      >                 aload 0
>      >                 ldc_int 0
>      >                 aaload
>      >                 invokestatic this, "foo", [this, string]
>      >                 invokevirtual this, "getList", ArrayList
>      >                 aprintln
>      >                 returnvoid
>      >               end
>      >             end
>      >           end
>      >         end
>      >
>      >     - Charlie
>      >
>      >
>      >
>      >
>      >
>      > >
> 
> 
> 
> 
> 
> 
> > 



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to jvm-languages@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jvm-languages?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to