/** * Copyright (c) 2015, Lucee Assosication Switzerland. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ package lucee.transformer; import lucee.runtime.config.Config; import lucee.transformer.expression.ExprBoolean; import lucee.transformer.expression.ExprDouble; import lucee.transformer.expression.ExprInt; import lucee.transformer.expression.ExprString; import lucee.transformer.expression.Expression; import lucee.transformer.expression.literal.LitBoolean; import lucee.transformer.expression.literal.LitDouble; import lucee.transformer.expression.literal.LitFloat; import lucee.transformer.expression.literal.LitInteger; import lucee.transformer.expression.literal.LitLong; import lucee.transformer.expression.literal.LitString; import lucee.transformer.expression.literal.Literal; import lucee.transformer.expression.var.DataMember; import lucee.transformer.expression.var.Variable; public abstract class Factory { public static final int OP_BOOL_AND=0; public static final int OP_BOOL_OR=1; public static final int OP_BOOL_XOR=2; public static final int OP_BOOL_EQV = 3; public static final int OP_BOOL_IMP = 4; public abstract LitBoolean TRUE(); public abstract LitBoolean FALSE(); public abstract LitString EMPTY(); public abstract LitDouble DOUBLE_ZERO(); public abstract LitDouble DOUBLE_ONE(); public abstract LitString NULL(); // CREATION public abstract LitString createLitString(String str); public abstract LitString createLitString(String str, Position start, Position end); public abstract LitBoolean createLitBoolean(boolean b); public abstract LitBoolean createLitBoolean(boolean b, Position start,Position end); public abstract LitDouble createLitDouble(double d); public abstract LitDouble createLitDouble(double d, Position start,Position end); public abstract LitFloat createLitFloat(float f); public abstract LitFloat createLitFloat(float f, Position start,Position end); public abstract LitLong createLitLong(long l); public abstract LitLong createLitLong(long l, Position start,Position end); public abstract LitInteger createLitInteger(int i); public abstract LitInteger createLitInteger(int i, Position start,Position end); public abstract Expression createNull(); public abstract Expression createNull(Position start,Position end); public abstract boolean isNull(Expression expr); public abstract Literal createLiteral(Object obj,Literal defaultValue); public abstract DataMember createDataMember(ExprString name); public abstract Variable createVariable(Position start, Position end); public abstract Variable createVariable(int scope,Position start, Position end); public abstract Expression createStruct(); public abstract Expression createArray(); // CASTING public abstract ExprDouble toExprDouble(Expression expr); public abstract ExprString toExprString(Expression expr); public abstract ExprBoolean toExprBoolean(Expression expr); public abstract ExprInt toExprInt(Expression expr); // OPERATIONS public abstract ExprString opString(Expression left,Expression right); public abstract ExprString opString(Expression left, Expression right, boolean concatStatic); public abstract ExprBoolean opBool(Expression left,Expression right,int operation); public abstract void registerKey(Context bc,Expression name,boolean doUpperCase) throws TransformerException; public abstract Config getConfig(); public static boolean canRegisterKey(Expression name) { return name instanceof LitString; } }