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.expression;
020
021import lucee.runtime.exp.TemplateException;
022import lucee.transformer.bytecode.BytecodeContext;
023import lucee.transformer.bytecode.BytecodeException;
024import lucee.transformer.bytecode.Position;
025
026import org.objectweb.asm.Type;
027
028
029/**
030 * A Expression (Operation, Literal aso.)
031 */
032public interface Expression {
033
034    /**
035     * Field <code>MODE_REF</code>
036     */
037    public static final int MODE_REF=0;
038    /**
039     * Field <code>MODE_VALUE</code>
040     */
041    public static final int MODE_VALUE=1;
042    
043    /**
044     * write out the stament to adapter
045     * @param adapter
046     * @param mode 
047     * @return return Type of expression
048     * @throws TemplateException
049     */
050    public Type writeOut(BytecodeContext bc, int mode) throws BytecodeException;
051
052    public Position getStart();
053
054    public Position getEnd();
055
056    public void setStart(Position start);
057
058    public void setEnd(Position end);
059}