package php.runtime.util; import php.runtime.env.CallStackItem; import php.runtime.env.Environment; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class StackTracer implements Iterable<CallStackItem> { protected final Environment env; protected final List<CallStackItem> result; public StackTracer(Environment env, int limit){ this.env = env; this.result = new ArrayList<CallStackItem>(); for(int i = 0; i < env.getCallStackTop(); i++){ if (limit != 0 && i >= limit) break; result.add(env.peekCall(i)); } } @Override public Iterator<CallStackItem> iterator() { return result.iterator(); } public String toString(boolean withArgs) { StringBuilder sb = new StringBuilder(); int i = 0; for (CallStackItem el : this){ sb.append("#").append(i).append(" "); sb.append(el.toString(withArgs)); if (i != result.size() - 1) sb.append("\n"); i++; } return sb.toString(); } }