Search in sources :

Example 1 with OPUnary

use of lucee.transformer.bytecode.op.OPUnary in project Lucee by lucee.

the class AbstrCFMLExprTransformer method concatOp.

/**
 * Transfomiert eine  Konkatinations-Operator (&) Operation. Im Gegensatz zu CFMX ,
 * wird das "!" Zeichen auch als Not Operator anerkannt.
 * <br />
 * EBNF:<br />
 * <code>plusMinusOp {"&" spaces concatOp};</code>
 * @return CFXD Element
 * @throws TemplateException
 */
private Expression concatOp(ExprData data) throws TemplateException {
    Expression expr = plusMinusOp(data);
    while (data.srcCode.isCurrent('&') && !data.srcCode.isCurrent("&&")) {
        data.srcCode.next();
        // &=
        if (data.srcCode.isCurrent('=') && expr instanceof Variable) {
            data.srcCode.next();
            comments(data);
            Expression value = assignOp(data);
            expr = new OPUnary((Variable) expr, value, OPUnary.PRE, OPUnary.CONCAT, expr.getStart(), data.srcCode.getPosition());
        // ExprString res = OpString.toExprString(expr, right);
        // expr=new OpVariable((Variable)expr,res,data.cfml.getPosition());
        } else {
            comments(data);
            expr = data.factory.opString(expr, plusMinusOp(data));
        }
    }
    return expr;
}
Also used : OpVariable(lucee.transformer.bytecode.op.OpVariable) Variable(lucee.transformer.expression.var.Variable) FunctionAsExpression(lucee.transformer.bytecode.expression.FunctionAsExpression) Expression(lucee.transformer.expression.Expression) OPUnary(lucee.transformer.bytecode.op.OPUnary)

Example 2 with OPUnary

use of lucee.transformer.bytecode.op.OPUnary in project Lucee by lucee.

the class AbstrCFMLExprTransformer method _unaryOp.

private Expression _unaryOp(ExprData data, Expression expr, int op) throws TemplateException {
    Position leftEnd = expr.getEnd(), start = null, end = null;
    comments(data);
    if (leftEnd != null) {
        start = leftEnd;
        end = new Position(leftEnd.line, leftEnd.column + 2, leftEnd.pos + 2);
    }
    return new OPUnary((Variable) expr, data.factory.DOUBLE_ONE(), OPUnary.POST, op, start, end);
// ExprDouble res = OpDouble.toExprDouble(expr, LitDouble.toExprDouble(1D,start,end),opr);
// expr=new OpVariable((Variable)expr,res,data.cfml.getPosition());
// return OpDouble.toExprDouble(expr,LitDouble.toExprDouble(1D,start,end),opr==OpDouble.PLUS? OpDouble.MINUS:OpDouble.PLUS);
}
Also used : Position(lucee.transformer.Position) OPUnary(lucee.transformer.bytecode.op.OPUnary)

Example 3 with OPUnary

use of lucee.transformer.bytecode.op.OPUnary in project Lucee by lucee.

the class AbstrCFMLExprTransformer method _plusMinusOp.

private Expression _plusMinusOp(ExprData data, Expression expr, int opr) throws TemplateException {
    // plus|Minus Assignment
    if (data.srcCode.isCurrent('=') && expr instanceof Variable) {
        data.srcCode.next();
        comments(data);
        Expression value = assignOp(data);
        // if(opr==OpDouble.MINUS) value=OpNegateNumber.toExprDouble(value, null, null);
        expr = new OPUnary((Variable) expr, value, OPUnary.PRE, opr, expr.getStart(), data.srcCode.getPosition());
    // ExprDouble res = OpDouble.toExprDouble(expr, right,opr);
    // expr=new OpVariable((Variable)expr,res,data.cfml.getPosition());
    } else {
        comments(data);
        expr = OpDouble.toExprDouble(expr, modOp(data), opr);
    }
    return expr;
}
Also used : OpVariable(lucee.transformer.bytecode.op.OpVariable) Variable(lucee.transformer.expression.var.Variable) FunctionAsExpression(lucee.transformer.bytecode.expression.FunctionAsExpression) Expression(lucee.transformer.expression.Expression) OPUnary(lucee.transformer.bytecode.op.OPUnary)

