1999-12-05 Bradley M. Kuhn * README: wrote a full README file as it should be for a first public release. :) * ChangeLog: spell-checked change log. * Java/org/perl/internals/Scalar.java: added seq and sne functions * Jasmin.pm (B::LOGOP::JVMJasminPre): got cond_expr working (B::BINOP::JVMJasminPost): fixed seq and sne work 1999-12-04 Bradley M. Kuhn * lib/B/JVM/Jasmin/Emit.pm (nop): added method * Jasmin.pm (B::BINOP::JVMJasminPre): had to change things so that the "concat" pre-processing did argument IN order. It looks like the "trick" of processing things in reverse order may be problematic. In this case, it occurred because if there are cascaded BINOPs of "concat" type, and some of them are actually ".=" operations, we can get the wrong r-values in cases like: $x = $y . ($y .= "f"); * lib/B/JVM/Jasmin/Emit.pm (dup): spruced up the POD and error messages for this function (swap): added function * Jasmin.pm (B::UNOP::JVMJasminPre): added processing for creation of the result StackElement here [instead of doing it in the child OP]. (B::UNOP::JVMJasminPost): set up things so that we can handle the OPf_MOD flag properly. * Java/org/perl/internals/Scalar.java: implemented concat member function. * Jasmin.pm (B::BINOP::JVMJasminPre): changed processing on "sassign" to be in order (TurnStackElementsToScalars): wrote function (B::BINOP::JVMJasminPost): got "sassign" working properly using TurnStackElementsToScalars * Java/org/perl/internals/Scalar.java: added isConstant member variable for sanity checking for assigning to constants 1999-11-28 Bradley M. Kuhn * lib/B/JVM/Jasmin/Emit.pm: moved labels to be handled inside methods [just as locals are]. Since labels are, in fact, local to methods, they should not be handled globally on the file level. (ifne): spruced up the POD and error messages for this function (labelCreate): spruced up the POD and error messages for this function (labelSend): spruced up the POD and error messages for this function (gotoLabel): spruced up the POD and error messages for this function * ChangeLog: spell-checked change log. * Jasmin.pm (walkoptree): removed recursive walks from this function; they should now be done in the B::*::JasminPre functions, when necessary (B::LISTOP::JasminPre): changed the print function so that it would process the pushmark first, and then process its arguments in reverse order. This was required so that the prints occur in the proper order. Apparently, perl is able to use the stack as a queue at times. Perl seems to first find the mark, and then process from the mark to the end of the list as if it is a queue. Very odd. (B::LISTOP::JasminPre): added processing for "list" op so that it works similarly to print. The difference is that when a listop is processed, it appears to pushmark, and then simply put the options on in order, and then removes the mark at the end of the "list" operation. I took the same approach that I took for "print"---except I threw away to "pushmark" operation and reversed the order the other sub-ops are processed. This may not work in all cases for the "list" operation, but it at least works when processing a 'print LIST' construct. :) * lib/B/JVM/Jasmin/Emit.pm (methodCreateLocal): changed so that locals could be reused, as I found that far too many locals were being generated for even the simplest of operations (methodFreeLocal): created this function so that locals can be freed. 1999-11-27 Bradley M. Kuhn * Makefile.PL: fixed so that it could handle program names for Java binaries better. * lib/B/JVM/Jasmin/Emit.pm (returnVoid): added method * Java/org/perl/internals/Functions.java: created a print(Scalar) function. * MANIFEST: for some reason Java/org/perl/internals/Hash.java was not in here, also added Java/org/perl/internals/Functions.java * Jasmin.pm (B::LISTOP::JasminPost): added handling and loop for print function (B::SVOP::JasminPre): added code for handling a string const. This might work as it stands for any scalar, assuming that the $op->sv->PV() will promote. I fear that it might not. We'll find out eventually I suppose. :) * lib/B/JVM/Jasmin/Emit.pm (iconst): added method (istore): added method (iload): added method (iand): added method (pop): added method (getstatic): added method (ldc): added method (newObject): added method; should be called new, but cannot be as it would conflict with constructor! (invokespecial): added method (dup): added method (gotoLabel): added method (astore): fixed to generate both astore_N and astore instructions correctly (aload): fixed to generate both aload_N and aload instructions correctly * Java/org/perl/internals/Scalar.java: added Scalar(String) constructor so that we can easily create Scalars from native strings easily. 1999-11-26 Bradley M. Kuhn * lib/B/JVM/Jasmin/Emit.pm (labelCreate): realized that I needed both a labelCreate and labelSend method to avoid ever having to back-patch. This way, I can generate labels when I need them, and use the labelSend method to emit them at the right location on the output. (astore): added method (invokevirtual): added method (astore): added method (invokestatic): added method 1999-11-23 Bradley M. Kuhn * lib/B/JVM/Jasmin/CompileState.pm (DESTROY): added method to cleanup any files on the $self->{cleanUpFiles} list. * Java/org/perl/internals: got all the Java files to compile properly * Java/org/perl/internals/Scalar.java: added isTrue() method * Java/org/perl/internals/GV.java: created the GV object. Currently, it can only hold hashes and scalars * Java/org/perl/internals/Stash.java: finished implementation of of findNamespace and findGV 1999-11-18 Bradley M. Kuhn * Java/org/perl/internals/Hash.java: created this class. Just a placeholder for now. * Java/org/perl/internals/HV.java: created HV class. I removed SV interface a few days ago because I realized it was unneeded. I think I need HV because I want to wrap the fact that I am using Java hashtable's internally---that might change and I'd like another layer of abstraction. This might be helpful for magic too. * Java/org/perl/internals: modified lots of the .java files to get them to compile properly. :) * Java/org/perl/internals/ScalarException.java: created this class for throwing from class, Scalar * Java/org/perl/internals/Scalar.java: got file to compile properly 1999-11-16 Bradley M. Kuhn * Java: moved files to Java/org/perl/internals 1999-11-10 Bradley M. Kuhn * Java/SvDouble.java: created an initial version of this class that "mirrors" SvNV in the perlguts, which I got to understand by reading http://home.sol.no/~aas/perl/guts/, so stuff may be missing. :) * Java/SvInteger.java: created an initial version of this class that "mirrors" SvIV in the perlguts, which I got to understand by reading http://home.sol.no/~aas/perl/guts/, so stuff may be missing. :) * Java/InvalidSVFieldException.java: wrote this exception class that is needed by the Sv* hierarchy. * Java/SvString.java: created an initial version of this class that "mirrors" an SvPV in the perlguts, which I got to understand by reading http://home.sol.no/~aas/perl/guts/, so stuff may be missing. :) * Java/SvBase.java: created an initial version of this base class for scalar variables. * Java/SV.java: created initial version of the interface. 1999-11-09 Bradley M. Kuhn * lib/B/JVM/Utils.pm: this module is some utility functions that didn't fit anywhere else. 1999-11-08 Bradley M. Kuhn * lib/B/JVM/Jasmin/CompileState.pm (emit): Added this method and other code so that we can store an emitter object with this package. 1999-11-06 Bradley M. Kuhn * lib/B/JVM/Jasmin/Emit.pm: This is the emitter for Jasmin-specific stuff. It's a first hack, that doesn't support everything yet [actually, it supports nearly nothing. :] 1999-11-03 Bradley M. Kuhn * lib/B/JVM/Emit.pm: Wrote the initial Emit object. The idea is that we should be able to port to non-Jasmin assemblers, or even a direct bytecode syntax. That's the hope at least. 1999-10-26 Bradley M. Kuhn * Jasmin.pm (compile): Began playing with this function and had it be called automatically from O. Currently, the function does nothing but print some test output. * lib/B/JVM/Jasmin/CompileState.pm (new): changed some of the configuration parameters, and documented all configuration parameters. (createNewFile): Completed this function and made sure it had everything it would need for initial testing. 1999-10-25 Bradley M. Kuhn * lib/B/JVM/Jasmin/CompileState.pm: moved B::JVM::Jasmin::CompileState into its own file * Makefile.PL: rewrote this to search for jasmin and java programs, and fixed it so it handled CompileState.pm 1999-10-20 Bradley M. Kuhn * Jasmin.pm: created CompileState package for holding the state of the compilation. (new): new method for CompileState 1999-10-07 Bradley M. Kuhn * Jasimin.pm: original version created by h2xs 1.19 # LocalWords: pushmark ops lib methodCreateLocal const sv PV iconst ldc # LocalWords: istore iload iand getstatic newObject invokespecial dup op # LocalWords: astore aload labelCreate labelSend invokevirtual JasminPre # LocalWords: invokestatic gotoLabel walkoptree listop methodFreeLocal # LocalWords: cleanUpFiles perlguts SvPV Jasmin bytecode pm returnVoid # LocalWords: createNewFile PL jasmin java CompileState Jasimin xs GV HV # LocalWords: isTrue findNamespace findGV hashtable's SvNV SvIV seq sne # LocalWords: cond expr nop concat pre BINOPs StackElement OPf sassign # LocalWords: TurnStackElementsToScalars isConstant ifne ChangeLog