public class com.github.javaparser.ast.Node$PostOrderIterator extends java.lang.Object implements java.util.Iterator
{
private final java.util.Stack nodesStack;
private final java.util.Stack cursorStack;
private final com.github.javaparser.ast.Node root;
private boolean hasNext;
public void <init>(com.github.javaparser.ast.Node)
{
com.github.javaparser.ast.Node$PostOrderIterator v;
com.github.javaparser.ast.Node v;
java.util.Stack v, v;
v := @this: com.github.javaparser.ast.Node$PostOrderIterator;
v := @parameter: com.github.javaparser.ast.Node;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.Stack;
specialinvoke v.<java.util.Stack: void <init>()>();
v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack nodesStack> = v;
v = new java.util.Stack;
specialinvoke v.<java.util.Stack: void <init>()>();
v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack cursorStack> = v;
v.<com.github.javaparser.ast.Node$PostOrderIterator: boolean hasNext> = 1;
v.<com.github.javaparser.ast.Node$PostOrderIterator: com.github.javaparser.ast.Node root> = v;
specialinvoke v.<com.github.javaparser.ast.Node$PostOrderIterator: void fillStackToLeaf(com.github.javaparser.ast.Node)>(v);
return;
}
private void fillStackToLeaf(com.github.javaparser.ast.Node)
{
java.util.List v;
com.github.javaparser.ast.Node$PostOrderIterator v;
java.lang.Integer v;
com.github.javaparser.ast.Node v;
java.util.Stack v, v;
boolean v;
v := @this: com.github.javaparser.ast.Node$PostOrderIterator;
v := @parameter: com.github.javaparser.ast.Node;
label:
v = virtualinvoke v.<com.github.javaparser.ast.Node: java.util.List getChildNodes()>();
v = interfaceinvoke v.<java.util.List: boolean isEmpty()>();
if v != 0 goto label;
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack nodesStack>;
virtualinvoke v.<java.util.Stack: java.lang.Object push(java.lang.Object)>(v);
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack cursorStack>;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(0);
virtualinvoke v.<java.util.Stack: java.lang.Object push(java.lang.Object)>(v);
interfaceinvoke v.<java.util.List: java.lang.Object get(int)>(0);
goto label;
label:
return;
}
public boolean hasNext()
{
com.github.javaparser.ast.Node$PostOrderIterator v;
boolean v;
v := @this: com.github.javaparser.ast.Node$PostOrderIterator;
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: boolean hasNext>;
return v;
}
public com.github.javaparser.ast.Node next()
{
java.util.Stack v, v, v, v, v;
int v, v;
com.github.javaparser.ast.Node v, v, v;
boolean v, v, v, v;
com.github.javaparser.ast.Node$PostOrderIterator v;
java.lang.Object v, v, v;
v := @this: com.github.javaparser.ast.Node$PostOrderIterator;
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack nodesStack>;
v = virtualinvoke v.<java.util.Stack: java.lang.Object peek()>();
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack cursorStack>;
v = virtualinvoke v.<java.util.Stack: java.lang.Object peek()>();
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = interfaceinvoke v.<java.util.List: int size()>();
if v >= v goto label;
v = 1;
goto label;
label:
v = 0;
label:
if v == 0 goto label;
v = interfaceinvoke v.<java.util.List: java.lang.Object get(int)>(v);
specialinvoke v.<com.github.javaparser.ast.Node$PostOrderIterator: void fillStackToLeaf(com.github.javaparser.ast.Node)>(v);
v = specialinvoke v.<com.github.javaparser.ast.Node$PostOrderIterator: com.github.javaparser.ast.Node nextFromLevel()>();
return v;
label:
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack nodesStack>;
virtualinvoke v.<java.util.Stack: java.lang.Object pop()>();
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack cursorStack>;
virtualinvoke v.<java.util.Stack: java.lang.Object pop()>();
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack nodesStack>;
v = virtualinvoke v.<java.util.Stack: boolean empty()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v.<com.github.javaparser.ast.Node$PostOrderIterator: boolean hasNext> = v;
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: boolean hasNext>;
if v == 0 goto label;
v = specialinvoke v.<com.github.javaparser.ast.Node$PostOrderIterator: com.github.javaparser.ast.Node nextFromLevel()>();
return v;
label:
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: com.github.javaparser.ast.Node root>;
return v;
}
private com.github.javaparser.ast.Node nextFromLevel()
{
com.github.javaparser.ast.Node$PostOrderIterator v;
java.lang.Integer v;
java.util.Stack v, v, v;
int v, v;
java.lang.Object v, v, v;
v := @this: com.github.javaparser.ast.Node$PostOrderIterator;
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack nodesStack>;
v = virtualinvoke v.<java.util.Stack: java.lang.Object peek()>();
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack cursorStack>;
v = virtualinvoke v.<java.util.Stack: java.lang.Object pop()>();
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = v.<com.github.javaparser.ast.Node$PostOrderIterator: java.util.Stack cursorStack>;
v = v + 1;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
virtualinvoke v.<java.util.Stack: java.lang.Object push(java.lang.Object)>(v);
v = interfaceinvoke v.<java.util.List: java.lang.Object get(int)>(v);
return v;
}
}