Example 4 with OPUnary

use of lucee.transformer.bytecode.op.OPUnary in project Lucee by lucee.

the class AbstrCFMLExprTransformer method _divMultiOp.

private Expression _divMultiOp(ExprData data, Expression expr, int iOp) throws TemplateException {
    if (data.srcCode.isCurrent('=') && expr instanceof Variable) {
        data.srcCode.next();
        comments(data);
        Expression value = assignOp(data);
        return new OPUnary((Variable) expr, value, OPUnary.PRE, iOp, expr.getStart(), data.srcCode.getPosition());
    // ExprDouble res = OpDouble.toExprDouble(expr, right,iOp);
    // return new OpVariable((Variable)expr,res,data.cfml.getPosition());
    }
    comments(data);
    return OpDouble.toExprDouble(expr, expoOp(data), iOp);
}
Also used : OpVariable(lucee.transformer.bytecode.op.OpVariable) Variable(lucee.transformer.expression.var.Variable) FunctionAsExpression(lucee.transformer.bytecode.expression.FunctionAsExpression) Expression(lucee.transformer.expression.Expression) OPUnary(lucee.transformer.bytecode.op.OPUnary)

Example 5 with OPUnary

use of lucee.transformer.bytecode.op.OPUnary in project Lucee by lucee.

the class AbstrCFMLExprTransformer method negatePlusMinusOp.

/**
 * Negate Numbers
 * @return CFXD Element
 * @throws TemplateException
 */
private Expression negatePlusMinusOp(ExprData data) throws TemplateException {
    // And Operation
    Position line = data.srcCode.getPosition();
    if (data.srcCode.forwardIfCurrent('-')) {
        // pre increment
        if (data.srcCode.forwardIfCurrent('-')) {
            comments(data);
            Expression expr = clip(data);
            return new OPUnary((Variable) expr, data.factory.DOUBLE_ONE(), OPUnary.PRE, OpDouble.MINUS, line, data.srcCode.getPosition());
        // ExprDouble res = OpDouble.toExprDouble(expr, LitDouble.toExprDouble(1D),OpDouble.MINUS);
        // return new OpVariable((Variable)expr,res,data.cfml.getPosition());
        }
        comments(data);
        return OpNegateNumber.toExprDouble(clip(data), OpNegateNumber.MINUS, line, data.srcCode.getPosition());
    } else if (data.srcCode.forwardIfCurrent('+')) {
        if (data.srcCode.forwardIfCurrent('+')) {
            comments(data);
            Expression expr = clip(data);
            return new OPUnary((Variable) expr, data.factory.DOUBLE_ONE(), OPUnary.PRE, OpDouble.PLUS, line, data.srcCode.getPosition());
        }
        comments(data);
        // OpNegateNumber.toExprDouble(clip(),OpNegateNumber.PLUS,line);
        return data.factory.toExprDouble(clip(data));
    }
    return clip(data);
}
Also used : OpVariable(lucee.transformer.bytecode.op.OpVariable) Variable(lucee.transformer.expression.var.Variable) Position(lucee.transformer.Position) FunctionAsExpression(lucee.transformer.bytecode.expression.FunctionAsExpression) Expression(lucee.transformer.expression.Expression) OPUnary(lucee.transformer.bytecode.op.OPUnary)

Aggregations

OPUnary (lucee.transformer.bytecode.op.OPUnary)5 FunctionAsExpression (lucee.transformer.bytecode.expression.FunctionAsExpression)4 OpVariable (lucee.transformer.bytecode.op.OpVariable)4 Expression (lucee.transformer.expression.Expression)4 Variable (lucee.transformer.expression.var.Variable)4 Position (lucee.transformer.Position)2