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;
}
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()]);
}
Aggregations