package org.develnext.jphp.core.tokenizer.token.expr.value; import org.develnext.jphp.core.tokenizer.TokenMeta; import org.develnext.jphp.core.tokenizer.TokenType; import org.develnext.jphp.core.tokenizer.token.expr.ValueExprToken; import org.develnext.jphp.core.tokenizer.token.expr.operator.ArrayGetExprToken; import org.develnext.jphp.core.tokenizer.token.expr.operator.ArrayPushExprToken; import org.develnext.jphp.core.tokenizer.token.expr.operator.DynamicAccessExprToken; import org.develnext.jphp.core.tokenizer.token.stmt.ExprStmtToken; import java.util.ArrayList; import java.util.List; public class ListExprToken extends ValueExprToken implements CallableExprToken { protected final List<Variable> variables; protected ExprStmtToken value; public ListExprToken(TokenMeta meta) { super(meta, TokenType.T_LIST); variables = new ArrayList<Variable>(); } public ExprStmtToken getValue() { return value; } public void setValue(ExprStmtToken value) { this.value = value; } public List<Variable> getVariables() { return variables; } public Variable addVariable(ExprStmtToken v, int index, List<Integer> indexes){ Variable var = new Variable(v, index, indexes); variables.add(var); return var; } public void addList(ListExprToken list){ for(Variable v : list.variables) variables.add(v); } @Override public boolean isNamedToken() { return true; } public class Variable { public final ExprStmtToken var; //public final String name; public final int index; public final List<Integer> indexes; public Variable(ExprStmtToken var, int index, List<Integer> indexes) { this.var = var; //this.name = var.getName(); this.index = index; this.indexes = indexes; } public boolean isArrayPush() { return var.getLast() instanceof ArrayPushExprToken; } public boolean isVariable(){ return var.isSingle() && var.getSingle() instanceof VariableExprToken; } public boolean isArray(){ return var.getLast() instanceof ArrayGetExprToken; } public boolean isDynamicProperty(){ return var.getLast() instanceof DynamicAccessExprToken; } public boolean isStaticProperty(){ return var.getLast() instanceof StaticAccessExprToken; } public String getVariableName(){ return isVariable() ? ((VariableExprToken)var.getSingle()).getName() : null; } } }