Search in sources :

Example 1 with Variable

use of lucee.runtime.interpreter.ref.var.Variable in project Lucee by lucee.

the class Elvis method getValue.

@Override
public Object getValue(PageContext pc) throws PageException {
    if (limited)
        throw new InterpreterException("invalid syntax, this operation is not supported in a json string.");
    if (left instanceof Variable) {
        Variable var = (Variable) left;
        String[] arr = LFunctionValue.toStringArray(pc, var);
        return lucee.runtime.op.Elvis.operate(pc, arr) ? left.getValue(pc) : right.getValue(pc);
    }
    Object val = left.getValue(pc);
    if (val != null)
        return val;
    return right.getValue(pc);
}
Also used : Variable(lucee.runtime.interpreter.ref.var.Variable) InterpreterException(lucee.runtime.interpreter.InterpreterException)

Example 2 with Variable

use of lucee.runtime.interpreter.ref.var.Variable in project Lucee by lucee.

the class CFMLExpressionInterpreter method subDynamic.

private Ref subDynamic(Ref ref) throws PageException {
    String name = null;
    // Loop over nested Variables
    while (cfml.isValidIndex()) {
        // .
        if (cfml.forwardIfCurrent('.')) {
            // Extract next Var String
            cfml.removeSpace();
            name = identifier(true);
            if (name == null)
                throw new InterpreterException("Invalid identifier");
            cfml.removeSpace();
            ref = new Variable(ref, name, limited);
        } else // []
        if (cfml.forwardIfCurrent('[')) {
            cfml.removeSpace();
            ref = new Variable(ref, assignOp(), limited);
            cfml.removeSpace();
            if (!cfml.forwardIfCurrent(']'))
                throw new InterpreterException("Invalid Syntax Closing []] not found");
        } else // finish
        {
            break;
        }
        cfml.removeSpace();
        if (cfml.isCurrent('(')) {
            if (!(ref instanceof Set))
                throw new InterpreterException("invalid syntax " + ref.getTypeName() + " can't called as function");
            Set set = (Set) ref;
            ref = new UDFCall(set.getParent(pc), set.getKey(pc), functionArg(name, false, null, ')'));
        }
    }
    if (ref instanceof lucee.runtime.interpreter.ref.var.Scope) {
        lucee.runtime.interpreter.ref.var.Scope s = (lucee.runtime.interpreter.ref.var.Scope) ref;
        if (s.getScope() == Scope.SCOPE_ARGUMENTS || s.getScope() == Scope.SCOPE_LOCAL || s.getScope() == ScopeSupport.SCOPE_VAR) {
            ref = new Bind(s);
        }
    }
    return ref;
}
Also used : UDFCall(lucee.runtime.interpreter.ref.func.UDFCall) Bind(lucee.runtime.interpreter.ref.var.Bind) Variable(lucee.runtime.interpreter.ref.var.Variable) Set(lucee.runtime.interpreter.ref.Set) LString(lucee.runtime.interpreter.ref.literal.LString) ParserString(lucee.commons.lang.ParserString) Scope(lucee.runtime.type.scope.Scope)

Aggregations

Variable (lucee.runtime.interpreter.ref.var.Variable)2 ParserString (lucee.commons.lang.ParserString)1 InterpreterException (lucee.runtime.interpreter.InterpreterException)1 Set (lucee.runtime.interpreter.ref.Set)1 UDFCall (lucee.runtime.interpreter.ref.func.UDFCall)1 LString (lucee.runtime.interpreter.ref.literal.LString)1 Bind (lucee.runtime.interpreter.ref.var.Bind)1 Scope (lucee.runtime.type.scope.Scope)1