Search in sources :

Example 1 with Bind

use of lucee.runtime.interpreter.ref.var.Bind 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

ParserString (lucee.commons.lang.ParserString)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 Variable (lucee.runtime.interpreter.ref.var.Variable)1 Scope (lucee.runtime.type.scope.Scope)1