Search in sources :

Example 1 with Set

use of lucee.runtime.interpreter.ref.Set 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)

Example 2 with Set

use of lucee.runtime.interpreter.ref.Set in project Lucee by lucee.

the class LFunctionValue method toStringArray.

public static String[] toStringArray(PageContext pc, Set set) throws PageException {
    Ref ref = set;
    String str;
    List<String> arr = new ArrayList<String>();
    do {
        set = (Set) ref;
        str = set.getKeyAsString(pc);
        if (str != null)
            arr.add(0, str);
        else
            break;
        ref = set.getParent(pc);
    } while (ref instanceof Set);
    return arr.toArray(new String[arr.size()]);
}
Also used : Ref(lucee.runtime.interpreter.ref.Ref) Set(lucee.runtime.interpreter.ref.Set) ArrayList(java.util.ArrayList)

Aggregations

Set (lucee.runtime.interpreter.ref.Set)2 ArrayList (java.util.ArrayList)1 ParserString (lucee.commons.lang.ParserString)1 Ref (lucee.runtime.interpreter.ref.Ref)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