#include "machine.h"

int Node___init__() { 
    pushp(FP);
    FP = SP;
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    *((WPtr)(((WPtr)(R1)+2))) = *((WPtr)(((WPtr)(FP)+2)));
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    *((WPtr)(((WPtr)(R1)+3))) = (Word)(0);
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    *((WPtr)(((WPtr)(R1)+4))) = (Word)(0);
_T10:
    popp(FP);
    SP += 2;
    return 0;
} 

int BinarySearchTree___init__() { 
    pushp(FP);
    FP = SP;
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    *((WPtr)(((WPtr)(R1)+2))) = (Word)(0);
_T11:
    popp(FP);
    SP += 1;
    return 0;
} 

int BinarySearchTree_insert_helper() { 
    pushp(FP);
    FP = SP;
    pushw(R1);
    pushw(R2);
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    if ( R1 != (Word)(0) ) goto _T14;
    pushw(*((WPtr)(((WPtr)(FP)+3))));
    pushw((Word)(5));
    py_malloc();
    pushw(R0);
    Node___init__();
    *((WPtr)(((WPtr)(FP)+2))) = R0;
    goto _T13;
_T14:
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    if ( *((WPtr)(((WPtr)(R1)+2))) != *((WPtr)(((WPtr)(FP)+3))) ) goto _T17;
    R0 = *((WPtr)(((WPtr)(FP)+2)));
    goto _T12;
    goto _T16;
_T17:
    R1 = *((WPtr)(((WPtr)(FP)+3)));
    R2 = *((WPtr)(((WPtr)(FP)+2)));
    if ( R1 >= *((WPtr)(((WPtr)(R2)+2))) ) goto _T18;
    pushw(*((WPtr)(((WPtr)(FP)+3))));
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    pushw(*((WPtr)(((WPtr)(R1)+3))));
    pushw(*((WPtr)(((WPtr)(FP)+1))));
    BinarySearchTree_insert_helper();
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    *((WPtr)(((WPtr)(R1)+3))) = R0;
    goto _T16;
_T18:
    pushw(*((WPtr)(((WPtr)(FP)+3))));
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    pushw(*((WPtr)(((WPtr)(R1)+4))));
    pushw(*((WPtr)(((WPtr)(FP)+1))));
    BinarySearchTree_insert_helper();
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    *((WPtr)(((WPtr)(R1)+4))) = R0;
_T19:
_T16:
_T15:
_T13:
    R0 = *((WPtr)(((WPtr)(FP)+2)));
    goto _T12;
_T12:
    popw(R2);
    popw(R1);
    popp(FP);
    SP += 3;
    return 0;
} 

int BinarySearchTree_insert() { 
    pushp(FP);
    FP = SP;
    pushw(R1);
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    if ( *((WPtr)(((WPtr)(R1)+2))) != (Word)(0) ) goto _T22;
    pushw(*((WPtr)(((WPtr)(FP)+2))));
    pushw((Word)(5));
    py_malloc();
    pushw(R0);
    Node___init__();
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    *((WPtr)(((WPtr)(R1)+2))) = R0;
    goto _T21;
_T22:
    pushw(*((WPtr)(((WPtr)(FP)+2))));
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    pushw(*((WPtr)(((WPtr)(R1)+2))));
    pushw(*((WPtr)(((WPtr)(FP)+1))));
    BinarySearchTree_insert_helper();
_T23:
_T21:
_T20:
    popw(R1);
    popp(FP);
    SP += 2;
    return 0;
} 

int BinarySearchTree_inOrderPrint_helper() { 
    pushp(FP);
    FP = SP;
    pushw(R1);
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    if ( R1 == (Word)(0) ) goto _T26;
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    pushw(*((WPtr)(((WPtr)(R1)+3))));
    pushw(*((WPtr)(((WPtr)(FP)+1))));
    BinarySearchTree_inOrderPrint_helper();
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    pushw(*((WPtr)(((WPtr)(R1)+2))));
    put_int();
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    pushw(*((WPtr)(((WPtr)(R1)+4))));
    pushw(*((WPtr)(((WPtr)(FP)+1))));
    BinarySearchTree_inOrderPrint_helper();
_T26:
_T25:
_T24:
    popw(R1);
    popp(FP);
    SP += 2;
    return 0;
} 

int BinarySearchTree_inOrderPrint() { 
    pushp(FP);
    FP = SP;
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    pushw(*((WPtr)(((WPtr)(R1)+2))));
    pushw(*((WPtr)(((WPtr)(FP)+1))));
    BinarySearchTree_inOrderPrint_helper();
_T27:
    popp(FP);
    SP += 1;
    return 0;
} 

int main() { 
    pushp(FP);
    FP = SP;
    SP -= 1;
    pushw((Word)(3));
    py_malloc();
    pushw(R0);
    BinarySearchTree___init__();
    *((WPtr)(((WPtr)(FP)+-1))) = R0;
    pushw((Word)(2));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(9));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(11));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(5));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(3));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(6));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(4));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(8));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(7));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(12));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(1));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw((Word)(10));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_insert();
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    BinarySearchTree_inOrderPrint();
_T28:
    SP += 1;
    popp(FP);
    return 0;
} 

