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 ExpressionException("Invalid identifier"); cfml.removeSpace(); ref = new Variable(pc, ref, name); } // [] else if (cfml.forwardIfCurrent('[')) { cfml.removeSpace(); ref = new Variable(pc, ref, assignOp()); cfml.removeSpace(); if (!cfml.forwardIfCurrent(']')) throw new ExpressionException("Invalid Syntax Closing []] not found"); } // finish else { break; } cfml.removeSpace(); if (cfml.isCurrent('(')) { if (!(ref instanceof Set)) throw new ExpressionException( "invalid syntax " + ref.getTypeName() + " can't called as function"); Set set = (Set) ref; ref = new UDFCall(pc, set.getParent(), set.getKey(), functionArg(name, false, null, ')')); } } if (ref instanceof railo.runtime.interpreter.ref.var.Scope) { railo.runtime.interpreter.ref.var.Scope s = (railo.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; }