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.Position;
012    import railo.transformer.bytecode.expression.Expression;
013    import railo.transformer.bytecode.util.Types;
014    
015    public final class SystemOut extends StatementBaseNoFinal {
016        
017    
018        // void println (Object)
019        private final static Method METHOD_PRINTLN = new Method("println",
020                            Types.VOID,
021                            new Type[]{Types.OBJECT}); 
022        
023        Expression expr;
024        
025        /**
026         * constructor of the class
027         * @param expr
028         * @param line 
029         */
030        public SystemOut(Expression expr, Position start,Position end) {
031            super(start,end);
032            this.expr=expr;
033        }
034     
035        /**
036         * @see railo.transformer.bytecode.statement.StatementBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter)
037         */
038        public void _writeOut(BytecodeContext bc) throws BytecodeException {
039            GeneratorAdapter adapter = bc.getAdapter();
040            adapter.getStatic(Type.getType(System.class),"out",Type.getType(PrintStream.class));
041            expr.writeOut(bc,Expression.MODE_REF);
042            adapter.invokeVirtual(Type.getType(PrintStream.class),METHOD_PRINTLN);
043        }
044    }