package railo.transformer.bytecode.expression;
import org.objectweb.asm.Type;
import railo.runtime.exp.TemplateException;
import railo.transformer.bytecode.BytecodeContext;
import railo.transformer.bytecode.BytecodeException;
import railo.transformer.bytecode.Position;
import railo.transformer.bytecode.util.ExpressionUtil;
/**
* A Expression (Operation, Literal aso.)
*/
public abstract class ExpressionBase implements Expression {
private Position start;
private Position end;
public ExpressionBase(Position start,Position end) {
this.start=start;
this.end=end;
}
/**
* write out the stament to adapter
* @param adapter
* @param mode
* @return return Type of expression
* @throws TemplateException
*/
public final Type writeOut(BytecodeContext bc, int mode) throws BytecodeException {
ExpressionUtil.visitLine(bc, start);
Type type = _writeOut(bc,mode);
ExpressionUtil.visitLine(bc, end);
return type;
}
/**
* write out the stament to the adater
* @param adapter
* @param mode
* @return return Type of expression
* @throws TemplateException
*/
public abstract Type _writeOut(BytecodeContext bc, int mode) throws BytecodeException;
@Override
public Position getStart() {
return start;
}
@Override
public Position getEnd() {
return end;
}
@Override
public void setStart(Position start) {
this.start= start;
}
@Override
public void setEnd(Position end) {
this.end= end;
}
}