Seeing as Simon's gone to all the trouble of releasing the source to Parrot now, I wondered what I could have a play with. I've did simple Parrot assembler and thought about different types of bytecode. Like bytecode for the Java virtual machine, which it turns out is stack based. Could I convert JVM->PVM? I think so ;-) [Yes, this is a proof of concept, and the parrot assembler will change in many ways rsn, so this is just a head up to show it's possible] Given the following Java code: class HelloWorld { public static void main (String args[]) { int i = 1; int j = 1; while(i < 10) { System.out.print(i); System.out.print(j); i++; j += i; } } } (which prints out: 112336410515621728836945) That actually gets translated into the the following JVM bytecode: 0 iconst_1 1 istore_1 2 iconst_1 3 istore_2 4 goto 28 7 getstatic #2 <Field java.io.PrintStream out> 10 iload_1 11 invokevirtual #3 <Method void print(int)> 14 getstatic #2 <Field java.io.PrintStream out> 17 iload_2 18 invokevirtual #3 <Method void print(int)> 21 iinc 1 1 24 iload_2 25 iload_1 26 iadd 27 istore_2 28 iload_1 29 bipush 10 31 if_icmplt 7 34 return And my magic script (http://astray.com/java2parrot.pl.txt) converts it to the following Parrot assembler code: set_i_ic I1, 1 set_i I63, I1 set_i_ic I1, 1 set_i I62, I1 branch_ic LAAA LAAB: set_i I1, I63 print_i I1 set_i I1, I62 print_i I1 inc_i I63 set_i I1, I62 set_i I2, I63 add_i I1, I1, I2 set_i I62, I1 LAAA: set_i I3, I63 set_i_ic I4, 10 lt_i_ic I3, I4, LAAB, LAAC LAAC: end which outputs: I reg 1 is 1 I reg 1 is 1 I reg 1 is 2 I reg 1 is 3 I reg 1 is 3 I reg 1 is 6 I reg 1 is 4 I reg 1 is 10 I reg 1 is 5 I reg 1 is 15 I reg 1 is 6 I reg 1 is 21 I reg 1 is 7 I reg 1 is 28 I reg 1 is 8 I reg 1 is 36 I reg 1 is 9 I reg 1 is 45 Cool, huh. Much more on this soon! Leon -- Leon Brocard.............................http://www.astray.com/ Iterative Software...........http://www.iterative-software.com/ ... If you eat yogurt you'll have lots of culture