001    package railo.transformer.bytecode.statement;
002    
003    import java.io.PrintStream;
004    
005    import org.objectweb.asm.Type;
006    import org.objectweb.asm.commons.GeneratorAdapter;
007    import org.objectweb.asm.commons.Method;
008    
009    import railo.transformer.bytecode.BytecodeContext;
010    import railo.transformer.bytecode.BytecodeException;
011    import railo.transformer.bytecode.expression.Expression;
012    import railo.transformer.bytecode.util.Types;
013    
014    public final class SystemOut extends StatementBase {
015        
016    
017        // void println (Object)
018        private final static Method METHOD_PRINTLN = new Method("println",
019                            Types.VOID,
020                            new Type[]{Types.OBJECT}); 
021        
022        Expression expr;
023        
024        /**
025         * constructor of the class
026         * @param expr
027         * @param line 
028         */
029        public SystemOut(Expression expr, int line) {
030            super(line);
031            this.expr=expr;
032        }
033     
034        /**
035         * @see railo.transformer.bytecode.statement.StatementBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter)
036         */
037        public void _writeOut(BytecodeContext bc) throws BytecodeException {
038            GeneratorAdapter adapter = bc.getAdapter();
039            adapter.getStatic(Type.getType(System.class),"out",Type.getType(PrintStream.class));
040            expr.writeOut(bc,Expression.MODE_REF);
041            adapter.invokeVirtual(Type.getType(PrintStream.class),METHOD_PRINTLN);
042        }
043    }