summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/BinaryTree-error.java334
-rw-r--r--base/BinaryTree.java334
-rw-r--r--base/BinaryTree.names.vaporm996
-rw-r--r--base/BinaryTree.opt.names.vaporm797
-rw-r--r--base/BinaryTree.opt.regalloc451
-rw-r--r--base/BinaryTree.opt.vapor526
-rw-r--r--base/BinaryTree.opt.vaporm797
-rw-r--r--base/BinaryTree.regalloc703
-rw-r--r--base/BinaryTree.vapor719
-rw-r--r--base/BinaryTree.vaporm996
-rw-r--r--base/Branch-error.java11
-rw-r--r--base/Branch.java11
-rw-r--r--base/BubbleSort-error.java93
-rw-r--r--base/BubbleSort.java93
-rw-r--r--base/BubbleSort.names.vaporm316
-rw-r--r--base/BubbleSort.opt.names.vaporm301
-rw-r--r--base/BubbleSort.opt.regalloc230
-rw-r--r--base/BubbleSort.opt.vapor277
-rw-r--r--base/BubbleSort.opt.vaporm301
-rw-r--r--base/BubbleSort.regalloc245
-rw-r--r--base/BubbleSort.vapor292
-rw-r--r--base/BubbleSort.vaporm316
-rw-r--r--base/DeclareNone.java6
-rw-r--r--base/Empty.java5
-rw-r--r--base/Factorial-error.java16
-rw-r--r--base/Factorial.java16
-rw-r--r--base/Factorial.names.vaporm40
-rw-r--r--base/Factorial.opt.names.vaporm30
-rw-r--r--base/Factorial.opt.regalloc33
-rw-r--r--base/Factorial.opt.vapor20
-rw-r--r--base/Factorial.opt.vaporm30
-rw-r--r--base/Factorial.regalloc42
-rw-r--r--base/Factorial.vapor30
-rw-r--r--base/Factorial.vaporm40
-rw-r--r--base/FactorialEdit.java20
-rw-r--r--base/IsPositive.java29
-rw-r--r--base/LinearSearch-error.java99
-rw-r--r--base/LinearSearch.java99
-rw-r--r--base/LinearSearch.names.vaporm182
-rw-r--r--base/LinearSearch.opt.names.vaporm162
-rw-r--r--base/LinearSearch.opt.regalloc169
-rw-r--r--base/LinearSearch.opt.vapor130
-rw-r--r--base/LinearSearch.opt.vaporm162
-rw-r--r--base/LinearSearch.regalloc193
-rw-r--r--base/LinearSearch.vapor150
-rw-r--r--base/LinearSearch.vaporm182
-rw-r--r--base/LinkedList-error.java278
-rw-r--r--base/LinkedList.java278
-rw-r--r--base/LinkedList.names.vaporm698
-rw-r--r--base/LinkedList.opt.names.vaporm562
-rw-r--r--base/LinkedList.opt.regalloc362
-rw-r--r--base/LinkedList.opt.vapor373
-rw-r--r--base/LinkedList.opt.vaporm562
-rw-r--r--base/LinkedList.regalloc539
-rw-r--r--base/LinkedList.vapor505
-rw-r--r--base/LinkedList.vaporm698
-rw-r--r--base/MoreThan4-error.java29
-rw-r--r--base/MoreThan4.java29
-rw-r--r--base/MoreThan4.names.vaporm68
-rw-r--r--base/MoreThan4.opt.names.vaporm57
-rw-r--r--base/MoreThan4.opt.regalloc64
-rw-r--r--base/MoreThan4.opt.vapor27
-rw-r--r--base/MoreThan4.opt.vaporm57
-rw-r--r--base/MoreThan4.regalloc73
-rw-r--r--base/MoreThan4.vapor38
-rw-r--r--base/MoreThan4.vaporm68
-rw-r--r--base/NewNone.java9
-rw-r--r--base/Operator.java15
-rw-r--r--base/Printer-error.java5
-rw-r--r--base/Printer.java5
-rw-r--r--base/QuickSort-error.java112
-rw-r--r--base/QuickSort.java112
-rw-r--r--base/QuickSort.names.vaporm439
-rw-r--r--base/QuickSort.opt.names.vaporm418
-rw-r--r--base/QuickSort.opt.regalloc286
-rw-r--r--base/QuickSort.opt.vapor378
-rw-r--r--base/QuickSort.opt.vaporm418
-rw-r--r--base/QuickSort.regalloc313
-rw-r--r--base/QuickSort.vapor399
-rw-r--r--base/QuickSort.vaporm439
-rw-r--r--base/RetrieveInteger.java17
-rw-r--r--base/ShortCircuit.opt.vapor215
-rw-r--r--base/ShortCircuit.vapor128
-rw-r--r--base/SimpleArithmetic.java6
-rw-r--r--base/SimpleArray-error.java6
-rw-r--r--base/SimpleArray.java6
-rw-r--r--base/TreeVisitor-error.java376
-rw-r--r--base/TreeVisitor.java374
-rw-r--r--base/TreeVisitor.names.vaporm1174
-rw-r--r--base/TreeVisitor.opt.names.vaporm948
-rw-r--r--base/TreeVisitor.opt.regalloc539
-rw-r--r--base/TreeVisitor.opt.vapor635
-rw-r--r--base/TreeVisitor.opt.vaporm948
-rw-r--r--base/TreeVisitor.regalloc830
-rw-r--r--base/TreeVisitor.vapor855
-rw-r--r--base/TreeVisitor.vaporm1174
-rw-r--r--base/ex29.java5
-rw-r--r--base/ex30.java11
-rw-r--r--base/ex31.java16
-rw-r--r--base/ex32.java14
-rw-r--r--base/ex33.java23
-rw-r--r--base/ex34.java20
-rw-r--r--base/ex35.java11
-rw-r--r--base/ex36.java15
-rw-r--r--base/ex37.java20
-rw-r--r--base/ex38.java20
-rw-r--r--base/ex39.java12
-rw-r--r--base/ex40.java19
-rw-r--r--base/ex41.java25
-rw-r--r--base/ex42.java26
-rw-r--r--base/ex43.java22
-rw-r--r--base/ex44.java16
-rw-r--r--base/ex45.java19
-rw-r--r--base/ex46.java32
-rw-r--r--base/ex47.java24
-rw-r--r--base/ex48.java23
-rw-r--r--base/ex49.java26
-rw-r--r--base/ex50.java35
118 files changed, 28402 insertions, 0 deletions
diff --git a/base/BinaryTree-error.java b/base/BinaryTree-error.java
new file mode 100644
index 0000000..d9be857
--- /dev/null
+++ b/base/BinaryTree-error.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(); // TE, should be 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/base/BinaryTree.java b/base/BinaryTree.java
new file mode 100644
index 0000000..18d1464
--- /dev/null
+++ b/base/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/base/BinaryTree.names.vaporm b/base/BinaryTree.names.vaporm
new file mode 100644
index 0000000..e5785ee
--- /dev/null
+++ b/base/BinaryTree.names.vaporm
@@ -0,0 +1,996 @@
+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 [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(4)
+ [$t0{t.0}] = :vmt_BT
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func BT.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0{t.0} = HeapAllocZ(28)
+ [$t0{t.0}] = :vmt_Tree
+ $s0{root} = $t0{t.0}
+ if $s0{root} goto :null2
+ Error("null pointer")
+null2:
+ $t0{t.1} = [$s0{root}]
+ $t0{t.1} = [$t0{t.1}]
+ $a0 = $s0{root}
+ $a1 = 16
+ call $t0{t.1}
+ if $s0{root} goto :null3
+ Error("null pointer")
+null3:
+ $t0{t.2} = [$s0{root}]
+ $t0{t.2} = [$t0{t.2}+72]
+ $a0 = $s0{root}
+ call $t0{t.2}
+ PrintIntS(100000000)
+ if $s0{root} goto :null4
+ Error("null pointer")
+null4:
+ $t0{t.3} = [$s0{root}]
+ $t0{t.3} = [$t0{t.3}+48]
+ $a0 = $s0{root}
+ $a1 = 8
+ call $t0{t.3}
+ if $s0{root} goto :null5
+ Error("null pointer")
+null5:
+ $t0{t.4} = [$s0{root}]
+ $t0{t.4} = [$t0{t.4}+72]
+ $a0 = $s0{root}
+ call $t0{t.4}
+ if $s0{root} goto :null6
+ Error("null pointer")
+null6:
+ $t0{t.5} = [$s0{root}]
+ $t0{t.5} = [$t0{t.5}+48]
+ $a0 = $s0{root}
+ $a1 = 24
+ call $t0{t.5}
+ if $s0{root} goto :null7
+ Error("null pointer")
+null7:
+ $t0{t.6} = [$s0{root}]
+ $t0{t.6} = [$t0{t.6}+48]
+ $a0 = $s0{root}
+ $a1 = 4
+ call $t0{t.6}
+ if $s0{root} goto :null8
+ Error("null pointer")
+null8:
+ $t0{t.7} = [$s0{root}]
+ $t0{t.7} = [$t0{t.7}+48]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t0{t.7}
+ if $s0{root} goto :null9
+ Error("null pointer")
+null9:
+ $t0{t.8} = [$s0{root}]
+ $t0{t.8} = [$t0{t.8}+48]
+ $a0 = $s0{root}
+ $a1 = 20
+ call $t0{t.8}
+ if $s0{root} goto :null10
+ Error("null pointer")
+null10:
+ $t0{t.9} = [$s0{root}]
+ $t0{t.9} = [$t0{t.9}+48]
+ $a0 = $s0{root}
+ $a1 = 28
+ call $t0{t.9}
+ if $s0{root} goto :null11
+ Error("null pointer")
+null11:
+ $t0{t.10} = [$s0{root}]
+ $t0{t.10} = [$t0{t.10}+48]
+ $a0 = $s0{root}
+ $a1 = 14
+ call $t0{t.10}
+ if $s0{root} goto :null12
+ Error("null pointer")
+null12:
+ $t0{t.11} = [$s0{root}]
+ $t0{t.11} = [$t0{t.11}+72]
+ $a0 = $s0{root}
+ call $t0{t.11}
+ if $s0{root} goto :null13
+ Error("null pointer")
+null13:
+ $t0{t.12} = [$s0{root}]
+ $t0{t.12} = [$t0{t.12}+68]
+ $a0 = $s0{root}
+ $a1 = 24
+ call $t0{t.12}
+ $t0{t.13} = $v0
+ PrintIntS($t0{t.13})
+ if $s0{root} goto :null14
+ Error("null pointer")
+null14:
+ $t0{t.14} = [$s0{root}]
+ $t0{t.14} = [$t0{t.14}+68]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t0{t.14}
+ $t0{t.15} = $v0
+ PrintIntS($t0{t.15})
+ if $s0{root} goto :null15
+ Error("null pointer")
+null15:
+ $t0{t.16} = [$s0{root}]
+ $t0{t.16} = [$t0{t.16}+68]
+ $a0 = $s0{root}
+ $a1 = 16
+ call $t0{t.16}
+ $t0{t.17} = $v0
+ PrintIntS($t0{t.17})
+ if $s0{root} goto :null16
+ Error("null pointer")
+null16:
+ $t0{t.18} = [$s0{root}]
+ $t0{t.18} = [$t0{t.18}+68]
+ $a0 = $s0{root}
+ $a1 = 50
+ call $t0{t.18}
+ $t0{t.19} = $v0
+ PrintIntS($t0{t.19})
+ if $s0{root} goto :null17
+ Error("null pointer")
+null17:
+ $t0{t.20} = [$s0{root}]
+ $t0{t.20} = [$t0{t.20}+68]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t0{t.20}
+ $t0{t.21} = $v0
+ PrintIntS($t0{t.21})
+ if $s0{root} goto :null18
+ Error("null pointer")
+null18:
+ $t0{t.22} = [$s0{root}]
+ $t0{t.22} = [$t0{t.22}+52]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t0{t.22}
+ if $s0{root} goto :null19
+ Error("null pointer")
+null19:
+ $t0{t.23} = [$s0{root}]
+ $t0{t.23} = [$t0{t.23}+72]
+ $a0 = $s0{root}
+ call $t0{t.23}
+ if $s0{root} goto :null20
+ Error("null pointer")
+null20:
+ $t0{t.24} = [$s0{root}]
+ $t0{t.24} = [$t0{t.24}+68]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t0{t.24}
+ $t0{t.25} = $v0
+ PrintIntS($t0{t.25})
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+12] = $t1{v_key}
+ [$t0{this}+16] = 0
+ [$t0{this}+20] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{rn} = $a1
+ [$t0{this}+8] = $t1{rn}
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{ln} = $a1
+ [$t0{this}+4] = $t1{ln}
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+12]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+12] = $t1{v_key}
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+20]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+16]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+16] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+20] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0{num1} = $a1
+ $t1{num2} = $a2
+ $t2{nti} = Add($t1{num2} 1)
+ $t1{t.0} = LtS($t0{num1} $t1{num2})
+ if0 $t1{t.0} goto :if1_else
+ $t1{ntb} = 0
+ goto :if1_end
+if1_else:
+ $t2{t.1} = LtS($t0{num1} $t2{nti})
+ $t2{t.2} = Sub(1 $t2{t.1})
+ if0 $t2{t.2} goto :if2_else
+ $t1{ntb} = 0
+ goto :if2_end
+if2_else:
+ $t1{ntb} = 1
+if2_end:
+if1_end:
+ $v0 = $t1{ntb}
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $t0{t.0} = HeapAllocZ(28)
+ [$t0{t.0}] = :vmt_Tree
+ $s2{new_node} = $t0{t.0}
+ if $s2{new_node} goto :null21
+ Error("null pointer")
+null21:
+ $t0{t.1} = [$s2{new_node}]
+ $t0{t.1} = [$t0{t.1}]
+ $a0 = $s2{new_node}
+ $a1 = $s1{v_key}
+ call $t0{t.1}
+ $s0{current_node} = $s0{this}
+ $s3{cont} = 1
+while1_top:
+ if0 $s3{cont} goto :while1_end
+ if $s0{current_node} goto :null22
+ Error("null pointer")
+null22:
+ $t0{t.2} = [$s0{current_node}]
+ $t0{t.2} = [$t0{t.2}+20]
+ $a0 = $s0{current_node}
+ call $t0{t.2}
+ $t0{key_aux} = $v0
+ $t0{t.3} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t0{t.3} goto :if3_else
+ if $s0{current_node} goto :null23
+ Error("null pointer")
+null23:
+ $t0{t.4} = [$s0{current_node}]
+ $t0{t.4} = [$t0{t.4}+32]
+ $a0 = $s0{current_node}
+ call $t0{t.4}
+ $t0{t.5} = $v0
+ if0 $t0{t.5} goto :if4_else
+ if $s0{current_node} goto :null24
+ Error("null pointer")
+null24:
+ $t0{t.6} = [$s0{current_node}]
+ $t0{t.6} = [$t0{t.6}+16]
+ $a0 = $s0{current_node}
+ call $t0{t.6}
+ $s0{current_node} = $v0
+ goto :if4_end
+if4_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null25
+ Error("null pointer")
+null25:
+ $t0{t.7} = [$s0{current_node}]
+ $t0{t.7} = [$t0{t.7}+36]
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call $t0{t.7}
+ if $s0{current_node} goto :null26
+ Error("null pointer")
+null26:
+ $t0{t.8} = [$s0{current_node}]
+ $t0{t.8} = [$t0{t.8}+8]
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call $t0{t.8}
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0{current_node} goto :null27
+ Error("null pointer")
+null27:
+ $t0{t.9} = [$s0{current_node}]
+ $t0{t.9} = [$t0{t.9}+28]
+ $a0 = $s0{current_node}
+ call $t0{t.9}
+ $t0{t.10} = $v0
+ if0 $t0{t.10} goto :if5_else
+ if $s0{current_node} goto :null28
+ Error("null pointer")
+null28:
+ $t0{t.11} = [$s0{current_node}]
+ $t0{t.11} = [$t0{t.11}+12]
+ $a0 = $s0{current_node}
+ call $t0{t.11}
+ $s0{current_node} = $v0
+ goto :if5_end
+if5_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null29
+ Error("null pointer")
+null29:
+ $t0{t.12} = [$s0{current_node}]
+ $t0{t.12} = [$t0{t.12}+40]
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call $t0{t.12}
+ if $s0{current_node} goto :null30
+ Error("null pointer")
+null30:
+ $t0{t.13} = [$s0{current_node}]
+ $t0{t.13} = [$t0{t.13}+4]
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call $t0{t.13}
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $s2{current_node} = $s0{this}
+ $s3{parent_node} = $s0{this}
+ $s4{cont} = 1
+ $s5{found} = 0
+ $s6{is_root} = 1
+while2_top:
+ if0 $s4{cont} goto :while2_end
+ if $s2{current_node} goto :null31
+ Error("null pointer")
+null31:
+ $t0{t.0} = [$s2{current_node}]
+ $t0{t.0} = [$t0{t.0}+20]
+ $a0 = $s2{current_node}
+ call $t0{t.0}
+ $t0{key_aux} = $v0
+ $t1{t.1} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t1{t.1} goto :if6_else
+ if $s2{current_node} goto :null32
+ Error("null pointer")
+null32:
+ $t1{t.2} = [$s2{current_node}]
+ $t1{t.2} = [$t1{t.2}+32]
+ $a0 = $s2{current_node}
+ call $t1{t.2}
+ $t1{t.3} = $v0
+ if0 $t1{t.3} goto :if7_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null33
+ Error("null pointer")
+null33:
+ $t1{t.4} = [$s2{current_node}]
+ $t1{t.4} = [$t1{t.4}+16]
+ $a0 = $s2{current_node}
+ call $t1{t.4}
+ $s2{current_node} = $v0
+ goto :if7_end
+if7_else:
+ $s4{cont} = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0{t.5} = LtS($t0{key_aux} $s1{v_key})
+ if0 $t0{t.5} goto :if8_else
+ if $s2{current_node} goto :null34
+ Error("null pointer")
+null34:
+ $t0{t.6} = [$s2{current_node}]
+ $t0{t.6} = [$t0{t.6}+28]
+ $a0 = $s2{current_node}
+ call $t0{t.6}
+ $t0{t.7} = $v0
+ if0 $t0{t.7} goto :if9_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null35
+ Error("null pointer")
+null35:
+ $t0{t.8} = [$s2{current_node}]
+ $t0{t.8} = [$t0{t.8}+12]
+ $a0 = $s2{current_node}
+ call $t0{t.8}
+ $s2{current_node} = $v0
+ goto :if9_end
+if9_else:
+ $s4{cont} = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6{is_root} goto :if10_else
+ if $s2{current_node} goto :null36
+ Error("null pointer")
+null36:
+ $t0{t.10} = [$s2{current_node}]
+ $t0{t.10} = [$t0{t.10}+28]
+ $a0 = $s2{current_node}
+ call $t0{t.10}
+ $t0{t.11} = $v0
+ $t0{t.12} = Sub(1 $t0{t.11})
+ if0 $t0{t.12} goto :ss1_else
+ if $s2{current_node} goto :null37
+ Error("null pointer")
+null37:
+ $t0{t.13} = [$s2{current_node}]
+ $t0{t.13} = [$t0{t.13}+32]
+ $a0 = $s2{current_node}
+ call $t0{t.13}
+ $t0{t.14} = $v0
+ $t0{t.9} = Sub(1 $t0{t.14})
+ goto :ss1_end
+ss1_else:
+ $t0{t.9} = 0
+ss1_end:
+ if0 $t0{t.9} goto :if11_else
+ goto :if11_end
+if11_else:
+ $t0{t.15} = [$s0{this}]
+ $t0{t.15} = [$t0{t.15}+56]
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call $t0{t.15}
+if11_end:
+ goto :if10_end
+if10_else:
+ $t0{t.16} = [$s0{this}]
+ $t0{t.16} = [$t0{t.16}+56]
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call $t0{t.16}
+if10_end:
+ $s5{found} = 1
+ $s4{cont} = 0
+if8_end:
+if6_end:
+ $s6{is_root} = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5{found}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+ if $s2{c_node} goto :null38
+ Error("null pointer")
+null38:
+ $t0{t.0} = [$s2{c_node}]
+ $t0{t.0} = [$t0{t.0}+32]
+ $a0 = $s2{c_node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if12_else
+ $t0{t.2} = [$s0{this}]
+ $t0{t.2} = [$t0{t.2}+64]
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call $t0{t.2}
+ goto :if12_end
+if12_else:
+ if $s2{c_node} goto :null39
+ Error("null pointer")
+null39:
+ $t0{t.3} = [$s2{c_node}]
+ $t0{t.3} = [$t0{t.3}+28]
+ $a0 = $s2{c_node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ if0 $t0{t.4} goto :if13_else
+ $t0{t.5} = [$s0{this}]
+ $t0{t.5} = [$t0{t.5}+60]
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call $t0{t.5}
+ goto :if13_end
+if13_else:
+ if $s2{c_node} goto :null40
+ Error("null pointer")
+null40:
+ $t0{t.6} = [$s2{c_node}]
+ $t0{t.6} = [$t0{t.6}+20]
+ $a0 = $s2{c_node}
+ call $t0{t.6}
+ $s2{auxkey1} = $v0
+ if $s1{p_node} goto :null41
+ Error("null pointer")
+null41:
+ $t0{t.7} = [$s1{p_node}]
+ $t0{t.7} = [$t0{t.7}+16]
+ $a0 = $s1{p_node}
+ call $t0{t.7}
+ $t0{t.8} = $v0
+ if $t0{t.8} goto :null42
+ Error("null pointer")
+null42:
+ $t1{t.9} = [$t0{t.8}]
+ $t1{t.9} = [$t1{t.9}+20]
+ $a0 = $t0{t.8}
+ call $t1{t.9}
+ $t1{auxkey2} = $v0
+ $t0{t.10} = [$s0{this}]
+ $t0{t.10} = [$t0{t.10}+44]
+ $a0 = $s0{this}
+ $a1 = $s2{auxkey1}
+ $a2 = $t1{auxkey2}
+ call $t0{t.10}
+ $t0{t.11} = $v0
+ if0 $t0{t.11} goto :if14_else
+ if $s1{p_node} goto :null43
+ Error("null pointer")
+null43:
+ $t0{t.12} = [$s1{p_node}]
+ $t0{t.12} = [$t0{t.12}+8]
+ $t1{t.13} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t1{t.13}
+ call $t0{t.12}
+ if $s1{p_node} goto :null44
+ Error("null pointer")
+null44:
+ $t1{t.14} = [$s1{p_node}]
+ $t1{t.14} = [$t1{t.14}+36]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t1{t.14}
+ goto :if14_end
+if14_else:
+ if $s1{p_node} goto :null45
+ Error("null pointer")
+null45:
+ $t1{t.15} = [$s1{p_node}]
+ $t1{t.15} = [$t1{t.15}+4]
+ $t0{t.16} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.16}
+ call $t1{t.15}
+ if $s1{p_node} goto :null46
+ Error("null pointer")
+null46:
+ $t0{t.17} = [$s1{p_node}]
+ $t0{t.17} = [$t0{t.17}+40]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t0{t.17}
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while3_top:
+ if $s2{c_node} goto :null47
+ Error("null pointer")
+null47:
+ $t0{t.0} = [$s2{c_node}]
+ $t0{t.0} = [$t0{t.0}+28]
+ $a0 = $s2{c_node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :while3_end
+ if $s2{c_node} goto :null48
+ Error("null pointer")
+null48:
+ $s3{t.2} = [$s2{c_node}]
+ $s3{t.2} = [$s3{t.2}+24]
+ if $s2{c_node} goto :null49
+ Error("null pointer")
+null49:
+ $t0{t.3} = [$s2{c_node}]
+ $t0{t.3} = [$t0{t.3}+12]
+ $a0 = $s2{c_node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ if $t0{t.4} goto :null50
+ Error("null pointer")
+null50:
+ $t1{t.5} = [$t0{t.4}]
+ $t1{t.5} = [$t1{t.5}+20]
+ $a0 = $t0{t.4}
+ call $t1{t.5}
+ $t1{t.6} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t1{t.6}
+ call $s3{t.2}
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null51
+ Error("null pointer")
+null51:
+ $t1{t.7} = [$s2{c_node}]
+ $t1{t.7} = [$t1{t.7}+12]
+ $a0 = $s2{c_node}
+ call $t1{t.7}
+ $s2{c_node} = $v0
+ goto :while3_top
+while3_end:
+ if $s1{p_node} goto :null52
+ Error("null pointer")
+null52:
+ $t1{t.8} = [$s1{p_node}]
+ $t1{t.8} = [$t1{t.8}+4]
+ $t0{t.9} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.9}
+ call $t1{t.8}
+ if $s1{p_node} goto :null53
+ Error("null pointer")
+null53:
+ $t0{t.10} = [$s1{p_node}]
+ $t0{t.10} = [$t0{t.10}+40]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t0{t.10}
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while4_top:
+ if $s2{c_node} goto :null54
+ Error("null pointer")
+null54:
+ $t0{t.0} = [$s2{c_node}]
+ $t0{t.0} = [$t0{t.0}+32]
+ $a0 = $s2{c_node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :while4_end
+ if $s2{c_node} goto :null55
+ Error("null pointer")
+null55:
+ $s3{t.2} = [$s2{c_node}]
+ $s3{t.2} = [$s3{t.2}+24]
+ if $s2{c_node} goto :null56
+ Error("null pointer")
+null56:
+ $t0{t.3} = [$s2{c_node}]
+ $t0{t.3} = [$t0{t.3}+16]
+ $a0 = $s2{c_node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ if $t0{t.4} goto :null57
+ Error("null pointer")
+null57:
+ $t1{t.5} = [$t0{t.4}]
+ $t1{t.5} = [$t1{t.5}+20]
+ $a0 = $t0{t.4}
+ call $t1{t.5}
+ $t1{t.6} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t1{t.6}
+ call $s3{t.2}
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null58
+ Error("null pointer")
+null58:
+ $t1{t.7} = [$s2{c_node}]
+ $t1{t.7} = [$t1{t.7}+16]
+ $a0 = $s2{c_node}
+ call $t1{t.7}
+ $s2{c_node} = $v0
+ goto :while4_top
+while4_end:
+ if $s1{p_node} goto :null59
+ Error("null pointer")
+null59:
+ $t1{t.8} = [$s1{p_node}]
+ $t1{t.8} = [$t1{t.8}+8]
+ $t0{t.9} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.9}
+ call $t1{t.8}
+ if $s1{p_node} goto :null60
+ Error("null pointer")
+null60:
+ $t0{t.10} = [$s1{p_node}]
+ $t0{t.10} = [$t0{t.10}+36]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t0{t.10}
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0{this} = $a0
+ $s0{v_key} = $a1
+ $s1{current_node} = $t0{this}
+ $s2{cont} = 1
+ $s3{ifound} = 0
+while5_top:
+ if0 $s2{cont} goto :while5_end
+ if $s1{current_node} goto :null61
+ Error("null pointer")
+null61:
+ $t0{t.0} = [$s1{current_node}]
+ $t0{t.0} = [$t0{t.0}+20]
+ $a0 = $s1{current_node}
+ call $t0{t.0}
+ $t0{key_aux} = $v0
+ $t1{t.1} = LtS($s0{v_key} $t0{key_aux})
+ if0 $t1{t.1} goto :if15_else
+ if $s1{current_node} goto :null62
+ Error("null pointer")
+null62:
+ $t1{t.2} = [$s1{current_node}]
+ $t1{t.2} = [$t1{t.2}+32]
+ $a0 = $s1{current_node}
+ call $t1{t.2}
+ $t1{t.3} = $v0
+ if0 $t1{t.3} goto :if16_else
+ if $s1{current_node} goto :null63
+ Error("null pointer")
+null63:
+ $t1{t.4} = [$s1{current_node}]
+ $t1{t.4} = [$t1{t.4}+16]
+ $a0 = $s1{current_node}
+ call $t1{t.4}
+ $s1{current_node} = $v0
+ goto :if16_end
+if16_else:
+ $s2{cont} = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0{t.5} = LtS($t0{key_aux} $s0{v_key})
+ if0 $t0{t.5} goto :if17_else
+ if $s1{current_node} goto :null64
+ Error("null pointer")
+null64:
+ $t0{t.6} = [$s1{current_node}]
+ $t0{t.6} = [$t0{t.6}+28]
+ $a0 = $s1{current_node}
+ call $t0{t.6}
+ $t0{t.7} = $v0
+ if0 $t0{t.7} goto :if18_else
+ if $s1{current_node} goto :null65
+ Error("null pointer")
+null65:
+ $t0{t.8} = [$s1{current_node}]
+ $t0{t.8} = [$t0{t.8}+12]
+ $a0 = $s1{current_node}
+ call $t0{t.8}
+ $s1{current_node} = $v0
+ goto :if18_end
+if18_else:
+ $s2{cont} = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3{ifound} = 1
+ $s2{cont} = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3{ifound}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{current_node} = $t0{this}
+ $t2{t.0} = [$t0{this}]
+ $t2{t.0} = [$t2{t.0}+76]
+ $a0 = $t0{this}
+ $a1 = $t1{current_node}
+ call $t2{t.0}
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{node} = $a1
+ if $s1{node} goto :null66
+ Error("null pointer")
+null66:
+ $t0{t.0} = [$s1{node}]
+ $t0{t.0} = [$t0{t.0}+32]
+ $a0 = $s1{node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if19_else
+ $s2{t.2} = [$s0{this}]
+ $s2{t.2} = [$s2{t.2}+76]
+ if $s1{node} goto :null67
+ Error("null pointer")
+null67:
+ $t0{t.3} = [$s1{node}]
+ $t0{t.3} = [$t0{t.3}+16]
+ $a0 = $s1{node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.4}
+ call $s2{t.2}
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1{node} goto :null68
+ Error("null pointer")
+null68:
+ $t0{t.5} = [$s1{node}]
+ $t0{t.5} = [$t0{t.5}+20]
+ $a0 = $s1{node}
+ call $t0{t.5}
+ $t0{t.6} = $v0
+ PrintIntS($t0{t.6})
+ if $s1{node} goto :null69
+ Error("null pointer")
+null69:
+ $t0{t.7} = [$s1{node}]
+ $t0{t.7} = [$t0{t.7}+28]
+ $a0 = $s1{node}
+ call $t0{t.7}
+ $t0{t.8} = $v0
+ if0 $t0{t.8} goto :if20_else
+ $s2{t.9} = [$s0{this}]
+ $s2{t.9} = [$s2{t.9}+76]
+ if $s1{node} goto :null70
+ Error("null pointer")
+null70:
+ $t0{t.10} = [$s1{node}]
+ $t0{t.10} = [$t0{t.10}+12]
+ $a0 = $s1{node}
+ call $t0{t.10}
+ $t0{t.11} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.11}
+ call $s2{t.9}
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
diff --git a/base/BinaryTree.opt.names.vaporm b/base/BinaryTree.opt.names.vaporm
new file mode 100644
index 0000000..fa61f97
--- /dev/null
+++ b/base/BinaryTree.opt.names.vaporm
@@ -0,0 +1,797 @@
+const empty_BT
+
+const empty_Tree
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_BT
+ call :BT.Start
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ ret
+
+func BT.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{root} = HeapAllocZ(24)
+ if $s0{root} goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $s0{root}
+ $a1 = 16
+ call :Tree.Init
+ if $s0{root} goto :null2
+ Error("null pointer")
+null2:
+ $a0 = $s0{root}
+ call :Tree.Print
+ PrintIntS(100000000)
+ if $s0{root} goto :null3
+ Error("null pointer")
+null3:
+ $a0 = $s0{root}
+ $a1 = 8
+ call :Tree.Insert
+ if $s0{root} goto :null4
+ Error("null pointer")
+null4:
+ $a0 = $s0{root}
+ call :Tree.Print
+ if $s0{root} goto :null5
+ Error("null pointer")
+null5:
+ $a0 = $s0{root}
+ $a1 = 24
+ call :Tree.Insert
+ if $s0{root} goto :null6
+ Error("null pointer")
+null6:
+ $a0 = $s0{root}
+ $a1 = 4
+ call :Tree.Insert
+ if $s0{root} goto :null7
+ Error("null pointer")
+null7:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Insert
+ if $s0{root} goto :null8
+ Error("null pointer")
+null8:
+ $a0 = $s0{root}
+ $a1 = 20
+ call :Tree.Insert
+ if $s0{root} goto :null9
+ Error("null pointer")
+null9:
+ $a0 = $s0{root}
+ $a1 = 28
+ call :Tree.Insert
+ if $s0{root} goto :null10
+ Error("null pointer")
+null10:
+ $a0 = $s0{root}
+ $a1 = 14
+ call :Tree.Insert
+ if $s0{root} goto :null11
+ Error("null pointer")
+null11:
+ $a0 = $s0{root}
+ call :Tree.Print
+ if $s0{root} goto :null12
+ Error("null pointer")
+null12:
+ $a0 = $s0{root}
+ $a1 = 24
+ call :Tree.Search
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ if $s0{root} goto :null13
+ Error("null pointer")
+null13:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Search
+ $t0{t.1} = $v0
+ PrintIntS($t0{t.1})
+ if $s0{root} goto :null14
+ Error("null pointer")
+null14:
+ $a0 = $s0{root}
+ $a1 = 16
+ call :Tree.Search
+ $t0{t.2} = $v0
+ PrintIntS($t0{t.2})
+ if $s0{root} goto :null15
+ Error("null pointer")
+null15:
+ $a0 = $s0{root}
+ $a1 = 50
+ call :Tree.Search
+ $t0{t.3} = $v0
+ PrintIntS($t0{t.3})
+ if $s0{root} goto :null16
+ Error("null pointer")
+null16:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Search
+ $t0{t.4} = $v0
+ PrintIntS($t0{t.4})
+ if $s0{root} goto :null17
+ Error("null pointer")
+null17:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Delete
+ if $s0{root} goto :null18
+ Error("null pointer")
+null18:
+ $a0 = $s0{root}
+ call :Tree.Print
+ if $s0{root} goto :null19
+ Error("null pointer")
+null19:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Search
+ $t0{t.5} = $v0
+ PrintIntS($t0{t.5})
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+8] = $t1{v_key}
+ [$t0{this}+12] = 0
+ [$t0{this}+16] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{rn} = $a1
+ [$t0{this}+4] = $t1{rn}
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{ln} = $a1
+ [$t0{this}] = $t1{ln}
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+8] = $t1{v_key}
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+16]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+12]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+12] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+16] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0{num1} = $a1
+ $t1{num2} = $a2
+ $t2{nti} = Add($t1{num2} 1)
+ $t1{t.0} = LtS($t0{num1} $t1{num2})
+ if0 $t1{t.0} goto :if1_else
+ $t1{ntb} = 0
+ goto :if1_end
+if1_else:
+ $t2{t.1} = LtS($t0{num1} $t2{nti})
+ if $t2{t.1} goto :if2_else
+ $t1{ntb} = 0
+ goto :if2_end
+if2_else:
+ $t1{ntb} = 1
+if2_end:
+if1_end:
+ $v0 = $t1{ntb}
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $s2{new_node} = HeapAllocZ(24)
+ if $s2{new_node} goto :null20
+ Error("null pointer")
+null20:
+ $a0 = $s2{new_node}
+ $a1 = $s1{v_key}
+ call :Tree.Init
+ $s0{current_node} = $s0{this}
+ $s3{cont} = 1
+while1_top:
+ if0 $s3{cont} goto :while1_end
+ if $s0{current_node} goto :null21
+ Error("null pointer")
+null21:
+ $a0 = $s0{current_node}
+ call :Tree.GetKey
+ $t0{key_aux} = $v0
+ $t0{t.0} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t0{t.0} goto :if3_else
+ if $s0{current_node} goto :null22
+ Error("null pointer")
+null22:
+ $a0 = $s0{current_node}
+ call :Tree.GetHas_Left
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if4_else
+ if $s0{current_node} goto :null23
+ Error("null pointer")
+null23:
+ $a0 = $s0{current_node}
+ call :Tree.GetLeft
+ $s0{current_node} = $v0
+ goto :if4_end
+if4_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null24
+ Error("null pointer")
+null24:
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call :Tree.SetHas_Left
+ if $s0{current_node} goto :null25
+ Error("null pointer")
+null25:
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call :Tree.SetLeft
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0{current_node} goto :null26
+ Error("null pointer")
+null26:
+ $a0 = $s0{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.2} = $v0
+ if0 $t0{t.2} goto :if5_else
+ if $s0{current_node} goto :null27
+ Error("null pointer")
+null27:
+ $a0 = $s0{current_node}
+ call :Tree.GetRight
+ $s0{current_node} = $v0
+ goto :if5_end
+if5_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null28
+ Error("null pointer")
+null28:
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call :Tree.SetHas_Right
+ if $s0{current_node} goto :null29
+ Error("null pointer")
+null29:
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call :Tree.SetRight
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $s2{current_node} = $s0{this}
+ $s3{parent_node} = $s0{this}
+ $s4{cont} = 1
+ $s5{found} = 0
+ $s6{is_root} = 1
+while2_top:
+ if0 $s4{cont} goto :while2_end
+ if $s2{current_node} goto :null30
+ Error("null pointer")
+null30:
+ $a0 = $s2{current_node}
+ call :Tree.GetKey
+ $t0{key_aux} = $v0
+ $t1{t.0} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t1{t.0} goto :if6_else
+ if $s2{current_node} goto :null31
+ Error("null pointer")
+null31:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Left
+ $t1{t.1} = $v0
+ if0 $t1{t.1} goto :if7_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null32
+ Error("null pointer")
+null32:
+ $a0 = $s2{current_node}
+ call :Tree.GetLeft
+ $s2{current_node} = $v0
+ goto :if7_end
+if7_else:
+ $s4{cont} = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0{t.2} = LtS($t0{key_aux} $s1{v_key})
+ if0 $t0{t.2} goto :if8_else
+ if $s2{current_node} goto :null33
+ Error("null pointer")
+null33:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if9_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null34
+ Error("null pointer")
+null34:
+ $a0 = $s2{current_node}
+ call :Tree.GetRight
+ $s2{current_node} = $v0
+ goto :if9_end
+if9_else:
+ $s4{cont} = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6{is_root} goto :if10_else
+ if $s2{current_node} goto :null35
+ Error("null pointer")
+null35:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.4} = $v0
+ if $t0{t.4} goto :if11_else
+ if $s2{current_node} goto :null36
+ Error("null pointer")
+null36:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Left
+ $t0{t.5} = $v0
+ if $t0{t.5} goto :if11_else
+ goto :if11_end
+if11_else:
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call :Tree.Remove
+if11_end:
+ goto :if10_end
+if10_else:
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call :Tree.Remove
+if10_end:
+ $s5{found} = 1
+ $s4{cont} = 0
+if8_end:
+if6_end:
+ $s6{is_root} = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5{found}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+ if $s2{c_node} goto :null37
+ Error("null pointer")
+null37:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Left
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :if12_else
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call :Tree.RemoveLeft
+ goto :if12_end
+if12_else:
+ if $s2{c_node} goto :null38
+ Error("null pointer")
+null38:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Right
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if13_else
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call :Tree.RemoveRight
+ goto :if13_end
+if13_else:
+ if $s2{c_node} goto :null39
+ Error("null pointer")
+null39:
+ $a0 = $s2{c_node}
+ call :Tree.GetKey
+ $s2{auxkey1} = $v0
+ if $s1{p_node} goto :null40
+ Error("null pointer")
+null40:
+ $a0 = $s1{p_node}
+ call :Tree.GetLeft
+ $t0{t.2} = $v0
+ if $t0{t.2} goto :null41
+ Error("null pointer")
+null41:
+ $a0 = $t0{t.2}
+ call :Tree.GetKey
+ $t0{auxkey2} = $v0
+ $a0 = $s0{this}
+ $a1 = $s2{auxkey1}
+ $a2 = $t0{auxkey2}
+ call :Tree.Compare
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if14_else
+ if $s1{p_node} goto :null42
+ Error("null pointer")
+null42:
+ $t0{t.4} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.4}
+ call :Tree.SetLeft
+ if $s1{p_node} goto :null43
+ Error("null pointer")
+null43:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Left
+ goto :if14_end
+if14_else:
+ if $s1{p_node} goto :null44
+ Error("null pointer")
+null44:
+ $t0{t.5} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.5}
+ call :Tree.SetRight
+ if $s1{p_node} goto :null45
+ Error("null pointer")
+null45:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Right
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while3_top:
+ if $s2{c_node} goto :null46
+ Error("null pointer")
+null46:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Right
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :while3_end
+ if $s2{c_node} goto :null47
+ Error("null pointer")
+null47:
+ if $s2{c_node} goto :null48
+ Error("null pointer")
+null48:
+ $a0 = $s2{c_node}
+ call :Tree.GetRight
+ $t0{t.1} = $v0
+ if $t0{t.1} goto :null49
+ Error("null pointer")
+null49:
+ $a0 = $t0{t.1}
+ call :Tree.GetKey
+ $t0{t.2} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t0{t.2}
+ call :Tree.SetKey
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null50
+ Error("null pointer")
+null50:
+ $a0 = $s2{c_node}
+ call :Tree.GetRight
+ $s2{c_node} = $v0
+ goto :while3_top
+while3_end:
+ if $s1{p_node} goto :null51
+ Error("null pointer")
+null51:
+ $t0{t.3} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.3}
+ call :Tree.SetRight
+ if $s1{p_node} goto :null52
+ Error("null pointer")
+null52:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Right
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while4_top:
+ if $s2{c_node} goto :null53
+ Error("null pointer")
+null53:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Left
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :while4_end
+ if $s2{c_node} goto :null54
+ Error("null pointer")
+null54:
+ if $s2{c_node} goto :null55
+ Error("null pointer")
+null55:
+ $a0 = $s2{c_node}
+ call :Tree.GetLeft
+ $t0{t.1} = $v0
+ if $t0{t.1} goto :null56
+ Error("null pointer")
+null56:
+ $a0 = $t0{t.1}
+ call :Tree.GetKey
+ $t0{t.2} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t0{t.2}
+ call :Tree.SetKey
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null57
+ Error("null pointer")
+null57:
+ $a0 = $s2{c_node}
+ call :Tree.GetLeft
+ $s2{c_node} = $v0
+ goto :while4_top
+while4_end:
+ if $s1{p_node} goto :null58
+ Error("null pointer")
+null58:
+ $t0{t.3} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.3}
+ call :Tree.SetLeft
+ if $s1{p_node} goto :null59
+ Error("null pointer")
+null59:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Left
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0{this} = $a0
+ $s0{v_key} = $a1
+ $s1{current_node} = $t0{this}
+ $s2{cont} = 1
+ $s3{ifound} = 0
+while5_top:
+ if0 $s2{cont} goto :while5_end
+ if $s1{current_node} goto :null60
+ Error("null pointer")
+null60:
+ $a0 = $s1{current_node}
+ call :Tree.GetKey
+ $t0{key_aux} = $v0
+ $t1{t.0} = LtS($s0{v_key} $t0{key_aux})
+ if0 $t1{t.0} goto :if15_else
+ if $s1{current_node} goto :null61
+ Error("null pointer")
+null61:
+ $a0 = $s1{current_node}
+ call :Tree.GetHas_Left
+ $t1{t.1} = $v0
+ if0 $t1{t.1} goto :if16_else
+ if $s1{current_node} goto :null62
+ Error("null pointer")
+null62:
+ $a0 = $s1{current_node}
+ call :Tree.GetLeft
+ $s1{current_node} = $v0
+ goto :if16_end
+if16_else:
+ $s2{cont} = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0{t.2} = LtS($t0{key_aux} $s0{v_key})
+ if0 $t0{t.2} goto :if17_else
+ if $s1{current_node} goto :null63
+ Error("null pointer")
+null63:
+ $a0 = $s1{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if18_else
+ if $s1{current_node} goto :null64
+ Error("null pointer")
+null64:
+ $a0 = $s1{current_node}
+ call :Tree.GetRight
+ $s1{current_node} = $v0
+ goto :if18_end
+if18_else:
+ $s2{cont} = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3{ifound} = 1
+ $s2{cont} = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3{ifound}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{current_node} = $t0{this}
+ $a0 = $t0{this}
+ $a1 = $t1{current_node}
+ call :Tree.RecPrint
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0{this} = $a0
+ $s1{node} = $a1
+ if $s1{node} goto :null65
+ Error("null pointer")
+null65:
+ $a0 = $s1{node}
+ call :Tree.GetHas_Left
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :if19_else
+ if $s1{node} goto :null66
+ Error("null pointer")
+null66:
+ $a0 = $s1{node}
+ call :Tree.GetLeft
+ $t0{t.1} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.1}
+ call :Tree.RecPrint
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1{node} goto :null67
+ Error("null pointer")
+null67:
+ $a0 = $s1{node}
+ call :Tree.GetKey
+ $t0{t.2} = $v0
+ PrintIntS($t0{t.2})
+ if $s1{node} goto :null68
+ Error("null pointer")
+null68:
+ $a0 = $s1{node}
+ call :Tree.GetHas_Right
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if20_else
+ if $s1{node} goto :null69
+ Error("null pointer")
+null69:
+ $a0 = $s1{node}
+ call :Tree.GetRight
+ $t0{t.4} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.4}
+ call :Tree.RecPrint
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
diff --git a/base/BinaryTree.opt.regalloc b/base/BinaryTree.opt.regalloc
new file mode 100644
index 0000000..635f436
--- /dev/null
+++ b/base/BinaryTree.opt.regalloc
@@ -0,0 +1,451 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 9
+Linear Range:
+ t.0: 8-9
+Allocation:
+ t.0: t0
+
+func BT.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this:
+ root: 14 17-18 21-23 26-27 30-31 34-35 38-39 42-43 46-47 50-51 54-55 58-59 62-64 67-69 72-74 77-79 82-84 87-88 91-92 95
+ ntb:
+ t.0: 63
+ t.1: 68
+ t.2: 73
+ t.3: 78
+ t.4: 83
+ t.5: 96
+Linear Range:
+ root: 13-95 (cross call)
+ t.0: 62-63
+ t.1: 67-68
+ t.2: 72-73
+ t.3: 77-78
+ t.4: 82-83
+ t.5: 95-96
+Allocation:
+ root: s0
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+
+func Tree.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 100-102
+ v_key: 100
+Linear Range:
+ this: 99-102
+ v_key: 99-100
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.SetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 106
+ rn: 106
+Linear Range:
+ this: 105-106
+ rn: 105-106
+Allocation:
+ this: t0
+ rn: t1
+
+func Tree.SetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 110
+ ln: 110
+Linear Range:
+ this: 109-110
+ ln: 109-110
+Allocation:
+ this: t0
+ ln: t1
+
+func Tree.GetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 114
+ t.0: 115
+Linear Range:
+ this: 113-114
+ t.0: 114-115
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 118
+ t.0: 119
+Linear Range:
+ this: 117-118
+ t.0: 118-119
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 122
+ t.0: 123
+Linear Range:
+ this: 121-122
+ t.0: 122-123
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 126
+ v_key: 126
+Linear Range:
+ this: 125-126
+ v_key: 125-126
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.GetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 130
+ t.0: 131
+Linear Range:
+ this: 129-130
+ t.0: 130-131
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 134
+ t.0: 135
+Linear Range:
+ this: 133-134
+ t.0: 134-135
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 138
+ val: 138
+Linear Range:
+ this: 137-138
+ val: 137-138
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.SetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 142
+ val: 142
+Linear Range:
+ this: 141-142
+ val: 141-142
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.Compare
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ num1: 146-149 153
+ num2: 146-148
+ ntb: 151 156 161
+ nti: 148-149 153
+ t.0: 149
+ t.1: 154
+Linear Range:
+ num1: 145-153
+ num2: 145-148
+ ntb: 150-161
+ nti: 147-153
+ t.0: 148-149
+ t.1: 153-154
+Allocation:
+ num1: t0
+ num2: t1
+ ntb: t1
+ nti: t2
+ t.0: t1
+ t.1: t2
+
+func Tree.Insert
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 164-165 168-169
+ v_key: 164-165 168-173 176-179 182-184 187-191 194-195 198-202 205-207 210-214 217-218 221-224
+ new_node: 165 168-173 176-179 182-184 187-191 194-195 198-202 205-207 210-214 217-218 221-224
+ ntb:
+ current_node: 170-173 176-179 182-184 187-191 194-195 198-202 205-207 210-214 217-218 221-224
+ cont: 172-173 176-179 182-184 187-188 191 194-195 198-202 205-207 210-211 214 217-218 221-224
+ key_aux: 177
+ t.0: 178
+ t.1: 183
+ t.2: 206
+Linear Range:
+ this: 163-169 (cross call)
+ v_key: 163-224 (cross call)
+ new_node: 164-224 (cross call)
+ current_node: 169-224 (cross call)
+ cont: 170-224 (cross call)
+ key_aux: 176-177
+ t.0: 177-178
+ t.1: 182-183
+ t.2: 205-206
+Allocation:
+ this: s0
+ v_key: s1
+ new_node: s2
+ current_node: s0
+ cont: s3
+ key_aux: t0
+ t.0: t0
+ t.1: t0
+ t.2: t0
+
+func Tree.Delete
+ in 0, out 0, callee-saves 7, spills 0
+Live In:
+ this: 229-236 239-242 245-248 251-260 263-266 269-277 280-282 285-301
+ v_key: 229-236 239-242 245-248 251-260 263-266 269-277 280-282 285-301
+ current_node: 230-236 239-242 245-248 251-260 263-266 269-277 280-282 285-301
+ parent_node: 231-236 239-242 245-246 248 251-260 263-264 266 269-277 280-282 285-301
+ cont: 232-236 239-242 245-248 251-252 256-260 263-266 269-270 274 300-301
+ found: 233-236 239-242 245-248 251-260 263-266 269-274 297-303
+ is_root: 235-236 239-241 258-259 276 301
+ key_aux: 240-241 258
+ t.0: 241
+ t.1: 246
+ t.2: 259
+ t.3: 264
+ t.4: 281
+ t.5: 286
+ ntb:
+Linear Range:
+ this: 228-301 (cross call)
+ v_key: 228-301 (cross call)
+ current_node: 229-301 (cross call)
+ parent_node: 230-301 (cross call)
+ cont: 231-301 (cross call)
+ found: 232-303 (cross call)
+ is_root: 233-301 (cross call)
+ key_aux: 239-258
+ t.0: 240-241
+ t.1: 245-246
+ t.2: 258-259
+ t.3: 263-264
+ t.4: 280-281
+ t.5: 285-286
+Allocation:
+ this: s0
+ v_key: s1
+ current_node: s2
+ parent_node: s3
+ cont: s4
+ found: s5
+ is_root: s6
+ key_aux: t0
+ t.0: t1
+ t.1: t1
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+
+func Tree.Remove
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 306 309-311 314 317-319 322 325-326 329-330 333-336 339 347 350
+ p_node: 306 309-311 314 317-319 322 325-326 329-330 333-336 339-341 344 347 350-352 355
+ c_node: 306 309-311 314 317-319 322 325
+ t.0: 310
+ ntb:
+ t.1: 318
+ auxkey1: 326 329-330 333-334
+ t.2: 330 333
+ auxkey2: 334
+ t.3: 335
+ t.4: 340
+ t.5: 351
+Linear Range:
+ this: 305-350 (cross call)
+ p_node: 305-355 (cross call)
+ c_node: 305-325 (cross call)
+ t.0: 309-310
+ t.1: 317-318
+ auxkey1: 325-334 (cross call)
+ t.2: 329-333
+ auxkey2: 333-334
+ t.3: 334-335
+ t.4: 339-340
+ t.5: 350-351
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ auxkey1: s2
+ t.2: t0
+ auxkey2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+
+func Tree.RemoveRight
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 363 366-368 371 374-375 378-381 384-387 390
+ p_node: 363 366-367 381 384-387 390-392 395
+ c_node: 363 366-368 371 374-375 378-381 384-385
+ t.0: 367
+ t.1: 375 378
+ t.2: 379
+ ntb:
+ t.3: 391
+Linear Range:
+ this: 361-390 (cross call)
+ p_node: 361-395 (cross call)
+ c_node: 361-385 (cross call)
+ t.0: 366-367
+ t.1: 374-378
+ t.2: 378-379
+ t.3: 390-391
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+
+func Tree.RemoveLeft
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 400 403-405 408 411-412 415-418 421-424 427
+ p_node: 400 403-404 418 421-424 427-429 432
+ c_node: 400 403-405 408 411-412 415-418 421-422
+ t.0: 404
+ t.1: 412 415
+ t.2: 416
+ ntb:
+ t.3: 428
+Linear Range:
+ this: 398-427 (cross call)
+ p_node: 398-432 (cross call)
+ c_node: 398-422 (cross call)
+ t.0: 403-404
+ t.1: 411-415
+ t.2: 415-416
+ t.3: 427-428
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+
+func Tree.Search
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 436
+ v_key: 436-441 444-447 450-452 455-464 467-469 472-483
+ current_node: 437-441 444-447 450-452 455-464 467-469 472-483
+ cont: 438-441 444-447 450-452 455-456 460-464 467-469 472-473 477 483
+ ifound: 440-441 444-447 450-452 455-464 467-469 472-477 480-485
+ key_aux: 445-446 462
+ t.0: 446
+ t.1: 451
+ t.2: 463
+ t.3: 468
+Linear Range:
+ this: 435-436
+ v_key: 435-483 (cross call)
+ current_node: 436-483 (cross call)
+ cont: 437-483 (cross call)
+ ifound: 438-485 (cross call)
+ key_aux: 444-462
+ t.0: 445-446
+ t.1: 450-451
+ t.2: 462-463
+ t.3: 467-468
+Allocation:
+ this: t0
+ v_key: s0
+ current_node: s1
+ cont: s2
+ ifound: s3
+ key_aux: t0
+ t.0: t1
+ t.1: t1
+ t.2: t0
+ t.3: t0
+
+func Tree.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 488-489
+ current_node: 489
+ ntb:
+Linear Range:
+ this: 487-489
+ current_node: 488-489
+Allocation:
+ this: t0
+ current_node: t1
+
+func Tree.RecPrint
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 493 496-498 501-507 510-512 515-517 520-521
+ node: 493 496-498 501-507 510-512 515-517 520
+ t.0: 497
+ t.1: 502
+ ntb:
+ t.2: 511
+ t.3: 516
+ t.4: 521
+Linear Range:
+ this: 492-521 (cross call)
+ node: 492-520 (cross call)
+ t.0: 496-497
+ t.1: 501-502
+ t.2: 510-511
+ t.3: 515-516
+ t.4: 520-521
+Allocation:
+ this: s0
+ node: s1
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+
diff --git a/base/BinaryTree.opt.vapor b/base/BinaryTree.opt.vapor
new file mode 100644
index 0000000..ef6ac4e
--- /dev/null
+++ b/base/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/base/BinaryTree.opt.vaporm b/base/BinaryTree.opt.vaporm
new file mode 100644
index 0000000..f3bee43
--- /dev/null
+++ b/base/BinaryTree.opt.vaporm
@@ -0,0 +1,797 @@
+const empty_BT
+
+const empty_Tree
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_BT
+ call :BT.Start
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func BT.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = HeapAllocZ(24)
+ if $s0 goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $s0
+ $a1 = 16
+ call :Tree.Init
+ if $s0 goto :null2
+ Error("null pointer")
+null2:
+ $a0 = $s0
+ call :Tree.Print
+ PrintIntS(100000000)
+ if $s0 goto :null3
+ Error("null pointer")
+null3:
+ $a0 = $s0
+ $a1 = 8
+ call :Tree.Insert
+ if $s0 goto :null4
+ Error("null pointer")
+null4:
+ $a0 = $s0
+ call :Tree.Print
+ if $s0 goto :null5
+ Error("null pointer")
+null5:
+ $a0 = $s0
+ $a1 = 24
+ call :Tree.Insert
+ if $s0 goto :null6
+ Error("null pointer")
+null6:
+ $a0 = $s0
+ $a1 = 4
+ call :Tree.Insert
+ if $s0 goto :null7
+ Error("null pointer")
+null7:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Insert
+ if $s0 goto :null8
+ Error("null pointer")
+null8:
+ $a0 = $s0
+ $a1 = 20
+ call :Tree.Insert
+ if $s0 goto :null9
+ Error("null pointer")
+null9:
+ $a0 = $s0
+ $a1 = 28
+ call :Tree.Insert
+ if $s0 goto :null10
+ Error("null pointer")
+null10:
+ $a0 = $s0
+ $a1 = 14
+ call :Tree.Insert
+ if $s0 goto :null11
+ Error("null pointer")
+null11:
+ $a0 = $s0
+ call :Tree.Print
+ if $s0 goto :null12
+ Error("null pointer")
+null12:
+ $a0 = $s0
+ $a1 = 24
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null13
+ Error("null pointer")
+null13:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null14
+ Error("null pointer")
+null14:
+ $a0 = $s0
+ $a1 = 16
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null15
+ Error("null pointer")
+null15:
+ $a0 = $s0
+ $a1 = 50
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null16
+ Error("null pointer")
+null16:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null17
+ Error("null pointer")
+null17:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Delete
+ if $s0 goto :null18
+ Error("null pointer")
+null18:
+ $a0 = $s0
+ call :Tree.Print
+ if $s0 goto :null19
+ Error("null pointer")
+null19:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+8] = $t1
+ [$t0+12] = 0
+ [$t0+16] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+4] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0]
+ $v0 = $t0
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+8] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+16]
+ $v0 = $t0
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+12]
+ $v0 = $t0
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+12] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+16] = $t1
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = Add($t1 1)
+ $t1 = LtS($t0 $t1)
+ if0 $t1 goto :if1_else
+ $t1 = 0
+ goto :if1_end
+if1_else:
+ $t2 = LtS($t0 $t2)
+ if $t2 goto :if2_else
+ $t1 = 0
+ goto :if2_end
+if2_else:
+ $t1 = 1
+if2_end:
+if1_end:
+ $v0 = $t1
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = HeapAllocZ(24)
+ if $s2 goto :null20
+ Error("null pointer")
+null20:
+ $a0 = $s2
+ $a1 = $s1
+ call :Tree.Init
+ $s0 = $s0
+ $s3 = 1
+while1_top:
+ if0 $s3 goto :while1_end
+ if $s0 goto :null21
+ Error("null pointer")
+null21:
+ $a0 = $s0
+ call :Tree.GetKey
+ $t0 = $v0
+ $t0 = LtS($s1 $t0)
+ if0 $t0 goto :if3_else
+ if $s0 goto :null22
+ Error("null pointer")
+null22:
+ $a0 = $s0
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if4_else
+ if $s0 goto :null23
+ Error("null pointer")
+null23:
+ $a0 = $s0
+ call :Tree.GetLeft
+ $s0 = $v0
+ goto :if4_end
+if4_else:
+ $s3 = 0
+ if $s0 goto :null24
+ Error("null pointer")
+null24:
+ $a0 = $s0
+ $a1 = 1
+ call :Tree.SetHas_Left
+ if $s0 goto :null25
+ Error("null pointer")
+null25:
+ $a0 = $s0
+ $a1 = $s2
+ call :Tree.SetLeft
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0 goto :null26
+ Error("null pointer")
+null26:
+ $a0 = $s0
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if5_else
+ if $s0 goto :null27
+ Error("null pointer")
+null27:
+ $a0 = $s0
+ call :Tree.GetRight
+ $s0 = $v0
+ goto :if5_end
+if5_else:
+ $s3 = 0
+ if $s0 goto :null28
+ Error("null pointer")
+null28:
+ $a0 = $s0
+ $a1 = 1
+ call :Tree.SetHas_Right
+ if $s0 goto :null29
+ Error("null pointer")
+null29:
+ $a0 = $s0
+ $a1 = $s2
+ call :Tree.SetRight
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $s0
+ $s3 = $s0
+ $s4 = 1
+ $s5 = 0
+ $s6 = 1
+while2_top:
+ if0 $s4 goto :while2_end
+ if $s2 goto :null30
+ Error("null pointer")
+null30:
+ $a0 = $s2
+ call :Tree.GetKey
+ $t0 = $v0
+ $t1 = LtS($s1 $t0)
+ if0 $t1 goto :if6_else
+ if $s2 goto :null31
+ Error("null pointer")
+null31:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t1 = $v0
+ if0 $t1 goto :if7_else
+ $s3 = $s2
+ if $s2 goto :null32
+ Error("null pointer")
+null32:
+ $a0 = $s2
+ call :Tree.GetLeft
+ $s2 = $v0
+ goto :if7_end
+if7_else:
+ $s4 = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0 = LtS($t0 $s1)
+ if0 $t0 goto :if8_else
+ if $s2 goto :null33
+ Error("null pointer")
+null33:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if9_else
+ $s3 = $s2
+ if $s2 goto :null34
+ Error("null pointer")
+null34:
+ $a0 = $s2
+ call :Tree.GetRight
+ $s2 = $v0
+ goto :if9_end
+if9_else:
+ $s4 = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6 goto :if10_else
+ if $s2 goto :null35
+ Error("null pointer")
+null35:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if $t0 goto :if11_else
+ if $s2 goto :null36
+ Error("null pointer")
+null36:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if $t0 goto :if11_else
+ goto :if11_end
+if11_else:
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call :Tree.Remove
+if11_end:
+ goto :if10_end
+if10_else:
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call :Tree.Remove
+if10_end:
+ $s5 = 1
+ $s4 = 0
+if8_end:
+if6_end:
+ $s6 = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+ if $s2 goto :null37
+ Error("null pointer")
+null37:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if12_else
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call :Tree.RemoveLeft
+ goto :if12_end
+if12_else:
+ if $s2 goto :null38
+ Error("null pointer")
+null38:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if13_else
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call :Tree.RemoveRight
+ goto :if13_end
+if13_else:
+ if $s2 goto :null39
+ Error("null pointer")
+null39:
+ $a0 = $s2
+ call :Tree.GetKey
+ $s2 = $v0
+ if $s1 goto :null40
+ Error("null pointer")
+null40:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $t0 = $v0
+ if $t0 goto :null41
+ Error("null pointer")
+null41:
+ $a0 = $t0
+ call :Tree.GetKey
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $s2
+ $a2 = $t0
+ call :Tree.Compare
+ $t0 = $v0
+ if0 $t0 goto :if14_else
+ if $s1 goto :null42
+ Error("null pointer")
+null42:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetLeft
+ if $s1 goto :null43
+ Error("null pointer")
+null43:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Left
+ goto :if14_end
+if14_else:
+ if $s1 goto :null44
+ Error("null pointer")
+null44:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetRight
+ if $s1 goto :null45
+ Error("null pointer")
+null45:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Right
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while3_top:
+ if $s2 goto :null46
+ Error("null pointer")
+null46:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :while3_end
+ if $s2 goto :null47
+ Error("null pointer")
+null47:
+ if $s2 goto :null48
+ Error("null pointer")
+null48:
+ $a0 = $s2
+ call :Tree.GetRight
+ $t0 = $v0
+ if $t0 goto :null49
+ Error("null pointer")
+null49:
+ $a0 = $t0
+ call :Tree.GetKey
+ $t0 = $v0
+ $a0 = $s2
+ $a1 = $t0
+ call :Tree.SetKey
+ $s1 = $s2
+ if $s2 goto :null50
+ Error("null pointer")
+null50:
+ $a0 = $s2
+ call :Tree.GetRight
+ $s2 = $v0
+ goto :while3_top
+while3_end:
+ if $s1 goto :null51
+ Error("null pointer")
+null51:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetRight
+ if $s1 goto :null52
+ Error("null pointer")
+null52:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Right
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while4_top:
+ if $s2 goto :null53
+ Error("null pointer")
+null53:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :while4_end
+ if $s2 goto :null54
+ Error("null pointer")
+null54:
+ if $s2 goto :null55
+ Error("null pointer")
+null55:
+ $a0 = $s2
+ call :Tree.GetLeft
+ $t0 = $v0
+ if $t0 goto :null56
+ Error("null pointer")
+null56:
+ $a0 = $t0
+ call :Tree.GetKey
+ $t0 = $v0
+ $a0 = $s2
+ $a1 = $t0
+ call :Tree.SetKey
+ $s1 = $s2
+ if $s2 goto :null57
+ Error("null pointer")
+null57:
+ $a0 = $s2
+ call :Tree.GetLeft
+ $s2 = $v0
+ goto :while4_top
+while4_end:
+ if $s1 goto :null58
+ Error("null pointer")
+null58:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetLeft
+ if $s1 goto :null59
+ Error("null pointer")
+null59:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Left
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = $t0
+ $s2 = 1
+ $s3 = 0
+while5_top:
+ if0 $s2 goto :while5_end
+ if $s1 goto :null60
+ Error("null pointer")
+null60:
+ $a0 = $s1
+ call :Tree.GetKey
+ $t0 = $v0
+ $t1 = LtS($s0 $t0)
+ if0 $t1 goto :if15_else
+ if $s1 goto :null61
+ Error("null pointer")
+null61:
+ $a0 = $s1
+ call :Tree.GetHas_Left
+ $t1 = $v0
+ if0 $t1 goto :if16_else
+ if $s1 goto :null62
+ Error("null pointer")
+null62:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $s1 = $v0
+ goto :if16_end
+if16_else:
+ $s2 = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0 = LtS($t0 $s0)
+ if0 $t0 goto :if17_else
+ if $s1 goto :null63
+ Error("null pointer")
+null63:
+ $a0 = $s1
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if18_else
+ if $s1 goto :null64
+ Error("null pointer")
+null64:
+ $a0 = $s1
+ call :Tree.GetRight
+ $s1 = $v0
+ goto :if18_end
+if18_else:
+ $s2 = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3 = 1
+ $s2 = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $t0
+ $a0 = $t0
+ $a1 = $t1
+ call :Tree.RecPrint
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null65
+ Error("null pointer")
+null65:
+ $a0 = $s1
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if19_else
+ if $s1 goto :null66
+ Error("null pointer")
+null66:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call :Tree.RecPrint
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1 goto :null67
+ Error("null pointer")
+null67:
+ $a0 = $s1
+ call :Tree.GetKey
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s1 goto :null68
+ Error("null pointer")
+null68:
+ $a0 = $s1
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if20_else
+ if $s1 goto :null69
+ Error("null pointer")
+null69:
+ $a0 = $s1
+ call :Tree.GetRight
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call :Tree.RecPrint
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
diff --git a/base/BinaryTree.regalloc b/base/BinaryTree.regalloc
new file mode 100644
index 0000000..68a8265
--- /dev/null
+++ b/base/BinaryTree.regalloc
@@ -0,0 +1,703 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 30-31 34-36
+ t.1: 35-36
+ t.2: 37
+Linear Range:
+ t.0: 29-36
+ t.1: 34-36
+ t.2: 36-37
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func BT.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this:
+ t.0: 42-43
+ root: 44 47-50 53-57 60-63 66-69 72-75 78-81 84-87 90-93 96-99 102-105 108-111 114-118 121-125 128-132 135-139 142-146 149-152 155-158 161-163
+ t.1: 48-49
+ ntb:
+ t.2: 54-55
+ t.3: 61-62
+ t.4: 67-68
+ t.5: 73-74
+ t.6: 79-80
+ t.7: 85-86
+ t.8: 91-92
+ t.9: 97-98
+ t.10: 103-104
+ t.11: 109-110
+ t.12: 115-116
+ t.13: 117
+ t.14: 122-123
+ t.15: 124
+ t.16: 129-130
+ t.17: 131
+ t.18: 136-137
+ t.19: 138
+ t.20: 143-144
+ t.21: 145
+ t.22: 150-151
+ t.23: 156-157
+ t.24: 162-163
+ t.25: 164
+Linear Range:
+ t.0: 41-43
+ root: 43-163 (cross call)
+ t.1: 47-49
+ t.2: 53-55
+ t.3: 60-62
+ t.4: 66-68
+ t.5: 72-74
+ t.6: 78-80
+ t.7: 84-86
+ t.8: 90-92
+ t.9: 96-98
+ t.10: 102-104
+ t.11: 108-110
+ t.12: 114-116
+ t.13: 116-117
+ t.14: 121-123
+ t.15: 123-124
+ t.16: 128-130
+ t.17: 130-131
+ t.18: 135-137
+ t.19: 137-138
+ t.20: 142-144
+ t.21: 144-145
+ t.22: 149-151
+ t.23: 155-157
+ t.24: 161-163
+ t.25: 163-164
+Allocation:
+ t.0: t0
+ root: s0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.9: t0
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+ t.14: t0
+ t.15: t0
+ t.16: t0
+ t.17: t0
+ t.18: t0
+ t.19: t0
+ t.20: t0
+ t.21: t0
+ t.22: t0
+ t.23: t0
+ t.24: t0
+ t.25: t0
+
+func Tree.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 168-170
+ v_key: 168
+Linear Range:
+ this: 167-170
+ v_key: 167-168
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.SetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 174
+ rn: 174
+Linear Range:
+ this: 173-174
+ rn: 173-174
+Allocation:
+ this: t0
+ rn: t1
+
+func Tree.SetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 178
+ ln: 178
+Linear Range:
+ this: 177-178
+ ln: 177-178
+Allocation:
+ this: t0
+ ln: t1
+
+func Tree.GetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 182
+ t.0: 183
+Linear Range:
+ this: 181-182
+ t.0: 182-183
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 186
+ t.0: 187
+Linear Range:
+ this: 185-186
+ t.0: 186-187
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 190
+ t.0: 191
+Linear Range:
+ this: 189-190
+ t.0: 190-191
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 194
+ v_key: 194
+Linear Range:
+ this: 193-194
+ v_key: 193-194
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.GetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 198
+ t.0: 199
+Linear Range:
+ this: 197-198
+ t.0: 198-199
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 202
+ t.0: 203
+Linear Range:
+ this: 201-202
+ t.0: 202-203
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 206
+ val: 206
+Linear Range:
+ this: 205-206
+ val: 205-206
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.SetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 210
+ val: 210
+Linear Range:
+ this: 209-210
+ val: 209-210
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.Compare
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ num1: 214-217 221
+ num2: 214-216
+ ntb: 219 225 230
+ nti: 216-217 221
+ t.0: 217
+ t.1: 222
+ t.2: 223
+Linear Range:
+ num1: 213-221
+ num2: 213-216
+ ntb: 218-230
+ nti: 215-221
+ t.0: 216-217
+ t.1: 221-222
+ t.2: 222-223
+Allocation:
+ num1: t0
+ num2: t1
+ ntb: t1
+ nti: t2
+ t.0: t1
+ t.1: t2
+ t.2: t2
+
+func Tree.Insert
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 233-236 239-242
+ v_key: 233-236 239-246 249-254 257-261 264-270 273-276 279-285 288-292 295-301 304-307 310-315
+ t.0: 234-235
+ new_node: 236 239-246 249-254 257-261 264-270 273-276 279-285 288-292 295-301 304-307 310-315
+ t.1: 240-241
+ ntb:
+ current_node: 243-246 249-254 257-261 264-270 273-276 279-285 288-292 295-301 304-307 310-315
+ cont: 245-246 249-254 257-261 264-267 270 273-276 279-285 288-292 295-298 301 304-307 310-315
+ t.2: 250-251
+ key_aux: 252
+ t.3: 253
+ t.4: 258-259
+ t.5: 260
+ t.6: 265-266
+ t.7: 274-275
+ t.8: 280-281
+ t.9: 289-290
+ t.10: 291
+ t.11: 296-297
+ t.12: 305-306
+ t.13: 311-312
+Linear Range:
+ this: 232-242 (cross call)
+ v_key: 232-315 (cross call)
+ t.0: 233-235
+ new_node: 235-315 (cross call)
+ t.1: 239-241
+ current_node: 242-315 (cross call)
+ cont: 243-315 (cross call)
+ t.2: 249-251
+ key_aux: 251-252
+ t.3: 252-253
+ t.4: 257-259
+ t.5: 259-260
+ t.6: 264-266
+ t.7: 273-275
+ t.8: 279-281
+ t.9: 288-290
+ t.10: 290-291
+ t.11: 295-297
+ t.12: 304-306
+ t.13: 310-312
+Allocation:
+ this: s0
+ v_key: s1
+ t.0: t0
+ new_node: s2
+ t.1: t0
+ current_node: s0
+ cont: s3
+ t.2: t0
+ key_aux: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.9: t0
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+
+func Tree.Delete
+ in 0, out 0, callee-saves 7, spills 0
+Live In:
+ this: 320-327 330-335 338-343 346-357 360-365 368-378 381-386 389-416
+ v_key: 320-327 330-335 338-343 346-357 360-365 368-378 381-386 389-416
+ current_node: 321-327 330-335 338-343 346-357 360-365 368-378 381-386 389-416
+ parent_node: 322-327 330-335 338-341 343 346-357 360-363 365 368-378 381-386 389-416
+ cont: 323-327 330-335 338-343 346-349 353-357 360-365 368-371 375 415-416
+ found: 324-327 330-335 338-343 346-357 360-365 368-375 412-418
+ is_root: 326-327 330-334 355-356 377 416
+ t.0: 331-332
+ key_aux: 333-334 355
+ t.1: 334
+ t.2: 339-340
+ t.3: 341
+ t.4: 347-348
+ t.5: 356
+ t.6: 361-362
+ t.7: 363
+ t.8: 369-370
+ t.10: 382-383
+ t.11: 384
+ t.12: 385
+ t.13: 390-391
+ t.14: 392
+ t.9: 393 397
+ ntb:
+ t.15: 402-403
+ t.16: 408-409
+Linear Range:
+ this: 319-416 (cross call)
+ v_key: 319-416 (cross call)
+ current_node: 320-416 (cross call)
+ parent_node: 321-416 (cross call)
+ cont: 322-416 (cross call)
+ found: 323-418 (cross call)
+ is_root: 324-416 (cross call)
+ t.0: 330-332
+ key_aux: 332-355
+ t.1: 333-334
+ t.2: 338-340
+ t.3: 340-341
+ t.4: 346-348
+ t.5: 355-356
+ t.6: 360-362
+ t.7: 362-363
+ t.8: 368-370
+ t.10: 381-383
+ t.11: 383-384
+ t.12: 384-385
+ t.13: 389-391
+ t.14: 391-392
+ t.9: 392-397
+ t.15: 401-403
+ t.16: 407-409
+Allocation:
+ this: s0
+ v_key: s1
+ current_node: s2
+ parent_node: s3
+ cont: s4
+ found: s5
+ is_root: s6
+ t.0: t0
+ key_aux: t0
+ t.1: t1
+ t.2: t1
+ t.3: t1
+ t.4: t1
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+ t.14: t0
+ t.9: t0
+ t.15: t0
+ t.16: t0
+
+func Tree.Remove
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 421 424-430 433 436-442 445 448-451 454-457 460-467 470-472 482 485-487
+ p_node: 421 424-430 433 436-442 445 448-451 454-457 460-467 470-474 477-479 482 485-489 492-494
+ c_node: 421 424-430 433 436-442 445 448-450
+ t.0: 425-426
+ t.1: 427
+ t.2: 429-430
+ ntb:
+ t.3: 437-438
+ t.4: 439
+ t.5: 441-442
+ t.6: 449-450
+ auxkey1: 451 454-457 460-465
+ t.7: 455-456
+ t.8: 457 460-462
+ t.9: 461-462
+ auxkey2: 463-465
+ t.10: 464-465
+ t.11: 466
+ t.12: 471-473
+ t.13: 473
+ t.14: 478-479
+ t.15: 486-488
+ t.16: 488
+ t.17: 493-494
+Linear Range:
+ this: 420-487 (cross call)
+ p_node: 420-494 (cross call)
+ c_node: 420-450 (cross call)
+ t.0: 424-426
+ t.1: 426-427
+ t.2: 428-430
+ t.3: 436-438
+ t.4: 438-439
+ t.5: 440-442
+ t.6: 448-450
+ auxkey1: 450-465 (cross call)
+ t.7: 454-456
+ t.8: 456-462
+ t.9: 460-462
+ auxkey2: 462-465
+ t.10: 463-465
+ t.11: 465-466
+ t.12: 470-473
+ t.13: 472-473
+ t.14: 477-479
+ t.15: 485-488
+ t.16: 487-488
+ t.17: 492-494
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ auxkey1: s2
+ t.7: t0
+ t.8: t0
+ t.9: t1
+ auxkey2: t1
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t1
+ t.14: t1
+ t.15: t1
+ t.16: t0
+ t.17: t0
+
+func Tree.RemoveRight
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 502 505-509 512-514 517-520 523-528 531-536 539-541
+ p_node: 502 505-508 528 531-536 539-543 546-548
+ c_node: 502 505-509 512-514 517-520 523-528 531-534
+ t.0: 506-507
+ t.1: 508
+ t.2: 513-514 517-520 523-526
+ t.3: 518-519
+ t.4: 520 523-525
+ t.5: 524-525
+ t.6: 526
+ ntb:
+ t.7: 532-533
+ t.8: 540-542
+ t.9: 542
+ t.10: 547-548
+Linear Range:
+ this: 500-541 (cross call)
+ p_node: 500-548 (cross call)
+ c_node: 500-534 (cross call)
+ t.0: 505-507
+ t.1: 507-508
+ t.2: 512-526 (cross call)
+ t.3: 517-519
+ t.4: 519-525
+ t.5: 523-525
+ t.6: 525-526
+ t.7: 531-533
+ t.8: 539-542
+ t.9: 541-542
+ t.10: 546-548
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: s3
+ t.3: t0
+ t.4: t0
+ t.5: t1
+ t.6: t1
+ t.7: t1
+ t.8: t1
+ t.9: t0
+ t.10: t0
+
+func Tree.RemoveLeft
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 553 556-560 563-565 568-571 574-579 582-587 590-592
+ p_node: 553 556-559 579 582-587 590-594 597-599
+ c_node: 553 556-560 563-565 568-571 574-579 582-585
+ t.0: 557-558
+ t.1: 559
+ t.2: 564-565 568-571 574-577
+ t.3: 569-570
+ t.4: 571 574-576
+ t.5: 575-576
+ t.6: 577
+ ntb:
+ t.7: 583-584
+ t.8: 591-593
+ t.9: 593
+ t.10: 598-599
+Linear Range:
+ this: 551-592 (cross call)
+ p_node: 551-599 (cross call)
+ c_node: 551-585 (cross call)
+ t.0: 556-558
+ t.1: 558-559
+ t.2: 563-577 (cross call)
+ t.3: 568-570
+ t.4: 570-576
+ t.5: 574-576
+ t.6: 576-577
+ t.7: 582-584
+ t.8: 590-593
+ t.9: 592-593
+ t.10: 597-599
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: s3
+ t.3: t0
+ t.4: t0
+ t.5: t1
+ t.6: t1
+ t.7: t1
+ t.8: t1
+ t.9: t0
+ t.10: t0
+
+func Tree.Search
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 603
+ v_key: 603-608 611-616 619-623 626-637 640-644 647-660
+ current_node: 604-608 611-616 619-623 626-637 640-644 647-660
+ cont: 605-608 611-616 619-623 626-629 633-637 640-644 647-650 654 660
+ ifound: 607-608 611-616 619-623 626-637 640-644 647-654 657-662
+ t.0: 612-613
+ key_aux: 614-615 635
+ t.1: 615
+ t.2: 620-621
+ t.3: 622
+ t.4: 627-628
+ t.5: 636
+ t.6: 641-642
+ t.7: 643
+ t.8: 648-649
+Linear Range:
+ this: 602-603
+ v_key: 602-660 (cross call)
+ current_node: 603-660 (cross call)
+ cont: 604-660 (cross call)
+ ifound: 605-662 (cross call)
+ t.0: 611-613
+ key_aux: 613-635
+ t.1: 614-615
+ t.2: 619-621
+ t.3: 621-622
+ t.4: 626-628
+ t.5: 635-636
+ t.6: 640-642
+ t.7: 642-643
+ t.8: 647-649
+Allocation:
+ this: t0
+ v_key: s0
+ current_node: s1
+ cont: s2
+ ifound: s3
+ t.0: t0
+ key_aux: t0
+ t.1: t1
+ t.2: t1
+ t.3: t1
+ t.4: t1
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+
+func Tree.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 665-668
+ current_node: 666-668
+ t.0: 667-668
+ ntb:
+Linear Range:
+ this: 664-668
+ current_node: 665-668
+ t.0: 666-668
+Allocation:
+ this: t0
+ current_node: t1
+ t.0: t2
+
+func Tree.RecPrint
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 672 675-681 684-692 695-699 702-708 711-714
+ node: 672 675-681 684-692 695-699 702-708 711-713
+ t.0: 676-677
+ t.1: 678
+ t.2: 680-681 684-687
+ t.3: 685-686
+ t.4: 687
+ ntb:
+ t.5: 696-697
+ t.6: 698
+ t.7: 703-704
+ t.8: 705
+ t.9: 707-708 711-714
+ t.10: 712-713
+ t.11: 714
+Linear Range:
+ this: 671-714 (cross call)
+ node: 671-713 (cross call)
+ t.0: 675-677
+ t.1: 677-678
+ t.2: 679-687 (cross call)
+ t.3: 684-686
+ t.4: 686-687
+ t.5: 695-697
+ t.6: 697-698
+ t.7: 702-704
+ t.8: 704-705
+ t.9: 706-714 (cross call)
+ t.10: 711-713
+ t.11: 713-714
+Allocation:
+ this: s0
+ node: s1
+ t.0: t0
+ t.1: t0
+ t.2: s2
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.9: s2
+ t.10: t0
+ t.11: t0
+
diff --git a/base/BinaryTree.vapor b/base/BinaryTree.vapor
new file mode 100644
index 0000000..275cfe3
--- /dev/null
+++ b/base/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/base/BinaryTree.vaporm b/base/BinaryTree.vaporm
new file mode 100644
index 0000000..ad25de5
--- /dev/null
+++ b/base/BinaryTree.vaporm
@@ -0,0 +1,996 @@
+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 [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(4)
+ [$t0] = :vmt_BT
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func BT.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0 = HeapAllocZ(28)
+ [$t0] = :vmt_Tree
+ $s0 = $t0
+ if $s0 goto :null2
+ Error("null pointer")
+null2:
+ $t0 = [$s0]
+ $t0 = [$t0]
+ $a0 = $s0
+ $a1 = 16
+ call $t0
+ if $s0 goto :null3
+ Error("null pointer")
+null3:
+ $t0 = [$s0]
+ $t0 = [$t0+72]
+ $a0 = $s0
+ call $t0
+ PrintIntS(100000000)
+ if $s0 goto :null4
+ Error("null pointer")
+null4:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 8
+ call $t0
+ if $s0 goto :null5
+ Error("null pointer")
+null5:
+ $t0 = [$s0]
+ $t0 = [$t0+72]
+ $a0 = $s0
+ call $t0
+ if $s0 goto :null6
+ Error("null pointer")
+null6:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 24
+ call $t0
+ if $s0 goto :null7
+ Error("null pointer")
+null7:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 4
+ call $t0
+ if $s0 goto :null8
+ Error("null pointer")
+null8:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 12
+ call $t0
+ if $s0 goto :null9
+ Error("null pointer")
+null9:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 20
+ call $t0
+ if $s0 goto :null10
+ Error("null pointer")
+null10:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 28
+ call $t0
+ if $s0 goto :null11
+ Error("null pointer")
+null11:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 14
+ call $t0
+ if $s0 goto :null12
+ Error("null pointer")
+null12:
+ $t0 = [$s0]
+ $t0 = [$t0+72]
+ $a0 = $s0
+ call $t0
+ if $s0 goto :null13
+ Error("null pointer")
+null13:
+ $t0 = [$s0]
+ $t0 = [$t0+68]
+ $a0 = $s0
+ $a1 = 24
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null14
+ Error("null pointer")
+null14:
+ $t0 = [$s0]
+ $t0 = [$t0+68]
+ $a0 = $s0
+ $a1 = 12
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null15
+ Error("null pointer")
+null15:
+ $t0 = [$s0]
+ $t0 = [$t0+68]
+ $a0 = $s0
+ $a1 = 16
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null16
+ Error("null pointer")
+null16:
+ $t0 = [$s0]
+ $t0 = [$t0+68]
+ $a0 = $s0
+ $a1 = 50
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null17
+ Error("null pointer")
+null17:
+ $t0 = [$s0]
+ $t0 = [$t0+68]
+ $a0 = $s0
+ $a1 = 12
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null18
+ Error("null pointer")
+null18:
+ $t0 = [$s0]
+ $t0 = [$t0+52]
+ $a0 = $s0
+ $a1 = 12
+ call $t0
+ if $s0 goto :null19
+ Error("null pointer")
+null19:
+ $t0 = [$s0]
+ $t0 = [$t0+72]
+ $a0 = $s0
+ call $t0
+ if $s0 goto :null20
+ Error("null pointer")
+null20:
+ $t0 = [$s0]
+ $t0 = [$t0+68]
+ $a0 = $s0
+ $a1 = 12
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+12] = $t1
+ [$t0+16] = 0
+ [$t0+20] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+8] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+4] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+12]
+ $v0 = $t0
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+12] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+20]
+ $v0 = $t0
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+16]
+ $v0 = $t0
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+16] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+20] = $t1
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = Add($t1 1)
+ $t1 = LtS($t0 $t1)
+ if0 $t1 goto :if1_else
+ $t1 = 0
+ goto :if1_end
+if1_else:
+ $t2 = LtS($t0 $t2)
+ $t2 = Sub(1 $t2)
+ if0 $t2 goto :if2_else
+ $t1 = 0
+ goto :if2_end
+if2_else:
+ $t1 = 1
+if2_end:
+if1_end:
+ $v0 = $t1
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $t0 = HeapAllocZ(28)
+ [$t0] = :vmt_Tree
+ $s2 = $t0
+ if $s2 goto :null21
+ Error("null pointer")
+null21:
+ $t0 = [$s2]
+ $t0 = [$t0]
+ $a0 = $s2
+ $a1 = $s1
+ call $t0
+ $s0 = $s0
+ $s3 = 1
+while1_top:
+ if0 $s3 goto :while1_end
+ if $s0 goto :null22
+ Error("null pointer")
+null22:
+ $t0 = [$s0]
+ $t0 = [$t0+20]
+ $a0 = $s0
+ call $t0
+ $t0 = $v0
+ $t0 = LtS($s1 $t0)
+ if0 $t0 goto :if3_else
+ if $s0 goto :null23
+ Error("null pointer")
+null23:
+ $t0 = [$s0]
+ $t0 = [$t0+32]
+ $a0 = $s0
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if4_else
+ if $s0 goto :null24
+ Error("null pointer")
+null24:
+ $t0 = [$s0]
+ $t0 = [$t0+16]
+ $a0 = $s0
+ call $t0
+ $s0 = $v0
+ goto :if4_end
+if4_else:
+ $s3 = 0
+ if $s0 goto :null25
+ Error("null pointer")
+null25:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ $a1 = 1
+ call $t0
+ if $s0 goto :null26
+ Error("null pointer")
+null26:
+ $t0 = [$s0]
+ $t0 = [$t0+8]
+ $a0 = $s0
+ $a1 = $s2
+ call $t0
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0 goto :null27
+ Error("null pointer")
+null27:
+ $t0 = [$s0]
+ $t0 = [$t0+28]
+ $a0 = $s0
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if5_else
+ if $s0 goto :null28
+ Error("null pointer")
+null28:
+ $t0 = [$s0]
+ $t0 = [$t0+12]
+ $a0 = $s0
+ call $t0
+ $s0 = $v0
+ goto :if5_end
+if5_else:
+ $s3 = 0
+ if $s0 goto :null29
+ Error("null pointer")
+null29:
+ $t0 = [$s0]
+ $t0 = [$t0+40]
+ $a0 = $s0
+ $a1 = 1
+ call $t0
+ if $s0 goto :null30
+ Error("null pointer")
+null30:
+ $t0 = [$s0]
+ $t0 = [$t0+4]
+ $a0 = $s0
+ $a1 = $s2
+ call $t0
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $s0
+ $s3 = $s0
+ $s4 = 1
+ $s5 = 0
+ $s6 = 1
+while2_top:
+ if0 $s4 goto :while2_end
+ if $s2 goto :null31
+ Error("null pointer")
+null31:
+ $t0 = [$s2]
+ $t0 = [$t0+20]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ $t1 = LtS($s1 $t0)
+ if0 $t1 goto :if6_else
+ if $s2 goto :null32
+ Error("null pointer")
+null32:
+ $t1 = [$s2]
+ $t1 = [$t1+32]
+ $a0 = $s2
+ call $t1
+ $t1 = $v0
+ if0 $t1 goto :if7_else
+ $s3 = $s2
+ if $s2 goto :null33
+ Error("null pointer")
+null33:
+ $t1 = [$s2]
+ $t1 = [$t1+16]
+ $a0 = $s2
+ call $t1
+ $s2 = $v0
+ goto :if7_end
+if7_else:
+ $s4 = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0 = LtS($t0 $s1)
+ if0 $t0 goto :if8_else
+ if $s2 goto :null34
+ Error("null pointer")
+null34:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if9_else
+ $s3 = $s2
+ if $s2 goto :null35
+ Error("null pointer")
+null35:
+ $t0 = [$s2]
+ $t0 = [$t0+12]
+ $a0 = $s2
+ call $t0
+ $s2 = $v0
+ goto :if9_end
+if9_else:
+ $s4 = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6 goto :if10_else
+ if $s2 goto :null36
+ Error("null pointer")
+null36:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ $t0 = Sub(1 $t0)
+ if0 $t0 goto :ss1_else
+ if $s2 goto :null37
+ Error("null pointer")
+null37:
+ $t0 = [$s2]
+ $t0 = [$t0+32]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ $t0 = Sub(1 $t0)
+ goto :ss1_end
+ss1_else:
+ $t0 = 0
+ss1_end:
+ if0 $t0 goto :if11_else
+ goto :if11_end
+if11_else:
+ $t0 = [$s0]
+ $t0 = [$t0+56]
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call $t0
+if11_end:
+ goto :if10_end
+if10_else:
+ $t0 = [$s0]
+ $t0 = [$t0+56]
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call $t0
+if10_end:
+ $s5 = 1
+ $s4 = 0
+if8_end:
+if6_end:
+ $s6 = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+ if $s2 goto :null38
+ Error("null pointer")
+null38:
+ $t0 = [$s2]
+ $t0 = [$t0+32]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if12_else
+ $t0 = [$s0]
+ $t0 = [$t0+64]
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call $t0
+ goto :if12_end
+if12_else:
+ if $s2 goto :null39
+ Error("null pointer")
+null39:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if13_else
+ $t0 = [$s0]
+ $t0 = [$t0+60]
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call $t0
+ goto :if13_end
+if13_else:
+ if $s2 goto :null40
+ Error("null pointer")
+null40:
+ $t0 = [$s2]
+ $t0 = [$t0+20]
+ $a0 = $s2
+ call $t0
+ $s2 = $v0
+ if $s1 goto :null41
+ Error("null pointer")
+null41:
+ $t0 = [$s1]
+ $t0 = [$t0+16]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if $t0 goto :null42
+ Error("null pointer")
+null42:
+ $t1 = [$t0]
+ $t1 = [$t1+20]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ $t0 = [$s0]
+ $t0 = [$t0+44]
+ $a0 = $s0
+ $a1 = $s2
+ $a2 = $t1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if14_else
+ if $s1 goto :null43
+ Error("null pointer")
+null43:
+ $t0 = [$s1]
+ $t0 = [$t0+8]
+ $t1 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t1
+ call $t0
+ if $s1 goto :null44
+ Error("null pointer")
+null44:
+ $t1 = [$s1]
+ $t1 = [$t1+36]
+ $a0 = $s1
+ $a1 = 0
+ call $t1
+ goto :if14_end
+if14_else:
+ if $s1 goto :null45
+ Error("null pointer")
+null45:
+ $t1 = [$s1]
+ $t1 = [$t1+4]
+ $t0 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t0
+ call $t1
+ if $s1 goto :null46
+ Error("null pointer")
+null46:
+ $t0 = [$s1]
+ $t0 = [$t0+40]
+ $a0 = $s1
+ $a1 = 0
+ call $t0
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while3_top:
+ if $s2 goto :null47
+ Error("null pointer")
+null47:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :while3_end
+ if $s2 goto :null48
+ Error("null pointer")
+null48:
+ $s3 = [$s2]
+ $s3 = [$s3+24]
+ if $s2 goto :null49
+ Error("null pointer")
+null49:
+ $t0 = [$s2]
+ $t0 = [$t0+12]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if $t0 goto :null50
+ Error("null pointer")
+null50:
+ $t1 = [$t0]
+ $t1 = [$t1+20]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ $a0 = $s2
+ $a1 = $t1
+ call $s3
+ $s1 = $s2
+ if $s2 goto :null51
+ Error("null pointer")
+null51:
+ $t1 = [$s2]
+ $t1 = [$t1+12]
+ $a0 = $s2
+ call $t1
+ $s2 = $v0
+ goto :while3_top
+while3_end:
+ if $s1 goto :null52
+ Error("null pointer")
+null52:
+ $t1 = [$s1]
+ $t1 = [$t1+4]
+ $t0 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t0
+ call $t1
+ if $s1 goto :null53
+ Error("null pointer")
+null53:
+ $t0 = [$s1]
+ $t0 = [$t0+40]
+ $a0 = $s1
+ $a1 = 0
+ call $t0
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while4_top:
+ if $s2 goto :null54
+ Error("null pointer")
+null54:
+ $t0 = [$s2]
+ $t0 = [$t0+32]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :while4_end
+ if $s2 goto :null55
+ Error("null pointer")
+null55:
+ $s3 = [$s2]
+ $s3 = [$s3+24]
+ if $s2 goto :null56
+ Error("null pointer")
+null56:
+ $t0 = [$s2]
+ $t0 = [$t0+16]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if $t0 goto :null57
+ Error("null pointer")
+null57:
+ $t1 = [$t0]
+ $t1 = [$t1+20]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ $a0 = $s2
+ $a1 = $t1
+ call $s3
+ $s1 = $s2
+ if $s2 goto :null58
+ Error("null pointer")
+null58:
+ $t1 = [$s2]
+ $t1 = [$t1+16]
+ $a0 = $s2
+ call $t1
+ $s2 = $v0
+ goto :while4_top
+while4_end:
+ if $s1 goto :null59
+ Error("null pointer")
+null59:
+ $t1 = [$s1]
+ $t1 = [$t1+8]
+ $t0 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t0
+ call $t1
+ if $s1 goto :null60
+ Error("null pointer")
+null60:
+ $t0 = [$s1]
+ $t0 = [$t0+36]
+ $a0 = $s1
+ $a1 = 0
+ call $t0
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = $t0
+ $s2 = 1
+ $s3 = 0
+while5_top:
+ if0 $s2 goto :while5_end
+ if $s1 goto :null61
+ Error("null pointer")
+null61:
+ $t0 = [$s1]
+ $t0 = [$t0+20]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $t1 = LtS($s0 $t0)
+ if0 $t1 goto :if15_else
+ if $s1 goto :null62
+ Error("null pointer")
+null62:
+ $t1 = [$s1]
+ $t1 = [$t1+32]
+ $a0 = $s1
+ call $t1
+ $t1 = $v0
+ if0 $t1 goto :if16_else
+ if $s1 goto :null63
+ Error("null pointer")
+null63:
+ $t1 = [$s1]
+ $t1 = [$t1+16]
+ $a0 = $s1
+ call $t1
+ $s1 = $v0
+ goto :if16_end
+if16_else:
+ $s2 = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0 = LtS($t0 $s0)
+ if0 $t0 goto :if17_else
+ if $s1 goto :null64
+ Error("null pointer")
+null64:
+ $t0 = [$s1]
+ $t0 = [$t0+28]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if18_else
+ if $s1 goto :null65
+ Error("null pointer")
+null65:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $s1 = $v0
+ goto :if18_end
+if18_else:
+ $s2 = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3 = 1
+ $s2 = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $t0
+ $t2 = [$t0]
+ $t2 = [$t2+76]
+ $a0 = $t0
+ $a1 = $t1
+ call $t2
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null66
+ Error("null pointer")
+null66:
+ $t0 = [$s1]
+ $t0 = [$t0+32]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if19_else
+ $s2 = [$s0]
+ $s2 = [$s2+76]
+ if $s1 goto :null67
+ Error("null pointer")
+null67:
+ $t0 = [$s1]
+ $t0 = [$t0+16]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call $s2
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1 goto :null68
+ Error("null pointer")
+null68:
+ $t0 = [$s1]
+ $t0 = [$t0+20]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s1 goto :null69
+ Error("null pointer")
+null69:
+ $t0 = [$s1]
+ $t0 = [$t0+28]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if20_else
+ $s2 = [$s0]
+ $s2 = [$s2+76]
+ if $s1 goto :null70
+ Error("null pointer")
+null70:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call $s2
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
diff --git a/base/Branch-error.java b/base/Branch-error.java
new file mode 100644
index 0000000..bc58ff4
--- /dev/null
+++ b/base/Branch-error.java
@@ -0,0 +1,11 @@
+class Branch {
+ public static void main(String[] a) {
+ int a ;
+ a = 3 ;
+
+ if (a)
+ System.out.println(1) ;
+ else
+ System.out.println(2) ;
+ }
+}
diff --git a/base/Branch.java b/base/Branch.java
new file mode 100644
index 0000000..43df01f
--- /dev/null
+++ b/base/Branch.java
@@ -0,0 +1,11 @@
+class Branch {
+ public static void main(String[] a) {
+ boolean b ;
+ b = false ;
+
+ if (b)
+ System.out.println(1) ;
+ else
+ System.out.println(2) ;
+ }
+}
diff --git a/base/BubbleSort-error.java b/base/BubbleSort-error.java
new file mode 100644
index 0000000..97a1c1d
--- /dev/null
+++ b/base/BubbleSort-error.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 = sz1 ; //TE
+ 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/base/BubbleSort.java b/base/BubbleSort.java
new file mode 100644
index 0000000..e5645a9
--- /dev/null
+++ b/base/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/base/BubbleSort.names.vaporm b/base/BubbleSort.names.vaporm
new file mode 100644
index 0000000..9984ffe
--- /dev/null
+++ b/base/BubbleSort.names.vaporm
@@ -0,0 +1,316 @@
+const vmt_BBS
+ :BBS.Start
+ :BBS.Sort
+ :BBS.Print
+ :BBS.Init
+
+func Main [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(12)
+ [$t0{t.0}] = :vmt_BBS
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ $a1 = 10
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func BBS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ $t1{t.0} = [$s0{this}]
+ $t1{t.0} = [$t1{t.0}+12]
+ $a0 = $s0{this}
+ $a1 = $t0{sz}
+ call $t1{t.0}
+ $t1{t.1} = [$s0{this}]
+ $t1{t.1} = [$t1{t.1}+8]
+ $a0 = $s0{this}
+ call $t1{t.1}
+ PrintIntS(99999)
+ $t1{t.2} = [$s0{this}]
+ $t1{t.2} = [$t1{t.2}+4]
+ $a0 = $s0{this}
+ call $t1{t.2}
+ $t1{t.3} = [$s0{this}]
+ $t1{t.3} = [$t1{t.3}+8]
+ $a0 = $s0{this}
+ call $t1{t.3}
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func BBS.Sort [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{t.0} = [$t0{this}+8]
+ $t1{i} = Sub($t1{t.0} 1)
+ $t2{aux02} = Sub(0 1)
+while1_top:
+ $t3{t.1} = LtS($t2{aux02} $t1{i})
+ if0 $t3{t.1} goto :while1_end
+ $t3{j} = 1
+while2_top:
+ $t4{t.2} = Add($t1{i} 1)
+ $t4{t.3} = LtS($t3{j} $t4{t.2})
+ if0 $t4{t.3} goto :while2_end
+ $t4{aux07} = Sub($t3{j} 1)
+ $t5{t.4} = [$t0{this}+4]
+ if $t5{t.4} goto :null2
+ Error("null pointer")
+null2:
+ $t6{t.5} = [$t5{t.4}]
+ $t6{t.5} = Lt($t4{aux07} $t6{t.5})
+ if $t6{t.5} goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t6{t.5} = MulS($t4{aux07} 4)
+ $t6{t.5} = Add($t6{t.5} $t5{t.4})
+ $t6{aux04} = [$t6{t.5}+4]
+ $t5{t.6} = [$t0{this}+4]
+ if $t5{t.6} goto :null3
+ Error("null pointer")
+null3:
+ $t4{t.7} = [$t5{t.6}]
+ $t4{t.7} = Lt($t3{j} $t4{t.7})
+ if $t4{t.7} goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t4{t.7} = MulS($t3{j} 4)
+ $t4{t.7} = Add($t4{t.7} $t5{t.6})
+ $t4{aux05} = [$t4{t.7}+4]
+ $t4{t.8} = LtS($t4{aux05} $t6{aux04})
+ if0 $t4{t.8} goto :if1_else
+ $t4{aux06} = Sub($t3{j} 1)
+ $t6{t.9} = [$t0{this}+4]
+ if $t6{t.9} goto :null4
+ Error("null pointer")
+null4:
+ $t5{t.10} = [$t6{t.9}]
+ $t5{t.10} = Lt($t4{aux06} $t5{t.10})
+ if $t5{t.10} goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5{t.10} = MulS($t4{aux06} 4)
+ $t5{t.10} = Add($t5{t.10} $t6{t.9})
+ $t5{t} = [$t5{t.10}+4]
+ $t6{t.11} = [$t0{this}+4]
+ if $t6{t.11} goto :null5
+ Error("null pointer")
+null5:
+ $t7{t.12} = [$t6{t.11}]
+ $t7{t.12} = Lt($t4{aux06} $t7{t.12})
+ if $t7{t.12} goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7{t.12} = MulS($t4{aux06} 4)
+ $t7{t.12} = Add($t7{t.12} $t6{t.11})
+ $t6{t.13} = [$t0{this}+4]
+ if $t6{t.13} goto :null6
+ Error("null pointer")
+null6:
+ $t4{t.14} = [$t6{t.13}]
+ $t4{t.14} = Lt($t3{j} $t4{t.14})
+ if $t4{t.14} goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t4{t.14} = MulS($t3{j} 4)
+ $t4{t.14} = Add($t4{t.14} $t6{t.13})
+ $t4{t.15} = [$t4{t.14}+4]
+ [$t7{t.12}+4] = $t4{t.15}
+ $t4{t.16} = [$t0{this}+4]
+ if $t4{t.16} goto :null7
+ Error("null pointer")
+null7:
+ $t7{t.17} = [$t4{t.16}]
+ $t7{t.17} = Lt($t3{j} $t7{t.17})
+ if $t7{t.17} goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t7{t.17} = MulS($t3{j} 4)
+ $t7{t.17} = Add($t7{t.17} $t4{t.16})
+ [$t7{t.17}+4] = $t5{t}
+ goto :if1_end
+if1_else:
+if1_end:
+ $t3{j} = Add($t3{j} 1)
+ goto :while2_top
+while2_end:
+ $t1{i} = Sub($t1{i} 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func BBS.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{j} = 0
+while3_top:
+ $t2{t.0} = [$t0{this}+8]
+ $t2{t.1} = LtS($t1{j} $t2{t.0})
+ if0 $t2{t.1} goto :while3_end
+ $t2{t.2} = [$t0{this}+4]
+ if $t2{t.2} goto :null8
+ Error("null pointer")
+null8:
+ $t3{t.3} = [$t2{t.2}]
+ $t3{t.3} = Lt($t1{j} $t3{t.3})
+ if $t3{t.3} goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t3{t.3} = MulS($t1{j} 4)
+ $t3{t.3} = Add($t3{t.3} $t2{t.2})
+ $t3{t.4} = [$t3{t.3}+4]
+ PrintIntS($t3{t.4})
+ $t1{j} = Add($t1{j} 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ ret
+
+func BBS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ [$s0{this}+8] = $t0{sz}
+ $a0 = $t0{sz}
+ call :AllocArray
+ $t0{t.0} = $v0
+ [$s0{this}+4] = $t0{t.0}
+ $t0{t.1} = [$s0{this}+4]
+ if $t0{t.1} goto :null9
+ Error("null pointer")
+null9:
+ $t1{t.2} = [$t0{t.1}]
+ $t1{t.2} = Lt(0 $t1{t.2})
+ if $t1{t.2} goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t1{t.2} = MulS(0 4)
+ $t1{t.2} = Add($t1{t.2} $t0{t.1})
+ [$t1{t.2}+4] = 20
+ $t1{t.3} = [$s0{this}+4]
+ if $t1{t.3} goto :null10
+ Error("null pointer")
+null10:
+ $t0{t.4} = [$t1{t.3}]
+ $t0{t.4} = Lt(1 $t0{t.4})
+ if $t0{t.4} goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t0{t.4} = MulS(1 4)
+ $t0{t.4} = Add($t0{t.4} $t1{t.3})
+ [$t0{t.4}+4] = 7
+ $t0{t.5} = [$s0{this}+4]
+ if $t0{t.5} goto :null11
+ Error("null pointer")
+null11:
+ $t1{t.6} = [$t0{t.5}]
+ $t1{t.6} = Lt(2 $t1{t.6})
+ if $t1{t.6} goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t1{t.6} = MulS(2 4)
+ $t1{t.6} = Add($t1{t.6} $t0{t.5})
+ [$t1{t.6}+4] = 12
+ $t1{t.7} = [$s0{this}+4]
+ if $t1{t.7} goto :null12
+ Error("null pointer")
+null12:
+ $t0{t.8} = [$t1{t.7}]
+ $t0{t.8} = Lt(3 $t0{t.8})
+ if $t0{t.8} goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t0{t.8} = MulS(3 4)
+ $t0{t.8} = Add($t0{t.8} $t1{t.7})
+ [$t0{t.8}+4] = 18
+ $t0{t.9} = [$s0{this}+4]
+ if $t0{t.9} goto :null13
+ Error("null pointer")
+null13:
+ $t1{t.10} = [$t0{t.9}]
+ $t1{t.10} = Lt(4 $t1{t.10})
+ if $t1{t.10} goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t1{t.10} = MulS(4 4)
+ $t1{t.10} = Add($t1{t.10} $t0{t.9})
+ [$t1{t.10}+4] = 2
+ $t1{t.11} = [$s0{this}+4]
+ if $t1{t.11} goto :null14
+ Error("null pointer")
+null14:
+ $t0{t.12} = [$t1{t.11}]
+ $t0{t.12} = Lt(5 $t0{t.12})
+ if $t0{t.12} goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t0{t.12} = MulS(5 4)
+ $t0{t.12} = Add($t0{t.12} $t1{t.11})
+ [$t0{t.12}+4] = 11
+ $t0{t.13} = [$s0{this}+4]
+ if $t0{t.13} goto :null15
+ Error("null pointer")
+null15:
+ $t1{t.14} = [$t0{t.13}]
+ $t1{t.14} = Lt(6 $t1{t.14})
+ if $t1{t.14} goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1{t.14} = MulS(6 4)
+ $t1{t.14} = Add($t1{t.14} $t0{t.13})
+ [$t1{t.14}+4] = 6
+ $t1{t.15} = [$s0{this}+4]
+ if $t1{t.15} goto :null16
+ Error("null pointer")
+null16:
+ $t0{t.16} = [$t1{t.15}]
+ $t0{t.16} = Lt(7 $t0{t.16})
+ if $t0{t.16} goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0{t.16} = MulS(7 4)
+ $t0{t.16} = Add($t0{t.16} $t1{t.15})
+ [$t0{t.16}+4] = 9
+ $t0{t.17} = [$s0{this}+4]
+ if $t0{t.17} goto :null17
+ Error("null pointer")
+null17:
+ $t1{t.18} = [$t0{t.17}]
+ $t1{t.18} = Lt(8 $t1{t.18})
+ if $t1{t.18} goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1{t.18} = MulS(8 4)
+ $t1{t.18} = Add($t1{t.18} $t0{t.17})
+ [$t1{t.18}+4] = 19
+ $t1{t.19} = [$s0{this}+4]
+ if $t1{t.19} goto :null18
+ Error("null pointer")
+null18:
+ $t0{t.20} = [$t1{t.19}]
+ $t0{t.20} = Lt(9 $t0{t.20})
+ if $t0{t.20} goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0{t.20} = MulS(9 4)
+ $t0{t.20} = Add($t0{t.20} $t1{t.19})
+ [$t0{t.20}+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0{size} = $a0
+ $t1{bytes} = MulS($t0{size} 4)
+ $t1{bytes} = Add($t1{bytes} 4)
+ $t1{v} = HeapAllocZ($t1{bytes})
+ [$t1{v}] = $t0{size}
+ $v0 = $t1{v}
+ ret
+
diff --git a/base/BubbleSort.opt.names.vaporm b/base/BubbleSort.opt.names.vaporm
new file mode 100644
index 0000000..943b295
--- /dev/null
+++ b/base/BubbleSort.opt.names.vaporm
@@ -0,0 +1,301 @@
+const empty_BBS
+
+func Main [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(8)
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $t0{t.0}
+ $a1 = 10
+ call :BBS.Start
+ $t0{t.1} = $v0
+ PrintIntS($t0{t.1})
+ ret
+
+func BBS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ $a0 = $s0{this}
+ $a1 = $t0{sz}
+ call :BBS.Init
+ $a0 = $s0{this}
+ call :BBS.Print
+ PrintIntS(99999)
+ $a0 = $s0{this}
+ call :BBS.Sort
+ $a0 = $s0{this}
+ call :BBS.Print
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func BBS.Sort [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{t.0} = [$t0{this}+4]
+ $t1{i} = Sub($t1{t.0} 1)
+ $t2{aux02} = Sub(0 1)
+while1_top:
+ $t3{t.1} = LtS($t2{aux02} $t1{i})
+ if0 $t3{t.1} goto :while1_end
+ $t3{j} = 1
+while2_top:
+ $t4{t.2} = Add($t1{i} 1)
+ $t4{t.3} = LtS($t3{j} $t4{t.2})
+ if0 $t4{t.3} goto :while2_end
+ $t4{aux07} = Sub($t3{j} 1)
+ $t5{t.4} = [$t0{this}]
+ if $t5{t.4} goto :null2
+ Error("null pointer")
+null2:
+ $t6{t.5} = [$t5{t.4}]
+ $t6{t.5} = Lt($t4{aux07} $t6{t.5})
+ if $t6{t.5} goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t6{t.5} = MulS($t4{aux07} 4)
+ $t6{t.5} = Add($t6{t.5} $t5{t.4})
+ $t6{aux04} = [$t6{t.5}+4]
+ $t5{t.6} = [$t0{this}]
+ if $t5{t.6} goto :null3
+ Error("null pointer")
+null3:
+ $t4{t.7} = [$t5{t.6}]
+ $t4{t.7} = Lt($t3{j} $t4{t.7})
+ if $t4{t.7} goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t4{t.7} = MulS($t3{j} 4)
+ $t4{t.7} = Add($t4{t.7} $t5{t.6})
+ $t4{aux05} = [$t4{t.7}+4]
+ $t4{t.8} = LtS($t4{aux05} $t6{aux04})
+ if0 $t4{t.8} goto :if1_else
+ $t4{aux06} = Sub($t3{j} 1)
+ $t6{t.9} = [$t0{this}]
+ if $t6{t.9} goto :null4
+ Error("null pointer")
+null4:
+ $t5{t.10} = [$t6{t.9}]
+ $t5{t.10} = Lt($t4{aux06} $t5{t.10})
+ if $t5{t.10} goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5{t.10} = MulS($t4{aux06} 4)
+ $t5{t.10} = Add($t5{t.10} $t6{t.9})
+ $t5{t} = [$t5{t.10}+4]
+ $t6{t.11} = [$t0{this}]
+ if $t6{t.11} goto :null5
+ Error("null pointer")
+null5:
+ $t7{t.12} = [$t6{t.11}]
+ $t7{t.12} = Lt($t4{aux06} $t7{t.12})
+ if $t7{t.12} goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7{t.12} = MulS($t4{aux06} 4)
+ $t7{t.12} = Add($t7{t.12} $t6{t.11})
+ $t6{t.13} = [$t0{this}]
+ if $t6{t.13} goto :null6
+ Error("null pointer")
+null6:
+ $t4{t.14} = [$t6{t.13}]
+ $t4{t.14} = Lt($t3{j} $t4{t.14})
+ if $t4{t.14} goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t4{t.14} = MulS($t3{j} 4)
+ $t4{t.14} = Add($t4{t.14} $t6{t.13})
+ $t4{t.15} = [$t4{t.14}+4]
+ [$t7{t.12}+4] = $t4{t.15}
+ $t4{t.16} = [$t0{this}]
+ if $t4{t.16} goto :null7
+ Error("null pointer")
+null7:
+ $t7{t.17} = [$t4{t.16}]
+ $t7{t.17} = Lt($t3{j} $t7{t.17})
+ if $t7{t.17} goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t7{t.17} = MulS($t3{j} 4)
+ $t7{t.17} = Add($t7{t.17} $t4{t.16})
+ [$t7{t.17}+4] = $t5{t}
+ goto :if1_end
+if1_else:
+if1_end:
+ $t3{j} = Add($t3{j} 1)
+ goto :while2_top
+while2_end:
+ $t1{i} = Sub($t1{i} 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func BBS.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{j} = 0
+while3_top:
+ $t2{t.0} = [$t0{this}+4]
+ $t2{t.1} = LtS($t1{j} $t2{t.0})
+ if0 $t2{t.1} goto :while3_end
+ $t2{t.2} = [$t0{this}]
+ if $t2{t.2} goto :null8
+ Error("null pointer")
+null8:
+ $t3{t.3} = [$t2{t.2}]
+ $t3{t.3} = Lt($t1{j} $t3{t.3})
+ if $t3{t.3} goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t3{t.3} = MulS($t1{j} 4)
+ $t3{t.3} = Add($t3{t.3} $t2{t.2})
+ $t3{t.4} = [$t3{t.3}+4]
+ PrintIntS($t3{t.4})
+ $t1{j} = Add($t1{j} 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ ret
+
+func BBS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ [$s0{this}+4] = $t0{sz}
+ $a0 = $t0{sz}
+ call :AllocArray
+ $t0{t.0} = $v0
+ [$s0{this}] = $t0{t.0}
+ $t0{t.1} = [$s0{this}]
+ if $t0{t.1} goto :null9
+ Error("null pointer")
+null9:
+ $t1{t.2} = [$t0{t.1}]
+ $t1{t.2} = Lt(0 $t1{t.2})
+ if $t1{t.2} goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t1{t.2} = MulS(0 4)
+ $t1{t.2} = Add($t1{t.2} $t0{t.1})
+ [$t1{t.2}+4] = 20
+ $t1{t.3} = [$s0{this}]
+ if $t1{t.3} goto :null10
+ Error("null pointer")
+null10:
+ $t0{t.4} = [$t1{t.3}]
+ $t0{t.4} = Lt(1 $t0{t.4})
+ if $t0{t.4} goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t0{t.4} = MulS(1 4)
+ $t0{t.4} = Add($t0{t.4} $t1{t.3})
+ [$t0{t.4}+4] = 7
+ $t0{t.5} = [$s0{this}]
+ if $t0{t.5} goto :null11
+ Error("null pointer")
+null11:
+ $t1{t.6} = [$t0{t.5}]
+ $t1{t.6} = Lt(2 $t1{t.6})
+ if $t1{t.6} goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t1{t.6} = MulS(2 4)
+ $t1{t.6} = Add($t1{t.6} $t0{t.5})
+ [$t1{t.6}+4] = 12
+ $t1{t.7} = [$s0{this}]
+ if $t1{t.7} goto :null12
+ Error("null pointer")
+null12:
+ $t0{t.8} = [$t1{t.7}]
+ $t0{t.8} = Lt(3 $t0{t.8})
+ if $t0{t.8} goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t0{t.8} = MulS(3 4)
+ $t0{t.8} = Add($t0{t.8} $t1{t.7})
+ [$t0{t.8}+4] = 18
+ $t0{t.9} = [$s0{this}]
+ if $t0{t.9} goto :null13
+ Error("null pointer")
+null13:
+ $t1{t.10} = [$t0{t.9}]
+ $t1{t.10} = Lt(4 $t1{t.10})
+ if $t1{t.10} goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t1{t.10} = MulS(4 4)
+ $t1{t.10} = Add($t1{t.10} $t0{t.9})
+ [$t1{t.10}+4] = 2
+ $t1{t.11} = [$s0{this}]
+ if $t1{t.11} goto :null14
+ Error("null pointer")
+null14:
+ $t0{t.12} = [$t1{t.11}]
+ $t0{t.12} = Lt(5 $t0{t.12})
+ if $t0{t.12} goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t0{t.12} = MulS(5 4)
+ $t0{t.12} = Add($t0{t.12} $t1{t.11})
+ [$t0{t.12}+4] = 11
+ $t0{t.13} = [$s0{this}]
+ if $t0{t.13} goto :null15
+ Error("null pointer")
+null15:
+ $t1{t.14} = [$t0{t.13}]
+ $t1{t.14} = Lt(6 $t1{t.14})
+ if $t1{t.14} goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1{t.14} = MulS(6 4)
+ $t1{t.14} = Add($t1{t.14} $t0{t.13})
+ [$t1{t.14}+4] = 6
+ $t1{t.15} = [$s0{this}]
+ if $t1{t.15} goto :null16
+ Error("null pointer")
+null16:
+ $t0{t.16} = [$t1{t.15}]
+ $t0{t.16} = Lt(7 $t0{t.16})
+ if $t0{t.16} goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0{t.16} = MulS(7 4)
+ $t0{t.16} = Add($t0{t.16} $t1{t.15})
+ [$t0{t.16}+4] = 9
+ $t0{t.17} = [$s0{this}]
+ if $t0{t.17} goto :null17
+ Error("null pointer")
+null17:
+ $t1{t.18} = [$t0{t.17}]
+ $t1{t.18} = Lt(8 $t1{t.18})
+ if $t1{t.18} goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1{t.18} = MulS(8 4)
+ $t1{t.18} = Add($t1{t.18} $t0{t.17})
+ [$t1{t.18}+4] = 19
+ $t1{t.19} = [$s0{this}]
+ if $t1{t.19} goto :null18
+ Error("null pointer")
+null18:
+ $t0{t.20} = [$t1{t.19}]
+ $t0{t.20} = Lt(9 $t0{t.20})
+ if $t0{t.20} goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0{t.20} = MulS(9 4)
+ $t0{t.20} = Add($t0{t.20} $t1{t.19})
+ [$t0{t.20}+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0{size} = $a0
+ $t1{bytes} = MulS($t0{size} 4)
+ $t1{bytes} = Add($t1{bytes} 4)
+ $t1{v} = HeapAllocZ($t1{bytes})
+ [$t1{v}] = $t0{size}
+ $v0 = $t1{v}
+ ret
+
diff --git a/base/BubbleSort.opt.regalloc b/base/BubbleSort.opt.regalloc
new file mode 100644
index 0000000..5696e19
--- /dev/null
+++ b/base/BubbleSort.opt.regalloc
@@ -0,0 +1,230 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 7 10
+ t.1: 11
+Linear Range:
+ t.0: 6-10
+ t.1: 10-11
+Allocation:
+ t.0: t0
+ t.1: t0
+
+func BBS.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 15-19
+ sz: 15
+ aux01:
+Linear Range:
+ this: 14-19 (cross call)
+ sz: 14-15
+Allocation:
+ this: s0
+ sz: t0
+
+func BBS.Sort
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 23-36 39-41 44-48 51-53 56-63 66-68 71-75 78-80 83-86 89-91 94-99 102-104 107-118
+ t.0: 24
+ i: 25-36 39-41 44-48 51-53 56-63 66-68 71-75 78-80 83-86 89-91 94-99 102-104 107-118
+ aux02: 27-36 39-41 44-48 51-53 56-63 66-68 71-75 78-80 83-86 89-91 94-99 102-104 107-118
+ t.1: 28
+ j: 31-36 39-41 44-48 51-53 56-63 66-68 71-75 78-80 83-86 89-91 94-99 102-104 107-115
+ t.2: 32
+ t.3: 33
+ aux07: 35-36 39-41 44
+ t.4: 36 39-41 44-45
+ t.5: 40-41 45-46
+ aux04: 47-48 51-53 56-59
+ t.6: 48 51-53 56-57
+ t.7: 52-53 57-58
+ aux05: 59
+ t.8: 60
+ aux06: 62-63 66-68 71-75 78-80 83
+ t.9: 63 66-68 71-72
+ t.10: 67-68 72-73
+ t: 74-75 78-80 83-86 89-91 94-99 102-104 107-109
+ t.11: 75 78-80 83-84
+ t.12: 79-80 84-86 89-91 94-97
+ t.13: 86 89-91 94-95
+ t.14: 90-91 95-96
+ t.15: 97
+ t.16: 99 102-104 107-108
+ t.17: 103-104 108-109
+ nt:
+Linear Range:
+ this: 22-118
+ t.0: 23-24
+ i: 24-118
+ aux02: 25-118
+ t.1: 27-28
+ j: 29-115
+ t.2: 31-32
+ t.3: 32-33
+ aux07: 34-44
+ t.4: 35-45
+ t.5: 39-46
+ aux04: 46-59
+ t.6: 47-57
+ t.7: 51-58
+ aux05: 58-59
+ t.8: 59-60
+ aux06: 61-83
+ t.9: 62-72
+ t.10: 66-73
+ t: 73-109
+ t.11: 74-84
+ t.12: 78-97
+ t.13: 85-95
+ t.14: 89-96
+ t.15: 96-97
+ t.16: 98-108
+ t.17: 102-109
+Allocation:
+ this: t0
+ t.0: t1
+ i: t1
+ aux02: t2
+ t.1: t3
+ j: t3
+ t.2: t4
+ t.3: t4
+ aux07: t4
+ t.4: t5
+ t.5: t6
+ aux04: t6
+ t.6: t5
+ t.7: t4
+ aux05: t4
+ t.8: t4
+ aux06: t4
+ t.9: t6
+ t.10: t5
+ t: t5
+ t.11: t6
+ t.12: t7
+ t.13: t6
+ t.14: t4
+ t.15: t4
+ t.16: t4
+ t.17: t7
+
+func BBS.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 123-129 132-134 137-142
+ j: 125-129 132-134 137-142
+ t.0: 126
+ t.1: 127
+ t.2: 129 132-134 137-138
+ t.3: 133-134 138-139
+ t.4: 140
+Linear Range:
+ this: 122-142
+ j: 123-142
+ t.0: 125-126
+ t.1: 126-127
+ t.2: 128-138
+ t.3: 132-139
+ t.4: 139-140
+Allocation:
+ this: t0
+ j: t1
+ t.0: t2
+ t.1: t2
+ t.2: t2
+ t.3: t3
+ t.4: t3
+
+func BBS.Init
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 147-151 154-156 159-163 166-168 171-175 178-180 183-187 190-192 195-199 202-204 207-211 214-216 219-223 226-228 231-235 238-240 243-247 250-252 255-258
+ sz: 147-148
+ t.0: 149
+ t.1: 151 154-156 159-160
+ t.2: 155-156 160-161
+ t.3: 163 166-168 171-172
+ t.4: 167-168 172-173
+ t.5: 175 178-180 183-184
+ t.6: 179-180 184-185
+ t.7: 187 190-192 195-196
+ t.8: 191-192 196-197
+ t.9: 199 202-204 207-208
+ t.10: 203-204 208-209
+ t.11: 211 214-216 219-220
+ t.12: 215-216 220-221
+ t.13: 223 226-228 231-232
+ t.14: 227-228 232-233
+ t.15: 235 238-240 243-244
+ t.16: 239-240 244-245
+ t.17: 247 250-252 255-256
+ t.18: 251-252 256-257
+ t.19: 259 262-264 267-268
+ t.20: 263-264 268-269
+Linear Range:
+ this: 146-258 (cross call)
+ sz: 146-148
+ t.0: 148-149
+ t.1: 150-160
+ t.2: 154-161
+ t.3: 162-172
+ t.4: 166-173
+ t.5: 174-184
+ t.6: 178-185
+ t.7: 186-196
+ t.8: 190-197
+ t.9: 198-208
+ t.10: 202-209
+ t.11: 210-220
+ t.12: 214-221
+ t.13: 222-232
+ t.14: 226-233
+ t.15: 234-244
+ t.16: 238-245
+ t.17: 246-256
+ t.18: 250-257
+ t.19: 258-268
+ t.20: 262-269
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t0
+ t.1: t0
+ t.2: t1
+ t.3: t1
+ t.4: t0
+ t.5: t0
+ t.6: t1
+ t.7: t1
+ t.8: t0
+ t.9: t0
+ t.10: t1
+ t.11: t1
+ t.12: t0
+ t.13: t0
+ t.14: t1
+ t.15: t1
+ t.16: t0
+ t.17: t0
+ t.18: t1
+ t.19: t1
+ t.20: t0
+
+func AllocArray
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ size: 273-276
+ bytes: 274-275
+ v: 276-277
+Linear Range:
+ size: 272-276
+ bytes: 273-275
+ v: 275-277
+Allocation:
+ size: t0
+ bytes: t1
+ v: t1
+
diff --git a/base/BubbleSort.opt.vapor b/base/BubbleSort.opt.vapor
new file mode 100644
index 0000000..a118894
--- /dev/null
+++ b/base/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/base/BubbleSort.opt.vaporm b/base/BubbleSort.opt.vaporm
new file mode 100644
index 0000000..41c6ac4
--- /dev/null
+++ b/base/BubbleSort.opt.vaporm
@@ -0,0 +1,301 @@
+const empty_BBS
+
+func Main [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(8)
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $t0
+ $a1 = 10
+ call :BBS.Start
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func BBS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ $a0 = $s0
+ $a1 = $t0
+ call :BBS.Init
+ $a0 = $s0
+ call :BBS.Print
+ PrintIntS(99999)
+ $a0 = $s0
+ call :BBS.Sort
+ $a0 = $s0
+ call :BBS.Print
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func BBS.Sort [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = [$t0+4]
+ $t1 = Sub($t1 1)
+ $t2 = Sub(0 1)
+while1_top:
+ $t3 = LtS($t2 $t1)
+ if0 $t3 goto :while1_end
+ $t3 = 1
+while2_top:
+ $t4 = Add($t1 1)
+ $t4 = LtS($t3 $t4)
+ if0 $t4 goto :while2_end
+ $t4 = Sub($t3 1)
+ $t5 = [$t0]
+ if $t5 goto :null2
+ Error("null pointer")
+null2:
+ $t6 = [$t5]
+ $t6 = Lt($t4 $t6)
+ if $t6 goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t6 = MulS($t4 4)
+ $t6 = Add($t6 $t5)
+ $t6 = [$t6+4]
+ $t5 = [$t0]
+ if $t5 goto :null3
+ Error("null pointer")
+null3:
+ $t4 = [$t5]
+ $t4 = Lt($t3 $t4)
+ if $t4 goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t4 = MulS($t3 4)
+ $t4 = Add($t4 $t5)
+ $t4 = [$t4+4]
+ $t4 = LtS($t4 $t6)
+ if0 $t4 goto :if1_else
+ $t4 = Sub($t3 1)
+ $t6 = [$t0]
+ if $t6 goto :null4
+ Error("null pointer")
+null4:
+ $t5 = [$t6]
+ $t5 = Lt($t4 $t5)
+ if $t5 goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5 = MulS($t4 4)
+ $t5 = Add($t5 $t6)
+ $t5 = [$t5+4]
+ $t6 = [$t0]
+ if $t6 goto :null5
+ Error("null pointer")
+null5:
+ $t7 = [$t6]
+ $t7 = Lt($t4 $t7)
+ if $t7 goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7 = MulS($t4 4)
+ $t7 = Add($t7 $t6)
+ $t6 = [$t0]
+ if $t6 goto :null6
+ Error("null pointer")
+null6:
+ $t4 = [$t6]
+ $t4 = Lt($t3 $t4)
+ if $t4 goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t4 = MulS($t3 4)
+ $t4 = Add($t4 $t6)
+ $t4 = [$t4+4]
+ [$t7+4] = $t4
+ $t4 = [$t0]
+ if $t4 goto :null7
+ Error("null pointer")
+null7:
+ $t7 = [$t4]
+ $t7 = Lt($t3 $t7)
+ if $t7 goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t7 = MulS($t3 4)
+ $t7 = Add($t7 $t4)
+ [$t7+4] = $t5
+ goto :if1_end
+if1_else:
+if1_end:
+ $t3 = Add($t3 1)
+ goto :while2_top
+while2_end:
+ $t1 = Sub($t1 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func BBS.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = 0
+while3_top:
+ $t2 = [$t0+4]
+ $t2 = LtS($t1 $t2)
+ if0 $t2 goto :while3_end
+ $t2 = [$t0]
+ if $t2 goto :null8
+ Error("null pointer")
+null8:
+ $t3 = [$t2]
+ $t3 = Lt($t1 $t3)
+ if $t3 goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t3 = MulS($t1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ PrintIntS($t3)
+ $t1 = Add($t1 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ ret
+
+func BBS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ [$s0+4] = $t0
+ $a0 = $t0
+ call :AllocArray
+ $t0 = $v0
+ [$s0] = $t0
+ $t0 = [$s0]
+ if $t0 goto :null9
+ Error("null pointer")
+null9:
+ $t1 = [$t0]
+ $t1 = Lt(0 $t1)
+ if $t1 goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t1 = MulS(0 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 20
+ $t1 = [$s0]
+ if $t1 goto :null10
+ Error("null pointer")
+null10:
+ $t0 = [$t1]
+ $t0 = Lt(1 $t0)
+ if $t0 goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t0 = MulS(1 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 7
+ $t0 = [$s0]
+ if $t0 goto :null11
+ Error("null pointer")
+null11:
+ $t1 = [$t0]
+ $t1 = Lt(2 $t1)
+ if $t1 goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t1 = MulS(2 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 12
+ $t1 = [$s0]
+ if $t1 goto :null12
+ Error("null pointer")
+null12:
+ $t0 = [$t1]
+ $t0 = Lt(3 $t0)
+ if $t0 goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t0 = MulS(3 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 18
+ $t0 = [$s0]
+ if $t0 goto :null13
+ Error("null pointer")
+null13:
+ $t1 = [$t0]
+ $t1 = Lt(4 $t1)
+ if $t1 goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t1 = MulS(4 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 2
+ $t1 = [$s0]
+ if $t1 goto :null14
+ Error("null pointer")
+null14:
+ $t0 = [$t1]
+ $t0 = Lt(5 $t0)
+ if $t0 goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t0 = MulS(5 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 11
+ $t0 = [$s0]
+ if $t0 goto :null15
+ Error("null pointer")
+null15:
+ $t1 = [$t0]
+ $t1 = Lt(6 $t1)
+ if $t1 goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1 = MulS(6 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 6
+ $t1 = [$s0]
+ if $t1 goto :null16
+ Error("null pointer")
+null16:
+ $t0 = [$t1]
+ $t0 = Lt(7 $t0)
+ if $t0 goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0 = MulS(7 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 9
+ $t0 = [$s0]
+ if $t0 goto :null17
+ Error("null pointer")
+null17:
+ $t1 = [$t0]
+ $t1 = Lt(8 $t1)
+ if $t1 goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1 = MulS(8 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 19
+ $t1 = [$s0]
+ if $t1 goto :null18
+ Error("null pointer")
+null18:
+ $t0 = [$t1]
+ $t0 = Lt(9 $t0)
+ if $t0 goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0 = MulS(9 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = MulS($t0 4)
+ $t1 = Add($t1 4)
+ $t1 = HeapAllocZ($t1)
+ [$t1] = $t0
+ $v0 = $t1
+ ret
+
diff --git a/base/BubbleSort.regalloc b/base/BubbleSort.regalloc
new file mode 100644
index 0000000..bd27d17
--- /dev/null
+++ b/base/BubbleSort.regalloc
@@ -0,0 +1,245 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 11-12 15-17
+ t.1: 16-17
+ t.2: 18
+Linear Range:
+ t.0: 10-17
+ t.1: 15-17
+ t.2: 17-18
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func BBS.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 22-34
+ sz: 22-24
+ t.0: 23-24
+ aux01:
+ t.1: 26-27
+ t.2: 30-31
+ t.3: 33-34
+Linear Range:
+ this: 21-34 (cross call)
+ sz: 21-24
+ t.0: 22-24
+ t.1: 25-27
+ t.2: 29-31
+ t.3: 32-34
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t1
+ t.1: t1
+ t.2: t1
+ t.3: t1
+
+func BBS.Sort
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 38-51 54-56 59-63 66-68 71-78 81-83 86-90 93-95 98-101 104-106 109-114 117-119 122-133
+ t.0: 39
+ i: 40-51 54-56 59-63 66-68 71-78 81-83 86-90 93-95 98-101 104-106 109-114 117-119 122-133
+ aux02: 42-51 54-56 59-63 66-68 71-78 81-83 86-90 93-95 98-101 104-106 109-114 117-119 122-133
+ t.1: 43
+ j: 46-51 54-56 59-63 66-68 71-78 81-83 86-90 93-95 98-101 104-106 109-114 117-119 122-130
+ t.2: 47
+ t.3: 48
+ aux07: 50-51 54-56 59
+ t.4: 51 54-56 59-60
+ t.5: 55-56 60-61
+ aux04: 62-63 66-68 71-74
+ t.6: 63 66-68 71-72
+ t.7: 67-68 72-73
+ aux05: 74
+ t.8: 75
+ aux06: 77-78 81-83 86-90 93-95 98
+ t.9: 78 81-83 86-87
+ t.10: 82-83 87-88
+ t: 89-90 93-95 98-101 104-106 109-114 117-119 122-124
+ t.11: 90 93-95 98-99
+ t.12: 94-95 99-101 104-106 109-112
+ t.13: 101 104-106 109-110
+ t.14: 105-106 110-111
+ t.15: 112
+ t.16: 114 117-119 122-123
+ t.17: 118-119 123-124
+ nt:
+Linear Range:
+ this: 37-133
+ t.0: 38-39
+ i: 39-133
+ aux02: 40-133
+ t.1: 42-43
+ j: 44-130
+ t.2: 46-47
+ t.3: 47-48
+ aux07: 49-59
+ t.4: 50-60
+ t.5: 54-61
+ aux04: 61-74
+ t.6: 62-72
+ t.7: 66-73
+ aux05: 73-74
+ t.8: 74-75
+ aux06: 76-98
+ t.9: 77-87
+ t.10: 81-88
+ t: 88-124
+ t.11: 89-99
+ t.12: 93-112
+ t.13: 100-110
+ t.14: 104-111
+ t.15: 111-112
+ t.16: 113-123
+ t.17: 117-124
+Allocation:
+ this: t0
+ t.0: t1
+ i: t1
+ aux02: t2
+ t.1: t3
+ j: t3
+ t.2: t4
+ t.3: t4
+ aux07: t4
+ t.4: t5
+ t.5: t6
+ aux04: t6
+ t.6: t5
+ t.7: t4
+ aux05: t4
+ t.8: t4
+ aux06: t4
+ t.9: t6
+ t.10: t5
+ t: t5
+ t.11: t6
+ t.12: t7
+ t.13: t6
+ t.14: t4
+ t.15: t4
+ t.16: t4
+ t.17: t7
+
+func BBS.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 138-144 147-149 152-157
+ j: 140-144 147-149 152-157
+ t.0: 141
+ t.1: 142
+ t.2: 144 147-149 152-153
+ t.3: 148-149 153-154
+ t.4: 155
+Linear Range:
+ this: 137-157
+ j: 138-157
+ t.0: 140-141
+ t.1: 141-142
+ t.2: 143-153
+ t.3: 147-154
+ t.4: 154-155
+Allocation:
+ this: t0
+ j: t1
+ t.0: t2
+ t.1: t2
+ t.2: t2
+ t.3: t3
+ t.4: t3
+
+func BBS.Init
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 162-166 169-171 174-178 181-183 186-190 193-195 198-202 205-207 210-214 217-219 222-226 229-231 234-238 241-243 246-250 253-255 258-262 265-267 270-273
+ sz: 162-163
+ t.0: 164
+ t.1: 166 169-171 174-175
+ t.2: 170-171 175-176
+ t.3: 178 181-183 186-187
+ t.4: 182-183 187-188
+ t.5: 190 193-195 198-199
+ t.6: 194-195 199-200
+ t.7: 202 205-207 210-211
+ t.8: 206-207 211-212
+ t.9: 214 217-219 222-223
+ t.10: 218-219 223-224
+ t.11: 226 229-231 234-235
+ t.12: 230-231 235-236
+ t.13: 238 241-243 246-247
+ t.14: 242-243 247-248
+ t.15: 250 253-255 258-259
+ t.16: 254-255 259-260
+ t.17: 262 265-267 270-271
+ t.18: 266-267 271-272
+ t.19: 274 277-279 282-283
+ t.20: 278-279 283-284
+Linear Range:
+ this: 161-273 (cross call)
+ sz: 161-163
+ t.0: 163-164
+ t.1: 165-175
+ t.2: 169-176
+ t.3: 177-187
+ t.4: 181-188
+ t.5: 189-199
+ t.6: 193-200
+ t.7: 201-211
+ t.8: 205-212
+ t.9: 213-223
+ t.10: 217-224
+ t.11: 225-235
+ t.12: 229-236
+ t.13: 237-247
+ t.14: 241-248
+ t.15: 249-259
+ t.16: 253-260
+ t.17: 261-271
+ t.18: 265-272
+ t.19: 273-283
+ t.20: 277-284
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t0
+ t.1: t0
+ t.2: t1
+ t.3: t1
+ t.4: t0
+ t.5: t0
+ t.6: t1
+ t.7: t1
+ t.8: t0
+ t.9: t0
+ t.10: t1
+ t.11: t1
+ t.12: t0
+ t.13: t0
+ t.14: t1
+ t.15: t1
+ t.16: t0
+ t.17: t0
+ t.18: t1
+ t.19: t1
+ t.20: t0
+
+func AllocArray
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ size: 288-291
+ bytes: 289-290
+ v: 291-292
+Linear Range:
+ size: 287-291
+ bytes: 288-290
+ v: 290-292
+Allocation:
+ size: t0
+ bytes: t1
+ v: t1
+
diff --git a/base/BubbleSort.vapor b/base/BubbleSort.vapor
new file mode 100644
index 0000000..cedba69
--- /dev/null
+++ b/base/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/base/BubbleSort.vaporm b/base/BubbleSort.vaporm
new file mode 100644
index 0000000..f64e2b3
--- /dev/null
+++ b/base/BubbleSort.vaporm
@@ -0,0 +1,316 @@
+const vmt_BBS
+ :BBS.Start
+ :BBS.Sort
+ :BBS.Print
+ :BBS.Init
+
+func Main [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(12)
+ [$t0] = :vmt_BBS
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ $a1 = 10
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func BBS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ $t1 = [$s0]
+ $t1 = [$t1+12]
+ $a0 = $s0
+ $a1 = $t0
+ call $t1
+ $t1 = [$s0]
+ $t1 = [$t1+8]
+ $a0 = $s0
+ call $t1
+ PrintIntS(99999)
+ $t1 = [$s0]
+ $t1 = [$t1+4]
+ $a0 = $s0
+ call $t1
+ $t1 = [$s0]
+ $t1 = [$t1+8]
+ $a0 = $s0
+ call $t1
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func BBS.Sort [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = [$t0+8]
+ $t1 = Sub($t1 1)
+ $t2 = Sub(0 1)
+while1_top:
+ $t3 = LtS($t2 $t1)
+ if0 $t3 goto :while1_end
+ $t3 = 1
+while2_top:
+ $t4 = Add($t1 1)
+ $t4 = LtS($t3 $t4)
+ if0 $t4 goto :while2_end
+ $t4 = Sub($t3 1)
+ $t5 = [$t0+4]
+ if $t5 goto :null2
+ Error("null pointer")
+null2:
+ $t6 = [$t5]
+ $t6 = Lt($t4 $t6)
+ if $t6 goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t6 = MulS($t4 4)
+ $t6 = Add($t6 $t5)
+ $t6 = [$t6+4]
+ $t5 = [$t0+4]
+ if $t5 goto :null3
+ Error("null pointer")
+null3:
+ $t4 = [$t5]
+ $t4 = Lt($t3 $t4)
+ if $t4 goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t4 = MulS($t3 4)
+ $t4 = Add($t4 $t5)
+ $t4 = [$t4+4]
+ $t4 = LtS($t4 $t6)
+ if0 $t4 goto :if1_else
+ $t4 = Sub($t3 1)
+ $t6 = [$t0+4]
+ if $t6 goto :null4
+ Error("null pointer")
+null4:
+ $t5 = [$t6]
+ $t5 = Lt($t4 $t5)
+ if $t5 goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5 = MulS($t4 4)
+ $t5 = Add($t5 $t6)
+ $t5 = [$t5+4]
+ $t6 = [$t0+4]
+ if $t6 goto :null5
+ Error("null pointer")
+null5:
+ $t7 = [$t6]
+ $t7 = Lt($t4 $t7)
+ if $t7 goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7 = MulS($t4 4)
+ $t7 = Add($t7 $t6)
+ $t6 = [$t0+4]
+ if $t6 goto :null6
+ Error("null pointer")
+null6:
+ $t4 = [$t6]
+ $t4 = Lt($t3 $t4)
+ if $t4 goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t4 = MulS($t3 4)
+ $t4 = Add($t4 $t6)
+ $t4 = [$t4+4]
+ [$t7+4] = $t4
+ $t4 = [$t0+4]
+ if $t4 goto :null7
+ Error("null pointer")
+null7:
+ $t7 = [$t4]
+ $t7 = Lt($t3 $t7)
+ if $t7 goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t7 = MulS($t3 4)
+ $t7 = Add($t7 $t4)
+ [$t7+4] = $t5
+ goto :if1_end
+if1_else:
+if1_end:
+ $t3 = Add($t3 1)
+ goto :while2_top
+while2_end:
+ $t1 = Sub($t1 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func BBS.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = 0
+while3_top:
+ $t2 = [$t0+8]
+ $t2 = LtS($t1 $t2)
+ if0 $t2 goto :while3_end
+ $t2 = [$t0+4]
+ if $t2 goto :null8
+ Error("null pointer")
+null8:
+ $t3 = [$t2]
+ $t3 = Lt($t1 $t3)
+ if $t3 goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t3 = MulS($t1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ PrintIntS($t3)
+ $t1 = Add($t1 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ ret
+
+func BBS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ [$s0+8] = $t0
+ $a0 = $t0
+ call :AllocArray
+ $t0 = $v0
+ [$s0+4] = $t0
+ $t0 = [$s0+4]
+ if $t0 goto :null9
+ Error("null pointer")
+null9:
+ $t1 = [$t0]
+ $t1 = Lt(0 $t1)
+ if $t1 goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t1 = MulS(0 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 20
+ $t1 = [$s0+4]
+ if $t1 goto :null10
+ Error("null pointer")
+null10:
+ $t0 = [$t1]
+ $t0 = Lt(1 $t0)
+ if $t0 goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t0 = MulS(1 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 7
+ $t0 = [$s0+4]
+ if $t0 goto :null11
+ Error("null pointer")
+null11:
+ $t1 = [$t0]
+ $t1 = Lt(2 $t1)
+ if $t1 goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t1 = MulS(2 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 12
+ $t1 = [$s0+4]
+ if $t1 goto :null12
+ Error("null pointer")
+null12:
+ $t0 = [$t1]
+ $t0 = Lt(3 $t0)
+ if $t0 goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t0 = MulS(3 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 18
+ $t0 = [$s0+4]
+ if $t0 goto :null13
+ Error("null pointer")
+null13:
+ $t1 = [$t0]
+ $t1 = Lt(4 $t1)
+ if $t1 goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t1 = MulS(4 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 2
+ $t1 = [$s0+4]
+ if $t1 goto :null14
+ Error("null pointer")
+null14:
+ $t0 = [$t1]
+ $t0 = Lt(5 $t0)
+ if $t0 goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t0 = MulS(5 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 11
+ $t0 = [$s0+4]
+ if $t0 goto :null15
+ Error("null pointer")
+null15:
+ $t1 = [$t0]
+ $t1 = Lt(6 $t1)
+ if $t1 goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1 = MulS(6 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 6
+ $t1 = [$s0+4]
+ if $t1 goto :null16
+ Error("null pointer")
+null16:
+ $t0 = [$t1]
+ $t0 = Lt(7 $t0)
+ if $t0 goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0 = MulS(7 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 9
+ $t0 = [$s0+4]
+ if $t0 goto :null17
+ Error("null pointer")
+null17:
+ $t1 = [$t0]
+ $t1 = Lt(8 $t1)
+ if $t1 goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1 = MulS(8 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 19
+ $t1 = [$s0+4]
+ if $t1 goto :null18
+ Error("null pointer")
+null18:
+ $t0 = [$t1]
+ $t0 = Lt(9 $t0)
+ if $t0 goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0 = MulS(9 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = MulS($t0 4)
+ $t1 = Add($t1 4)
+ $t1 = HeapAllocZ($t1)
+ [$t1] = $t0
+ $v0 = $t1
+ ret
+
diff --git a/base/DeclareNone.java b/base/DeclareNone.java
new file mode 100644
index 0000000..0790056
--- /dev/null
+++ b/base/DeclareNone.java
@@ -0,0 +1,6 @@
+class DeclareNone{
+ public static void main(String[] a){
+ A a ; // 'A' does not exist
+ a = new A() ;
+ }
+}
diff --git a/base/Empty.java b/base/Empty.java
new file mode 100644
index 0000000..975ac63
--- /dev/null
+++ b/base/Empty.java
@@ -0,0 +1,5 @@
+class Empty {
+ public static void main(String[] a) {
+ System.out.println(1);
+ }
+}
diff --git a/base/Factorial-error.java b/base/Factorial-error.java
new file mode 100644
index 0000000..46ec59a
--- /dev/null
+++ b/base/Factorial-error.java
@@ -0,0 +1,16 @@
+class Factorial{
+ public static void main(String[] a){
+ System.out.println(new Fac().ComputeFac(10));
+ }
+}
+
+class Fac {
+ public boolean ComputeFac(int num){ //TE
+ int num_aux ;
+ if (num < 1)
+ num_aux = 1 ;
+ else
+ num_aux = num * (this.ComputeFac(num-1)) ;
+ return num_aux ;
+ }
+}
diff --git a/base/Factorial.java b/base/Factorial.java
new file mode 100644
index 0000000..d938bb6
--- /dev/null
+++ b/base/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/base/Factorial.names.vaporm b/base/Factorial.names.vaporm
new file mode 100644
index 0000000..7c2c2d7
--- /dev/null
+++ b/base/Factorial.names.vaporm
@@ -0,0 +1,40 @@
+const vmt_Fac
+ :Fac.ComputeFac
+
+func Main [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(4)
+ [$t0{t.0}] = :vmt_Fac
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ $a1 = 10
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func Fac.ComputeFac [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0{this} = $a0
+ $s0{num} = $a1
+ $t1{t.0} = LtS($s0{num} 1)
+ if0 $t1{t.0} goto :if1_else
+ $t1{num_aux} = 1
+ goto :if1_end
+if1_else:
+ $t2{t.1} = [$t0{this}]
+ $t2{t.1} = [$t2{t.1}]
+ $t3{t.2} = Sub($s0{num} 1)
+ $a0 = $t0{this}
+ $a1 = $t3{t.2}
+ call $t2{t.1}
+ $t3{t.3} = $v0
+ $t1{num_aux} = MulS($s0{num} $t3{t.3})
+if1_end:
+ $v0 = $t1{num_aux}
+ $s0 = local[0]
+ ret
+
diff --git a/base/Factorial.opt.names.vaporm b/base/Factorial.opt.names.vaporm
new file mode 100644
index 0000000..bbc6604
--- /dev/null
+++ b/base/Factorial.opt.names.vaporm
@@ -0,0 +1,30 @@
+const empty_Fac
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_Fac
+ $a1 = 10
+ call :Fac.ComputeFac
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ ret
+
+func Fac.ComputeFac [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0{this} = $a0
+ $s0{num} = $a1
+ $t1{t.0} = LtS($s0{num} 1)
+ if0 $t1{t.0} goto :if1_else
+ $t1{num_aux} = 1
+ goto :if1_end
+if1_else:
+ $t2{t.1} = Sub($s0{num} 1)
+ $a0 = $t0{this}
+ $a1 = $t2{t.1}
+ call :Fac.ComputeFac
+ $t2{t.2} = $v0
+ $t1{num_aux} = MulS($s0{num} $t2{t.2})
+if1_end:
+ $v0 = $t1{num_aux}
+ $s0 = local[0]
+ ret
+
diff --git a/base/Factorial.opt.regalloc b/base/Factorial.opt.regalloc
new file mode 100644
index 0000000..21e46f5
--- /dev/null
+++ b/base/Factorial.opt.regalloc
@@ -0,0 +1,33 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 7
+Linear Range:
+ t.0: 6-7
+Allocation:
+ t.0: t0
+
+func Fac.ComputeFac
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 11-12 16-17
+ num: 11-12 16-18
+ t.0: 12
+ num_aux: 14 20
+ t.1: 17
+ t.2: 18
+Linear Range:
+ this: 10-17
+ num: 10-18 (cross call)
+ t.0: 11-12
+ num_aux: 13-20
+ t.1: 16-17
+ t.2: 17-18
+Allocation:
+ this: t0
+ num: s0
+ t.0: t1
+ num_aux: t1
+ t.1: t2
+ t.2: t2
+
diff --git a/base/Factorial.opt.vapor b/base/Factorial.opt.vapor
new file mode 100644
index 0000000..aca17fe
--- /dev/null
+++ b/base/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/base/Factorial.opt.vaporm b/base/Factorial.opt.vaporm
new file mode 100644
index 0000000..fb5f8e6
--- /dev/null
+++ b/base/Factorial.opt.vaporm
@@ -0,0 +1,30 @@
+const empty_Fac
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_Fac
+ $a1 = 10
+ call :Fac.ComputeFac
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func Fac.ComputeFac [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0 = $a0
+ $s0 = $a1
+ $t1 = LtS($s0 1)
+ if0 $t1 goto :if1_else
+ $t1 = 1
+ goto :if1_end
+if1_else:
+ $t2 = Sub($s0 1)
+ $a0 = $t0
+ $a1 = $t2
+ call :Fac.ComputeFac
+ $t2 = $v0
+ $t1 = MulS($s0 $t2)
+if1_end:
+ $v0 = $t1
+ $s0 = local[0]
+ ret
+
diff --git a/base/Factorial.regalloc b/base/Factorial.regalloc
new file mode 100644
index 0000000..e07e8d1
--- /dev/null
+++ b/base/Factorial.regalloc
@@ -0,0 +1,42 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 8-9 12-14
+ t.1: 13-14
+ t.2: 15
+Linear Range:
+ t.0: 7-14
+ t.1: 12-14
+ t.2: 14-15
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func Fac.ComputeFac
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 19-20 24-27
+ num: 19-20 24-28
+ t.0: 20
+ num_aux: 22 30
+ t.1: 25-27
+ t.2: 27
+ t.3: 28
+Linear Range:
+ this: 18-27
+ num: 18-28 (cross call)
+ t.0: 19-20
+ num_aux: 21-30
+ t.1: 24-27
+ t.2: 26-27
+ t.3: 27-28
+Allocation:
+ this: t0
+ num: s0
+ t.0: t1
+ num_aux: t1
+ t.1: t2
+ t.2: t3
+ t.3: t3
+
diff --git a/base/Factorial.vapor b/base/Factorial.vapor
new file mode 100644
index 0000000..28e1126
--- /dev/null
+++ b/base/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/base/Factorial.vaporm b/base/Factorial.vaporm
new file mode 100644
index 0000000..a7e981c
--- /dev/null
+++ b/base/Factorial.vaporm
@@ -0,0 +1,40 @@
+const vmt_Fac
+ :Fac.ComputeFac
+
+func Main [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(4)
+ [$t0] = :vmt_Fac
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ $a1 = 10
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func Fac.ComputeFac [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0 = $a0
+ $s0 = $a1
+ $t1 = LtS($s0 1)
+ if0 $t1 goto :if1_else
+ $t1 = 1
+ goto :if1_end
+if1_else:
+ $t2 = [$t0]
+ $t2 = [$t2]
+ $t3 = Sub($s0 1)
+ $a0 = $t0
+ $a1 = $t3
+ call $t2
+ $t3 = $v0
+ $t1 = MulS($s0 $t3)
+if1_end:
+ $v0 = $t1
+ $s0 = local[0]
+ ret
+
diff --git a/base/FactorialEdit.java b/base/FactorialEdit.java
new file mode 100644
index 0000000..919ed82
--- /dev/null
+++ b/base/FactorialEdit.java
@@ -0,0 +1,20 @@
+class Factorial{
+ public static void main(String[] a){
+ System.out.println(new Fac().ComputeFac(10));
+ }
+}
+
+class Fac {
+ int[] useless_var ;
+ 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 ;
+ }
+}
+
+class Fac2 extends Fac {
+}
diff --git a/base/IsPositive.java b/base/IsPositive.java
new file mode 100644
index 0000000..09bcf1d
--- /dev/null
+++ b/base/IsPositive.java
@@ -0,0 +1,29 @@
+class IsPositive{
+ public static void main(String[] a){
+ System.out.println(new Positive().isPositive(10));
+ }
+}
+
+class Positive {
+ public boolean isPositive(int num){
+ boolean positive ;
+
+ if (0 < num)
+ positive = true ;
+ else
+ positive = false ;
+ return positive ;
+ }
+}
+
+class Positive2 extends Positive {
+ public boolean isPositive(int num){
+ boolean positive ;
+
+ if (0 < num)
+ positive = true ;
+ else
+ positive = false ;
+ return positive ;
+ }
+}
diff --git a/base/LinearSearch-error.java b/base/LinearSearch-error.java
new file mode 100644
index 0000000..f8c48fe
--- /dev/null
+++ b/base/LinearSearch-error.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 ; //TE
+ 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/base/LinearSearch.java b/base/LinearSearch.java
new file mode 100644
index 0000000..daddd94
--- /dev/null
+++ b/base/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/base/LinearSearch.names.vaporm b/base/LinearSearch.names.vaporm
new file mode 100644
index 0000000..7dbe0c8
--- /dev/null
+++ b/base/LinearSearch.names.vaporm
@@ -0,0 +1,182 @@
+const vmt_LS
+ :LS.Start
+ :LS.Print
+ :LS.Search
+ :LS.Init
+
+func Main [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(12)
+ [$t0{t.0}] = :vmt_LS
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ $a1 = 10
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func LS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ $t1{t.0} = [$s0{this}]
+ $t1{t.0} = [$t1{t.0}+12]
+ $a0 = $s0{this}
+ $a1 = $t0{sz}
+ call $t1{t.0}
+ $t1{t.1} = [$s0{this}]
+ $t1{t.1} = [$t1{t.1}+4]
+ $a0 = $s0{this}
+ call $t1{t.1}
+ PrintIntS(9999)
+ $t1{t.2} = [$s0{this}]
+ $t1{t.2} = [$t1{t.2}+8]
+ $a0 = $s0{this}
+ $a1 = 8
+ call $t1{t.2}
+ $t1{t.3} = $v0
+ PrintIntS($t1{t.3})
+ $t1{t.4} = [$s0{this}]
+ $t1{t.4} = [$t1{t.4}+8]
+ $a0 = $s0{this}
+ $a1 = 12
+ call $t1{t.4}
+ $t1{t.5} = $v0
+ PrintIntS($t1{t.5})
+ $t1{t.6} = [$s0{this}]
+ $t1{t.6} = [$t1{t.6}+8]
+ $a0 = $s0{this}
+ $a1 = 17
+ call $t1{t.6}
+ $t1{t.7} = $v0
+ PrintIntS($t1{t.7})
+ $t1{t.8} = [$s0{this}]
+ $t1{t.8} = [$t1{t.8}+8]
+ $a0 = $s0{this}
+ $a1 = 50
+ call $t1{t.8}
+ $t1{t.9} = $v0
+ PrintIntS($t1{t.9})
+ $v0 = 55
+ $s0 = local[0]
+ ret
+
+func LS.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{j} = 1
+while1_top:
+ $t2{t.0} = [$t0{this}+8]
+ $t2{t.1} = LtS($t1{j} $t2{t.0})
+ if0 $t2{t.1} goto :while1_end
+ $t2{t.2} = [$t0{this}+4]
+ if $t2{t.2} goto :null2
+ Error("null pointer")
+null2:
+ $t3{t.3} = [$t2{t.2}]
+ $t3{t.3} = Lt($t1{j} $t3{t.3})
+ if $t3{t.3} goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3{t.3} = MulS($t1{j} 4)
+ $t3{t.3} = Add($t3{t.3} $t2{t.2})
+ $t3{t.4} = [$t3{t.3}+4]
+ PrintIntS($t3{t.4})
+ $t1{j} = Add($t1{j} 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func LS.Search [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{num} = $a1
+ $t2{j} = 1
+ $t3{ifound} = 0
+while2_top:
+ $t4{t.0} = [$t0{this}+8]
+ $t4{t.1} = LtS($t2{j} $t4{t.0})
+ if0 $t4{t.1} goto :while2_end
+ $t4{t.2} = [$t0{this}+4]
+ if $t4{t.2} goto :null3
+ Error("null pointer")
+null3:
+ $t5{t.3} = [$t4{t.2}]
+ $t5{t.3} = Lt($t2{j} $t5{t.3})
+ if $t5{t.3} goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t5{t.3} = MulS($t2{j} 4)
+ $t5{t.3} = Add($t5{t.3} $t4{t.2})
+ $t5{aux01} = [$t5{t.3}+4]
+ $t4{aux02} = Add($t1{num} 1)
+ $t6{t.4} = LtS($t5{aux01} $t1{num})
+ if0 $t6{t.4} goto :if1_else
+ goto :if1_end
+if1_else:
+ $t4{t.5} = LtS($t5{aux01} $t4{aux02})
+ $t4{t.6} = Sub(1 $t4{t.5})
+ if0 $t4{t.6} goto :if2_else
+ goto :if2_end
+if2_else:
+ $t3{ifound} = 1
+ $t2{j} = [$t0{this}+8]
+if2_end:
+if1_end:
+ $t2{j} = Add($t2{j} 1)
+ goto :while2_top
+while2_end:
+ $v0 = $t3{ifound}
+ ret
+
+func LS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ [$s0{this}+8] = $t0{sz}
+ $a0 = $t0{sz}
+ call :AllocArray
+ $t0{t.0} = $v0
+ [$s0{this}+4] = $t0{t.0}
+ $t0{j} = 1
+ $t1{t.1} = [$s0{this}+8]
+ $t1{k} = Add($t1{t.1} 1)
+while3_top:
+ $t2{t.2} = [$s0{this}+8]
+ $t2{t.3} = LtS($t0{j} $t2{t.2})
+ if0 $t2{t.3} goto :while3_end
+ $t2{aux01} = MulS(2 $t0{j})
+ $t3{aux02} = Sub($t1{k} 3)
+ $t4{t.4} = [$s0{this}+4]
+ if $t4{t.4} goto :null4
+ Error("null pointer")
+null4:
+ $t5{t.5} = [$t4{t.4}]
+ $t5{t.5} = Lt($t0{j} $t5{t.5})
+ if $t5{t.5} goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5{t.5} = MulS($t0{j} 4)
+ $t5{t.5} = Add($t5{t.5} $t4{t.4})
+ $t3{t.6} = Add($t2{aux01} $t3{aux02})
+ [$t5{t.5}+4] = $t3{t.6}
+ $t0{j} = Add($t0{j} 1)
+ $t1{k} = Sub($t1{k} 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0{size} = $a0
+ $t1{bytes} = MulS($t0{size} 4)
+ $t1{bytes} = Add($t1{bytes} 4)
+ $t1{v} = HeapAllocZ($t1{bytes})
+ [$t1{v}] = $t0{size}
+ $v0 = $t1{v}
+ ret
+
diff --git a/base/LinearSearch.opt.names.vaporm b/base/LinearSearch.opt.names.vaporm
new file mode 100644
index 0000000..de6b96a
--- /dev/null
+++ b/base/LinearSearch.opt.names.vaporm
@@ -0,0 +1,162 @@
+const empty_LS
+
+func Main [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(8)
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $t0{t.0}
+ $a1 = 10
+ call :LS.Start
+ $t0{t.1} = $v0
+ PrintIntS($t0{t.1})
+ ret
+
+func LS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ $a0 = $s0{this}
+ $a1 = $t0{sz}
+ call :LS.Init
+ $a0 = $s0{this}
+ call :LS.Print
+ PrintIntS(9999)
+ $a0 = $s0{this}
+ $a1 = 8
+ call :LS.Search
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ $a0 = $s0{this}
+ $a1 = 12
+ call :LS.Search
+ $t0{t.1} = $v0
+ PrintIntS($t0{t.1})
+ $a0 = $s0{this}
+ $a1 = 17
+ call :LS.Search
+ $t0{t.2} = $v0
+ PrintIntS($t0{t.2})
+ $a0 = $s0{this}
+ $a1 = 50
+ call :LS.Search
+ $t0{t.3} = $v0
+ PrintIntS($t0{t.3})
+ $v0 = 55
+ $s0 = local[0]
+ ret
+
+func LS.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{j} = 1
+while1_top:
+ $t2{t.0} = [$t0{this}+4]
+ $t2{t.1} = LtS($t1{j} $t2{t.0})
+ if0 $t2{t.1} goto :while1_end
+ $t2{t.2} = [$t0{this}]
+ if $t2{t.2} goto :null2
+ Error("null pointer")
+null2:
+ $t3{t.3} = [$t2{t.2}]
+ $t3{t.3} = Lt($t1{j} $t3{t.3})
+ if $t3{t.3} goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3{t.3} = MulS($t1{j} 4)
+ $t3{t.3} = Add($t3{t.3} $t2{t.2})
+ $t3{t.4} = [$t3{t.3}+4]
+ PrintIntS($t3{t.4})
+ $t1{j} = Add($t1{j} 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func LS.Search [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{num} = $a1
+ $t2{j} = 1
+ $t3{ifound} = 0
+while2_top:
+ $t4{t.0} = [$t0{this}+4]
+ $t4{t.1} = LtS($t2{j} $t4{t.0})
+ if0 $t4{t.1} goto :while2_end
+ $t4{t.2} = [$t0{this}]
+ if $t4{t.2} goto :null3
+ Error("null pointer")
+null3:
+ $t5{t.3} = [$t4{t.2}]
+ $t5{t.3} = Lt($t2{j} $t5{t.3})
+ if $t5{t.3} goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t5{t.3} = MulS($t2{j} 4)
+ $t5{t.3} = Add($t5{t.3} $t4{t.2})
+ $t5{aux01} = [$t5{t.3}+4]
+ $t4{aux02} = Add($t1{num} 1)
+ $t6{t.4} = LtS($t5{aux01} $t1{num})
+ if0 $t6{t.4} goto :if1_else
+ goto :if1_end
+if1_else:
+ $t4{t.5} = LtS($t5{aux01} $t4{aux02})
+ if $t4{t.5} goto :if2_else
+ goto :if2_end
+if2_else:
+ $t3{ifound} = 1
+ $t2{j} = [$t0{this}+4]
+if2_end:
+if1_end:
+ $t2{j} = Add($t2{j} 1)
+ goto :while2_top
+while2_end:
+ $v0 = $t3{ifound}
+ ret
+
+func LS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ [$s0{this}+4] = $t0{sz}
+ $a0 = $t0{sz}
+ call :AllocArray
+ $t0{t.0} = $v0
+ [$s0{this}] = $t0{t.0}
+ $t0{j} = 1
+ $t1{t.1} = [$s0{this}+4]
+ $t1{k} = Add($t1{t.1} 1)
+while3_top:
+ $t2{t.2} = [$s0{this}+4]
+ $t2{t.3} = LtS($t0{j} $t2{t.2})
+ if0 $t2{t.3} goto :while3_end
+ $t2{aux01} = MulS(2 $t0{j})
+ $t3{aux02} = Sub($t1{k} 3)
+ $t4{t.4} = [$s0{this}]
+ if $t4{t.4} goto :null4
+ Error("null pointer")
+null4:
+ $t5{t.5} = [$t4{t.4}]
+ $t5{t.5} = Lt($t0{j} $t5{t.5})
+ if $t5{t.5} goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5{t.5} = MulS($t0{j} 4)
+ $t5{t.5} = Add($t5{t.5} $t4{t.4})
+ $t3{t.6} = Add($t2{aux01} $t3{aux02})
+ [$t5{t.5}+4] = $t3{t.6}
+ $t0{j} = Add($t0{j} 1)
+ $t1{k} = Sub($t1{k} 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0{size} = $a0
+ $t1{bytes} = MulS($t0{size} 4)
+ $t1{bytes} = Add($t1{bytes} 4)
+ $t1{v} = HeapAllocZ($t1{bytes})
+ [$t1{v}] = $t0{size}
+ $v0 = $t1{v}
+ ret
+
diff --git a/base/LinearSearch.opt.regalloc b/base/LinearSearch.opt.regalloc
new file mode 100644
index 0000000..abfdfeb
--- /dev/null
+++ b/base/LinearSearch.opt.regalloc
@@ -0,0 +1,169 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 7 10
+ t.1: 11
+Linear Range:
+ t.0: 6-10
+ t.1: 10-11
+Allocation:
+ t.0: t0
+ t.1: t0
+
+func LS.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 15-24
+ sz: 15
+ aux01:
+ aux02:
+ t.0: 19
+ t.1: 21
+ t.2: 23
+ t.3: 25
+Linear Range:
+ this: 14-24 (cross call)
+ sz: 14-15
+ t.0: 18-19
+ t.1: 20-21
+ t.2: 22-23
+ t.3: 24-25
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+
+func LS.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 29-35 38-40 43-48
+ j: 31-35 38-40 43-48
+ t.0: 32
+ t.1: 33
+ t.2: 35 38-40 43-44
+ t.3: 39-40 44-45
+ t.4: 46
+Linear Range:
+ this: 28-48
+ j: 29-48
+ t.0: 31-32
+ t.1: 32-33
+ t.2: 34-44
+ t.3: 38-45
+ t.4: 45-46
+Allocation:
+ this: t0
+ j: t1
+ t.0: t2
+ t.1: t2
+ t.2: t2
+ t.3: t3
+ t.4: t3
+
+func LS.Search
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 53-61 64-66 69-89
+ num: 53-61 64-66 69-89
+ j: 54-61 64-66 69-81 88-89
+ ls01:
+ ifound: 57-61 64-66 69-81 85-91
+ t.0: 58
+ t.1: 59
+ t.2: 61 64-66 69-70
+ t.3: 65-66 70-71
+ aux01: 72-74 78
+ aux02: 73-74 78
+ t.4: 74
+ nt:
+ t.5: 79
+Linear Range:
+ this: 52-89
+ num: 52-89
+ j: 53-89
+ ifound: 55-91
+ t.0: 57-58
+ t.1: 58-59
+ t.2: 60-70
+ t.3: 64-71
+ aux01: 71-78
+ aux02: 72-78
+ t.4: 73-74
+ t.5: 78-79
+Allocation:
+ this: t0
+ num: t1
+ j: t2
+ ifound: t3
+ t.0: t4
+ t.1: t4
+ t.2: t4
+ t.3: t5
+ aux01: t5
+ aux02: t4
+ t.4: t6
+ t.5: t4
+
+func LS.Init
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 94-107 110-112 115-121
+ sz: 94-95
+ t.0: 96
+ j: 98-107 110-112 115-121
+ t.1: 99
+ k: 101-107 110-112 115-121
+ t.2: 102
+ t.3: 103
+ aux01: 105-107 110-112 115-117
+ aux02: 106-107 110-112 115-117
+ t.4: 107 110-112 115-116
+ t.5: 111-112 116-118
+ t.6: 118
+Linear Range:
+ this: 93-121 (cross call)
+ sz: 93-95
+ t.0: 95-96
+ j: 97-121
+ t.1: 98-99
+ k: 99-121
+ t.2: 101-102
+ t.3: 102-103
+ aux01: 104-117
+ aux02: 105-117
+ t.4: 106-116
+ t.5: 110-118
+ t.6: 117-118
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t0
+ j: t0
+ t.1: t1
+ k: t1
+ t.2: t2
+ t.3: t2
+ aux01: t2
+ aux02: t3
+ t.4: t4
+ t.5: t5
+ t.6: t3
+
+func AllocArray
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ size: 126-129
+ bytes: 127-128
+ v: 129-130
+Linear Range:
+ size: 125-129
+ bytes: 126-128
+ v: 128-130
+Allocation:
+ size: t0
+ bytes: t1
+ v: t1
+
diff --git a/base/LinearSearch.opt.vapor b/base/LinearSearch.opt.vapor
new file mode 100644
index 0000000..302de05
--- /dev/null
+++ b/base/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/base/LinearSearch.opt.vaporm b/base/LinearSearch.opt.vaporm
new file mode 100644
index 0000000..4fa8c5c
--- /dev/null
+++ b/base/LinearSearch.opt.vaporm
@@ -0,0 +1,162 @@
+const empty_LS
+
+func Main [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(8)
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $t0
+ $a1 = 10
+ call :LS.Start
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func LS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ $a0 = $s0
+ $a1 = $t0
+ call :LS.Init
+ $a0 = $s0
+ call :LS.Print
+ PrintIntS(9999)
+ $a0 = $s0
+ $a1 = 8
+ call :LS.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ $a0 = $s0
+ $a1 = 12
+ call :LS.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ $a0 = $s0
+ $a1 = 17
+ call :LS.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ $a0 = $s0
+ $a1 = 50
+ call :LS.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ $v0 = 55
+ $s0 = local[0]
+ ret
+
+func LS.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = 1
+while1_top:
+ $t2 = [$t0+4]
+ $t2 = LtS($t1 $t2)
+ if0 $t2 goto :while1_end
+ $t2 = [$t0]
+ if $t2 goto :null2
+ Error("null pointer")
+null2:
+ $t3 = [$t2]
+ $t3 = Lt($t1 $t3)
+ if $t3 goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3 = MulS($t1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ PrintIntS($t3)
+ $t1 = Add($t1 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func LS.Search [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = 1
+ $t3 = 0
+while2_top:
+ $t4 = [$t0+4]
+ $t4 = LtS($t2 $t4)
+ if0 $t4 goto :while2_end
+ $t4 = [$t0]
+ if $t4 goto :null3
+ Error("null pointer")
+null3:
+ $t5 = [$t4]
+ $t5 = Lt($t2 $t5)
+ if $t5 goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t5 = MulS($t2 4)
+ $t5 = Add($t5 $t4)
+ $t5 = [$t5+4]
+ $t4 = Add($t1 1)
+ $t6 = LtS($t5 $t1)
+ if0 $t6 goto :if1_else
+ goto :if1_end
+if1_else:
+ $t4 = LtS($t5 $t4)
+ if $t4 goto :if2_else
+ goto :if2_end
+if2_else:
+ $t3 = 1
+ $t2 = [$t0+4]
+if2_end:
+if1_end:
+ $t2 = Add($t2 1)
+ goto :while2_top
+while2_end:
+ $v0 = $t3
+ ret
+
+func LS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ [$s0+4] = $t0
+ $a0 = $t0
+ call :AllocArray
+ $t0 = $v0
+ [$s0] = $t0
+ $t0 = 1
+ $t1 = [$s0+4]
+ $t1 = Add($t1 1)
+while3_top:
+ $t2 = [$s0+4]
+ $t2 = LtS($t0 $t2)
+ if0 $t2 goto :while3_end
+ $t2 = MulS(2 $t0)
+ $t3 = Sub($t1 3)
+ $t4 = [$s0]
+ if $t4 goto :null4
+ Error("null pointer")
+null4:
+ $t5 = [$t4]
+ $t5 = Lt($t0 $t5)
+ if $t5 goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5 = MulS($t0 4)
+ $t5 = Add($t5 $t4)
+ $t3 = Add($t2 $t3)
+ [$t5+4] = $t3
+ $t0 = Add($t0 1)
+ $t1 = Sub($t1 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = MulS($t0 4)
+ $t1 = Add($t1 4)
+ $t1 = HeapAllocZ($t1)
+ [$t1] = $t0
+ $v0 = $t1
+ ret
+
diff --git a/base/LinearSearch.regalloc b/base/LinearSearch.regalloc
new file mode 100644
index 0000000..817df4f
--- /dev/null
+++ b/base/LinearSearch.regalloc
@@ -0,0 +1,193 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 11-12 15-17
+ t.1: 16-17
+ t.2: 18
+Linear Range:
+ t.0: 10-17
+ t.1: 15-17
+ t.2: 17-18
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func LS.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 22-43
+ sz: 22-24
+ t.0: 23-24
+ aux01:
+ t.1: 26-27
+ aux02:
+ t.2: 30-31
+ t.3: 32
+ t.4: 34-35
+ t.5: 36
+ t.6: 38-39
+ t.7: 40
+ t.8: 42-43
+ t.9: 44
+Linear Range:
+ this: 21-43 (cross call)
+ sz: 21-24
+ t.0: 22-24
+ t.1: 25-27
+ t.2: 29-31
+ t.3: 31-32
+ t.4: 33-35
+ t.5: 35-36
+ t.6: 37-39
+ t.7: 39-40
+ t.8: 41-43
+ t.9: 43-44
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t1
+ t.1: t1
+ t.2: t1
+ t.3: t1
+ t.4: t1
+ t.5: t1
+ t.6: t1
+ t.7: t1
+ t.8: t1
+ t.9: t1
+
+func LS.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 48-54 57-59 62-67
+ j: 50-54 57-59 62-67
+ t.0: 51
+ t.1: 52
+ t.2: 54 57-59 62-63
+ t.3: 58-59 63-64
+ t.4: 65
+Linear Range:
+ this: 47-67
+ j: 48-67
+ t.0: 50-51
+ t.1: 51-52
+ t.2: 53-63
+ t.3: 57-64
+ t.4: 64-65
+Allocation:
+ this: t0
+ j: t1
+ t.0: t2
+ t.1: t2
+ t.2: t2
+ t.3: t3
+ t.4: t3
+
+func LS.Search
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 72-80 83-85 88-109
+ num: 72-80 83-85 88-109
+ j: 73-80 83-85 88-101 108-109
+ ls01:
+ ifound: 76-80 83-85 88-101 105-111
+ t.0: 77
+ t.1: 78
+ t.2: 80 83-85 88-89
+ t.3: 84-85 89-90
+ aux01: 91-93 97
+ aux02: 92-93 97
+ t.4: 93
+ nt:
+ t.5: 98
+ t.6: 99
+Linear Range:
+ this: 71-109
+ num: 71-109
+ j: 72-109
+ ifound: 74-111
+ t.0: 76-77
+ t.1: 77-78
+ t.2: 79-89
+ t.3: 83-90
+ aux01: 90-97
+ aux02: 91-97
+ t.4: 92-93
+ t.5: 97-98
+ t.6: 98-99
+Allocation:
+ this: t0
+ num: t1
+ j: t2
+ ifound: t3
+ t.0: t4
+ t.1: t4
+ t.2: t4
+ t.3: t5
+ aux01: t5
+ aux02: t4
+ t.4: t6
+ t.5: t4
+ t.6: t4
+
+func LS.Init
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 114-127 130-132 135-141
+ sz: 114-115
+ t.0: 116
+ j: 118-127 130-132 135-141
+ t.1: 119
+ k: 121-127 130-132 135-141
+ t.2: 122
+ t.3: 123
+ aux01: 125-127 130-132 135-137
+ aux02: 126-127 130-132 135-137
+ t.4: 127 130-132 135-136
+ t.5: 131-132 136-138
+ t.6: 138
+Linear Range:
+ this: 113-141 (cross call)
+ sz: 113-115
+ t.0: 115-116
+ j: 117-141
+ t.1: 118-119
+ k: 119-141
+ t.2: 121-122
+ t.3: 122-123
+ aux01: 124-137
+ aux02: 125-137
+ t.4: 126-136
+ t.5: 130-138
+ t.6: 137-138
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t0
+ j: t0
+ t.1: t1
+ k: t1
+ t.2: t2
+ t.3: t2
+ aux01: t2
+ aux02: t3
+ t.4: t4
+ t.5: t5
+ t.6: t3
+
+func AllocArray
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ size: 146-149
+ bytes: 147-148
+ v: 149-150
+Linear Range:
+ size: 145-149
+ bytes: 146-148
+ v: 148-150
+Allocation:
+ size: t0
+ bytes: t1
+ v: t1
+
diff --git a/base/LinearSearch.vapor b/base/LinearSearch.vapor
new file mode 100644
index 0000000..db4884a
--- /dev/null
+++ b/base/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/base/LinearSearch.vaporm b/base/LinearSearch.vaporm
new file mode 100644
index 0000000..094cfe1
--- /dev/null
+++ b/base/LinearSearch.vaporm
@@ -0,0 +1,182 @@
+const vmt_LS
+ :LS.Start
+ :LS.Print
+ :LS.Search
+ :LS.Init
+
+func Main [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(12)
+ [$t0] = :vmt_LS
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ $a1 = 10
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func LS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ $t1 = [$s0]
+ $t1 = [$t1+12]
+ $a0 = $s0
+ $a1 = $t0
+ call $t1
+ $t1 = [$s0]
+ $t1 = [$t1+4]
+ $a0 = $s0
+ call $t1
+ PrintIntS(9999)
+ $t1 = [$s0]
+ $t1 = [$t1+8]
+ $a0 = $s0
+ $a1 = 8
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ $t1 = [$s0]
+ $t1 = [$t1+8]
+ $a0 = $s0
+ $a1 = 12
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ $t1 = [$s0]
+ $t1 = [$t1+8]
+ $a0 = $s0
+ $a1 = 17
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ $t1 = [$s0]
+ $t1 = [$t1+8]
+ $a0 = $s0
+ $a1 = 50
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ $v0 = 55
+ $s0 = local[0]
+ ret
+
+func LS.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = 1
+while1_top:
+ $t2 = [$t0+8]
+ $t2 = LtS($t1 $t2)
+ if0 $t2 goto :while1_end
+ $t2 = [$t0+4]
+ if $t2 goto :null2
+ Error("null pointer")
+null2:
+ $t3 = [$t2]
+ $t3 = Lt($t1 $t3)
+ if $t3 goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3 = MulS($t1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ PrintIntS($t3)
+ $t1 = Add($t1 1)
+ goto :while1_top
+while1_end:
+ $v0 = 0
+ ret
+
+func LS.Search [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = 1
+ $t3 = 0
+while2_top:
+ $t4 = [$t0+8]
+ $t4 = LtS($t2 $t4)
+ if0 $t4 goto :while2_end
+ $t4 = [$t0+4]
+ if $t4 goto :null3
+ Error("null pointer")
+null3:
+ $t5 = [$t4]
+ $t5 = Lt($t2 $t5)
+ if $t5 goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t5 = MulS($t2 4)
+ $t5 = Add($t5 $t4)
+ $t5 = [$t5+4]
+ $t4 = Add($t1 1)
+ $t6 = LtS($t5 $t1)
+ if0 $t6 goto :if1_else
+ goto :if1_end
+if1_else:
+ $t4 = LtS($t5 $t4)
+ $t4 = Sub(1 $t4)
+ if0 $t4 goto :if2_else
+ goto :if2_end
+if2_else:
+ $t3 = 1
+ $t2 = [$t0+8]
+if2_end:
+if1_end:
+ $t2 = Add($t2 1)
+ goto :while2_top
+while2_end:
+ $v0 = $t3
+ ret
+
+func LS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ [$s0+8] = $t0
+ $a0 = $t0
+ call :AllocArray
+ $t0 = $v0
+ [$s0+4] = $t0
+ $t0 = 1
+ $t1 = [$s0+8]
+ $t1 = Add($t1 1)
+while3_top:
+ $t2 = [$s0+8]
+ $t2 = LtS($t0 $t2)
+ if0 $t2 goto :while3_end
+ $t2 = MulS(2 $t0)
+ $t3 = Sub($t1 3)
+ $t4 = [$s0+4]
+ if $t4 goto :null4
+ Error("null pointer")
+null4:
+ $t5 = [$t4]
+ $t5 = Lt($t0 $t5)
+ if $t5 goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t5 = MulS($t0 4)
+ $t5 = Add($t5 $t4)
+ $t3 = Add($t2 $t3)
+ [$t5+4] = $t3
+ $t0 = Add($t0 1)
+ $t1 = Sub($t1 1)
+ goto :while3_top
+while3_end:
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = MulS($t0 4)
+ $t1 = Add($t1 4)
+ $t1 = HeapAllocZ($t1)
+ [$t1] = $t0
+ $v0 = $t1
+ ret
+
diff --git a/base/LinkedList-error.java b/base/LinkedList-error.java
new file mode 100644
index 0000000..181b599
--- /dev/null
+++ b/base/LinkedList-error.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 0 ; //TE
+ }
+
+ // 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/base/LinkedList.java b/base/LinkedList.java
new file mode 100644
index 0000000..69adc33
--- /dev/null
+++ b/base/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/base/LinkedList.names.vaporm b/base/LinkedList.names.vaporm
new file mode 100644
index 0000000..a04d039
--- /dev/null
+++ b/base/LinkedList.names.vaporm
@@ -0,0 +1,698 @@
+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 [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(4)
+ [$t0{t.0}] = :vmt_LL
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func Element.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_Age} = $a1
+ $t2{v_Salary} = $a2
+ $t3{v_Married} = $a3
+ [$t0{this}+4] = $t1{v_Age}
+ [$t0{this}+8] = $t2{v_Salary}
+ [$t0{this}+12] = $t3{v_Married}
+ $v0 = 1
+ ret
+
+func Element.GetAge [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func Element.GetSalary [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func Element.GetMarried [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+12]
+ $v0 = $t0{t.0}
+ ret
+
+func Element.Equal [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{other} = $a1
+ $s2{ret_val} = 1
+ if $s1{other} goto :null2
+ Error("null pointer")
+null2:
+ $t0{t.0} = [$s1{other}]
+ $t0{t.0} = [$t0{t.0}+4]
+ $a0 = $s1{other}
+ call $t0{t.0}
+ $t0{aux01} = $v0
+ $t1{t.1} = [$s0{this}]
+ $t1{t.1} = [$t1{t.1}+20]
+ $t2{t.2} = [$s0{this}+4]
+ $a0 = $s0{this}
+ $a1 = $t0{aux01}
+ $a2 = $t2{t.2}
+ call $t1{t.1}
+ $t2{t.3} = $v0
+ $t2{t.4} = Sub(1 $t2{t.3})
+ if0 $t2{t.4} goto :if1_else
+ $s2{ret_val} = 0
+ goto :if1_end
+if1_else:
+ if $s1{other} goto :null3
+ Error("null pointer")
+null3:
+ $t2{t.5} = [$s1{other}]
+ $t2{t.5} = [$t2{t.5}+8]
+ $a0 = $s1{other}
+ call $t2{t.5}
+ $t2{aux02} = $v0
+ $t1{t.6} = [$s0{this}]
+ $t1{t.6} = [$t1{t.6}+20]
+ $t0{t.7} = [$s0{this}+8]
+ $a0 = $s0{this}
+ $a1 = $t2{aux02}
+ $a2 = $t0{t.7}
+ call $t1{t.6}
+ $t0{t.8} = $v0
+ $t0{t.9} = Sub(1 $t0{t.8})
+ if0 $t0{t.9} goto :if2_else
+ $s2{ret_val} = 0
+ goto :if2_end
+if2_else:
+ $t0{t.10} = [$s0{this}+12]
+ if0 $t0{t.10} goto :if3_else
+ if $s1{other} goto :null4
+ Error("null pointer")
+null4:
+ $t0{t.11} = [$s1{other}]
+ $t0{t.11} = [$t0{t.11}+12]
+ $a0 = $s1{other}
+ call $t0{t.11}
+ $t0{t.12} = $v0
+ $t0{t.13} = Sub(1 $t0{t.12})
+ if0 $t0{t.13} goto :if4_else
+ $s2{ret_val} = 0
+ goto :if4_end
+if4_else:
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s1{other} goto :null5
+ Error("null pointer")
+null5:
+ $t0{t.14} = [$s1{other}]
+ $t0{t.14} = [$t0{t.14}+12]
+ $a0 = $s1{other}
+ call $t0{t.14}
+ $t0{t.15} = $v0
+ if0 $t0{t.15} goto :if5_else
+ $s2{ret_val} = 0
+ goto :if5_end
+if5_else:
+if5_end:
+if3_end:
+if2_end:
+if1_end:
+ $v0 = $s2{ret_val}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Element.Compare [in 0, out 0, local 0]
+ $t0{num1} = $a1
+ $t1{num2} = $a2
+ $t2{aux02} = Add($t1{num2} 1)
+ $t1{t.0} = LtS($t0{num1} $t1{num2})
+ if0 $t1{t.0} goto :if6_else
+ $t1{retval} = 0
+ goto :if6_end
+if6_else:
+ $t2{t.1} = LtS($t0{num1} $t2{aux02})
+ $t2{t.2} = Sub(1 $t2{t.1})
+ if0 $t2{t.2} goto :if7_else
+ $t1{retval} = 0
+ goto :if7_end
+if7_else:
+ $t1{retval} = 1
+if7_end:
+if6_end:
+ $v0 = $t1{retval}
+ ret
+
+func List.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ [$t0{this}+12] = 1
+ $v0 = 1
+ ret
+
+func List.InitNew [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_elem} = $a1
+ $t2{v_next} = $a2
+ $t3{v_end} = $a3
+ [$t0{this}+12] = $t3{v_end}
+ [$t0{this}+4] = $t1{v_elem}
+ [$t0{this}+8] = $t2{v_next}
+ $v0 = 1
+ ret
+
+func List.Insert [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0{this} = $a0
+ $t1{new_elem} = $a1
+ $t0{aux03} = $t0{this}
+ $t2{t.0} = HeapAllocZ(16)
+ [$t2{t.0}] = :vmt_List
+ $s0{aux02} = $t2{t.0}
+ if $s0{aux02} goto :null6
+ Error("null pointer")
+null6:
+ $t2{t.1} = [$s0{aux02}]
+ $t2{t.1} = [$t2{t.1}+4]
+ $a0 = $s0{aux02}
+ $a1 = $t1{new_elem}
+ $a2 = $t0{aux03}
+ $a3 = 0
+ call $t2{t.1}
+ $v0 = $s0{aux02}
+ $s0 = local[0]
+ ret
+
+func List.SetNext [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_next} = $a1
+ [$t0{this}+8] = $t1{v_next}
+ $v0 = 1
+ ret
+
+func List.Delete [in 0, out 0, local 9]
+ local[1] = $s0
+ local[2] = $s1
+ local[3] = $s2
+ local[4] = $s3
+ local[5] = $s4
+ local[6] = $s5
+ local[7] = $s6
+ local[8] = $s7
+ $t0{this} = $a0
+ $s0{e} = $a1
+ $s1{my_head} = $t0{this}
+ $s2{ret_val} = 0
+ $s3{aux04} = Sub(0 1)
+ $s4{aux01} = $t0{this}
+ $s5{prev} = $t0{this}
+ $s6{var_end} = [$t0{this}+12]
+ $s7{var_elem} = [$t0{this}+4]
+while1_top:
+ $t0{t.1} = Sub(1 $s6{var_end})
+ if0 $t0{t.1} goto :ss1_else
+ $t0{t.0} = Sub(1 $s2{ret_val})
+ goto :ss1_end
+ss1_else:
+ $t0{t.0} = 0
+ss1_end:
+ if0 $t0{t.0} goto :while1_end
+ if $s0{e} goto :null7
+ Error("null pointer")
+null7:
+ $t0{t.2} = [$s0{e}]
+ $t0{t.2} = [$t0{t.2}+16]
+ $a0 = $s0{e}
+ $a1 = $s7{var_elem}
+ call $t0{t.2}
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if8_else
+ $s2{ret_val} = 1
+ $t0{t.4} = LtS($s3{aux04} 0)
+ if0 $t0{t.4} goto :if9_else
+ if $s4{aux01} goto :null8
+ Error("null pointer")
+null8:
+ $t0{t.5} = [$s4{aux01}]
+ $t0{t.5} = [$t0{t.5}+32]
+ $a0 = $s4{aux01}
+ call $t0{t.5}
+ $s1{my_head} = $v0
+ goto :if9_end
+if9_else:
+ $t0{t.6} = Sub(0 555)
+ PrintIntS($t0{t.6})
+ if $s5{prev} goto :null9
+ Error("null pointer")
+null9:
+ $v0 = [$s5{prev}]
+ local[0]{t.7} = $v0
+ $v0 = local[0]{t.7}
+ $v0 = [$v0+12]
+ local[0]{t.7} = $v0
+ if $s4{aux01} goto :null10
+ Error("null pointer")
+null10:
+ $t0{t.8} = [$s4{aux01}]
+ $t0{t.8} = [$t0{t.8}+32]
+ $a0 = $s4{aux01}
+ call $t0{t.8}
+ $t0{t.9} = $v0
+ $a0 = $s5{prev}
+ $a1 = $t0{t.9}
+ $v0 = local[0]{t.7}
+ call $v0
+ $t0{t.10} = Sub(0 555)
+ PrintIntS($t0{t.10})
+if9_end:
+ goto :if8_end
+if8_else:
+if8_end:
+ $t0{t.11} = Sub(1 $s2{ret_val})
+ if0 $t0{t.11} goto :if10_else
+ $s5{prev} = $s4{aux01}
+ if $s4{aux01} goto :null11
+ Error("null pointer")
+null11:
+ $t0{t.12} = [$s4{aux01}]
+ $t0{t.12} = [$t0{t.12}+32]
+ $a0 = $s4{aux01}
+ call $t0{t.12}
+ $s4{aux01} = $v0
+ if $s4{aux01} goto :null12
+ Error("null pointer")
+null12:
+ $t0{t.13} = [$s4{aux01}]
+ $t0{t.13} = [$t0{t.13}+24]
+ $a0 = $s4{aux01}
+ call $t0{t.13}
+ $s6{var_end} = $v0
+ if $s4{aux01} goto :null13
+ Error("null pointer")
+null13:
+ $t0{t.14} = [$s4{aux01}]
+ $t0{t.14} = [$t0{t.14}+28]
+ $a0 = $s4{aux01}
+ call $t0{t.14}
+ $s7{var_elem} = $v0
+ $s3{aux04} = 1
+ goto :if10_end
+if10_else:
+if10_end:
+ goto :while1_top
+while1_end:
+ $v0 = $s1{my_head}
+ $s0 = local[1]
+ $s1 = local[2]
+ $s2 = local[3]
+ $s3 = local[4]
+ $s4 = local[5]
+ $s5 = local[6]
+ $s6 = local[7]
+ $s7 = local[8]
+ ret
+
+func List.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0{this} = $a0
+ $s0{e} = $a1
+ $s1{int_ret_val} = 0
+ $s2{aux01} = $t0{this}
+ $s3{var_end} = [$t0{this}+12]
+ $t0{var_elem} = [$t0{this}+4]
+while2_top:
+ $t1{t.0} = Sub(1 $s3{var_end})
+ if0 $t1{t.0} goto :while2_end
+ if $s0{e} goto :null14
+ Error("null pointer")
+null14:
+ $t1{t.1} = [$s0{e}]
+ $t1{t.1} = [$t1{t.1}+16]
+ $a0 = $s0{e}
+ $a1 = $t0{var_elem}
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ if0 $t1{t.2} goto :if11_else
+ $s1{int_ret_val} = 1
+ goto :if11_end
+if11_else:
+if11_end:
+ if $s2{aux01} goto :null15
+ Error("null pointer")
+null15:
+ $t1{t.3} = [$s2{aux01}]
+ $t1{t.3} = [$t1{t.3}+32]
+ $a0 = $s2{aux01}
+ call $t1{t.3}
+ $s2{aux01} = $v0
+ if $s2{aux01} goto :null16
+ Error("null pointer")
+null16:
+ $t1{t.4} = [$s2{aux01}]
+ $t1{t.4} = [$t1{t.4}+24]
+ $a0 = $s2{aux01}
+ call $t1{t.4}
+ $s3{var_end} = $v0
+ if $s2{aux01} goto :null17
+ Error("null pointer")
+null17:
+ $t1{t.5} = [$s2{aux01}]
+ $t1{t.5} = [$t1{t.5}+28]
+ $a0 = $s2{aux01}
+ call $t1{t.5}
+ $t0{var_elem} = $v0
+ goto :while2_top
+while2_end:
+ $v0 = $s1{int_ret_val}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func List.GetEnd [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+12]
+ $v0 = $t0{t.0}
+ ret
+
+func List.GetElem [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func List.GetNext [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func List.Print [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $t0{this} = $a0
+ $s0{aux01} = $t0{this}
+ $s1{var_end} = [$t0{this}+12]
+ $t0{var_elem} = [$t0{this}+4]
+while3_top:
+ $t1{t.0} = Sub(1 $s1{var_end})
+ if0 $t1{t.0} goto :while3_end
+ if $t0{var_elem} goto :null18
+ Error("null pointer")
+null18:
+ $t1{t.1} = [$t0{var_elem}]
+ $t1{t.1} = [$t1{t.1}+4]
+ $a0 = $t0{var_elem}
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ if $s0{aux01} goto :null19
+ Error("null pointer")
+null19:
+ $t1{t.3} = [$s0{aux01}]
+ $t1{t.3} = [$t1{t.3}+32]
+ $a0 = $s0{aux01}
+ call $t1{t.3}
+ $s0{aux01} = $v0
+ if $s0{aux01} goto :null20
+ Error("null pointer")
+null20:
+ $t1{t.4} = [$s0{aux01}]
+ $t1{t.4} = [$t1{t.4}+24]
+ $a0 = $s0{aux01}
+ call $t1{t.4}
+ $s1{var_end} = $v0
+ if $s0{aux01} goto :null21
+ Error("null pointer")
+null21:
+ $t1{t.5} = [$s0{aux01}]
+ $t1{t.5} = [$t1{t.5}+28]
+ $a0 = $s0{aux01}
+ call $t1{t.5}
+ $t0{var_elem} = $v0
+ goto :while3_top
+while3_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func LL.Start [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0{t.0} = HeapAllocZ(16)
+ [$t0{t.0}] = :vmt_List
+ $s0{last_elem} = $t0{t.0}
+ if $s0{last_elem} goto :null22
+ Error("null pointer")
+null22:
+ $t0{t.1} = [$s0{last_elem}]
+ $t0{t.1} = [$t0{t.1}]
+ $a0 = $s0{last_elem}
+ call $t0{t.1}
+ $s0{head} = $s0{last_elem}
+ if $s0{head} goto :null23
+ Error("null pointer")
+null23:
+ $t0{t.2} = [$s0{head}]
+ $t0{t.2} = [$t0{t.2}]
+ $a0 = $s0{head}
+ call $t0{t.2}
+ if $s0{head} goto :null24
+ Error("null pointer")
+null24:
+ $t0{t.3} = [$s0{head}]
+ $t0{t.3} = [$t0{t.3}+36]
+ $a0 = $s0{head}
+ call $t0{t.3}
+ $t0{t.4} = HeapAllocZ(16)
+ [$t0{t.4}] = :vmt_Element
+ $s1{el01} = $t0{t.4}
+ if $s1{el01} goto :null25
+ Error("null pointer")
+null25:
+ $t0{t.5} = [$s1{el01}]
+ $t0{t.5} = [$t0{t.5}]
+ $a0 = $s1{el01}
+ $a1 = 25
+ $a2 = 37000
+ $a3 = 0
+ call $t0{t.5}
+ if $s0{head} goto :null26
+ Error("null pointer")
+null26:
+ $t0{t.6} = [$s0{head}]
+ $t0{t.6} = [$t0{t.6}+8]
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call $t0{t.6}
+ $s0{head} = $v0
+ if $s0{head} goto :null27
+ Error("null pointer")
+null27:
+ $t0{t.7} = [$s0{head}]
+ $t0{t.7} = [$t0{t.7}+36]
+ $a0 = $s0{head}
+ call $t0{t.7}
+ PrintIntS(10000000)
+ $t0{t.8} = HeapAllocZ(16)
+ [$t0{t.8}] = :vmt_Element
+ $s1{el01} = $t0{t.8}
+ if $s1{el01} goto :null28
+ Error("null pointer")
+null28:
+ $t0{t.9} = [$s1{el01}]
+ $t0{t.9} = [$t0{t.9}]
+ $a0 = $s1{el01}
+ $a1 = 39
+ $a2 = 42000
+ $a3 = 1
+ call $t0{t.9}
+ $s2{el02} = $s1{el01}
+ if $s0{head} goto :null29
+ Error("null pointer")
+null29:
+ $t0{t.10} = [$s0{head}]
+ $t0{t.10} = [$t0{t.10}+8]
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call $t0{t.10}
+ $s0{head} = $v0
+ if $s0{head} goto :null30
+ Error("null pointer")
+null30:
+ $t0{t.11} = [$s0{head}]
+ $t0{t.11} = [$t0{t.11}+36]
+ $a0 = $s0{head}
+ call $t0{t.11}
+ PrintIntS(10000000)
+ $t0{t.12} = HeapAllocZ(16)
+ [$t0{t.12}] = :vmt_Element
+ $s1{el01} = $t0{t.12}
+ if $s1{el01} goto :null31
+ Error("null pointer")
+null31:
+ $t0{t.13} = [$s1{el01}]
+ $t0{t.13} = [$t0{t.13}]
+ $a0 = $s1{el01}
+ $a1 = 22
+ $a2 = 34000
+ $a3 = 0
+ call $t0{t.13}
+ if $s0{head} goto :null32
+ Error("null pointer")
+null32:
+ $t0{t.14} = [$s0{head}]
+ $t0{t.14} = [$t0{t.14}+8]
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call $t0{t.14}
+ $s0{head} = $v0
+ if $s0{head} goto :null33
+ Error("null pointer")
+null33:
+ $t0{t.15} = [$s0{head}]
+ $t0{t.15} = [$t0{t.15}+36]
+ $a0 = $s0{head}
+ call $t0{t.15}
+ $t0{t.16} = HeapAllocZ(16)
+ [$t0{t.16}] = :vmt_Element
+ $s3{el03} = $t0{t.16}
+ if $s3{el03} goto :null34
+ Error("null pointer")
+null34:
+ $t0{t.17} = [$s3{el03}]
+ $t0{t.17} = [$t0{t.17}]
+ $a0 = $s3{el03}
+ $a1 = 27
+ $a2 = 34000
+ $a3 = 0
+ call $t0{t.17}
+ if $s0{head} goto :null35
+ Error("null pointer")
+null35:
+ $t0{t.18} = [$s0{head}]
+ $t0{t.18} = [$t0{t.18}+20]
+ $a0 = $s0{head}
+ $a1 = $s2{el02}
+ call $t0{t.18}
+ $t0{t.19} = $v0
+ PrintIntS($t0{t.19})
+ if $s0{head} goto :null36
+ Error("null pointer")
+null36:
+ $t0{t.20} = [$s0{head}]
+ $t0{t.20} = [$t0{t.20}+20]
+ $a0 = $s0{head}
+ $a1 = $s3{el03}
+ call $t0{t.20}
+ $t0{t.21} = $v0
+ PrintIntS($t0{t.21})
+ PrintIntS(10000000)
+ $t0{t.22} = HeapAllocZ(16)
+ [$t0{t.22}] = :vmt_Element
+ $s1{el01} = $t0{t.22}
+ if $s1{el01} goto :null37
+ Error("null pointer")
+null37:
+ $t0{t.23} = [$s1{el01}]
+ $t0{t.23} = [$t0{t.23}]
+ $a0 = $s1{el01}
+ $a1 = 28
+ $a2 = 35000
+ $a3 = 0
+ call $t0{t.23}
+ if $s0{head} goto :null38
+ Error("null pointer")
+null38:
+ $t0{t.24} = [$s0{head}]
+ $t0{t.24} = [$t0{t.24}+8]
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call $t0{t.24}
+ $s0{head} = $v0
+ if $s0{head} goto :null39
+ Error("null pointer")
+null39:
+ $t0{t.25} = [$s0{head}]
+ $t0{t.25} = [$t0{t.25}+36]
+ $a0 = $s0{head}
+ call $t0{t.25}
+ PrintIntS(2220000)
+ if $s0{head} goto :null40
+ Error("null pointer")
+null40:
+ $t0{t.26} = [$s0{head}]
+ $t0{t.26} = [$t0{t.26}+16]
+ $a0 = $s0{head}
+ $a1 = $s2{el02}
+ call $t0{t.26}
+ $s0{head} = $v0
+ if $s0{head} goto :null41
+ Error("null pointer")
+null41:
+ $t0{t.27} = [$s0{head}]
+ $t0{t.27} = [$t0{t.27}+36]
+ $a0 = $s0{head}
+ call $t0{t.27}
+ PrintIntS(33300000)
+ if $s0{head} goto :null42
+ Error("null pointer")
+null42:
+ $t0{t.28} = [$s0{head}]
+ $t0{t.28} = [$t0{t.28}+16]
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call $t0{t.28}
+ $s0{head} = $v0
+ if $s0{head} goto :null43
+ Error("null pointer")
+null43:
+ $t0{t.29} = [$s0{head}]
+ $t0{t.29} = [$t0{t.29}+36]
+ $a0 = $s0{head}
+ call $t0{t.29}
+ PrintIntS(44440000)
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
diff --git a/base/LinkedList.opt.names.vaporm b/base/LinkedList.opt.names.vaporm
new file mode 100644
index 0000000..e0b60f8
--- /dev/null
+++ b/base/LinkedList.opt.names.vaporm
@@ -0,0 +1,562 @@
+const empty_Element
+
+const empty_List
+
+const empty_LL
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_LL
+ call :LL.Start
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ ret
+
+func Element.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_Age} = $a1
+ $t2{v_Salary} = $a2
+ $t3{v_Married} = $a3
+ [$t0{this}] = $t1{v_Age}
+ [$t0{this}+4] = $t2{v_Salary}
+ [$t0{this}+8] = $t3{v_Married}
+ $v0 = 1
+ ret
+
+func Element.GetAge [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}]
+ $v0 = $t0{t.0}
+ ret
+
+func Element.GetSalary [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func Element.GetMarried [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func Element.Equal [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{other} = $a1
+ $s2{ret_val} = 1
+ if $s1{other} goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $s1{other}
+ call :Element.GetAge
+ $t0{aux01} = $v0
+ $t1{t.0} = [$s0{this}]
+ $a0 = $s0{this}
+ $a1 = $t0{aux01}
+ $a2 = $t1{t.0}
+ call :Element.Compare
+ $t1{t.1} = $v0
+ if $t1{t.1} goto :if1_else
+ $s2{ret_val} = 0
+ goto :if1_end
+if1_else:
+ if $s1{other} goto :null2
+ Error("null pointer")
+null2:
+ $a0 = $s1{other}
+ call :Element.GetSalary
+ $t1{aux02} = $v0
+ $t0{t.2} = [$s0{this}+4]
+ $a0 = $s0{this}
+ $a1 = $t1{aux02}
+ $a2 = $t0{t.2}
+ call :Element.Compare
+ $t0{t.3} = $v0
+ if $t0{t.3} goto :if2_else
+ $s2{ret_val} = 0
+ goto :if2_end
+if2_else:
+ $t0{t.4} = [$s0{this}+8]
+ if0 $t0{t.4} goto :if3_else
+ if $s1{other} goto :null3
+ Error("null pointer")
+null3:
+ $a0 = $s1{other}
+ call :Element.GetMarried
+ $t0{t.5} = $v0
+ if $t0{t.5} goto :if4_else
+ $s2{ret_val} = 0
+ goto :if4_end
+if4_else:
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s1{other} goto :null4
+ Error("null pointer")
+null4:
+ $a0 = $s1{other}
+ call :Element.GetMarried
+ $t0{t.6} = $v0
+ if0 $t0{t.6} goto :if5_else
+ $s2{ret_val} = 0
+ goto :if5_end
+if5_else:
+if5_end:
+if3_end:
+if2_end:
+if1_end:
+ $v0 = $s2{ret_val}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Element.Compare [in 0, out 0, local 0]
+ $t0{num1} = $a1
+ $t1{num2} = $a2
+ $t2{aux02} = Add($t1{num2} 1)
+ $t1{t.0} = LtS($t0{num1} $t1{num2})
+ if0 $t1{t.0} goto :if6_else
+ $t1{retval} = 0
+ goto :if6_end
+if6_else:
+ $t2{t.1} = LtS($t0{num1} $t2{aux02})
+ if $t2{t.1} goto :if7_else
+ $t1{retval} = 0
+ goto :if7_end
+if7_else:
+ $t1{retval} = 1
+if7_end:
+if6_end:
+ $v0 = $t1{retval}
+ ret
+
+func List.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ [$t0{this}+8] = 1
+ $v0 = 1
+ ret
+
+func List.InitNew [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_elem} = $a1
+ $t2{v_next} = $a2
+ $t3{v_end} = $a3
+ [$t0{this}+8] = $t3{v_end}
+ [$t0{this}] = $t1{v_elem}
+ [$t0{this}+4] = $t2{v_next}
+ $v0 = 1
+ ret
+
+func List.Insert [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0{this} = $a0
+ $t1{new_elem} = $a1
+ $t0{aux03} = $t0{this}
+ $s0{aux02} = HeapAllocZ(12)
+ if $s0{aux02} goto :null5
+ Error("null pointer")
+null5:
+ $a0 = $s0{aux02}
+ $a1 = $t1{new_elem}
+ $a2 = $t0{aux03}
+ $a3 = 0
+ call :List.InitNew
+ $v0 = $s0{aux02}
+ $s0 = local[0]
+ ret
+
+func List.SetNext [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_next} = $a1
+ [$t0{this}+4] = $t1{v_next}
+ $v0 = 1
+ ret
+
+func List.Delete [in 0, out 0, local 8]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $t0{this} = $a0
+ $s0{e} = $a1
+ $s1{my_head} = $t0{this}
+ $s2{ret_val} = 0
+ $s3{aux04} = Sub(0 1)
+ $s4{aux01} = $t0{this}
+ $s5{prev} = $t0{this}
+ $s6{var_end} = [$t0{this}+8]
+ $s7{var_elem} = [$t0{this}]
+while1_top:
+ if $s6{var_end} goto :ss1_else
+ $t0{t.0} = Sub(1 $s2{ret_val})
+ goto :ss1_end
+ss1_else:
+ $t0{t.0} = 0
+ss1_end:
+ if0 $t0{t.0} goto :while1_end
+ if $s0{e} goto :null6
+ Error("null pointer")
+null6:
+ $a0 = $s0{e}
+ $a1 = $s7{var_elem}
+ call :Element.Equal
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if8_else
+ $s2{ret_val} = 1
+ $t0{t.2} = LtS($s3{aux04} 0)
+ if0 $t0{t.2} goto :if9_else
+ if $s4{aux01} goto :null7
+ Error("null pointer")
+null7:
+ $a0 = $s4{aux01}
+ call :List.GetNext
+ $s1{my_head} = $v0
+ goto :if9_end
+if9_else:
+ $t0{t.3} = Sub(0 555)
+ PrintIntS($t0{t.3})
+ if $s5{prev} goto :null8
+ Error("null pointer")
+null8:
+ if $s4{aux01} goto :null9
+ Error("null pointer")
+null9:
+ $a0 = $s4{aux01}
+ call :List.GetNext
+ $t0{t.4} = $v0
+ $a0 = $s5{prev}
+ $a1 = $t0{t.4}
+ call :List.SetNext
+ $t0{t.5} = Sub(0 555)
+ PrintIntS($t0{t.5})
+if9_end:
+ goto :if8_end
+if8_else:
+if8_end:
+ if $s2{ret_val} goto :if10_else
+ $s5{prev} = $s4{aux01}
+ if $s4{aux01} goto :null10
+ Error("null pointer")
+null10:
+ $a0 = $s4{aux01}
+ call :List.GetNext
+ $s4{aux01} = $v0
+ if $s4{aux01} goto :null11
+ Error("null pointer")
+null11:
+ $a0 = $s4{aux01}
+ call :List.GetEnd
+ $s6{var_end} = $v0
+ if $s4{aux01} goto :null12
+ Error("null pointer")
+null12:
+ $a0 = $s4{aux01}
+ call :List.GetElem
+ $s7{var_elem} = $v0
+ $s3{aux04} = 1
+ goto :if10_end
+if10_else:
+if10_end:
+ goto :while1_top
+while1_end:
+ $v0 = $s1{my_head}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
+
+func List.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0{this} = $a0
+ $s0{e} = $a1
+ $s1{int_ret_val} = 0
+ $s2{aux01} = $t0{this}
+ $s3{var_end} = [$t0{this}+8]
+ $t0{var_elem} = [$t0{this}]
+while2_top:
+ $t1{t.0} = Sub(1 $s3{var_end})
+ if0 $t1{t.0} goto :while2_end
+ if $s0{e} goto :null13
+ Error("null pointer")
+null13:
+ $a0 = $s0{e}
+ $a1 = $t0{var_elem}
+ call :Element.Equal
+ $t1{t.1} = $v0
+ if0 $t1{t.1} goto :if11_else
+ $s1{int_ret_val} = 1
+ goto :if11_end
+if11_else:
+if11_end:
+ if $s2{aux01} goto :null14
+ Error("null pointer")
+null14:
+ $a0 = $s2{aux01}
+ call :List.GetNext
+ $s2{aux01} = $v0
+ if $s2{aux01} goto :null15
+ Error("null pointer")
+null15:
+ $a0 = $s2{aux01}
+ call :List.GetEnd
+ $s3{var_end} = $v0
+ if $s2{aux01} goto :null16
+ Error("null pointer")
+null16:
+ $a0 = $s2{aux01}
+ call :List.GetElem
+ $t0{var_elem} = $v0
+ goto :while2_top
+while2_end:
+ $v0 = $s1{int_ret_val}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func List.GetEnd [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func List.GetElem [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}]
+ $v0 = $t0{t.0}
+ ret
+
+func List.GetNext [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func List.Print [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $t0{this} = $a0
+ $s0{aux01} = $t0{this}
+ $s1{var_end} = [$t0{this}+8]
+ $t0{var_elem} = [$t0{this}]
+while3_top:
+ $t1{t.0} = Sub(1 $s1{var_end})
+ if0 $t1{t.0} goto :while3_end
+ if $t0{var_elem} goto :null17
+ Error("null pointer")
+null17:
+ $a0 = $t0{var_elem}
+ call :Element.GetAge
+ $t1{t.1} = $v0
+ PrintIntS($t1{t.1})
+ if $s0{aux01} goto :null18
+ Error("null pointer")
+null18:
+ $a0 = $s0{aux01}
+ call :List.GetNext
+ $s0{aux01} = $v0
+ if $s0{aux01} goto :null19
+ Error("null pointer")
+null19:
+ $a0 = $s0{aux01}
+ call :List.GetEnd
+ $s1{var_end} = $v0
+ if $s0{aux01} goto :null20
+ Error("null pointer")
+null20:
+ $a0 = $s0{aux01}
+ call :List.GetElem
+ $t0{var_elem} = $v0
+ goto :while3_top
+while3_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func LL.Start [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{last_elem} = HeapAllocZ(12)
+ if $s0{last_elem} goto :null21
+ Error("null pointer")
+null21:
+ $a0 = $s0{last_elem}
+ call :List.Init
+ $s0{head} = $s0{last_elem}
+ if $s0{head} goto :null22
+ Error("null pointer")
+null22:
+ $a0 = $s0{head}
+ call :List.Init
+ if $s0{head} goto :null23
+ Error("null pointer")
+null23:
+ $a0 = $s0{head}
+ call :List.Print
+ $s1{el01} = HeapAllocZ(12)
+ if $s1{el01} goto :null24
+ Error("null pointer")
+null24:
+ $a0 = $s1{el01}
+ $a1 = 25
+ $a2 = 37000
+ $a3 = 0
+ call :Element.Init
+ if $s0{head} goto :null25
+ Error("null pointer")
+null25:
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call :List.Insert
+ $s0{head} = $v0
+ if $s0{head} goto :null26
+ Error("null pointer")
+null26:
+ $a0 = $s0{head}
+ call :List.Print
+ PrintIntS(10000000)
+ $s1{el01} = HeapAllocZ(12)
+ if $s1{el01} goto :null27
+ Error("null pointer")
+null27:
+ $a0 = $s1{el01}
+ $a1 = 39
+ $a2 = 42000
+ $a3 = 1
+ call :Element.Init
+ $s2{el02} = $s1{el01}
+ if $s0{head} goto :null28
+ Error("null pointer")
+null28:
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call :List.Insert
+ $s0{head} = $v0
+ if $s0{head} goto :null29
+ Error("null pointer")
+null29:
+ $a0 = $s0{head}
+ call :List.Print
+ PrintIntS(10000000)
+ $s1{el01} = HeapAllocZ(12)
+ if $s1{el01} goto :null30
+ Error("null pointer")
+null30:
+ $a0 = $s1{el01}
+ $a1 = 22
+ $a2 = 34000
+ $a3 = 0
+ call :Element.Init
+ if $s0{head} goto :null31
+ Error("null pointer")
+null31:
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call :List.Insert
+ $s0{head} = $v0
+ if $s0{head} goto :null32
+ Error("null pointer")
+null32:
+ $a0 = $s0{head}
+ call :List.Print
+ $s3{el03} = HeapAllocZ(12)
+ if $s3{el03} goto :null33
+ Error("null pointer")
+null33:
+ $a0 = $s3{el03}
+ $a1 = 27
+ $a2 = 34000
+ $a3 = 0
+ call :Element.Init
+ if $s0{head} goto :null34
+ Error("null pointer")
+null34:
+ $a0 = $s0{head}
+ $a1 = $s2{el02}
+ call :List.Search
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ if $s0{head} goto :null35
+ Error("null pointer")
+null35:
+ $a0 = $s0{head}
+ $a1 = $s3{el03}
+ call :List.Search
+ $t0{t.1} = $v0
+ PrintIntS($t0{t.1})
+ PrintIntS(10000000)
+ $s1{el01} = HeapAllocZ(12)
+ if $s1{el01} goto :null36
+ Error("null pointer")
+null36:
+ $a0 = $s1{el01}
+ $a1 = 28
+ $a2 = 35000
+ $a3 = 0
+ call :Element.Init
+ if $s0{head} goto :null37
+ Error("null pointer")
+null37:
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call :List.Insert
+ $s0{head} = $v0
+ if $s0{head} goto :null38
+ Error("null pointer")
+null38:
+ $a0 = $s0{head}
+ call :List.Print
+ PrintIntS(2220000)
+ if $s0{head} goto :null39
+ Error("null pointer")
+null39:
+ $a0 = $s0{head}
+ $a1 = $s2{el02}
+ call :List.Delete
+ $s0{head} = $v0
+ if $s0{head} goto :null40
+ Error("null pointer")
+null40:
+ $a0 = $s0{head}
+ call :List.Print
+ PrintIntS(33300000)
+ if $s0{head} goto :null41
+ Error("null pointer")
+null41:
+ $a0 = $s0{head}
+ $a1 = $s1{el01}
+ call :List.Delete
+ $s0{head} = $v0
+ if $s0{head} goto :null42
+ Error("null pointer")
+null42:
+ $a0 = $s0{head}
+ call :List.Print
+ PrintIntS(44440000)
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
diff --git a/base/LinkedList.opt.regalloc b/base/LinkedList.opt.regalloc
new file mode 100644
index 0000000..30991e8
--- /dev/null
+++ b/base/LinkedList.opt.regalloc
@@ -0,0 +1,362 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 11
+Linear Range:
+ t.0: 10-11
+Allocation:
+ t.0: t0
+
+func Element.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 15-17
+ v_Age: 15
+ v_Salary: 15-16
+ v_Married: 15-17
+Linear Range:
+ this: 14-17
+ v_Age: 14-15
+ v_Salary: 14-16
+ v_Married: 14-17
+Allocation:
+ this: t0
+ v_Age: t1
+ v_Salary: t2
+ v_Married: t3
+
+func Element.GetAge
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 21
+ t.0: 22
+Linear Range:
+ this: 20-21
+ t.0: 21-22
+Allocation:
+ this: t0
+ t.0: t0
+
+func Element.GetSalary
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 25
+ t.0: 26
+Linear Range:
+ this: 24-25
+ t.0: 25-26
+Allocation:
+ this: t0
+ t.0: t0
+
+func Element.GetMarried
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 29
+ t.0: 30
+Linear Range:
+ this: 28-29
+ t.0: 29-30
+Allocation:
+ this: t0
+ t.0: t0
+
+func Element.Equal
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 33-34 37-40 44 47-50 54
+ other: 33-34 37-40 44 47-50 54-56 59 68 71
+ ret_val: 34 37-40 42-44 47-50 52-56 59-60 62-68 71-72 74-81
+ aux01: 38-39
+ t.0: 39
+ t.1: 40
+ aux02: 48-49
+ t.2: 49
+ t.3: 50
+ t.4: 55
+ t.5: 60
+ nt:
+ t.6: 72
+Linear Range:
+ this: 32-54 (cross call)
+ other: 32-71 (cross call)
+ ret_val: 33-81 (cross call)
+ aux01: 37-39
+ t.0: 38-39
+ t.1: 39-40
+ aux02: 47-49
+ t.2: 48-49
+ t.3: 49-50
+ t.4: 54-55
+ t.5: 59-60
+ t.6: 71-72
+Allocation:
+ this: s0
+ other: s1
+ ret_val: s2
+ aux01: t0
+ t.0: t1
+ t.1: t1
+ aux02: t1
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+
+func Element.Compare
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ num1: 84-87 91
+ num2: 84-86
+ retval: 89 94 99
+ aux02: 86-87 91
+ t.0: 87
+ t.1: 92
+Linear Range:
+ num1: 83-91
+ num2: 83-86
+ retval: 88-99
+ aux02: 85-91
+ t.0: 86-87
+ t.1: 91-92
+Allocation:
+ num1: t0
+ num2: t1
+ retval: t1
+ aux02: t2
+ t.0: t1
+ t.1: t2
+
+func List.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 102
+Linear Range:
+ this: 101-102
+Allocation:
+ this: t0
+
+func List.InitNew
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 106-108
+ v_elem: 106-107
+ v_next: 106-108
+ v_end: 106
+Linear Range:
+ this: 105-108
+ v_elem: 105-107
+ v_next: 105-108
+ v_end: 105-106
+Allocation:
+ this: t0
+ v_elem: t1
+ v_next: t2
+ v_end: t3
+
+func List.Insert
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 112
+ new_elem: 112-114 117
+ aux03: 113-114 117
+ aux02: 114 117-118
+ ret_val:
+Linear Range:
+ this: 111-112
+ new_elem: 111-117
+ aux03: 112-117
+ aux02: 113-118 (cross call)
+Allocation:
+ this: t0
+ new_elem: t1
+ aux03: t0
+ aux02: s0
+
+func List.SetNext
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 121
+ v_next: 121
+Linear Range:
+ this: 120-121
+ v_next: 120-121
+Allocation:
+ this: t0
+ v_next: t1
+
+func List.Delete
+ in 0, out 0, callee-saves 8, spills 0
+Live In:
+ this: 125-131
+ e: 125-140 143-148 151-156 159 162-173 176-177 180-181 184-190
+ my_head: 126-140 143-147 152-156 159 162-173 176-177 180-181 184-192
+ ret_val: 127-140 143-144 146-148 151-156 159 162-173 176-177 180-181 184-190
+ aux04: 128-140 143-148 151-156 159 162-171 186-190
+ aux01: 129-140 143-148 151-156 159 162-173 176-177 180-181 184-190
+ prev: 130-140 143-148 151-156 159 162-171 173 176-177 180-181 184-190
+ var_end: 131-140 143-148 151-156 159 162-171 181 184-190
+ var_elem: 133-140 143-148 151-156 159 162-171 185-190
+ t.0: 135 139
+ t.1: 144
+ t.2: 147
+ t.3: 155
+ t.4: 163
+ aux05:
+ t.5: 165
+ nt:
+Linear Range:
+ this: 124-131
+ e: 124-190 (cross call)
+ my_head: 125-192 (cross call)
+ ret_val: 126-190 (cross call)
+ aux04: 127-190 (cross call)
+ aux01: 128-190 (cross call)
+ prev: 129-190 (cross call)
+ var_end: 130-190 (cross call)
+ var_elem: 131-190 (cross call)
+ t.0: 134-139
+ t.1: 143-144
+ t.2: 146-147
+ t.3: 154-155
+ t.4: 162-163
+ t.5: 164-165
+Allocation:
+ this: t0
+ e: s0
+ my_head: s1
+ ret_val: s2
+ aux04: s3
+ aux01: s4
+ prev: s5
+ var_end: s6
+ var_elem: s7
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+
+func List.Search
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 195-198
+ e: 195-202 205-212 215-216 219-220 223-224
+ int_ret_val: 196-202 205-206 208-212 215-216 219-220 223-226
+ aux01: 197-202 205-212 215-216 219-220 223-224
+ var_end: 198-200 220 223-224
+ var_elem: 200-202 205 224
+ t.0: 201
+ t.1: 206
+ nt:
+Linear Range:
+ this: 194-198
+ e: 194-224 (cross call)
+ int_ret_val: 195-226 (cross call)
+ aux01: 196-224 (cross call)
+ var_end: 197-224 (cross call)
+ var_elem: 198-224
+ t.0: 200-201
+ t.1: 205-206
+Allocation:
+ this: t0
+ e: s0
+ int_ret_val: s1
+ aux01: s2
+ var_end: s3
+ var_elem: t0
+ t.0: t1
+ t.1: t1
+
+func List.GetEnd
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 229
+ t.0: 230
+Linear Range:
+ this: 228-229
+ t.0: 229-230
+Allocation:
+ this: t0
+ t.0: t0
+
+func List.GetElem
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 233
+ t.0: 234
+Linear Range:
+ this: 232-233
+ t.0: 233-234
+Allocation:
+ this: t0
+ t.0: t0
+
+func List.GetNext
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 237
+ t.0: 238
+Linear Range:
+ this: 236-237
+ t.0: 237-238
+Allocation:
+ this: t0
+ t.0: t0
+
+func List.Print
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 241-243
+ aux01: 242-247 250-252 255-256 259-260 263-264
+ var_end: 243-245 260 263-264
+ var_elem: 245-247 250 264
+ t.0: 246
+ t.1: 251
+Linear Range:
+ this: 240-243
+ aux01: 241-264 (cross call)
+ var_end: 242-264 (cross call)
+ var_elem: 243-264
+ t.0: 245-246
+ t.1: 250-251
+Allocation:
+ this: t0
+ aux01: s0
+ var_end: s1
+ var_elem: t0
+ t.0: t1
+ t.1: t1
+
+func LL.Start
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this:
+ last_elem: 270 273-274
+ aux01:
+ head: 275 278-279 282-284 287-288 291-292 295-298 301-303 306-307 310-313 316-317 320-321 324-326 329-330 333-335 338-342 345-346 349-350 353-355 358-359 362-364 367-368 371
+ el01: 284 287-288 291 298 301-303 306 313 316-317 320 342 345-346 349-350 353-355 358-359 362-364 367
+ el02: 303 306-307 310-313 316-317 320-321 324-326 329-330 333-335 338-342 345-346 349-350 353-355 358
+ el03: 326 329-330 333-335 338
+ t.0: 334
+ t.1: 339
+Linear Range:
+ last_elem: 269-274 (cross call)
+ head: 274-371 (cross call)
+ el01: 283-367 (cross call)
+ el02: 302-358 (cross call)
+ el03: 325-338 (cross call)
+ t.0: 333-334
+ t.1: 338-339
+Allocation:
+ last_elem: s0
+ head: s0
+ el01: s1
+ el02: s2
+ el03: s3
+ t.0: t0
+ t.1: t0
+
diff --git a/base/LinkedList.opt.vapor b/base/LinkedList.opt.vapor
new file mode 100644
index 0000000..aaca62c
--- /dev/null
+++ b/base/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/base/LinkedList.opt.vaporm b/base/LinkedList.opt.vaporm
new file mode 100644
index 0000000..b9bef66
--- /dev/null
+++ b/base/LinkedList.opt.vaporm
@@ -0,0 +1,562 @@
+const empty_Element
+
+const empty_List
+
+const empty_LL
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_LL
+ call :LL.Start
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func Element.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = $a2
+ $t3 = $a3
+ [$t0] = $t1
+ [$t0+4] = $t2
+ [$t0+8] = $t3
+ $v0 = 1
+ ret
+
+func Element.GetAge [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0]
+ $v0 = $t0
+ ret
+
+func Element.GetSalary [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func Element.GetMarried [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func Element.Equal [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = 1
+ if $s1 goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $s1
+ call :Element.GetAge
+ $t0 = $v0
+ $t1 = [$s0]
+ $a0 = $s0
+ $a1 = $t0
+ $a2 = $t1
+ call :Element.Compare
+ $t1 = $v0
+ if $t1 goto :if1_else
+ $s2 = 0
+ goto :if1_end
+if1_else:
+ if $s1 goto :null2
+ Error("null pointer")
+null2:
+ $a0 = $s1
+ call :Element.GetSalary
+ $t1 = $v0
+ $t0 = [$s0+4]
+ $a0 = $s0
+ $a1 = $t1
+ $a2 = $t0
+ call :Element.Compare
+ $t0 = $v0
+ if $t0 goto :if2_else
+ $s2 = 0
+ goto :if2_end
+if2_else:
+ $t0 = [$s0+8]
+ if0 $t0 goto :if3_else
+ if $s1 goto :null3
+ Error("null pointer")
+null3:
+ $a0 = $s1
+ call :Element.GetMarried
+ $t0 = $v0
+ if $t0 goto :if4_else
+ $s2 = 0
+ goto :if4_end
+if4_else:
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s1 goto :null4
+ Error("null pointer")
+null4:
+ $a0 = $s1
+ call :Element.GetMarried
+ $t0 = $v0
+ if0 $t0 goto :if5_else
+ $s2 = 0
+ goto :if5_end
+if5_else:
+if5_end:
+if3_end:
+if2_end:
+if1_end:
+ $v0 = $s2
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Element.Compare [in 0, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = Add($t1 1)
+ $t1 = LtS($t0 $t1)
+ if0 $t1 goto :if6_else
+ $t1 = 0
+ goto :if6_end
+if6_else:
+ $t2 = LtS($t0 $t2)
+ if $t2 goto :if7_else
+ $t1 = 0
+ goto :if7_end
+if7_else:
+ $t1 = 1
+if7_end:
+if6_end:
+ $v0 = $t1
+ ret
+
+func List.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ [$t0+8] = 1
+ $v0 = 1
+ ret
+
+func List.InitNew [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = $a2
+ $t3 = $a3
+ [$t0+8] = $t3
+ [$t0] = $t1
+ [$t0+4] = $t2
+ $v0 = 1
+ ret
+
+func List.Insert [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0 = $a0
+ $t1 = $a1
+ $t0 = $t0
+ $s0 = HeapAllocZ(12)
+ if $s0 goto :null5
+ Error("null pointer")
+null5:
+ $a0 = $s0
+ $a1 = $t1
+ $a2 = $t0
+ $a3 = 0
+ call :List.InitNew
+ $v0 = $s0
+ $s0 = local[0]
+ ret
+
+func List.SetNext [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+4] = $t1
+ $v0 = 1
+ ret
+
+func List.Delete [in 0, out 0, local 8]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = $t0
+ $s2 = 0
+ $s3 = Sub(0 1)
+ $s4 = $t0
+ $s5 = $t0
+ $s6 = [$t0+8]
+ $s7 = [$t0]
+while1_top:
+ if $s6 goto :ss1_else
+ $t0 = Sub(1 $s2)
+ goto :ss1_end
+ss1_else:
+ $t0 = 0
+ss1_end:
+ if0 $t0 goto :while1_end
+ if $s0 goto :null6
+ Error("null pointer")
+null6:
+ $a0 = $s0
+ $a1 = $s7
+ call :Element.Equal
+ $t0 = $v0
+ if0 $t0 goto :if8_else
+ $s2 = 1
+ $t0 = LtS($s3 0)
+ if0 $t0 goto :if9_else
+ if $s4 goto :null7
+ Error("null pointer")
+null7:
+ $a0 = $s4
+ call :List.GetNext
+ $s1 = $v0
+ goto :if9_end
+if9_else:
+ $t0 = Sub(0 555)
+ PrintIntS($t0)
+ if $s5 goto :null8
+ Error("null pointer")
+null8:
+ if $s4 goto :null9
+ Error("null pointer")
+null9:
+ $a0 = $s4
+ call :List.GetNext
+ $t0 = $v0
+ $a0 = $s5
+ $a1 = $t0
+ call :List.SetNext
+ $t0 = Sub(0 555)
+ PrintIntS($t0)
+if9_end:
+ goto :if8_end
+if8_else:
+if8_end:
+ if $s2 goto :if10_else
+ $s5 = $s4
+ if $s4 goto :null10
+ Error("null pointer")
+null10:
+ $a0 = $s4
+ call :List.GetNext
+ $s4 = $v0
+ if $s4 goto :null11
+ Error("null pointer")
+null11:
+ $a0 = $s4
+ call :List.GetEnd
+ $s6 = $v0
+ if $s4 goto :null12
+ Error("null pointer")
+null12:
+ $a0 = $s4
+ call :List.GetElem
+ $s7 = $v0
+ $s3 = 1
+ goto :if10_end
+if10_else:
+if10_end:
+ goto :while1_top
+while1_end:
+ $v0 = $s1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
+
+func List.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = 0
+ $s2 = $t0
+ $s3 = [$t0+8]
+ $t0 = [$t0]
+while2_top:
+ $t1 = Sub(1 $s3)
+ if0 $t1 goto :while2_end
+ if $s0 goto :null13
+ Error("null pointer")
+null13:
+ $a0 = $s0
+ $a1 = $t0
+ call :Element.Equal
+ $t1 = $v0
+ if0 $t1 goto :if11_else
+ $s1 = 1
+ goto :if11_end
+if11_else:
+if11_end:
+ if $s2 goto :null14
+ Error("null pointer")
+null14:
+ $a0 = $s2
+ call :List.GetNext
+ $s2 = $v0
+ if $s2 goto :null15
+ Error("null pointer")
+null15:
+ $a0 = $s2
+ call :List.GetEnd
+ $s3 = $v0
+ if $s2 goto :null16
+ Error("null pointer")
+null16:
+ $a0 = $s2
+ call :List.GetElem
+ $t0 = $v0
+ goto :while2_top
+while2_end:
+ $v0 = $s1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func List.GetEnd [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func List.GetElem [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0]
+ $v0 = $t0
+ ret
+
+func List.GetNext [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func List.Print [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $t0 = $a0
+ $s0 = $t0
+ $s1 = [$t0+8]
+ $t0 = [$t0]
+while3_top:
+ $t1 = Sub(1 $s1)
+ if0 $t1 goto :while3_end
+ if $t0 goto :null17
+ Error("null pointer")
+null17:
+ $a0 = $t0
+ call :Element.GetAge
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s0 goto :null18
+ Error("null pointer")
+null18:
+ $a0 = $s0
+ call :List.GetNext
+ $s0 = $v0
+ if $s0 goto :null19
+ Error("null pointer")
+null19:
+ $a0 = $s0
+ call :List.GetEnd
+ $s1 = $v0
+ if $s0 goto :null20
+ Error("null pointer")
+null20:
+ $a0 = $s0
+ call :List.GetElem
+ $t0 = $v0
+ goto :while3_top
+while3_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func LL.Start [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = HeapAllocZ(12)
+ if $s0 goto :null21
+ Error("null pointer")
+null21:
+ $a0 = $s0
+ call :List.Init
+ $s0 = $s0
+ if $s0 goto :null22
+ Error("null pointer")
+null22:
+ $a0 = $s0
+ call :List.Init
+ if $s0 goto :null23
+ Error("null pointer")
+null23:
+ $a0 = $s0
+ call :List.Print
+ $s1 = HeapAllocZ(12)
+ if $s1 goto :null24
+ Error("null pointer")
+null24:
+ $a0 = $s1
+ $a1 = 25
+ $a2 = 37000
+ $a3 = 0
+ call :Element.Init
+ if $s0 goto :null25
+ Error("null pointer")
+null25:
+ $a0 = $s0
+ $a1 = $s1
+ call :List.Insert
+ $s0 = $v0
+ if $s0 goto :null26
+ Error("null pointer")
+null26:
+ $a0 = $s0
+ call :List.Print
+ PrintIntS(10000000)
+ $s1 = HeapAllocZ(12)
+ if $s1 goto :null27
+ Error("null pointer")
+null27:
+ $a0 = $s1
+ $a1 = 39
+ $a2 = 42000
+ $a3 = 1
+ call :Element.Init
+ $s2 = $s1
+ if $s0 goto :null28
+ Error("null pointer")
+null28:
+ $a0 = $s0
+ $a1 = $s1
+ call :List.Insert
+ $s0 = $v0
+ if $s0 goto :null29
+ Error("null pointer")
+null29:
+ $a0 = $s0
+ call :List.Print
+ PrintIntS(10000000)
+ $s1 = HeapAllocZ(12)
+ if $s1 goto :null30
+ Error("null pointer")
+null30:
+ $a0 = $s1
+ $a1 = 22
+ $a2 = 34000
+ $a3 = 0
+ call :Element.Init
+ if $s0 goto :null31
+ Error("null pointer")
+null31:
+ $a0 = $s0
+ $a1 = $s1
+ call :List.Insert
+ $s0 = $v0
+ if $s0 goto :null32
+ Error("null pointer")
+null32:
+ $a0 = $s0
+ call :List.Print
+ $s3 = HeapAllocZ(12)
+ if $s3 goto :null33
+ Error("null pointer")
+null33:
+ $a0 = $s3
+ $a1 = 27
+ $a2 = 34000
+ $a3 = 0
+ call :Element.Init
+ if $s0 goto :null34
+ Error("null pointer")
+null34:
+ $a0 = $s0
+ $a1 = $s2
+ call :List.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null35
+ Error("null pointer")
+null35:
+ $a0 = $s0
+ $a1 = $s3
+ call :List.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ PrintIntS(10000000)
+ $s1 = HeapAllocZ(12)
+ if $s1 goto :null36
+ Error("null pointer")
+null36:
+ $a0 = $s1
+ $a1 = 28
+ $a2 = 35000
+ $a3 = 0
+ call :Element.Init
+ if $s0 goto :null37
+ Error("null pointer")
+null37:
+ $a0 = $s0
+ $a1 = $s1
+ call :List.Insert
+ $s0 = $v0
+ if $s0 goto :null38
+ Error("null pointer")
+null38:
+ $a0 = $s0
+ call :List.Print
+ PrintIntS(2220000)
+ if $s0 goto :null39
+ Error("null pointer")
+null39:
+ $a0 = $s0
+ $a1 = $s2
+ call :List.Delete
+ $s0 = $v0
+ if $s0 goto :null40
+ Error("null pointer")
+null40:
+ $a0 = $s0
+ call :List.Print
+ PrintIntS(33300000)
+ if $s0 goto :null41
+ Error("null pointer")
+null41:
+ $a0 = $s0
+ $a1 = $s1
+ call :List.Delete
+ $s0 = $v0
+ if $s0 goto :null42
+ Error("null pointer")
+null42:
+ $a0 = $s0
+ call :List.Print
+ PrintIntS(44440000)
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
diff --git a/base/LinkedList.regalloc b/base/LinkedList.regalloc
new file mode 100644
index 0000000..7b3da4e
--- /dev/null
+++ b/base/LinkedList.regalloc
@@ -0,0 +1,539 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 28-29 32-34
+ t.1: 33-34
+ t.2: 35
+Linear Range:
+ t.0: 27-34
+ t.1: 32-34
+ t.2: 34-35
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func Element.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 39-41
+ v_Age: 39
+ v_Salary: 39-40
+ v_Married: 39-41
+Linear Range:
+ this: 38-41
+ v_Age: 38-39
+ v_Salary: 38-40
+ v_Married: 38-41
+Allocation:
+ this: t0
+ v_Age: t1
+ v_Salary: t2
+ v_Married: t3
+
+func Element.GetAge
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 45
+ t.0: 46
+Linear Range:
+ this: 44-45
+ t.0: 45-46
+Allocation:
+ this: t0
+ t.0: t0
+
+func Element.GetSalary
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 49
+ t.0: 50
+Linear Range:
+ this: 48-49
+ t.0: 49-50
+Allocation:
+ this: t0
+ t.0: t0
+
+func Element.GetMarried
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 53
+ t.0: 54
+Linear Range:
+ this: 52-53
+ t.0: 53-54
+Allocation:
+ this: t0
+ t.0: t0
+
+func Element.Equal
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 57-58 61-69 73 76-84 88
+ other: 57-58 61-69 73 76-84 88-90 93-95 105 108-110
+ ret_val: 58 61-69 71-73 76-84 86-90 93-97 99-105 108-111 113-120
+ t.0: 62-63
+ aux01: 64-67
+ t.1: 65-67
+ t.2: 67
+ t.3: 68
+ t.4: 69
+ t.5: 77-78
+ aux02: 79-82
+ t.6: 80-82
+ t.7: 82
+ t.8: 83
+ t.9: 84
+ t.10: 89
+ t.11: 94-95
+ t.12: 96
+ t.13: 97
+ nt:
+ t.14: 109-110
+ t.15: 111
+Linear Range:
+ this: 56-88 (cross call)
+ other: 56-110 (cross call)
+ ret_val: 57-120 (cross call)
+ t.0: 61-63
+ aux01: 63-67
+ t.1: 64-67
+ t.2: 66-67
+ t.3: 67-68
+ t.4: 68-69
+ t.5: 76-78
+ aux02: 78-82
+ t.6: 79-82
+ t.7: 81-82
+ t.8: 82-83
+ t.9: 83-84
+ t.10: 88-89
+ t.11: 93-95
+ t.12: 95-96
+ t.13: 96-97
+ t.14: 108-110
+ t.15: 110-111
+Allocation:
+ this: s0
+ other: s1
+ ret_val: s2
+ t.0: t0
+ aux01: t0
+ t.1: t1
+ t.2: t2
+ t.3: t2
+ t.4: t2
+ t.5: t2
+ aux02: t2
+ t.6: t1
+ t.7: t0
+ t.8: t0
+ t.9: t0
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+ t.14: t0
+ t.15: t0
+
+func Element.Compare
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ num1: 123-126 130
+ num2: 123-125
+ retval: 128 134 139
+ aux02: 125-126 130
+ t.0: 126
+ t.1: 131
+ t.2: 132
+Linear Range:
+ num1: 122-130
+ num2: 122-125
+ retval: 127-139
+ aux02: 124-130
+ t.0: 125-126
+ t.1: 130-131
+ t.2: 131-132
+Allocation:
+ num1: t0
+ num2: t1
+ retval: t1
+ aux02: t2
+ t.0: t1
+ t.1: t2
+ t.2: t2
+
+func List.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 142
+Linear Range:
+ this: 141-142
+Allocation:
+ this: t0
+
+func List.InitNew
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 146-148
+ v_elem: 146-147
+ v_next: 146-148
+ v_end: 146
+Linear Range:
+ this: 145-148
+ v_elem: 145-147
+ v_next: 145-148
+ v_end: 145-146
+Allocation:
+ this: t0
+ v_elem: t1
+ v_next: t2
+ v_end: t3
+
+func List.Insert
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 152
+ new_elem: 152-156 159-161
+ aux03: 153-156 159-161
+ t.0: 154-155
+ aux02: 156 159-162
+ t.1: 160-161
+ ret_val:
+Linear Range:
+ this: 151-152
+ new_elem: 151-161
+ aux03: 152-161
+ t.0: 153-155
+ aux02: 155-162 (cross call)
+ t.1: 159-161
+Allocation:
+ this: t0
+ new_elem: t1
+ aux03: t0
+ t.0: t2
+ aux02: s0
+ t.1: t2
+
+func List.SetNext
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 165
+ v_next: 165
+Linear Range:
+ this: 164-165
+ v_next: 164-165
+Allocation:
+ this: t0
+ v_next: t1
+
+func List.Delete
+ in 0, out 0, callee-saves 8, spills 1
+Live In:
+ this: 169-175
+ e: 169-185 188-195 198-205 208-210 213-227 230-233 236-239 242-250
+ my_head: 170-185 188-194 201-205 208-210 213-227 230-233 236-239 242-252
+ ret_val: 171-185 188-191 193-195 198-205 208-210 213-227 230-233 236-239 242-250
+ aux04: 172-185 188-195 198-205 208-210 213-225 246-250
+ aux01: 173-185 188-195 198-205 208-210 213-227 230-233 236-239 242-250
+ prev: 174-185 188-195 198-205 208-210 213-225 227 230-233 236-239 242-250
+ var_end: 175-185 188-195 198-205 208-210 213-225 239 242-250
+ var_elem: 177-185 188-195 198-205 208-210 213-225 245-250
+ t.1: 178
+ t.0: 180 184
+ t.2: 189-190
+ t.3: 191
+ t.4: 194
+ t.5: 199-200
+ t.6: 204
+ t.7: 209-210 213-216
+ t.8: 214-215
+ t.9: 216
+ aux05:
+ t.10: 218
+ nt:
+ t.11: 225
+ t.12: 231-232
+ t.13: 237-238
+ t.14: 243-244
+Linear Range:
+ this: 168-175
+ e: 168-250 (cross call)
+ my_head: 169-252 (cross call)
+ ret_val: 170-250 (cross call)
+ aux04: 171-250 (cross call)
+ aux01: 172-250 (cross call)
+ prev: 173-250 (cross call)
+ var_end: 174-250 (cross call)
+ var_elem: 175-250 (cross call)
+ t.1: 177-178
+ t.0: 179-184
+ t.2: 188-190
+ t.3: 190-191
+ t.4: 193-194
+ t.5: 198-200
+ t.6: 203-204
+ t.7: 208-216 (cross call)
+ t.8: 213-215
+ t.9: 215-216
+ t.10: 217-218
+ t.11: 224-225
+ t.12: 230-232
+ t.13: 236-238
+ t.14: 242-244
+Allocation:
+ this: t0
+ e: s0
+ my_head: s1
+ ret_val: s2
+ aux04: s3
+ aux01: s4
+ prev: s5
+ var_end: s6
+ var_elem: s7
+ t.1: t0
+ t.0: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ t.7: local[0]
+ t.8: t0
+ t.9: t0
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+ t.14: t0
+
+func List.Search
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 255-258
+ e: 255-262 265-274 277-280 283-286 289-292
+ int_ret_val: 256-262 265-268 270-274 277-280 283-286 289-294
+ aux01: 257-262 265-274 277-280 283-286 289-292
+ var_end: 258-260 286 289-292
+ var_elem: 260-262 265-267 292
+ t.0: 261
+ t.1: 266-267
+ t.2: 268
+ nt:
+ t.3: 278-279
+ t.4: 284-285
+ t.5: 290-291
+Linear Range:
+ this: 254-258
+ e: 254-292 (cross call)
+ int_ret_val: 255-294 (cross call)
+ aux01: 256-292 (cross call)
+ var_end: 257-292 (cross call)
+ var_elem: 258-292
+ t.0: 260-261
+ t.1: 265-267
+ t.2: 267-268
+ t.3: 277-279
+ t.4: 283-285
+ t.5: 289-291
+Allocation:
+ this: t0
+ e: s0
+ int_ret_val: s1
+ aux01: s2
+ var_end: s3
+ var_elem: t0
+ t.0: t1
+ t.1: t1
+ t.2: t1
+ t.3: t1
+ t.4: t1
+ t.5: t1
+
+func List.GetEnd
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 297
+ t.0: 298
+Linear Range:
+ this: 296-297
+ t.0: 297-298
+Allocation:
+ this: t0
+ t.0: t0
+
+func List.GetElem
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 301
+ t.0: 302
+Linear Range:
+ this: 300-301
+ t.0: 301-302
+Allocation:
+ this: t0
+ t.0: t0
+
+func List.GetNext
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 305
+ t.0: 306
+Linear Range:
+ this: 304-305
+ t.0: 305-306
+Allocation:
+ this: t0
+ t.0: t0
+
+func List.Print
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 309-311
+ aux01: 310-315 318-322 325-328 331-334 337-340
+ var_end: 311-313 334 337-340
+ var_elem: 313-315 318-320 340
+ t.0: 314
+ t.1: 319-320
+ t.2: 321
+ t.3: 326-327
+ t.4: 332-333
+ t.5: 338-339
+Linear Range:
+ this: 308-311
+ aux01: 309-340 (cross call)
+ var_end: 310-340 (cross call)
+ var_elem: 311-340
+ t.0: 313-314
+ t.1: 318-320
+ t.2: 320-321
+ t.3: 325-327
+ t.4: 331-333
+ t.5: 337-339
+Allocation:
+ this: t0
+ aux01: s0
+ var_end: s1
+ var_elem: t0
+ t.0: t1
+ t.1: t1
+ t.2: t1
+ t.3: t1
+ t.4: t1
+ t.5: t1
+
+func LL.Start
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this:
+ t.0: 346-347
+ last_elem: 348 351-354
+ t.1: 352-353
+ aux01:
+ head: 355 358-361 364-370 373-376 379-382 385-392 395-399 402-405 408-415 418-421 424-427 430-436 439-442 445-449 452-460 463-466 469-472 475-479 482-485 488-492 495-498 501-503
+ t.2: 359-360
+ t.3: 365-366
+ t.4: 368-369
+ el01: 370 373-376 379-381 392 395-399 402-404 415 418-421 424-426 460 463-466 469-472 475-479 482-485 488-492 495-497
+ t.5: 374-375
+ t.6: 380-381
+ t.7: 386-387
+ t.8: 390-391
+ t.9: 396-397
+ el02: 399 402-405 408-415 418-421 424-427 430-436 439-442 445-449 452-460 463-466 469-472 475-479 482-484
+ t.10: 403-404
+ t.11: 409-410
+ t.12: 413-414
+ t.13: 419-420
+ t.14: 425-426
+ t.15: 431-432
+ t.16: 434-435
+ el03: 436 439-442 445-449 452-454
+ t.17: 440-441
+ t.18: 446-447
+ t.19: 448
+ t.20: 453-454
+ t.21: 455
+ t.22: 458-459
+ t.23: 464-465
+ t.24: 470-471
+ t.25: 476-477
+ t.26: 483-484
+ t.27: 489-490
+ t.28: 496-497
+ t.29: 502-503
+Linear Range:
+ t.0: 345-347
+ last_elem: 347-354 (cross call)
+ t.1: 351-353
+ head: 354-503 (cross call)
+ t.2: 358-360
+ t.3: 364-366
+ t.4: 367-369
+ el01: 369-497 (cross call)
+ t.5: 373-375
+ t.6: 379-381
+ t.7: 385-387
+ t.8: 389-391
+ t.9: 395-397
+ el02: 398-484 (cross call)
+ t.10: 402-404
+ t.11: 408-410
+ t.12: 412-414
+ t.13: 418-420
+ t.14: 424-426
+ t.15: 430-432
+ t.16: 433-435
+ el03: 435-454 (cross call)
+ t.17: 439-441
+ t.18: 445-447
+ t.19: 447-448
+ t.20: 452-454
+ t.21: 454-455
+ t.22: 457-459
+ t.23: 463-465
+ t.24: 469-471
+ t.25: 475-477
+ t.26: 482-484
+ t.27: 488-490
+ t.28: 495-497
+ t.29: 501-503
+Allocation:
+ t.0: t0
+ last_elem: s0
+ t.1: t0
+ head: s0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ el01: s1
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.9: t0
+ el02: s2
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+ t.14: t0
+ t.15: t0
+ t.16: t0
+ el03: s3
+ t.17: t0
+ t.18: t0
+ t.19: t0
+ t.20: t0
+ t.21: t0
+ t.22: t0
+ t.23: t0
+ t.24: t0
+ t.25: t0
+ t.26: t0
+ t.27: t0
+ t.28: t0
+ t.29: t0
+
diff --git a/base/LinkedList.vapor b/base/LinkedList.vapor
new file mode 100644
index 0000000..bebdf94
--- /dev/null
+++ b/base/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/base/LinkedList.vaporm b/base/LinkedList.vaporm
new file mode 100644
index 0000000..80c3a99
--- /dev/null
+++ b/base/LinkedList.vaporm
@@ -0,0 +1,698 @@
+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 [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(4)
+ [$t0] = :vmt_LL
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func Element.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = $a2
+ $t3 = $a3
+ [$t0+4] = $t1
+ [$t0+8] = $t2
+ [$t0+12] = $t3
+ $v0 = 1
+ ret
+
+func Element.GetAge [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func Element.GetSalary [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func Element.GetMarried [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+12]
+ $v0 = $t0
+ ret
+
+func Element.Equal [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = 1
+ if $s1 goto :null2
+ Error("null pointer")
+null2:
+ $t0 = [$s1]
+ $t0 = [$t0+4]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $t1 = [$s0]
+ $t1 = [$t1+20]
+ $t2 = [$s0+4]
+ $a0 = $s0
+ $a1 = $t0
+ $a2 = $t2
+ call $t1
+ $t2 = $v0
+ $t2 = Sub(1 $t2)
+ if0 $t2 goto :if1_else
+ $s2 = 0
+ goto :if1_end
+if1_else:
+ if $s1 goto :null3
+ Error("null pointer")
+null3:
+ $t2 = [$s1]
+ $t2 = [$t2+8]
+ $a0 = $s1
+ call $t2
+ $t2 = $v0
+ $t1 = [$s0]
+ $t1 = [$t1+20]
+ $t0 = [$s0+8]
+ $a0 = $s0
+ $a1 = $t2
+ $a2 = $t0
+ call $t1
+ $t0 = $v0
+ $t0 = Sub(1 $t0)
+ if0 $t0 goto :if2_else
+ $s2 = 0
+ goto :if2_end
+if2_else:
+ $t0 = [$s0+12]
+ if0 $t0 goto :if3_else
+ if $s1 goto :null4
+ Error("null pointer")
+null4:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $t0 = Sub(1 $t0)
+ if0 $t0 goto :if4_else
+ $s2 = 0
+ goto :if4_end
+if4_else:
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s1 goto :null5
+ Error("null pointer")
+null5:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if5_else
+ $s2 = 0
+ goto :if5_end
+if5_else:
+if5_end:
+if3_end:
+if2_end:
+if1_end:
+ $v0 = $s2
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Element.Compare [in 0, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = Add($t1 1)
+ $t1 = LtS($t0 $t1)
+ if0 $t1 goto :if6_else
+ $t1 = 0
+ goto :if6_end
+if6_else:
+ $t2 = LtS($t0 $t2)
+ $t2 = Sub(1 $t2)
+ if0 $t2 goto :if7_else
+ $t1 = 0
+ goto :if7_end
+if7_else:
+ $t1 = 1
+if7_end:
+if6_end:
+ $v0 = $t1
+ ret
+
+func List.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ [$t0+12] = 1
+ $v0 = 1
+ ret
+
+func List.InitNew [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = $a2
+ $t3 = $a3
+ [$t0+12] = $t3
+ [$t0+4] = $t1
+ [$t0+8] = $t2
+ $v0 = 1
+ ret
+
+func List.Insert [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0 = $a0
+ $t1 = $a1
+ $t0 = $t0
+ $t2 = HeapAllocZ(16)
+ [$t2] = :vmt_List
+ $s0 = $t2
+ if $s0 goto :null6
+ Error("null pointer")
+null6:
+ $t2 = [$s0]
+ $t2 = [$t2+4]
+ $a0 = $s0
+ $a1 = $t1
+ $a2 = $t0
+ $a3 = 0
+ call $t2
+ $v0 = $s0
+ $s0 = local[0]
+ ret
+
+func List.SetNext [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+8] = $t1
+ $v0 = 1
+ ret
+
+func List.Delete [in 0, out 0, local 9]
+ local[1] = $s0
+ local[2] = $s1
+ local[3] = $s2
+ local[4] = $s3
+ local[5] = $s4
+ local[6] = $s5
+ local[7] = $s6
+ local[8] = $s7
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = $t0
+ $s2 = 0
+ $s3 = Sub(0 1)
+ $s4 = $t0
+ $s5 = $t0
+ $s6 = [$t0+12]
+ $s7 = [$t0+4]
+while1_top:
+ $t0 = Sub(1 $s6)
+ if0 $t0 goto :ss1_else
+ $t0 = Sub(1 $s2)
+ goto :ss1_end
+ss1_else:
+ $t0 = 0
+ss1_end:
+ if0 $t0 goto :while1_end
+ if $s0 goto :null7
+ Error("null pointer")
+null7:
+ $t0 = [$s0]
+ $t0 = [$t0+16]
+ $a0 = $s0
+ $a1 = $s7
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if8_else
+ $s2 = 1
+ $t0 = LtS($s3 0)
+ if0 $t0 goto :if9_else
+ if $s4 goto :null8
+ Error("null pointer")
+null8:
+ $t0 = [$s4]
+ $t0 = [$t0+32]
+ $a0 = $s4
+ call $t0
+ $s1 = $v0
+ goto :if9_end
+if9_else:
+ $t0 = Sub(0 555)
+ PrintIntS($t0)
+ if $s5 goto :null9
+ Error("null pointer")
+null9:
+ $v0 = [$s5]
+ local[0] = $v0
+ $v0 = local[0]
+ $v0 = [$v0+12]
+ local[0] = $v0
+ if $s4 goto :null10
+ Error("null pointer")
+null10:
+ $t0 = [$s4]
+ $t0 = [$t0+32]
+ $a0 = $s4
+ call $t0
+ $t0 = $v0
+ $a0 = $s5
+ $a1 = $t0
+ $v0 = local[0]
+ call $v0
+ $t0 = Sub(0 555)
+ PrintIntS($t0)
+if9_end:
+ goto :if8_end
+if8_else:
+if8_end:
+ $t0 = Sub(1 $s2)
+ if0 $t0 goto :if10_else
+ $s5 = $s4
+ if $s4 goto :null11
+ Error("null pointer")
+null11:
+ $t0 = [$s4]
+ $t0 = [$t0+32]
+ $a0 = $s4
+ call $t0
+ $s4 = $v0
+ if $s4 goto :null12
+ Error("null pointer")
+null12:
+ $t0 = [$s4]
+ $t0 = [$t0+24]
+ $a0 = $s4
+ call $t0
+ $s6 = $v0
+ if $s4 goto :null13
+ Error("null pointer")
+null13:
+ $t0 = [$s4]
+ $t0 = [$t0+28]
+ $a0 = $s4
+ call $t0
+ $s7 = $v0
+ $s3 = 1
+ goto :if10_end
+if10_else:
+if10_end:
+ goto :while1_top
+while1_end:
+ $v0 = $s1
+ $s0 = local[1]
+ $s1 = local[2]
+ $s2 = local[3]
+ $s3 = local[4]
+ $s4 = local[5]
+ $s5 = local[6]
+ $s6 = local[7]
+ $s7 = local[8]
+ ret
+
+func List.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = 0
+ $s2 = $t0
+ $s3 = [$t0+12]
+ $t0 = [$t0+4]
+while2_top:
+ $t1 = Sub(1 $s3)
+ if0 $t1 goto :while2_end
+ if $s0 goto :null14
+ Error("null pointer")
+null14:
+ $t1 = [$s0]
+ $t1 = [$t1+16]
+ $a0 = $s0
+ $a1 = $t0
+ call $t1
+ $t1 = $v0
+ if0 $t1 goto :if11_else
+ $s1 = 1
+ goto :if11_end
+if11_else:
+if11_end:
+ if $s2 goto :null15
+ Error("null pointer")
+null15:
+ $t1 = [$s2]
+ $t1 = [$t1+32]
+ $a0 = $s2
+ call $t1
+ $s2 = $v0
+ if $s2 goto :null16
+ Error("null pointer")
+null16:
+ $t1 = [$s2]
+ $t1 = [$t1+24]
+ $a0 = $s2
+ call $t1
+ $s3 = $v0
+ if $s2 goto :null17
+ Error("null pointer")
+null17:
+ $t1 = [$s2]
+ $t1 = [$t1+28]
+ $a0 = $s2
+ call $t1
+ $t0 = $v0
+ goto :while2_top
+while2_end:
+ $v0 = $s1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func List.GetEnd [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+12]
+ $v0 = $t0
+ ret
+
+func List.GetElem [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func List.GetNext [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func List.Print [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $t0 = $a0
+ $s0 = $t0
+ $s1 = [$t0+12]
+ $t0 = [$t0+4]
+while3_top:
+ $t1 = Sub(1 $s1)
+ if0 $t1 goto :while3_end
+ if $t0 goto :null18
+ Error("null pointer")
+null18:
+ $t1 = [$t0]
+ $t1 = [$t1+4]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s0 goto :null19
+ Error("null pointer")
+null19:
+ $t1 = [$s0]
+ $t1 = [$t1+32]
+ $a0 = $s0
+ call $t1
+ $s0 = $v0
+ if $s0 goto :null20
+ Error("null pointer")
+null20:
+ $t1 = [$s0]
+ $t1 = [$t1+24]
+ $a0 = $s0
+ call $t1
+ $s1 = $v0
+ if $s0 goto :null21
+ Error("null pointer")
+null21:
+ $t1 = [$s0]
+ $t1 = [$t1+28]
+ $a0 = $s0
+ call $t1
+ $t0 = $v0
+ goto :while3_top
+while3_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func LL.Start [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0 = HeapAllocZ(16)
+ [$t0] = :vmt_List
+ $s0 = $t0
+ if $s0 goto :null22
+ Error("null pointer")
+null22:
+ $t0 = [$s0]
+ $t0 = [$t0]
+ $a0 = $s0
+ call $t0
+ $s0 = $s0
+ if $s0 goto :null23
+ Error("null pointer")
+null23:
+ $t0 = [$s0]
+ $t0 = [$t0]
+ $a0 = $s0
+ call $t0
+ if $s0 goto :null24
+ Error("null pointer")
+null24:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ call $t0
+ $t0 = HeapAllocZ(16)
+ [$t0] = :vmt_Element
+ $s1 = $t0
+ if $s1 goto :null25
+ Error("null pointer")
+null25:
+ $t0 = [$s1]
+ $t0 = [$t0]
+ $a0 = $s1
+ $a1 = 25
+ $a2 = 37000
+ $a3 = 0
+ call $t0
+ if $s0 goto :null26
+ Error("null pointer")
+null26:
+ $t0 = [$s0]
+ $t0 = [$t0+8]
+ $a0 = $s0
+ $a1 = $s1
+ call $t0
+ $s0 = $v0
+ if $s0 goto :null27
+ Error("null pointer")
+null27:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ call $t0
+ PrintIntS(10000000)
+ $t0 = HeapAllocZ(16)
+ [$t0] = :vmt_Element
+ $s1 = $t0
+ if $s1 goto :null28
+ Error("null pointer")
+null28:
+ $t0 = [$s1]
+ $t0 = [$t0]
+ $a0 = $s1
+ $a1 = 39
+ $a2 = 42000
+ $a3 = 1
+ call $t0
+ $s2 = $s1
+ if $s0 goto :null29
+ Error("null pointer")
+null29:
+ $t0 = [$s0]
+ $t0 = [$t0+8]
+ $a0 = $s0
+ $a1 = $s1
+ call $t0
+ $s0 = $v0
+ if $s0 goto :null30
+ Error("null pointer")
+null30:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ call $t0
+ PrintIntS(10000000)
+ $t0 = HeapAllocZ(16)
+ [$t0] = :vmt_Element
+ $s1 = $t0
+ if $s1 goto :null31
+ Error("null pointer")
+null31:
+ $t0 = [$s1]
+ $t0 = [$t0]
+ $a0 = $s1
+ $a1 = 22
+ $a2 = 34000
+ $a3 = 0
+ call $t0
+ if $s0 goto :null32
+ Error("null pointer")
+null32:
+ $t0 = [$s0]
+ $t0 = [$t0+8]
+ $a0 = $s0
+ $a1 = $s1
+ call $t0
+ $s0 = $v0
+ if $s0 goto :null33
+ Error("null pointer")
+null33:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ call $t0
+ $t0 = HeapAllocZ(16)
+ [$t0] = :vmt_Element
+ $s3 = $t0
+ if $s3 goto :null34
+ Error("null pointer")
+null34:
+ $t0 = [$s3]
+ $t0 = [$t0]
+ $a0 = $s3
+ $a1 = 27
+ $a2 = 34000
+ $a3 = 0
+ call $t0
+ if $s0 goto :null35
+ Error("null pointer")
+null35:
+ $t0 = [$s0]
+ $t0 = [$t0+20]
+ $a0 = $s0
+ $a1 = $s2
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null36
+ Error("null pointer")
+null36:
+ $t0 = [$s0]
+ $t0 = [$t0+20]
+ $a0 = $s0
+ $a1 = $s3
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ PrintIntS(10000000)
+ $t0 = HeapAllocZ(16)
+ [$t0] = :vmt_Element
+ $s1 = $t0
+ if $s1 goto :null37
+ Error("null pointer")
+null37:
+ $t0 = [$s1]
+ $t0 = [$t0]
+ $a0 = $s1
+ $a1 = 28
+ $a2 = 35000
+ $a3 = 0
+ call $t0
+ if $s0 goto :null38
+ Error("null pointer")
+null38:
+ $t0 = [$s0]
+ $t0 = [$t0+8]
+ $a0 = $s0
+ $a1 = $s1
+ call $t0
+ $s0 = $v0
+ if $s0 goto :null39
+ Error("null pointer")
+null39:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ call $t0
+ PrintIntS(2220000)
+ if $s0 goto :null40
+ Error("null pointer")
+null40:
+ $t0 = [$s0]
+ $t0 = [$t0+16]
+ $a0 = $s0
+ $a1 = $s2
+ call $t0
+ $s0 = $v0
+ if $s0 goto :null41
+ Error("null pointer")
+null41:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ call $t0
+ PrintIntS(33300000)
+ if $s0 goto :null42
+ Error("null pointer")
+null42:
+ $t0 = [$s0]
+ $t0 = [$t0+16]
+ $a0 = $s0
+ $a1 = $s1
+ call $t0
+ $s0 = $v0
+ if $s0 goto :null43
+ Error("null pointer")
+null43:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ call $t0
+ PrintIntS(44440000)
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
diff --git a/base/MoreThan4-error.java b/base/MoreThan4-error.java
new file mode 100644
index 0000000..9e8f63e
--- /dev/null
+++ b/base/MoreThan4-error.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);//TE
+ 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/base/MoreThan4.java b/base/MoreThan4.java
new file mode 100644
index 0000000..4960f01
--- /dev/null
+++ b/base/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/base/MoreThan4.names.vaporm b/base/MoreThan4.names.vaporm
new file mode 100644
index 0000000..366618c
--- /dev/null
+++ b/base/MoreThan4.names.vaporm
@@ -0,0 +1,68 @@
+const vmt_MT4
+ :MT4.Start
+ :MT4.Change
+
+func Main [in 0, out 3, local 0]
+ $t0{t.0} = HeapAllocZ(4)
+ [$t0{t.0}] = :vmt_MT4
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ $a1 = 1
+ $a2 = 2
+ $a3 = 3
+ out[0] = 4
+ out[1] = 5
+ out[2] = 6
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func MT4.Start [in 3, out 3, local 0]
+ $t0{this} = $a0
+ $t1{p1} = $a1
+ $t2{p2} = $a2
+ $t3{p3} = $a3
+ $t4{p4} = in[0]
+ $t5{p5} = in[1]
+ $t6{p6} = in[2]
+ PrintIntS($t1{p1})
+ PrintIntS($t2{p2})
+ PrintIntS($t3{p3})
+ PrintIntS($t4{p4})
+ PrintIntS($t5{p5})
+ PrintIntS($t6{p6})
+ $t7{t.0} = [$t0{this}]
+ $t7{t.0} = [$t7{t.0}+4]
+ $a0 = $t0{this}
+ $a1 = $t6{p6}
+ $a2 = $t5{p5}
+ $a3 = $t4{p4}
+ out[0] = $t3{p3}
+ out[1] = $t2{p2}
+ out[2] = $t1{p1}
+ call $t7{t.0}
+ $t7{aux} = $v0
+ $v0 = $t7{aux}
+ ret
+
+func MT4.Change [in 3, out 0, local 0]
+ $t0{p1} = $a1
+ $t1{p2} = $a2
+ $t2{p3} = $a3
+ $t3{p4} = in[0]
+ $t4{p5} = in[1]
+ $t5{p6} = in[2]
+ PrintIntS($t0{p1})
+ PrintIntS($t1{p2})
+ PrintIntS($t2{p3})
+ PrintIntS($t3{p4})
+ PrintIntS($t4{p5})
+ PrintIntS($t5{p6})
+ $v0 = 0
+ ret
+
diff --git a/base/MoreThan4.opt.names.vaporm b/base/MoreThan4.opt.names.vaporm
new file mode 100644
index 0000000..a07f7e7
--- /dev/null
+++ b/base/MoreThan4.opt.names.vaporm
@@ -0,0 +1,57 @@
+const empty_MT4
+
+func Main [in 0, out 3, local 0]
+ $a0 = :empty_MT4
+ $a1 = 1
+ $a2 = 2
+ $a3 = 3
+ out[0] = 4
+ out[1] = 5
+ out[2] = 6
+ call :MT4.Start
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ ret
+
+func MT4.Start [in 3, out 3, local 0]
+ $t0{this} = $a0
+ $t1{p1} = $a1
+ $t2{p2} = $a2
+ $t3{p3} = $a3
+ $t4{p4} = in[0]
+ $t5{p5} = in[1]
+ $t6{p6} = in[2]
+ PrintIntS($t1{p1})
+ PrintIntS($t2{p2})
+ PrintIntS($t3{p3})
+ PrintIntS($t4{p4})
+ PrintIntS($t5{p5})
+ PrintIntS($t6{p6})
+ $a0 = $t0{this}
+ $a1 = $t6{p6}
+ $a2 = $t5{p5}
+ $a3 = $t4{p4}
+ out[0] = $t3{p3}
+ out[1] = $t2{p2}
+ out[2] = $t1{p1}
+ call :MT4.Change
+ $t6{aux} = $v0
+ $v0 = $t6{aux}
+ ret
+
+func MT4.Change [in 3, out 0, local 0]
+ $t0{p1} = $a1
+ $t1{p2} = $a2
+ $t2{p3} = $a3
+ $t3{p4} = in[0]
+ $t4{p5} = in[1]
+ $t5{p6} = in[2]
+ PrintIntS($t0{p1})
+ PrintIntS($t1{p2})
+ PrintIntS($t2{p3})
+ PrintIntS($t3{p4})
+ PrintIntS($t4{p5})
+ PrintIntS($t5{p6})
+ $v0 = 0
+ ret
+
diff --git a/base/MoreThan4.opt.regalloc b/base/MoreThan4.opt.regalloc
new file mode 100644
index 0000000..ceb8927
--- /dev/null
+++ b/base/MoreThan4.opt.regalloc
@@ -0,0 +1,64 @@
+func Main
+ in 0, out 3, callee-saves 0, spills 0
+Live In:
+ t.0: 7
+Linear Range:
+ t.0: 6-7
+Allocation:
+ t.0: t0
+
+func MT4.Start
+ in 3, out 3, callee-saves 0, spills 0
+Live In:
+ this: 11-17
+ p1: 11-17
+ p2: 11-17
+ p3: 11-17
+ p4: 11-17
+ p5: 11-17
+ p6: 11-17
+ aux: 18
+Linear Range:
+ this: 10-17
+ p1: 10-17
+ p2: 10-17
+ p3: 10-17
+ p4: 10-17
+ p5: 10-17
+ p6: 10-17
+ aux: 17-18
+Allocation:
+ this: t0
+ p1: t1
+ p2: t2
+ p3: t3
+ p4: t4
+ p5: t5
+ p6: t6
+ aux: t6
+
+func MT4.Change
+ in 3, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ p1: 21
+ p2: 21-22
+ p3: 21-23
+ p4: 21-24
+ p5: 21-25
+ p6: 21-26
+Linear Range:
+ p1: 20-21
+ p2: 20-22
+ p3: 20-23
+ p4: 20-24
+ p5: 20-25
+ p6: 20-26
+Allocation:
+ p1: t0
+ p2: t1
+ p3: t2
+ p4: t3
+ p5: t4
+ p6: t5
+
diff --git a/base/MoreThan4.opt.vapor b/base/MoreThan4.opt.vapor
new file mode 100644
index 0000000..a59d1b5
--- /dev/null
+++ b/base/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/base/MoreThan4.opt.vaporm b/base/MoreThan4.opt.vaporm
new file mode 100644
index 0000000..d1d663b
--- /dev/null
+++ b/base/MoreThan4.opt.vaporm
@@ -0,0 +1,57 @@
+const empty_MT4
+
+func Main [in 0, out 3, local 0]
+ $a0 = :empty_MT4
+ $a1 = 1
+ $a2 = 2
+ $a3 = 3
+ out[0] = 4
+ out[1] = 5
+ out[2] = 6
+ call :MT4.Start
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func MT4.Start [in 3, out 3, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = $a2
+ $t3 = $a3
+ $t4 = in[0]
+ $t5 = in[1]
+ $t6 = in[2]
+ PrintIntS($t1)
+ PrintIntS($t2)
+ PrintIntS($t3)
+ PrintIntS($t4)
+ PrintIntS($t5)
+ PrintIntS($t6)
+ $a0 = $t0
+ $a1 = $t6
+ $a2 = $t5
+ $a3 = $t4
+ out[0] = $t3
+ out[1] = $t2
+ out[2] = $t1
+ call :MT4.Change
+ $t6 = $v0
+ $v0 = $t6
+ ret
+
+func MT4.Change [in 3, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = $a3
+ $t3 = in[0]
+ $t4 = in[1]
+ $t5 = in[2]
+ PrintIntS($t0)
+ PrintIntS($t1)
+ PrintIntS($t2)
+ PrintIntS($t3)
+ PrintIntS($t4)
+ PrintIntS($t5)
+ $v0 = 0
+ ret
+
diff --git a/base/MoreThan4.regalloc b/base/MoreThan4.regalloc
new file mode 100644
index 0000000..0748f62
--- /dev/null
+++ b/base/MoreThan4.regalloc
@@ -0,0 +1,73 @@
+func Main
+ in 0, out 3, callee-saves 0, spills 0
+Live In:
+ t.0: 9-10 13-15
+ t.1: 14-15
+ t.2: 16
+Linear Range:
+ t.0: 8-15
+ t.1: 13-15
+ t.2: 15-16
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func MT4.Start
+ in 3, out 3, callee-saves 0, spills 0
+Live In:
+ this: 20-28
+ p1: 20-28
+ p2: 20-28
+ p3: 20-28
+ p4: 20-28
+ p5: 20-28
+ p6: 20-28
+ t.0: 27-28
+ aux: 29
+Linear Range:
+ this: 19-28
+ p1: 19-28
+ p2: 19-28
+ p3: 19-28
+ p4: 19-28
+ p5: 19-28
+ p6: 19-28
+ t.0: 26-28
+ aux: 28-29
+Allocation:
+ this: t0
+ p1: t1
+ p2: t2
+ p3: t3
+ p4: t4
+ p5: t5
+ p6: t6
+ t.0: t7
+ aux: t7
+
+func MT4.Change
+ in 3, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ p1: 32
+ p2: 32-33
+ p3: 32-34
+ p4: 32-35
+ p5: 32-36
+ p6: 32-37
+Linear Range:
+ p1: 31-32
+ p2: 31-33
+ p3: 31-34
+ p4: 31-35
+ p5: 31-36
+ p6: 31-37
+Allocation:
+ p1: t0
+ p2: t1
+ p3: t2
+ p4: t3
+ p5: t4
+ p6: t5
+
diff --git a/base/MoreThan4.vapor b/base/MoreThan4.vapor
new file mode 100644
index 0000000..6067f8e
--- /dev/null
+++ b/base/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/base/MoreThan4.vaporm b/base/MoreThan4.vaporm
new file mode 100644
index 0000000..bf549b2
--- /dev/null
+++ b/base/MoreThan4.vaporm
@@ -0,0 +1,68 @@
+const vmt_MT4
+ :MT4.Start
+ :MT4.Change
+
+func Main [in 0, out 3, local 0]
+ $t0 = HeapAllocZ(4)
+ [$t0] = :vmt_MT4
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ $a1 = 1
+ $a2 = 2
+ $a3 = 3
+ out[0] = 4
+ out[1] = 5
+ out[2] = 6
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func MT4.Start [in 3, out 3, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ $t2 = $a2
+ $t3 = $a3
+ $t4 = in[0]
+ $t5 = in[1]
+ $t6 = in[2]
+ PrintIntS($t1)
+ PrintIntS($t2)
+ PrintIntS($t3)
+ PrintIntS($t4)
+ PrintIntS($t5)
+ PrintIntS($t6)
+ $t7 = [$t0]
+ $t7 = [$t7+4]
+ $a0 = $t0
+ $a1 = $t6
+ $a2 = $t5
+ $a3 = $t4
+ out[0] = $t3
+ out[1] = $t2
+ out[2] = $t1
+ call $t7
+ $t7 = $v0
+ $v0 = $t7
+ ret
+
+func MT4.Change [in 3, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = $a3
+ $t3 = in[0]
+ $t4 = in[1]
+ $t5 = in[2]
+ PrintIntS($t0)
+ PrintIntS($t1)
+ PrintIntS($t2)
+ PrintIntS($t3)
+ PrintIntS($t4)
+ PrintIntS($t5)
+ $v0 = 0
+ ret
+
diff --git a/base/NewNone.java b/base/NewNone.java
new file mode 100644
index 0000000..7858853
--- /dev/null
+++ b/base/NewNone.java
@@ -0,0 +1,9 @@
+class NewNone{
+ public static void main(String[] a){
+ A a ;
+ a = new A() ;
+ }
+}
+
+class A {
+}
diff --git a/base/Operator.java b/base/Operator.java
new file mode 100644
index 0000000..732c905
--- /dev/null
+++ b/base/Operator.java
@@ -0,0 +1,15 @@
+class test01{
+ public static void main(String[] a){
+ System.out.println(new Operator().compute());
+ }
+}
+
+class Operator{
+
+ boolean result;
+
+ public int compute(){
+ result = true && false;
+ return 0;
+ }
+}
diff --git a/base/Printer-error.java b/base/Printer-error.java
new file mode 100644
index 0000000..3f6469f
--- /dev/null
+++ b/base/Printer-error.java
@@ -0,0 +1,5 @@
+class Printer{
+ public static void main(String[] a){
+ System.out.println(false);
+ }
+}
diff --git a/base/Printer.java b/base/Printer.java
new file mode 100644
index 0000000..3c4fa2f
--- /dev/null
+++ b/base/Printer.java
@@ -0,0 +1,5 @@
+class Printer{
+ public static void main(String[] a){
+ // System.out.println(0);
+ }
+}
diff --git a/base/QuickSort-error.java b/base/QuickSort-error.java
new file mode 100644
index 0000000..ff4ea2e
--- /dev/null
+++ b/base/QuickSort-error.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 ; //TE
+ 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/base/QuickSort.java b/base/QuickSort.java
new file mode 100644
index 0000000..5893390
--- /dev/null
+++ b/base/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/base/QuickSort.names.vaporm b/base/QuickSort.names.vaporm
new file mode 100644
index 0000000..0029cf0
--- /dev/null
+++ b/base/QuickSort.names.vaporm
@@ -0,0 +1,439 @@
+const vmt_QS
+ :QS.Start
+ :QS.Sort
+ :QS.Print
+ :QS.Init
+
+func Main [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(12)
+ [$t0{t.0}] = :vmt_QS
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ $a1 = 10
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func QS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ $t1{t.0} = [$s0{this}]
+ $t1{t.0} = [$t1{t.0}+12]
+ $a0 = $s0{this}
+ $a1 = $t0{sz}
+ call $t1{t.0}
+ $t1{t.1} = [$s0{this}]
+ $t1{t.1} = [$t1{t.1}+8]
+ $a0 = $s0{this}
+ call $t1{t.1}
+ PrintIntS(9999)
+ $t1{t.2} = [$s0{this}+8]
+ $t1{aux01} = Sub($t1{t.2} 1)
+ $t0{t.3} = [$s0{this}]
+ $t0{t.3} = [$t0{t.3}+4]
+ $a0 = $s0{this}
+ $a1 = 0
+ $a2 = $t1{aux01}
+ call $t0{t.3}
+ $t0{t.4} = [$s0{this}]
+ $t0{t.4} = [$t0{t.4}+8]
+ $a0 = $s0{this}
+ call $t0{t.4}
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func QS.Sort [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $t0{left} = $a1
+ $s1{right} = $a2
+ $t1{t} = 0
+ $t2{t.0} = LtS($t0{left} $s1{right})
+ if0 $t2{t.0} goto :if1_else
+ $t2{t.1} = [$s0{this}+4]
+ if $t2{t.1} goto :null2
+ Error("null pointer")
+null2:
+ $t3{t.2} = [$t2{t.1}]
+ $t3{t.2} = Lt($s1{right} $t3{t.2})
+ if $t3{t.2} goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3{t.2} = MulS($s1{right} 4)
+ $t3{t.2} = Add($t3{t.2} $t2{t.1})
+ $t3{v} = [$t3{t.2}+4]
+ $s2{i} = Sub($t0{left} 1)
+ $t2{j} = $s1{right}
+ $t4{cont01} = 1
+while1_top:
+ if0 $t4{cont01} goto :while1_end
+ $t5{cont02} = 1
+while2_top:
+ if0 $t5{cont02} goto :while2_end
+ $s2{i} = Add($s2{i} 1)
+ $t6{t.3} = [$s0{this}+4]
+ if $t6{t.3} goto :null3
+ Error("null pointer")
+null3:
+ $t7{t.4} = [$t6{t.3}]
+ $t7{t.4} = Lt($s2{i} $t7{t.4})
+ if $t7{t.4} goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t7{t.4} = MulS($s2{i} 4)
+ $t7{t.4} = Add($t7{t.4} $t6{t.3})
+ $t7{aux03} = [$t7{t.4}+4]
+ $t6{t.5} = LtS($t7{aux03} $t3{v})
+ $t6{t.6} = Sub(1 $t6{t.5})
+ if0 $t6{t.6} goto :if2_else
+ $t5{cont02} = 0
+ goto :if2_end
+if2_else:
+ $t5{cont02} = 1
+if2_end:
+ goto :while2_top
+while2_end:
+ $t5{cont02} = 1
+while3_top:
+ if0 $t5{cont02} goto :while3_end
+ $t2{j} = Sub($t2{j} 1)
+ $t6{t.7} = [$s0{this}+4]
+ if $t6{t.7} goto :null4
+ Error("null pointer")
+null4:
+ $t8{t.8} = [$t6{t.7}]
+ $t8{t.8} = Lt($t2{j} $t8{t.8})
+ if $t8{t.8} goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t8{t.8} = MulS($t2{j} 4)
+ $t8{t.8} = Add($t8{t.8} $t6{t.7})
+ $t7{aux03} = [$t8{t.8}+4]
+ $t7{t.9} = LtS($t3{v} $t7{aux03})
+ $t7{t.10} = Sub(1 $t7{t.9})
+ if0 $t7{t.10} goto :if3_else
+ $t5{cont02} = 0
+ goto :if3_end
+if3_else:
+ $t5{cont02} = 1
+if3_end:
+ goto :while3_top
+while3_end:
+ $t5{t.11} = [$s0{this}+4]
+ if $t5{t.11} goto :null5
+ Error("null pointer")
+null5:
+ $t7{t.12} = [$t5{t.11}]
+ $t7{t.12} = Lt($s2{i} $t7{t.12})
+ if $t7{t.12} goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7{t.12} = MulS($s2{i} 4)
+ $t7{t.12} = Add($t7{t.12} $t5{t.11})
+ $t1{t} = [$t7{t.12}+4]
+ $t7{t.13} = [$s0{this}+4]
+ if $t7{t.13} goto :null6
+ Error("null pointer")
+null6:
+ $t5{t.14} = [$t7{t.13}]
+ $t5{t.14} = Lt($s2{i} $t5{t.14})
+ if $t5{t.14} goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t5{t.14} = MulS($s2{i} 4)
+ $t5{t.14} = Add($t5{t.14} $t7{t.13})
+ $t7{t.15} = [$s0{this}+4]
+ if $t7{t.15} goto :null7
+ Error("null pointer")
+null7:
+ $t8{t.16} = [$t7{t.15}]
+ $t8{t.16} = Lt($t2{j} $t8{t.16})
+ if $t8{t.16} goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t8{t.16} = MulS($t2{j} 4)
+ $t8{t.16} = Add($t8{t.16} $t7{t.15})
+ $t8{t.17} = [$t8{t.16}+4]
+ [$t5{t.14}+4] = $t8{t.17}
+ $t8{t.18} = [$s0{this}+4]
+ if $t8{t.18} goto :null8
+ Error("null pointer")
+null8:
+ $t5{t.19} = [$t8{t.18}]
+ $t5{t.19} = Lt($t2{j} $t5{t.19})
+ if $t5{t.19} goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t5{t.19} = MulS($t2{j} 4)
+ $t5{t.19} = Add($t5{t.19} $t8{t.18})
+ [$t5{t.19}+4] = $t1{t}
+ $t5{t.20} = Add($s2{i} 1)
+ $t5{t.21} = LtS($t2{j} $t5{t.20})
+ if0 $t5{t.21} goto :if4_else
+ $t4{cont01} = 0
+ goto :if4_end
+if4_else:
+ $t4{cont01} = 1
+if4_end:
+ goto :while1_top
+while1_end:
+ $t4{t.22} = [$s0{this}+4]
+ if $t4{t.22} goto :null9
+ Error("null pointer")
+null9:
+ $t3{t.23} = [$t4{t.22}]
+ $t3{t.23} = Lt($t2{j} $t3{t.23})
+ if $t3{t.23} goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t3{t.23} = MulS($t2{j} 4)
+ $t3{t.23} = Add($t3{t.23} $t4{t.22})
+ $t4{t.24} = [$s0{this}+4]
+ if $t4{t.24} goto :null10
+ Error("null pointer")
+null10:
+ $t2{t.25} = [$t4{t.24}]
+ $t2{t.25} = Lt($s2{i} $t2{t.25})
+ if $t2{t.25} goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t2{t.25} = MulS($s2{i} 4)
+ $t2{t.25} = Add($t2{t.25} $t4{t.24})
+ $t2{t.26} = [$t2{t.25}+4]
+ [$t3{t.23}+4] = $t2{t.26}
+ $t2{t.27} = [$s0{this}+4]
+ if $t2{t.27} goto :null11
+ Error("null pointer")
+null11:
+ $t3{t.28} = [$t2{t.27}]
+ $t3{t.28} = Lt($s2{i} $t3{t.28})
+ if $t3{t.28} goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t3{t.28} = MulS($s2{i} 4)
+ $t3{t.28} = Add($t3{t.28} $t2{t.27})
+ $t2{t.29} = [$s0{this}+4]
+ if $t2{t.29} goto :null12
+ Error("null pointer")
+null12:
+ $t4{t.30} = [$t2{t.29}]
+ $t4{t.30} = Lt($s1{right} $t4{t.30})
+ if $t4{t.30} goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t4{t.30} = MulS($s1{right} 4)
+ $t4{t.30} = Add($t4{t.30} $t2{t.29})
+ $t4{t.31} = [$t4{t.30}+4]
+ [$t3{t.28}+4] = $t4{t.31}
+ $t4{t.32} = [$s0{this}+4]
+ if $t4{t.32} goto :null13
+ Error("null pointer")
+null13:
+ $t3{t.33} = [$t4{t.32}]
+ $t3{t.33} = Lt($s1{right} $t3{t.33})
+ if $t3{t.33} goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t3{t.33} = MulS($s1{right} 4)
+ $t3{t.33} = Add($t3{t.33} $t4{t.32})
+ [$t3{t.33}+4] = $t1{t}
+ $t3{t.34} = [$s0{this}]
+ $t3{t.34} = [$t3{t.34}+4]
+ $t1{t.35} = Sub($s2{i} 1)
+ $a0 = $s0{this}
+ $a1 = $t0{left}
+ $a2 = $t1{t.35}
+ call $t3{t.34}
+ $t1{t.36} = [$s0{this}]
+ $t1{t.36} = [$t1{t.36}+4]
+ $t3{t.37} = Add($s2{i} 1)
+ $a0 = $s0{this}
+ $a1 = $t3{t.37}
+ $a2 = $s1{right}
+ call $t1{t.36}
+ goto :if1_end
+if1_else:
+if1_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func QS.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{j} = 0
+while4_top:
+ $t2{t.0} = [$t0{this}+8]
+ $t2{t.1} = LtS($t1{j} $t2{t.0})
+ if0 $t2{t.1} goto :while4_end
+ $t2{t.2} = [$t0{this}+4]
+ if $t2{t.2} goto :null14
+ Error("null pointer")
+null14:
+ $t3{t.3} = [$t2{t.2}]
+ $t3{t.3} = Lt($t1{j} $t3{t.3})
+ if $t3{t.3} goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t3{t.3} = MulS($t1{j} 4)
+ $t3{t.3} = Add($t3{t.3} $t2{t.2})
+ $t3{t.4} = [$t3{t.3}+4]
+ PrintIntS($t3{t.4})
+ $t1{j} = Add($t1{j} 1)
+ goto :while4_top
+while4_end:
+ $v0 = 0
+ ret
+
+func QS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ [$s0{this}+8] = $t0{sz}
+ $a0 = $t0{sz}
+ call :AllocArray
+ $t0{t.0} = $v0
+ [$s0{this}+4] = $t0{t.0}
+ $t0{t.1} = [$s0{this}+4]
+ if $t0{t.1} goto :null15
+ Error("null pointer")
+null15:
+ $t1{t.2} = [$t0{t.1}]
+ $t1{t.2} = Lt(0 $t1{t.2})
+ if $t1{t.2} goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1{t.2} = MulS(0 4)
+ $t1{t.2} = Add($t1{t.2} $t0{t.1})
+ [$t1{t.2}+4] = 20
+ $t1{t.3} = [$s0{this}+4]
+ if $t1{t.3} goto :null16
+ Error("null pointer")
+null16:
+ $t0{t.4} = [$t1{t.3}]
+ $t0{t.4} = Lt(1 $t0{t.4})
+ if $t0{t.4} goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0{t.4} = MulS(1 4)
+ $t0{t.4} = Add($t0{t.4} $t1{t.3})
+ [$t0{t.4}+4] = 7
+ $t0{t.5} = [$s0{this}+4]
+ if $t0{t.5} goto :null17
+ Error("null pointer")
+null17:
+ $t1{t.6} = [$t0{t.5}]
+ $t1{t.6} = Lt(2 $t1{t.6})
+ if $t1{t.6} goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1{t.6} = MulS(2 4)
+ $t1{t.6} = Add($t1{t.6} $t0{t.5})
+ [$t1{t.6}+4] = 12
+ $t1{t.7} = [$s0{this}+4]
+ if $t1{t.7} goto :null18
+ Error("null pointer")
+null18:
+ $t0{t.8} = [$t1{t.7}]
+ $t0{t.8} = Lt(3 $t0{t.8})
+ if $t0{t.8} goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0{t.8} = MulS(3 4)
+ $t0{t.8} = Add($t0{t.8} $t1{t.7})
+ [$t0{t.8}+4] = 18
+ $t0{t.9} = [$s0{this}+4]
+ if $t0{t.9} goto :null19
+ Error("null pointer")
+null19:
+ $t1{t.10} = [$t0{t.9}]
+ $t1{t.10} = Lt(4 $t1{t.10})
+ if $t1{t.10} goto :bounds18
+ Error("array index out of bounds")
+bounds18:
+ $t1{t.10} = MulS(4 4)
+ $t1{t.10} = Add($t1{t.10} $t0{t.9})
+ [$t1{t.10}+4] = 2
+ $t1{t.11} = [$s0{this}+4]
+ if $t1{t.11} goto :null20
+ Error("null pointer")
+null20:
+ $t0{t.12} = [$t1{t.11}]
+ $t0{t.12} = Lt(5 $t0{t.12})
+ if $t0{t.12} goto :bounds19
+ Error("array index out of bounds")
+bounds19:
+ $t0{t.12} = MulS(5 4)
+ $t0{t.12} = Add($t0{t.12} $t1{t.11})
+ [$t0{t.12}+4] = 11
+ $t0{t.13} = [$s0{this}+4]
+ if $t0{t.13} goto :null21
+ Error("null pointer")
+null21:
+ $t1{t.14} = [$t0{t.13}]
+ $t1{t.14} = Lt(6 $t1{t.14})
+ if $t1{t.14} goto :bounds20
+ Error("array index out of bounds")
+bounds20:
+ $t1{t.14} = MulS(6 4)
+ $t1{t.14} = Add($t1{t.14} $t0{t.13})
+ [$t1{t.14}+4] = 6
+ $t1{t.15} = [$s0{this}+4]
+ if $t1{t.15} goto :null22
+ Error("null pointer")
+null22:
+ $t0{t.16} = [$t1{t.15}]
+ $t0{t.16} = Lt(7 $t0{t.16})
+ if $t0{t.16} goto :bounds21
+ Error("array index out of bounds")
+bounds21:
+ $t0{t.16} = MulS(7 4)
+ $t0{t.16} = Add($t0{t.16} $t1{t.15})
+ [$t0{t.16}+4] = 9
+ $t0{t.17} = [$s0{this}+4]
+ if $t0{t.17} goto :null23
+ Error("null pointer")
+null23:
+ $t1{t.18} = [$t0{t.17}]
+ $t1{t.18} = Lt(8 $t1{t.18})
+ if $t1{t.18} goto :bounds22
+ Error("array index out of bounds")
+bounds22:
+ $t1{t.18} = MulS(8 4)
+ $t1{t.18} = Add($t1{t.18} $t0{t.17})
+ [$t1{t.18}+4] = 19
+ $t1{t.19} = [$s0{this}+4]
+ if $t1{t.19} goto :null24
+ Error("null pointer")
+null24:
+ $t0{t.20} = [$t1{t.19}]
+ $t0{t.20} = Lt(9 $t0{t.20})
+ if $t0{t.20} goto :bounds23
+ Error("array index out of bounds")
+bounds23:
+ $t0{t.20} = MulS(9 4)
+ $t0{t.20} = Add($t0{t.20} $t1{t.19})
+ [$t0{t.20}+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0{size} = $a0
+ $t1{bytes} = MulS($t0{size} 4)
+ $t1{bytes} = Add($t1{bytes} 4)
+ $t1{v} = HeapAllocZ($t1{bytes})
+ [$t1{v}] = $t0{size}
+ $v0 = $t1{v}
+ ret
+
diff --git a/base/QuickSort.opt.names.vaporm b/base/QuickSort.opt.names.vaporm
new file mode 100644
index 0000000..9946042
--- /dev/null
+++ b/base/QuickSort.opt.names.vaporm
@@ -0,0 +1,418 @@
+const empty_QS
+
+func Main [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(8)
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $t0{t.0}
+ $a1 = 10
+ call :QS.Start
+ $t0{t.1} = $v0
+ PrintIntS($t0{t.1})
+ ret
+
+func QS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ $a0 = $s0{this}
+ $a1 = $t0{sz}
+ call :QS.Init
+ $a0 = $s0{this}
+ call :QS.Print
+ PrintIntS(9999)
+ $t0{t.0} = [$s0{this}+4]
+ $t0{aux01} = Sub($t0{t.0} 1)
+ $a0 = $s0{this}
+ $a1 = 0
+ $a2 = $t0{aux01}
+ call :QS.Sort
+ $a0 = $s0{this}
+ call :QS.Print
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func QS.Sort [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $t0{left} = $a1
+ $s1{right} = $a2
+ $t1{t} = 0
+ $t2{t.0} = LtS($t0{left} $s1{right})
+ if0 $t2{t.0} goto :if1_else
+ $t2{t.1} = [$s0{this}]
+ if $t2{t.1} goto :null2
+ Error("null pointer")
+null2:
+ $t3{t.2} = [$t2{t.1}]
+ $t3{t.2} = Lt($s1{right} $t3{t.2})
+ if $t3{t.2} goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3{t.2} = MulS($s1{right} 4)
+ $t3{t.2} = Add($t3{t.2} $t2{t.1})
+ $t3{v} = [$t3{t.2}+4]
+ $s2{i} = Sub($t0{left} 1)
+ $t2{j} = $s1{right}
+ $t4{cont01} = 1
+while1_top:
+ if0 $t4{cont01} goto :while1_end
+ $t5{cont02} = 1
+while2_top:
+ if0 $t5{cont02} goto :while2_end
+ $s2{i} = Add($s2{i} 1)
+ $t6{t.3} = [$s0{this}]
+ if $t6{t.3} goto :null3
+ Error("null pointer")
+null3:
+ $t7{t.4} = [$t6{t.3}]
+ $t7{t.4} = Lt($s2{i} $t7{t.4})
+ if $t7{t.4} goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t7{t.4} = MulS($s2{i} 4)
+ $t7{t.4} = Add($t7{t.4} $t6{t.3})
+ $t7{aux03} = [$t7{t.4}+4]
+ $t6{t.5} = LtS($t7{aux03} $t3{v})
+ if $t6{t.5} goto :if2_else
+ $t5{cont02} = 0
+ goto :if2_end
+if2_else:
+ $t5{cont02} = 1
+if2_end:
+ goto :while2_top
+while2_end:
+ $t5{cont02} = 1
+while3_top:
+ if0 $t5{cont02} goto :while3_end
+ $t2{j} = Sub($t2{j} 1)
+ $t6{t.6} = [$s0{this}]
+ if $t6{t.6} goto :null4
+ Error("null pointer")
+null4:
+ $t8{t.7} = [$t6{t.6}]
+ $t8{t.7} = Lt($t2{j} $t8{t.7})
+ if $t8{t.7} goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t8{t.7} = MulS($t2{j} 4)
+ $t8{t.7} = Add($t8{t.7} $t6{t.6})
+ $t7{aux03} = [$t8{t.7}+4]
+ $t7{t.8} = LtS($t3{v} $t7{aux03})
+ if $t7{t.8} goto :if3_else
+ $t5{cont02} = 0
+ goto :if3_end
+if3_else:
+ $t5{cont02} = 1
+if3_end:
+ goto :while3_top
+while3_end:
+ $t5{t.9} = [$s0{this}]
+ if $t5{t.9} goto :null5
+ Error("null pointer")
+null5:
+ $t7{t.10} = [$t5{t.9}]
+ $t7{t.10} = Lt($s2{i} $t7{t.10})
+ if $t7{t.10} goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7{t.10} = MulS($s2{i} 4)
+ $t7{t.10} = Add($t7{t.10} $t5{t.9})
+ $t1{t} = [$t7{t.10}+4]
+ $t7{t.11} = [$s0{this}]
+ if $t7{t.11} goto :null6
+ Error("null pointer")
+null6:
+ $t5{t.12} = [$t7{t.11}]
+ $t5{t.12} = Lt($s2{i} $t5{t.12})
+ if $t5{t.12} goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t5{t.12} = MulS($s2{i} 4)
+ $t5{t.12} = Add($t5{t.12} $t7{t.11})
+ $t7{t.13} = [$s0{this}]
+ if $t7{t.13} goto :null7
+ Error("null pointer")
+null7:
+ $t8{t.14} = [$t7{t.13}]
+ $t8{t.14} = Lt($t2{j} $t8{t.14})
+ if $t8{t.14} goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t8{t.14} = MulS($t2{j} 4)
+ $t8{t.14} = Add($t8{t.14} $t7{t.13})
+ $t8{t.15} = [$t8{t.14}+4]
+ [$t5{t.12}+4] = $t8{t.15}
+ $t8{t.16} = [$s0{this}]
+ if $t8{t.16} goto :null8
+ Error("null pointer")
+null8:
+ $t5{t.17} = [$t8{t.16}]
+ $t5{t.17} = Lt($t2{j} $t5{t.17})
+ if $t5{t.17} goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t5{t.17} = MulS($t2{j} 4)
+ $t5{t.17} = Add($t5{t.17} $t8{t.16})
+ [$t5{t.17}+4] = $t1{t}
+ $t5{t.18} = Add($s2{i} 1)
+ $t5{t.19} = LtS($t2{j} $t5{t.18})
+ if0 $t5{t.19} goto :if4_else
+ $t4{cont01} = 0
+ goto :if4_end
+if4_else:
+ $t4{cont01} = 1
+if4_end:
+ goto :while1_top
+while1_end:
+ $t4{t.20} = [$s0{this}]
+ if $t4{t.20} goto :null9
+ Error("null pointer")
+null9:
+ $t3{t.21} = [$t4{t.20}]
+ $t3{t.21} = Lt($t2{j} $t3{t.21})
+ if $t3{t.21} goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t3{t.21} = MulS($t2{j} 4)
+ $t3{t.21} = Add($t3{t.21} $t4{t.20})
+ $t4{t.22} = [$s0{this}]
+ if $t4{t.22} goto :null10
+ Error("null pointer")
+null10:
+ $t2{t.23} = [$t4{t.22}]
+ $t2{t.23} = Lt($s2{i} $t2{t.23})
+ if $t2{t.23} goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t2{t.23} = MulS($s2{i} 4)
+ $t2{t.23} = Add($t2{t.23} $t4{t.22})
+ $t2{t.24} = [$t2{t.23}+4]
+ [$t3{t.21}+4] = $t2{t.24}
+ $t2{t.25} = [$s0{this}]
+ if $t2{t.25} goto :null11
+ Error("null pointer")
+null11:
+ $t3{t.26} = [$t2{t.25}]
+ $t3{t.26} = Lt($s2{i} $t3{t.26})
+ if $t3{t.26} goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t3{t.26} = MulS($s2{i} 4)
+ $t3{t.26} = Add($t3{t.26} $t2{t.25})
+ $t2{t.27} = [$s0{this}]
+ if $t2{t.27} goto :null12
+ Error("null pointer")
+null12:
+ $t4{t.28} = [$t2{t.27}]
+ $t4{t.28} = Lt($s1{right} $t4{t.28})
+ if $t4{t.28} goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t4{t.28} = MulS($s1{right} 4)
+ $t4{t.28} = Add($t4{t.28} $t2{t.27})
+ $t4{t.29} = [$t4{t.28}+4]
+ [$t3{t.26}+4] = $t4{t.29}
+ $t4{t.30} = [$s0{this}]
+ if $t4{t.30} goto :null13
+ Error("null pointer")
+null13:
+ $t3{t.31} = [$t4{t.30}]
+ $t3{t.31} = Lt($s1{right} $t3{t.31})
+ if $t3{t.31} goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t3{t.31} = MulS($s1{right} 4)
+ $t3{t.31} = Add($t3{t.31} $t4{t.30})
+ [$t3{t.31}+4] = $t1{t}
+ $t3{t.32} = Sub($s2{i} 1)
+ $a0 = $s0{this}
+ $a1 = $t0{left}
+ $a2 = $t3{t.32}
+ call :QS.Sort
+ $t3{t.33} = Add($s2{i} 1)
+ $a0 = $s0{this}
+ $a1 = $t3{t.33}
+ $a2 = $s1{right}
+ call :QS.Sort
+ goto :if1_end
+if1_else:
+if1_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func QS.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{j} = 0
+while4_top:
+ $t2{t.0} = [$t0{this}+4]
+ $t2{t.1} = LtS($t1{j} $t2{t.0})
+ if0 $t2{t.1} goto :while4_end
+ $t2{t.2} = [$t0{this}]
+ if $t2{t.2} goto :null14
+ Error("null pointer")
+null14:
+ $t3{t.3} = [$t2{t.2}]
+ $t3{t.3} = Lt($t1{j} $t3{t.3})
+ if $t3{t.3} goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t3{t.3} = MulS($t1{j} 4)
+ $t3{t.3} = Add($t3{t.3} $t2{t.2})
+ $t3{t.4} = [$t3{t.3}+4]
+ PrintIntS($t3{t.4})
+ $t1{j} = Add($t1{j} 1)
+ goto :while4_top
+while4_end:
+ $v0 = 0
+ ret
+
+func QS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{this} = $a0
+ $t0{sz} = $a1
+ [$s0{this}+4] = $t0{sz}
+ $a0 = $t0{sz}
+ call :AllocArray
+ $t0{t.0} = $v0
+ [$s0{this}] = $t0{t.0}
+ $t0{t.1} = [$s0{this}]
+ if $t0{t.1} goto :null15
+ Error("null pointer")
+null15:
+ $t1{t.2} = [$t0{t.1}]
+ $t1{t.2} = Lt(0 $t1{t.2})
+ if $t1{t.2} goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1{t.2} = MulS(0 4)
+ $t1{t.2} = Add($t1{t.2} $t0{t.1})
+ [$t1{t.2}+4] = 20
+ $t1{t.3} = [$s0{this}]
+ if $t1{t.3} goto :null16
+ Error("null pointer")
+null16:
+ $t0{t.4} = [$t1{t.3}]
+ $t0{t.4} = Lt(1 $t0{t.4})
+ if $t0{t.4} goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0{t.4} = MulS(1 4)
+ $t0{t.4} = Add($t0{t.4} $t1{t.3})
+ [$t0{t.4}+4] = 7
+ $t0{t.5} = [$s0{this}]
+ if $t0{t.5} goto :null17
+ Error("null pointer")
+null17:
+ $t1{t.6} = [$t0{t.5}]
+ $t1{t.6} = Lt(2 $t1{t.6})
+ if $t1{t.6} goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1{t.6} = MulS(2 4)
+ $t1{t.6} = Add($t1{t.6} $t0{t.5})
+ [$t1{t.6}+4] = 12
+ $t1{t.7} = [$s0{this}]
+ if $t1{t.7} goto :null18
+ Error("null pointer")
+null18:
+ $t0{t.8} = [$t1{t.7}]
+ $t0{t.8} = Lt(3 $t0{t.8})
+ if $t0{t.8} goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0{t.8} = MulS(3 4)
+ $t0{t.8} = Add($t0{t.8} $t1{t.7})
+ [$t0{t.8}+4] = 18
+ $t0{t.9} = [$s0{this}]
+ if $t0{t.9} goto :null19
+ Error("null pointer")
+null19:
+ $t1{t.10} = [$t0{t.9}]
+ $t1{t.10} = Lt(4 $t1{t.10})
+ if $t1{t.10} goto :bounds18
+ Error("array index out of bounds")
+bounds18:
+ $t1{t.10} = MulS(4 4)
+ $t1{t.10} = Add($t1{t.10} $t0{t.9})
+ [$t1{t.10}+4] = 2
+ $t1{t.11} = [$s0{this}]
+ if $t1{t.11} goto :null20
+ Error("null pointer")
+null20:
+ $t0{t.12} = [$t1{t.11}]
+ $t0{t.12} = Lt(5 $t0{t.12})
+ if $t0{t.12} goto :bounds19
+ Error("array index out of bounds")
+bounds19:
+ $t0{t.12} = MulS(5 4)
+ $t0{t.12} = Add($t0{t.12} $t1{t.11})
+ [$t0{t.12}+4] = 11
+ $t0{t.13} = [$s0{this}]
+ if $t0{t.13} goto :null21
+ Error("null pointer")
+null21:
+ $t1{t.14} = [$t0{t.13}]
+ $t1{t.14} = Lt(6 $t1{t.14})
+ if $t1{t.14} goto :bounds20
+ Error("array index out of bounds")
+bounds20:
+ $t1{t.14} = MulS(6 4)
+ $t1{t.14} = Add($t1{t.14} $t0{t.13})
+ [$t1{t.14}+4] = 6
+ $t1{t.15} = [$s0{this}]
+ if $t1{t.15} goto :null22
+ Error("null pointer")
+null22:
+ $t0{t.16} = [$t1{t.15}]
+ $t0{t.16} = Lt(7 $t0{t.16})
+ if $t0{t.16} goto :bounds21
+ Error("array index out of bounds")
+bounds21:
+ $t0{t.16} = MulS(7 4)
+ $t0{t.16} = Add($t0{t.16} $t1{t.15})
+ [$t0{t.16}+4] = 9
+ $t0{t.17} = [$s0{this}]
+ if $t0{t.17} goto :null23
+ Error("null pointer")
+null23:
+ $t1{t.18} = [$t0{t.17}]
+ $t1{t.18} = Lt(8 $t1{t.18})
+ if $t1{t.18} goto :bounds22
+ Error("array index out of bounds")
+bounds22:
+ $t1{t.18} = MulS(8 4)
+ $t1{t.18} = Add($t1{t.18} $t0{t.17})
+ [$t1{t.18}+4] = 19
+ $t1{t.19} = [$s0{this}]
+ if $t1{t.19} goto :null24
+ Error("null pointer")
+null24:
+ $t0{t.20} = [$t1{t.19}]
+ $t0{t.20} = Lt(9 $t0{t.20})
+ if $t0{t.20} goto :bounds23
+ Error("array index out of bounds")
+bounds23:
+ $t0{t.20} = MulS(9 4)
+ $t0{t.20} = Add($t0{t.20} $t1{t.19})
+ [$t0{t.20}+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0{size} = $a0
+ $t1{bytes} = MulS($t0{size} 4)
+ $t1{bytes} = Add($t1{bytes} 4)
+ $t1{v} = HeapAllocZ($t1{bytes})
+ [$t1{v}] = $t0{size}
+ $v0 = $t1{v}
+ ret
+
diff --git a/base/QuickSort.opt.regalloc b/base/QuickSort.opt.regalloc
new file mode 100644
index 0000000..cb7fb8c
--- /dev/null
+++ b/base/QuickSort.opt.regalloc
@@ -0,0 +1,286 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 7 10
+ t.1: 11
+Linear Range:
+ t.0: 6-10
+ t.1: 10-11
+Allocation:
+ t.0: t0
+ t.1: t0
+
+func QS.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 15-21
+ sz: 15
+ aux01: 20
+ t.0: 19
+Linear Range:
+ this: 14-21 (cross call)
+ sz: 14-15
+ aux01: 19-20
+ t.0: 18-19
+Allocation:
+ this: s0
+ sz: t0
+ aux01: t0
+ t.0: t0
+
+func QS.Sort
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 25-29 32-34 37-50 53-55 58-75 78-80 83-96 99-101 104-108 111-113 116-119 122-124 127-132 135-137 140-154 157-159 162-165 168-170 173-178 181-183 186-189 192-194 197-202 205-207 210-216
+ left: 25-29 32-34 37-50 53-55 58-75 78-80 83-96 99-101 104-108 111-113 116-119 122-124 127-132 135-137 140-154 157-159 162-165 168-170 173-178 181-183 186-189 192-194 197-202 205-207 210-214
+ right: 25-29 32-34 37-50 53-55 58-75 78-80 83-96 99-101 104-108 111-113 116-119 122-124 127-132 135-137 140-154 157-159 162-165 168-170 173-178 181-183 186-189 192-194 197-202 205-207 210-216
+ t: 26-29 32-34 37-44 107-108 111-113 116-119 122-124 127-132 135-137 140-154 157-159 162-165 168-170 173-178 181-183 186-189 192-194 197-202 205-207 210-212
+ t.0: 27
+ t.1: 29 32-34 37-38
+ t.2: 33-34 38-39
+ v: 40-50 53-55 58-75 78-80 83-96 99-101 104-108 111-113 116-119 122-124 127-132 135-137 140-151
+ i: 41-50 53-55 58-75 78-80 83-96 99-101 104-108 111-113 116-119 122-124 127-132 135-137 140-154 157-159 162-165 168-170 173-178 181-183 186-189 192-194 197-202 205-207 210-215
+ j: 42-50 53-55 58-75 78-80 83-96 99-101 104-108 111-113 116-119 122-124 127-132 135-137 140-154 157-159 162
+ cont01: 44 147 151
+ cont02: 47 64 68 72 89 93
+ t.3: 50 53-55 58-59
+ t.4: 54-55 59-60
+ aux03: 61 86
+ t.5: 62
+ t.6: 75 78-80 83-84
+ t.7: 79-80 84-85
+ t.8: 87
+ t.9: 96 99-101 104-105
+ t.10: 100-101 105-106
+ t.11: 108 111-113 116-117
+ t.12: 112-113 117-119 122-124 127-130
+ t.13: 119 122-124 127-128
+ t.14: 123-124 128-129
+ t.15: 130
+ t.16: 132 135-137 140-141
+ t.17: 136-137 141-142
+ t.18: 144
+ t.19: 145
+ t.20: 154 157-159 162-163
+ t.21: 158-159 163-165 168-170 173-176
+ t.22: 165 168-170 173-174
+ t.23: 169-170 174-175
+ t.24: 176
+ t.25: 178 181-183 186-187
+ t.26: 182-183 187-189 192-194 197-200
+ t.27: 189 192-194 197-198
+ t.28: 193-194 198-199
+ t.29: 200
+ t.30: 202 205-207 210-211
+ t.31: 206-207 211-212
+ t.32: 214
+ nt:
+ t.33: 216
+Linear Range:
+ this: 24-216 (cross call)
+ left: 24-214
+ right: 24-216 (cross call)
+ t: 25-212
+ t.0: 26-27
+ t.1: 28-38
+ t.2: 32-39
+ v: 39-151
+ i: 40-215 (cross call)
+ j: 41-162
+ cont01: 42-151
+ cont02: 45-93
+ t.3: 49-59
+ t.4: 53-60
+ aux03: 60-86
+ t.5: 61-62
+ t.6: 74-84
+ t.7: 78-85
+ t.8: 86-87
+ t.9: 95-105
+ t.10: 99-106
+ t.11: 107-117
+ t.12: 111-130
+ t.13: 118-128
+ t.14: 122-129
+ t.15: 129-130
+ t.16: 131-141
+ t.17: 135-142
+ t.18: 143-144
+ t.19: 144-145
+ t.20: 153-163
+ t.21: 157-176
+ t.22: 164-174
+ t.23: 168-175
+ t.24: 175-176
+ t.25: 177-187
+ t.26: 181-200
+ t.27: 188-198
+ t.28: 192-199
+ t.29: 199-200
+ t.30: 201-211
+ t.31: 205-212
+ t.32: 213-214
+ t.33: 215-216
+Allocation:
+ this: s0
+ left: t0
+ right: s1
+ t: t1
+ t.0: t2
+ t.1: t2
+ t.2: t3
+ v: t3
+ i: s2
+ j: t2
+ cont01: t4
+ cont02: t5
+ t.3: t6
+ t.4: t7
+ aux03: t7
+ t.5: t6
+ t.6: t6
+ t.7: t8
+ t.8: t7
+ t.9: t5
+ t.10: t7
+ t.11: t7
+ t.12: t5
+ t.13: t7
+ t.14: t8
+ t.15: t8
+ t.16: t8
+ t.17: t5
+ t.18: t5
+ t.19: t5
+ t.20: t4
+ t.21: t3
+ t.22: t4
+ t.23: t2
+ t.24: t2
+ t.25: t2
+ t.26: t3
+ t.27: t2
+ t.28: t4
+ t.29: t4
+ t.30: t4
+ t.31: t3
+ t.32: t3
+ t.33: t3
+
+func QS.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 224-230 233-235 238-243
+ j: 226-230 233-235 238-243
+ t.0: 227
+ t.1: 228
+ t.2: 230 233-235 238-239
+ t.3: 234-235 239-240
+ t.4: 241
+Linear Range:
+ this: 223-243
+ j: 224-243
+ t.0: 226-227
+ t.1: 227-228
+ t.2: 229-239
+ t.3: 233-240
+ t.4: 240-241
+Allocation:
+ this: t0
+ j: t1
+ t.0: t2
+ t.1: t2
+ t.2: t2
+ t.3: t3
+ t.4: t3
+
+func QS.Init
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 248-252 255-257 260-264 267-269 272-276 279-281 284-288 291-293 296-300 303-305 308-312 315-317 320-324 327-329 332-336 339-341 344-348 351-353 356-359
+ sz: 248-249
+ t.0: 250
+ t.1: 252 255-257 260-261
+ t.2: 256-257 261-262
+ t.3: 264 267-269 272-273
+ t.4: 268-269 273-274
+ t.5: 276 279-281 284-285
+ t.6: 280-281 285-286
+ t.7: 288 291-293 296-297
+ t.8: 292-293 297-298
+ t.9: 300 303-305 308-309
+ t.10: 304-305 309-310
+ t.11: 312 315-317 320-321
+ t.12: 316-317 321-322
+ t.13: 324 327-329 332-333
+ t.14: 328-329 333-334
+ t.15: 336 339-341 344-345
+ t.16: 340-341 345-346
+ t.17: 348 351-353 356-357
+ t.18: 352-353 357-358
+ t.19: 360 363-365 368-369
+ t.20: 364-365 369-370
+Linear Range:
+ this: 247-359 (cross call)
+ sz: 247-249
+ t.0: 249-250
+ t.1: 251-261
+ t.2: 255-262
+ t.3: 263-273
+ t.4: 267-274
+ t.5: 275-285
+ t.6: 279-286
+ t.7: 287-297
+ t.8: 291-298
+ t.9: 299-309
+ t.10: 303-310
+ t.11: 311-321
+ t.12: 315-322
+ t.13: 323-333
+ t.14: 327-334
+ t.15: 335-345
+ t.16: 339-346
+ t.17: 347-357
+ t.18: 351-358
+ t.19: 359-369
+ t.20: 363-370
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t0
+ t.1: t0
+ t.2: t1
+ t.3: t1
+ t.4: t0
+ t.5: t0
+ t.6: t1
+ t.7: t1
+ t.8: t0
+ t.9: t0
+ t.10: t1
+ t.11: t1
+ t.12: t0
+ t.13: t0
+ t.14: t1
+ t.15: t1
+ t.16: t0
+ t.17: t0
+ t.18: t1
+ t.19: t1
+ t.20: t0
+
+func AllocArray
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ size: 374-377
+ bytes: 375-376
+ v: 377-378
+Linear Range:
+ size: 373-377
+ bytes: 374-376
+ v: 376-378
+Allocation:
+ size: t0
+ bytes: t1
+ v: t1
+
diff --git a/base/QuickSort.opt.vapor b/base/QuickSort.opt.vapor
new file mode 100644
index 0000000..6e14e5a
--- /dev/null
+++ b/base/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/base/QuickSort.opt.vaporm b/base/QuickSort.opt.vaporm
new file mode 100644
index 0000000..61f1151
--- /dev/null
+++ b/base/QuickSort.opt.vaporm
@@ -0,0 +1,418 @@
+const empty_QS
+
+func Main [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(8)
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $t0
+ $a1 = 10
+ call :QS.Start
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func QS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ $a0 = $s0
+ $a1 = $t0
+ call :QS.Init
+ $a0 = $s0
+ call :QS.Print
+ PrintIntS(9999)
+ $t0 = [$s0+4]
+ $t0 = Sub($t0 1)
+ $a0 = $s0
+ $a1 = 0
+ $a2 = $t0
+ call :QS.Sort
+ $a0 = $s0
+ call :QS.Print
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func QS.Sort [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $t0 = $a1
+ $s1 = $a2
+ $t1 = 0
+ $t2 = LtS($t0 $s1)
+ if0 $t2 goto :if1_else
+ $t2 = [$s0]
+ if $t2 goto :null2
+ Error("null pointer")
+null2:
+ $t3 = [$t2]
+ $t3 = Lt($s1 $t3)
+ if $t3 goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3 = MulS($s1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ $s2 = Sub($t0 1)
+ $t2 = $s1
+ $t4 = 1
+while1_top:
+ if0 $t4 goto :while1_end
+ $t5 = 1
+while2_top:
+ if0 $t5 goto :while2_end
+ $s2 = Add($s2 1)
+ $t6 = [$s0]
+ if $t6 goto :null3
+ Error("null pointer")
+null3:
+ $t7 = [$t6]
+ $t7 = Lt($s2 $t7)
+ if $t7 goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t7 = MulS($s2 4)
+ $t7 = Add($t7 $t6)
+ $t7 = [$t7+4]
+ $t6 = LtS($t7 $t3)
+ if $t6 goto :if2_else
+ $t5 = 0
+ goto :if2_end
+if2_else:
+ $t5 = 1
+if2_end:
+ goto :while2_top
+while2_end:
+ $t5 = 1
+while3_top:
+ if0 $t5 goto :while3_end
+ $t2 = Sub($t2 1)
+ $t6 = [$s0]
+ if $t6 goto :null4
+ Error("null pointer")
+null4:
+ $t8 = [$t6]
+ $t8 = Lt($t2 $t8)
+ if $t8 goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t8 = MulS($t2 4)
+ $t8 = Add($t8 $t6)
+ $t7 = [$t8+4]
+ $t7 = LtS($t3 $t7)
+ if $t7 goto :if3_else
+ $t5 = 0
+ goto :if3_end
+if3_else:
+ $t5 = 1
+if3_end:
+ goto :while3_top
+while3_end:
+ $t5 = [$s0]
+ if $t5 goto :null5
+ Error("null pointer")
+null5:
+ $t7 = [$t5]
+ $t7 = Lt($s2 $t7)
+ if $t7 goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7 = MulS($s2 4)
+ $t7 = Add($t7 $t5)
+ $t1 = [$t7+4]
+ $t7 = [$s0]
+ if $t7 goto :null6
+ Error("null pointer")
+null6:
+ $t5 = [$t7]
+ $t5 = Lt($s2 $t5)
+ if $t5 goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t5 = MulS($s2 4)
+ $t5 = Add($t5 $t7)
+ $t7 = [$s0]
+ if $t7 goto :null7
+ Error("null pointer")
+null7:
+ $t8 = [$t7]
+ $t8 = Lt($t2 $t8)
+ if $t8 goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t8 = MulS($t2 4)
+ $t8 = Add($t8 $t7)
+ $t8 = [$t8+4]
+ [$t5+4] = $t8
+ $t8 = [$s0]
+ if $t8 goto :null8
+ Error("null pointer")
+null8:
+ $t5 = [$t8]
+ $t5 = Lt($t2 $t5)
+ if $t5 goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t5 = MulS($t2 4)
+ $t5 = Add($t5 $t8)
+ [$t5+4] = $t1
+ $t5 = Add($s2 1)
+ $t5 = LtS($t2 $t5)
+ if0 $t5 goto :if4_else
+ $t4 = 0
+ goto :if4_end
+if4_else:
+ $t4 = 1
+if4_end:
+ goto :while1_top
+while1_end:
+ $t4 = [$s0]
+ if $t4 goto :null9
+ Error("null pointer")
+null9:
+ $t3 = [$t4]
+ $t3 = Lt($t2 $t3)
+ if $t3 goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t3 = MulS($t2 4)
+ $t3 = Add($t3 $t4)
+ $t4 = [$s0]
+ if $t4 goto :null10
+ Error("null pointer")
+null10:
+ $t2 = [$t4]
+ $t2 = Lt($s2 $t2)
+ if $t2 goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t2 = MulS($s2 4)
+ $t2 = Add($t2 $t4)
+ $t2 = [$t2+4]
+ [$t3+4] = $t2
+ $t2 = [$s0]
+ if $t2 goto :null11
+ Error("null pointer")
+null11:
+ $t3 = [$t2]
+ $t3 = Lt($s2 $t3)
+ if $t3 goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t3 = MulS($s2 4)
+ $t3 = Add($t3 $t2)
+ $t2 = [$s0]
+ if $t2 goto :null12
+ Error("null pointer")
+null12:
+ $t4 = [$t2]
+ $t4 = Lt($s1 $t4)
+ if $t4 goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t4 = MulS($s1 4)
+ $t4 = Add($t4 $t2)
+ $t4 = [$t4+4]
+ [$t3+4] = $t4
+ $t4 = [$s0]
+ if $t4 goto :null13
+ Error("null pointer")
+null13:
+ $t3 = [$t4]
+ $t3 = Lt($s1 $t3)
+ if $t3 goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t3 = MulS($s1 4)
+ $t3 = Add($t3 $t4)
+ [$t3+4] = $t1
+ $t3 = Sub($s2 1)
+ $a0 = $s0
+ $a1 = $t0
+ $a2 = $t3
+ call :QS.Sort
+ $t3 = Add($s2 1)
+ $a0 = $s0
+ $a1 = $t3
+ $a2 = $s1
+ call :QS.Sort
+ goto :if1_end
+if1_else:
+if1_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func QS.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = 0
+while4_top:
+ $t2 = [$t0+4]
+ $t2 = LtS($t1 $t2)
+ if0 $t2 goto :while4_end
+ $t2 = [$t0]
+ if $t2 goto :null14
+ Error("null pointer")
+null14:
+ $t3 = [$t2]
+ $t3 = Lt($t1 $t3)
+ if $t3 goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t3 = MulS($t1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ PrintIntS($t3)
+ $t1 = Add($t1 1)
+ goto :while4_top
+while4_end:
+ $v0 = 0
+ ret
+
+func QS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ [$s0+4] = $t0
+ $a0 = $t0
+ call :AllocArray
+ $t0 = $v0
+ [$s0] = $t0
+ $t0 = [$s0]
+ if $t0 goto :null15
+ Error("null pointer")
+null15:
+ $t1 = [$t0]
+ $t1 = Lt(0 $t1)
+ if $t1 goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1 = MulS(0 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 20
+ $t1 = [$s0]
+ if $t1 goto :null16
+ Error("null pointer")
+null16:
+ $t0 = [$t1]
+ $t0 = Lt(1 $t0)
+ if $t0 goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0 = MulS(1 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 7
+ $t0 = [$s0]
+ if $t0 goto :null17
+ Error("null pointer")
+null17:
+ $t1 = [$t0]
+ $t1 = Lt(2 $t1)
+ if $t1 goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1 = MulS(2 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 12
+ $t1 = [$s0]
+ if $t1 goto :null18
+ Error("null pointer")
+null18:
+ $t0 = [$t1]
+ $t0 = Lt(3 $t0)
+ if $t0 goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0 = MulS(3 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 18
+ $t0 = [$s0]
+ if $t0 goto :null19
+ Error("null pointer")
+null19:
+ $t1 = [$t0]
+ $t1 = Lt(4 $t1)
+ if $t1 goto :bounds18
+ Error("array index out of bounds")
+bounds18:
+ $t1 = MulS(4 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 2
+ $t1 = [$s0]
+ if $t1 goto :null20
+ Error("null pointer")
+null20:
+ $t0 = [$t1]
+ $t0 = Lt(5 $t0)
+ if $t0 goto :bounds19
+ Error("array index out of bounds")
+bounds19:
+ $t0 = MulS(5 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 11
+ $t0 = [$s0]
+ if $t0 goto :null21
+ Error("null pointer")
+null21:
+ $t1 = [$t0]
+ $t1 = Lt(6 $t1)
+ if $t1 goto :bounds20
+ Error("array index out of bounds")
+bounds20:
+ $t1 = MulS(6 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 6
+ $t1 = [$s0]
+ if $t1 goto :null22
+ Error("null pointer")
+null22:
+ $t0 = [$t1]
+ $t0 = Lt(7 $t0)
+ if $t0 goto :bounds21
+ Error("array index out of bounds")
+bounds21:
+ $t0 = MulS(7 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 9
+ $t0 = [$s0]
+ if $t0 goto :null23
+ Error("null pointer")
+null23:
+ $t1 = [$t0]
+ $t1 = Lt(8 $t1)
+ if $t1 goto :bounds22
+ Error("array index out of bounds")
+bounds22:
+ $t1 = MulS(8 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 19
+ $t1 = [$s0]
+ if $t1 goto :null24
+ Error("null pointer")
+null24:
+ $t0 = [$t1]
+ $t0 = Lt(9 $t0)
+ if $t0 goto :bounds23
+ Error("array index out of bounds")
+bounds23:
+ $t0 = MulS(9 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = MulS($t0 4)
+ $t1 = Add($t1 4)
+ $t1 = HeapAllocZ($t1)
+ [$t1] = $t0
+ $v0 = $t1
+ ret
+
diff --git a/base/QuickSort.regalloc b/base/QuickSort.regalloc
new file mode 100644
index 0000000..02b4418
--- /dev/null
+++ b/base/QuickSort.regalloc
@@ -0,0 +1,313 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 11-12 15-17
+ t.1: 16-17
+ t.2: 18
+Linear Range:
+ t.0: 10-17
+ t.1: 15-17
+ t.2: 17-18
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func QS.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 22-36
+ sz: 22-24
+ t.0: 23-24
+ aux01: 31-33
+ t.1: 26-27
+ t.2: 30
+ t.3: 32-33
+ t.4: 35-36
+Linear Range:
+ this: 21-36 (cross call)
+ sz: 21-24
+ t.0: 22-24
+ aux01: 30-33
+ t.1: 25-27
+ t.2: 29-30
+ t.3: 31-33
+ t.4: 34-36
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t1
+ aux01: t1
+ t.1: t1
+ t.2: t1
+ t.3: t0
+ t.4: t0
+
+func QS.Sort
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 40-44 47-49 52-65 68-70 73-91 94-96 99-113 116-118 121-125 128-130 133-136 139-141 144-149 152-154 157-171 174-176 179-182 185-187 190-195 198-200 203-206 209-211 214-219 222-224 227-237
+ left: 40-44 47-49 52-65 68-70 73-91 94-96 99-113 116-118 121-125 128-130 133-136 139-141 144-149 152-154 157-171 174-176 179-182 185-187 190-195 198-200 203-206 209-211 214-219 222-224 227-233
+ right: 40-44 47-49 52-65 68-70 73-91 94-96 99-113 116-118 121-125 128-130 133-136 139-141 144-149 152-154 157-171 174-176 179-182 185-187 190-195 198-200 203-206 209-211 214-219 222-224 227-237
+ t: 41-44 47-49 52-59 124-125 128-130 133-136 139-141 144-149 152-154 157-171 174-176 179-182 185-187 190-195 198-200 203-206 209-211 214-219 222-224 227-229
+ t.0: 42
+ t.1: 44 47-49 52-53
+ t.2: 48-49 53-54
+ v: 55-65 68-70 73-91 94-96 99-113 116-118 121-125 128-130 133-136 139-141 144-149 152-154 157-168
+ i: 56-65 68-70 73-91 94-96 99-113 116-118 121-125 128-130 133-136 139-141 144-149 152-154 157-171 174-176 179-182 185-187 190-195 198-200 203-206 209-211 214-219 222-224 227-236
+ j: 57-65 68-70 73-91 94-96 99-113 116-118 121-125 128-130 133-136 139-141 144-149 152-154 157-171 174-176 179
+ cont01: 59 164 168
+ cont02: 62 80 84 88 106 110
+ t.3: 65 68-70 73-74
+ t.4: 69-70 74-75
+ aux03: 76 102
+ t.5: 77
+ t.6: 78
+ t.7: 91 94-96 99-100
+ t.8: 95-96 100-101
+ t.9: 103
+ t.10: 104
+ t.11: 113 116-118 121-122
+ t.12: 117-118 122-123
+ t.13: 125 128-130 133-134
+ t.14: 129-130 134-136 139-141 144-147
+ t.15: 136 139-141 144-145
+ t.16: 140-141 145-146
+ t.17: 147
+ t.18: 149 152-154 157-158
+ t.19: 153-154 158-159
+ t.20: 161
+ t.21: 162
+ t.22: 171 174-176 179-180
+ t.23: 175-176 180-182 185-187 190-193
+ t.24: 182 185-187 190-191
+ t.25: 186-187 191-192
+ t.26: 193
+ t.27: 195 198-200 203-204
+ t.28: 199-200 204-206 209-211 214-217
+ t.29: 206 209-211 214-215
+ t.30: 210-211 215-216
+ t.31: 217
+ t.32: 219 222-224 227-228
+ t.33: 223-224 228-229
+ t.34: 231-233
+ t.35: 233
+ nt:
+ t.36: 235-237
+ t.37: 237
+Linear Range:
+ this: 39-237 (cross call)
+ left: 39-233
+ right: 39-237 (cross call)
+ t: 40-229
+ t.0: 41-42
+ t.1: 43-53
+ t.2: 47-54
+ v: 54-168
+ i: 55-236 (cross call)
+ j: 56-179
+ cont01: 57-168
+ cont02: 60-110
+ t.3: 64-74
+ t.4: 68-75
+ aux03: 75-102
+ t.5: 76-77
+ t.6: 77-78
+ t.7: 90-100
+ t.8: 94-101
+ t.9: 102-103
+ t.10: 103-104
+ t.11: 112-122
+ t.12: 116-123
+ t.13: 124-134
+ t.14: 128-147
+ t.15: 135-145
+ t.16: 139-146
+ t.17: 146-147
+ t.18: 148-158
+ t.19: 152-159
+ t.20: 160-161
+ t.21: 161-162
+ t.22: 170-180
+ t.23: 174-193
+ t.24: 181-191
+ t.25: 185-192
+ t.26: 192-193
+ t.27: 194-204
+ t.28: 198-217
+ t.29: 205-215
+ t.30: 209-216
+ t.31: 216-217
+ t.32: 218-228
+ t.33: 222-229
+ t.34: 230-233
+ t.35: 232-233
+ t.36: 234-237
+ t.37: 236-237
+Allocation:
+ this: s0
+ left: t0
+ right: s1
+ t: t1
+ t.0: t2
+ t.1: t2
+ t.2: t3
+ v: t3
+ i: s2
+ j: t2
+ cont01: t4
+ cont02: t5
+ t.3: t6
+ t.4: t7
+ aux03: t7
+ t.5: t6
+ t.6: t6
+ t.7: t6
+ t.8: t8
+ t.9: t7
+ t.10: t7
+ t.11: t5
+ t.12: t7
+ t.13: t7
+ t.14: t5
+ t.15: t7
+ t.16: t8
+ t.17: t8
+ t.18: t8
+ t.19: t5
+ t.20: t5
+ t.21: t5
+ t.22: t4
+ t.23: t3
+ t.24: t4
+ t.25: t2
+ t.26: t2
+ t.27: t2
+ t.28: t3
+ t.29: t2
+ t.30: t4
+ t.31: t4
+ t.32: t4
+ t.33: t3
+ t.34: t3
+ t.35: t1
+ t.36: t1
+ t.37: t3
+
+func QS.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 245-251 254-256 259-264
+ j: 247-251 254-256 259-264
+ t.0: 248
+ t.1: 249
+ t.2: 251 254-256 259-260
+ t.3: 255-256 260-261
+ t.4: 262
+Linear Range:
+ this: 244-264
+ j: 245-264
+ t.0: 247-248
+ t.1: 248-249
+ t.2: 250-260
+ t.3: 254-261
+ t.4: 261-262
+Allocation:
+ this: t0
+ j: t1
+ t.0: t2
+ t.1: t2
+ t.2: t2
+ t.3: t3
+ t.4: t3
+
+func QS.Init
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this: 269-273 276-278 281-285 288-290 293-297 300-302 305-309 312-314 317-321 324-326 329-333 336-338 341-345 348-350 353-357 360-362 365-369 372-374 377-380
+ sz: 269-270
+ t.0: 271
+ t.1: 273 276-278 281-282
+ t.2: 277-278 282-283
+ t.3: 285 288-290 293-294
+ t.4: 289-290 294-295
+ t.5: 297 300-302 305-306
+ t.6: 301-302 306-307
+ t.7: 309 312-314 317-318
+ t.8: 313-314 318-319
+ t.9: 321 324-326 329-330
+ t.10: 325-326 330-331
+ t.11: 333 336-338 341-342
+ t.12: 337-338 342-343
+ t.13: 345 348-350 353-354
+ t.14: 349-350 354-355
+ t.15: 357 360-362 365-366
+ t.16: 361-362 366-367
+ t.17: 369 372-374 377-378
+ t.18: 373-374 378-379
+ t.19: 381 384-386 389-390
+ t.20: 385-386 390-391
+Linear Range:
+ this: 268-380 (cross call)
+ sz: 268-270
+ t.0: 270-271
+ t.1: 272-282
+ t.2: 276-283
+ t.3: 284-294
+ t.4: 288-295
+ t.5: 296-306
+ t.6: 300-307
+ t.7: 308-318
+ t.8: 312-319
+ t.9: 320-330
+ t.10: 324-331
+ t.11: 332-342
+ t.12: 336-343
+ t.13: 344-354
+ t.14: 348-355
+ t.15: 356-366
+ t.16: 360-367
+ t.17: 368-378
+ t.18: 372-379
+ t.19: 380-390
+ t.20: 384-391
+Allocation:
+ this: s0
+ sz: t0
+ t.0: t0
+ t.1: t0
+ t.2: t1
+ t.3: t1
+ t.4: t0
+ t.5: t0
+ t.6: t1
+ t.7: t1
+ t.8: t0
+ t.9: t0
+ t.10: t1
+ t.11: t1
+ t.12: t0
+ t.13: t0
+ t.14: t1
+ t.15: t1
+ t.16: t0
+ t.17: t0
+ t.18: t1
+ t.19: t1
+ t.20: t0
+
+func AllocArray
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ size: 395-398
+ bytes: 396-397
+ v: 398-399
+Linear Range:
+ size: 394-398
+ bytes: 395-397
+ v: 397-399
+Allocation:
+ size: t0
+ bytes: t1
+ v: t1
+
diff --git a/base/QuickSort.vapor b/base/QuickSort.vapor
new file mode 100644
index 0000000..3fe3798
--- /dev/null
+++ b/base/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/base/QuickSort.vaporm b/base/QuickSort.vaporm
new file mode 100644
index 0000000..2aaa582
--- /dev/null
+++ b/base/QuickSort.vaporm
@@ -0,0 +1,439 @@
+const vmt_QS
+ :QS.Start
+ :QS.Sort
+ :QS.Print
+ :QS.Init
+
+func Main [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(12)
+ [$t0] = :vmt_QS
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ $a1 = 10
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func QS.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ $t1 = [$s0]
+ $t1 = [$t1+12]
+ $a0 = $s0
+ $a1 = $t0
+ call $t1
+ $t1 = [$s0]
+ $t1 = [$t1+8]
+ $a0 = $s0
+ call $t1
+ PrintIntS(9999)
+ $t1 = [$s0+8]
+ $t1 = Sub($t1 1)
+ $t0 = [$s0]
+ $t0 = [$t0+4]
+ $a0 = $s0
+ $a1 = 0
+ $a2 = $t1
+ call $t0
+ $t0 = [$s0]
+ $t0 = [$t0+8]
+ $a0 = $s0
+ call $t0
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func QS.Sort [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $t0 = $a1
+ $s1 = $a2
+ $t1 = 0
+ $t2 = LtS($t0 $s1)
+ if0 $t2 goto :if1_else
+ $t2 = [$s0+4]
+ if $t2 goto :null2
+ Error("null pointer")
+null2:
+ $t3 = [$t2]
+ $t3 = Lt($s1 $t3)
+ if $t3 goto :bounds1
+ Error("array index out of bounds")
+bounds1:
+ $t3 = MulS($s1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ $s2 = Sub($t0 1)
+ $t2 = $s1
+ $t4 = 1
+while1_top:
+ if0 $t4 goto :while1_end
+ $t5 = 1
+while2_top:
+ if0 $t5 goto :while2_end
+ $s2 = Add($s2 1)
+ $t6 = [$s0+4]
+ if $t6 goto :null3
+ Error("null pointer")
+null3:
+ $t7 = [$t6]
+ $t7 = Lt($s2 $t7)
+ if $t7 goto :bounds2
+ Error("array index out of bounds")
+bounds2:
+ $t7 = MulS($s2 4)
+ $t7 = Add($t7 $t6)
+ $t7 = [$t7+4]
+ $t6 = LtS($t7 $t3)
+ $t6 = Sub(1 $t6)
+ if0 $t6 goto :if2_else
+ $t5 = 0
+ goto :if2_end
+if2_else:
+ $t5 = 1
+if2_end:
+ goto :while2_top
+while2_end:
+ $t5 = 1
+while3_top:
+ if0 $t5 goto :while3_end
+ $t2 = Sub($t2 1)
+ $t6 = [$s0+4]
+ if $t6 goto :null4
+ Error("null pointer")
+null4:
+ $t8 = [$t6]
+ $t8 = Lt($t2 $t8)
+ if $t8 goto :bounds3
+ Error("array index out of bounds")
+bounds3:
+ $t8 = MulS($t2 4)
+ $t8 = Add($t8 $t6)
+ $t7 = [$t8+4]
+ $t7 = LtS($t3 $t7)
+ $t7 = Sub(1 $t7)
+ if0 $t7 goto :if3_else
+ $t5 = 0
+ goto :if3_end
+if3_else:
+ $t5 = 1
+if3_end:
+ goto :while3_top
+while3_end:
+ $t5 = [$s0+4]
+ if $t5 goto :null5
+ Error("null pointer")
+null5:
+ $t7 = [$t5]
+ $t7 = Lt($s2 $t7)
+ if $t7 goto :bounds4
+ Error("array index out of bounds")
+bounds4:
+ $t7 = MulS($s2 4)
+ $t7 = Add($t7 $t5)
+ $t1 = [$t7+4]
+ $t7 = [$s0+4]
+ if $t7 goto :null6
+ Error("null pointer")
+null6:
+ $t5 = [$t7]
+ $t5 = Lt($s2 $t5)
+ if $t5 goto :bounds5
+ Error("array index out of bounds")
+bounds5:
+ $t5 = MulS($s2 4)
+ $t5 = Add($t5 $t7)
+ $t7 = [$s0+4]
+ if $t7 goto :null7
+ Error("null pointer")
+null7:
+ $t8 = [$t7]
+ $t8 = Lt($t2 $t8)
+ if $t8 goto :bounds6
+ Error("array index out of bounds")
+bounds6:
+ $t8 = MulS($t2 4)
+ $t8 = Add($t8 $t7)
+ $t8 = [$t8+4]
+ [$t5+4] = $t8
+ $t8 = [$s0+4]
+ if $t8 goto :null8
+ Error("null pointer")
+null8:
+ $t5 = [$t8]
+ $t5 = Lt($t2 $t5)
+ if $t5 goto :bounds7
+ Error("array index out of bounds")
+bounds7:
+ $t5 = MulS($t2 4)
+ $t5 = Add($t5 $t8)
+ [$t5+4] = $t1
+ $t5 = Add($s2 1)
+ $t5 = LtS($t2 $t5)
+ if0 $t5 goto :if4_else
+ $t4 = 0
+ goto :if4_end
+if4_else:
+ $t4 = 1
+if4_end:
+ goto :while1_top
+while1_end:
+ $t4 = [$s0+4]
+ if $t4 goto :null9
+ Error("null pointer")
+null9:
+ $t3 = [$t4]
+ $t3 = Lt($t2 $t3)
+ if $t3 goto :bounds8
+ Error("array index out of bounds")
+bounds8:
+ $t3 = MulS($t2 4)
+ $t3 = Add($t3 $t4)
+ $t4 = [$s0+4]
+ if $t4 goto :null10
+ Error("null pointer")
+null10:
+ $t2 = [$t4]
+ $t2 = Lt($s2 $t2)
+ if $t2 goto :bounds9
+ Error("array index out of bounds")
+bounds9:
+ $t2 = MulS($s2 4)
+ $t2 = Add($t2 $t4)
+ $t2 = [$t2+4]
+ [$t3+4] = $t2
+ $t2 = [$s0+4]
+ if $t2 goto :null11
+ Error("null pointer")
+null11:
+ $t3 = [$t2]
+ $t3 = Lt($s2 $t3)
+ if $t3 goto :bounds10
+ Error("array index out of bounds")
+bounds10:
+ $t3 = MulS($s2 4)
+ $t3 = Add($t3 $t2)
+ $t2 = [$s0+4]
+ if $t2 goto :null12
+ Error("null pointer")
+null12:
+ $t4 = [$t2]
+ $t4 = Lt($s1 $t4)
+ if $t4 goto :bounds11
+ Error("array index out of bounds")
+bounds11:
+ $t4 = MulS($s1 4)
+ $t4 = Add($t4 $t2)
+ $t4 = [$t4+4]
+ [$t3+4] = $t4
+ $t4 = [$s0+4]
+ if $t4 goto :null13
+ Error("null pointer")
+null13:
+ $t3 = [$t4]
+ $t3 = Lt($s1 $t3)
+ if $t3 goto :bounds12
+ Error("array index out of bounds")
+bounds12:
+ $t3 = MulS($s1 4)
+ $t3 = Add($t3 $t4)
+ [$t3+4] = $t1
+ $t3 = [$s0]
+ $t3 = [$t3+4]
+ $t1 = Sub($s2 1)
+ $a0 = $s0
+ $a1 = $t0
+ $a2 = $t1
+ call $t3
+ $t1 = [$s0]
+ $t1 = [$t1+4]
+ $t3 = Add($s2 1)
+ $a0 = $s0
+ $a1 = $t3
+ $a2 = $s1
+ call $t1
+ goto :if1_end
+if1_else:
+if1_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func QS.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = 0
+while4_top:
+ $t2 = [$t0+8]
+ $t2 = LtS($t1 $t2)
+ if0 $t2 goto :while4_end
+ $t2 = [$t0+4]
+ if $t2 goto :null14
+ Error("null pointer")
+null14:
+ $t3 = [$t2]
+ $t3 = Lt($t1 $t3)
+ if $t3 goto :bounds13
+ Error("array index out of bounds")
+bounds13:
+ $t3 = MulS($t1 4)
+ $t3 = Add($t3 $t2)
+ $t3 = [$t3+4]
+ PrintIntS($t3)
+ $t1 = Add($t1 1)
+ goto :while4_top
+while4_end:
+ $v0 = 0
+ ret
+
+func QS.Init [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = $a0
+ $t0 = $a1
+ [$s0+8] = $t0
+ $a0 = $t0
+ call :AllocArray
+ $t0 = $v0
+ [$s0+4] = $t0
+ $t0 = [$s0+4]
+ if $t0 goto :null15
+ Error("null pointer")
+null15:
+ $t1 = [$t0]
+ $t1 = Lt(0 $t1)
+ if $t1 goto :bounds14
+ Error("array index out of bounds")
+bounds14:
+ $t1 = MulS(0 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 20
+ $t1 = [$s0+4]
+ if $t1 goto :null16
+ Error("null pointer")
+null16:
+ $t0 = [$t1]
+ $t0 = Lt(1 $t0)
+ if $t0 goto :bounds15
+ Error("array index out of bounds")
+bounds15:
+ $t0 = MulS(1 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 7
+ $t0 = [$s0+4]
+ if $t0 goto :null17
+ Error("null pointer")
+null17:
+ $t1 = [$t0]
+ $t1 = Lt(2 $t1)
+ if $t1 goto :bounds16
+ Error("array index out of bounds")
+bounds16:
+ $t1 = MulS(2 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 12
+ $t1 = [$s0+4]
+ if $t1 goto :null18
+ Error("null pointer")
+null18:
+ $t0 = [$t1]
+ $t0 = Lt(3 $t0)
+ if $t0 goto :bounds17
+ Error("array index out of bounds")
+bounds17:
+ $t0 = MulS(3 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 18
+ $t0 = [$s0+4]
+ if $t0 goto :null19
+ Error("null pointer")
+null19:
+ $t1 = [$t0]
+ $t1 = Lt(4 $t1)
+ if $t1 goto :bounds18
+ Error("array index out of bounds")
+bounds18:
+ $t1 = MulS(4 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 2
+ $t1 = [$s0+4]
+ if $t1 goto :null20
+ Error("null pointer")
+null20:
+ $t0 = [$t1]
+ $t0 = Lt(5 $t0)
+ if $t0 goto :bounds19
+ Error("array index out of bounds")
+bounds19:
+ $t0 = MulS(5 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 11
+ $t0 = [$s0+4]
+ if $t0 goto :null21
+ Error("null pointer")
+null21:
+ $t1 = [$t0]
+ $t1 = Lt(6 $t1)
+ if $t1 goto :bounds20
+ Error("array index out of bounds")
+bounds20:
+ $t1 = MulS(6 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 6
+ $t1 = [$s0+4]
+ if $t1 goto :null22
+ Error("null pointer")
+null22:
+ $t0 = [$t1]
+ $t0 = Lt(7 $t0)
+ if $t0 goto :bounds21
+ Error("array index out of bounds")
+bounds21:
+ $t0 = MulS(7 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 9
+ $t0 = [$s0+4]
+ if $t0 goto :null23
+ Error("null pointer")
+null23:
+ $t1 = [$t0]
+ $t1 = Lt(8 $t1)
+ if $t1 goto :bounds22
+ Error("array index out of bounds")
+bounds22:
+ $t1 = MulS(8 4)
+ $t1 = Add($t1 $t0)
+ [$t1+4] = 19
+ $t1 = [$s0+4]
+ if $t1 goto :null24
+ Error("null pointer")
+null24:
+ $t0 = [$t1]
+ $t0 = Lt(9 $t0)
+ if $t0 goto :bounds23
+ Error("array index out of bounds")
+bounds23:
+ $t0 = MulS(9 4)
+ $t0 = Add($t0 $t1)
+ [$t0+4] = 5
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func AllocArray [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = MulS($t0 4)
+ $t1 = Add($t1 4)
+ $t1 = HeapAllocZ($t1)
+ [$t1] = $t0
+ $v0 = $t1
+ ret
+
diff --git a/base/RetrieveInteger.java b/base/RetrieveInteger.java
new file mode 100644
index 0000000..1997e38
--- /dev/null
+++ b/base/RetrieveInteger.java
@@ -0,0 +1,17 @@
+class RetrieveInteger{
+ public static void main(String[] a){
+ GetInteger i ;
+ int j ;
+
+ i = new GetInteger() ;
+ j = i.Get() ;
+
+ System.out.println(j) ;
+ }
+}
+
+class GetInteger {
+ public int Get(){
+ return 4 ;
+ }
+}
diff --git a/base/ShortCircuit.opt.vapor b/base/ShortCircuit.opt.vapor
new file mode 100644
index 0000000..8275acd
--- /dev/null
+++ b/base/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/base/ShortCircuit.vapor b/base/ShortCircuit.vapor
new file mode 100644
index 0000000..31cc088
--- /dev/null
+++ b/base/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/base/SimpleArithmetic.java b/base/SimpleArithmetic.java
new file mode 100644
index 0000000..94c780e
--- /dev/null
+++ b/base/SimpleArithmetic.java
@@ -0,0 +1,6 @@
+class SimpleArithmetic{
+ public static void main(String[] a){
+ int x;
+ x = 1 + 2;
+ }
+}
diff --git a/base/SimpleArray-error.java b/base/SimpleArray-error.java
new file mode 100644
index 0000000..61ff06f
--- /dev/null
+++ b/base/SimpleArray-error.java
@@ -0,0 +1,6 @@
+class SimpleArithmetic{
+ public static void main(String[] a){
+ int x;
+ x[0] = 2;
+ }
+}
diff --git a/base/SimpleArray.java b/base/SimpleArray.java
new file mode 100644
index 0000000..9a98d99
--- /dev/null
+++ b/base/SimpleArray.java
@@ -0,0 +1,6 @@
+class SimpleArithmetic{
+ public static void main(String[] a){
+ int[] x;
+ x[0] = 2;
+ }
+}
diff --git a/base/TreeVisitor-error.java b/base/TreeVisitor-error.java
new file mode 100644
index 0000000..b41f3d1
--- /dev/null
+++ b/base/TreeVisitor-error.java
@@ -0,0 +1,376 @@
+// 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 ; //TE
+
+ 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 {
+
+ Tree r;
+
+ 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/base/TreeVisitor.java b/base/TreeVisitor.java
new file mode 100644
index 0000000..8debfe6
--- /dev/null
+++ b/base/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/base/TreeVisitor.names.vaporm b/base/TreeVisitor.names.vaporm
new file mode 100644
index 0000000..0eefb6e
--- /dev/null
+++ b/base/TreeVisitor.names.vaporm
@@ -0,0 +1,1174 @@
+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 [in 0, out 0, local 0]
+ $t0{t.0} = HeapAllocZ(4)
+ [$t0{t.0}] = :vmt_TV
+ if $t0{t.0} goto :null1
+ Error("null pointer")
+null1:
+ $t1{t.1} = [$t0{t.0}]
+ $t1{t.1} = [$t1{t.1}]
+ $a0 = $t0{t.0}
+ call $t1{t.1}
+ $t1{t.2} = $v0
+ PrintIntS($t1{t.2})
+ ret
+
+func TV.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0{t.0} = HeapAllocZ(28)
+ [$t0{t.0}] = :vmt_Tree
+ $s0{root} = $t0{t.0}
+ if $s0{root} goto :null2
+ Error("null pointer")
+null2:
+ $t0{t.1} = [$s0{root}]
+ $t0{t.1} = [$t0{t.1}]
+ $a0 = $s0{root}
+ $a1 = 16
+ call $t0{t.1}
+ if $s0{root} goto :null3
+ Error("null pointer")
+null3:
+ $t0{t.2} = [$s0{root}]
+ $t0{t.2} = [$t0{t.2}+72]
+ $a0 = $s0{root}
+ call $t0{t.2}
+ PrintIntS(100000000)
+ if $s0{root} goto :null4
+ Error("null pointer")
+null4:
+ $t0{t.3} = [$s0{root}]
+ $t0{t.3} = [$t0{t.3}+48]
+ $a0 = $s0{root}
+ $a1 = 8
+ call $t0{t.3}
+ if $s0{root} goto :null5
+ Error("null pointer")
+null5:
+ $t0{t.4} = [$s0{root}]
+ $t0{t.4} = [$t0{t.4}+48]
+ $a0 = $s0{root}
+ $a1 = 24
+ call $t0{t.4}
+ if $s0{root} goto :null6
+ Error("null pointer")
+null6:
+ $t0{t.5} = [$s0{root}]
+ $t0{t.5} = [$t0{t.5}+48]
+ $a0 = $s0{root}
+ $a1 = 4
+ call $t0{t.5}
+ if $s0{root} goto :null7
+ Error("null pointer")
+null7:
+ $t0{t.6} = [$s0{root}]
+ $t0{t.6} = [$t0{t.6}+48]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t0{t.6}
+ if $s0{root} goto :null8
+ Error("null pointer")
+null8:
+ $t0{t.7} = [$s0{root}]
+ $t0{t.7} = [$t0{t.7}+48]
+ $a0 = $s0{root}
+ $a1 = 20
+ call $t0{t.7}
+ if $s0{root} goto :null9
+ Error("null pointer")
+null9:
+ $t0{t.8} = [$s0{root}]
+ $t0{t.8} = [$t0{t.8}+48]
+ $a0 = $s0{root}
+ $a1 = 28
+ call $t0{t.8}
+ if $s0{root} goto :null10
+ Error("null pointer")
+null10:
+ $t0{t.9} = [$s0{root}]
+ $t0{t.9} = [$t0{t.9}+48]
+ $a0 = $s0{root}
+ $a1 = 14
+ call $t0{t.9}
+ if $s0{root} goto :null11
+ Error("null pointer")
+null11:
+ $t0{t.10} = [$s0{root}]
+ $t0{t.10} = [$t0{t.10}+72]
+ $a0 = $s0{root}
+ call $t0{t.10}
+ PrintIntS(100000000)
+ $t0{t.11} = HeapAllocZ(12)
+ [$t0{t.11}] = :vmt_MyVisitor
+ $t0{v} = $t0{t.11}
+ PrintIntS(50000000)
+ if $s0{root} goto :null12
+ Error("null pointer")
+null12:
+ $t1{t.12} = [$s0{root}]
+ $t1{t.12} = [$t1{t.12}+80]
+ $a0 = $s0{root}
+ $a1 = $t0{v}
+ call $t1{t.12}
+ PrintIntS(100000000)
+ if $s0{root} goto :null13
+ Error("null pointer")
+null13:
+ $t1{t.13} = [$s0{root}]
+ $t1{t.13} = [$t1{t.13}+68]
+ $a0 = $s0{root}
+ $a1 = 24
+ call $t1{t.13}
+ $t1{t.14} = $v0
+ PrintIntS($t1{t.14})
+ if $s0{root} goto :null14
+ Error("null pointer")
+null14:
+ $t1{t.15} = [$s0{root}]
+ $t1{t.15} = [$t1{t.15}+68]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t1{t.15}
+ $t1{t.16} = $v0
+ PrintIntS($t1{t.16})
+ if $s0{root} goto :null15
+ Error("null pointer")
+null15:
+ $t1{t.17} = [$s0{root}]
+ $t1{t.17} = [$t1{t.17}+68]
+ $a0 = $s0{root}
+ $a1 = 16
+ call $t1{t.17}
+ $t1{t.18} = $v0
+ PrintIntS($t1{t.18})
+ if $s0{root} goto :null16
+ Error("null pointer")
+null16:
+ $t1{t.19} = [$s0{root}]
+ $t1{t.19} = [$t1{t.19}+68]
+ $a0 = $s0{root}
+ $a1 = 50
+ call $t1{t.19}
+ $t1{t.20} = $v0
+ PrintIntS($t1{t.20})
+ if $s0{root} goto :null17
+ Error("null pointer")
+null17:
+ $t1{t.21} = [$s0{root}]
+ $t1{t.21} = [$t1{t.21}+68]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t1{t.21}
+ $t1{t.22} = $v0
+ PrintIntS($t1{t.22})
+ if $s0{root} goto :null18
+ Error("null pointer")
+null18:
+ $t1{t.23} = [$s0{root}]
+ $t1{t.23} = [$t1{t.23}+52]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t1{t.23}
+ if $s0{root} goto :null19
+ Error("null pointer")
+null19:
+ $t1{t.24} = [$s0{root}]
+ $t1{t.24} = [$t1{t.24}+72]
+ $a0 = $s0{root}
+ call $t1{t.24}
+ if $s0{root} goto :null20
+ Error("null pointer")
+null20:
+ $t1{t.25} = [$s0{root}]
+ $t1{t.25} = [$t1{t.25}+68]
+ $a0 = $s0{root}
+ $a1 = 12
+ call $t1{t.25}
+ $t1{t.26} = $v0
+ PrintIntS($t1{t.26})
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+12] = $t1{v_key}
+ [$t0{this}+16] = 0
+ [$t0{this}+20] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{rn} = $a1
+ [$t0{this}+8] = $t1{rn}
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{ln} = $a1
+ [$t0{this}+4] = $t1{ln}
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+12]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+12] = $t1{v_key}
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+20]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+16]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+16] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+20] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0{num1} = $a1
+ $t1{num2} = $a2
+ $t2{nti} = Add($t1{num2} 1)
+ $t1{t.0} = LtS($t0{num1} $t1{num2})
+ if0 $t1{t.0} goto :if1_else
+ $t1{ntb} = 0
+ goto :if1_end
+if1_else:
+ $t2{t.1} = LtS($t0{num1} $t2{nti})
+ $t2{t.2} = Sub(1 $t2{t.1})
+ if0 $t2{t.2} goto :if2_else
+ $t1{ntb} = 0
+ goto :if2_end
+if2_else:
+ $t1{ntb} = 1
+if2_end:
+if1_end:
+ $v0 = $t1{ntb}
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $t0{t.0} = HeapAllocZ(28)
+ [$t0{t.0}] = :vmt_Tree
+ $s2{new_node} = $t0{t.0}
+ if $s2{new_node} goto :null21
+ Error("null pointer")
+null21:
+ $t0{t.1} = [$s2{new_node}]
+ $t0{t.1} = [$t0{t.1}]
+ $a0 = $s2{new_node}
+ $a1 = $s1{v_key}
+ call $t0{t.1}
+ $s0{current_node} = $s0{this}
+ $s3{cont} = 1
+while1_top:
+ if0 $s3{cont} goto :while1_end
+ if $s0{current_node} goto :null22
+ Error("null pointer")
+null22:
+ $t0{t.2} = [$s0{current_node}]
+ $t0{t.2} = [$t0{t.2}+20]
+ $a0 = $s0{current_node}
+ call $t0{t.2}
+ $t0{key_aux} = $v0
+ $t0{t.3} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t0{t.3} goto :if3_else
+ if $s0{current_node} goto :null23
+ Error("null pointer")
+null23:
+ $t0{t.4} = [$s0{current_node}]
+ $t0{t.4} = [$t0{t.4}+32]
+ $a0 = $s0{current_node}
+ call $t0{t.4}
+ $t0{t.5} = $v0
+ if0 $t0{t.5} goto :if4_else
+ if $s0{current_node} goto :null24
+ Error("null pointer")
+null24:
+ $t0{t.6} = [$s0{current_node}]
+ $t0{t.6} = [$t0{t.6}+16]
+ $a0 = $s0{current_node}
+ call $t0{t.6}
+ $s0{current_node} = $v0
+ goto :if4_end
+if4_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null25
+ Error("null pointer")
+null25:
+ $t0{t.7} = [$s0{current_node}]
+ $t0{t.7} = [$t0{t.7}+36]
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call $t0{t.7}
+ if $s0{current_node} goto :null26
+ Error("null pointer")
+null26:
+ $t0{t.8} = [$s0{current_node}]
+ $t0{t.8} = [$t0{t.8}+8]
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call $t0{t.8}
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0{current_node} goto :null27
+ Error("null pointer")
+null27:
+ $t0{t.9} = [$s0{current_node}]
+ $t0{t.9} = [$t0{t.9}+28]
+ $a0 = $s0{current_node}
+ call $t0{t.9}
+ $t0{t.10} = $v0
+ if0 $t0{t.10} goto :if5_else
+ if $s0{current_node} goto :null28
+ Error("null pointer")
+null28:
+ $t0{t.11} = [$s0{current_node}]
+ $t0{t.11} = [$t0{t.11}+12]
+ $a0 = $s0{current_node}
+ call $t0{t.11}
+ $s0{current_node} = $v0
+ goto :if5_end
+if5_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null29
+ Error("null pointer")
+null29:
+ $t0{t.12} = [$s0{current_node}]
+ $t0{t.12} = [$t0{t.12}+40]
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call $t0{t.12}
+ if $s0{current_node} goto :null30
+ Error("null pointer")
+null30:
+ $t0{t.13} = [$s0{current_node}]
+ $t0{t.13} = [$t0{t.13}+4]
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call $t0{t.13}
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $s2{current_node} = $s0{this}
+ $s3{parent_node} = $s0{this}
+ $s4{cont} = 1
+ $s5{found} = 0
+ $s6{is_root} = 1
+while2_top:
+ if0 $s4{cont} goto :while2_end
+ if $s2{current_node} goto :null31
+ Error("null pointer")
+null31:
+ $t0{t.0} = [$s2{current_node}]
+ $t0{t.0} = [$t0{t.0}+20]
+ $a0 = $s2{current_node}
+ call $t0{t.0}
+ $t0{key_aux} = $v0
+ $t1{t.1} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t1{t.1} goto :if6_else
+ if $s2{current_node} goto :null32
+ Error("null pointer")
+null32:
+ $t1{t.2} = [$s2{current_node}]
+ $t1{t.2} = [$t1{t.2}+32]
+ $a0 = $s2{current_node}
+ call $t1{t.2}
+ $t1{t.3} = $v0
+ if0 $t1{t.3} goto :if7_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null33
+ Error("null pointer")
+null33:
+ $t1{t.4} = [$s2{current_node}]
+ $t1{t.4} = [$t1{t.4}+16]
+ $a0 = $s2{current_node}
+ call $t1{t.4}
+ $s2{current_node} = $v0
+ goto :if7_end
+if7_else:
+ $s4{cont} = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0{t.5} = LtS($t0{key_aux} $s1{v_key})
+ if0 $t0{t.5} goto :if8_else
+ if $s2{current_node} goto :null34
+ Error("null pointer")
+null34:
+ $t0{t.6} = [$s2{current_node}]
+ $t0{t.6} = [$t0{t.6}+28]
+ $a0 = $s2{current_node}
+ call $t0{t.6}
+ $t0{t.7} = $v0
+ if0 $t0{t.7} goto :if9_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null35
+ Error("null pointer")
+null35:
+ $t0{t.8} = [$s2{current_node}]
+ $t0{t.8} = [$t0{t.8}+12]
+ $a0 = $s2{current_node}
+ call $t0{t.8}
+ $s2{current_node} = $v0
+ goto :if9_end
+if9_else:
+ $s4{cont} = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6{is_root} goto :if10_else
+ if $s2{current_node} goto :null36
+ Error("null pointer")
+null36:
+ $t0{t.10} = [$s2{current_node}]
+ $t0{t.10} = [$t0{t.10}+28]
+ $a0 = $s2{current_node}
+ call $t0{t.10}
+ $t0{t.11} = $v0
+ $t0{t.12} = Sub(1 $t0{t.11})
+ if0 $t0{t.12} goto :ss1_else
+ if $s2{current_node} goto :null37
+ Error("null pointer")
+null37:
+ $t0{t.13} = [$s2{current_node}]
+ $t0{t.13} = [$t0{t.13}+32]
+ $a0 = $s2{current_node}
+ call $t0{t.13}
+ $t0{t.14} = $v0
+ $t0{t.9} = Sub(1 $t0{t.14})
+ goto :ss1_end
+ss1_else:
+ $t0{t.9} = 0
+ss1_end:
+ if0 $t0{t.9} goto :if11_else
+ goto :if11_end
+if11_else:
+ $t0{t.15} = [$s0{this}]
+ $t0{t.15} = [$t0{t.15}+56]
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call $t0{t.15}
+if11_end:
+ goto :if10_end
+if10_else:
+ $t0{t.16} = [$s0{this}]
+ $t0{t.16} = [$t0{t.16}+56]
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call $t0{t.16}
+if10_end:
+ $s5{found} = 1
+ $s4{cont} = 0
+if8_end:
+if6_end:
+ $s6{is_root} = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5{found}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+ if $s2{c_node} goto :null38
+ Error("null pointer")
+null38:
+ $t0{t.0} = [$s2{c_node}]
+ $t0{t.0} = [$t0{t.0}+32]
+ $a0 = $s2{c_node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if12_else
+ $t0{t.2} = [$s0{this}]
+ $t0{t.2} = [$t0{t.2}+64]
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call $t0{t.2}
+ goto :if12_end
+if12_else:
+ if $s2{c_node} goto :null39
+ Error("null pointer")
+null39:
+ $t0{t.3} = [$s2{c_node}]
+ $t0{t.3} = [$t0{t.3}+28]
+ $a0 = $s2{c_node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ if0 $t0{t.4} goto :if13_else
+ $t0{t.5} = [$s0{this}]
+ $t0{t.5} = [$t0{t.5}+60]
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call $t0{t.5}
+ goto :if13_end
+if13_else:
+ if $s2{c_node} goto :null40
+ Error("null pointer")
+null40:
+ $t0{t.6} = [$s2{c_node}]
+ $t0{t.6} = [$t0{t.6}+20]
+ $a0 = $s2{c_node}
+ call $t0{t.6}
+ $s2{auxkey1} = $v0
+ if $s1{p_node} goto :null41
+ Error("null pointer")
+null41:
+ $t0{t.7} = [$s1{p_node}]
+ $t0{t.7} = [$t0{t.7}+16]
+ $a0 = $s1{p_node}
+ call $t0{t.7}
+ $t0{t.8} = $v0
+ if $t0{t.8} goto :null42
+ Error("null pointer")
+null42:
+ $t1{t.9} = [$t0{t.8}]
+ $t1{t.9} = [$t1{t.9}+20]
+ $a0 = $t0{t.8}
+ call $t1{t.9}
+ $t1{auxkey2} = $v0
+ $t0{t.10} = [$s0{this}]
+ $t0{t.10} = [$t0{t.10}+44]
+ $a0 = $s0{this}
+ $a1 = $s2{auxkey1}
+ $a2 = $t1{auxkey2}
+ call $t0{t.10}
+ $t0{t.11} = $v0
+ if0 $t0{t.11} goto :if14_else
+ if $s1{p_node} goto :null43
+ Error("null pointer")
+null43:
+ $t0{t.12} = [$s1{p_node}]
+ $t0{t.12} = [$t0{t.12}+8]
+ $t1{t.13} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t1{t.13}
+ call $t0{t.12}
+ if $s1{p_node} goto :null44
+ Error("null pointer")
+null44:
+ $t1{t.14} = [$s1{p_node}]
+ $t1{t.14} = [$t1{t.14}+36]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t1{t.14}
+ goto :if14_end
+if14_else:
+ if $s1{p_node} goto :null45
+ Error("null pointer")
+null45:
+ $t1{t.15} = [$s1{p_node}]
+ $t1{t.15} = [$t1{t.15}+4]
+ $t0{t.16} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.16}
+ call $t1{t.15}
+ if $s1{p_node} goto :null46
+ Error("null pointer")
+null46:
+ $t0{t.17} = [$s1{p_node}]
+ $t0{t.17} = [$t0{t.17}+40]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t0{t.17}
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while3_top:
+ if $s2{c_node} goto :null47
+ Error("null pointer")
+null47:
+ $t0{t.0} = [$s2{c_node}]
+ $t0{t.0} = [$t0{t.0}+28]
+ $a0 = $s2{c_node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :while3_end
+ if $s2{c_node} goto :null48
+ Error("null pointer")
+null48:
+ $s3{t.2} = [$s2{c_node}]
+ $s3{t.2} = [$s3{t.2}+24]
+ if $s2{c_node} goto :null49
+ Error("null pointer")
+null49:
+ $t0{t.3} = [$s2{c_node}]
+ $t0{t.3} = [$t0{t.3}+12]
+ $a0 = $s2{c_node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ if $t0{t.4} goto :null50
+ Error("null pointer")
+null50:
+ $t1{t.5} = [$t0{t.4}]
+ $t1{t.5} = [$t1{t.5}+20]
+ $a0 = $t0{t.4}
+ call $t1{t.5}
+ $t1{t.6} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t1{t.6}
+ call $s3{t.2}
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null51
+ Error("null pointer")
+null51:
+ $t1{t.7} = [$s2{c_node}]
+ $t1{t.7} = [$t1{t.7}+12]
+ $a0 = $s2{c_node}
+ call $t1{t.7}
+ $s2{c_node} = $v0
+ goto :while3_top
+while3_end:
+ if $s1{p_node} goto :null52
+ Error("null pointer")
+null52:
+ $t1{t.8} = [$s1{p_node}]
+ $t1{t.8} = [$t1{t.8}+4]
+ $t0{t.9} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.9}
+ call $t1{t.8}
+ if $s1{p_node} goto :null53
+ Error("null pointer")
+null53:
+ $t0{t.10} = [$s1{p_node}]
+ $t0{t.10} = [$t0{t.10}+40]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t0{t.10}
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while4_top:
+ if $s2{c_node} goto :null54
+ Error("null pointer")
+null54:
+ $t0{t.0} = [$s2{c_node}]
+ $t0{t.0} = [$t0{t.0}+32]
+ $a0 = $s2{c_node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :while4_end
+ if $s2{c_node} goto :null55
+ Error("null pointer")
+null55:
+ $s3{t.2} = [$s2{c_node}]
+ $s3{t.2} = [$s3{t.2}+24]
+ if $s2{c_node} goto :null56
+ Error("null pointer")
+null56:
+ $t0{t.3} = [$s2{c_node}]
+ $t0{t.3} = [$t0{t.3}+16]
+ $a0 = $s2{c_node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ if $t0{t.4} goto :null57
+ Error("null pointer")
+null57:
+ $t1{t.5} = [$t0{t.4}]
+ $t1{t.5} = [$t1{t.5}+20]
+ $a0 = $t0{t.4}
+ call $t1{t.5}
+ $t1{t.6} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t1{t.6}
+ call $s3{t.2}
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null58
+ Error("null pointer")
+null58:
+ $t1{t.7} = [$s2{c_node}]
+ $t1{t.7} = [$t1{t.7}+16]
+ $a0 = $s2{c_node}
+ call $t1{t.7}
+ $s2{c_node} = $v0
+ goto :while4_top
+while4_end:
+ if $s1{p_node} goto :null59
+ Error("null pointer")
+null59:
+ $t1{t.8} = [$s1{p_node}]
+ $t1{t.8} = [$t1{t.8}+8]
+ $t0{t.9} = [$s0{this}+24]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.9}
+ call $t1{t.8}
+ if $s1{p_node} goto :null60
+ Error("null pointer")
+null60:
+ $t0{t.10} = [$s1{p_node}]
+ $t0{t.10} = [$t0{t.10}+36]
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call $t0{t.10}
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0{this} = $a0
+ $s0{v_key} = $a1
+ $s1{current_node} = $t0{this}
+ $s2{cont} = 1
+ $s3{ifound} = 0
+while5_top:
+ if0 $s2{cont} goto :while5_end
+ if $s1{current_node} goto :null61
+ Error("null pointer")
+null61:
+ $t0{t.0} = [$s1{current_node}]
+ $t0{t.0} = [$t0{t.0}+20]
+ $a0 = $s1{current_node}
+ call $t0{t.0}
+ $t0{key_aux} = $v0
+ $t1{t.1} = LtS($s0{v_key} $t0{key_aux})
+ if0 $t1{t.1} goto :if15_else
+ if $s1{current_node} goto :null62
+ Error("null pointer")
+null62:
+ $t1{t.2} = [$s1{current_node}]
+ $t1{t.2} = [$t1{t.2}+32]
+ $a0 = $s1{current_node}
+ call $t1{t.2}
+ $t1{t.3} = $v0
+ if0 $t1{t.3} goto :if16_else
+ if $s1{current_node} goto :null63
+ Error("null pointer")
+null63:
+ $t1{t.4} = [$s1{current_node}]
+ $t1{t.4} = [$t1{t.4}+16]
+ $a0 = $s1{current_node}
+ call $t1{t.4}
+ $s1{current_node} = $v0
+ goto :if16_end
+if16_else:
+ $s2{cont} = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0{t.5} = LtS($t0{key_aux} $s0{v_key})
+ if0 $t0{t.5} goto :if17_else
+ if $s1{current_node} goto :null64
+ Error("null pointer")
+null64:
+ $t0{t.6} = [$s1{current_node}]
+ $t0{t.6} = [$t0{t.6}+28]
+ $a0 = $s1{current_node}
+ call $t0{t.6}
+ $t0{t.7} = $v0
+ if0 $t0{t.7} goto :if18_else
+ if $s1{current_node} goto :null65
+ Error("null pointer")
+null65:
+ $t0{t.8} = [$s1{current_node}]
+ $t0{t.8} = [$t0{t.8}+12]
+ $a0 = $s1{current_node}
+ call $t0{t.8}
+ $s1{current_node} = $v0
+ goto :if18_end
+if18_else:
+ $s2{cont} = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3{ifound} = 1
+ $s2{cont} = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3{ifound}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{current_node} = $t0{this}
+ $t2{t.0} = [$t0{this}]
+ $t2{t.0} = [$t2{t.0}+76]
+ $a0 = $t0{this}
+ $a1 = $t1{current_node}
+ call $t2{t.0}
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{node} = $a1
+ if $s1{node} goto :null66
+ Error("null pointer")
+null66:
+ $t0{t.0} = [$s1{node}]
+ $t0{t.0} = [$t0{t.0}+32]
+ $a0 = $s1{node}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if19_else
+ $s2{t.2} = [$s0{this}]
+ $s2{t.2} = [$s2{t.2}+76]
+ if $s1{node} goto :null67
+ Error("null pointer")
+null67:
+ $t0{t.3} = [$s1{node}]
+ $t0{t.3} = [$t0{t.3}+16]
+ $a0 = $s1{node}
+ call $t0{t.3}
+ $t0{t.4} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.4}
+ call $s2{t.2}
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1{node} goto :null68
+ Error("null pointer")
+null68:
+ $t0{t.5} = [$s1{node}]
+ $t0{t.5} = [$t0{t.5}+20]
+ $a0 = $s1{node}
+ call $t0{t.5}
+ $t0{t.6} = $v0
+ PrintIntS($t0{t.6})
+ if $s1{node} goto :null69
+ Error("null pointer")
+null69:
+ $t0{t.7} = [$s1{node}]
+ $t0{t.7} = [$t0{t.7}+28]
+ $a0 = $s1{node}
+ call $t0{t.7}
+ $t0{t.8} = $v0
+ if0 $t0{t.8} goto :if20_else
+ $s2{t.9} = [$s0{this}]
+ $s2{t.9} = [$s2{t.9}+76]
+ if $s1{node} goto :null70
+ Error("null pointer")
+null70:
+ $t0{t.10} = [$s1{node}]
+ $t0{t.10} = [$t0{t.10}+12]
+ $a0 = $s1{node}
+ call $t0{t.10}
+ $t0{t.11} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.11}
+ call $s2{t.9}
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.accept [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v} = $a1
+ PrintIntS(333)
+ if $t1{v} goto :null71
+ Error("null pointer")
+null71:
+ $t2{t.0} = [$t1{v}]
+ $t2{t.0} = [$t2{t.0}]
+ $a0 = $t1{v}
+ $a1 = $t0{this}
+ call $t2{t.0}
+ $v0 = 0
+ ret
+
+func Visitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0{this} = $a0
+ $s1{n} = $a1
+ if $s1{n} goto :null72
+ Error("null pointer")
+null72:
+ $t0{t.0} = [$s1{n}]
+ $t0{t.0} = [$t0{t.0}+28]
+ $a0 = $s1{n}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if21_else
+ if $s1{n} goto :null73
+ Error("null pointer")
+null73:
+ $t0{t.2} = [$s1{n}]
+ $t0{t.2} = [$t0{t.2}+12]
+ $a0 = $s1{n}
+ call $t0{t.2}
+ $t0{t.3} = $v0
+ [$s0{this}+8] = $t0{t.3}
+ $t0{t.4} = [$s0{this}+8]
+ if $t0{t.4} goto :null74
+ Error("null pointer")
+null74:
+ $t1{t.5} = [$t0{t.4}]
+ $t1{t.5} = [$t1{t.5}+80]
+ $a0 = $t0{t.4}
+ $a1 = $s0{this}
+ call $t1{t.5}
+ goto :if21_end
+if21_else:
+if21_end:
+ if $s1{n} goto :null75
+ Error("null pointer")
+null75:
+ $t1{t.6} = [$s1{n}]
+ $t1{t.6} = [$t1{t.6}+32]
+ $a0 = $s1{n}
+ call $t1{t.6}
+ $t1{t.7} = $v0
+ if0 $t1{t.7} goto :if22_else
+ if $s1{n} goto :null76
+ Error("null pointer")
+null76:
+ $t1{t.8} = [$s1{n}]
+ $t1{t.8} = [$t1{t.8}+16]
+ $a0 = $s1{n}
+ call $t1{t.8}
+ $t1{t.9} = $v0
+ [$s0{this}+4] = $t1{t.9}
+ $t1{t.10} = [$s0{this}+4]
+ if $t1{t.10} goto :null77
+ Error("null pointer")
+null77:
+ $t0{t.11} = [$t1{t.10}]
+ $t0{t.11} = [$t0{t.11}+80]
+ $a0 = $t1{t.10}
+ $a1 = $s0{this}
+ call $t0{t.11}
+ goto :if22_end
+if22_else:
+if22_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func MyVisitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0{this} = $a0
+ $s1{n} = $a1
+ if $s1{n} goto :null78
+ Error("null pointer")
+null78:
+ $t0{t.0} = [$s1{n}]
+ $t0{t.0} = [$t0{t.0}+28]
+ $a0 = $s1{n}
+ call $t0{t.0}
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if23_else
+ if $s1{n} goto :null79
+ Error("null pointer")
+null79:
+ $t0{t.2} = [$s1{n}]
+ $t0{t.2} = [$t0{t.2}+12]
+ $a0 = $s1{n}
+ call $t0{t.2}
+ $t0{t.3} = $v0
+ [$s0{this}+8] = $t0{t.3}
+ $t0{t.4} = [$s0{this}+8]
+ if $t0{t.4} goto :null80
+ Error("null pointer")
+null80:
+ $t1{t.5} = [$t0{t.4}]
+ $t1{t.5} = [$t1{t.5}+80]
+ $a0 = $t0{t.4}
+ $a1 = $s0{this}
+ call $t1{t.5}
+ goto :if23_end
+if23_else:
+if23_end:
+ if $s1{n} goto :null81
+ Error("null pointer")
+null81:
+ $t1{t.6} = [$s1{n}]
+ $t1{t.6} = [$t1{t.6}+20]
+ $a0 = $s1{n}
+ call $t1{t.6}
+ $t1{t.7} = $v0
+ PrintIntS($t1{t.7})
+ if $s1{n} goto :null82
+ Error("null pointer")
+null82:
+ $t1{t.8} = [$s1{n}]
+ $t1{t.8} = [$t1{t.8}+32]
+ $a0 = $s1{n}
+ call $t1{t.8}
+ $t1{t.9} = $v0
+ if0 $t1{t.9} goto :if24_else
+ if $s1{n} goto :null83
+ Error("null pointer")
+null83:
+ $t1{t.10} = [$s1{n}]
+ $t1{t.10} = [$t1{t.10}+16]
+ $a0 = $s1{n}
+ call $t1{t.10}
+ $t1{t.11} = $v0
+ [$s0{this}+4] = $t1{t.11}
+ $t1{t.12} = [$s0{this}+4]
+ if $t1{t.12} goto :null84
+ Error("null pointer")
+null84:
+ $t0{t.13} = [$t1{t.12}]
+ $t0{t.13} = [$t0{t.13}+80]
+ $a0 = $t1{t.12}
+ $a1 = $s0{this}
+ call $t0{t.13}
+ goto :if24_end
+if24_else:
+if24_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
diff --git a/base/TreeVisitor.opt.names.vaporm b/base/TreeVisitor.opt.names.vaporm
new file mode 100644
index 0000000..69a62c4
--- /dev/null
+++ b/base/TreeVisitor.opt.names.vaporm
@@ -0,0 +1,948 @@
+const empty_TV
+
+const empty_Tree
+
+const vmt_Visitor
+ :Visitor.visit
+
+const vmt_MyVisitor
+ :MyVisitor.visit
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_TV
+ call :TV.Start
+ $t0{t.0} = $v0
+ PrintIntS($t0{t.0})
+ ret
+
+func TV.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0{root} = HeapAllocZ(24)
+ if $s0{root} goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $s0{root}
+ $a1 = 16
+ call :Tree.Init
+ if $s0{root} goto :null2
+ Error("null pointer")
+null2:
+ $a0 = $s0{root}
+ call :Tree.Print
+ PrintIntS(100000000)
+ if $s0{root} goto :null3
+ Error("null pointer")
+null3:
+ $a0 = $s0{root}
+ $a1 = 8
+ call :Tree.Insert
+ if $s0{root} goto :null4
+ Error("null pointer")
+null4:
+ $a0 = $s0{root}
+ $a1 = 24
+ call :Tree.Insert
+ if $s0{root} goto :null5
+ Error("null pointer")
+null5:
+ $a0 = $s0{root}
+ $a1 = 4
+ call :Tree.Insert
+ if $s0{root} goto :null6
+ Error("null pointer")
+null6:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Insert
+ if $s0{root} goto :null7
+ Error("null pointer")
+null7:
+ $a0 = $s0{root}
+ $a1 = 20
+ call :Tree.Insert
+ if $s0{root} goto :null8
+ Error("null pointer")
+null8:
+ $a0 = $s0{root}
+ $a1 = 28
+ call :Tree.Insert
+ if $s0{root} goto :null9
+ Error("null pointer")
+null9:
+ $a0 = $s0{root}
+ $a1 = 14
+ call :Tree.Insert
+ if $s0{root} goto :null10
+ Error("null pointer")
+null10:
+ $a0 = $s0{root}
+ call :Tree.Print
+ PrintIntS(100000000)
+ $t0{t.0} = HeapAllocZ(12)
+ [$t0{t.0}] = :vmt_MyVisitor
+ $t0{v} = $t0{t.0}
+ PrintIntS(50000000)
+ if $s0{root} goto :null11
+ Error("null pointer")
+null11:
+ $a0 = $s0{root}
+ $a1 = $t0{v}
+ call :Tree.accept
+ PrintIntS(100000000)
+ if $s0{root} goto :null12
+ Error("null pointer")
+null12:
+ $a0 = $s0{root}
+ $a1 = 24
+ call :Tree.Search
+ $t0{t.1} = $v0
+ PrintIntS($t0{t.1})
+ if $s0{root} goto :null13
+ Error("null pointer")
+null13:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Search
+ $t0{t.2} = $v0
+ PrintIntS($t0{t.2})
+ if $s0{root} goto :null14
+ Error("null pointer")
+null14:
+ $a0 = $s0{root}
+ $a1 = 16
+ call :Tree.Search
+ $t0{t.3} = $v0
+ PrintIntS($t0{t.3})
+ if $s0{root} goto :null15
+ Error("null pointer")
+null15:
+ $a0 = $s0{root}
+ $a1 = 50
+ call :Tree.Search
+ $t0{t.4} = $v0
+ PrintIntS($t0{t.4})
+ if $s0{root} goto :null16
+ Error("null pointer")
+null16:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Search
+ $t0{t.5} = $v0
+ PrintIntS($t0{t.5})
+ if $s0{root} goto :null17
+ Error("null pointer")
+null17:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Delete
+ if $s0{root} goto :null18
+ Error("null pointer")
+null18:
+ $a0 = $s0{root}
+ call :Tree.Print
+ if $s0{root} goto :null19
+ Error("null pointer")
+null19:
+ $a0 = $s0{root}
+ $a1 = 12
+ call :Tree.Search
+ $t0{t.6} = $v0
+ PrintIntS($t0{t.6})
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+8] = $t1{v_key}
+ [$t0{this}+12] = 0
+ [$t0{this}+16] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{rn} = $a1
+ [$t0{this}+4] = $t1{rn}
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{ln} = $a1
+ [$t0{this}] = $t1{ln}
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+4]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+8]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v_key} = $a1
+ [$t0{this}+8] = $t1{v_key}
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+16]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t0{t.0} = [$t0{this}+12]
+ $v0 = $t0{t.0}
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+12] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{val} = $a1
+ [$t0{this}+16] = $t1{val}
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0{num1} = $a1
+ $t1{num2} = $a2
+ $t2{nti} = Add($t1{num2} 1)
+ $t1{t.0} = LtS($t0{num1} $t1{num2})
+ if0 $t1{t.0} goto :if1_else
+ $t1{ntb} = 0
+ goto :if1_end
+if1_else:
+ $t2{t.1} = LtS($t0{num1} $t2{nti})
+ if $t2{t.1} goto :if2_else
+ $t1{ntb} = 0
+ goto :if2_end
+if2_else:
+ $t1{ntb} = 1
+if2_end:
+if1_end:
+ $v0 = $t1{ntb}
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $s2{new_node} = HeapAllocZ(24)
+ if $s2{new_node} goto :null20
+ Error("null pointer")
+null20:
+ $a0 = $s2{new_node}
+ $a1 = $s1{v_key}
+ call :Tree.Init
+ $s0{current_node} = $s0{this}
+ $s3{cont} = 1
+while1_top:
+ if0 $s3{cont} goto :while1_end
+ if $s0{current_node} goto :null21
+ Error("null pointer")
+null21:
+ $a0 = $s0{current_node}
+ call :Tree.GetKey
+ $t0{key_aux} = $v0
+ $t0{t.0} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t0{t.0} goto :if3_else
+ if $s0{current_node} goto :null22
+ Error("null pointer")
+null22:
+ $a0 = $s0{current_node}
+ call :Tree.GetHas_Left
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if4_else
+ if $s0{current_node} goto :null23
+ Error("null pointer")
+null23:
+ $a0 = $s0{current_node}
+ call :Tree.GetLeft
+ $s0{current_node} = $v0
+ goto :if4_end
+if4_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null24
+ Error("null pointer")
+null24:
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call :Tree.SetHas_Left
+ if $s0{current_node} goto :null25
+ Error("null pointer")
+null25:
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call :Tree.SetLeft
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0{current_node} goto :null26
+ Error("null pointer")
+null26:
+ $a0 = $s0{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.2} = $v0
+ if0 $t0{t.2} goto :if5_else
+ if $s0{current_node} goto :null27
+ Error("null pointer")
+null27:
+ $a0 = $s0{current_node}
+ call :Tree.GetRight
+ $s0{current_node} = $v0
+ goto :if5_end
+if5_else:
+ $s3{cont} = 0
+ if $s0{current_node} goto :null28
+ Error("null pointer")
+null28:
+ $a0 = $s0{current_node}
+ $a1 = 1
+ call :Tree.SetHas_Right
+ if $s0{current_node} goto :null29
+ Error("null pointer")
+null29:
+ $a0 = $s0{current_node}
+ $a1 = $s2{new_node}
+ call :Tree.SetRight
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0{this} = $a0
+ $s1{v_key} = $a1
+ $s2{current_node} = $s0{this}
+ $s3{parent_node} = $s0{this}
+ $s4{cont} = 1
+ $s5{found} = 0
+ $s6{is_root} = 1
+while2_top:
+ if0 $s4{cont} goto :while2_end
+ if $s2{current_node} goto :null30
+ Error("null pointer")
+null30:
+ $a0 = $s2{current_node}
+ call :Tree.GetKey
+ $t0{key_aux} = $v0
+ $t1{t.0} = LtS($s1{v_key} $t0{key_aux})
+ if0 $t1{t.0} goto :if6_else
+ if $s2{current_node} goto :null31
+ Error("null pointer")
+null31:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Left
+ $t1{t.1} = $v0
+ if0 $t1{t.1} goto :if7_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null32
+ Error("null pointer")
+null32:
+ $a0 = $s2{current_node}
+ call :Tree.GetLeft
+ $s2{current_node} = $v0
+ goto :if7_end
+if7_else:
+ $s4{cont} = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0{t.2} = LtS($t0{key_aux} $s1{v_key})
+ if0 $t0{t.2} goto :if8_else
+ if $s2{current_node} goto :null33
+ Error("null pointer")
+null33:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if9_else
+ $s3{parent_node} = $s2{current_node}
+ if $s2{current_node} goto :null34
+ Error("null pointer")
+null34:
+ $a0 = $s2{current_node}
+ call :Tree.GetRight
+ $s2{current_node} = $v0
+ goto :if9_end
+if9_else:
+ $s4{cont} = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6{is_root} goto :if10_else
+ if $s2{current_node} goto :null35
+ Error("null pointer")
+null35:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.4} = $v0
+ if $t0{t.4} goto :if11_else
+ if $s2{current_node} goto :null36
+ Error("null pointer")
+null36:
+ $a0 = $s2{current_node}
+ call :Tree.GetHas_Left
+ $t0{t.5} = $v0
+ if $t0{t.5} goto :if11_else
+ goto :if11_end
+if11_else:
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call :Tree.Remove
+if11_end:
+ goto :if10_end
+if10_else:
+ $a0 = $s0{this}
+ $a1 = $s3{parent_node}
+ $a2 = $s2{current_node}
+ call :Tree.Remove
+if10_end:
+ $s5{found} = 1
+ $s4{cont} = 0
+if8_end:
+if6_end:
+ $s6{is_root} = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5{found}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+ if $s2{c_node} goto :null37
+ Error("null pointer")
+null37:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Left
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :if12_else
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call :Tree.RemoveLeft
+ goto :if12_end
+if12_else:
+ if $s2{c_node} goto :null38
+ Error("null pointer")
+null38:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Right
+ $t0{t.1} = $v0
+ if0 $t0{t.1} goto :if13_else
+ $a0 = $s0{this}
+ $a1 = $s1{p_node}
+ $a2 = $s2{c_node}
+ call :Tree.RemoveRight
+ goto :if13_end
+if13_else:
+ if $s2{c_node} goto :null39
+ Error("null pointer")
+null39:
+ $a0 = $s2{c_node}
+ call :Tree.GetKey
+ $s2{auxkey1} = $v0
+ if $s1{p_node} goto :null40
+ Error("null pointer")
+null40:
+ $a0 = $s1{p_node}
+ call :Tree.GetLeft
+ $t0{t.2} = $v0
+ if $t0{t.2} goto :null41
+ Error("null pointer")
+null41:
+ $a0 = $t0{t.2}
+ call :Tree.GetKey
+ $t0{auxkey2} = $v0
+ $a0 = $s0{this}
+ $a1 = $s2{auxkey1}
+ $a2 = $t0{auxkey2}
+ call :Tree.Compare
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if14_else
+ if $s1{p_node} goto :null42
+ Error("null pointer")
+null42:
+ $t0{t.4} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.4}
+ call :Tree.SetLeft
+ if $s1{p_node} goto :null43
+ Error("null pointer")
+null43:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Left
+ goto :if14_end
+if14_else:
+ if $s1{p_node} goto :null44
+ Error("null pointer")
+null44:
+ $t0{t.5} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.5}
+ call :Tree.SetRight
+ if $s1{p_node} goto :null45
+ Error("null pointer")
+null45:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Right
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while3_top:
+ if $s2{c_node} goto :null46
+ Error("null pointer")
+null46:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Right
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :while3_end
+ if $s2{c_node} goto :null47
+ Error("null pointer")
+null47:
+ if $s2{c_node} goto :null48
+ Error("null pointer")
+null48:
+ $a0 = $s2{c_node}
+ call :Tree.GetRight
+ $t0{t.1} = $v0
+ if $t0{t.1} goto :null49
+ Error("null pointer")
+null49:
+ $a0 = $t0{t.1}
+ call :Tree.GetKey
+ $t0{t.2} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t0{t.2}
+ call :Tree.SetKey
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null50
+ Error("null pointer")
+null50:
+ $a0 = $s2{c_node}
+ call :Tree.GetRight
+ $s2{c_node} = $v0
+ goto :while3_top
+while3_end:
+ if $s1{p_node} goto :null51
+ Error("null pointer")
+null51:
+ $t0{t.3} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.3}
+ call :Tree.SetRight
+ if $s1{p_node} goto :null52
+ Error("null pointer")
+null52:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Right
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0{this} = $a0
+ $s1{p_node} = $a1
+ $s2{c_node} = $a2
+while4_top:
+ if $s2{c_node} goto :null53
+ Error("null pointer")
+null53:
+ $a0 = $s2{c_node}
+ call :Tree.GetHas_Left
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :while4_end
+ if $s2{c_node} goto :null54
+ Error("null pointer")
+null54:
+ if $s2{c_node} goto :null55
+ Error("null pointer")
+null55:
+ $a0 = $s2{c_node}
+ call :Tree.GetLeft
+ $t0{t.1} = $v0
+ if $t0{t.1} goto :null56
+ Error("null pointer")
+null56:
+ $a0 = $t0{t.1}
+ call :Tree.GetKey
+ $t0{t.2} = $v0
+ $a0 = $s2{c_node}
+ $a1 = $t0{t.2}
+ call :Tree.SetKey
+ $s1{p_node} = $s2{c_node}
+ if $s2{c_node} goto :null57
+ Error("null pointer")
+null57:
+ $a0 = $s2{c_node}
+ call :Tree.GetLeft
+ $s2{c_node} = $v0
+ goto :while4_top
+while4_end:
+ if $s1{p_node} goto :null58
+ Error("null pointer")
+null58:
+ $t0{t.3} = [$s0{this}+20]
+ $a0 = $s1{p_node}
+ $a1 = $t0{t.3}
+ call :Tree.SetLeft
+ if $s1{p_node} goto :null59
+ Error("null pointer")
+null59:
+ $a0 = $s1{p_node}
+ $a1 = 0
+ call :Tree.SetHas_Left
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0{this} = $a0
+ $s0{v_key} = $a1
+ $s1{current_node} = $t0{this}
+ $s2{cont} = 1
+ $s3{ifound} = 0
+while5_top:
+ if0 $s2{cont} goto :while5_end
+ if $s1{current_node} goto :null60
+ Error("null pointer")
+null60:
+ $a0 = $s1{current_node}
+ call :Tree.GetKey
+ $t0{key_aux} = $v0
+ $t1{t.0} = LtS($s0{v_key} $t0{key_aux})
+ if0 $t1{t.0} goto :if15_else
+ if $s1{current_node} goto :null61
+ Error("null pointer")
+null61:
+ $a0 = $s1{current_node}
+ call :Tree.GetHas_Left
+ $t1{t.1} = $v0
+ if0 $t1{t.1} goto :if16_else
+ if $s1{current_node} goto :null62
+ Error("null pointer")
+null62:
+ $a0 = $s1{current_node}
+ call :Tree.GetLeft
+ $s1{current_node} = $v0
+ goto :if16_end
+if16_else:
+ $s2{cont} = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0{t.2} = LtS($t0{key_aux} $s0{v_key})
+ if0 $t0{t.2} goto :if17_else
+ if $s1{current_node} goto :null63
+ Error("null pointer")
+null63:
+ $a0 = $s1{current_node}
+ call :Tree.GetHas_Right
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if18_else
+ if $s1{current_node} goto :null64
+ Error("null pointer")
+null64:
+ $a0 = $s1{current_node}
+ call :Tree.GetRight
+ $s1{current_node} = $v0
+ goto :if18_end
+if18_else:
+ $s2{cont} = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3{ifound} = 1
+ $s2{cont} = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3{ifound}
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{current_node} = $t0{this}
+ $a0 = $t0{this}
+ $a1 = $t1{current_node}
+ call :Tree.RecPrint
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0{this} = $a0
+ $s1{node} = $a1
+ if $s1{node} goto :null65
+ Error("null pointer")
+null65:
+ $a0 = $s1{node}
+ call :Tree.GetHas_Left
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :if19_else
+ if $s1{node} goto :null66
+ Error("null pointer")
+null66:
+ $a0 = $s1{node}
+ call :Tree.GetLeft
+ $t0{t.1} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.1}
+ call :Tree.RecPrint
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1{node} goto :null67
+ Error("null pointer")
+null67:
+ $a0 = $s1{node}
+ call :Tree.GetKey
+ $t0{t.2} = $v0
+ PrintIntS($t0{t.2})
+ if $s1{node} goto :null68
+ Error("null pointer")
+null68:
+ $a0 = $s1{node}
+ call :Tree.GetHas_Right
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if20_else
+ if $s1{node} goto :null69
+ Error("null pointer")
+null69:
+ $a0 = $s1{node}
+ call :Tree.GetRight
+ $t0{t.4} = $v0
+ $a0 = $s0{this}
+ $a1 = $t0{t.4}
+ call :Tree.RecPrint
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func Tree.accept [in 0, out 0, local 0]
+ $t0{this} = $a0
+ $t1{v} = $a1
+ PrintIntS(333)
+ if $t1{v} goto :null70
+ Error("null pointer")
+null70:
+ $t2{t.0} = [$t1{v}]
+ $t2{t.0} = [$t2{t.0}]
+ $a0 = $t1{v}
+ $a1 = $t0{this}
+ call $t2{t.0}
+ $v0 = 0
+ ret
+
+func Visitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0{this} = $a0
+ $s1{n} = $a1
+ if $s1{n} goto :null71
+ Error("null pointer")
+null71:
+ $a0 = $s1{n}
+ call :Tree.GetHas_Right
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :if21_else
+ if $s1{n} goto :null72
+ Error("null pointer")
+null72:
+ $a0 = $s1{n}
+ call :Tree.GetRight
+ $t0{t.1} = $v0
+ [$s0{this}+8] = $t0{t.1}
+ $t0{t.2} = [$s0{this}+8]
+ if $t0{t.2} goto :null73
+ Error("null pointer")
+null73:
+ $a0 = $t0{t.2}
+ $a1 = $s0{this}
+ call :Tree.accept
+ goto :if21_end
+if21_else:
+if21_end:
+ if $s1{n} goto :null74
+ Error("null pointer")
+null74:
+ $a0 = $s1{n}
+ call :Tree.GetHas_Left
+ $t0{t.3} = $v0
+ if0 $t0{t.3} goto :if22_else
+ if $s1{n} goto :null75
+ Error("null pointer")
+null75:
+ $a0 = $s1{n}
+ call :Tree.GetLeft
+ $t0{t.4} = $v0
+ [$s0{this}+4] = $t0{t.4}
+ $t0{t.5} = [$s0{this}+4]
+ if $t0{t.5} goto :null76
+ Error("null pointer")
+null76:
+ $a0 = $t0{t.5}
+ $a1 = $s0{this}
+ call :Tree.accept
+ goto :if22_end
+if22_else:
+if22_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func MyVisitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0{this} = $a0
+ $s1{n} = $a1
+ if $s1{n} goto :null77
+ Error("null pointer")
+null77:
+ $a0 = $s1{n}
+ call :Tree.GetHas_Right
+ $t0{t.0} = $v0
+ if0 $t0{t.0} goto :if23_else
+ if $s1{n} goto :null78
+ Error("null pointer")
+null78:
+ $a0 = $s1{n}
+ call :Tree.GetRight
+ $t0{t.1} = $v0
+ [$s0{this}+8] = $t0{t.1}
+ $t0{t.2} = [$s0{this}+8]
+ if $t0{t.2} goto :null79
+ Error("null pointer")
+null79:
+ $a0 = $t0{t.2}
+ $a1 = $s0{this}
+ call :Tree.accept
+ goto :if23_end
+if23_else:
+if23_end:
+ if $s1{n} goto :null80
+ Error("null pointer")
+null80:
+ $a0 = $s1{n}
+ call :Tree.GetKey
+ $t0{t.3} = $v0
+ PrintIntS($t0{t.3})
+ if $s1{n} goto :null81
+ Error("null pointer")
+null81:
+ $a0 = $s1{n}
+ call :Tree.GetHas_Left
+ $t0{t.4} = $v0
+ if0 $t0{t.4} goto :if24_else
+ if $s1{n} goto :null82
+ Error("null pointer")
+null82:
+ $a0 = $s1{n}
+ call :Tree.GetLeft
+ $t0{t.5} = $v0
+ [$s0{this}+4] = $t0{t.5}
+ $t0{t.6} = [$s0{this}+4]
+ if $t0{t.6} goto :null83
+ Error("null pointer")
+null83:
+ $a0 = $t0{t.6}
+ $a1 = $s0{this}
+ call :Tree.accept
+ goto :if24_end
+if24_else:
+if24_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
diff --git a/base/TreeVisitor.opt.regalloc b/base/TreeVisitor.opt.regalloc
new file mode 100644
index 0000000..985ead2
--- /dev/null
+++ b/base/TreeVisitor.opt.regalloc
@@ -0,0 +1,539 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 15
+Linear Range:
+ t.0: 14-15
+Allocation:
+ t.0: t0
+
+func TV.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this:
+ root: 20 23-24 27-29 32-33 36-37 40-41 44-45 48-49 52-53 56-57 60-66 69-71 74-76 79-81 84-86 89-91 94-96 99-100 103-104 107
+ ntb:
+ t.0: 63-64
+ v: 65-66 69
+ nti:
+ t.1: 75
+ t.2: 80
+ t.3: 85
+ t.4: 90
+ t.5: 95
+ t.6: 108
+Linear Range:
+ root: 19-107 (cross call)
+ t.0: 62-64
+ v: 64-69
+ t.1: 74-75
+ t.2: 79-80
+ t.3: 84-85
+ t.4: 89-90
+ t.5: 94-95
+ t.6: 107-108
+Allocation:
+ root: s0
+ t.0: t0
+ v: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+
+func Tree.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 112-114
+ v_key: 112
+Linear Range:
+ this: 111-114
+ v_key: 111-112
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.SetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 118
+ rn: 118
+Linear Range:
+ this: 117-118
+ rn: 117-118
+Allocation:
+ this: t0
+ rn: t1
+
+func Tree.SetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 122
+ ln: 122
+Linear Range:
+ this: 121-122
+ ln: 121-122
+Allocation:
+ this: t0
+ ln: t1
+
+func Tree.GetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 126
+ t.0: 127
+Linear Range:
+ this: 125-126
+ t.0: 126-127
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 130
+ t.0: 131
+Linear Range:
+ this: 129-130
+ t.0: 130-131
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 134
+ t.0: 135
+Linear Range:
+ this: 133-134
+ t.0: 134-135
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 138
+ v_key: 138
+Linear Range:
+ this: 137-138
+ v_key: 137-138
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.GetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 142
+ t.0: 143
+Linear Range:
+ this: 141-142
+ t.0: 142-143
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 146
+ t.0: 147
+Linear Range:
+ this: 145-146
+ t.0: 146-147
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 150
+ val: 150
+Linear Range:
+ this: 149-150
+ val: 149-150
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.SetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 154
+ val: 154
+Linear Range:
+ this: 153-154
+ val: 153-154
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.Compare
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ num1: 158-161 165
+ num2: 158-160
+ ntb: 163 168 173
+ nti: 160-161 165
+ t.0: 161
+ t.1: 166
+Linear Range:
+ num1: 157-165
+ num2: 157-160
+ ntb: 162-173
+ nti: 159-165
+ t.0: 160-161
+ t.1: 165-166
+Allocation:
+ num1: t0
+ num2: t1
+ ntb: t1
+ nti: t2
+ t.0: t1
+ t.1: t2
+
+func Tree.Insert
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 176-177 180-181
+ v_key: 176-177 180-185 188-191 194-196 199-203 206-207 210-214 217-219 222-226 229-230 233-236
+ new_node: 177 180-185 188-191 194-196 199-203 206-207 210-214 217-219 222-226 229-230 233-236
+ ntb:
+ current_node: 182-185 188-191 194-196 199-203 206-207 210-214 217-219 222-226 229-230 233-236
+ cont: 184-185 188-191 194-196 199-200 203 206-207 210-214 217-219 222-223 226 229-230 233-236
+ key_aux: 189
+ t.0: 190
+ t.1: 195
+ t.2: 218
+Linear Range:
+ this: 175-181 (cross call)
+ v_key: 175-236 (cross call)
+ new_node: 176-236 (cross call)
+ current_node: 181-236 (cross call)
+ cont: 182-236 (cross call)
+ key_aux: 188-189
+ t.0: 189-190
+ t.1: 194-195
+ t.2: 217-218
+Allocation:
+ this: s0
+ v_key: s1
+ new_node: s2
+ current_node: s0
+ cont: s3
+ key_aux: t0
+ t.0: t0
+ t.1: t0
+ t.2: t0
+
+func Tree.Delete
+ in 0, out 0, callee-saves 7, spills 0
+Live In:
+ this: 241-248 251-254 257-260 263-272 275-278 281-289 292-294 297-313
+ v_key: 241-248 251-254 257-260 263-272 275-278 281-289 292-294 297-313
+ current_node: 242-248 251-254 257-260 263-272 275-278 281-289 292-294 297-313
+ parent_node: 243-248 251-254 257-258 260 263-272 275-276 278 281-289 292-294 297-313
+ cont: 244-248 251-254 257-260 263-264 268-272 275-278 281-282 286 312-313
+ found: 245-248 251-254 257-260 263-272 275-278 281-286 309-315
+ is_root: 247-248 251-253 270-271 288 313
+ key_aux: 252-253 270
+ t.0: 253
+ t.1: 258
+ t.2: 271
+ t.3: 276
+ t.4: 293
+ t.5: 298
+ ntb:
+Linear Range:
+ this: 240-313 (cross call)
+ v_key: 240-313 (cross call)
+ current_node: 241-313 (cross call)
+ parent_node: 242-313 (cross call)
+ cont: 243-313 (cross call)
+ found: 244-315 (cross call)
+ is_root: 245-313 (cross call)
+ key_aux: 251-270
+ t.0: 252-253
+ t.1: 257-258
+ t.2: 270-271
+ t.3: 275-276
+ t.4: 292-293
+ t.5: 297-298
+Allocation:
+ this: s0
+ v_key: s1
+ current_node: s2
+ parent_node: s3
+ cont: s4
+ found: s5
+ is_root: s6
+ key_aux: t0
+ t.0: t1
+ t.1: t1
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+
+func Tree.Remove
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 318 321-323 326 329-331 334 337-338 341-342 345-348 351 359 362
+ p_node: 318 321-323 326 329-331 334 337-338 341-342 345-348 351-353 356 359 362-364 367
+ c_node: 318 321-323 326 329-331 334 337
+ t.0: 322
+ ntb:
+ t.1: 330
+ auxkey1: 338 341-342 345-346
+ t.2: 342 345
+ auxkey2: 346
+ t.3: 347
+ t.4: 352
+ t.5: 363
+Linear Range:
+ this: 317-362 (cross call)
+ p_node: 317-367 (cross call)
+ c_node: 317-337 (cross call)
+ t.0: 321-322
+ t.1: 329-330
+ auxkey1: 337-346 (cross call)
+ t.2: 341-345
+ auxkey2: 345-346
+ t.3: 346-347
+ t.4: 351-352
+ t.5: 362-363
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ auxkey1: s2
+ t.2: t0
+ auxkey2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+
+func Tree.RemoveRight
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 375 378-380 383 386-387 390-393 396-399 402
+ p_node: 375 378-379 393 396-399 402-404 407
+ c_node: 375 378-380 383 386-387 390-393 396-397
+ t.0: 379
+ t.1: 387 390
+ t.2: 391
+ ntb:
+ t.3: 403
+Linear Range:
+ this: 373-402 (cross call)
+ p_node: 373-407 (cross call)
+ c_node: 373-397 (cross call)
+ t.0: 378-379
+ t.1: 386-390
+ t.2: 390-391
+ t.3: 402-403
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+
+func Tree.RemoveLeft
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 412 415-417 420 423-424 427-430 433-436 439
+ p_node: 412 415-416 430 433-436 439-441 444
+ c_node: 412 415-417 420 423-424 427-430 433-434
+ t.0: 416
+ t.1: 424 427
+ t.2: 428
+ ntb:
+ t.3: 440
+Linear Range:
+ this: 410-439 (cross call)
+ p_node: 410-444 (cross call)
+ c_node: 410-434 (cross call)
+ t.0: 415-416
+ t.1: 423-427
+ t.2: 427-428
+ t.3: 439-440
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+
+func Tree.Search
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 448
+ v_key: 448-453 456-459 462-464 467-476 479-481 484-495
+ current_node: 449-453 456-459 462-464 467-476 479-481 484-495
+ cont: 450-453 456-459 462-464 467-468 472-476 479-481 484-485 489 495
+ ifound: 452-453 456-459 462-464 467-476 479-481 484-489 492-497
+ key_aux: 457-458 474
+ t.0: 458
+ t.1: 463
+ t.2: 475
+ t.3: 480
+Linear Range:
+ this: 447-448
+ v_key: 447-495 (cross call)
+ current_node: 448-495 (cross call)
+ cont: 449-495 (cross call)
+ ifound: 450-497 (cross call)
+ key_aux: 456-474
+ t.0: 457-458
+ t.1: 462-463
+ t.2: 474-475
+ t.3: 479-480
+Allocation:
+ this: t0
+ v_key: s0
+ current_node: s1
+ cont: s2
+ ifound: s3
+ key_aux: t0
+ t.0: t1
+ t.1: t1
+ t.2: t0
+ t.3: t0
+
+func Tree.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 500-501
+ current_node: 501
+ ntb:
+Linear Range:
+ this: 499-501
+ current_node: 500-501
+Allocation:
+ this: t0
+ current_node: t1
+
+func Tree.RecPrint
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 505 508-510 513-519 522-524 527-529 532-533
+ node: 505 508-510 513-519 522-524 527-529 532
+ t.0: 509
+ t.1: 514
+ ntb:
+ t.2: 523
+ t.3: 528
+ t.4: 533
+Linear Range:
+ this: 504-533 (cross call)
+ node: 504-532 (cross call)
+ t.0: 508-509
+ t.1: 513-514
+ t.2: 522-523
+ t.3: 527-528
+ t.4: 532-533
+Allocation:
+ this: s0
+ node: s1
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+
+func Tree.accept
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 541-542 545-547
+ v: 541-542 545-547
+ t.0: 546-547
+ nti:
+Linear Range:
+ this: 540-547
+ v: 540-547
+ t.0: 545-547
+Allocation:
+ this: t0
+ v: t1
+ t.0: t2
+
+func Visitor.visit
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 551 554-556 559-562 565-570 573-575 578-581 584
+ n: 551 554-556 559-562 565-570 573-575 578
+ t.0: 555
+ t.1: 560
+ t.2: 562 565
+ nti:
+ t.3: 574
+ t.4: 579
+ t.5: 581 584
+Linear Range:
+ this: 550-584 (cross call)
+ n: 550-578 (cross call)
+ t.0: 554-555
+ t.1: 559-560
+ t.2: 561-565
+ t.3: 573-574
+ t.4: 578-579
+ t.5: 580-584
+Allocation:
+ this: s0
+ n: s1
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+
+func MyVisitor.visit
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 592 595-597 600-603 606-611 614-616 619-621 624-627 630
+ n: 592 595-597 600-603 606-611 614-616 619-621 624
+ t.0: 596
+ t.1: 601
+ t.2: 603 606
+ nti:
+ t.3: 615
+ t.4: 620
+ t.5: 625
+ t.6: 627 630
+Linear Range:
+ this: 591-630 (cross call)
+ n: 591-624 (cross call)
+ t.0: 595-596
+ t.1: 600-601
+ t.2: 602-606
+ t.3: 614-615
+ t.4: 619-620
+ t.5: 624-625
+ t.6: 626-630
+Allocation:
+ this: s0
+ n: s1
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+
diff --git a/base/TreeVisitor.opt.vapor b/base/TreeVisitor.opt.vapor
new file mode 100644
index 0000000..dfa80a6
--- /dev/null
+++ b/base/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/base/TreeVisitor.opt.vaporm b/base/TreeVisitor.opt.vaporm
new file mode 100644
index 0000000..0ff4fc4
--- /dev/null
+++ b/base/TreeVisitor.opt.vaporm
@@ -0,0 +1,948 @@
+const empty_TV
+
+const empty_Tree
+
+const vmt_Visitor
+ :Visitor.visit
+
+const vmt_MyVisitor
+ :MyVisitor.visit
+
+func Main [in 0, out 0, local 0]
+ $a0 = :empty_TV
+ call :TV.Start
+ $t0 = $v0
+ PrintIntS($t0)
+ ret
+
+func TV.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $s0 = HeapAllocZ(24)
+ if $s0 goto :null1
+ Error("null pointer")
+null1:
+ $a0 = $s0
+ $a1 = 16
+ call :Tree.Init
+ if $s0 goto :null2
+ Error("null pointer")
+null2:
+ $a0 = $s0
+ call :Tree.Print
+ PrintIntS(100000000)
+ if $s0 goto :null3
+ Error("null pointer")
+null3:
+ $a0 = $s0
+ $a1 = 8
+ call :Tree.Insert
+ if $s0 goto :null4
+ Error("null pointer")
+null4:
+ $a0 = $s0
+ $a1 = 24
+ call :Tree.Insert
+ if $s0 goto :null5
+ Error("null pointer")
+null5:
+ $a0 = $s0
+ $a1 = 4
+ call :Tree.Insert
+ if $s0 goto :null6
+ Error("null pointer")
+null6:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Insert
+ if $s0 goto :null7
+ Error("null pointer")
+null7:
+ $a0 = $s0
+ $a1 = 20
+ call :Tree.Insert
+ if $s0 goto :null8
+ Error("null pointer")
+null8:
+ $a0 = $s0
+ $a1 = 28
+ call :Tree.Insert
+ if $s0 goto :null9
+ Error("null pointer")
+null9:
+ $a0 = $s0
+ $a1 = 14
+ call :Tree.Insert
+ if $s0 goto :null10
+ Error("null pointer")
+null10:
+ $a0 = $s0
+ call :Tree.Print
+ PrintIntS(100000000)
+ $t0 = HeapAllocZ(12)
+ [$t0] = :vmt_MyVisitor
+ $t0 = $t0
+ PrintIntS(50000000)
+ if $s0 goto :null11
+ Error("null pointer")
+null11:
+ $a0 = $s0
+ $a1 = $t0
+ call :Tree.accept
+ PrintIntS(100000000)
+ if $s0 goto :null12
+ Error("null pointer")
+null12:
+ $a0 = $s0
+ $a1 = 24
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null13
+ Error("null pointer")
+null13:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null14
+ Error("null pointer")
+null14:
+ $a0 = $s0
+ $a1 = 16
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null15
+ Error("null pointer")
+null15:
+ $a0 = $s0
+ $a1 = 50
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null16
+ Error("null pointer")
+null16:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s0 goto :null17
+ Error("null pointer")
+null17:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Delete
+ if $s0 goto :null18
+ Error("null pointer")
+null18:
+ $a0 = $s0
+ call :Tree.Print
+ if $s0 goto :null19
+ Error("null pointer")
+null19:
+ $a0 = $s0
+ $a1 = 12
+ call :Tree.Search
+ $t0 = $v0
+ PrintIntS($t0)
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+8] = $t1
+ [$t0+12] = 0
+ [$t0+16] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+4] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0]
+ $v0 = $t0
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+8] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+16]
+ $v0 = $t0
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+12]
+ $v0 = $t0
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+12] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+16] = $t1
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = Add($t1 1)
+ $t1 = LtS($t0 $t1)
+ if0 $t1 goto :if1_else
+ $t1 = 0
+ goto :if1_end
+if1_else:
+ $t2 = LtS($t0 $t2)
+ if $t2 goto :if2_else
+ $t1 = 0
+ goto :if2_end
+if2_else:
+ $t1 = 1
+if2_end:
+if1_end:
+ $v0 = $t1
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = HeapAllocZ(24)
+ if $s2 goto :null20
+ Error("null pointer")
+null20:
+ $a0 = $s2
+ $a1 = $s1
+ call :Tree.Init
+ $s0 = $s0
+ $s3 = 1
+while1_top:
+ if0 $s3 goto :while1_end
+ if $s0 goto :null21
+ Error("null pointer")
+null21:
+ $a0 = $s0
+ call :Tree.GetKey
+ $t0 = $v0
+ $t0 = LtS($s1 $t0)
+ if0 $t0 goto :if3_else
+ if $s0 goto :null22
+ Error("null pointer")
+null22:
+ $a0 = $s0
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if4_else
+ if $s0 goto :null23
+ Error("null pointer")
+null23:
+ $a0 = $s0
+ call :Tree.GetLeft
+ $s0 = $v0
+ goto :if4_end
+if4_else:
+ $s3 = 0
+ if $s0 goto :null24
+ Error("null pointer")
+null24:
+ $a0 = $s0
+ $a1 = 1
+ call :Tree.SetHas_Left
+ if $s0 goto :null25
+ Error("null pointer")
+null25:
+ $a0 = $s0
+ $a1 = $s2
+ call :Tree.SetLeft
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0 goto :null26
+ Error("null pointer")
+null26:
+ $a0 = $s0
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if5_else
+ if $s0 goto :null27
+ Error("null pointer")
+null27:
+ $a0 = $s0
+ call :Tree.GetRight
+ $s0 = $v0
+ goto :if5_end
+if5_else:
+ $s3 = 0
+ if $s0 goto :null28
+ Error("null pointer")
+null28:
+ $a0 = $s0
+ $a1 = 1
+ call :Tree.SetHas_Right
+ if $s0 goto :null29
+ Error("null pointer")
+null29:
+ $a0 = $s0
+ $a1 = $s2
+ call :Tree.SetRight
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $s0
+ $s3 = $s0
+ $s4 = 1
+ $s5 = 0
+ $s6 = 1
+while2_top:
+ if0 $s4 goto :while2_end
+ if $s2 goto :null30
+ Error("null pointer")
+null30:
+ $a0 = $s2
+ call :Tree.GetKey
+ $t0 = $v0
+ $t1 = LtS($s1 $t0)
+ if0 $t1 goto :if6_else
+ if $s2 goto :null31
+ Error("null pointer")
+null31:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t1 = $v0
+ if0 $t1 goto :if7_else
+ $s3 = $s2
+ if $s2 goto :null32
+ Error("null pointer")
+null32:
+ $a0 = $s2
+ call :Tree.GetLeft
+ $s2 = $v0
+ goto :if7_end
+if7_else:
+ $s4 = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0 = LtS($t0 $s1)
+ if0 $t0 goto :if8_else
+ if $s2 goto :null33
+ Error("null pointer")
+null33:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if9_else
+ $s3 = $s2
+ if $s2 goto :null34
+ Error("null pointer")
+null34:
+ $a0 = $s2
+ call :Tree.GetRight
+ $s2 = $v0
+ goto :if9_end
+if9_else:
+ $s4 = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6 goto :if10_else
+ if $s2 goto :null35
+ Error("null pointer")
+null35:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if $t0 goto :if11_else
+ if $s2 goto :null36
+ Error("null pointer")
+null36:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if $t0 goto :if11_else
+ goto :if11_end
+if11_else:
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call :Tree.Remove
+if11_end:
+ goto :if10_end
+if10_else:
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call :Tree.Remove
+if10_end:
+ $s5 = 1
+ $s4 = 0
+if8_end:
+if6_end:
+ $s6 = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+ if $s2 goto :null37
+ Error("null pointer")
+null37:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if12_else
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call :Tree.RemoveLeft
+ goto :if12_end
+if12_else:
+ if $s2 goto :null38
+ Error("null pointer")
+null38:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if13_else
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call :Tree.RemoveRight
+ goto :if13_end
+if13_else:
+ if $s2 goto :null39
+ Error("null pointer")
+null39:
+ $a0 = $s2
+ call :Tree.GetKey
+ $s2 = $v0
+ if $s1 goto :null40
+ Error("null pointer")
+null40:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $t0 = $v0
+ if $t0 goto :null41
+ Error("null pointer")
+null41:
+ $a0 = $t0
+ call :Tree.GetKey
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $s2
+ $a2 = $t0
+ call :Tree.Compare
+ $t0 = $v0
+ if0 $t0 goto :if14_else
+ if $s1 goto :null42
+ Error("null pointer")
+null42:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetLeft
+ if $s1 goto :null43
+ Error("null pointer")
+null43:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Left
+ goto :if14_end
+if14_else:
+ if $s1 goto :null44
+ Error("null pointer")
+null44:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetRight
+ if $s1 goto :null45
+ Error("null pointer")
+null45:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Right
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while3_top:
+ if $s2 goto :null46
+ Error("null pointer")
+null46:
+ $a0 = $s2
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :while3_end
+ if $s2 goto :null47
+ Error("null pointer")
+null47:
+ if $s2 goto :null48
+ Error("null pointer")
+null48:
+ $a0 = $s2
+ call :Tree.GetRight
+ $t0 = $v0
+ if $t0 goto :null49
+ Error("null pointer")
+null49:
+ $a0 = $t0
+ call :Tree.GetKey
+ $t0 = $v0
+ $a0 = $s2
+ $a1 = $t0
+ call :Tree.SetKey
+ $s1 = $s2
+ if $s2 goto :null50
+ Error("null pointer")
+null50:
+ $a0 = $s2
+ call :Tree.GetRight
+ $s2 = $v0
+ goto :while3_top
+while3_end:
+ if $s1 goto :null51
+ Error("null pointer")
+null51:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetRight
+ if $s1 goto :null52
+ Error("null pointer")
+null52:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Right
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while4_top:
+ if $s2 goto :null53
+ Error("null pointer")
+null53:
+ $a0 = $s2
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :while4_end
+ if $s2 goto :null54
+ Error("null pointer")
+null54:
+ if $s2 goto :null55
+ Error("null pointer")
+null55:
+ $a0 = $s2
+ call :Tree.GetLeft
+ $t0 = $v0
+ if $t0 goto :null56
+ Error("null pointer")
+null56:
+ $a0 = $t0
+ call :Tree.GetKey
+ $t0 = $v0
+ $a0 = $s2
+ $a1 = $t0
+ call :Tree.SetKey
+ $s1 = $s2
+ if $s2 goto :null57
+ Error("null pointer")
+null57:
+ $a0 = $s2
+ call :Tree.GetLeft
+ $s2 = $v0
+ goto :while4_top
+while4_end:
+ if $s1 goto :null58
+ Error("null pointer")
+null58:
+ $t0 = [$s0+20]
+ $a0 = $s1
+ $a1 = $t0
+ call :Tree.SetLeft
+ if $s1 goto :null59
+ Error("null pointer")
+null59:
+ $a0 = $s1
+ $a1 = 0
+ call :Tree.SetHas_Left
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = $t0
+ $s2 = 1
+ $s3 = 0
+while5_top:
+ if0 $s2 goto :while5_end
+ if $s1 goto :null60
+ Error("null pointer")
+null60:
+ $a0 = $s1
+ call :Tree.GetKey
+ $t0 = $v0
+ $t1 = LtS($s0 $t0)
+ if0 $t1 goto :if15_else
+ if $s1 goto :null61
+ Error("null pointer")
+null61:
+ $a0 = $s1
+ call :Tree.GetHas_Left
+ $t1 = $v0
+ if0 $t1 goto :if16_else
+ if $s1 goto :null62
+ Error("null pointer")
+null62:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $s1 = $v0
+ goto :if16_end
+if16_else:
+ $s2 = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0 = LtS($t0 $s0)
+ if0 $t0 goto :if17_else
+ if $s1 goto :null63
+ Error("null pointer")
+null63:
+ $a0 = $s1
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if18_else
+ if $s1 goto :null64
+ Error("null pointer")
+null64:
+ $a0 = $s1
+ call :Tree.GetRight
+ $s1 = $v0
+ goto :if18_end
+if18_else:
+ $s2 = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3 = 1
+ $s2 = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $t0
+ $a0 = $t0
+ $a1 = $t1
+ call :Tree.RecPrint
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null65
+ Error("null pointer")
+null65:
+ $a0 = $s1
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if19_else
+ if $s1 goto :null66
+ Error("null pointer")
+null66:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call :Tree.RecPrint
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1 goto :null67
+ Error("null pointer")
+null67:
+ $a0 = $s1
+ call :Tree.GetKey
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s1 goto :null68
+ Error("null pointer")
+null68:
+ $a0 = $s1
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if20_else
+ if $s1 goto :null69
+ Error("null pointer")
+null69:
+ $a0 = $s1
+ call :Tree.GetRight
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call :Tree.RecPrint
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func Tree.accept [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ PrintIntS(333)
+ if $t1 goto :null70
+ Error("null pointer")
+null70:
+ $t2 = [$t1]
+ $t2 = [$t2]
+ $a0 = $t1
+ $a1 = $t0
+ call $t2
+ $v0 = 0
+ ret
+
+func Visitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null71
+ Error("null pointer")
+null71:
+ $a0 = $s1
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if21_else
+ if $s1 goto :null72
+ Error("null pointer")
+null72:
+ $a0 = $s1
+ call :Tree.GetRight
+ $t0 = $v0
+ [$s0+8] = $t0
+ $t0 = [$s0+8]
+ if $t0 goto :null73
+ Error("null pointer")
+null73:
+ $a0 = $t0
+ $a1 = $s0
+ call :Tree.accept
+ goto :if21_end
+if21_else:
+if21_end:
+ if $s1 goto :null74
+ Error("null pointer")
+null74:
+ $a0 = $s1
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if22_else
+ if $s1 goto :null75
+ Error("null pointer")
+null75:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $t0 = $v0
+ [$s0+4] = $t0
+ $t0 = [$s0+4]
+ if $t0 goto :null76
+ Error("null pointer")
+null76:
+ $a0 = $t0
+ $a1 = $s0
+ call :Tree.accept
+ goto :if22_end
+if22_else:
+if22_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func MyVisitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null77
+ Error("null pointer")
+null77:
+ $a0 = $s1
+ call :Tree.GetHas_Right
+ $t0 = $v0
+ if0 $t0 goto :if23_else
+ if $s1 goto :null78
+ Error("null pointer")
+null78:
+ $a0 = $s1
+ call :Tree.GetRight
+ $t0 = $v0
+ [$s0+8] = $t0
+ $t0 = [$s0+8]
+ if $t0 goto :null79
+ Error("null pointer")
+null79:
+ $a0 = $t0
+ $a1 = $s0
+ call :Tree.accept
+ goto :if23_end
+if23_else:
+if23_end:
+ if $s1 goto :null80
+ Error("null pointer")
+null80:
+ $a0 = $s1
+ call :Tree.GetKey
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s1 goto :null81
+ Error("null pointer")
+null81:
+ $a0 = $s1
+ call :Tree.GetHas_Left
+ $t0 = $v0
+ if0 $t0 goto :if24_else
+ if $s1 goto :null82
+ Error("null pointer")
+null82:
+ $a0 = $s1
+ call :Tree.GetLeft
+ $t0 = $v0
+ [$s0+4] = $t0
+ $t0 = [$s0+4]
+ if $t0 goto :null83
+ Error("null pointer")
+null83:
+ $a0 = $t0
+ $a1 = $s0
+ call :Tree.accept
+ goto :if24_end
+if24_else:
+if24_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
diff --git a/base/TreeVisitor.regalloc b/base/TreeVisitor.regalloc
new file mode 100644
index 0000000..3edb0c1
--- /dev/null
+++ b/base/TreeVisitor.regalloc
@@ -0,0 +1,830 @@
+func Main
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ t.0: 37-38 41-43
+ t.1: 42-43
+ t.2: 44
+Linear Range:
+ t.0: 36-43
+ t.1: 41-43
+ t.2: 43-44
+Allocation:
+ t.0: t0
+ t.1: t1
+ t.2: t1
+
+func TV.Start
+ in 0, out 0, callee-saves 1, spills 0
+Live In:
+ this:
+ t.0: 49-50
+ root: 51 54-57 60-64 67-70 73-76 79-82 85-88 91-94 97-100 103-106 109-117 120-124 127-131 134-138 141-145 148-152 155-159 162-165 168-171 174-176
+ t.1: 55-56
+ ntb:
+ t.2: 61-62
+ t.3: 68-69
+ t.4: 74-75
+ t.5: 80-81
+ t.6: 86-87
+ t.7: 92-93
+ t.8: 98-99
+ t.9: 104-105
+ t.10: 110-111
+ t.11: 114-115
+ v: 116-117 120-122
+ t.12: 121-122
+ nti:
+ t.13: 128-129
+ t.14: 130
+ t.15: 135-136
+ t.16: 137
+ t.17: 142-143
+ t.18: 144
+ t.19: 149-150
+ t.20: 151
+ t.21: 156-157
+ t.22: 158
+ t.23: 163-164
+ t.24: 169-170
+ t.25: 175-176
+ t.26: 177
+Linear Range:
+ t.0: 48-50
+ root: 50-176 (cross call)
+ t.1: 54-56
+ t.2: 60-62
+ t.3: 67-69
+ t.4: 73-75
+ t.5: 79-81
+ t.6: 85-87
+ t.7: 91-93
+ t.8: 97-99
+ t.9: 103-105
+ t.10: 109-111
+ t.11: 113-115
+ v: 115-122
+ t.12: 120-122
+ t.13: 127-129
+ t.14: 129-130
+ t.15: 134-136
+ t.16: 136-137
+ t.17: 141-143
+ t.18: 143-144
+ t.19: 148-150
+ t.20: 150-151
+ t.21: 155-157
+ t.22: 157-158
+ t.23: 162-164
+ t.24: 168-170
+ t.25: 174-176
+ t.26: 176-177
+Allocation:
+ t.0: t0
+ root: s0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.9: t0
+ t.10: t0
+ t.11: t0
+ v: t0
+ t.12: t1
+ t.13: t1
+ t.14: t1
+ t.15: t1
+ t.16: t1
+ t.17: t1
+ t.18: t1
+ t.19: t1
+ t.20: t1
+ t.21: t1
+ t.22: t1
+ t.23: t1
+ t.24: t1
+ t.25: t1
+ t.26: t1
+
+func Tree.Init
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 181-183
+ v_key: 181
+Linear Range:
+ this: 180-183
+ v_key: 180-181
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.SetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 187
+ rn: 187
+Linear Range:
+ this: 186-187
+ rn: 186-187
+Allocation:
+ this: t0
+ rn: t1
+
+func Tree.SetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 191
+ ln: 191
+Linear Range:
+ this: 190-191
+ ln: 190-191
+Allocation:
+ this: t0
+ ln: t1
+
+func Tree.GetRight
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 195
+ t.0: 196
+Linear Range:
+ this: 194-195
+ t.0: 195-196
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetLeft
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 199
+ t.0: 200
+Linear Range:
+ this: 198-199
+ t.0: 199-200
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 203
+ t.0: 204
+Linear Range:
+ this: 202-203
+ t.0: 203-204
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetKey
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 207
+ v_key: 207
+Linear Range:
+ this: 206-207
+ v_key: 206-207
+Allocation:
+ this: t0
+ v_key: t1
+
+func Tree.GetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 211
+ t.0: 212
+Linear Range:
+ this: 210-211
+ t.0: 211-212
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.GetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 215
+ t.0: 216
+Linear Range:
+ this: 214-215
+ t.0: 215-216
+Allocation:
+ this: t0
+ t.0: t0
+
+func Tree.SetHas_Left
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 219
+ val: 219
+Linear Range:
+ this: 218-219
+ val: 218-219
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.SetHas_Right
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 223
+ val: 223
+Linear Range:
+ this: 222-223
+ val: 222-223
+Allocation:
+ this: t0
+ val: t1
+
+func Tree.Compare
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this:
+ num1: 227-230 234
+ num2: 227-229
+ ntb: 232 238 243
+ nti: 229-230 234
+ t.0: 230
+ t.1: 235
+ t.2: 236
+Linear Range:
+ num1: 226-234
+ num2: 226-229
+ ntb: 231-243
+ nti: 228-234
+ t.0: 229-230
+ t.1: 234-235
+ t.2: 235-236
+Allocation:
+ num1: t0
+ num2: t1
+ ntb: t1
+ nti: t2
+ t.0: t1
+ t.1: t2
+ t.2: t2
+
+func Tree.Insert
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 246-249 252-255
+ v_key: 246-249 252-259 262-267 270-274 277-283 286-289 292-298 301-305 308-314 317-320 323-328
+ t.0: 247-248
+ new_node: 249 252-259 262-267 270-274 277-283 286-289 292-298 301-305 308-314 317-320 323-328
+ t.1: 253-254
+ ntb:
+ current_node: 256-259 262-267 270-274 277-283 286-289 292-298 301-305 308-314 317-320 323-328
+ cont: 258-259 262-267 270-274 277-280 283 286-289 292-298 301-305 308-311 314 317-320 323-328
+ t.2: 263-264
+ key_aux: 265
+ t.3: 266
+ t.4: 271-272
+ t.5: 273
+ t.6: 278-279
+ t.7: 287-288
+ t.8: 293-294
+ t.9: 302-303
+ t.10: 304
+ t.11: 309-310
+ t.12: 318-319
+ t.13: 324-325
+Linear Range:
+ this: 245-255 (cross call)
+ v_key: 245-328 (cross call)
+ t.0: 246-248
+ new_node: 248-328 (cross call)
+ t.1: 252-254
+ current_node: 255-328 (cross call)
+ cont: 256-328 (cross call)
+ t.2: 262-264
+ key_aux: 264-265
+ t.3: 265-266
+ t.4: 270-272
+ t.5: 272-273
+ t.6: 277-279
+ t.7: 286-288
+ t.8: 292-294
+ t.9: 301-303
+ t.10: 303-304
+ t.11: 308-310
+ t.12: 317-319
+ t.13: 323-325
+Allocation:
+ this: s0
+ v_key: s1
+ t.0: t0
+ new_node: s2
+ t.1: t0
+ current_node: s0
+ cont: s3
+ t.2: t0
+ key_aux: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.9: t0
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+
+func Tree.Delete
+ in 0, out 0, callee-saves 7, spills 0
+Live In:
+ this: 333-340 343-348 351-356 359-370 373-378 381-391 394-399 402-429
+ v_key: 333-340 343-348 351-356 359-370 373-378 381-391 394-399 402-429
+ current_node: 334-340 343-348 351-356 359-370 373-378 381-391 394-399 402-429
+ parent_node: 335-340 343-348 351-354 356 359-370 373-376 378 381-391 394-399 402-429
+ cont: 336-340 343-348 351-356 359-362 366-370 373-378 381-384 388 428-429
+ found: 337-340 343-348 351-356 359-370 373-378 381-388 425-431
+ is_root: 339-340 343-347 368-369 390 429
+ t.0: 344-345
+ key_aux: 346-347 368
+ t.1: 347
+ t.2: 352-353
+ t.3: 354
+ t.4: 360-361
+ t.5: 369
+ t.6: 374-375
+ t.7: 376
+ t.8: 382-383
+ t.10: 395-396
+ t.11: 397
+ t.12: 398
+ t.13: 403-404
+ t.14: 405
+ t.9: 406 410
+ ntb:
+ t.15: 415-416
+ t.16: 421-422
+Linear Range:
+ this: 332-429 (cross call)
+ v_key: 332-429 (cross call)
+ current_node: 333-429 (cross call)
+ parent_node: 334-429 (cross call)
+ cont: 335-429 (cross call)
+ found: 336-431 (cross call)
+ is_root: 337-429 (cross call)
+ t.0: 343-345
+ key_aux: 345-368
+ t.1: 346-347
+ t.2: 351-353
+ t.3: 353-354
+ t.4: 359-361
+ t.5: 368-369
+ t.6: 373-375
+ t.7: 375-376
+ t.8: 381-383
+ t.10: 394-396
+ t.11: 396-397
+ t.12: 397-398
+ t.13: 402-404
+ t.14: 404-405
+ t.9: 405-410
+ t.15: 414-416
+ t.16: 420-422
+Allocation:
+ this: s0
+ v_key: s1
+ current_node: s2
+ parent_node: s3
+ cont: s4
+ found: s5
+ is_root: s6
+ t.0: t0
+ key_aux: t0
+ t.1: t1
+ t.2: t1
+ t.3: t1
+ t.4: t1
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t0
+ t.14: t0
+ t.9: t0
+ t.15: t0
+ t.16: t0
+
+func Tree.Remove
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 434 437-443 446 449-455 458 461-464 467-470 473-480 483-485 495 498-500
+ p_node: 434 437-443 446 449-455 458 461-464 467-470 473-480 483-487 490-492 495 498-502 505-507
+ c_node: 434 437-443 446 449-455 458 461-463
+ t.0: 438-439
+ t.1: 440
+ t.2: 442-443
+ ntb:
+ t.3: 450-451
+ t.4: 452
+ t.5: 454-455
+ t.6: 462-463
+ auxkey1: 464 467-470 473-478
+ t.7: 468-469
+ t.8: 470 473-475
+ t.9: 474-475
+ auxkey2: 476-478
+ t.10: 477-478
+ t.11: 479
+ t.12: 484-486
+ t.13: 486
+ t.14: 491-492
+ t.15: 499-501
+ t.16: 501
+ t.17: 506-507
+Linear Range:
+ this: 433-500 (cross call)
+ p_node: 433-507 (cross call)
+ c_node: 433-463 (cross call)
+ t.0: 437-439
+ t.1: 439-440
+ t.2: 441-443
+ t.3: 449-451
+ t.4: 451-452
+ t.5: 453-455
+ t.6: 461-463
+ auxkey1: 463-478 (cross call)
+ t.7: 467-469
+ t.8: 469-475
+ t.9: 473-475
+ auxkey2: 475-478
+ t.10: 476-478
+ t.11: 478-479
+ t.12: 483-486
+ t.13: 485-486
+ t.14: 490-492
+ t.15: 498-501
+ t.16: 500-501
+ t.17: 505-507
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ auxkey1: s2
+ t.7: t0
+ t.8: t0
+ t.9: t1
+ auxkey2: t1
+ t.10: t0
+ t.11: t0
+ t.12: t0
+ t.13: t1
+ t.14: t1
+ t.15: t1
+ t.16: t0
+ t.17: t0
+
+func Tree.RemoveRight
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 515 518-522 525-527 530-533 536-541 544-549 552-554
+ p_node: 515 518-521 541 544-549 552-556 559-561
+ c_node: 515 518-522 525-527 530-533 536-541 544-547
+ t.0: 519-520
+ t.1: 521
+ t.2: 526-527 530-533 536-539
+ t.3: 531-532
+ t.4: 533 536-538
+ t.5: 537-538
+ t.6: 539
+ ntb:
+ t.7: 545-546
+ t.8: 553-555
+ t.9: 555
+ t.10: 560-561
+Linear Range:
+ this: 513-554 (cross call)
+ p_node: 513-561 (cross call)
+ c_node: 513-547 (cross call)
+ t.0: 518-520
+ t.1: 520-521
+ t.2: 525-539 (cross call)
+ t.3: 530-532
+ t.4: 532-538
+ t.5: 536-538
+ t.6: 538-539
+ t.7: 544-546
+ t.8: 552-555
+ t.9: 554-555
+ t.10: 559-561
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: s3
+ t.3: t0
+ t.4: t0
+ t.5: t1
+ t.6: t1
+ t.7: t1
+ t.8: t1
+ t.9: t0
+ t.10: t0
+
+func Tree.RemoveLeft
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 566 569-573 576-578 581-584 587-592 595-600 603-605
+ p_node: 566 569-572 592 595-600 603-607 610-612
+ c_node: 566 569-573 576-578 581-584 587-592 595-598
+ t.0: 570-571
+ t.1: 572
+ t.2: 577-578 581-584 587-590
+ t.3: 582-583
+ t.4: 584 587-589
+ t.5: 588-589
+ t.6: 590
+ ntb:
+ t.7: 596-597
+ t.8: 604-606
+ t.9: 606
+ t.10: 611-612
+Linear Range:
+ this: 564-605 (cross call)
+ p_node: 564-612 (cross call)
+ c_node: 564-598 (cross call)
+ t.0: 569-571
+ t.1: 571-572
+ t.2: 576-590 (cross call)
+ t.3: 581-583
+ t.4: 583-589
+ t.5: 587-589
+ t.6: 589-590
+ t.7: 595-597
+ t.8: 603-606
+ t.9: 605-606
+ t.10: 610-612
+Allocation:
+ this: s0
+ p_node: s1
+ c_node: s2
+ t.0: t0
+ t.1: t0
+ t.2: s3
+ t.3: t0
+ t.4: t0
+ t.5: t1
+ t.6: t1
+ t.7: t1
+ t.8: t1
+ t.9: t0
+ t.10: t0
+
+func Tree.Search
+ in 0, out 0, callee-saves 4, spills 0
+Live In:
+ this: 616
+ v_key: 616-621 624-629 632-636 639-650 653-657 660-673
+ current_node: 617-621 624-629 632-636 639-650 653-657 660-673
+ cont: 618-621 624-629 632-636 639-642 646-650 653-657 660-663 667 673
+ ifound: 620-621 624-629 632-636 639-650 653-657 660-667 670-675
+ t.0: 625-626
+ key_aux: 627-628 648
+ t.1: 628
+ t.2: 633-634
+ t.3: 635
+ t.4: 640-641
+ t.5: 649
+ t.6: 654-655
+ t.7: 656
+ t.8: 661-662
+Linear Range:
+ this: 615-616
+ v_key: 615-673 (cross call)
+ current_node: 616-673 (cross call)
+ cont: 617-673 (cross call)
+ ifound: 618-675 (cross call)
+ t.0: 624-626
+ key_aux: 626-648
+ t.1: 627-628
+ t.2: 632-634
+ t.3: 634-635
+ t.4: 639-641
+ t.5: 648-649
+ t.6: 653-655
+ t.7: 655-656
+ t.8: 660-662
+Allocation:
+ this: t0
+ v_key: s0
+ current_node: s1
+ cont: s2
+ ifound: s3
+ t.0: t0
+ key_aux: t0
+ t.1: t1
+ t.2: t1
+ t.3: t1
+ t.4: t1
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+
+func Tree.Print
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 678-681
+ current_node: 679-681
+ t.0: 680-681
+ ntb:
+Linear Range:
+ this: 677-681
+ current_node: 678-681
+ t.0: 679-681
+Allocation:
+ this: t0
+ current_node: t1
+ t.0: t2
+
+func Tree.RecPrint
+ in 0, out 0, callee-saves 3, spills 0
+Live In:
+ this: 685 688-694 697-705 708-712 715-721 724-727
+ node: 685 688-694 697-705 708-712 715-721 724-726
+ t.0: 689-690
+ t.1: 691
+ t.2: 693-694 697-700
+ t.3: 698-699
+ t.4: 700
+ ntb:
+ t.5: 709-710
+ t.6: 711
+ t.7: 716-717
+ t.8: 718
+ t.9: 720-721 724-727
+ t.10: 725-726
+ t.11: 727
+Linear Range:
+ this: 684-727 (cross call)
+ node: 684-726 (cross call)
+ t.0: 688-690
+ t.1: 690-691
+ t.2: 692-700 (cross call)
+ t.3: 697-699
+ t.4: 699-700
+ t.5: 708-710
+ t.6: 710-711
+ t.7: 715-717
+ t.8: 717-718
+ t.9: 719-727 (cross call)
+ t.10: 724-726
+ t.11: 726-727
+Allocation:
+ this: s0
+ node: s1
+ t.0: t0
+ t.1: t0
+ t.2: s2
+ t.3: t0
+ t.4: t0
+ t.5: t0
+ t.6: t0
+ t.7: t0
+ t.8: t0
+ t.9: s2
+ t.10: t0
+ t.11: t0
+
+func Tree.accept
+ in 0, out 0, callee-saves 0, spills 0
+Live In:
+ this: 735-736 739-741
+ v: 735-736 739-741
+ t.0: 740-741
+ nti:
+Linear Range:
+ this: 734-741
+ v: 734-741
+ t.0: 739-741
+Allocation:
+ this: t0
+ v: t1
+ t.0: t2
+
+func Visitor.visit
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 745 748-752 755-760 763-770 773-777 780-785 788-790
+ n: 745 748-752 755-760 763-770 773-777 780-782
+ t.0: 749-750
+ t.1: 751
+ t.2: 756-757
+ t.3: 758
+ t.4: 760 763-765
+ t.5: 764-765
+ nti:
+ t.6: 774-775
+ t.7: 776
+ t.8: 781-782
+ t.9: 783
+ t.10: 785 788-790
+ t.11: 789-790
+Linear Range:
+ this: 744-790 (cross call)
+ n: 744-782 (cross call)
+ t.0: 748-750
+ t.1: 750-751
+ t.2: 755-757
+ t.3: 757-758
+ t.4: 759-765
+ t.5: 763-765
+ t.6: 773-775
+ t.7: 775-776
+ t.8: 780-782
+ t.9: 782-783
+ t.10: 784-790
+ t.11: 788-790
+Allocation:
+ this: s0
+ n: s1
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t1
+ t.6: t1
+ t.7: t1
+ t.8: t1
+ t.9: t1
+ t.10: t1
+ t.11: t0
+
+func MyVisitor.visit
+ in 0, out 0, callee-saves 2, spills 0
+Live In:
+ this: 798 801-805 808-813 816-823 826-830 833-837 840-845 848-850
+ n: 798 801-805 808-813 816-823 826-830 833-837 840-842
+ t.0: 802-803
+ t.1: 804
+ t.2: 809-810
+ t.3: 811
+ t.4: 813 816-818
+ t.5: 817-818
+ nti:
+ t.6: 827-828
+ t.7: 829
+ t.8: 834-835
+ t.9: 836
+ t.10: 841-842
+ t.11: 843
+ t.12: 845 848-850
+ t.13: 849-850
+Linear Range:
+ this: 797-850 (cross call)
+ n: 797-842 (cross call)
+ t.0: 801-803
+ t.1: 803-804
+ t.2: 808-810
+ t.3: 810-811
+ t.4: 812-818
+ t.5: 816-818
+ t.6: 826-828
+ t.7: 828-829
+ t.8: 833-835
+ t.9: 835-836
+ t.10: 840-842
+ t.11: 842-843
+ t.12: 844-850
+ t.13: 848-850
+Allocation:
+ this: s0
+ n: s1
+ t.0: t0
+ t.1: t0
+ t.2: t0
+ t.3: t0
+ t.4: t0
+ t.5: t1
+ t.6: t1
+ t.7: t1
+ t.8: t1
+ t.9: t1
+ t.10: t1
+ t.11: t1
+ t.12: t1
+ t.13: t0
+
diff --git a/base/TreeVisitor.vapor b/base/TreeVisitor.vapor
new file mode 100644
index 0000000..d8aa63b
--- /dev/null
+++ b/base/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/base/TreeVisitor.vaporm b/base/TreeVisitor.vaporm
new file mode 100644
index 0000000..392cf0c
--- /dev/null
+++ b/base/TreeVisitor.vaporm
@@ -0,0 +1,1174 @@
+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 [in 0, out 0, local 0]
+ $t0 = HeapAllocZ(4)
+ [$t0] = :vmt_TV
+ if $t0 goto :null1
+ Error("null pointer")
+null1:
+ $t1 = [$t0]
+ $t1 = [$t1]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ ret
+
+func TV.Start [in 0, out 0, local 1]
+ local[0] = $s0
+ $t0 = HeapAllocZ(28)
+ [$t0] = :vmt_Tree
+ $s0 = $t0
+ if $s0 goto :null2
+ Error("null pointer")
+null2:
+ $t0 = [$s0]
+ $t0 = [$t0]
+ $a0 = $s0
+ $a1 = 16
+ call $t0
+ if $s0 goto :null3
+ Error("null pointer")
+null3:
+ $t0 = [$s0]
+ $t0 = [$t0+72]
+ $a0 = $s0
+ call $t0
+ PrintIntS(100000000)
+ if $s0 goto :null4
+ Error("null pointer")
+null4:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 8
+ call $t0
+ if $s0 goto :null5
+ Error("null pointer")
+null5:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 24
+ call $t0
+ if $s0 goto :null6
+ Error("null pointer")
+null6:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 4
+ call $t0
+ if $s0 goto :null7
+ Error("null pointer")
+null7:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 12
+ call $t0
+ if $s0 goto :null8
+ Error("null pointer")
+null8:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 20
+ call $t0
+ if $s0 goto :null9
+ Error("null pointer")
+null9:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 28
+ call $t0
+ if $s0 goto :null10
+ Error("null pointer")
+null10:
+ $t0 = [$s0]
+ $t0 = [$t0+48]
+ $a0 = $s0
+ $a1 = 14
+ call $t0
+ if $s0 goto :null11
+ Error("null pointer")
+null11:
+ $t0 = [$s0]
+ $t0 = [$t0+72]
+ $a0 = $s0
+ call $t0
+ PrintIntS(100000000)
+ $t0 = HeapAllocZ(12)
+ [$t0] = :vmt_MyVisitor
+ $t0 = $t0
+ PrintIntS(50000000)
+ if $s0 goto :null12
+ Error("null pointer")
+null12:
+ $t1 = [$s0]
+ $t1 = [$t1+80]
+ $a0 = $s0
+ $a1 = $t0
+ call $t1
+ PrintIntS(100000000)
+ if $s0 goto :null13
+ Error("null pointer")
+null13:
+ $t1 = [$s0]
+ $t1 = [$t1+68]
+ $a0 = $s0
+ $a1 = 24
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s0 goto :null14
+ Error("null pointer")
+null14:
+ $t1 = [$s0]
+ $t1 = [$t1+68]
+ $a0 = $s0
+ $a1 = 12
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s0 goto :null15
+ Error("null pointer")
+null15:
+ $t1 = [$s0]
+ $t1 = [$t1+68]
+ $a0 = $s0
+ $a1 = 16
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s0 goto :null16
+ Error("null pointer")
+null16:
+ $t1 = [$s0]
+ $t1 = [$t1+68]
+ $a0 = $s0
+ $a1 = 50
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s0 goto :null17
+ Error("null pointer")
+null17:
+ $t1 = [$s0]
+ $t1 = [$t1+68]
+ $a0 = $s0
+ $a1 = 12
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s0 goto :null18
+ Error("null pointer")
+null18:
+ $t1 = [$s0]
+ $t1 = [$t1+52]
+ $a0 = $s0
+ $a1 = 12
+ call $t1
+ if $s0 goto :null19
+ Error("null pointer")
+null19:
+ $t1 = [$s0]
+ $t1 = [$t1+72]
+ $a0 = $s0
+ call $t1
+ if $s0 goto :null20
+ Error("null pointer")
+null20:
+ $t1 = [$s0]
+ $t1 = [$t1+68]
+ $a0 = $s0
+ $a1 = 12
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ $v0 = 0
+ $s0 = local[0]
+ ret
+
+func Tree.Init [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+12] = $t1
+ [$t0+16] = 0
+ [$t0+20] = 0
+ $v0 = 1
+ ret
+
+func Tree.SetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+8] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+4] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetRight [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+8]
+ $v0 = $t0
+ ret
+
+func Tree.GetLeft [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+4]
+ $v0 = $t0
+ ret
+
+func Tree.GetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+12]
+ $v0 = $t0
+ ret
+
+func Tree.SetKey [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+12] = $t1
+ $v0 = 1
+ ret
+
+func Tree.GetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+20]
+ $v0 = $t0
+ ret
+
+func Tree.GetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t0 = [$t0+16]
+ $v0 = $t0
+ ret
+
+func Tree.SetHas_Left [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+16] = $t1
+ $v0 = 1
+ ret
+
+func Tree.SetHas_Right [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ [$t0+20] = $t1
+ $v0 = 1
+ ret
+
+func Tree.Compare [in 0, out 0, local 0]
+ $t0 = $a1
+ $t1 = $a2
+ $t2 = Add($t1 1)
+ $t1 = LtS($t0 $t1)
+ if0 $t1 goto :if1_else
+ $t1 = 0
+ goto :if1_end
+if1_else:
+ $t2 = LtS($t0 $t2)
+ $t2 = Sub(1 $t2)
+ if0 $t2 goto :if2_else
+ $t1 = 0
+ goto :if2_end
+if2_else:
+ $t1 = 1
+if2_end:
+if1_end:
+ $v0 = $t1
+ ret
+
+func Tree.Insert [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $t0 = HeapAllocZ(28)
+ [$t0] = :vmt_Tree
+ $s2 = $t0
+ if $s2 goto :null21
+ Error("null pointer")
+null21:
+ $t0 = [$s2]
+ $t0 = [$t0]
+ $a0 = $s2
+ $a1 = $s1
+ call $t0
+ $s0 = $s0
+ $s3 = 1
+while1_top:
+ if0 $s3 goto :while1_end
+ if $s0 goto :null22
+ Error("null pointer")
+null22:
+ $t0 = [$s0]
+ $t0 = [$t0+20]
+ $a0 = $s0
+ call $t0
+ $t0 = $v0
+ $t0 = LtS($s1 $t0)
+ if0 $t0 goto :if3_else
+ if $s0 goto :null23
+ Error("null pointer")
+null23:
+ $t0 = [$s0]
+ $t0 = [$t0+32]
+ $a0 = $s0
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if4_else
+ if $s0 goto :null24
+ Error("null pointer")
+null24:
+ $t0 = [$s0]
+ $t0 = [$t0+16]
+ $a0 = $s0
+ call $t0
+ $s0 = $v0
+ goto :if4_end
+if4_else:
+ $s3 = 0
+ if $s0 goto :null25
+ Error("null pointer")
+null25:
+ $t0 = [$s0]
+ $t0 = [$t0+36]
+ $a0 = $s0
+ $a1 = 1
+ call $t0
+ if $s0 goto :null26
+ Error("null pointer")
+null26:
+ $t0 = [$s0]
+ $t0 = [$t0+8]
+ $a0 = $s0
+ $a1 = $s2
+ call $t0
+if4_end:
+ goto :if3_end
+if3_else:
+ if $s0 goto :null27
+ Error("null pointer")
+null27:
+ $t0 = [$s0]
+ $t0 = [$t0+28]
+ $a0 = $s0
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if5_else
+ if $s0 goto :null28
+ Error("null pointer")
+null28:
+ $t0 = [$s0]
+ $t0 = [$t0+12]
+ $a0 = $s0
+ call $t0
+ $s0 = $v0
+ goto :if5_end
+if5_else:
+ $s3 = 0
+ if $s0 goto :null29
+ Error("null pointer")
+null29:
+ $t0 = [$s0]
+ $t0 = [$t0+40]
+ $a0 = $s0
+ $a1 = 1
+ call $t0
+ if $s0 goto :null30
+ Error("null pointer")
+null30:
+ $t0 = [$s0]
+ $t0 = [$t0+4]
+ $a0 = $s0
+ $a1 = $s2
+ call $t0
+if5_end:
+if3_end:
+ goto :while1_top
+while1_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Delete [in 0, out 0, local 7]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $s0
+ $s3 = $s0
+ $s4 = 1
+ $s5 = 0
+ $s6 = 1
+while2_top:
+ if0 $s4 goto :while2_end
+ if $s2 goto :null31
+ Error("null pointer")
+null31:
+ $t0 = [$s2]
+ $t0 = [$t0+20]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ $t1 = LtS($s1 $t0)
+ if0 $t1 goto :if6_else
+ if $s2 goto :null32
+ Error("null pointer")
+null32:
+ $t1 = [$s2]
+ $t1 = [$t1+32]
+ $a0 = $s2
+ call $t1
+ $t1 = $v0
+ if0 $t1 goto :if7_else
+ $s3 = $s2
+ if $s2 goto :null33
+ Error("null pointer")
+null33:
+ $t1 = [$s2]
+ $t1 = [$t1+16]
+ $a0 = $s2
+ call $t1
+ $s2 = $v0
+ goto :if7_end
+if7_else:
+ $s4 = 0
+if7_end:
+ goto :if6_end
+if6_else:
+ $t0 = LtS($t0 $s1)
+ if0 $t0 goto :if8_else
+ if $s2 goto :null34
+ Error("null pointer")
+null34:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if9_else
+ $s3 = $s2
+ if $s2 goto :null35
+ Error("null pointer")
+null35:
+ $t0 = [$s2]
+ $t0 = [$t0+12]
+ $a0 = $s2
+ call $t0
+ $s2 = $v0
+ goto :if9_end
+if9_else:
+ $s4 = 0
+if9_end:
+ goto :if8_end
+if8_else:
+ if0 $s6 goto :if10_else
+ if $s2 goto :null36
+ Error("null pointer")
+null36:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ $t0 = Sub(1 $t0)
+ if0 $t0 goto :ss1_else
+ if $s2 goto :null37
+ Error("null pointer")
+null37:
+ $t0 = [$s2]
+ $t0 = [$t0+32]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ $t0 = Sub(1 $t0)
+ goto :ss1_end
+ss1_else:
+ $t0 = 0
+ss1_end:
+ if0 $t0 goto :if11_else
+ goto :if11_end
+if11_else:
+ $t0 = [$s0]
+ $t0 = [$t0+56]
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call $t0
+if11_end:
+ goto :if10_end
+if10_else:
+ $t0 = [$s0]
+ $t0 = [$t0+56]
+ $a0 = $s0
+ $a1 = $s3
+ $a2 = $s2
+ call $t0
+if10_end:
+ $s5 = 1
+ $s4 = 0
+if8_end:
+if6_end:
+ $s6 = 0
+ goto :while2_top
+while2_end:
+ $v0 = $s5
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ ret
+
+func Tree.Remove [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+ if $s2 goto :null38
+ Error("null pointer")
+null38:
+ $t0 = [$s2]
+ $t0 = [$t0+32]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if12_else
+ $t0 = [$s0]
+ $t0 = [$t0+64]
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call $t0
+ goto :if12_end
+if12_else:
+ if $s2 goto :null39
+ Error("null pointer")
+null39:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if13_else
+ $t0 = [$s0]
+ $t0 = [$t0+60]
+ $a0 = $s0
+ $a1 = $s1
+ $a2 = $s2
+ call $t0
+ goto :if13_end
+if13_else:
+ if $s2 goto :null40
+ Error("null pointer")
+null40:
+ $t0 = [$s2]
+ $t0 = [$t0+20]
+ $a0 = $s2
+ call $t0
+ $s2 = $v0
+ if $s1 goto :null41
+ Error("null pointer")
+null41:
+ $t0 = [$s1]
+ $t0 = [$t0+16]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if $t0 goto :null42
+ Error("null pointer")
+null42:
+ $t1 = [$t0]
+ $t1 = [$t1+20]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ $t0 = [$s0]
+ $t0 = [$t0+44]
+ $a0 = $s0
+ $a1 = $s2
+ $a2 = $t1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if14_else
+ if $s1 goto :null43
+ Error("null pointer")
+null43:
+ $t0 = [$s1]
+ $t0 = [$t0+8]
+ $t1 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t1
+ call $t0
+ if $s1 goto :null44
+ Error("null pointer")
+null44:
+ $t1 = [$s1]
+ $t1 = [$t1+36]
+ $a0 = $s1
+ $a1 = 0
+ call $t1
+ goto :if14_end
+if14_else:
+ if $s1 goto :null45
+ Error("null pointer")
+null45:
+ $t1 = [$s1]
+ $t1 = [$t1+4]
+ $t0 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t0
+ call $t1
+ if $s1 goto :null46
+ Error("null pointer")
+null46:
+ $t0 = [$s1]
+ $t0 = [$t0+40]
+ $a0 = $s1
+ $a1 = 0
+ call $t0
+if14_end:
+if13_end:
+if12_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.RemoveRight [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while3_top:
+ if $s2 goto :null47
+ Error("null pointer")
+null47:
+ $t0 = [$s2]
+ $t0 = [$t0+28]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :while3_end
+ if $s2 goto :null48
+ Error("null pointer")
+null48:
+ $s3 = [$s2]
+ $s3 = [$s3+24]
+ if $s2 goto :null49
+ Error("null pointer")
+null49:
+ $t0 = [$s2]
+ $t0 = [$t0+12]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if $t0 goto :null50
+ Error("null pointer")
+null50:
+ $t1 = [$t0]
+ $t1 = [$t1+20]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ $a0 = $s2
+ $a1 = $t1
+ call $s3
+ $s1 = $s2
+ if $s2 goto :null51
+ Error("null pointer")
+null51:
+ $t1 = [$s2]
+ $t1 = [$t1+12]
+ $a0 = $s2
+ call $t1
+ $s2 = $v0
+ goto :while3_top
+while3_end:
+ if $s1 goto :null52
+ Error("null pointer")
+null52:
+ $t1 = [$s1]
+ $t1 = [$t1+4]
+ $t0 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t0
+ call $t1
+ if $s1 goto :null53
+ Error("null pointer")
+null53:
+ $t0 = [$s1]
+ $t0 = [$t0+40]
+ $a0 = $s1
+ $a1 = 0
+ call $t0
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.RemoveLeft [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $s0 = $a0
+ $s1 = $a1
+ $s2 = $a2
+while4_top:
+ if $s2 goto :null54
+ Error("null pointer")
+null54:
+ $t0 = [$s2]
+ $t0 = [$t0+32]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :while4_end
+ if $s2 goto :null55
+ Error("null pointer")
+null55:
+ $s3 = [$s2]
+ $s3 = [$s3+24]
+ if $s2 goto :null56
+ Error("null pointer")
+null56:
+ $t0 = [$s2]
+ $t0 = [$t0+16]
+ $a0 = $s2
+ call $t0
+ $t0 = $v0
+ if $t0 goto :null57
+ Error("null pointer")
+null57:
+ $t1 = [$t0]
+ $t1 = [$t1+20]
+ $a0 = $t0
+ call $t1
+ $t1 = $v0
+ $a0 = $s2
+ $a1 = $t1
+ call $s3
+ $s1 = $s2
+ if $s2 goto :null58
+ Error("null pointer")
+null58:
+ $t1 = [$s2]
+ $t1 = [$t1+16]
+ $a0 = $s2
+ call $t1
+ $s2 = $v0
+ goto :while4_top
+while4_end:
+ if $s1 goto :null59
+ Error("null pointer")
+null59:
+ $t1 = [$s1]
+ $t1 = [$t1+8]
+ $t0 = [$s0+24]
+ $a0 = $s1
+ $a1 = $t0
+ call $t1
+ if $s1 goto :null60
+ Error("null pointer")
+null60:
+ $t0 = [$s1]
+ $t0 = [$t0+36]
+ $a0 = $s1
+ $a1 = 0
+ call $t0
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Search [in 0, out 0, local 4]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ $t0 = $a0
+ $s0 = $a1
+ $s1 = $t0
+ $s2 = 1
+ $s3 = 0
+while5_top:
+ if0 $s2 goto :while5_end
+ if $s1 goto :null61
+ Error("null pointer")
+null61:
+ $t0 = [$s1]
+ $t0 = [$t0+20]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $t1 = LtS($s0 $t0)
+ if0 $t1 goto :if15_else
+ if $s1 goto :null62
+ Error("null pointer")
+null62:
+ $t1 = [$s1]
+ $t1 = [$t1+32]
+ $a0 = $s1
+ call $t1
+ $t1 = $v0
+ if0 $t1 goto :if16_else
+ if $s1 goto :null63
+ Error("null pointer")
+null63:
+ $t1 = [$s1]
+ $t1 = [$t1+16]
+ $a0 = $s1
+ call $t1
+ $s1 = $v0
+ goto :if16_end
+if16_else:
+ $s2 = 0
+if16_end:
+ goto :if15_end
+if15_else:
+ $t0 = LtS($t0 $s0)
+ if0 $t0 goto :if17_else
+ if $s1 goto :null64
+ Error("null pointer")
+null64:
+ $t0 = [$s1]
+ $t0 = [$t0+28]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if18_else
+ if $s1 goto :null65
+ Error("null pointer")
+null65:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $s1 = $v0
+ goto :if18_end
+if18_else:
+ $s2 = 0
+if18_end:
+ goto :if17_end
+if17_else:
+ $s3 = 1
+ $s2 = 0
+if17_end:
+if15_end:
+ goto :while5_top
+while5_end:
+ $v0 = $s3
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ ret
+
+func Tree.Print [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $t0
+ $t2 = [$t0]
+ $t2 = [$t2+76]
+ $a0 = $t0
+ $a1 = $t1
+ call $t2
+ $v0 = 1
+ ret
+
+func Tree.RecPrint [in 0, out 0, local 3]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null66
+ Error("null pointer")
+null66:
+ $t0 = [$s1]
+ $t0 = [$t0+32]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if19_else
+ $s2 = [$s0]
+ $s2 = [$s2+76]
+ if $s1 goto :null67
+ Error("null pointer")
+null67:
+ $t0 = [$s1]
+ $t0 = [$t0+16]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call $s2
+ goto :if19_end
+if19_else:
+if19_end:
+ if $s1 goto :null68
+ Error("null pointer")
+null68:
+ $t0 = [$s1]
+ $t0 = [$t0+20]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ PrintIntS($t0)
+ if $s1 goto :null69
+ Error("null pointer")
+null69:
+ $t0 = [$s1]
+ $t0 = [$t0+28]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if20_else
+ $s2 = [$s0]
+ $s2 = [$s2+76]
+ if $s1 goto :null70
+ Error("null pointer")
+null70:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ $a0 = $s0
+ $a1 = $t0
+ call $s2
+ goto :if20_end
+if20_else:
+if20_end:
+ $v0 = 1
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ ret
+
+func Tree.accept [in 0, out 0, local 0]
+ $t0 = $a0
+ $t1 = $a1
+ PrintIntS(333)
+ if $t1 goto :null71
+ Error("null pointer")
+null71:
+ $t2 = [$t1]
+ $t2 = [$t2]
+ $a0 = $t1
+ $a1 = $t0
+ call $t2
+ $v0 = 0
+ ret
+
+func Visitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null72
+ Error("null pointer")
+null72:
+ $t0 = [$s1]
+ $t0 = [$t0+28]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if21_else
+ if $s1 goto :null73
+ Error("null pointer")
+null73:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ [$s0+8] = $t0
+ $t0 = [$s0+8]
+ if $t0 goto :null74
+ Error("null pointer")
+null74:
+ $t1 = [$t0]
+ $t1 = [$t1+80]
+ $a0 = $t0
+ $a1 = $s0
+ call $t1
+ goto :if21_end
+if21_else:
+if21_end:
+ if $s1 goto :null75
+ Error("null pointer")
+null75:
+ $t1 = [$s1]
+ $t1 = [$t1+32]
+ $a0 = $s1
+ call $t1
+ $t1 = $v0
+ if0 $t1 goto :if22_else
+ if $s1 goto :null76
+ Error("null pointer")
+null76:
+ $t1 = [$s1]
+ $t1 = [$t1+16]
+ $a0 = $s1
+ call $t1
+ $t1 = $v0
+ [$s0+4] = $t1
+ $t1 = [$s0+4]
+ if $t1 goto :null77
+ Error("null pointer")
+null77:
+ $t0 = [$t1]
+ $t0 = [$t0+80]
+ $a0 = $t1
+ $a1 = $s0
+ call $t0
+ goto :if22_end
+if22_else:
+if22_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
+func MyVisitor.visit [in 0, out 0, local 2]
+ local[0] = $s0
+ local[1] = $s1
+ $s0 = $a0
+ $s1 = $a1
+ if $s1 goto :null78
+ Error("null pointer")
+null78:
+ $t0 = [$s1]
+ $t0 = [$t0+28]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ if0 $t0 goto :if23_else
+ if $s1 goto :null79
+ Error("null pointer")
+null79:
+ $t0 = [$s1]
+ $t0 = [$t0+12]
+ $a0 = $s1
+ call $t0
+ $t0 = $v0
+ [$s0+8] = $t0
+ $t0 = [$s0+8]
+ if $t0 goto :null80
+ Error("null pointer")
+null80:
+ $t1 = [$t0]
+ $t1 = [$t1+80]
+ $a0 = $t0
+ $a1 = $s0
+ call $t1
+ goto :if23_end
+if23_else:
+if23_end:
+ if $s1 goto :null81
+ Error("null pointer")
+null81:
+ $t1 = [$s1]
+ $t1 = [$t1+20]
+ $a0 = $s1
+ call $t1
+ $t1 = $v0
+ PrintIntS($t1)
+ if $s1 goto :null82
+ Error("null pointer")
+null82:
+ $t1 = [$s1]
+ $t1 = [$t1+32]
+ $a0 = $s1
+ call $t1
+ $t1 = $v0
+ if0 $t1 goto :if24_else
+ if $s1 goto :null83
+ Error("null pointer")
+null83:
+ $t1 = [$s1]
+ $t1 = [$t1+16]
+ $a0 = $s1
+ call $t1
+ $t1 = $v0
+ [$s0+4] = $t1
+ $t1 = [$s0+4]
+ if $t1 goto :null84
+ Error("null pointer")
+null84:
+ $t0 = [$t1]
+ $t0 = [$t0+80]
+ $a0 = $t1
+ $a1 = $s0
+ call $t0
+ goto :if24_end
+if24_else:
+if24_end:
+ $v0 = 0
+ $s0 = local[0]
+ $s1 = local[1]
+ ret
+
diff --git a/base/ex29.java b/base/ex29.java
new file mode 100644
index 0000000..30ea154
--- /dev/null
+++ b/base/ex29.java
@@ -0,0 +1,5 @@
+class ex29 {
+ public static void main(String[] a) {
+ int x ;
+ }
+}
diff --git a/base/ex30.java b/base/ex30.java
new file mode 100644
index 0000000..4a5064d
--- /dev/null
+++ b/base/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/base/ex31.java b/base/ex31.java
new file mode 100644
index 0000000..d276e68
--- /dev/null
+++ b/base/ex31.java
@@ -0,0 +1,16 @@
+class ex31 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ }
+}
+
+class A {
+ public int foo() {
+ return 22 ;
+ }
+
+ public int bar() {
+ return 42 ;
+ }
+}
diff --git a/base/ex32.java b/base/ex32.java
new file mode 100644
index 0000000..f38ef62
--- /dev/null
+++ b/base/ex32.java
@@ -0,0 +1,14 @@
+class ex32 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.foo(12, 14, 15, 12 + 23)) ;
+ }
+}
+
+class A {
+ int z ;
+ public int foo(int a, int b, int c, int d) {
+ return 22 ;
+ }
+}
diff --git a/base/ex33.java b/base/ex33.java
new file mode 100644
index 0000000..d7f23ed
--- /dev/null
+++ b/base/ex33.java
@@ -0,0 +1,23 @@
+class ex33 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.bar(0-1, 400, 6*7)) ;
+ System.out.println(a.foo(0+1, 400)) ;
+ }
+}
+
+class A {
+
+ int o ;
+ int q ;
+
+ public int foo(int a, int b) {
+ o = 3 ;
+ return 22 ;
+ }
+
+ public int bar(int x, int y, int z) {
+ return 6 ;
+ }
+}
diff --git a/base/ex34.java b/base/ex34.java
new file mode 100644
index 0000000..eb5b18f
--- /dev/null
+++ b/base/ex34.java
@@ -0,0 +1,20 @@
+class ex34 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(1) ;
+ System.out.println(a.foo(2)) ;
+ }
+}
+
+class A {
+
+ int c ;
+
+ public int foo(int b) {
+ int c ;
+ c = 42 ;
+ return c ;
+ }
+
+}
diff --git a/base/ex35.java b/base/ex35.java
new file mode 100644
index 0000000..52585af
--- /dev/null
+++ b/base/ex35.java
@@ -0,0 +1,11 @@
+class ex35{
+ public static void main(String[] a){
+ System.out.println(new Fac().ComputeFac(10));
+ }
+}
+
+class Fac {
+ public int ComputeFac(int num){
+ return 4 ;
+ }
+}
diff --git a/base/ex36.java b/base/ex36.java
new file mode 100644
index 0000000..333bd7d
--- /dev/null
+++ b/base/ex36.java
@@ -0,0 +1,15 @@
+class ex36{
+ public static void main(String[] a){
+ Fac b ;
+ b = new Fac() ;
+ System.out.println(b.ComputeFac(10));
+ }
+}
+
+class Fac {
+ public int ComputeFac(int num){
+ int num_aux ;
+ num_aux = 4 ;
+ return num_aux ;
+ }
+}
diff --git a/base/ex37.java b/base/ex37.java
new file mode 100644
index 0000000..867116a
--- /dev/null
+++ b/base/ex37.java
@@ -0,0 +1,20 @@
+class ex37 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.foo()) ;
+ }
+}
+
+class A {
+
+ public int foo() {
+ int v ;
+ v = 0 ;
+ while (v < 10) {
+ v = v + 1 ;
+ }
+ return v ;
+ }
+
+}
diff --git a/base/ex38.java b/base/ex38.java
new file mode 100644
index 0000000..2a021eb
--- /dev/null
+++ b/base/ex38.java
@@ -0,0 +1,20 @@
+class ex38 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.foo()) ;
+ }
+}
+
+class A {
+
+ public int foo() {
+ int v ;
+ v = 0 ;
+ while (v < 10) {
+ v = v + 1 ;
+ }
+ return v ;
+ }
+
+}
diff --git a/base/ex39.java b/base/ex39.java
new file mode 100644
index 0000000..23526de
--- /dev/null
+++ b/base/ex39.java
@@ -0,0 +1,12 @@
+class ex39 {
+ public static void main(String[] z) {
+ int a ;
+ int b ;
+ a = 0 ;
+ b = 2 * a ;
+ b = b + a ;
+ b = b - 1 ;
+ System.out.println(a) ;
+ System.out.println(b) ;
+ }
+}
diff --git a/base/ex40.java b/base/ex40.java
new file mode 100644
index 0000000..f2f121d
--- /dev/null
+++ b/base/ex40.java
@@ -0,0 +1,19 @@
+class ex40 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.add_two(12)) ;
+ }
+}
+
+class A {
+
+ int c ;
+
+ public int add_two(int b) {
+ c = 2 ;
+ b = b + c ;
+ return b ;
+ }
+
+}
diff --git a/base/ex41.java b/base/ex41.java
new file mode 100644
index 0000000..e07e962
--- /dev/null
+++ b/base/ex41.java
@@ -0,0 +1,25 @@
+class ex41 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.foo()) ;
+ }
+}
+
+class A {
+
+ public int foo() {
+ int v ;
+ int w ;
+ v = 0 ;
+ w = 0 ;
+ while (v < 10) {
+ while (w < 100) {
+ w = w + 1 ;
+ }
+ v = v + 1 ;
+ }
+ return w ;
+ }
+
+}
diff --git a/base/ex42.java b/base/ex42.java
new file mode 100644
index 0000000..9ee7efa
--- /dev/null
+++ b/base/ex42.java
@@ -0,0 +1,26 @@
+class ex42 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.Init(42, 10000, true, 156, 123)) ;
+ }
+}
+
+class A {
+
+ int age ;
+ int Salary ;
+ boolean Married ;
+ int weight ;
+ int height ;
+
+ public boolean Init(int v_age, int v_Salary, boolean v_Married, int v_weight, int v_height) {
+ age = v_age ;
+ Salary = v_Salary ;
+ Married = v_Married ;
+ weight = v_weight ;
+ height = v_height ;
+ return true ;
+ }
+
+}
diff --git a/base/ex43.java b/base/ex43.java
new file mode 100644
index 0000000..80657d9
--- /dev/null
+++ b/base/ex43.java
@@ -0,0 +1,22 @@
+class ex43 {
+ public static void main(String[] z) {
+ A a ;
+ a = new A() ;
+ System.out.println(a.foo()) ;
+ }
+}
+
+class A {
+
+ public int foo() {
+ int v ;
+ v = 1 ;
+ if (5 < v) {
+ System.out.println(1) ;
+ } else {
+ System.out.println(0) ;
+ }
+ return v ;
+ }
+
+}
diff --git a/base/ex44.java b/base/ex44.java
new file mode 100644
index 0000000..06c8d55
--- /dev/null
+++ b/base/ex44.java
@@ -0,0 +1,16 @@
+class ex44{
+ public static void main(String[] a){
+ System.out.println(new Operator().compute());
+ }
+}
+
+class Operator{
+
+ boolean result;
+
+ public int compute(){
+ boolean result ;
+ result = true && false;
+ return 0 ;
+ }
+}
diff --git a/base/ex45.java b/base/ex45.java
new file mode 100644
index 0000000..72f85d4
--- /dev/null
+++ b/base/ex45.java
@@ -0,0 +1,19 @@
+class ex45 {
+ public static void main(String[] z) {
+ int result ;
+ A a ;
+ a = new A() ;
+ result = a.run() ;
+ System.out.println(result) ;
+ }
+}
+
+class A {
+
+ int[] arr ;
+
+ public int run() {
+ arr = new int[10] ;
+ return arr.length ;
+ }
+}
diff --git a/base/ex46.java b/base/ex46.java
new file mode 100644
index 0000000..55724d6
--- /dev/null
+++ b/base/ex46.java
@@ -0,0 +1,32 @@
+class ex46 {
+ public static void main(String[] z) {
+ int result ;
+ A a ;
+ a = new A() ;
+ System.out.println(a.foo()) ;
+ System.out.println(a.foo()) ;
+ result = a.bar(10, 20);
+ System.out.println(result) ;
+ }
+}
+
+class A {
+
+ int c ;
+ int d ;
+
+ public int foo() {
+ d = 0 ;
+ c = 1 + 2 ;
+ d = c + d ;
+ return d ;
+ }
+
+ public int bar(int a, int b) {
+ int result ;
+ c = a ;
+ d = b ;
+ result = c * d ;
+ return result ;
+ }
+}
diff --git a/base/ex47.java b/base/ex47.java
new file mode 100644
index 0000000..ea4e342
--- /dev/null
+++ b/base/ex47.java
@@ -0,0 +1,24 @@
+class ex47 {
+ public static void main(String[] z) {
+ int result ;
+ A a ;
+ a = new A() ;
+ System.out.println(a.set(42)) ;
+ System.out.println(a.get()) ;
+ }
+}
+
+class A {
+
+ int[] x ;
+
+ public int set(int b) {
+ x = new int[12] ;
+ x[5] = b ;
+ return x.length ;
+ }
+
+ public int get() {
+ return x[5] ;
+ }
+}
diff --git a/base/ex48.java b/base/ex48.java
new file mode 100644
index 0000000..21424ba
--- /dev/null
+++ b/base/ex48.java
@@ -0,0 +1,23 @@
+class ex48 {
+ public static void main(String[] z) {
+ int result ;
+ A a ;
+ a = new A() ;
+ System.out.println(a.set(42)) ;
+ System.out.println(a.get()) ;
+ }
+}
+
+class A {
+
+ int x ;
+
+ public int set(int b) {
+ x = b ;
+ return x ;
+ }
+
+ public int get() {
+ return x ;
+ }
+}
diff --git a/base/ex49.java b/base/ex49.java
new file mode 100644
index 0000000..d28a887
--- /dev/null
+++ b/base/ex49.java
@@ -0,0 +1,26 @@
+class ex49 {
+ public static void main(String[] z) {
+ int result ;
+ A a ;
+ a = new A() ;
+ System.out.println(a.set()) ;
+ }
+}
+
+class A {
+
+ int b ;
+
+ public int set() {
+ b = 3 ;
+ return 1 ;
+ }
+}
+
+class B extends A {
+
+ public int get() {
+ b = 12 ;
+ return b ;
+ }
+}
diff --git a/base/ex50.java b/base/ex50.java
new file mode 100644
index 0000000..576af0e
--- /dev/null
+++ b/base/ex50.java
@@ -0,0 +1,35 @@
+class ex50 {
+ public static void main(String[] z) {
+ int result ;
+ A a ;
+ a = new A() ;
+ System.out.println(a.set_get()) ;
+ }
+}
+
+class A {
+
+ B b ;
+
+ public int set_get() {
+ int r ;
+ b = new B() ;
+ r = b.set() ;
+ r = b.get() ;
+ return r ;
+ }
+}
+
+class B {
+
+ int x ;
+
+ public int get() {
+ return x ;
+ }
+
+ public int set() {
+ x = 12 ;
+ return 1 ;
+ }
+}