001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019package lucee.transformer.bytecode.statement;
020
021import lucee.transformer.bytecode.BytecodeContext;
022import lucee.transformer.bytecode.BytecodeException;
023import lucee.transformer.bytecode.Literal;
024import lucee.transformer.bytecode.expression.Expression;
025import lucee.transformer.bytecode.util.ASMUtil;
026import lucee.transformer.bytecode.util.Types;
027
028import org.objectweb.asm.Type;
029import org.objectweb.asm.commons.GeneratorAdapter;
030
031public final class ExpressionAsStatement extends StatementBaseNoFinal {
032
033        private Expression expr;
034
035
036        /**
037         * Constructor of the class
038         * @param expr
039         */
040        public ExpressionAsStatement(Expression expr) {
041                super(expr.getStart(),expr.getEnd());
042                this.expr=expr;
043        }
044
045        /**
046         *
047         * @see lucee.transformer.bytecode.statement.StatementBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter)
048         */
049        public void _writeOut(BytecodeContext bc) throws BytecodeException {
050                GeneratorAdapter adapter = bc.getAdapter();
051                if(!(expr instanceof Literal)) {
052                        Type type = expr.writeOut(bc, Expression.MODE_VALUE);
053                        if(!type.equals(Types.VOID))ASMUtil.pop(adapter, type);
054                        //if(type.equals(Types.DOUBLE_VALUE))adapter.pop2();
055                        //else adapter.pop();
056                }
057        }
058        
059        /**
060         * @return the expr
061         */
062        public Expression getExpr() {
063                return expr;
064        }
065}