diff options
Diffstat (limited to 'boil/tests')
36 files changed, 7130 insertions, 0 deletions
| diff --git a/boil/tests/BinaryTree.java b/boil/tests/BinaryTree.java new file mode 100644 index 0000000..18d1464 --- /dev/null +++ b/boil/tests/BinaryTree.java @@ -0,0 +1,334 @@ +class BinaryTree{ +    public static void main(String[] a){ +	System.out.println(new BT().Start()); +    } +} + + +// This class invokes the methods to create a tree, +// insert, delete and serach for  elements on it +class BT { + +    public int Start(){ +	Tree root ; +	boolean ntb ; +	int nti ; + +	root = new Tree(); +	ntb = root.Init(16); +	ntb = root.Print(); +	System.out.println(100000000); +	ntb = root.Insert(8) ; +	ntb = root.Print(); +	ntb = root.Insert(24) ; +	ntb = root.Insert(4) ; +	ntb = root.Insert(12) ; +	ntb = root.Insert(20) ; +	ntb = root.Insert(28) ; +	ntb = root.Insert(14) ; +	ntb = root.Print(); +	System.out.println(root.Search(24)); +	System.out.println(root.Search(12)); +	System.out.println(root.Search(16)); +	System.out.println(root.Search(50)); +	System.out.println(root.Search(12)); +	ntb = root.Delete(12); +	ntb = root.Print(); +	System.out.println(root.Search(12)); + +	return 0 ; +    } + +} + +class Tree{ +    Tree left ; +    Tree right; +    int key ; +    boolean has_left ; +    boolean has_right ; +    Tree my_null ; + +    // Initialize a node with a key value and no children +    public boolean Init(int v_key){ +	key = v_key ; +	has_left = false ; +	has_right = false ; +	return true ; +    } + +    // Update the right child with rn +    public boolean SetRight(Tree rn){ +	right = rn ; +	return true ; +    } +     +    // Update the left child with ln +    public boolean SetLeft(Tree ln){ +	left = ln ; +	return true ; +    } + +    public Tree GetRight(){ +	return right ; +    } + +    public Tree GetLeft(){ +	return left; +    } + +    public int GetKey(){ +	return key ; +    } + +    public boolean SetKey(int v_key){ +	key = v_key ; +	return true ; +    } + +    public boolean GetHas_Right(){ +	return has_right ; +    } + +    public boolean GetHas_Left(){ +	return has_left ; +    } + +    public boolean SetHas_Left(boolean val){ +	 has_left = val ; +	 return true ; +    } + +    public boolean SetHas_Right(boolean val){ +	 has_right = val ; +	 return true ; +    } +     +    // This method compares two integers and +    // returns true if they are equal and false +    // otherwise +    public boolean Compare(int num1 , int num2){ +	boolean ntb ; +	int nti ; + +	ntb = false ; +	nti = num2 + 1 ; +	if (num1 < num2) ntb = false ; +	else if (!(num1 < nti)) ntb = false ; +	else ntb = true ; +	return ntb ; +    } + + +    // Insert a new element in the tree +    public boolean Insert(int v_key){ +	Tree new_node ; +	boolean ntb ; +	boolean cont ; +	int key_aux ; +	Tree current_node ; + +	new_node = new Tree(); +	ntb = new_node.Init(v_key) ; +	current_node = this ; +	cont = true ; +	while (cont){ +	    key_aux = current_node.GetKey(); +	    if (v_key < key_aux){ +		if (current_node.GetHas_Left()) +		    current_node = current_node.GetLeft() ; +		else { +		    cont = false ; +		    ntb = current_node.SetHas_Left(true); +		    ntb = current_node.SetLeft(new_node); +		} +	    } +	    else{ +		if (current_node.GetHas_Right()) +		    current_node = current_node.GetRight() ; +		else { +		    cont = false ; +		    ntb = current_node.SetHas_Right(true); +		    ntb = current_node.SetRight(new_node); +		} +	    } +	} +	return true ; +    } + + +    // Delete an element from the tree +    public boolean Delete(int v_key){ +	Tree current_node ; +	Tree parent_node ; +	boolean cont ; +	boolean found ; +	boolean is_root ; +	int key_aux ; +	boolean ntb ; + +	current_node = this ; +	parent_node = this ; +	cont = true ; +	found = false ; +	is_root = true ; +	while (cont){ +	    key_aux = current_node.GetKey(); +	    if (v_key < key_aux) +		if (current_node.GetHas_Left()){ +		    parent_node = current_node ; +		    current_node = current_node.GetLeft() ; +		} +		else cont = false ; +	    else  +		if (key_aux < v_key) +		    if (current_node.GetHas_Right()){ +			parent_node = current_node ; +			current_node = current_node.GetRight() ; +		    } +		    else cont = false ; +		else {  +		    if (is_root)  +			if ((!current_node.GetHas_Right()) &&  +			    (!current_node.GetHas_Left()) ) +			    ntb = true ; +			else  +			    ntb = this.Remove(parent_node,current_node);  +		    else ntb = this.Remove(parent_node,current_node); +		    found = true ; +		    cont = false ; +		} +	    is_root = false ; +	} +	return found ; +    } + + +    // Check if the element to be removed will use the +    // righ or left subtree if one exists +    public boolean Remove(Tree p_node, Tree c_node){ +	boolean ntb ; +	int auxkey1 ; +	int auxkey2 ; +	 +	if (c_node.GetHas_Left())  +	    ntb = this.RemoveLeft(p_node,c_node) ; +	else  +	    if (c_node.GetHas_Right()) +		ntb = this.RemoveRight(p_node,c_node) ; +	    else { +		auxkey1 = c_node.GetKey(); +		//auxtree01 = p_node.GetLeft() ; +		//auxkey2 = auxtree01.GetKey() ; +		auxkey2 = (p_node.GetLeft()).GetKey() ; +		if (this.Compare(auxkey1,auxkey2)) { +		    ntb = p_node.SetLeft(my_null); +		    ntb = p_node.SetHas_Left(false); +		} +		else { +		    ntb = p_node.SetRight(my_null); +		    ntb = p_node.SetHas_Right(false); +		} +	    } +	return true ; +    } + + +    // Copy the child key to the parent until a leaf is +    // found and remove the leaf. This is done with the +    // right subtree +    public boolean RemoveRight(Tree p_node, Tree c_node){ +	boolean ntb ; + +	while (c_node.GetHas_Right()){ +	    //auxtree01 = c_node.GetRight() ; +	    //auxint02 = auxtree01.GetKey(); +	    //ntb = c_node.SetKey(auxint02); +	    ntb = c_node.SetKey((c_node.GetRight()).GetKey()); +	    p_node = c_node ; +	    c_node = c_node.GetRight() ; +	} +	ntb = p_node.SetRight(my_null); +	ntb = p_node.SetHas_Right(false); +	return true ; +    } + + +    // Copy the child key to the parent until a leaf is +    // found and remove the leaf. This is done with the +    // left subtree +    public boolean RemoveLeft(Tree p_node, Tree c_node){ +	boolean ntb ; + +	while (c_node.GetHas_Left()){ +	    //auxtree01 = c_node.GetLeft() ; +	    //auxint02 = auxtree01.GetKey(); +	    //ntb = c_node.SetKey(auxint02); +	    ntb = c_node.SetKey((c_node.GetLeft()).GetKey()); +	    p_node = c_node ; +	    c_node = c_node.GetLeft() ; +	} +	ntb = p_node.SetLeft(my_null); +	ntb = p_node.SetHas_Left(false); +	return true ; +    } + +    // Search for an elemnt in the tree +    public int Search(int v_key){ +	boolean cont ; +	int ifound ; +	Tree current_node; +	int key_aux ; + +	current_node = this ; +	cont = true ; +	ifound = 0 ; +	while (cont){ +	    key_aux = current_node.GetKey(); +	    if (v_key < key_aux) +		if (current_node.GetHas_Left()) +		    current_node = current_node.GetLeft() ; +		else cont = false ; +	    else  +		if (key_aux < v_key) +		    if (current_node.GetHas_Right()) +			current_node = current_node.GetRight() ; +		    else cont = false ; +		else {  +		    ifound = 1 ; +		    cont = false ; +		} +	} +	return ifound ; +    } + +    // Invoke the method to really print the tree elements +    public boolean Print(){ +	Tree current_node; +	boolean ntb ; + +	current_node = this ; +	ntb = this.RecPrint(current_node); +	return true ; +    } + +    // Print the elements of the tree +    public boolean RecPrint(Tree node){ +	boolean ntb ; + +	if (node.GetHas_Left()){ +	    //auxtree01 = node.GetLeft() ; +	    //ntb = this.RecPrint(auxtree01); +	    ntb = this.RecPrint(node.GetLeft()); +	} else ntb = true ; +	System.out.println(node.GetKey()); +	if (node.GetHas_Right()){ +	    //auxtree01 = node.GetRight() ; +	    //ntb = this.RecPrint(auxtree01); +	    ntb = this.RecPrint(node.GetRight()); +	} else ntb = true ; +	return true ; +    } + +} +    diff --git a/boil/tests/BinaryTree.opt.vapor b/boil/tests/BinaryTree.opt.vapor new file mode 100644 index 0000000..ef6ac4e --- /dev/null +++ b/boil/tests/BinaryTree.opt.vapor @@ -0,0 +1,526 @@ + +const empty_BT + +const empty_Tree + + +func Main() +  t.0 = call :BT.Start(:empty_BT) +  PrintIntS(t.0) +  ret + +func BT.Start(this) +  root = HeapAllocZ(24) +  if root goto :null1 +    Error("null pointer") +  null1: +  ntb = call :Tree.Init(root 16) +  if root goto :null2 +    Error("null pointer") +  null2: +  ntb = call :Tree.Print(root) +  PrintIntS(100000000) +  if root goto :null3 +    Error("null pointer") +  null3: +  ntb = call :Tree.Insert(root 8) +  if root goto :null4 +    Error("null pointer") +  null4: +  ntb = call :Tree.Print(root) +  if root goto :null5 +    Error("null pointer") +  null5: +  ntb = call :Tree.Insert(root 24) +  if root goto :null6 +    Error("null pointer") +  null6: +  ntb = call :Tree.Insert(root 4) +  if root goto :null7 +    Error("null pointer") +  null7: +  ntb = call :Tree.Insert(root 12) +  if root goto :null8 +    Error("null pointer") +  null8: +  ntb = call :Tree.Insert(root 20) +  if root goto :null9 +    Error("null pointer") +  null9: +  ntb = call :Tree.Insert(root 28) +  if root goto :null10 +    Error("null pointer") +  null10: +  ntb = call :Tree.Insert(root 14) +  if root goto :null11 +    Error("null pointer") +  null11: +  ntb = call :Tree.Print(root) +  if root goto :null12 +    Error("null pointer") +  null12: +  t.0 = call :Tree.Search(root 24) +  PrintIntS(t.0) +  if root goto :null13 +    Error("null pointer") +  null13: +  t.1 = call :Tree.Search(root 12) +  PrintIntS(t.1) +  if root goto :null14 +    Error("null pointer") +  null14: +  t.2 = call :Tree.Search(root 16) +  PrintIntS(t.2) +  if root goto :null15 +    Error("null pointer") +  null15: +  t.3 = call :Tree.Search(root 50) +  PrintIntS(t.3) +  if root goto :null16 +    Error("null pointer") +  null16: +  t.4 = call :Tree.Search(root 12) +  PrintIntS(t.4) +  if root goto :null17 +    Error("null pointer") +  null17: +  ntb = call :Tree.Delete(root 12) +  if root goto :null18 +    Error("null pointer") +  null18: +  ntb = call :Tree.Print(root) +  if root goto :null19 +    Error("null pointer") +  null19: +  t.5 = call :Tree.Search(root 12) +  PrintIntS(t.5) +  ret 0 + +func Tree.Init(this v_key) +  [this+8] = v_key +  [this+12] = 0 +  [this+16] = 0 +  ret 1 + +func Tree.SetRight(this rn) +  [this+4] = rn +  ret 1 + +func Tree.SetLeft(this ln) +  [this+0] = ln +  ret 1 + +func Tree.GetRight(this) +  t.0 = [this+4] +  ret t.0 + +func Tree.GetLeft(this) +  t.0 = [this+0] +  ret t.0 + +func Tree.GetKey(this) +  t.0 = [this+8] +  ret t.0 + +func Tree.SetKey(this v_key) +  [this+8] = v_key +  ret 1 + +func Tree.GetHas_Right(this) +  t.0 = [this+16] +  ret t.0 + +func Tree.GetHas_Left(this) +  t.0 = [this+12] +  ret t.0 + +func Tree.SetHas_Left(this val) +  [this+12] = val +  ret 1 + +func Tree.SetHas_Right(this val) +  [this+16] = val +  ret 1 + +func Tree.Compare(this num1 num2) +  ntb = 0 +  nti = Add(num2 1) +  t.0 = LtS(num1 num2) +  if0 t.0 goto :if1_else +    ntb = 0 +    goto :if1_end +  if1_else: +    t.1 = LtS(num1 nti) +    if t.1 goto :if2_else +      ntb = 0 +      goto :if2_end +    if2_else: +      ntb = 1 +    if2_end: +  if1_end: +  ret ntb + +func Tree.Insert(this v_key) +  new_node = HeapAllocZ(24) +  if new_node goto :null20 +    Error("null pointer") +  null20: +  ntb = call :Tree.Init(new_node v_key) +  current_node = this +  cont = 1 +  while1_top: +  if0 cont goto :while1_end +    if current_node goto :null21 +      Error("null pointer") +    null21: +    key_aux = call :Tree.GetKey(current_node) +    t.0 = LtS(v_key key_aux) +    if0 t.0 goto :if3_else +      if current_node goto :null22 +        Error("null pointer") +      null22: +      t.1 = call :Tree.GetHas_Left(current_node) +      if0 t.1 goto :if4_else +        if current_node goto :null23 +          Error("null pointer") +        null23: +        current_node = call :Tree.GetLeft(current_node) +        goto :if4_end +      if4_else: +        cont = 0 +        if current_node goto :null24 +          Error("null pointer") +        null24: +        ntb = call :Tree.SetHas_Left(current_node 1) +        if current_node goto :null25 +          Error("null pointer") +        null25: +        ntb = call :Tree.SetLeft(current_node new_node) +      if4_end: +      goto :if3_end +    if3_else: +      if current_node goto :null26 +        Error("null pointer") +      null26: +      t.2 = call :Tree.GetHas_Right(current_node) +      if0 t.2 goto :if5_else +        if current_node goto :null27 +          Error("null pointer") +        null27: +        current_node = call :Tree.GetRight(current_node) +        goto :if5_end +      if5_else: +        cont = 0 +        if current_node goto :null28 +          Error("null pointer") +        null28: +        ntb = call :Tree.SetHas_Right(current_node 1) +        if current_node goto :null29 +          Error("null pointer") +        null29: +        ntb = call :Tree.SetRight(current_node new_node) +      if5_end: +    if3_end: +    goto :while1_top +  while1_end: +  ret 1 + +func Tree.Delete(this v_key) +  current_node = this +  parent_node = this +  cont = 1 +  found = 0 +  is_root = 1 +  while2_top: +  if0 cont goto :while2_end +    if current_node goto :null30 +      Error("null pointer") +    null30: +    key_aux = call :Tree.GetKey(current_node) +    t.0 = LtS(v_key key_aux) +    if0 t.0 goto :if6_else +      if current_node goto :null31 +        Error("null pointer") +      null31: +      t.1 = call :Tree.GetHas_Left(current_node) +      if0 t.1 goto :if7_else +        parent_node = current_node +        if current_node goto :null32 +          Error("null pointer") +        null32: +        current_node = call :Tree.GetLeft(current_node) +        goto :if7_end +      if7_else: +        cont = 0 +      if7_end: +      goto :if6_end +    if6_else: +      t.2 = LtS(key_aux v_key) +      if0 t.2 goto :if8_else +        if current_node goto :null33 +          Error("null pointer") +        null33: +        t.3 = call :Tree.GetHas_Right(current_node) +        if0 t.3 goto :if9_else +          parent_node = current_node +          if current_node goto :null34 +            Error("null pointer") +          null34: +          current_node = call :Tree.GetRight(current_node) +          goto :if9_end +        if9_else: +          cont = 0 +        if9_end: +        goto :if8_end +      if8_else: +        if0 is_root goto :if10_else +          if current_node goto :null35 +            Error("null pointer") +          null35: +          t.4 = call :Tree.GetHas_Right(current_node) +          if t.4 goto :if11_else +          if current_node goto :null36 +            Error("null pointer") +          null36: +          t.5 = call :Tree.GetHas_Left(current_node) +          if t.5 goto :if11_else +            ntb = 1 +            goto :if11_end +          if11_else: +            ntb = call :Tree.Remove(this parent_node current_node) +          if11_end: +          goto :if10_end +        if10_else: +          ntb = call :Tree.Remove(this parent_node current_node) +        if10_end: +        found = 1 +        cont = 0 +      if8_end: +    if6_end: +    is_root = 0 +    goto :while2_top +  while2_end: +  ret found + +func Tree.Remove(this p_node c_node) +  if c_node goto :null37 +    Error("null pointer") +  null37: +  t.0 = call :Tree.GetHas_Left(c_node) +  if0 t.0 goto :if12_else +    ntb = call :Tree.RemoveLeft(this p_node c_node) +    goto :if12_end +  if12_else: +    if c_node goto :null38 +      Error("null pointer") +    null38: +    t.1 = call :Tree.GetHas_Right(c_node) +    if0 t.1 goto :if13_else +      ntb = call :Tree.RemoveRight(this p_node c_node) +      goto :if13_end +    if13_else: +      if c_node goto :null39 +        Error("null pointer") +      null39: +      auxkey1 = call :Tree.GetKey(c_node) +      if p_node goto :null40 +        Error("null pointer") +      null40: +      t.2 = call :Tree.GetLeft(p_node) +      if t.2 goto :null41 +        Error("null pointer") +      null41: +      auxkey2 = call :Tree.GetKey(t.2) +      t.3 = call :Tree.Compare(this auxkey1 auxkey2) +      if0 t.3 goto :if14_else +        if p_node goto :null42 +          Error("null pointer") +        null42: +        t.4 = [this+20] +        ntb = call :Tree.SetLeft(p_node t.4) +        if p_node goto :null43 +          Error("null pointer") +        null43: +        ntb = call :Tree.SetHas_Left(p_node 0) +        goto :if14_end +      if14_else: +        if p_node goto :null44 +          Error("null pointer") +        null44: +        t.5 = [this+20] +        ntb = call :Tree.SetRight(p_node t.5) +        if p_node goto :null45 +          Error("null pointer") +        null45: +        ntb = call :Tree.SetHas_Right(p_node 0) +      if14_end: +    if13_end: +  if12_end: +  ret 1 + +func Tree.RemoveRight(this p_node c_node) +  while3_top: +  if c_node goto :null46 +    Error("null pointer") +  null46: +  t.0 = call :Tree.GetHas_Right(c_node) +  if0 t.0 goto :while3_end +    if c_node goto :null47 +      Error("null pointer") +    null47: +    if c_node goto :null48 +      Error("null pointer") +    null48: +    t.1 = call :Tree.GetRight(c_node) +    if t.1 goto :null49 +      Error("null pointer") +    null49: +    t.2 = call :Tree.GetKey(t.1) +    ntb = call :Tree.SetKey(c_node t.2) +    p_node = c_node +    if c_node goto :null50 +      Error("null pointer") +    null50: +    c_node = call :Tree.GetRight(c_node) +    goto :while3_top +  while3_end: +  if p_node goto :null51 +    Error("null pointer") +  null51: +  t.3 = [this+20] +  ntb = call :Tree.SetRight(p_node t.3) +  if p_node goto :null52 +    Error("null pointer") +  null52: +  ntb = call :Tree.SetHas_Right(p_node 0) +  ret 1 + +func Tree.RemoveLeft(this p_node c_node) +  while4_top: +  if c_node goto :null53 +    Error("null pointer") +  null53: +  t.0 = call :Tree.GetHas_Left(c_node) +  if0 t.0 goto :while4_end +    if c_node goto :null54 +      Error("null pointer") +    null54: +    if c_node goto :null55 +      Error("null pointer") +    null55: +    t.1 = call :Tree.GetLeft(c_node) +    if t.1 goto :null56 +      Error("null pointer") +    null56: +    t.2 = call :Tree.GetKey(t.1) +    ntb = call :Tree.SetKey(c_node t.2) +    p_node = c_node +    if c_node goto :null57 +      Error("null pointer") +    null57: +    c_node = call :Tree.GetLeft(c_node) +    goto :while4_top +  while4_end: +  if p_node goto :null58 +    Error("null pointer") +  null58: +  t.3 = [this+20] +  ntb = call :Tree.SetLeft(p_node t.3) +  if p_node goto :null59 +    Error("null pointer") +  null59: +  ntb = call :Tree.SetHas_Left(p_node 0) +  ret 1 + +func Tree.Search(this v_key) +  current_node = this +  cont = 1 +  ifound = 0 +  while5_top: +  if0 cont goto :while5_end +    if current_node goto :null60 +      Error("null pointer") +    null60: +    key_aux = call :Tree.GetKey(current_node) +    t.0 = LtS(v_key key_aux) +    if0 t.0 goto :if15_else +      if current_node goto :null61 +        Error("null pointer") +      null61: +      t.1 = call :Tree.GetHas_Left(current_node) +      if0 t.1 goto :if16_else +        if current_node goto :null62 +          Error("null pointer") +        null62: +        current_node = call :Tree.GetLeft(current_node) +        goto :if16_end +      if16_else: +        cont = 0 +      if16_end: +      goto :if15_end +    if15_else: +      t.2 = LtS(key_aux v_key) +      if0 t.2 goto :if17_else +        if current_node goto :null63 +          Error("null pointer") +        null63: +        t.3 = call :Tree.GetHas_Right(current_node) +        if0 t.3 goto :if18_else +          if current_node goto :null64 +            Error("null pointer") +          null64: +          current_node = call :Tree.GetRight(current_node) +          goto :if18_end +        if18_else: +          cont = 0 +        if18_end: +        goto :if17_end +      if17_else: +        ifound = 1 +        cont = 0 +      if17_end: +    if15_end: +    goto :while5_top +  while5_end: +  ret ifound + +func Tree.Print(this) +  current_node = this +  ntb = call :Tree.RecPrint(this current_node) +  ret 1 + +func Tree.RecPrint(this node) +  if node goto :null65 +    Error("null pointer") +  null65: +  t.0 = call :Tree.GetHas_Left(node) +  if0 t.0 goto :if19_else +    if node goto :null66 +      Error("null pointer") +    null66: +    t.1 = call :Tree.GetLeft(node) +    ntb = call :Tree.RecPrint(this t.1) +    goto :if19_end +  if19_else: +    ntb = 1 +  if19_end: +  if node goto :null67 +    Error("null pointer") +  null67: +  t.2 = call :Tree.GetKey(node) +  PrintIntS(t.2) +  if node goto :null68 +    Error("null pointer") +  null68: +  t.3 = call :Tree.GetHas_Right(node) +  if0 t.3 goto :if20_else +    if node goto :null69 +      Error("null pointer") +    null69: +    t.4 = call :Tree.GetRight(node) +    ntb = call :Tree.RecPrint(this t.4) +    goto :if20_end +  if20_else: +    ntb = 1 +  if20_end: +  ret 1 diff --git a/boil/tests/BinaryTree.vapor b/boil/tests/BinaryTree.vapor new file mode 100644 index 0000000..275cfe3 --- /dev/null +++ b/boil/tests/BinaryTree.vapor @@ -0,0 +1,719 @@ + +const vmt_BT +  :BT.Start + +const vmt_Tree +  :Tree.Init +  :Tree.SetRight +  :Tree.SetLeft +  :Tree.GetRight +  :Tree.GetLeft +  :Tree.GetKey +  :Tree.SetKey +  :Tree.GetHas_Right +  :Tree.GetHas_Left +  :Tree.SetHas_Left +  :Tree.SetHas_Right +  :Tree.Compare +  :Tree.Insert +  :Tree.Delete +  :Tree.Remove +  :Tree.RemoveRight +  :Tree.RemoveLeft +  :Tree.Search +  :Tree.Print +  :Tree.RecPrint + + +func Main() +  t.0 = HeapAllocZ(4) +  [t.0] = :vmt_BT +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0) +  PrintIntS(t.2) +  ret + +func BT.Start(this) +  t.0 = HeapAllocZ(28) +  [t.0] = :vmt_Tree +  root = t.0 +  if root goto :null2 +    Error("null pointer") +  null2: +  t.1 = [root] +  t.1 = [t.1+0] +  ntb = call t.1(root 16) +  if root goto :null3 +    Error("null pointer") +  null3: +  t.2 = [root] +  t.2 = [t.2+72] +  ntb = call t.2(root) +  PrintIntS(100000000) +  if root goto :null4 +    Error("null pointer") +  null4: +  t.3 = [root] +  t.3 = [t.3+48] +  ntb = call t.3(root 8) +  if root goto :null5 +    Error("null pointer") +  null5: +  t.4 = [root] +  t.4 = [t.4+72] +  ntb = call t.4(root) +  if root goto :null6 +    Error("null pointer") +  null6: +  t.5 = [root] +  t.5 = [t.5+48] +  ntb = call t.5(root 24) +  if root goto :null7 +    Error("null pointer") +  null7: +  t.6 = [root] +  t.6 = [t.6+48] +  ntb = call t.6(root 4) +  if root goto :null8 +    Error("null pointer") +  null8: +  t.7 = [root] +  t.7 = [t.7+48] +  ntb = call t.7(root 12) +  if root goto :null9 +    Error("null pointer") +  null9: +  t.8 = [root] +  t.8 = [t.8+48] +  ntb = call t.8(root 20) +  if root goto :null10 +    Error("null pointer") +  null10: +  t.9 = [root] +  t.9 = [t.9+48] +  ntb = call t.9(root 28) +  if root goto :null11 +    Error("null pointer") +  null11: +  t.10 = [root] +  t.10 = [t.10+48] +  ntb = call t.10(root 14) +  if root goto :null12 +    Error("null pointer") +  null12: +  t.11 = [root] +  t.11 = [t.11+72] +  ntb = call t.11(root) +  if root goto :null13 +    Error("null pointer") +  null13: +  t.12 = [root] +  t.12 = [t.12+68] +  t.13 = call t.12(root 24) +  PrintIntS(t.13) +  if root goto :null14 +    Error("null pointer") +  null14: +  t.14 = [root] +  t.14 = [t.14+68] +  t.15 = call t.14(root 12) +  PrintIntS(t.15) +  if root goto :null15 +    Error("null pointer") +  null15: +  t.16 = [root] +  t.16 = [t.16+68] +  t.17 = call t.16(root 16) +  PrintIntS(t.17) +  if root goto :null16 +    Error("null pointer") +  null16: +  t.18 = [root] +  t.18 = [t.18+68] +  t.19 = call t.18(root 50) +  PrintIntS(t.19) +  if root goto :null17 +    Error("null pointer") +  null17: +  t.20 = [root] +  t.20 = [t.20+68] +  t.21 = call t.20(root 12) +  PrintIntS(t.21) +  if root goto :null18 +    Error("null pointer") +  null18: +  t.22 = [root] +  t.22 = [t.22+52] +  ntb = call t.22(root 12) +  if root goto :null19 +    Error("null pointer") +  null19: +  t.23 = [root] +  t.23 = [t.23+72] +  ntb = call t.23(root) +  if root goto :null20 +    Error("null pointer") +  null20: +  t.24 = [root] +  t.24 = [t.24+68] +  t.25 = call t.24(root 12) +  PrintIntS(t.25) +  ret 0 + +func Tree.Init(this v_key) +  [this+12] = v_key +  [this+16] = 0 +  [this+20] = 0 +  ret 1 + +func Tree.SetRight(this rn) +  [this+8] = rn +  ret 1 + +func Tree.SetLeft(this ln) +  [this+4] = ln +  ret 1 + +func Tree.GetRight(this) +  t.0 = [this+8] +  ret t.0 + +func Tree.GetLeft(this) +  t.0 = [this+4] +  ret t.0 + +func Tree.GetKey(this) +  t.0 = [this+12] +  ret t.0 + +func Tree.SetKey(this v_key) +  [this+12] = v_key +  ret 1 + +func Tree.GetHas_Right(this) +  t.0 = [this+20] +  ret t.0 + +func Tree.GetHas_Left(this) +  t.0 = [this+16] +  ret t.0 + +func Tree.SetHas_Left(this val) +  [this+16] = val +  ret 1 + +func Tree.SetHas_Right(this val) +  [this+20] = val +  ret 1 + +func Tree.Compare(this num1 num2) +  ntb = 0 +  nti = Add(num2 1) +  t.0 = LtS(num1 num2) +  if0 t.0 goto :if1_else +    ntb = 0 +    goto :if1_end +  if1_else: +    t.1 = LtS(num1 nti) +    t.2 = Sub(1 t.1) +    if0 t.2 goto :if2_else +      ntb = 0 +      goto :if2_end +    if2_else: +      ntb = 1 +    if2_end: +  if1_end: +  ret ntb + +func Tree.Insert(this v_key) +  t.0 = HeapAllocZ(28) +  [t.0] = :vmt_Tree +  new_node = t.0 +  if new_node goto :null21 +    Error("null pointer") +  null21: +  t.1 = [new_node] +  t.1 = [t.1+0] +  ntb = call t.1(new_node v_key) +  current_node = this +  cont = 1 +  while1_top: +  if0 cont goto :while1_end +    if current_node goto :null22 +      Error("null pointer") +    null22: +    t.2 = [current_node] +    t.2 = [t.2+20] +    key_aux = call t.2(current_node) +    t.3 = LtS(v_key key_aux) +    if0 t.3 goto :if3_else +      if current_node goto :null23 +        Error("null pointer") +      null23: +      t.4 = [current_node] +      t.4 = [t.4+32] +      t.5 = call t.4(current_node) +      if0 t.5 goto :if4_else +        if current_node goto :null24 +          Error("null pointer") +        null24: +        t.6 = [current_node] +        t.6 = [t.6+16] +        current_node = call t.6(current_node) +        goto :if4_end +      if4_else: +        cont = 0 +        if current_node goto :null25 +          Error("null pointer") +        null25: +        t.7 = [current_node] +        t.7 = [t.7+36] +        ntb = call t.7(current_node 1) +        if current_node goto :null26 +          Error("null pointer") +        null26: +        t.8 = [current_node] +        t.8 = [t.8+8] +        ntb = call t.8(current_node new_node) +      if4_end: +      goto :if3_end +    if3_else: +      if current_node goto :null27 +        Error("null pointer") +      null27: +      t.9 = [current_node] +      t.9 = [t.9+28] +      t.10 = call t.9(current_node) +      if0 t.10 goto :if5_else +        if current_node goto :null28 +          Error("null pointer") +        null28: +        t.11 = [current_node] +        t.11 = [t.11+12] +        current_node = call t.11(current_node) +        goto :if5_end +      if5_else: +        cont = 0 +        if current_node goto :null29 +          Error("null pointer") +        null29: +        t.12 = [current_node] +        t.12 = [t.12+40] +        ntb = call t.12(current_node 1) +        if current_node goto :null30 +          Error("null pointer") +        null30: +        t.13 = [current_node] +        t.13 = [t.13+4] +        ntb = call t.13(current_node new_node) +      if5_end: +    if3_end: +    goto :while1_top +  while1_end: +  ret 1 + +func Tree.Delete(this v_key) +  current_node = this +  parent_node = this +  cont = 1 +  found = 0 +  is_root = 1 +  while2_top: +  if0 cont goto :while2_end +    if current_node goto :null31 +      Error("null pointer") +    null31: +    t.0 = [current_node] +    t.0 = [t.0+20] +    key_aux = call t.0(current_node) +    t.1 = LtS(v_key key_aux) +    if0 t.1 goto :if6_else +      if current_node goto :null32 +        Error("null pointer") +      null32: +      t.2 = [current_node] +      t.2 = [t.2+32] +      t.3 = call t.2(current_node) +      if0 t.3 goto :if7_else +        parent_node = current_node +        if current_node goto :null33 +          Error("null pointer") +        null33: +        t.4 = [current_node] +        t.4 = [t.4+16] +        current_node = call t.4(current_node) +        goto :if7_end +      if7_else: +        cont = 0 +      if7_end: +      goto :if6_end +    if6_else: +      t.5 = LtS(key_aux v_key) +      if0 t.5 goto :if8_else +        if current_node goto :null34 +          Error("null pointer") +        null34: +        t.6 = [current_node] +        t.6 = [t.6+28] +        t.7 = call t.6(current_node) +        if0 t.7 goto :if9_else +          parent_node = current_node +          if current_node goto :null35 +            Error("null pointer") +          null35: +          t.8 = [current_node] +          t.8 = [t.8+12] +          current_node = call t.8(current_node) +          goto :if9_end +        if9_else: +          cont = 0 +        if9_end: +        goto :if8_end +      if8_else: +        if0 is_root goto :if10_else +          if current_node goto :null36 +            Error("null pointer") +          null36: +          t.10 = [current_node] +          t.10 = [t.10+28] +          t.11 = call t.10(current_node) +          t.12 = Sub(1 t.11) +          if0 t.12 goto :ss1_else +            if current_node goto :null37 +              Error("null pointer") +            null37: +            t.13 = [current_node] +            t.13 = [t.13+32] +            t.14 = call t.13(current_node) +            t.9 = Sub(1 t.14) +            goto :ss1_end +          ss1_else: +            t.9 = 0 +          ss1_end: +          if0 t.9 goto :if11_else +            ntb = 1 +            goto :if11_end +          if11_else: +            t.15 = [this] +            t.15 = [t.15+56] +            ntb = call t.15(this parent_node current_node) +          if11_end: +          goto :if10_end +        if10_else: +          t.16 = [this] +          t.16 = [t.16+56] +          ntb = call t.16(this parent_node current_node) +        if10_end: +        found = 1 +        cont = 0 +      if8_end: +    if6_end: +    is_root = 0 +    goto :while2_top +  while2_end: +  ret found + +func Tree.Remove(this p_node c_node) +  if c_node goto :null38 +    Error("null pointer") +  null38: +  t.0 = [c_node] +  t.0 = [t.0+32] +  t.1 = call t.0(c_node) +  if0 t.1 goto :if12_else +    t.2 = [this] +    t.2 = [t.2+64] +    ntb = call t.2(this p_node c_node) +    goto :if12_end +  if12_else: +    if c_node goto :null39 +      Error("null pointer") +    null39: +    t.3 = [c_node] +    t.3 = [t.3+28] +    t.4 = call t.3(c_node) +    if0 t.4 goto :if13_else +      t.5 = [this] +      t.5 = [t.5+60] +      ntb = call t.5(this p_node c_node) +      goto :if13_end +    if13_else: +      if c_node goto :null40 +        Error("null pointer") +      null40: +      t.6 = [c_node] +      t.6 = [t.6+20] +      auxkey1 = call t.6(c_node) +      if p_node goto :null41 +        Error("null pointer") +      null41: +      t.7 = [p_node] +      t.7 = [t.7+16] +      t.8 = call t.7(p_node) +      if t.8 goto :null42 +        Error("null pointer") +      null42: +      t.9 = [t.8] +      t.9 = [t.9+20] +      auxkey2 = call t.9(t.8) +      t.10 = [this] +      t.10 = [t.10+44] +      t.11 = call t.10(this auxkey1 auxkey2) +      if0 t.11 goto :if14_else +        if p_node goto :null43 +          Error("null pointer") +        null43: +        t.12 = [p_node] +        t.12 = [t.12+8] +        t.13 = [this+24] +        ntb = call t.12(p_node t.13) +        if p_node goto :null44 +          Error("null pointer") +        null44: +        t.14 = [p_node] +        t.14 = [t.14+36] +        ntb = call t.14(p_node 0) +        goto :if14_end +      if14_else: +        if p_node goto :null45 +          Error("null pointer") +        null45: +        t.15 = [p_node] +        t.15 = [t.15+4] +        t.16 = [this+24] +        ntb = call t.15(p_node t.16) +        if p_node goto :null46 +          Error("null pointer") +        null46: +        t.17 = [p_node] +        t.17 = [t.17+40] +        ntb = call t.17(p_node 0) +      if14_end: +    if13_end: +  if12_end: +  ret 1 + +func Tree.RemoveRight(this p_node c_node) +  while3_top: +  if c_node goto :null47 +    Error("null pointer") +  null47: +  t.0 = [c_node] +  t.0 = [t.0+28] +  t.1 = call t.0(c_node) +  if0 t.1 goto :while3_end +    if c_node goto :null48 +      Error("null pointer") +    null48: +    t.2 = [c_node] +    t.2 = [t.2+24] +    if c_node goto :null49 +      Error("null pointer") +    null49: +    t.3 = [c_node] +    t.3 = [t.3+12] +    t.4 = call t.3(c_node) +    if t.4 goto :null50 +      Error("null pointer") +    null50: +    t.5 = [t.4] +    t.5 = [t.5+20] +    t.6 = call t.5(t.4) +    ntb = call t.2(c_node t.6) +    p_node = c_node +    if c_node goto :null51 +      Error("null pointer") +    null51: +    t.7 = [c_node] +    t.7 = [t.7+12] +    c_node = call t.7(c_node) +    goto :while3_top +  while3_end: +  if p_node goto :null52 +    Error("null pointer") +  null52: +  t.8 = [p_node] +  t.8 = [t.8+4] +  t.9 = [this+24] +  ntb = call t.8(p_node t.9) +  if p_node goto :null53 +    Error("null pointer") +  null53: +  t.10 = [p_node] +  t.10 = [t.10+40] +  ntb = call t.10(p_node 0) +  ret 1 + +func Tree.RemoveLeft(this p_node c_node) +  while4_top: +  if c_node goto :null54 +    Error("null pointer") +  null54: +  t.0 = [c_node] +  t.0 = [t.0+32] +  t.1 = call t.0(c_node) +  if0 t.1 goto :while4_end +    if c_node goto :null55 +      Error("null pointer") +    null55: +    t.2 = [c_node] +    t.2 = [t.2+24] +    if c_node goto :null56 +      Error("null pointer") +    null56: +    t.3 = [c_node] +    t.3 = [t.3+16] +    t.4 = call t.3(c_node) +    if t.4 goto :null57 +      Error("null pointer") +    null57: +    t.5 = [t.4] +    t.5 = [t.5+20] +    t.6 = call t.5(t.4) +    ntb = call t.2(c_node t.6) +    p_node = c_node +    if c_node goto :null58 +      Error("null pointer") +    null58: +    t.7 = [c_node] +    t.7 = [t.7+16] +    c_node = call t.7(c_node) +    goto :while4_top +  while4_end: +  if p_node goto :null59 +    Error("null pointer") +  null59: +  t.8 = [p_node] +  t.8 = [t.8+8] +  t.9 = [this+24] +  ntb = call t.8(p_node t.9) +  if p_node goto :null60 +    Error("null pointer") +  null60: +  t.10 = [p_node] +  t.10 = [t.10+36] +  ntb = call t.10(p_node 0) +  ret 1 + +func Tree.Search(this v_key) +  current_node = this +  cont = 1 +  ifound = 0 +  while5_top: +  if0 cont goto :while5_end +    if current_node goto :null61 +      Error("null pointer") +    null61: +    t.0 = [current_node] +    t.0 = [t.0+20] +    key_aux = call t.0(current_node) +    t.1 = LtS(v_key key_aux) +    if0 t.1 goto :if15_else +      if current_node goto :null62 +        Error("null pointer") +      null62: +      t.2 = [current_node] +      t.2 = [t.2+32] +      t.3 = call t.2(current_node) +      if0 t.3 goto :if16_else +        if current_node goto :null63 +          Error("null pointer") +        null63: +        t.4 = [current_node] +        t.4 = [t.4+16] +        current_node = call t.4(current_node) +        goto :if16_end +      if16_else: +        cont = 0 +      if16_end: +      goto :if15_end +    if15_else: +      t.5 = LtS(key_aux v_key) +      if0 t.5 goto :if17_else +        if current_node goto :null64 +          Error("null pointer") +        null64: +        t.6 = [current_node] +        t.6 = [t.6+28] +        t.7 = call t.6(current_node) +        if0 t.7 goto :if18_else +          if current_node goto :null65 +            Error("null pointer") +          null65: +          t.8 = [current_node] +          t.8 = [t.8+12] +          current_node = call t.8(current_node) +          goto :if18_end +        if18_else: +          cont = 0 +        if18_end: +        goto :if17_end +      if17_else: +        ifound = 1 +        cont = 0 +      if17_end: +    if15_end: +    goto :while5_top +  while5_end: +  ret ifound + +func Tree.Print(this) +  current_node = this +  t.0 = [this] +  t.0 = [t.0+76] +  ntb = call t.0(this current_node) +  ret 1 + +func Tree.RecPrint(this node) +  if node goto :null66 +    Error("null pointer") +  null66: +  t.0 = [node] +  t.0 = [t.0+32] +  t.1 = call t.0(node) +  if0 t.1 goto :if19_else +    t.2 = [this] +    t.2 = [t.2+76] +    if node goto :null67 +      Error("null pointer") +    null67: +    t.3 = [node] +    t.3 = [t.3+16] +    t.4 = call t.3(node) +    ntb = call t.2(this t.4) +    goto :if19_end +  if19_else: +    ntb = 1 +  if19_end: +  if node goto :null68 +    Error("null pointer") +  null68: +  t.5 = [node] +  t.5 = [t.5+20] +  t.6 = call t.5(node) +  PrintIntS(t.6) +  if node goto :null69 +    Error("null pointer") +  null69: +  t.7 = [node] +  t.7 = [t.7+28] +  t.8 = call t.7(node) +  if0 t.8 goto :if20_else +    t.9 = [this] +    t.9 = [t.9+76] +    if node goto :null70 +      Error("null pointer") +    null70: +    t.10 = [node] +    t.10 = [t.10+12] +    t.11 = call t.10(node) +    ntb = call t.9(this t.11) +    goto :if20_end +  if20_else: +    ntb = 1 +  if20_end: +  ret 1 diff --git a/boil/tests/BubbleSort.java b/boil/tests/BubbleSort.java new file mode 100644 index 0000000..e5645a9 --- /dev/null +++ b/boil/tests/BubbleSort.java @@ -0,0 +1,93 @@ +class BubbleSort{ +    public static void main(String[] a){ +	System.out.println(new BBS().Start(10)); +    } +} + + +// This class contains the array of integers and +// methods to initialize, print and sort the array +// using Bublesort +class BBS{ +     +    int[] number ; +    int size ; + +    // Invoke the Initialization, Sort and Printing +    // Methods +    public int Start(int sz){ +	int aux01 ; +	aux01 = this.Init(sz); +	aux01 = this.Print(); +	System.out.println(99999); +	aux01 = this.Sort(); +	aux01 = this.Print(); +	return 0 ; +    } + +  +    // Sort array of integers using Bublesort method +    public int Sort(){ +	int nt ; +	int i ; +	int aux02 ; +	int aux04 ; +	int aux05 ; +	int aux06 ; +	int aux07 ; +	int j ; +	int t ; +	i = size - 1 ; +	aux02 = 0 - 1 ; +	while (aux02 < i) { +	    j = 1 ; +	    //aux03 = i+1 ; +	    while (j < (i+1)){ +		aux07 = j - 1 ; +		aux04 = number[aux07] ; +		aux05 = number[j] ; +		if (aux05 < aux04) { +		    aux06 = j - 1 ; +		    t = number[aux06] ; +		    number[aux06] = number[j] ; +		    number[j] = t; +		} +		else nt = 0 ; +		j = j + 1 ; +	    } +	    i = i - 1 ; +	} +	return 0 ; +    } + +    // Printing method +    public int Print(){ +	int j ; +	j = 0 ; +	while (j < (size)) { +	    System.out.println(number[j]); +	    j = j + 1 ; +	} +	return 0 ; +    } +     +    // Initialize array of integers +    public int Init(int sz){ +	size = sz ; +	number = new int[sz] ; +	 +	number[0] = 20 ; +	number[1] = 7  ;  +	number[2] = 12 ; +	number[3] = 18 ; +	number[4] = 2  ;  +	number[5] = 11 ; +	number[6] = 6  ;  +	number[7] = 9  ;  +	number[8] = 19 ;  +	number[9] = 5  ; +	 +	return 0 ;	 +    } + +} diff --git a/boil/tests/BubbleSort.opt.vapor b/boil/tests/BubbleSort.opt.vapor new file mode 100644 index 0000000..a118894 --- /dev/null +++ b/boil/tests/BubbleSort.opt.vapor @@ -0,0 +1,277 @@ + +const empty_BBS + + +func Main() +  t.0 = HeapAllocZ(8) +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = call :BBS.Start(t.0 10) +  PrintIntS(t.1) +  ret + +func BBS.Start(this sz) +  aux01 = call :BBS.Init(this sz) +  aux01 = call :BBS.Print(this) +  PrintIntS(99999) +  aux01 = call :BBS.Sort(this) +  aux01 = call :BBS.Print(this) +  ret 0 + +func BBS.Sort(this) +  t.0 = [this+4] +  i = Sub(t.0 1) +  aux02 = Sub(0 1) +  while1_top: +  t.1 = LtS(aux02 i) +  if0 t.1 goto :while1_end +    j = 1 +    while2_top: +    t.2 = Add(i 1) +    t.3 = LtS(j t.2) +    if0 t.3 goto :while2_end +      aux07 = Sub(j 1) +      t.4 = [this+0] +      if t.4 goto :null2 +        Error("null pointer") +      null2: +      t.5 = [t.4] +      t.5 = Lt(aux07 t.5) +      if t.5 goto :bounds1 +        Error("array index out of bounds") +      bounds1: +      t.5 = MulS(aux07 4) +      t.5 = Add(t.5 t.4) +      aux04 = [t.5+4] +      t.6 = [this+0] +      if t.6 goto :null3 +        Error("null pointer") +      null3: +      t.7 = [t.6] +      t.7 = Lt(j t.7) +      if t.7 goto :bounds2 +        Error("array index out of bounds") +      bounds2: +      t.7 = MulS(j 4) +      t.7 = Add(t.7 t.6) +      aux05 = [t.7+4] +      t.8 = LtS(aux05 aux04) +      if0 t.8 goto :if1_else +        aux06 = Sub(j 1) +        t.9 = [this+0] +        if t.9 goto :null4 +          Error("null pointer") +        null4: +        t.10 = [t.9] +        t.10 = Lt(aux06 t.10) +        if t.10 goto :bounds3 +          Error("array index out of bounds") +        bounds3: +        t.10 = MulS(aux06 4) +        t.10 = Add(t.10 t.9) +        t = [t.10+4] +        t.11 = [this+0] +        if t.11 goto :null5 +          Error("null pointer") +        null5: +        t.12 = [t.11] +        t.12 = Lt(aux06 t.12) +        if t.12 goto :bounds4 +          Error("array index out of bounds") +        bounds4: +        t.12 = MulS(aux06 4) +        t.12 = Add(t.12 t.11) +        t.13 = [this+0] +        if t.13 goto :null6 +          Error("null pointer") +        null6: +        t.14 = [t.13] +        t.14 = Lt(j t.14) +        if t.14 goto :bounds5 +          Error("array index out of bounds") +        bounds5: +        t.14 = MulS(j 4) +        t.14 = Add(t.14 t.13) +        t.15 = [t.14+4] +        [t.12+4] = t.15 +        t.16 = [this+0] +        if t.16 goto :null7 +          Error("null pointer") +        null7: +        t.17 = [t.16] +        t.17 = Lt(j t.17) +        if t.17 goto :bounds6 +          Error("array index out of bounds") +        bounds6: +        t.17 = MulS(j 4) +        t.17 = Add(t.17 t.16) +        [t.17+4] = t +        goto :if1_end +      if1_else: +        nt = 0 +      if1_end: +      j = Add(j 1) +      goto :while2_top +    while2_end: +    i = Sub(i 1) +    goto :while1_top +  while1_end: +  ret 0 + +func BBS.Print(this) +  j = 0 +  while3_top: +  t.0 = [this+4] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while3_end +    t.2 = [this+0] +    if t.2 goto :null8 +      Error("null pointer") +    null8: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds7 +      Error("array index out of bounds") +    bounds7: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    t.4 = [t.3+4] +    PrintIntS(t.4) +    j = Add(j 1) +    goto :while3_top +  while3_end: +  ret 0 + +func BBS.Init(this sz) +  [this+4] = sz +  t.0 = call :AllocArray(sz) +  [this+0] = t.0 +  t.1 = [this+0] +  if t.1 goto :null9 +    Error("null pointer") +  null9: +  t.2 = [t.1] +  t.2 = Lt(0 t.2) +  if t.2 goto :bounds8 +    Error("array index out of bounds") +  bounds8: +  t.2 = MulS(0 4) +  t.2 = Add(t.2 t.1) +  [t.2+4] = 20 +  t.3 = [this+0] +  if t.3 goto :null10 +    Error("null pointer") +  null10: +  t.4 = [t.3] +  t.4 = Lt(1 t.4) +  if t.4 goto :bounds9 +    Error("array index out of bounds") +  bounds9: +  t.4 = MulS(1 4) +  t.4 = Add(t.4 t.3) +  [t.4+4] = 7 +  t.5 = [this+0] +  if t.5 goto :null11 +    Error("null pointer") +  null11: +  t.6 = [t.5] +  t.6 = Lt(2 t.6) +  if t.6 goto :bounds10 +    Error("array index out of bounds") +  bounds10: +  t.6 = MulS(2 4) +  t.6 = Add(t.6 t.5) +  [t.6+4] = 12 +  t.7 = [this+0] +  if t.7 goto :null12 +    Error("null pointer") +  null12: +  t.8 = [t.7] +  t.8 = Lt(3 t.8) +  if t.8 goto :bounds11 +    Error("array index out of bounds") +  bounds11: +  t.8 = MulS(3 4) +  t.8 = Add(t.8 t.7) +  [t.8+4] = 18 +  t.9 = [this+0] +  if t.9 goto :null13 +    Error("null pointer") +  null13: +  t.10 = [t.9] +  t.10 = Lt(4 t.10) +  if t.10 goto :bounds12 +    Error("array index out of bounds") +  bounds12: +  t.10 = MulS(4 4) +  t.10 = Add(t.10 t.9) +  [t.10+4] = 2 +  t.11 = [this+0] +  if t.11 goto :null14 +    Error("null pointer") +  null14: +  t.12 = [t.11] +  t.12 = Lt(5 t.12) +  if t.12 goto :bounds13 +    Error("array index out of bounds") +  bounds13: +  t.12 = MulS(5 4) +  t.12 = Add(t.12 t.11) +  [t.12+4] = 11 +  t.13 = [this+0] +  if t.13 goto :null15 +    Error("null pointer") +  null15: +  t.14 = [t.13] +  t.14 = Lt(6 t.14) +  if t.14 goto :bounds14 +    Error("array index out of bounds") +  bounds14: +  t.14 = MulS(6 4) +  t.14 = Add(t.14 t.13) +  [t.14+4] = 6 +  t.15 = [this+0] +  if t.15 goto :null16 +    Error("null pointer") +  null16: +  t.16 = [t.15] +  t.16 = Lt(7 t.16) +  if t.16 goto :bounds15 +    Error("array index out of bounds") +  bounds15: +  t.16 = MulS(7 4) +  t.16 = Add(t.16 t.15) +  [t.16+4] = 9 +  t.17 = [this+0] +  if t.17 goto :null17 +    Error("null pointer") +  null17: +  t.18 = [t.17] +  t.18 = Lt(8 t.18) +  if t.18 goto :bounds16 +    Error("array index out of bounds") +  bounds16: +  t.18 = MulS(8 4) +  t.18 = Add(t.18 t.17) +  [t.18+4] = 19 +  t.19 = [this+0] +  if t.19 goto :null18 +    Error("null pointer") +  null18: +  t.20 = [t.19] +  t.20 = Lt(9 t.20) +  if t.20 goto :bounds17 +    Error("array index out of bounds") +  bounds17: +  t.20 = MulS(9 4) +  t.20 = Add(t.20 t.19) +  [t.20+4] = 5 +  ret 0 + +func AllocArray(size) +  bytes = MulS(size 4) +  bytes = Add(bytes 4) +  v = HeapAllocZ(bytes) +  [v] = size +  ret v diff --git a/boil/tests/BubbleSort.vapor b/boil/tests/BubbleSort.vapor new file mode 100644 index 0000000..cedba69 --- /dev/null +++ b/boil/tests/BubbleSort.vapor @@ -0,0 +1,292 @@ + +const vmt_BBS +  :BBS.Start +  :BBS.Sort +  :BBS.Print +  :BBS.Init + + +func Main() +  t.0 = HeapAllocZ(12) +  [t.0] = :vmt_BBS +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0 10) +  PrintIntS(t.2) +  ret + +func BBS.Start(this sz) +  t.0 = [this] +  t.0 = [t.0+12] +  aux01 = call t.0(this sz) +  t.1 = [this] +  t.1 = [t.1+8] +  aux01 = call t.1(this) +  PrintIntS(99999) +  t.2 = [this] +  t.2 = [t.2+4] +  aux01 = call t.2(this) +  t.3 = [this] +  t.3 = [t.3+8] +  aux01 = call t.3(this) +  ret 0 + +func BBS.Sort(this) +  t.0 = [this+8] +  i = Sub(t.0 1) +  aux02 = Sub(0 1) +  while1_top: +  t.1 = LtS(aux02 i) +  if0 t.1 goto :while1_end +    j = 1 +    while2_top: +    t.2 = Add(i 1) +    t.3 = LtS(j t.2) +    if0 t.3 goto :while2_end +      aux07 = Sub(j 1) +      t.4 = [this+4] +      if t.4 goto :null2 +        Error("null pointer") +      null2: +      t.5 = [t.4] +      t.5 = Lt(aux07 t.5) +      if t.5 goto :bounds1 +        Error("array index out of bounds") +      bounds1: +      t.5 = MulS(aux07 4) +      t.5 = Add(t.5 t.4) +      aux04 = [t.5+4] +      t.6 = [this+4] +      if t.6 goto :null3 +        Error("null pointer") +      null3: +      t.7 = [t.6] +      t.7 = Lt(j t.7) +      if t.7 goto :bounds2 +        Error("array index out of bounds") +      bounds2: +      t.7 = MulS(j 4) +      t.7 = Add(t.7 t.6) +      aux05 = [t.7+4] +      t.8 = LtS(aux05 aux04) +      if0 t.8 goto :if1_else +        aux06 = Sub(j 1) +        t.9 = [this+4] +        if t.9 goto :null4 +          Error("null pointer") +        null4: +        t.10 = [t.9] +        t.10 = Lt(aux06 t.10) +        if t.10 goto :bounds3 +          Error("array index out of bounds") +        bounds3: +        t.10 = MulS(aux06 4) +        t.10 = Add(t.10 t.9) +        t = [t.10+4] +        t.11 = [this+4] +        if t.11 goto :null5 +          Error("null pointer") +        null5: +        t.12 = [t.11] +        t.12 = Lt(aux06 t.12) +        if t.12 goto :bounds4 +          Error("array index out of bounds") +        bounds4: +        t.12 = MulS(aux06 4) +        t.12 = Add(t.12 t.11) +        t.13 = [this+4] +        if t.13 goto :null6 +          Error("null pointer") +        null6: +        t.14 = [t.13] +        t.14 = Lt(j t.14) +        if t.14 goto :bounds5 +          Error("array index out of bounds") +        bounds5: +        t.14 = MulS(j 4) +        t.14 = Add(t.14 t.13) +        t.15 = [t.14+4] +        [t.12+4] = t.15 +        t.16 = [this+4] +        if t.16 goto :null7 +          Error("null pointer") +        null7: +        t.17 = [t.16] +        t.17 = Lt(j t.17) +        if t.17 goto :bounds6 +          Error("array index out of bounds") +        bounds6: +        t.17 = MulS(j 4) +        t.17 = Add(t.17 t.16) +        [t.17+4] = t +        goto :if1_end +      if1_else: +        nt = 0 +      if1_end: +      j = Add(j 1) +      goto :while2_top +    while2_end: +    i = Sub(i 1) +    goto :while1_top +  while1_end: +  ret 0 + +func BBS.Print(this) +  j = 0 +  while3_top: +  t.0 = [this+8] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while3_end +    t.2 = [this+4] +    if t.2 goto :null8 +      Error("null pointer") +    null8: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds7 +      Error("array index out of bounds") +    bounds7: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    t.4 = [t.3+4] +    PrintIntS(t.4) +    j = Add(j 1) +    goto :while3_top +  while3_end: +  ret 0 + +func BBS.Init(this sz) +  [this+8] = sz +  t.0 = call :AllocArray(sz) +  [this+4] = t.0 +  t.1 = [this+4] +  if t.1 goto :null9 +    Error("null pointer") +  null9: +  t.2 = [t.1] +  t.2 = Lt(0 t.2) +  if t.2 goto :bounds8 +    Error("array index out of bounds") +  bounds8: +  t.2 = MulS(0 4) +  t.2 = Add(t.2 t.1) +  [t.2+4] = 20 +  t.3 = [this+4] +  if t.3 goto :null10 +    Error("null pointer") +  null10: +  t.4 = [t.3] +  t.4 = Lt(1 t.4) +  if t.4 goto :bounds9 +    Error("array index out of bounds") +  bounds9: +  t.4 = MulS(1 4) +  t.4 = Add(t.4 t.3) +  [t.4+4] = 7 +  t.5 = [this+4] +  if t.5 goto :null11 +    Error("null pointer") +  null11: +  t.6 = [t.5] +  t.6 = Lt(2 t.6) +  if t.6 goto :bounds10 +    Error("array index out of bounds") +  bounds10: +  t.6 = MulS(2 4) +  t.6 = Add(t.6 t.5) +  [t.6+4] = 12 +  t.7 = [this+4] +  if t.7 goto :null12 +    Error("null pointer") +  null12: +  t.8 = [t.7] +  t.8 = Lt(3 t.8) +  if t.8 goto :bounds11 +    Error("array index out of bounds") +  bounds11: +  t.8 = MulS(3 4) +  t.8 = Add(t.8 t.7) +  [t.8+4] = 18 +  t.9 = [this+4] +  if t.9 goto :null13 +    Error("null pointer") +  null13: +  t.10 = [t.9] +  t.10 = Lt(4 t.10) +  if t.10 goto :bounds12 +    Error("array index out of bounds") +  bounds12: +  t.10 = MulS(4 4) +  t.10 = Add(t.10 t.9) +  [t.10+4] = 2 +  t.11 = [this+4] +  if t.11 goto :null14 +    Error("null pointer") +  null14: +  t.12 = [t.11] +  t.12 = Lt(5 t.12) +  if t.12 goto :bounds13 +    Error("array index out of bounds") +  bounds13: +  t.12 = MulS(5 4) +  t.12 = Add(t.12 t.11) +  [t.12+4] = 11 +  t.13 = [this+4] +  if t.13 goto :null15 +    Error("null pointer") +  null15: +  t.14 = [t.13] +  t.14 = Lt(6 t.14) +  if t.14 goto :bounds14 +    Error("array index out of bounds") +  bounds14: +  t.14 = MulS(6 4) +  t.14 = Add(t.14 t.13) +  [t.14+4] = 6 +  t.15 = [this+4] +  if t.15 goto :null16 +    Error("null pointer") +  null16: +  t.16 = [t.15] +  t.16 = Lt(7 t.16) +  if t.16 goto :bounds15 +    Error("array index out of bounds") +  bounds15: +  t.16 = MulS(7 4) +  t.16 = Add(t.16 t.15) +  [t.16+4] = 9 +  t.17 = [this+4] +  if t.17 goto :null17 +    Error("null pointer") +  null17: +  t.18 = [t.17] +  t.18 = Lt(8 t.18) +  if t.18 goto :bounds16 +    Error("array index out of bounds") +  bounds16: +  t.18 = MulS(8 4) +  t.18 = Add(t.18 t.17) +  [t.18+4] = 19 +  t.19 = [this+4] +  if t.19 goto :null18 +    Error("null pointer") +  null18: +  t.20 = [t.19] +  t.20 = Lt(9 t.20) +  if t.20 goto :bounds17 +    Error("array index out of bounds") +  bounds17: +  t.20 = MulS(9 4) +  t.20 = Add(t.20 t.19) +  [t.20+4] = 5 +  ret 0 + +func AllocArray(size) +  bytes = MulS(size 4) +  bytes = Add(bytes 4) +  v = HeapAllocZ(bytes) +  [v] = size +  ret v diff --git a/boil/tests/Factorial.java b/boil/tests/Factorial.java new file mode 100644 index 0000000..d938bb6 --- /dev/null +++ b/boil/tests/Factorial.java @@ -0,0 +1,16 @@ +class Factorial{
 +    public static void main(String[] a){
 +        System.out.println(new Fac().ComputeFac(10));
 +    }
 +}
 +
 +class Fac {
 +    public int ComputeFac(int num){
 +        int num_aux ;
 +        if (num < 1)
 +            num_aux = 1 ;
 +        else
 +            num_aux = num * (this.ComputeFac(num-1)) ;
 +        return num_aux ;
 +    }
 +}
 diff --git a/boil/tests/Factorial.opt.vapor b/boil/tests/Factorial.opt.vapor new file mode 100644 index 0000000..aca17fe --- /dev/null +++ b/boil/tests/Factorial.opt.vapor @@ -0,0 +1,20 @@ + +const empty_Fac + + +func Main() +  t.0 = call :Fac.ComputeFac(:empty_Fac 10) +  PrintIntS(t.0) +  ret + +func Fac.ComputeFac(this num) +  t.0 = LtS(num 1) +  if0 t.0 goto :if1_else +    num_aux = 1 +    goto :if1_end +  if1_else: +    t.1 = Sub(num 1) +    t.2 = call :Fac.ComputeFac(this t.1) +    num_aux = MulS(num t.2) +  if1_end: +  ret num_aux diff --git a/boil/tests/Factorial.vapor b/boil/tests/Factorial.vapor new file mode 100644 index 0000000..28e1126 --- /dev/null +++ b/boil/tests/Factorial.vapor @@ -0,0 +1,30 @@ + +const vmt_Fac +  :Fac.ComputeFac + + +func Main() +  t.0 = HeapAllocZ(4) +  [t.0] = :vmt_Fac +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0 10) +  PrintIntS(t.2) +  ret + +func Fac.ComputeFac(this num) +  t.0 = LtS(num 1) +  if0 t.0 goto :if1_else +    num_aux = 1 +    goto :if1_end +  if1_else: +    t.1 = [this] +    t.1 = [t.1+0] +    t.2 = Sub(num 1) +    t.3 = call t.1(this t.2) +    num_aux = MulS(num t.3) +  if1_end: +  ret num_aux diff --git a/boil/tests/LinearSearch.java b/boil/tests/LinearSearch.java new file mode 100644 index 0000000..daddd94 --- /dev/null +++ b/boil/tests/LinearSearch.java @@ -0,0 +1,99 @@ +class LinearSearch{ +    public static void main(String[] a){ +	System.out.println(new LS().Start(10)); +    } +} + + +// This class contains an array of integers and +// methods to initialize, print and search the array +// using Linear Search +class LS { +    int[] number ; +    int size ; +     +    // Invoke methods to initialize, print and search +    // for elements on the array +    public int Start(int sz){ +	int aux01 ; +	int aux02 ; + +	aux01 = this.Init(sz); +	aux02 = this.Print(); +	System.out.println(9999); +	System.out.println(this.Search(8)); +	System.out.println(this.Search(12)) ; +	System.out.println(this.Search(17)) ; +	System.out.println(this.Search(50)) ; +	return 55 ; +    } + +    // Print array of integers +    public int Print(){ +	int j ; + +	j = 1 ; +	while (j < (size)) { +	    System.out.println(number[j]); +	    j = j + 1 ; +	} +	return 0 ; +    } + +    // Search for a specific value (num) using +    // linear search +    public int Search(int num){ +	int j ; +	boolean ls01 ; +	int ifound ; +	int aux01 ; +	int aux02 ; +	int nt ; + +	j = 1 ; +	ls01 = false ; +	ifound = 0 ; +	 +	//System.out.println(num); +	while (j < (size)) { +	    aux01 = number[j] ; +	    aux02 = num + 1 ; +	    if (aux01 < num) nt = 0 ; +	    else if (!(aux01 < aux02)) nt = 0 ; +	    else { +		ls01 = true ; +		ifound = 1 ; +		j = size ; +	    } +	    j = j + 1 ; +	} + +	return ifound ; +    } + + +     +    // initialize array of integers with some +    // some sequence +    public int Init(int sz){ +	int j ; +	int k ; +	int aux01 ; +	int aux02 ; + +	size = sz ; +	number = new int[sz] ; +	 +	j = 1 ; +	k = size + 1 ; +	while (j < (size)) { +	    aux01 = 2 * j ; +	    aux02 = k - 3 ; +	    number[j] = aux01 + aux02 ; +	    j = j + 1 ; +	    k = k - 1 ; +	} +	return 0 ;	 +    } + +} diff --git a/boil/tests/LinearSearch.opt.vapor b/boil/tests/LinearSearch.opt.vapor new file mode 100644 index 0000000..302de05 --- /dev/null +++ b/boil/tests/LinearSearch.opt.vapor @@ -0,0 +1,130 @@ + +const empty_LS + + +func Main() +  t.0 = HeapAllocZ(8) +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = call :LS.Start(t.0 10) +  PrintIntS(t.1) +  ret + +func LS.Start(this sz) +  aux01 = call :LS.Init(this sz) +  aux02 = call :LS.Print(this) +  PrintIntS(9999) +  t.0 = call :LS.Search(this 8) +  PrintIntS(t.0) +  t.1 = call :LS.Search(this 12) +  PrintIntS(t.1) +  t.2 = call :LS.Search(this 17) +  PrintIntS(t.2) +  t.3 = call :LS.Search(this 50) +  PrintIntS(t.3) +  ret 55 + +func LS.Print(this) +  j = 1 +  while1_top: +  t.0 = [this+4] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while1_end +    t.2 = [this+0] +    if t.2 goto :null2 +      Error("null pointer") +    null2: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds1 +      Error("array index out of bounds") +    bounds1: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    t.4 = [t.3+4] +    PrintIntS(t.4) +    j = Add(j 1) +    goto :while1_top +  while1_end: +  ret 0 + +func LS.Search(this num) +  j = 1 +  ls01 = 0 +  ifound = 0 +  while2_top: +  t.0 = [this+4] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while2_end +    t.2 = [this+0] +    if t.2 goto :null3 +      Error("null pointer") +    null3: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds2 +      Error("array index out of bounds") +    bounds2: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    aux01 = [t.3+4] +    aux02 = Add(num 1) +    t.4 = LtS(aux01 num) +    if0 t.4 goto :if1_else +      nt = 0 +      goto :if1_end +    if1_else: +      t.5 = LtS(aux01 aux02) +      if t.5 goto :if2_else +        nt = 0 +        goto :if2_end +      if2_else: +        ls01 = 1 +        ifound = 1 +        j = [this+4] +      if2_end: +    if1_end: +    j = Add(j 1) +    goto :while2_top +  while2_end: +  ret ifound + +func LS.Init(this sz) +  [this+4] = sz +  t.0 = call :AllocArray(sz) +  [this+0] = t.0 +  j = 1 +  t.1 = [this+4] +  k = Add(t.1 1) +  while3_top: +  t.2 = [this+4] +  t.3 = LtS(j t.2) +  if0 t.3 goto :while3_end +    aux01 = MulS(2 j) +    aux02 = Sub(k 3) +    t.4 = [this+0] +    if t.4 goto :null4 +      Error("null pointer") +    null4: +    t.5 = [t.4] +    t.5 = Lt(j t.5) +    if t.5 goto :bounds3 +      Error("array index out of bounds") +    bounds3: +    t.5 = MulS(j 4) +    t.5 = Add(t.5 t.4) +    t.6 = Add(aux01 aux02) +    [t.5+4] = t.6 +    j = Add(j 1) +    k = Sub(k 1) +    goto :while3_top +  while3_end: +  ret 0 + +func AllocArray(size) +  bytes = MulS(size 4) +  bytes = Add(bytes 4) +  v = HeapAllocZ(bytes) +  [v] = size +  ret v diff --git a/boil/tests/LinearSearch.vapor b/boil/tests/LinearSearch.vapor new file mode 100644 index 0000000..db4884a --- /dev/null +++ b/boil/tests/LinearSearch.vapor @@ -0,0 +1,150 @@ + +const vmt_LS +  :LS.Start +  :LS.Print +  :LS.Search +  :LS.Init + + +func Main() +  t.0 = HeapAllocZ(12) +  [t.0] = :vmt_LS +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0 10) +  PrintIntS(t.2) +  ret + +func LS.Start(this sz) +  t.0 = [this] +  t.0 = [t.0+12] +  aux01 = call t.0(this sz) +  t.1 = [this] +  t.1 = [t.1+4] +  aux02 = call t.1(this) +  PrintIntS(9999) +  t.2 = [this] +  t.2 = [t.2+8] +  t.3 = call t.2(this 8) +  PrintIntS(t.3) +  t.4 = [this] +  t.4 = [t.4+8] +  t.5 = call t.4(this 12) +  PrintIntS(t.5) +  t.6 = [this] +  t.6 = [t.6+8] +  t.7 = call t.6(this 17) +  PrintIntS(t.7) +  t.8 = [this] +  t.8 = [t.8+8] +  t.9 = call t.8(this 50) +  PrintIntS(t.9) +  ret 55 + +func LS.Print(this) +  j = 1 +  while1_top: +  t.0 = [this+8] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while1_end +    t.2 = [this+4] +    if t.2 goto :null2 +      Error("null pointer") +    null2: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds1 +      Error("array index out of bounds") +    bounds1: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    t.4 = [t.3+4] +    PrintIntS(t.4) +    j = Add(j 1) +    goto :while1_top +  while1_end: +  ret 0 + +func LS.Search(this num) +  j = 1 +  ls01 = 0 +  ifound = 0 +  while2_top: +  t.0 = [this+8] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while2_end +    t.2 = [this+4] +    if t.2 goto :null3 +      Error("null pointer") +    null3: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds2 +      Error("array index out of bounds") +    bounds2: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    aux01 = [t.3+4] +    aux02 = Add(num 1) +    t.4 = LtS(aux01 num) +    if0 t.4 goto :if1_else +      nt = 0 +      goto :if1_end +    if1_else: +      t.5 = LtS(aux01 aux02) +      t.6 = Sub(1 t.5) +      if0 t.6 goto :if2_else +        nt = 0 +        goto :if2_end +      if2_else: +        ls01 = 1 +        ifound = 1 +        j = [this+8] +      if2_end: +    if1_end: +    j = Add(j 1) +    goto :while2_top +  while2_end: +  ret ifound + +func LS.Init(this sz) +  [this+8] = sz +  t.0 = call :AllocArray(sz) +  [this+4] = t.0 +  j = 1 +  t.1 = [this+8] +  k = Add(t.1 1) +  while3_top: +  t.2 = [this+8] +  t.3 = LtS(j t.2) +  if0 t.3 goto :while3_end +    aux01 = MulS(2 j) +    aux02 = Sub(k 3) +    t.4 = [this+4] +    if t.4 goto :null4 +      Error("null pointer") +    null4: +    t.5 = [t.4] +    t.5 = Lt(j t.5) +    if t.5 goto :bounds3 +      Error("array index out of bounds") +    bounds3: +    t.5 = MulS(j 4) +    t.5 = Add(t.5 t.4) +    t.6 = Add(aux01 aux02) +    [t.5+4] = t.6 +    j = Add(j 1) +    k = Sub(k 1) +    goto :while3_top +  while3_end: +  ret 0 + +func AllocArray(size) +  bytes = MulS(size 4) +  bytes = Add(bytes 4) +  v = HeapAllocZ(bytes) +  [v] = size +  ret v diff --git a/boil/tests/LinkedList.java b/boil/tests/LinkedList.java new file mode 100644 index 0000000..69adc33 --- /dev/null +++ b/boil/tests/LinkedList.java @@ -0,0 +1,278 @@ +class LinkedList{ +    public static void main(String[] a){ +	System.out.println(new LL().Start()); +    } +} + +class Element { +    int Age ;           +    int Salary ; +    boolean Married ; + +    // Initialize some class variables +    public boolean Init(int v_Age, int v_Salary, boolean v_Married){ +	Age = v_Age ; +	Salary = v_Salary ; +	Married = v_Married ; +	return true ; +    } + +    public int GetAge(){ +	return Age ; +    } +     +    public int GetSalary(){ +	return Salary ; +    } + +    public boolean GetMarried(){ +	return Married ; +    } + +    // This method returns true if the object "other" +    // has the same values for age, salary and  +    public boolean Equal(Element other){ +	boolean ret_val ; +	int aux01 ; +	int aux02 ; +	int nt ; +	ret_val = true ; + +	aux01 = other.GetAge(); +	if (!this.Compare(aux01,Age)) ret_val = false ; +	else {  +	    aux02 = other.GetSalary(); +	    if (!this.Compare(aux02,Salary)) ret_val = false ; +	    else  +		if (Married)  +		    if (!other.GetMarried()) ret_val = false; +		    else nt = 0 ; +		else +		    if (other.GetMarried()) ret_val = false; +		    else nt = 0 ; +	} + +	return ret_val ; +    } + +    // This method compares two integers and +    // returns true if they are equal and false +    // otherwise +    public boolean Compare(int num1 , int num2){ +	boolean retval ; +	int aux02 ; +	retval = false ; +	aux02 = num2 + 1 ; +	if (num1 < num2) retval = false ; +	else if (!(num1 < aux02)) retval = false ; +	else retval = true ; +	return retval ; +    } + +} + +class List{ +    Element elem ; +    List next ; +    boolean end ; + +    // Initialize the node list as the last node +    public boolean Init(){ +	end = true ; +	return true ; +    } + +    // Initialize the values of a new node +    public boolean InitNew(Element v_elem, List v_next, boolean v_end){ +	end = v_end ; +	elem = v_elem ; +	next = v_next ; +	return true ; +    } +     +    // Insert a new node at the beginning of the list +    public List Insert(Element new_elem){ +	boolean ret_val ; +	List aux03 ; +	List aux02 ; +	aux03 = this ; +	aux02 = new List(); +	ret_val = aux02.InitNew(new_elem,aux03,false); +	return aux02 ; +    } +     +     +    // Update the the pointer to the next node +    public boolean SetNext(List v_next){ +	next = v_next ; +	return true ; +    } +     +    // Delete an element e from the list +    public List Delete(Element e){ +	List my_head ; +	boolean ret_val ; +	boolean aux05; +	List aux01 ; +	List prev ; +	boolean var_end ; +	Element var_elem ; +	int aux04 ; +	int nt ; + + +	my_head = this ; +	ret_val = false ; +	aux04 = 0 - 1 ; +	aux01 = this ; +	prev = this ; +	var_end = end; +	var_elem = elem ; +	while ((!var_end) && (!ret_val)){ +	    if (e.Equal(var_elem)){ +		ret_val = true ; +		if (aux04 < 0) {  +		    // delete first element +		    my_head = aux01.GetNext() ; +		}  +		else{ // delete a non first element +		    System.out.println(0-555); +		    aux05 = prev.SetNext(aux01.GetNext()); +		    System.out.println(0-555); +		     +		} +	    } else nt = 0 ; +	    if (!ret_val){ +		prev = aux01 ; +		aux01 = aux01.GetNext() ; +		var_end = aux01.GetEnd(); +		var_elem = aux01.GetElem(); +		aux04 = 1 ;  +	    } else nt = 0 ; +	} +	return my_head ; +    } +     +     +    // Search for an element e on the list +    public int Search(Element e){ +	int int_ret_val ; +	List aux01 ; +	Element var_elem ; +	boolean var_end ; +	int nt ; + +	int_ret_val = 0 ; +	aux01 = this ; +	var_end = end; +	var_elem = elem ; +	while (!var_end){ +	    if (e.Equal(var_elem)){ +		int_ret_val = 1 ; +	    } +	    else nt = 0 ; +	    aux01 = aux01.GetNext() ; +	    var_end = aux01.GetEnd(); +	    var_elem = aux01.GetElem(); +	} +	return int_ret_val ; +    } +     +    public boolean GetEnd(){ +	return end ; +    } +     +    public Element GetElem(){ +	return elem ; +    } +     +    public List GetNext(){ +	return next ; +    } +     +     +    // Print the linked list +    public boolean Print(){ +	List aux01 ; +	boolean var_end ; +	Element  var_elem ; + +	aux01 = this ; +	var_end = end ; +	var_elem = elem ; +	while (!var_end){ +	    System.out.println(var_elem.GetAge()); +	    aux01 = aux01.GetNext() ; +	    var_end = aux01.GetEnd(); +	    var_elem = aux01.GetElem(); +	} + +	return true ; +    } +} +     + +// this class invokes the methods to insert, delete, +// search and print the linked list +class LL{ + +    public int Start(){ + +	List head ; +	List last_elem ; +	boolean aux01 ; +	Element el01 ; +	Element el02 ; +	Element el03 ; + +	last_elem = new List(); +	aux01 = last_elem.Init(); +	head = last_elem ; +	aux01 = head.Init(); +	aux01 = head.Print(); + +	// inserting first element +	el01 = new Element(); +	aux01 = el01.Init(25,37000,false); +	head = head.Insert(el01); +	aux01 = head.Print(); +	System.out.println(10000000); +	// inserting second  element +	el01 = new Element(); +	aux01 = el01.Init(39,42000,true); +	el02 = el01 ; +	head = head.Insert(el01); +	aux01 = head.Print(); +	System.out.println(10000000); +	// inserting third element +	el01 = new Element(); +	aux01 = el01.Init(22,34000,false); +	head = head.Insert(el01); +	aux01 = head.Print(); +	el03 = new Element(); +	aux01 = el03.Init(27,34000,false); +	System.out.println(head.Search(el02)); +	System.out.println(head.Search(el03)); +	System.out.println(10000000); +	// inserting fourth element +	el01 = new Element(); +	aux01 = el01.Init(28,35000,false); +	head = head.Insert(el01); +	aux01 = head.Print(); +	System.out.println(2220000); + +	head = head.Delete(el02); +	aux01 = head.Print(); +	System.out.println(33300000); + + +	head = head.Delete(el01); +	aux01 = head.Print(); +	System.out.println(44440000); +	 +	return 0 ; +	 +	 +    } +     +} diff --git a/boil/tests/LinkedList.opt.vapor b/boil/tests/LinkedList.opt.vapor new file mode 100644 index 0000000..aaca62c --- /dev/null +++ b/boil/tests/LinkedList.opt.vapor @@ -0,0 +1,373 @@ + +const empty_Element + +const empty_List + +const empty_LL + + +func Main() +  t.0 = call :LL.Start(:empty_LL) +  PrintIntS(t.0) +  ret + +func Element.Init(this v_Age v_Salary v_Married) +  [this+0] = v_Age +  [this+4] = v_Salary +  [this+8] = v_Married +  ret 1 + +func Element.GetAge(this) +  t.0 = [this+0] +  ret t.0 + +func Element.GetSalary(this) +  t.0 = [this+4] +  ret t.0 + +func Element.GetMarried(this) +  t.0 = [this+8] +  ret t.0 + +func Element.Equal(this other) +  ret_val = 1 +  if other goto :null1 +    Error("null pointer") +  null1: +  aux01 = call :Element.GetAge(other) +  t.0 = [this+0] +  t.1 = call :Element.Compare(this aux01 t.0) +  if t.1 goto :if1_else +    ret_val = 0 +    goto :if1_end +  if1_else: +    if other goto :null2 +      Error("null pointer") +    null2: +    aux02 = call :Element.GetSalary(other) +    t.2 = [this+4] +    t.3 = call :Element.Compare(this aux02 t.2) +    if t.3 goto :if2_else +      ret_val = 0 +      goto :if2_end +    if2_else: +      t.4 = [this+8] +      if0 t.4 goto :if3_else +        if other goto :null3 +          Error("null pointer") +        null3: +        t.5 = call :Element.GetMarried(other) +        if t.5 goto :if4_else +          ret_val = 0 +          goto :if4_end +        if4_else: +          nt = 0 +        if4_end: +        goto :if3_end +      if3_else: +        if other goto :null4 +          Error("null pointer") +        null4: +        t.6 = call :Element.GetMarried(other) +        if0 t.6 goto :if5_else +          ret_val = 0 +          goto :if5_end +        if5_else: +          nt = 0 +        if5_end: +      if3_end: +    if2_end: +  if1_end: +  ret ret_val + +func Element.Compare(this num1 num2) +  retval = 0 +  aux02 = Add(num2 1) +  t.0 = LtS(num1 num2) +  if0 t.0 goto :if6_else +    retval = 0 +    goto :if6_end +  if6_else: +    t.1 = LtS(num1 aux02) +    if t.1 goto :if7_else +      retval = 0 +      goto :if7_end +    if7_else: +      retval = 1 +    if7_end: +  if6_end: +  ret retval + +func List.Init(this) +  [this+8] = 1 +  ret 1 + +func List.InitNew(this v_elem v_next v_end) +  [this+8] = v_end +  [this+0] = v_elem +  [this+4] = v_next +  ret 1 + +func List.Insert(this new_elem) +  aux03 = this +  aux02 = HeapAllocZ(12) +  if aux02 goto :null5 +    Error("null pointer") +  null5: +  ret_val = call :List.InitNew(aux02 new_elem aux03 0) +  ret aux02 + +func List.SetNext(this v_next) +  [this+4] = v_next +  ret 1 + +func List.Delete(this e) +  my_head = this +  ret_val = 0 +  aux04 = Sub(0 1) +  aux01 = this +  prev = this +  var_end = [this+8] +  var_elem = [this+0] +  while1_top: +  if var_end goto :ss1_else +    t.0 = Sub(1 ret_val) +    goto :ss1_end +  ss1_else: +    t.0 = 0 +  ss1_end: +  if0 t.0 goto :while1_end +    if e goto :null6 +      Error("null pointer") +    null6: +    t.1 = call :Element.Equal(e var_elem) +    if0 t.1 goto :if8_else +      ret_val = 1 +      t.2 = LtS(aux04 0) +      if0 t.2 goto :if9_else +        if aux01 goto :null7 +          Error("null pointer") +        null7: +        my_head = call :List.GetNext(aux01) +        goto :if9_end +      if9_else: +        t.3 = Sub(0 555) +        PrintIntS(t.3) +        if prev goto :null8 +          Error("null pointer") +        null8: +        if aux01 goto :null9 +          Error("null pointer") +        null9: +        t.4 = call :List.GetNext(aux01) +        aux05 = call :List.SetNext(prev t.4) +        t.5 = Sub(0 555) +        PrintIntS(t.5) +      if9_end: +      goto :if8_end +    if8_else: +      nt = 0 +    if8_end: +    if ret_val goto :if10_else +      prev = aux01 +      if aux01 goto :null10 +        Error("null pointer") +      null10: +      aux01 = call :List.GetNext(aux01) +      if aux01 goto :null11 +        Error("null pointer") +      null11: +      var_end = call :List.GetEnd(aux01) +      if aux01 goto :null12 +        Error("null pointer") +      null12: +      var_elem = call :List.GetElem(aux01) +      aux04 = 1 +      goto :if10_end +    if10_else: +      nt = 0 +    if10_end: +    goto :while1_top +  while1_end: +  ret my_head + +func List.Search(this e) +  int_ret_val = 0 +  aux01 = this +  var_end = [this+8] +  var_elem = [this+0] +  while2_top: +  t.0 = Sub(1 var_end) +  if0 t.0 goto :while2_end +    if e goto :null13 +      Error("null pointer") +    null13: +    t.1 = call :Element.Equal(e var_elem) +    if0 t.1 goto :if11_else +      int_ret_val = 1 +      goto :if11_end +    if11_else: +      nt = 0 +    if11_end: +    if aux01 goto :null14 +      Error("null pointer") +    null14: +    aux01 = call :List.GetNext(aux01) +    if aux01 goto :null15 +      Error("null pointer") +    null15: +    var_end = call :List.GetEnd(aux01) +    if aux01 goto :null16 +      Error("null pointer") +    null16: +    var_elem = call :List.GetElem(aux01) +    goto :while2_top +  while2_end: +  ret int_ret_val + +func List.GetEnd(this) +  t.0 = [this+8] +  ret t.0 + +func List.GetElem(this) +  t.0 = [this+0] +  ret t.0 + +func List.GetNext(this) +  t.0 = [this+4] +  ret t.0 + +func List.Print(this) +  aux01 = this +  var_end = [this+8] +  var_elem = [this+0] +  while3_top: +  t.0 = Sub(1 var_end) +  if0 t.0 goto :while3_end +    if var_elem goto :null17 +      Error("null pointer") +    null17: +    t.1 = call :Element.GetAge(var_elem) +    PrintIntS(t.1) +    if aux01 goto :null18 +      Error("null pointer") +    null18: +    aux01 = call :List.GetNext(aux01) +    if aux01 goto :null19 +      Error("null pointer") +    null19: +    var_end = call :List.GetEnd(aux01) +    if aux01 goto :null20 +      Error("null pointer") +    null20: +    var_elem = call :List.GetElem(aux01) +    goto :while3_top +  while3_end: +  ret 1 + +func LL.Start(this) +  last_elem = HeapAllocZ(12) +  if last_elem goto :null21 +    Error("null pointer") +  null21: +  aux01 = call :List.Init(last_elem) +  head = last_elem +  if head goto :null22 +    Error("null pointer") +  null22: +  aux01 = call :List.Init(head) +  if head goto :null23 +    Error("null pointer") +  null23: +  aux01 = call :List.Print(head) +  el01 = HeapAllocZ(12) +  if el01 goto :null24 +    Error("null pointer") +  null24: +  aux01 = call :Element.Init(el01 25 37000 0) +  if head goto :null25 +    Error("null pointer") +  null25: +  head = call :List.Insert(head el01) +  if head goto :null26 +    Error("null pointer") +  null26: +  aux01 = call :List.Print(head) +  PrintIntS(10000000) +  el01 = HeapAllocZ(12) +  if el01 goto :null27 +    Error("null pointer") +  null27: +  aux01 = call :Element.Init(el01 39 42000 1) +  el02 = el01 +  if head goto :null28 +    Error("null pointer") +  null28: +  head = call :List.Insert(head el01) +  if head goto :null29 +    Error("null pointer") +  null29: +  aux01 = call :List.Print(head) +  PrintIntS(10000000) +  el01 = HeapAllocZ(12) +  if el01 goto :null30 +    Error("null pointer") +  null30: +  aux01 = call :Element.Init(el01 22 34000 0) +  if head goto :null31 +    Error("null pointer") +  null31: +  head = call :List.Insert(head el01) +  if head goto :null32 +    Error("null pointer") +  null32: +  aux01 = call :List.Print(head) +  el03 = HeapAllocZ(12) +  if el03 goto :null33 +    Error("null pointer") +  null33: +  aux01 = call :Element.Init(el03 27 34000 0) +  if head goto :null34 +    Error("null pointer") +  null34: +  t.0 = call :List.Search(head el02) +  PrintIntS(t.0) +  if head goto :null35 +    Error("null pointer") +  null35: +  t.1 = call :List.Search(head el03) +  PrintIntS(t.1) +  PrintIntS(10000000) +  el01 = HeapAllocZ(12) +  if el01 goto :null36 +    Error("null pointer") +  null36: +  aux01 = call :Element.Init(el01 28 35000 0) +  if head goto :null37 +    Error("null pointer") +  null37: +  head = call :List.Insert(head el01) +  if head goto :null38 +    Error("null pointer") +  null38: +  aux01 = call :List.Print(head) +  PrintIntS(2220000) +  if head goto :null39 +    Error("null pointer") +  null39: +  head = call :List.Delete(head el02) +  if head goto :null40 +    Error("null pointer") +  null40: +  aux01 = call :List.Print(head) +  PrintIntS(33300000) +  if head goto :null41 +    Error("null pointer") +  null41: +  head = call :List.Delete(head el01) +  if head goto :null42 +    Error("null pointer") +  null42: +  aux01 = call :List.Print(head) +  PrintIntS(44440000) +  ret 0 diff --git a/boil/tests/LinkedList.vapor b/boil/tests/LinkedList.vapor new file mode 100644 index 0000000..bebdf94 --- /dev/null +++ b/boil/tests/LinkedList.vapor @@ -0,0 +1,505 @@ + +const vmt_Element +  :Element.Init +  :Element.GetAge +  :Element.GetSalary +  :Element.GetMarried +  :Element.Equal +  :Element.Compare + +const vmt_List +  :List.Init +  :List.InitNew +  :List.Insert +  :List.SetNext +  :List.Delete +  :List.Search +  :List.GetEnd +  :List.GetElem +  :List.GetNext +  :List.Print + +const vmt_LL +  :LL.Start + + +func Main() +  t.0 = HeapAllocZ(4) +  [t.0] = :vmt_LL +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0) +  PrintIntS(t.2) +  ret + +func Element.Init(this v_Age v_Salary v_Married) +  [this+4] = v_Age +  [this+8] = v_Salary +  [this+12] = v_Married +  ret 1 + +func Element.GetAge(this) +  t.0 = [this+4] +  ret t.0 + +func Element.GetSalary(this) +  t.0 = [this+8] +  ret t.0 + +func Element.GetMarried(this) +  t.0 = [this+12] +  ret t.0 + +func Element.Equal(this other) +  ret_val = 1 +  if other goto :null2 +    Error("null pointer") +  null2: +  t.0 = [other] +  t.0 = [t.0+4] +  aux01 = call t.0(other) +  t.1 = [this] +  t.1 = [t.1+20] +  t.2 = [this+4] +  t.3 = call t.1(this aux01 t.2) +  t.4 = Sub(1 t.3) +  if0 t.4 goto :if1_else +    ret_val = 0 +    goto :if1_end +  if1_else: +    if other goto :null3 +      Error("null pointer") +    null3: +    t.5 = [other] +    t.5 = [t.5+8] +    aux02 = call t.5(other) +    t.6 = [this] +    t.6 = [t.6+20] +    t.7 = [this+8] +    t.8 = call t.6(this aux02 t.7) +    t.9 = Sub(1 t.8) +    if0 t.9 goto :if2_else +      ret_val = 0 +      goto :if2_end +    if2_else: +      t.10 = [this+12] +      if0 t.10 goto :if3_else +        if other goto :null4 +          Error("null pointer") +        null4: +        t.11 = [other] +        t.11 = [t.11+12] +        t.12 = call t.11(other) +        t.13 = Sub(1 t.12) +        if0 t.13 goto :if4_else +          ret_val = 0 +          goto :if4_end +        if4_else: +          nt = 0 +        if4_end: +        goto :if3_end +      if3_else: +        if other goto :null5 +          Error("null pointer") +        null5: +        t.14 = [other] +        t.14 = [t.14+12] +        t.15 = call t.14(other) +        if0 t.15 goto :if5_else +          ret_val = 0 +          goto :if5_end +        if5_else: +          nt = 0 +        if5_end: +      if3_end: +    if2_end: +  if1_end: +  ret ret_val + +func Element.Compare(this num1 num2) +  retval = 0 +  aux02 = Add(num2 1) +  t.0 = LtS(num1 num2) +  if0 t.0 goto :if6_else +    retval = 0 +    goto :if6_end +  if6_else: +    t.1 = LtS(num1 aux02) +    t.2 = Sub(1 t.1) +    if0 t.2 goto :if7_else +      retval = 0 +      goto :if7_end +    if7_else: +      retval = 1 +    if7_end: +  if6_end: +  ret retval + +func List.Init(this) +  [this+12] = 1 +  ret 1 + +func List.InitNew(this v_elem v_next v_end) +  [this+12] = v_end +  [this+4] = v_elem +  [this+8] = v_next +  ret 1 + +func List.Insert(this new_elem) +  aux03 = this +  t.0 = HeapAllocZ(16) +  [t.0] = :vmt_List +  aux02 = t.0 +  if aux02 goto :null6 +    Error("null pointer") +  null6: +  t.1 = [aux02] +  t.1 = [t.1+4] +  ret_val = call t.1(aux02 new_elem aux03 0) +  ret aux02 + +func List.SetNext(this v_next) +  [this+8] = v_next +  ret 1 + +func List.Delete(this e) +  my_head = this +  ret_val = 0 +  aux04 = Sub(0 1) +  aux01 = this +  prev = this +  var_end = [this+12] +  var_elem = [this+4] +  while1_top: +  t.1 = Sub(1 var_end) +  if0 t.1 goto :ss1_else +    t.0 = Sub(1 ret_val) +    goto :ss1_end +  ss1_else: +    t.0 = 0 +  ss1_end: +  if0 t.0 goto :while1_end +    if e goto :null7 +      Error("null pointer") +    null7: +    t.2 = [e] +    t.2 = [t.2+16] +    t.3 = call t.2(e var_elem) +    if0 t.3 goto :if8_else +      ret_val = 1 +      t.4 = LtS(aux04 0) +      if0 t.4 goto :if9_else +        if aux01 goto :null8 +          Error("null pointer") +        null8: +        t.5 = [aux01] +        t.5 = [t.5+32] +        my_head = call t.5(aux01) +        goto :if9_end +      if9_else: +        t.6 = Sub(0 555) +        PrintIntS(t.6) +        if prev goto :null9 +          Error("null pointer") +        null9: +        t.7 = [prev] +        t.7 = [t.7+12] +        if aux01 goto :null10 +          Error("null pointer") +        null10: +        t.8 = [aux01] +        t.8 = [t.8+32] +        t.9 = call t.8(aux01) +        aux05 = call t.7(prev t.9) +        t.10 = Sub(0 555) +        PrintIntS(t.10) +      if9_end: +      goto :if8_end +    if8_else: +      nt = 0 +    if8_end: +    t.11 = Sub(1 ret_val) +    if0 t.11 goto :if10_else +      prev = aux01 +      if aux01 goto :null11 +        Error("null pointer") +      null11: +      t.12 = [aux01] +      t.12 = [t.12+32] +      aux01 = call t.12(aux01) +      if aux01 goto :null12 +        Error("null pointer") +      null12: +      t.13 = [aux01] +      t.13 = [t.13+24] +      var_end = call t.13(aux01) +      if aux01 goto :null13 +        Error("null pointer") +      null13: +      t.14 = [aux01] +      t.14 = [t.14+28] +      var_elem = call t.14(aux01) +      aux04 = 1 +      goto :if10_end +    if10_else: +      nt = 0 +    if10_end: +    goto :while1_top +  while1_end: +  ret my_head + +func List.Search(this e) +  int_ret_val = 0 +  aux01 = this +  var_end = [this+12] +  var_elem = [this+4] +  while2_top: +  t.0 = Sub(1 var_end) +  if0 t.0 goto :while2_end +    if e goto :null14 +      Error("null pointer") +    null14: +    t.1 = [e] +    t.1 = [t.1+16] +    t.2 = call t.1(e var_elem) +    if0 t.2 goto :if11_else +      int_ret_val = 1 +      goto :if11_end +    if11_else: +      nt = 0 +    if11_end: +    if aux01 goto :null15 +      Error("null pointer") +    null15: +    t.3 = [aux01] +    t.3 = [t.3+32] +    aux01 = call t.3(aux01) +    if aux01 goto :null16 +      Error("null pointer") +    null16: +    t.4 = [aux01] +    t.4 = [t.4+24] +    var_end = call t.4(aux01) +    if aux01 goto :null17 +      Error("null pointer") +    null17: +    t.5 = [aux01] +    t.5 = [t.5+28] +    var_elem = call t.5(aux01) +    goto :while2_top +  while2_end: +  ret int_ret_val + +func List.GetEnd(this) +  t.0 = [this+12] +  ret t.0 + +func List.GetElem(this) +  t.0 = [this+4] +  ret t.0 + +func List.GetNext(this) +  t.0 = [this+8] +  ret t.0 + +func List.Print(this) +  aux01 = this +  var_end = [this+12] +  var_elem = [this+4] +  while3_top: +  t.0 = Sub(1 var_end) +  if0 t.0 goto :while3_end +    if var_elem goto :null18 +      Error("null pointer") +    null18: +    t.1 = [var_elem] +    t.1 = [t.1+4] +    t.2 = call t.1(var_elem) +    PrintIntS(t.2) +    if aux01 goto :null19 +      Error("null pointer") +    null19: +    t.3 = [aux01] +    t.3 = [t.3+32] +    aux01 = call t.3(aux01) +    if aux01 goto :null20 +      Error("null pointer") +    null20: +    t.4 = [aux01] +    t.4 = [t.4+24] +    var_end = call t.4(aux01) +    if aux01 goto :null21 +      Error("null pointer") +    null21: +    t.5 = [aux01] +    t.5 = [t.5+28] +    var_elem = call t.5(aux01) +    goto :while3_top +  while3_end: +  ret 1 + +func LL.Start(this) +  t.0 = HeapAllocZ(16) +  [t.0] = :vmt_List +  last_elem = t.0 +  if last_elem goto :null22 +    Error("null pointer") +  null22: +  t.1 = [last_elem] +  t.1 = [t.1+0] +  aux01 = call t.1(last_elem) +  head = last_elem +  if head goto :null23 +    Error("null pointer") +  null23: +  t.2 = [head] +  t.2 = [t.2+0] +  aux01 = call t.2(head) +  if head goto :null24 +    Error("null pointer") +  null24: +  t.3 = [head] +  t.3 = [t.3+36] +  aux01 = call t.3(head) +  t.4 = HeapAllocZ(16) +  [t.4] = :vmt_Element +  el01 = t.4 +  if el01 goto :null25 +    Error("null pointer") +  null25: +  t.5 = [el01] +  t.5 = [t.5+0] +  aux01 = call t.5(el01 25 37000 0) +  if head goto :null26 +    Error("null pointer") +  null26: +  t.6 = [head] +  t.6 = [t.6+8] +  head = call t.6(head el01) +  if head goto :null27 +    Error("null pointer") +  null27: +  t.7 = [head] +  t.7 = [t.7+36] +  aux01 = call t.7(head) +  PrintIntS(10000000) +  t.8 = HeapAllocZ(16) +  [t.8] = :vmt_Element +  el01 = t.8 +  if el01 goto :null28 +    Error("null pointer") +  null28: +  t.9 = [el01] +  t.9 = [t.9+0] +  aux01 = call t.9(el01 39 42000 1) +  el02 = el01 +  if head goto :null29 +    Error("null pointer") +  null29: +  t.10 = [head] +  t.10 = [t.10+8] +  head = call t.10(head el01) +  if head goto :null30 +    Error("null pointer") +  null30: +  t.11 = [head] +  t.11 = [t.11+36] +  aux01 = call t.11(head) +  PrintIntS(10000000) +  t.12 = HeapAllocZ(16) +  [t.12] = :vmt_Element +  el01 = t.12 +  if el01 goto :null31 +    Error("null pointer") +  null31: +  t.13 = [el01] +  t.13 = [t.13+0] +  aux01 = call t.13(el01 22 34000 0) +  if head goto :null32 +    Error("null pointer") +  null32: +  t.14 = [head] +  t.14 = [t.14+8] +  head = call t.14(head el01) +  if head goto :null33 +    Error("null pointer") +  null33: +  t.15 = [head] +  t.15 = [t.15+36] +  aux01 = call t.15(head) +  t.16 = HeapAllocZ(16) +  [t.16] = :vmt_Element +  el03 = t.16 +  if el03 goto :null34 +    Error("null pointer") +  null34: +  t.17 = [el03] +  t.17 = [t.17+0] +  aux01 = call t.17(el03 27 34000 0) +  if head goto :null35 +    Error("null pointer") +  null35: +  t.18 = [head] +  t.18 = [t.18+20] +  t.19 = call t.18(head el02) +  PrintIntS(t.19) +  if head goto :null36 +    Error("null pointer") +  null36: +  t.20 = [head] +  t.20 = [t.20+20] +  t.21 = call t.20(head el03) +  PrintIntS(t.21) +  PrintIntS(10000000) +  t.22 = HeapAllocZ(16) +  [t.22] = :vmt_Element +  el01 = t.22 +  if el01 goto :null37 +    Error("null pointer") +  null37: +  t.23 = [el01] +  t.23 = [t.23+0] +  aux01 = call t.23(el01 28 35000 0) +  if head goto :null38 +    Error("null pointer") +  null38: +  t.24 = [head] +  t.24 = [t.24+8] +  head = call t.24(head el01) +  if head goto :null39 +    Error("null pointer") +  null39: +  t.25 = [head] +  t.25 = [t.25+36] +  aux01 = call t.25(head) +  PrintIntS(2220000) +  if head goto :null40 +    Error("null pointer") +  null40: +  t.26 = [head] +  t.26 = [t.26+16] +  head = call t.26(head el02) +  if head goto :null41 +    Error("null pointer") +  null41: +  t.27 = [head] +  t.27 = [t.27+36] +  aux01 = call t.27(head) +  PrintIntS(33300000) +  if head goto :null42 +    Error("null pointer") +  null42: +  t.28 = [head] +  t.28 = [t.28+16] +  head = call t.28(head el01) +  if head goto :null43 +    Error("null pointer") +  null43: +  t.29 = [head] +  t.29 = [t.29+36] +  aux01 = call t.29(head) +  PrintIntS(44440000) +  ret 0 diff --git a/boil/tests/MoreThan4.java b/boil/tests/MoreThan4.java new file mode 100644 index 0000000..4960f01 --- /dev/null +++ b/boil/tests/MoreThan4.java @@ -0,0 +1,29 @@ +class MoreThan4{ +    public static void main(String[] a){ +        System.out.println(new MT4().Start(1,2,3,4,5,6)); +    } +} + +class MT4 { +    public int Start(int p1, int p2, int p3 , int p4, int p5, int p6){ +	int aux ; +        System.out.println(p1); +        System.out.println(p2); +        System.out.println(p3); +        System.out.println(p4); +        System.out.println(p5); +        System.out.println(p6); +	aux = this.Change(p6,p5,p4,p3,p2,p1); +	return aux ; +    } + +    public int Change(int p1, int p2, int p3 , int p4, int p5, int p6){ +        System.out.println(p1); +        System.out.println(p2); +        System.out.println(p3); +        System.out.println(p4); +        System.out.println(p5); +        System.out.println(p6); +	return 0 ; +    } +} diff --git a/boil/tests/MoreThan4.opt.vapor b/boil/tests/MoreThan4.opt.vapor new file mode 100644 index 0000000..a59d1b5 --- /dev/null +++ b/boil/tests/MoreThan4.opt.vapor @@ -0,0 +1,27 @@ + +const empty_MT4 + + +func Main() +  t.0 = call :MT4.Start(:empty_MT4 1 2 3 4 5 6) +  PrintIntS(t.0) +  ret + +func MT4.Start(this p1 p2 p3 p4 p5 p6) +  PrintIntS(p1) +  PrintIntS(p2) +  PrintIntS(p3) +  PrintIntS(p4) +  PrintIntS(p5) +  PrintIntS(p6) +  aux = call :MT4.Change(this p6 p5 p4 p3 p2 p1) +  ret aux + +func MT4.Change(this p1 p2 p3 p4 p5 p6) +  PrintIntS(p1) +  PrintIntS(p2) +  PrintIntS(p3) +  PrintIntS(p4) +  PrintIntS(p5) +  PrintIntS(p6) +  ret 0 diff --git a/boil/tests/MoreThan4.vapor b/boil/tests/MoreThan4.vapor new file mode 100644 index 0000000..6067f8e --- /dev/null +++ b/boil/tests/MoreThan4.vapor @@ -0,0 +1,38 @@ + +const vmt_MT4 +  :MT4.Start +  :MT4.Change + + +func Main() +  t.0 = HeapAllocZ(4) +  [t.0] = :vmt_MT4 +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0 1 2 3 4 5 6) +  PrintIntS(t.2) +  ret + +func MT4.Start(this p1 p2 p3 p4 p5 p6) +  PrintIntS(p1) +  PrintIntS(p2) +  PrintIntS(p3) +  PrintIntS(p4) +  PrintIntS(p5) +  PrintIntS(p6) +  t.0 = [this] +  t.0 = [t.0+4] +  aux = call t.0(this p6 p5 p4 p3 p2 p1) +  ret aux + +func MT4.Change(this p1 p2 p3 p4 p5 p6) +  PrintIntS(p1) +  PrintIntS(p2) +  PrintIntS(p3) +  PrintIntS(p4) +  PrintIntS(p5) +  PrintIntS(p6) +  ret 0 diff --git a/boil/tests/QuickSort.java b/boil/tests/QuickSort.java new file mode 100644 index 0000000..5893390 --- /dev/null +++ b/boil/tests/QuickSort.java @@ -0,0 +1,112 @@ +class QuickSort{ +    public static void main(String[] a){ +	System.out.println(new QS().Start(10)); +    } +} + + +// This class contains the array of integers and +// methods to initialize, print and sort the array +// using Quicksort +class QS{ +     +    int[] number ; +    int size ; + +    // Invoke the Initialization, Sort and Printing +    // Methods +    public int Start(int sz){ +	int aux01 ; +	aux01 = this.Init(sz); +	aux01 = this.Print(); +	System.out.println(9999); +	aux01 = size - 1 ; +	aux01 = this.Sort(0,aux01); +	aux01 = this.Print(); +	return 0 ; +    } + +  +    // Sort array of integers using Quicksort method +    public int Sort(int left, int right){ +	int v ; +	int i ; +	int j ; +	int nt; +	int t ; +	boolean cont01; +	boolean cont02; +	int aux03 ; +	t = 0 ; +	if (left < right){ +	    v = number[right] ; +	    i = left - 1 ; +	    j = right ; +	    cont01 = true ; +	    while (cont01){ +		cont02 = true ; +		while (cont02){ +		    i = i + 1 ; +		    aux03 = number[i] ; +		    if (!(aux03<v)) cont02 = false ; +		    else cont02 = true ; +		} +		cont02 = true ; +		while (cont02){ +		    j = j - 1 ; +		    aux03 = number[j] ; +		    if (!(v < aux03)) cont02 = false ; +		    else cont02 = true ; +		} + + +		t = number[i] ; +		number[i] = number[j] ; +		number[j] = t ; +		//aux03 = i + 1 ; +		if ( j < (i+1)) cont01 = false ; +		else cont01 = true ; +	    } +	    number[j] = number[i] ; +	    number[i] = number[right] ; +	    number[right] = t ; +	    nt = this.Sort(left,i-1); +	    nt = this.Sort(i+1,right); +	} +	else nt = 0 ; +	return 0 ; +    } + +     +    // Print array of integers +    public int Print(){ +	int j ; +	j = 0 ; +	while (j < (size)) { +	    System.out.println(number[j]); +	    j = j + 1 ; +	} +	return 0 ; +    } +     + +    // Initialize array of integers +    public int Init(int sz){ +	size = sz ; +	number = new int[sz] ; +	 +	number[0] = 20 ; +	number[1] = 7  ;  +	number[2] = 12 ; +	number[3] = 18 ; +	number[4] = 2  ;  +	number[5] = 11 ; +	number[6] = 6  ;  +	number[7] = 9  ;  +	number[8] = 19 ;  +	number[9] = 5  ; +	 +	return 0 ;	 +    } + +} diff --git a/boil/tests/QuickSort.opt.vapor b/boil/tests/QuickSort.opt.vapor new file mode 100644 index 0000000..6e14e5a --- /dev/null +++ b/boil/tests/QuickSort.opt.vapor @@ -0,0 +1,378 @@ + +const empty_QS + + +func Main() +  t.0 = HeapAllocZ(8) +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = call :QS.Start(t.0 10) +  PrintIntS(t.1) +  ret + +func QS.Start(this sz) +  aux01 = call :QS.Init(this sz) +  aux01 = call :QS.Print(this) +  PrintIntS(9999) +  t.0 = [this+4] +  aux01 = Sub(t.0 1) +  aux01 = call :QS.Sort(this 0 aux01) +  aux01 = call :QS.Print(this) +  ret 0 + +func QS.Sort(this left right) +  t = 0 +  t.0 = LtS(left right) +  if0 t.0 goto :if1_else +    t.1 = [this+0] +    if t.1 goto :null2 +      Error("null pointer") +    null2: +    t.2 = [t.1] +    t.2 = Lt(right t.2) +    if t.2 goto :bounds1 +      Error("array index out of bounds") +    bounds1: +    t.2 = MulS(right 4) +    t.2 = Add(t.2 t.1) +    v = [t.2+4] +    i = Sub(left 1) +    j = right +    cont01 = 1 +    while1_top: +    if0 cont01 goto :while1_end +      cont02 = 1 +      while2_top: +      if0 cont02 goto :while2_end +        i = Add(i 1) +        t.3 = [this+0] +        if t.3 goto :null3 +          Error("null pointer") +        null3: +        t.4 = [t.3] +        t.4 = Lt(i t.4) +        if t.4 goto :bounds2 +          Error("array index out of bounds") +        bounds2: +        t.4 = MulS(i 4) +        t.4 = Add(t.4 t.3) +        aux03 = [t.4+4] +        t.5 = LtS(aux03 v) +        if t.5 goto :if2_else +          cont02 = 0 +          goto :if2_end +        if2_else: +          cont02 = 1 +        if2_end: +        goto :while2_top +      while2_end: +      cont02 = 1 +      while3_top: +      if0 cont02 goto :while3_end +        j = Sub(j 1) +        t.6 = [this+0] +        if t.6 goto :null4 +          Error("null pointer") +        null4: +        t.7 = [t.6] +        t.7 = Lt(j t.7) +        if t.7 goto :bounds3 +          Error("array index out of bounds") +        bounds3: +        t.7 = MulS(j 4) +        t.7 = Add(t.7 t.6) +        aux03 = [t.7+4] +        t.8 = LtS(v aux03) +        if t.8 goto :if3_else +          cont02 = 0 +          goto :if3_end +        if3_else: +          cont02 = 1 +        if3_end: +        goto :while3_top +      while3_end: +      t.9 = [this+0] +      if t.9 goto :null5 +        Error("null pointer") +      null5: +      t.10 = [t.9] +      t.10 = Lt(i t.10) +      if t.10 goto :bounds4 +        Error("array index out of bounds") +      bounds4: +      t.10 = MulS(i 4) +      t.10 = Add(t.10 t.9) +      t = [t.10+4] +      t.11 = [this+0] +      if t.11 goto :null6 +        Error("null pointer") +      null6: +      t.12 = [t.11] +      t.12 = Lt(i t.12) +      if t.12 goto :bounds5 +        Error("array index out of bounds") +      bounds5: +      t.12 = MulS(i 4) +      t.12 = Add(t.12 t.11) +      t.13 = [this+0] +      if t.13 goto :null7 +        Error("null pointer") +      null7: +      t.14 = [t.13] +      t.14 = Lt(j t.14) +      if t.14 goto :bounds6 +        Error("array index out of bounds") +      bounds6: +      t.14 = MulS(j 4) +      t.14 = Add(t.14 t.13) +      t.15 = [t.14+4] +      [t.12+4] = t.15 +      t.16 = [this+0] +      if t.16 goto :null8 +        Error("null pointer") +      null8: +      t.17 = [t.16] +      t.17 = Lt(j t.17) +      if t.17 goto :bounds7 +        Error("array index out of bounds") +      bounds7: +      t.17 = MulS(j 4) +      t.17 = Add(t.17 t.16) +      [t.17+4] = t +      t.18 = Add(i 1) +      t.19 = LtS(j t.18) +      if0 t.19 goto :if4_else +        cont01 = 0 +        goto :if4_end +      if4_else: +        cont01 = 1 +      if4_end: +      goto :while1_top +    while1_end: +    t.20 = [this+0] +    if t.20 goto :null9 +      Error("null pointer") +    null9: +    t.21 = [t.20] +    t.21 = Lt(j t.21) +    if t.21 goto :bounds8 +      Error("array index out of bounds") +    bounds8: +    t.21 = MulS(j 4) +    t.21 = Add(t.21 t.20) +    t.22 = [this+0] +    if t.22 goto :null10 +      Error("null pointer") +    null10: +    t.23 = [t.22] +    t.23 = Lt(i t.23) +    if t.23 goto :bounds9 +      Error("array index out of bounds") +    bounds9: +    t.23 = MulS(i 4) +    t.23 = Add(t.23 t.22) +    t.24 = [t.23+4] +    [t.21+4] = t.24 +    t.25 = [this+0] +    if t.25 goto :null11 +      Error("null pointer") +    null11: +    t.26 = [t.25] +    t.26 = Lt(i t.26) +    if t.26 goto :bounds10 +      Error("array index out of bounds") +    bounds10: +    t.26 = MulS(i 4) +    t.26 = Add(t.26 t.25) +    t.27 = [this+0] +    if t.27 goto :null12 +      Error("null pointer") +    null12: +    t.28 = [t.27] +    t.28 = Lt(right t.28) +    if t.28 goto :bounds11 +      Error("array index out of bounds") +    bounds11: +    t.28 = MulS(right 4) +    t.28 = Add(t.28 t.27) +    t.29 = [t.28+4] +    [t.26+4] = t.29 +    t.30 = [this+0] +    if t.30 goto :null13 +      Error("null pointer") +    null13: +    t.31 = [t.30] +    t.31 = Lt(right t.31) +    if t.31 goto :bounds12 +      Error("array index out of bounds") +    bounds12: +    t.31 = MulS(right 4) +    t.31 = Add(t.31 t.30) +    [t.31+4] = t +    t.32 = Sub(i 1) +    nt = call :QS.Sort(this left t.32) +    t.33 = Add(i 1) +    nt = call :QS.Sort(this t.33 right) +    goto :if1_end +  if1_else: +    nt = 0 +  if1_end: +  ret 0 + +func QS.Print(this) +  j = 0 +  while4_top: +  t.0 = [this+4] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while4_end +    t.2 = [this+0] +    if t.2 goto :null14 +      Error("null pointer") +    null14: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds13 +      Error("array index out of bounds") +    bounds13: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    t.4 = [t.3+4] +    PrintIntS(t.4) +    j = Add(j 1) +    goto :while4_top +  while4_end: +  ret 0 + +func QS.Init(this sz) +  [this+4] = sz +  t.0 = call :AllocArray(sz) +  [this+0] = t.0 +  t.1 = [this+0] +  if t.1 goto :null15 +    Error("null pointer") +  null15: +  t.2 = [t.1] +  t.2 = Lt(0 t.2) +  if t.2 goto :bounds14 +    Error("array index out of bounds") +  bounds14: +  t.2 = MulS(0 4) +  t.2 = Add(t.2 t.1) +  [t.2+4] = 20 +  t.3 = [this+0] +  if t.3 goto :null16 +    Error("null pointer") +  null16: +  t.4 = [t.3] +  t.4 = Lt(1 t.4) +  if t.4 goto :bounds15 +    Error("array index out of bounds") +  bounds15: +  t.4 = MulS(1 4) +  t.4 = Add(t.4 t.3) +  [t.4+4] = 7 +  t.5 = [this+0] +  if t.5 goto :null17 +    Error("null pointer") +  null17: +  t.6 = [t.5] +  t.6 = Lt(2 t.6) +  if t.6 goto :bounds16 +    Error("array index out of bounds") +  bounds16: +  t.6 = MulS(2 4) +  t.6 = Add(t.6 t.5) +  [t.6+4] = 12 +  t.7 = [this+0] +  if t.7 goto :null18 +    Error("null pointer") +  null18: +  t.8 = [t.7] +  t.8 = Lt(3 t.8) +  if t.8 goto :bounds17 +    Error("array index out of bounds") +  bounds17: +  t.8 = MulS(3 4) +  t.8 = Add(t.8 t.7) +  [t.8+4] = 18 +  t.9 = [this+0] +  if t.9 goto :null19 +    Error("null pointer") +  null19: +  t.10 = [t.9] +  t.10 = Lt(4 t.10) +  if t.10 goto :bounds18 +    Error("array index out of bounds") +  bounds18: +  t.10 = MulS(4 4) +  t.10 = Add(t.10 t.9) +  [t.10+4] = 2 +  t.11 = [this+0] +  if t.11 goto :null20 +    Error("null pointer") +  null20: +  t.12 = [t.11] +  t.12 = Lt(5 t.12) +  if t.12 goto :bounds19 +    Error("array index out of bounds") +  bounds19: +  t.12 = MulS(5 4) +  t.12 = Add(t.12 t.11) +  [t.12+4] = 11 +  t.13 = [this+0] +  if t.13 goto :null21 +    Error("null pointer") +  null21: +  t.14 = [t.13] +  t.14 = Lt(6 t.14) +  if t.14 goto :bounds20 +    Error("array index out of bounds") +  bounds20: +  t.14 = MulS(6 4) +  t.14 = Add(t.14 t.13) +  [t.14+4] = 6 +  t.15 = [this+0] +  if t.15 goto :null22 +    Error("null pointer") +  null22: +  t.16 = [t.15] +  t.16 = Lt(7 t.16) +  if t.16 goto :bounds21 +    Error("array index out of bounds") +  bounds21: +  t.16 = MulS(7 4) +  t.16 = Add(t.16 t.15) +  [t.16+4] = 9 +  t.17 = [this+0] +  if t.17 goto :null23 +    Error("null pointer") +  null23: +  t.18 = [t.17] +  t.18 = Lt(8 t.18) +  if t.18 goto :bounds22 +    Error("array index out of bounds") +  bounds22: +  t.18 = MulS(8 4) +  t.18 = Add(t.18 t.17) +  [t.18+4] = 19 +  t.19 = [this+0] +  if t.19 goto :null24 +    Error("null pointer") +  null24: +  t.20 = [t.19] +  t.20 = Lt(9 t.20) +  if t.20 goto :bounds23 +    Error("array index out of bounds") +  bounds23: +  t.20 = MulS(9 4) +  t.20 = Add(t.20 t.19) +  [t.20+4] = 5 +  ret 0 + +func AllocArray(size) +  bytes = MulS(size 4) +  bytes = Add(bytes 4) +  v = HeapAllocZ(bytes) +  [v] = size +  ret v diff --git a/boil/tests/QuickSort.vapor b/boil/tests/QuickSort.vapor new file mode 100644 index 0000000..3fe3798 --- /dev/null +++ b/boil/tests/QuickSort.vapor @@ -0,0 +1,399 @@ + +const vmt_QS +  :QS.Start +  :QS.Sort +  :QS.Print +  :QS.Init + + +func Main() +  t.0 = HeapAllocZ(12) +  [t.0] = :vmt_QS +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0 10) +  PrintIntS(t.2) +  ret + +func QS.Start(this sz) +  t.0 = [this] +  t.0 = [t.0+12] +  aux01 = call t.0(this sz) +  t.1 = [this] +  t.1 = [t.1+8] +  aux01 = call t.1(this) +  PrintIntS(9999) +  t.2 = [this+8] +  aux01 = Sub(t.2 1) +  t.3 = [this] +  t.3 = [t.3+4] +  aux01 = call t.3(this 0 aux01) +  t.4 = [this] +  t.4 = [t.4+8] +  aux01 = call t.4(this) +  ret 0 + +func QS.Sort(this left right) +  t = 0 +  t.0 = LtS(left right) +  if0 t.0 goto :if1_else +    t.1 = [this+4] +    if t.1 goto :null2 +      Error("null pointer") +    null2: +    t.2 = [t.1] +    t.2 = Lt(right t.2) +    if t.2 goto :bounds1 +      Error("array index out of bounds") +    bounds1: +    t.2 = MulS(right 4) +    t.2 = Add(t.2 t.1) +    v = [t.2+4] +    i = Sub(left 1) +    j = right +    cont01 = 1 +    while1_top: +    if0 cont01 goto :while1_end +      cont02 = 1 +      while2_top: +      if0 cont02 goto :while2_end +        i = Add(i 1) +        t.3 = [this+4] +        if t.3 goto :null3 +          Error("null pointer") +        null3: +        t.4 = [t.3] +        t.4 = Lt(i t.4) +        if t.4 goto :bounds2 +          Error("array index out of bounds") +        bounds2: +        t.4 = MulS(i 4) +        t.4 = Add(t.4 t.3) +        aux03 = [t.4+4] +        t.5 = LtS(aux03 v) +        t.6 = Sub(1 t.5) +        if0 t.6 goto :if2_else +          cont02 = 0 +          goto :if2_end +        if2_else: +          cont02 = 1 +        if2_end: +        goto :while2_top +      while2_end: +      cont02 = 1 +      while3_top: +      if0 cont02 goto :while3_end +        j = Sub(j 1) +        t.7 = [this+4] +        if t.7 goto :null4 +          Error("null pointer") +        null4: +        t.8 = [t.7] +        t.8 = Lt(j t.8) +        if t.8 goto :bounds3 +          Error("array index out of bounds") +        bounds3: +        t.8 = MulS(j 4) +        t.8 = Add(t.8 t.7) +        aux03 = [t.8+4] +        t.9 = LtS(v aux03) +        t.10 = Sub(1 t.9) +        if0 t.10 goto :if3_else +          cont02 = 0 +          goto :if3_end +        if3_else: +          cont02 = 1 +        if3_end: +        goto :while3_top +      while3_end: +      t.11 = [this+4] +      if t.11 goto :null5 +        Error("null pointer") +      null5: +      t.12 = [t.11] +      t.12 = Lt(i t.12) +      if t.12 goto :bounds4 +        Error("array index out of bounds") +      bounds4: +      t.12 = MulS(i 4) +      t.12 = Add(t.12 t.11) +      t = [t.12+4] +      t.13 = [this+4] +      if t.13 goto :null6 +        Error("null pointer") +      null6: +      t.14 = [t.13] +      t.14 = Lt(i t.14) +      if t.14 goto :bounds5 +        Error("array index out of bounds") +      bounds5: +      t.14 = MulS(i 4) +      t.14 = Add(t.14 t.13) +      t.15 = [this+4] +      if t.15 goto :null7 +        Error("null pointer") +      null7: +      t.16 = [t.15] +      t.16 = Lt(j t.16) +      if t.16 goto :bounds6 +        Error("array index out of bounds") +      bounds6: +      t.16 = MulS(j 4) +      t.16 = Add(t.16 t.15) +      t.17 = [t.16+4] +      [t.14+4] = t.17 +      t.18 = [this+4] +      if t.18 goto :null8 +        Error("null pointer") +      null8: +      t.19 = [t.18] +      t.19 = Lt(j t.19) +      if t.19 goto :bounds7 +        Error("array index out of bounds") +      bounds7: +      t.19 = MulS(j 4) +      t.19 = Add(t.19 t.18) +      [t.19+4] = t +      t.20 = Add(i 1) +      t.21 = LtS(j t.20) +      if0 t.21 goto :if4_else +        cont01 = 0 +        goto :if4_end +      if4_else: +        cont01 = 1 +      if4_end: +      goto :while1_top +    while1_end: +    t.22 = [this+4] +    if t.22 goto :null9 +      Error("null pointer") +    null9: +    t.23 = [t.22] +    t.23 = Lt(j t.23) +    if t.23 goto :bounds8 +      Error("array index out of bounds") +    bounds8: +    t.23 = MulS(j 4) +    t.23 = Add(t.23 t.22) +    t.24 = [this+4] +    if t.24 goto :null10 +      Error("null pointer") +    null10: +    t.25 = [t.24] +    t.25 = Lt(i t.25) +    if t.25 goto :bounds9 +      Error("array index out of bounds") +    bounds9: +    t.25 = MulS(i 4) +    t.25 = Add(t.25 t.24) +    t.26 = [t.25+4] +    [t.23+4] = t.26 +    t.27 = [this+4] +    if t.27 goto :null11 +      Error("null pointer") +    null11: +    t.28 = [t.27] +    t.28 = Lt(i t.28) +    if t.28 goto :bounds10 +      Error("array index out of bounds") +    bounds10: +    t.28 = MulS(i 4) +    t.28 = Add(t.28 t.27) +    t.29 = [this+4] +    if t.29 goto :null12 +      Error("null pointer") +    null12: +    t.30 = [t.29] +    t.30 = Lt(right t.30) +    if t.30 goto :bounds11 +      Error("array index out of bounds") +    bounds11: +    t.30 = MulS(right 4) +    t.30 = Add(t.30 t.29) +    t.31 = [t.30+4] +    [t.28+4] = t.31 +    t.32 = [this+4] +    if t.32 goto :null13 +      Error("null pointer") +    null13: +    t.33 = [t.32] +    t.33 = Lt(right t.33) +    if t.33 goto :bounds12 +      Error("array index out of bounds") +    bounds12: +    t.33 = MulS(right 4) +    t.33 = Add(t.33 t.32) +    [t.33+4] = t +    t.34 = [this] +    t.34 = [t.34+4] +    t.35 = Sub(i 1) +    nt = call t.34(this left t.35) +    t.36 = [this] +    t.36 = [t.36+4] +    t.37 = Add(i 1) +    nt = call t.36(this t.37 right) +    goto :if1_end +  if1_else: +    nt = 0 +  if1_end: +  ret 0 + +func QS.Print(this) +  j = 0 +  while4_top: +  t.0 = [this+8] +  t.1 = LtS(j t.0) +  if0 t.1 goto :while4_end +    t.2 = [this+4] +    if t.2 goto :null14 +      Error("null pointer") +    null14: +    t.3 = [t.2] +    t.3 = Lt(j t.3) +    if t.3 goto :bounds13 +      Error("array index out of bounds") +    bounds13: +    t.3 = MulS(j 4) +    t.3 = Add(t.3 t.2) +    t.4 = [t.3+4] +    PrintIntS(t.4) +    j = Add(j 1) +    goto :while4_top +  while4_end: +  ret 0 + +func QS.Init(this sz) +  [this+8] = sz +  t.0 = call :AllocArray(sz) +  [this+4] = t.0 +  t.1 = [this+4] +  if t.1 goto :null15 +    Error("null pointer") +  null15: +  t.2 = [t.1] +  t.2 = Lt(0 t.2) +  if t.2 goto :bounds14 +    Error("array index out of bounds") +  bounds14: +  t.2 = MulS(0 4) +  t.2 = Add(t.2 t.1) +  [t.2+4] = 20 +  t.3 = [this+4] +  if t.3 goto :null16 +    Error("null pointer") +  null16: +  t.4 = [t.3] +  t.4 = Lt(1 t.4) +  if t.4 goto :bounds15 +    Error("array index out of bounds") +  bounds15: +  t.4 = MulS(1 4) +  t.4 = Add(t.4 t.3) +  [t.4+4] = 7 +  t.5 = [this+4] +  if t.5 goto :null17 +    Error("null pointer") +  null17: +  t.6 = [t.5] +  t.6 = Lt(2 t.6) +  if t.6 goto :bounds16 +    Error("array index out of bounds") +  bounds16: +  t.6 = MulS(2 4) +  t.6 = Add(t.6 t.5) +  [t.6+4] = 12 +  t.7 = [this+4] +  if t.7 goto :null18 +    Error("null pointer") +  null18: +  t.8 = [t.7] +  t.8 = Lt(3 t.8) +  if t.8 goto :bounds17 +    Error("array index out of bounds") +  bounds17: +  t.8 = MulS(3 4) +  t.8 = Add(t.8 t.7) +  [t.8+4] = 18 +  t.9 = [this+4] +  if t.9 goto :null19 +    Error("null pointer") +  null19: +  t.10 = [t.9] +  t.10 = Lt(4 t.10) +  if t.10 goto :bounds18 +    Error("array index out of bounds") +  bounds18: +  t.10 = MulS(4 4) +  t.10 = Add(t.10 t.9) +  [t.10+4] = 2 +  t.11 = [this+4] +  if t.11 goto :null20 +    Error("null pointer") +  null20: +  t.12 = [t.11] +  t.12 = Lt(5 t.12) +  if t.12 goto :bounds19 +    Error("array index out of bounds") +  bounds19: +  t.12 = MulS(5 4) +  t.12 = Add(t.12 t.11) +  [t.12+4] = 11 +  t.13 = [this+4] +  if t.13 goto :null21 +    Error("null pointer") +  null21: +  t.14 = [t.13] +  t.14 = Lt(6 t.14) +  if t.14 goto :bounds20 +    Error("array index out of bounds") +  bounds20: +  t.14 = MulS(6 4) +  t.14 = Add(t.14 t.13) +  [t.14+4] = 6 +  t.15 = [this+4] +  if t.15 goto :null22 +    Error("null pointer") +  null22: +  t.16 = [t.15] +  t.16 = Lt(7 t.16) +  if t.16 goto :bounds21 +    Error("array index out of bounds") +  bounds21: +  t.16 = MulS(7 4) +  t.16 = Add(t.16 t.15) +  [t.16+4] = 9 +  t.17 = [this+4] +  if t.17 goto :null23 +    Error("null pointer") +  null23: +  t.18 = [t.17] +  t.18 = Lt(8 t.18) +  if t.18 goto :bounds22 +    Error("array index out of bounds") +  bounds22: +  t.18 = MulS(8 4) +  t.18 = Add(t.18 t.17) +  [t.18+4] = 19 +  t.19 = [this+4] +  if t.19 goto :null24 +    Error("null pointer") +  null24: +  t.20 = [t.19] +  t.20 = Lt(9 t.20) +  if t.20 goto :bounds23 +    Error("array index out of bounds") +  bounds23: +  t.20 = MulS(9 4) +  t.20 = Add(t.20 t.19) +  [t.20+4] = 5 +  ret 0 + +func AllocArray(size) +  bytes = MulS(size 4) +  bytes = Add(bytes 4) +  v = HeapAllocZ(bytes) +  [v] = size +  ret v diff --git a/boil/tests/ShortCircuit.opt.vapor b/boil/tests/ShortCircuit.opt.vapor new file mode 100644 index 0000000..8275acd --- /dev/null +++ b/boil/tests/ShortCircuit.opt.vapor @@ -0,0 +1,215 @@ + +const vmt_Main +	:Main.run1 +	:Main.run2 +	:Main.run3 +	:Main.run4 +	:Main.if1 +	:Main.if2 +	:Main.if3 +	:Main.if4 +	:Main.if5 +	:Main.if6 + + +func Main() +	PrintIntS(1) +	ret + +func Main.run1(this a b c) +	if0 a goto :ss2_else +		t.1 = b +		goto :ss2_end +	ss2_else: +		t.1 = 0 +	ss2_end: +	if0 t.1 goto :ss1_else +		t.0 = 1 +		goto :ss1_end +	ss1_else: +		t.0 = c +	ss1_end: +	ret t.0 + +func Main.run2(this a b c) +	if0 a goto :ss3_else +		if0 b goto :ss4_else +			t.1 = 1 +			goto :ss4_end +		ss4_else: +			t.1 = c +		ss4_end: +		t.0 = t.1 +		goto :ss3_end +	ss3_else: +		t.0 = 0 +	ss3_end: +	ret t.0 + +func Main.run3(this a b c) +	if0 a goto :ss6_else +		t.1 = 1 +		goto :ss6_end +	ss6_else: +		t.1 = b +	ss6_end: +	if0 t.1 goto :ss5_else +		t.0 = c +		goto :ss5_end +	ss5_else: +		t.0 = 0 +	ss5_end: +	ret t.0 + +func Main.run4(this a b c) +	if0 a goto :ss7_else +		t.0 = 1 +		goto :ss7_end +	ss7_else: +		if0 b goto :ss8_else +			t.1 = c +			goto :ss8_end +		ss8_else: +			t.1 = 0 +		ss8_end: +		t.0 = t.1 +	ss7_end: +	ret t.0 + +func Main.if1(this a b c) +	if0 a goto :ss10_else +		t.1 = b +		goto :ss10_end +	ss10_else: +		t.1 = 0 +	ss10_end: +	if0 t.1 goto :ss9_else +		t.0 = 1 +		goto :ss9_end +	ss9_else: +		t.0 = c +	ss9_end: +	if0 t.0 goto :if1_else +	if1_then: +		PrintIntS(1) +		goto :if1_end +	if1_else: +	if1_end: +	ret 1 + +func Main.if2(this a b c) +	if0 a goto :ss11_else +		if0 b goto :ss12_else +			t.1 = 1 +			goto :ss12_end +		ss12_else: +			t.1 = c +		ss12_end: +		t.0 = t.1 +		goto :ss11_end +	ss11_else: +		t.0 = 0 +	ss11_end: +	if0 t.0 goto :if2_else +	if2_then: +		PrintIntS(2) +		goto :if2_end +	if2_else: +	if2_end: +	ret 1 + +func Main.if3(this a b c) +	if0 a goto :ss14_else +		t.1 = 1 +		goto :ss14_end +	ss14_else: +		t.1 = b +	ss14_end: +	if0 t.1 goto :ss13_else +		t.0 = c +		goto :ss13_end +	ss13_else: +		t.0 = 0 +	ss13_end: +	if0 t.0 goto :if3_else +	if3_then: +		PrintIntS(3) +		goto :if3_end +	if3_else: +	if3_end: +	ret 1 + +func Main.if4(this a b c) +	if0 a goto :ss15_else +		t.0 = 1 +		goto :ss15_end +	ss15_else: +		if0 b goto :ss16_else +			t.1 = c +			goto :ss16_end +		ss16_else: +			t.1 = 0 +		ss16_end: +		t.0 = t.1 +	ss15_end: +	if0 t.0 goto :if4_else +	if4_then: +		PrintIntS(4) +		goto :if4_end +	if4_else: +	if4_end: +	ret 1 + +func Main.if5(this a b c d) +	if0 a goto :ss19_else +		t.2 = 1 +		goto :ss19_end +	ss19_else: +		t.2 = b +	ss19_end: +	if0 t.2 goto :ss18_else +		t.1 = 1 +		goto :ss18_end +	ss18_else: +		t.1 = c +	ss18_end: +	if0 t.1 goto :ss17_else +		t.0 = 1 +		goto :ss17_end +	ss17_else: +		t.0 = d +	ss17_end: +	if0 t.0 goto :if5_else +	if5_then: +		PrintIntS(5) +		goto :if5_end +	if5_else: +	if5_end: +	ret 1 + +func Main.if6(this a b c d) +	if0 a goto :ss22_else +		t.2 = b +		goto :ss22_end +	ss22_else: +		t.2 = 0 +	ss22_end: +	if0 t.2 goto :ss21_else +		t.1 = c +		goto :ss21_end +	ss21_else: +		t.1 = 0 +	ss21_end: +	if0 t.1 goto :ss20_else +		t.0 = d +		goto :ss20_end +	ss20_else: +		t.0 = 0 +	ss20_end: +	if0 t.0 goto :if6_else +	if6_then: +		PrintIntS(6) +		goto :if6_end +	if6_else: +	if6_end: +	ret 1 diff --git a/boil/tests/ShortCircuit.vapor b/boil/tests/ShortCircuit.vapor new file mode 100644 index 0000000..31cc088 --- /dev/null +++ b/boil/tests/ShortCircuit.vapor @@ -0,0 +1,128 @@ + +const empty_Main + + +func Main() +	PrintIntS(1) +	ret + +func Main.run1(this a b c) +	if0 a goto :ss1_else +	if0 b goto :ss1_else +		t.0 = 1 +		goto :ss1_end +	ss1_else: +		t.0 = c +	ss1_end: +	ret t.0 + +func Main.run2(this a b c) +	if0 a goto :ss3_else +		if0 b goto :ss4_else +			t.1 = 1 +			goto :ss4_end +		ss4_else: +			t.1 = c +		ss4_end: +		t.0 = t.1 +		goto :ss3_end +	ss3_else: +		t.0 = 0 +	ss3_end: +	ret t.0 + +func Main.run3(this a b c) +	if a goto :ss5_then +	if0 b goto :ss5_else +	ss5_then: +		t.0 = c +		goto :ss5_end +	ss5_else: +		t.0 = 0 +	ss5_end: +	ret t.0 + +func Main.run4(this a b c) +	if0 a goto :ss7_else +		t.0 = 1 +		goto :ss7_end +	ss7_else: +		if0 b goto :ss8_else +			t.1 = c +			goto :ss8_end +		ss8_else: +			t.1 = 0 +		ss8_end: +		t.0 = t.1 +	ss7_end: +	ret t.0 + +func Main.if1(this a b c) +	if0 a goto :ss9 +	if b goto :if1_then +	ss9: +	if0 c goto :if1_else +	if1_then: +		PrintIntS(1) +		goto :if1_end +	if1_else: +	if1_end: +	ret 1 + +func Main.if2(this a b c) +	if0 a goto :if2_else +	if b goto :if2_then +	if0 c goto :if2_else +	if2_then: +		PrintIntS(2) +		goto :if2_end +	if2_else: +	if2_end: +	ret 1 + +func Main.if3(this a b c) +	if a goto :ss13 +	if0 b goto :if3_else +	ss13: +	if0 c goto :if3_else +	if3_then: +		PrintIntS(3) +		goto :if3_end +	if3_else: +	if3_end: +	ret 1 + +func Main.if4(this a b c) +	if a goto :if4_then +	if0 b goto :if4_else +	if0 c goto :if4_else +	if4_then: +		PrintIntS(4) +		goto :if4_end +	if4_else: +	if4_end: +	ret 1 + +func Main.if5(this a b c d) +	if a goto :if5_then +	if b goto :if5_then +	if c goto :if5_then +	if0 d goto :if5_else +	if5_then: +		PrintIntS(5) +		goto :if5_end +	if5_else: +	if5_end: +	ret 1 + +func Main.if6(this a b c d) +	if0 a goto :if6_else +	if0 b goto :if6_else +	if0 c goto :if6_else +	if0 d goto :if6_else +	if6_then: +		PrintIntS(6) +		goto :if6_end +	if6_else: +	if6_end: +	ret 1 diff --git a/boil/tests/TreeVisitor.java b/boil/tests/TreeVisitor.java new file mode 100644 index 0000000..8debfe6 --- /dev/null +++ b/boil/tests/TreeVisitor.java @@ -0,0 +1,374 @@ +// The classes are basically the same as the BinaryTree  +// file except the visitor classes and the accept method +// in the Tree class + +class TreeVisitor{ +    public static void main(String[] a){ +	System.out.println(new TV().Start()); +    } +} + +class TV { + +    public int Start(){ +	Tree root ; +	boolean ntb ; +	int nti ; +	MyVisitor v ; + +	root = new Tree(); +	ntb = root.Init(16); +	ntb = root.Print(); +	System.out.println(100000000); +	ntb = root.Insert(8) ; +	ntb = root.Insert(24) ; +	ntb = root.Insert(4) ; +	ntb = root.Insert(12) ; +	ntb = root.Insert(20) ; +	ntb = root.Insert(28) ; +	ntb = root.Insert(14) ; +	ntb = root.Print(); +	System.out.println(100000000); +	v = new MyVisitor(); +	System.out.println(50000000); +	nti = root.accept(v); +	System.out.println(100000000); +	System.out.println(root.Search(24)); +	System.out.println(root.Search(12)); +	System.out.println(root.Search(16)); +	System.out.println(root.Search(50)); +	System.out.println(root.Search(12)); +	ntb = root.Delete(12); +	ntb = root.Print(); +	System.out.println(root.Search(12)); + +	return 0 ; +    } + +} + + +class Tree{ +    Tree left ; +    Tree right; +    int key ; +    boolean has_left ; +    boolean has_right ; +    Tree my_null ; + + + +    //Tree new_node ; +    //Tree current_node ; +    //Tree parent_node ; +     +   // boolean ntb ; +    //boolean cont ; +    //boolean found ; +    //int ifound ; +  //  boolean is_root ; +  //  int     nti ; +  //  int key_aux ; +   // int auxkey1 ; +   // int auxkey2 ; + +    public boolean Init(int v_key){ +	key = v_key ; +	has_left = false ; +	has_right = false ; +	return true ; +    } + +    public boolean SetRight(Tree rn){ +	right = rn ; +	return true ; +    } + +    public boolean SetLeft(Tree ln){ +	left = ln ; +	return true ; +    } + +    public Tree GetRight(){ +	return right ; +    } + +    public Tree GetLeft(){ +	return left; +    } + +    public int GetKey(){ +	return key ; +    } + +    public boolean SetKey(int v_key){ +	key = v_key ; +	return true ; +    } + +    public boolean GetHas_Right(){ +	return has_right ; +    } + +    public boolean GetHas_Left(){ +	return has_left ; +    } + +    public boolean SetHas_Left(boolean val){ +	 has_left = val ; +	 return true ; +    } + +    public boolean SetHas_Right(boolean val){ +	 has_right = val ; +	 return true ; +    } + +    public boolean Compare(int num1 , int num2){ +	boolean ntb ; +	int nti ; + +	ntb = false ; +	nti = num2 + 1 ; +	if (num1 < num2) ntb = false ; +	else if (!(num1 < nti)) ntb = false ; +	else ntb = true ; +	return ntb ; +    } + +    public boolean Insert(int v_key){ +	Tree new_node ; +	boolean ntb ; +	Tree current_node ; +	boolean cont ; +	int key_aux ; + +	new_node = new Tree(); +	ntb = new_node.Init(v_key) ; +	current_node = this ; +	cont = true ; +	while (cont){ +	    key_aux = current_node.GetKey(); +	    if (v_key < key_aux){ +		if (current_node.GetHas_Left()) +		    current_node = current_node.GetLeft() ; +		else { +		    cont = false ; +		    ntb = current_node.SetHas_Left(true); +		    ntb = current_node.SetLeft(new_node); +		} +	    } +	    else{ +		if (current_node.GetHas_Right()) +		    current_node = current_node.GetRight() ; +		else { +		    cont = false ; +		    ntb = current_node.SetHas_Right(true); +		    ntb = current_node.SetRight(new_node); +		} +	    } +	} +	return true ; +    } + +    public boolean Delete(int v_key){ +	Tree current_node ; +	Tree parent_node ; +	boolean cont ; +	boolean found ; +	boolean ntb ; +	boolean is_root ; +	int key_aux ; + +	current_node = this ; +	parent_node = this ; +	cont = true ; +	found = false ; +	is_root = true ; +	while (cont){ +	    key_aux = current_node.GetKey(); +	    if (v_key < key_aux) +		if (current_node.GetHas_Left()){ +		    parent_node = current_node ; +		    current_node = current_node.GetLeft() ; +		} +		else cont = false ; +	    else  +		if (key_aux < v_key) +		    if (current_node.GetHas_Right()){ +			parent_node = current_node ; +			current_node = current_node.GetRight() ; +		    } +		    else cont = false ; +		else {  +		    if (is_root)  +			if (!current_node.GetHas_Right() &&  +			    !current_node.GetHas_Left() ) +			    ntb = true ; +			else  +			    ntb = this.Remove(parent_node,current_node);  +		    else ntb = this.Remove(parent_node,current_node); +		    found = true ; +		    cont = false ; +		} +	    is_root = false ; +	} +	return found ; +    } + +    public boolean Remove(Tree p_node, Tree c_node){ +	boolean ntb ; +	int auxkey1 ; +	int auxkey2 ; +	 +	if (c_node.GetHas_Left())  +	    ntb = this.RemoveLeft(p_node,c_node) ; +	else  +	    if (c_node.GetHas_Right()) +		ntb = this.RemoveRight(p_node,c_node) ; +	    else { +		auxkey1 = c_node.GetKey(); +		auxkey2 = (p_node.GetLeft()).GetKey() ; +		if (this.Compare(auxkey1,auxkey2)) { +		    ntb = p_node.SetLeft(my_null); +		    ntb = p_node.SetHas_Left(false); +		} +		else { +		    ntb = p_node.SetRight(my_null); +		    ntb = p_node.SetHas_Right(false); +		} +	    } +	return true ; +    } + +    public boolean RemoveRight(Tree p_node, Tree c_node){ +	boolean ntb ; +	while (c_node.GetHas_Right()){ +	    ntb = c_node.SetKey((c_node.GetRight()).GetKey()); +	    p_node = c_node ; +	    c_node = c_node.GetRight() ; +	} +	ntb = p_node.SetRight(my_null); +	ntb = p_node.SetHas_Right(false); +	return true ; +    } + +    public boolean RemoveLeft(Tree p_node, Tree c_node){ +	boolean ntb ; +	while (c_node.GetHas_Left()){ +	    ntb = c_node.SetKey((c_node.GetLeft()).GetKey()); +	    p_node = c_node ; +	    c_node = c_node.GetLeft() ; +	} +	ntb = p_node.SetLeft(my_null); +	ntb = p_node.SetHas_Left(false); +	return true ; +    } + + +    public int Search(int v_key){ +	Tree current_node ; +	int ifound ; +	boolean cont ; +	int key_aux ; + +	current_node = this ; +	cont = true ; +	ifound = 0 ; +	while (cont){ +	    key_aux = current_node.GetKey(); +	    if (v_key < key_aux) +		if (current_node.GetHas_Left()) +		    current_node = current_node.GetLeft() ; +		else cont = false ; +	    else  +		if (key_aux < v_key) +		    if (current_node.GetHas_Right()) +			current_node = current_node.GetRight() ; +		    else cont = false ; +		else {  +		    ifound = 1 ; +		    cont = false ; +		} +	} +	return ifound ; +    } + +    public boolean Print(){ +	boolean ntb ; +	Tree current_node ; + +	current_node = this ; +	ntb = this.RecPrint(current_node); +	return true ; +    } + +    public boolean RecPrint(Tree node){ +	boolean ntb ; + +	if (node.GetHas_Left()){ +	    ntb = this.RecPrint(node.GetLeft()); +	} else ntb = true ; +	System.out.println(node.GetKey()); +	if (node.GetHas_Right()){ +	    ntb = this.RecPrint(node.GetRight()); +	} else ntb = true ; +	return true ; +    } +     +    public int accept(Visitor v){ +	int nti ; + +	System.out.println(333); +	nti = v.visit(this) ; +	return 0 ; +    } + +} + +   + +class Visitor { +    Tree l ; +    Tree r ; + +    public int visit(Tree n){ +	int nti ; + +	if (n.GetHas_Right()){ +	    r = n.GetRight() ; +	    nti = r.accept(this) ; } +	else nti = 0 ; + +	if (n.GetHas_Left()) { +	    l = n.GetLeft();  +	    nti = l.accept(this) ; } +	else nti = 0 ; + +	return 0; +    } + +} + + +class MyVisitor extends Visitor { + +    public int visit(Tree n){ +	int nti ; + +	if (n.GetHas_Right()){ +	    r = n.GetRight() ; +	    nti = r.accept(this) ; } +	else nti = 0 ; + +	System.out.println(n.GetKey()); + +	if (n.GetHas_Left()) { +	    l = n.GetLeft();  +	    nti =l.accept(this) ; } +	else nti = 0 ; + +	return 0; +    } + +} diff --git a/boil/tests/TreeVisitor.opt.vapor b/boil/tests/TreeVisitor.opt.vapor new file mode 100644 index 0000000..dfa80a6 --- /dev/null +++ b/boil/tests/TreeVisitor.opt.vapor @@ -0,0 +1,635 @@ + +const empty_TV + +const empty_Tree + +const vmt_Visitor +  :Visitor.visit + +const vmt_MyVisitor +  :MyVisitor.visit + + +func Main() +  t.0 = call :TV.Start(:empty_TV) +  PrintIntS(t.0) +  ret + +func TV.Start(this) +  root = HeapAllocZ(24) +  if root goto :null1 +    Error("null pointer") +  null1: +  ntb = call :Tree.Init(root 16) +  if root goto :null2 +    Error("null pointer") +  null2: +  ntb = call :Tree.Print(root) +  PrintIntS(100000000) +  if root goto :null3 +    Error("null pointer") +  null3: +  ntb = call :Tree.Insert(root 8) +  if root goto :null4 +    Error("null pointer") +  null4: +  ntb = call :Tree.Insert(root 24) +  if root goto :null5 +    Error("null pointer") +  null5: +  ntb = call :Tree.Insert(root 4) +  if root goto :null6 +    Error("null pointer") +  null6: +  ntb = call :Tree.Insert(root 12) +  if root goto :null7 +    Error("null pointer") +  null7: +  ntb = call :Tree.Insert(root 20) +  if root goto :null8 +    Error("null pointer") +  null8: +  ntb = call :Tree.Insert(root 28) +  if root goto :null9 +    Error("null pointer") +  null9: +  ntb = call :Tree.Insert(root 14) +  if root goto :null10 +    Error("null pointer") +  null10: +  ntb = call :Tree.Print(root) +  PrintIntS(100000000) +  t.0 = HeapAllocZ(12) +  [t.0] = :vmt_MyVisitor +  v = t.0 +  PrintIntS(50000000) +  if root goto :null11 +    Error("null pointer") +  null11: +  nti = call :Tree.accept(root v) +  PrintIntS(100000000) +  if root goto :null12 +    Error("null pointer") +  null12: +  t.1 = call :Tree.Search(root 24) +  PrintIntS(t.1) +  if root goto :null13 +    Error("null pointer") +  null13: +  t.2 = call :Tree.Search(root 12) +  PrintIntS(t.2) +  if root goto :null14 +    Error("null pointer") +  null14: +  t.3 = call :Tree.Search(root 16) +  PrintIntS(t.3) +  if root goto :null15 +    Error("null pointer") +  null15: +  t.4 = call :Tree.Search(root 50) +  PrintIntS(t.4) +  if root goto :null16 +    Error("null pointer") +  null16: +  t.5 = call :Tree.Search(root 12) +  PrintIntS(t.5) +  if root goto :null17 +    Error("null pointer") +  null17: +  ntb = call :Tree.Delete(root 12) +  if root goto :null18 +    Error("null pointer") +  null18: +  ntb = call :Tree.Print(root) +  if root goto :null19 +    Error("null pointer") +  null19: +  t.6 = call :Tree.Search(root 12) +  PrintIntS(t.6) +  ret 0 + +func Tree.Init(this v_key) +  [this+8] = v_key +  [this+12] = 0 +  [this+16] = 0 +  ret 1 + +func Tree.SetRight(this rn) +  [this+4] = rn +  ret 1 + +func Tree.SetLeft(this ln) +  [this+0] = ln +  ret 1 + +func Tree.GetRight(this) +  t.0 = [this+4] +  ret t.0 + +func Tree.GetLeft(this) +  t.0 = [this+0] +  ret t.0 + +func Tree.GetKey(this) +  t.0 = [this+8] +  ret t.0 + +func Tree.SetKey(this v_key) +  [this+8] = v_key +  ret 1 + +func Tree.GetHas_Right(this) +  t.0 = [this+16] +  ret t.0 + +func Tree.GetHas_Left(this) +  t.0 = [this+12] +  ret t.0 + +func Tree.SetHas_Left(this val) +  [this+12] = val +  ret 1 + +func Tree.SetHas_Right(this val) +  [this+16] = val +  ret 1 + +func Tree.Compare(this num1 num2) +  ntb = 0 +  nti = Add(num2 1) +  t.0 = LtS(num1 num2) +  if0 t.0 goto :if1_else +    ntb = 0 +    goto :if1_end +  if1_else: +    t.1 = LtS(num1 nti) +    if t.1 goto :if2_else +      ntb = 0 +      goto :if2_end +    if2_else: +      ntb = 1 +    if2_end: +  if1_end: +  ret ntb + +func Tree.Insert(this v_key) +  new_node = HeapAllocZ(24) +  if new_node goto :null20 +    Error("null pointer") +  null20: +  ntb = call :Tree.Init(new_node v_key) +  current_node = this +  cont = 1 +  while1_top: +  if0 cont goto :while1_end +    if current_node goto :null21 +      Error("null pointer") +    null21: +    key_aux = call :Tree.GetKey(current_node) +    t.0 = LtS(v_key key_aux) +    if0 t.0 goto :if3_else +      if current_node goto :null22 +        Error("null pointer") +      null22: +      t.1 = call :Tree.GetHas_Left(current_node) +      if0 t.1 goto :if4_else +        if current_node goto :null23 +          Error("null pointer") +        null23: +        current_node = call :Tree.GetLeft(current_node) +        goto :if4_end +      if4_else: +        cont = 0 +        if current_node goto :null24 +          Error("null pointer") +        null24: +        ntb = call :Tree.SetHas_Left(current_node 1) +        if current_node goto :null25 +          Error("null pointer") +        null25: +        ntb = call :Tree.SetLeft(current_node new_node) +      if4_end: +      goto :if3_end +    if3_else: +      if current_node goto :null26 +        Error("null pointer") +      null26: +      t.2 = call :Tree.GetHas_Right(current_node) +      if0 t.2 goto :if5_else +        if current_node goto :null27 +          Error("null pointer") +        null27: +        current_node = call :Tree.GetRight(current_node) +        goto :if5_end +      if5_else: +        cont = 0 +        if current_node goto :null28 +          Error("null pointer") +        null28: +        ntb = call :Tree.SetHas_Right(current_node 1) +        if current_node goto :null29 +          Error("null pointer") +        null29: +        ntb = call :Tree.SetRight(current_node new_node) +      if5_end: +    if3_end: +    goto :while1_top +  while1_end: +  ret 1 + +func Tree.Delete(this v_key) +  current_node = this +  parent_node = this +  cont = 1 +  found = 0 +  is_root = 1 +  while2_top: +  if0 cont goto :while2_end +    if current_node goto :null30 +      Error("null pointer") +    null30: +    key_aux = call :Tree.GetKey(current_node) +    t.0 = LtS(v_key key_aux) +    if0 t.0 goto :if6_else +      if current_node goto :null31 +        Error("null pointer") +      null31: +      t.1 = call :Tree.GetHas_Left(current_node) +      if0 t.1 goto :if7_else +        parent_node = current_node +        if current_node goto :null32 +          Error("null pointer") +        null32: +        current_node = call :Tree.GetLeft(current_node) +        goto :if7_end +      if7_else: +        cont = 0 +      if7_end: +      goto :if6_end +    if6_else: +      t.2 = LtS(key_aux v_key) +      if0 t.2 goto :if8_else +        if current_node goto :null33 +          Error("null pointer") +        null33: +        t.3 = call :Tree.GetHas_Right(current_node) +        if0 t.3 goto :if9_else +          parent_node = current_node +          if current_node goto :null34 +            Error("null pointer") +          null34: +          current_node = call :Tree.GetRight(current_node) +          goto :if9_end +        if9_else: +          cont = 0 +        if9_end: +        goto :if8_end +      if8_else: +        if0 is_root goto :if10_else +          if current_node goto :null35 +            Error("null pointer") +          null35: +          t.4 = call :Tree.GetHas_Right(current_node) +          if t.4 goto :if11_else +          if current_node goto :null36 +            Error("null pointer") +          null36: +          t.5 = call :Tree.GetHas_Left(current_node) +          if t.5 goto :if11_else +            ntb = 1 +            goto :if11_end +          if11_else: +            ntb = call :Tree.Remove(this parent_node current_node) +          if11_end: +          goto :if10_end +        if10_else: +          ntb = call :Tree.Remove(this parent_node current_node) +        if10_end: +        found = 1 +        cont = 0 +      if8_end: +    if6_end: +    is_root = 0 +    goto :while2_top +  while2_end: +  ret found + +func Tree.Remove(this p_node c_node) +  if c_node goto :null37 +    Error("null pointer") +  null37: +  t.0 = call :Tree.GetHas_Left(c_node) +  if0 t.0 goto :if12_else +    ntb = call :Tree.RemoveLeft(this p_node c_node) +    goto :if12_end +  if12_else: +    if c_node goto :null38 +      Error("null pointer") +    null38: +    t.1 = call :Tree.GetHas_Right(c_node) +    if0 t.1 goto :if13_else +      ntb = call :Tree.RemoveRight(this p_node c_node) +      goto :if13_end +    if13_else: +      if c_node goto :null39 +        Error("null pointer") +      null39: +      auxkey1 = call :Tree.GetKey(c_node) +      if p_node goto :null40 +        Error("null pointer") +      null40: +      t.2 = call :Tree.GetLeft(p_node) +      if t.2 goto :null41 +        Error("null pointer") +      null41: +      auxkey2 = call :Tree.GetKey(t.2) +      t.3 = call :Tree.Compare(this auxkey1 auxkey2) +      if0 t.3 goto :if14_else +        if p_node goto :null42 +          Error("null pointer") +        null42: +        t.4 = [this+20] +        ntb = call :Tree.SetLeft(p_node t.4) +        if p_node goto :null43 +          Error("null pointer") +        null43: +        ntb = call :Tree.SetHas_Left(p_node 0) +        goto :if14_end +      if14_else: +        if p_node goto :null44 +          Error("null pointer") +        null44: +        t.5 = [this+20] +        ntb = call :Tree.SetRight(p_node t.5) +        if p_node goto :null45 +          Error("null pointer") +        null45: +        ntb = call :Tree.SetHas_Right(p_node 0) +      if14_end: +    if13_end: +  if12_end: +  ret 1 + +func Tree.RemoveRight(this p_node c_node) +  while3_top: +  if c_node goto :null46 +    Error("null pointer") +  null46: +  t.0 = call :Tree.GetHas_Right(c_node) +  if0 t.0 goto :while3_end +    if c_node goto :null47 +      Error("null pointer") +    null47: +    if c_node goto :null48 +      Error("null pointer") +    null48: +    t.1 = call :Tree.GetRight(c_node) +    if t.1 goto :null49 +      Error("null pointer") +    null49: +    t.2 = call :Tree.GetKey(t.1) +    ntb = call :Tree.SetKey(c_node t.2) +    p_node = c_node +    if c_node goto :null50 +      Error("null pointer") +    null50: +    c_node = call :Tree.GetRight(c_node) +    goto :while3_top +  while3_end: +  if p_node goto :null51 +    Error("null pointer") +  null51: +  t.3 = [this+20] +  ntb = call :Tree.SetRight(p_node t.3) +  if p_node goto :null52 +    Error("null pointer") +  null52: +  ntb = call :Tree.SetHas_Right(p_node 0) +  ret 1 + +func Tree.RemoveLeft(this p_node c_node) +  while4_top: +  if c_node goto :null53 +    Error("null pointer") +  null53: +  t.0 = call :Tree.GetHas_Left(c_node) +  if0 t.0 goto :while4_end +    if c_node goto :null54 +      Error("null pointer") +    null54: +    if c_node goto :null55 +      Error("null pointer") +    null55: +    t.1 = call :Tree.GetLeft(c_node) +    if t.1 goto :null56 +      Error("null pointer") +    null56: +    t.2 = call :Tree.GetKey(t.1) +    ntb = call :Tree.SetKey(c_node t.2) +    p_node = c_node +    if c_node goto :null57 +      Error("null pointer") +    null57: +    c_node = call :Tree.GetLeft(c_node) +    goto :while4_top +  while4_end: +  if p_node goto :null58 +    Error("null pointer") +  null58: +  t.3 = [this+20] +  ntb = call :Tree.SetLeft(p_node t.3) +  if p_node goto :null59 +    Error("null pointer") +  null59: +  ntb = call :Tree.SetHas_Left(p_node 0) +  ret 1 + +func Tree.Search(this v_key) +  current_node = this +  cont = 1 +  ifound = 0 +  while5_top: +  if0 cont goto :while5_end +    if current_node goto :null60 +      Error("null pointer") +    null60: +    key_aux = call :Tree.GetKey(current_node) +    t.0 = LtS(v_key key_aux) +    if0 t.0 goto :if15_else +      if current_node goto :null61 +        Error("null pointer") +      null61: +      t.1 = call :Tree.GetHas_Left(current_node) +      if0 t.1 goto :if16_else +        if current_node goto :null62 +          Error("null pointer") +        null62: +        current_node = call :Tree.GetLeft(current_node) +        goto :if16_end +      if16_else: +        cont = 0 +      if16_end: +      goto :if15_end +    if15_else: +      t.2 = LtS(key_aux v_key) +      if0 t.2 goto :if17_else +        if current_node goto :null63 +          Error("null pointer") +        null63: +        t.3 = call :Tree.GetHas_Right(current_node) +        if0 t.3 goto :if18_else +          if current_node goto :null64 +            Error("null pointer") +          null64: +          current_node = call :Tree.GetRight(current_node) +          goto :if18_end +        if18_else: +          cont = 0 +        if18_end: +        goto :if17_end +      if17_else: +        ifound = 1 +        cont = 0 +      if17_end: +    if15_end: +    goto :while5_top +  while5_end: +  ret ifound + +func Tree.Print(this) +  current_node = this +  ntb = call :Tree.RecPrint(this current_node) +  ret 1 + +func Tree.RecPrint(this node) +  if node goto :null65 +    Error("null pointer") +  null65: +  t.0 = call :Tree.GetHas_Left(node) +  if0 t.0 goto :if19_else +    if node goto :null66 +      Error("null pointer") +    null66: +    t.1 = call :Tree.GetLeft(node) +    ntb = call :Tree.RecPrint(this t.1) +    goto :if19_end +  if19_else: +    ntb = 1 +  if19_end: +  if node goto :null67 +    Error("null pointer") +  null67: +  t.2 = call :Tree.GetKey(node) +  PrintIntS(t.2) +  if node goto :null68 +    Error("null pointer") +  null68: +  t.3 = call :Tree.GetHas_Right(node) +  if0 t.3 goto :if20_else +    if node goto :null69 +      Error("null pointer") +    null69: +    t.4 = call :Tree.GetRight(node) +    ntb = call :Tree.RecPrint(this t.4) +    goto :if20_end +  if20_else: +    ntb = 1 +  if20_end: +  ret 1 + +func Tree.accept(this v) +  PrintIntS(333) +  if v goto :null70 +    Error("null pointer") +  null70: +  t.0 = [v] +  t.0 = [t.0+0] +  nti = call t.0(v this) +  ret 0 + +func Visitor.visit(this n) +  if n goto :null71 +    Error("null pointer") +  null71: +  t.0 = call :Tree.GetHas_Right(n) +  if0 t.0 goto :if21_else +    if n goto :null72 +      Error("null pointer") +    null72: +    t.1 = call :Tree.GetRight(n) +    [this+8] = t.1 +    t.2 = [this+8] +    if t.2 goto :null73 +      Error("null pointer") +    null73: +    nti = call :Tree.accept(t.2 this) +    goto :if21_end +  if21_else: +    nti = 0 +  if21_end: +  if n goto :null74 +    Error("null pointer") +  null74: +  t.3 = call :Tree.GetHas_Left(n) +  if0 t.3 goto :if22_else +    if n goto :null75 +      Error("null pointer") +    null75: +    t.4 = call :Tree.GetLeft(n) +    [this+4] = t.4 +    t.5 = [this+4] +    if t.5 goto :null76 +      Error("null pointer") +    null76: +    nti = call :Tree.accept(t.5 this) +    goto :if22_end +  if22_else: +    nti = 0 +  if22_end: +  ret 0 + +func MyVisitor.visit(this n) +  if n goto :null77 +    Error("null pointer") +  null77: +  t.0 = call :Tree.GetHas_Right(n) +  if0 t.0 goto :if23_else +    if n goto :null78 +      Error("null pointer") +    null78: +    t.1 = call :Tree.GetRight(n) +    [this+8] = t.1 +    t.2 = [this+8] +    if t.2 goto :null79 +      Error("null pointer") +    null79: +    nti = call :Tree.accept(t.2 this) +    goto :if23_end +  if23_else: +    nti = 0 +  if23_end: +  if n goto :null80 +    Error("null pointer") +  null80: +  t.3 = call :Tree.GetKey(n) +  PrintIntS(t.3) +  if n goto :null81 +    Error("null pointer") +  null81: +  t.4 = call :Tree.GetHas_Left(n) +  if0 t.4 goto :if24_else +    if n goto :null82 +      Error("null pointer") +    null82: +    t.5 = call :Tree.GetLeft(n) +    [this+4] = t.5 +    t.6 = [this+4] +    if t.6 goto :null83 +      Error("null pointer") +    null83: +    nti = call :Tree.accept(t.6 this) +    goto :if24_end +  if24_else: +    nti = 0 +  if24_end: +  ret 0 diff --git a/boil/tests/TreeVisitor.vapor b/boil/tests/TreeVisitor.vapor new file mode 100644 index 0000000..d8aa63b --- /dev/null +++ b/boil/tests/TreeVisitor.vapor @@ -0,0 +1,855 @@ + +const vmt_TV +  :TV.Start + +const vmt_Tree +  :Tree.Init +  :Tree.SetRight +  :Tree.SetLeft +  :Tree.GetRight +  :Tree.GetLeft +  :Tree.GetKey +  :Tree.SetKey +  :Tree.GetHas_Right +  :Tree.GetHas_Left +  :Tree.SetHas_Left +  :Tree.SetHas_Right +  :Tree.Compare +  :Tree.Insert +  :Tree.Delete +  :Tree.Remove +  :Tree.RemoveRight +  :Tree.RemoveLeft +  :Tree.Search +  :Tree.Print +  :Tree.RecPrint +  :Tree.accept + +const vmt_Visitor +  :Visitor.visit + +const vmt_MyVisitor +  :MyVisitor.visit + + +func Main() +  t.0 = HeapAllocZ(4) +  [t.0] = :vmt_TV +  if t.0 goto :null1 +    Error("null pointer") +  null1: +  t.1 = [t.0] +  t.1 = [t.1+0] +  t.2 = call t.1(t.0) +  PrintIntS(t.2) +  ret + +func TV.Start(this) +  t.0 = HeapAllocZ(28) +  [t.0] = :vmt_Tree +  root = t.0 +  if root goto :null2 +    Error("null pointer") +  null2: +  t.1 = [root] +  t.1 = [t.1+0] +  ntb = call t.1(root 16) +  if root goto :null3 +    Error("null pointer") +  null3: +  t.2 = [root] +  t.2 = [t.2+72] +  ntb = call t.2(root) +  PrintIntS(100000000) +  if root goto :null4 +    Error("null pointer") +  null4: +  t.3 = [root] +  t.3 = [t.3+48] +  ntb = call t.3(root 8) +  if root goto :null5 +    Error("null pointer") +  null5: +  t.4 = [root] +  t.4 = [t.4+48] +  ntb = call t.4(root 24) +  if root goto :null6 +    Error("null pointer") +  null6: +  t.5 = [root] +  t.5 = [t.5+48] +  ntb = call t.5(root 4) +  if root goto :null7 +    Error("null pointer") +  null7: +  t.6 = [root] +  t.6 = [t.6+48] +  ntb = call t.6(root 12) +  if root goto :null8 +    Error("null pointer") +  null8: +  t.7 = [root] +  t.7 = [t.7+48] +  ntb = call t.7(root 20) +  if root goto :null9 +    Error("null pointer") +  null9: +  t.8 = [root] +  t.8 = [t.8+48] +  ntb = call t.8(root 28) +  if root goto :null10 +    Error("null pointer") +  null10: +  t.9 = [root] +  t.9 = [t.9+48] +  ntb = call t.9(root 14) +  if root goto :null11 +    Error("null pointer") +  null11: +  t.10 = [root] +  t.10 = [t.10+72] +  ntb = call t.10(root) +  PrintIntS(100000000) +  t.11 = HeapAllocZ(12) +  [t.11] = :vmt_MyVisitor +  v = t.11 +  PrintIntS(50000000) +  if root goto :null12 +    Error("null pointer") +  null12: +  t.12 = [root] +  t.12 = [t.12+80] +  nti = call t.12(root v) +  PrintIntS(100000000) +  if root goto :null13 +    Error("null pointer") +  null13: +  t.13 = [root] +  t.13 = [t.13+68] +  t.14 = call t.13(root 24) +  PrintIntS(t.14) +  if root goto :null14 +    Error("null pointer") +  null14: +  t.15 = [root] +  t.15 = [t.15+68] +  t.16 = call t.15(root 12) +  PrintIntS(t.16) +  if root goto :null15 +    Error("null pointer") +  null15: +  t.17 = [root] +  t.17 = [t.17+68] +  t.18 = call t.17(root 16) +  PrintIntS(t.18) +  if root goto :null16 +    Error("null pointer") +  null16: +  t.19 = [root] +  t.19 = [t.19+68] +  t.20 = call t.19(root 50) +  PrintIntS(t.20) +  if root goto :null17 +    Error("null pointer") +  null17: +  t.21 = [root] +  t.21 = [t.21+68] +  t.22 = call t.21(root 12) +  PrintIntS(t.22) +  if root goto :null18 +    Error("null pointer") +  null18: +  t.23 = [root] +  t.23 = [t.23+52] +  ntb = call t.23(root 12) +  if root goto :null19 +    Error("null pointer") +  null19: +  t.24 = [root] +  t.24 = [t.24+72] +  ntb = call t.24(root) +  if root goto :null20 +    Error("null pointer") +  null20: +  t.25 = [root] +  t.25 = [t.25+68] +  t.26 = call t.25(root 12) +  PrintIntS(t.26) +  ret 0 + +func Tree.Init(this v_key) +  [this+12] = v_key +  [this+16] = 0 +  [this+20] = 0 +  ret 1 + +func Tree.SetRight(this rn) +  [this+8] = rn +  ret 1 + +func Tree.SetLeft(this ln) +  [this+4] = ln +  ret 1 + +func Tree.GetRight(this) +  t.0 = [this+8] +  ret t.0 + +func Tree.GetLeft(this) +  t.0 = [this+4] +  ret t.0 + +func Tree.GetKey(this) +  t.0 = [this+12] +  ret t.0 + +func Tree.SetKey(this v_key) +  [this+12] = v_key +  ret 1 + +func Tree.GetHas_Right(this) +  t.0 = [this+20] +  ret t.0 + +func Tree.GetHas_Left(this) +  t.0 = [this+16] +  ret t.0 + +func Tree.SetHas_Left(this val) +  [this+16] = val +  ret 1 + +func Tree.SetHas_Right(this val) +  [this+20] = val +  ret 1 + +func Tree.Compare(this num1 num2) +  ntb = 0 +  nti = Add(num2 1) +  t.0 = LtS(num1 num2) +  if0 t.0 goto :if1_else +    ntb = 0 +    goto :if1_end +  if1_else: +    t.1 = LtS(num1 nti) +    t.2 = Sub(1 t.1) +    if0 t.2 goto :if2_else +      ntb = 0 +      goto :if2_end +    if2_else: +      ntb = 1 +    if2_end: +  if1_end: +  ret ntb + +func Tree.Insert(this v_key) +  t.0 = HeapAllocZ(28) +  [t.0] = :vmt_Tree +  new_node = t.0 +  if new_node goto :null21 +    Error("null pointer") +  null21: +  t.1 = [new_node] +  t.1 = [t.1+0] +  ntb = call t.1(new_node v_key) +  current_node = this +  cont = 1 +  while1_top: +  if0 cont goto :while1_end +    if current_node goto :null22 +      Error("null pointer") +    null22: +    t.2 = [current_node] +    t.2 = [t.2+20] +    key_aux = call t.2(current_node) +    t.3 = LtS(v_key key_aux) +    if0 t.3 goto :if3_else +      if current_node goto :null23 +        Error("null pointer") +      null23: +      t.4 = [current_node] +      t.4 = [t.4+32] +      t.5 = call t.4(current_node) +      if0 t.5 goto :if4_else +        if current_node goto :null24 +          Error("null pointer") +        null24: +        t.6 = [current_node] +        t.6 = [t.6+16] +        current_node = call t.6(current_node) +        goto :if4_end +      if4_else: +        cont = 0 +        if current_node goto :null25 +          Error("null pointer") +        null25: +        t.7 = [current_node] +        t.7 = [t.7+36] +        ntb = call t.7(current_node 1) +        if current_node goto :null26 +          Error("null pointer") +        null26: +        t.8 = [current_node] +        t.8 = [t.8+8] +        ntb = call t.8(current_node new_node) +      if4_end: +      goto :if3_end +    if3_else: +      if current_node goto :null27 +        Error("null pointer") +      null27: +      t.9 = [current_node] +      t.9 = [t.9+28] +      t.10 = call t.9(current_node) +      if0 t.10 goto :if5_else +        if current_node goto :null28 +          Error("null pointer") +        null28: +        t.11 = [current_node] +        t.11 = [t.11+12] +        current_node = call t.11(current_node) +        goto :if5_end +      if5_else: +        cont = 0 +        if current_node goto :null29 +          Error("null pointer") +        null29: +        t.12 = [current_node] +        t.12 = [t.12+40] +        ntb = call t.12(current_node 1) +        if current_node goto :null30 +          Error("null pointer") +        null30: +        t.13 = [current_node] +        t.13 = [t.13+4] +        ntb = call t.13(current_node new_node) +      if5_end: +    if3_end: +    goto :while1_top +  while1_end: +  ret 1 + +func Tree.Delete(this v_key) +  current_node = this +  parent_node = this +  cont = 1 +  found = 0 +  is_root = 1 +  while2_top: +  if0 cont goto :while2_end +    if current_node goto :null31 +      Error("null pointer") +    null31: +    t.0 = [current_node] +    t.0 = [t.0+20] +    key_aux = call t.0(current_node) +    t.1 = LtS(v_key key_aux) +    if0 t.1 goto :if6_else +      if current_node goto :null32 +        Error("null pointer") +      null32: +      t.2 = [current_node] +      t.2 = [t.2+32] +      t.3 = call t.2(current_node) +      if0 t.3 goto :if7_else +        parent_node = current_node +        if current_node goto :null33 +          Error("null pointer") +        null33: +        t.4 = [current_node] +        t.4 = [t.4+16] +        current_node = call t.4(current_node) +        goto :if7_end +      if7_else: +        cont = 0 +      if7_end: +      goto :if6_end +    if6_else: +      t.5 = LtS(key_aux v_key) +      if0 t.5 goto :if8_else +        if current_node goto :null34 +          Error("null pointer") +        null34: +        t.6 = [current_node] +        t.6 = [t.6+28] +        t.7 = call t.6(current_node) +        if0 t.7 goto :if9_else +          parent_node = current_node +          if current_node goto :null35 +            Error("null pointer") +          null35: +          t.8 = [current_node] +          t.8 = [t.8+12] +          current_node = call t.8(current_node) +          goto :if9_end +        if9_else: +          cont = 0 +        if9_end: +        goto :if8_end +      if8_else: +        if0 is_root goto :if10_else +          if current_node goto :null36 +            Error("null pointer") +          null36: +          t.10 = [current_node] +          t.10 = [t.10+28] +          t.11 = call t.10(current_node) +          t.12 = Sub(1 t.11) +          if0 t.12 goto :ss1_else +            if current_node goto :null37 +              Error("null pointer") +            null37: +            t.13 = [current_node] +            t.13 = [t.13+32] +            t.14 = call t.13(current_node) +            t.9 = Sub(1 t.14) +            goto :ss1_end +          ss1_else: +            t.9 = 0 +          ss1_end: +          if0 t.9 goto :if11_else +            ntb = 1 +            goto :if11_end +          if11_else: +            t.15 = [this] +            t.15 = [t.15+56] +            ntb = call t.15(this parent_node current_node) +          if11_end: +          goto :if10_end +        if10_else: +          t.16 = [this] +          t.16 = [t.16+56] +          ntb = call t.16(this parent_node current_node) +        if10_end: +        found = 1 +        cont = 0 +      if8_end: +    if6_end: +    is_root = 0 +    goto :while2_top +  while2_end: +  ret found + +func Tree.Remove(this p_node c_node) +  if c_node goto :null38 +    Error("null pointer") +  null38: +  t.0 = [c_node] +  t.0 = [t.0+32] +  t.1 = call t.0(c_node) +  if0 t.1 goto :if12_else +    t.2 = [this] +    t.2 = [t.2+64] +    ntb = call t.2(this p_node c_node) +    goto :if12_end +  if12_else: +    if c_node goto :null39 +      Error("null pointer") +    null39: +    t.3 = [c_node] +    t.3 = [t.3+28] +    t.4 = call t.3(c_node) +    if0 t.4 goto :if13_else +      t.5 = [this] +      t.5 = [t.5+60] +      ntb = call t.5(this p_node c_node) +      goto :if13_end +    if13_else: +      if c_node goto :null40 +        Error("null pointer") +      null40: +      t.6 = [c_node] +      t.6 = [t.6+20] +      auxkey1 = call t.6(c_node) +      if p_node goto :null41 +        Error("null pointer") +      null41: +      t.7 = [p_node] +      t.7 = [t.7+16] +      t.8 = call t.7(p_node) +      if t.8 goto :null42 +        Error("null pointer") +      null42: +      t.9 = [t.8] +      t.9 = [t.9+20] +      auxkey2 = call t.9(t.8) +      t.10 = [this] +      t.10 = [t.10+44] +      t.11 = call t.10(this auxkey1 auxkey2) +      if0 t.11 goto :if14_else +        if p_node goto :null43 +          Error("null pointer") +        null43: +        t.12 = [p_node] +        t.12 = [t.12+8] +        t.13 = [this+24] +        ntb = call t.12(p_node t.13) +        if p_node goto :null44 +          Error("null pointer") +        null44: +        t.14 = [p_node] +        t.14 = [t.14+36] +        ntb = call t.14(p_node 0) +        goto :if14_end +      if14_else: +        if p_node goto :null45 +          Error("null pointer") +        null45: +        t.15 = [p_node] +        t.15 = [t.15+4] +        t.16 = [this+24] +        ntb = call t.15(p_node t.16) +        if p_node goto :null46 +          Error("null pointer") +        null46: +        t.17 = [p_node] +        t.17 = [t.17+40] +        ntb = call t.17(p_node 0) +      if14_end: +    if13_end: +  if12_end: +  ret 1 + +func Tree.RemoveRight(this p_node c_node) +  while3_top: +  if c_node goto :null47 +    Error("null pointer") +  null47: +  t.0 = [c_node] +  t.0 = [t.0+28] +  t.1 = call t.0(c_node) +  if0 t.1 goto :while3_end +    if c_node goto :null48 +      Error("null pointer") +    null48: +    t.2 = [c_node] +    t.2 = [t.2+24] +    if c_node goto :null49 +      Error("null pointer") +    null49: +    t.3 = [c_node] +    t.3 = [t.3+12] +    t.4 = call t.3(c_node) +    if t.4 goto :null50 +      Error("null pointer") +    null50: +    t.5 = [t.4] +    t.5 = [t.5+20] +    t.6 = call t.5(t.4) +    ntb = call t.2(c_node t.6) +    p_node = c_node +    if c_node goto :null51 +      Error("null pointer") +    null51: +    t.7 = [c_node] +    t.7 = [t.7+12] +    c_node = call t.7(c_node) +    goto :while3_top +  while3_end: +  if p_node goto :null52 +    Error("null pointer") +  null52: +  t.8 = [p_node] +  t.8 = [t.8+4] +  t.9 = [this+24] +  ntb = call t.8(p_node t.9) +  if p_node goto :null53 +    Error("null pointer") +  null53: +  t.10 = [p_node] +  t.10 = [t.10+40] +  ntb = call t.10(p_node 0) +  ret 1 + +func Tree.RemoveLeft(this p_node c_node) +  while4_top: +  if c_node goto :null54 +    Error("null pointer") +  null54: +  t.0 = [c_node] +  t.0 = [t.0+32] +  t.1 = call t.0(c_node) +  if0 t.1 goto :while4_end +    if c_node goto :null55 +      Error("null pointer") +    null55: +    t.2 = [c_node] +    t.2 = [t.2+24] +    if c_node goto :null56 +      Error("null pointer") +    null56: +    t.3 = [c_node] +    t.3 = [t.3+16] +    t.4 = call t.3(c_node) +    if t.4 goto :null57 +      Error("null pointer") +    null57: +    t.5 = [t.4] +    t.5 = [t.5+20] +    t.6 = call t.5(t.4) +    ntb = call t.2(c_node t.6) +    p_node = c_node +    if c_node goto :null58 +      Error("null pointer") +    null58: +    t.7 = [c_node] +    t.7 = [t.7+16] +    c_node = call t.7(c_node) +    goto :while4_top +  while4_end: +  if p_node goto :null59 +    Error("null pointer") +  null59: +  t.8 = [p_node] +  t.8 = [t.8+8] +  t.9 = [this+24] +  ntb = call t.8(p_node t.9) +  if p_node goto :null60 +    Error("null pointer") +  null60: +  t.10 = [p_node] +  t.10 = [t.10+36] +  ntb = call t.10(p_node 0) +  ret 1 + +func Tree.Search(this v_key) +  current_node = this +  cont = 1 +  ifound = 0 +  while5_top: +  if0 cont goto :while5_end +    if current_node goto :null61 +      Error("null pointer") +    null61: +    t.0 = [current_node] +    t.0 = [t.0+20] +    key_aux = call t.0(current_node) +    t.1 = LtS(v_key key_aux) +    if0 t.1 goto :if15_else +      if current_node goto :null62 +        Error("null pointer") +      null62: +      t.2 = [current_node] +      t.2 = [t.2+32] +      t.3 = call t.2(current_node) +      if0 t.3 goto :if16_else +        if current_node goto :null63 +          Error("null pointer") +        null63: +        t.4 = [current_node] +        t.4 = [t.4+16] +        current_node = call t.4(current_node) +        goto :if16_end +      if16_else: +        cont = 0 +      if16_end: +      goto :if15_end +    if15_else: +      t.5 = LtS(key_aux v_key) +      if0 t.5 goto :if17_else +        if current_node goto :null64 +          Error("null pointer") +        null64: +        t.6 = [current_node] +        t.6 = [t.6+28] +        t.7 = call t.6(current_node) +        if0 t.7 goto :if18_else +          if current_node goto :null65 +            Error("null pointer") +          null65: +          t.8 = [current_node] +          t.8 = [t.8+12] +          current_node = call t.8(current_node) +          goto :if18_end +        if18_else: +          cont = 0 +        if18_end: +        goto :if17_end +      if17_else: +        ifound = 1 +        cont = 0 +      if17_end: +    if15_end: +    goto :while5_top +  while5_end: +  ret ifound + +func Tree.Print(this) +  current_node = this +  t.0 = [this] +  t.0 = [t.0+76] +  ntb = call t.0(this current_node) +  ret 1 + +func Tree.RecPrint(this node) +  if node goto :null66 +    Error("null pointer") +  null66: +  t.0 = [node] +  t.0 = [t.0+32] +  t.1 = call t.0(node) +  if0 t.1 goto :if19_else +    t.2 = [this] +    t.2 = [t.2+76] +    if node goto :null67 +      Error("null pointer") +    null67: +    t.3 = [node] +    t.3 = [t.3+16] +    t.4 = call t.3(node) +    ntb = call t.2(this t.4) +    goto :if19_end +  if19_else: +    ntb = 1 +  if19_end: +  if node goto :null68 +    Error("null pointer") +  null68: +  t.5 = [node] +  t.5 = [t.5+20] +  t.6 = call t.5(node) +  PrintIntS(t.6) +  if node goto :null69 +    Error("null pointer") +  null69: +  t.7 = [node] +  t.7 = [t.7+28] +  t.8 = call t.7(node) +  if0 t.8 goto :if20_else +    t.9 = [this] +    t.9 = [t.9+76] +    if node goto :null70 +      Error("null pointer") +    null70: +    t.10 = [node] +    t.10 = [t.10+12] +    t.11 = call t.10(node) +    ntb = call t.9(this t.11) +    goto :if20_end +  if20_else: +    ntb = 1 +  if20_end: +  ret 1 + +func Tree.accept(this v) +  PrintIntS(333) +  if v goto :null71 +    Error("null pointer") +  null71: +  t.0 = [v] +  t.0 = [t.0+0] +  nti = call t.0(v this) +  ret 0 + +func Visitor.visit(this n) +  if n goto :null72 +    Error("null pointer") +  null72: +  t.0 = [n] +  t.0 = [t.0+28] +  t.1 = call t.0(n) +  if0 t.1 goto :if21_else +    if n goto :null73 +      Error("null pointer") +    null73: +    t.2 = [n] +    t.2 = [t.2+12] +    t.3 = call t.2(n) +    [this+8] = t.3 +    t.4 = [this+8] +    if t.4 goto :null74 +      Error("null pointer") +    null74: +    t.5 = [t.4] +    t.5 = [t.5+80] +    nti = call t.5(t.4 this) +    goto :if21_end +  if21_else: +    nti = 0 +  if21_end: +  if n goto :null75 +    Error("null pointer") +  null75: +  t.6 = [n] +  t.6 = [t.6+32] +  t.7 = call t.6(n) +  if0 t.7 goto :if22_else +    if n goto :null76 +      Error("null pointer") +    null76: +    t.8 = [n] +    t.8 = [t.8+16] +    t.9 = call t.8(n) +    [this+4] = t.9 +    t.10 = [this+4] +    if t.10 goto :null77 +      Error("null pointer") +    null77: +    t.11 = [t.10] +    t.11 = [t.11+80] +    nti = call t.11(t.10 this) +    goto :if22_end +  if22_else: +    nti = 0 +  if22_end: +  ret 0 + +func MyVisitor.visit(this n) +  if n goto :null78 +    Error("null pointer") +  null78: +  t.0 = [n] +  t.0 = [t.0+28] +  t.1 = call t.0(n) +  if0 t.1 goto :if23_else +    if n goto :null79 +      Error("null pointer") +    null79: +    t.2 = [n] +    t.2 = [t.2+12] +    t.3 = call t.2(n) +    [this+8] = t.3 +    t.4 = [this+8] +    if t.4 goto :null80 +      Error("null pointer") +    null80: +    t.5 = [t.4] +    t.5 = [t.5+80] +    nti = call t.5(t.4 this) +    goto :if23_end +  if23_else: +    nti = 0 +  if23_end: +  if n goto :null81 +    Error("null pointer") +  null81: +  t.6 = [n] +  t.6 = [t.6+20] +  t.7 = call t.6(n) +  PrintIntS(t.7) +  if n goto :null82 +    Error("null pointer") +  null82: +  t.8 = [n] +  t.8 = [t.8+32] +  t.9 = call t.8(n) +  if0 t.9 goto :if24_else +    if n goto :null83 +      Error("null pointer") +    null83: +    t.10 = [n] +    t.10 = [t.10+16] +    t.11 = call t.10(n) +    [this+4] = t.11 +    t.12 = [this+4] +    if t.12 goto :null84 +      Error("null pointer") +    null84: +    t.13 = [t.12] +    t.13 = [t.13+80] +    nti = call t.13(t.12 this) +    goto :if24_end +  if24_else: +    nti = 0 +  if24_end: +  ret 0 diff --git a/boil/tests/ex1.java b/boil/tests/ex1.java new file mode 100644 index 0000000..22f0aa0 --- /dev/null +++ b/boil/tests/ex1.java @@ -0,0 +1,11 @@ +class ex1{ +    public static void main(String[] a){ +        System.out.println(1); +    } +} + +class A { +    public int foo() { +        return 1 ; +    } +} diff --git a/boil/tests/ex1.vapor b/boil/tests/ex1.vapor new file mode 100644 index 0000000..bcfb38c --- /dev/null +++ b/boil/tests/ex1.vapor @@ -0,0 +1,5 @@ +const functable_A +   :A_foo + +func A_foo(this) +   ret
