So Cygnus is building a Java programming environment that is based on conventional a compiler, linker, and debugger, using Java-enhanced versions of the existing GNU programming tools. The core tool is of course the compiler. This has similar structure as existing front-ends, and shares most of the code with them. Each bytecode file defines one Java class, and defines the superclass, fields, and methods of the class. Thus startup is fast, and does not require allocating any data.
Code generation means converting the stack-oriented bytecodes into gcc expression nodes.
This is done with a process very similar a Java bytecode verifier. Transforming postfix stack operations to expression nodes involves a compile-time stack of expression nodes. When necessary, we also map stack locals and local varaibles into gcc pseudo-registers. However, some enhancements are necessary or at least desirable. The linker must provide a way to build a table mapping class names to Class objects.