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;
}
Aggregations