\ No newline at end of file diff --git a/boil/tests/ex2.java b/boil/tests/ex2.java new file mode 100644 index 0000000..986ca7d --- /dev/null +++ b/boil/tests/ex2.java @@ -0,0 +1,7 @@ +class A { +    void foo() { } +} + +class B { +    void bar() { } +} diff --git a/boil/tests/ex2.vapor b/boil/tests/ex2.vapor new file mode 100644 index 0000000..25811b3 --- /dev/null +++ b/boil/tests/ex2.vapor @@ -0,0 +1,11 @@ +const functable_A +   :A_foo + +const functable_B +   :B_bar + +func A_foo (this) +   ret + +func B_bar(this) +   ret
\ No newline at end of file diff --git a/boil/tests/ex29.java b/boil/tests/ex29.java new file mode 100644 index 0000000..30ea154 --- /dev/null +++ b/boil/tests/ex29.java @@ -0,0 +1,5 @@ +class ex29 { +    public static void main(String[] a) { +        int x ; +    } +} diff --git a/boil/tests/ex30.java b/boil/tests/ex30.java new file mode 100644 index 0000000..4a5064d --- /dev/null +++ b/boil/tests/ex30.java @@ -0,0 +1,11 @@ +class ex30 { +    public static void main(String[] a) { +        int x ; +    } +} + +class A { +    public int foo() { +        return 22 ; +    } +} diff --git a/boil/tests/ex30.vapor b/boil/tests/ex30.vapor new file mode 100644 index 0000000..200baee --- /dev/null +++ b/boil/tests/ex30.vapor @@ -0,0 +1,3 @@ +func Main() +   +  ret
\ No newline at end of file diff --git a/boil/tests/ex31.java b/boil/tests/ex31.java new file mode 100644 index 0000000..d5a6980 --- /dev/null +++ b/boil/tests/ex31.java @@ -0,0 +1,16 @@ +class ex31 { +    public static void main(String[] a) { +        A a ; +        a = new A() ; +    } +} + +class A { +    public int foo() { +        return 22 ; +    } + +    public int bar() { +        return 42 ; +    } +} diff --git a/boil/tests/ex32.java b/boil/tests/ex32.java new file mode 100644 index 0000000..5e421c4 --- /dev/null +++ b/boil/tests/ex32.java @@ -0,0 +1,16 @@ +class ex31 { +    public static void main(String[] a) { +        A a ; +        a = new A() ; +        System.out.println(a.bar()) ; +    } +} + +class A { +    public int foo() { +        return 22 ; +    } +    public int bar() { +        return 42 ; +    } +} diff --git a/boil/tests/ex33.java b/boil/tests/ex33.java new file mode 100644 index 0000000..53e369f --- /dev/null +++ b/boil/tests/ex33.java @@ -0,0 +1,13 @@ +class ex31 { +    public static void main(String[] a) { +        A a ; +        a = new A() ; +        System.out.println(a.foo(12 + 13)) ; +    } +} + +class A { +    public int foo(int a) { +        return 22 ; +    } +} | 
