use of lucee.transformer.expression.var.Member in project Lucee by lucee.
the class VariableString method variableToStringArray.
public static String[] variableToStringArray(Variable var, boolean rawIfPossible) throws TransformerException {
List<Member> members = var.getMembers();
List<String> arr = new ArrayList<String>();
if (var.getScope() != Scope.SCOPE_UNDEFINED)
arr.add(ScopeFactory.toStringScope(var.getScope(), "undefined"));
Iterator<Member> it = members.iterator();
DataMember dm;
Expression n;
while (it.hasNext()) {
Object o = it.next();
if (!(o instanceof DataMember))
throw new TransformerException("can't translate Variable to a String", var.getStart());
dm = (DataMember) o;
n = dm.getName();
if (n instanceof Literal) {
if (rawIfPossible && n instanceof Identifier) {
arr.add(((Identifier) n).getRaw());
} else {
arr.add(((Literal) n).getString());
}
} else
throw new TransformerException("argument name must be a constant value", var.getStart());
}
return arr.toArray(new String[arr.size()]);
}
use of lucee.transformer.expression.var.Member in project Lucee by lucee.
the class Query method translateChildren.
private void translateChildren(Iterator it) {
Statement stat;
while (it.hasNext()) {
stat = (Statement) it.next();
if (stat instanceof PrintOut) {
PrintOut printOut = ((PrintOut) stat);
Expression e = printOut.getExpr();
if (!(e instanceof Literal)) {
Expression expr = removeCastString(e);
if (expr instanceof Variable) {
// do not preserve BIF PreserveSingleQuotes return value
Member member = ((Variable) expr).getFirstMember();
if (member instanceof BIF) {
BIF bif = (BIF) member;
if (bif.getClassDefinition().getClassName().equals(PreserveSingleQuotes.class.getName())) {
printOut.setExpr(bif.getArguments()[0].getValue());
continue;
} else if (bif.getClassDefinition().getClassName().equals(ListQualify.class.getName())) {
Argument[] args = bif.getArguments();
List<Argument> arr = new ArrayList<Argument>();
// first get existing arguments
arr.add(args[0]);
arr.add(args[1]);
if (args.length >= 3)
arr.add(args[2]);
else
arr.add(new Argument(expr.getFactory().createLitString(","), "string"));
if (args.length >= 4)
arr.add(args[3]);
else
arr.add(new Argument(expr.getFactory().createLitString("all"), "string"));
if (args.length >= 5)
arr.add(args[4]);
else
arr.add(new Argument(expr.getFactory().createLitBoolean(false), "boolean"));
// PSQ-BIF DO NOT REMOVE THIS COMMENT
arr.add(new Argument(expr.getFactory().createLitBoolean(true), "boolean"));
bif.setArguments(arr.toArray(new Argument[arr.size()]));
continue;
} else if (bif.getClassDefinition().getClassName().equals(QuotedValueList.class.getName()) || bif.getClassDefinition().getClassName().equals(ValueList.class.getName())) {
// printOut.setPreserveSingleQuote(false);
continue;
}
}
// do not preserve UDF return value
member = ((Variable) expr).getLastMember();
if (member instanceof UDF)
continue;
}
printOut.setCheckPSQ(true);
if (e != expr)
printOut.setExpr(expr);
}
} else if (stat instanceof Tag) {
Body b = ((Tag) stat).getBody();
if (b != null)
translateChildren(b.getStatements().iterator());
} else if (stat instanceof Body) {
translateChildren(((Body) stat).getStatements().iterator());
}
}
}
use of lucee.transformer.expression.var.Member in project Lucee by lucee.
the class AbstrCFMLExprTransformer method subDynamic.
private Expression subDynamic(ExprData data, Expression expr, boolean tryStatic, boolean isStaticChild) throws TemplateException {
String name = null;
Invoker invoker = null;
// Loop over nested Variables
boolean safeNavigation;
while (data.srcCode.isValidIndex()) {
safeNavigation = false;
ExprString nameProp = null, namePropUC = null;
// []
if (data.srcCode.forwardIfCurrent('[')) {
isStaticChild = false;
// get Next Var
nameProp = structElement(data);
namePropUC = nameProp;
// Valid Syntax ???
if (!data.srcCode.forwardIfCurrent(']'))
throw new TemplateException(data.srcCode, "Invalid Syntax Closing []] not found");
} else // .
if (isStaticChild || data.srcCode.forwardIfCurrent('.') || (safeNavigation = data.srcCode.forwardIfCurrent('?', '.'))) {
isStaticChild = false;
// Extract next Var String
comments(data);
Position line = data.srcCode.getPosition();
name = identifier(data, true);
if (name == null)
throw new TemplateException(data.srcCode, "Invalid identifier");
comments(data);
nameProp = Identifier.toIdentifier(data.factory, name, line, data.srcCode.getPosition());
namePropUC = Identifier.toIdentifier(data.factory, name, data.settings.dotNotationUpper ? Identifier.CASE_UPPER : Identifier.CASE_ORIGNAL, line, data.srcCode.getPosition());
} else // finish
{
break;
}
comments(data);
if (expr instanceof Invoker) {
invoker = (Invoker) expr;
} else {
invoker = new ExpressionInvoker(expr);
expr = invoker;
}
// safe navigation
Member member;
if (safeNavigation) {
List<Member> members = invoker.getMembers();
if (members.size() > 0) {
member = members.get(members.size() - 1);
member.setSafeNavigated(true);
}
}
// Method
if (data.srcCode.isCurrent('(')) {
// properly this is never used
if (nameProp == null && name != null)
nameProp = Identifier.toIdentifier(data.factory, name, Identifier.CASE_ORIGNAL, null, null);
invoker.addMember(member = getFunctionMember(data, nameProp, false));
} else
// property
invoker.addMember(member = data.factory.createDataMember(namePropUC));
if (safeNavigation) {
member.setSafeNavigated(true);
}
}
// STATIC SCOPE CALL
if (tryStatic) {
comments(data);
Expression staticCall = staticScope(data, expr);
if (staticCall != null)
return staticCall;
}
return expr;
}
Aggregations