001    package railo.transformer.bytecode.expression;
002    
003    import org.objectweb.asm.Type;
004    
005    import railo.runtime.exp.TemplateException;
006    import railo.transformer.bytecode.BytecodeContext;
007    import railo.transformer.bytecode.BytecodeException;
008    import railo.transformer.bytecode.Position;
009    
010    
011    /**
012     * A Expression (Operation, Literal aso.)
013     */
014    public interface Expression {
015    
016        /**
017         * Field <code>MODE_REF</code>
018         */
019        public static final int MODE_REF=0;
020        /**
021         * Field <code>MODE_VALUE</code>
022         */
023        public static final int MODE_VALUE=1;
024        
025        /**
026         * write out the stament to adapter
027         * @param adapter
028         * @param mode 
029         * @return return Type of expression
030         * @throws TemplateException
031         */
032        public Type writeOut(BytecodeContext bc, int mode) throws BytecodeException;
033    
034        public Position getStart();
035    
036        public Position getEnd();
037    
038        public void setStart(Position start);
039    
040        public void setEnd(Position end);
041    }