#include "machine.h"

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

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

int Node_contains() { 
    pushp(FP);
    FP = SP;
    pushw(R1);
    pushw(R2);
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    R2 = *((WPtr)(((WPtr)(FP)+1)));
    if ( R1 != *((WPtr)(((WPtr)(R2)+4))) ) goto _T24;
    R0 = (Word)(1);
    goto _T22;
    goto _T23;
_T24:
    R1 = *((WPtr)(((WPtr)(FP)+2)));
    R2 = *((WPtr)(((WPtr)(FP)+1)));
    if ( R1 <= *((WPtr)(((WPtr)(R2)+4))) ) goto _T25;
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    if ( *((WPtr)(((WPtr)(R1)+3))) == (Word)(0) ) goto _T27;
    pushw(*((WPtr)(((WPtr)(FP)+2))));
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    pushw(*((WPtr)(((WPtr)(R1)+3))));
    Node_contains();
    goto _T22;
    goto _T26;
_T27:
    R0 = (Word)(0);
    goto _T22;
_T28:
_T26:
    goto _T23;
_T25:
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    if ( *((WPtr)(((WPtr)(R1)+2))) == (Word)(0) ) goto _T31;
    pushw(*((WPtr)(((WPtr)(FP)+2))));
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    pushw(*((WPtr)(((WPtr)(R1)+2))));
    Node_contains();
    goto _T22;
    goto _T30;
_T31:
    R0 = (Word)(0);
    goto _T22;
_T32:
_T30:
_T29:
_T23:
_T22:
    popw(R2);
    popw(R1);
    popp(FP);
    SP += 2;
    return 0;
} 

int main() { 
    pushp(FP);
    FP = SP;
    SP -= 1;
    pushw((Word)(0));
    pushw((Word)(5));
    py_malloc();
    pushw(R0);
    Node___init__();
    *((WPtr)(((WPtr)(FP)+-1))) = R0;
    pushw((Word)(-1));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_insert();
    pushw(R0);
    put_bool();
    pushw((Word)(1));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_insert();
    pushw(R0);
    put_bool();
    pushw((Word)(0));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_insert();
    pushw(R0);
    put_bool();
    pushw((Word)(10));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_insert();
    pushw(R0);
    put_bool();
    pushw((Word)(99));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_insert();
    pushw(R0);
    put_bool();
    pushw((Word)(99));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_contains();
    pushw(R0);
    put_bool();
    pushw((Word)(0));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_contains();
    pushw(R0);
    put_bool();
    pushw((Word)(2));
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Node_contains();
    pushw(R0);
    put_bool();
_T33:
    SP += 1;
    popp(FP);
    return 0;
} 

