From 1851f5e76018ec1df3b55dce6cc9a64c9497bf7a Mon Sep 17 00:00:00 2001 From: bd-912 Date: Fri, 26 Apr 2024 15:50:38 -0600 Subject: Rearrange directory structure --- J2V.java | 2 +- Typecheck.java | 2 +- V2VM.java | 2 +- base/BinaryTree-error.java | 334 +++++++ base/BinaryTree.java | 334 +++++++ base/BinaryTree.names.vaporm | 996 ++++++++++++++++++++ base/BinaryTree.opt.names.vaporm | 797 ++++++++++++++++ base/BinaryTree.opt.regalloc | 451 +++++++++ base/BinaryTree.opt.vapor | 526 +++++++++++ base/BinaryTree.opt.vaporm | 797 ++++++++++++++++ base/BinaryTree.regalloc | 703 ++++++++++++++ base/BinaryTree.vapor | 719 ++++++++++++++ base/BinaryTree.vaporm | 996 ++++++++++++++++++++ base/Branch-error.java | 11 + base/Branch.java | 11 + base/BubbleSort-error.java | 93 ++ base/BubbleSort.java | 93 ++ base/BubbleSort.names.vaporm | 316 +++++++ base/BubbleSort.opt.names.vaporm | 301 ++++++ base/BubbleSort.opt.regalloc | 230 +++++ base/BubbleSort.opt.vapor | 277 ++++++ base/BubbleSort.opt.vaporm | 301 ++++++ base/BubbleSort.regalloc | 245 +++++ base/BubbleSort.vapor | 292 ++++++ base/BubbleSort.vaporm | 316 +++++++ base/DeclareNone.java | 6 + base/Empty.java | 5 + base/Factorial-error.java | 16 + base/Factorial.java | 16 + base/Factorial.names.vaporm | 40 + base/Factorial.opt.names.vaporm | 30 + base/Factorial.opt.regalloc | 33 + base/Factorial.opt.vapor | 20 + base/Factorial.opt.vaporm | 30 + base/Factorial.regalloc | 42 + base/Factorial.vapor | 30 + base/Factorial.vaporm | 40 + base/FactorialEdit.java | 20 + base/IsPositive.java | 29 + base/LinearSearch-error.java | 99 ++ base/LinearSearch.java | 99 ++ base/LinearSearch.names.vaporm | 182 ++++ base/LinearSearch.opt.names.vaporm | 162 ++++ base/LinearSearch.opt.regalloc | 169 ++++ base/LinearSearch.opt.vapor | 130 +++ base/LinearSearch.opt.vaporm | 162 ++++ base/LinearSearch.regalloc | 193 ++++ base/LinearSearch.vapor | 150 +++ base/LinearSearch.vaporm | 182 ++++ base/LinkedList-error.java | 278 ++++++ base/LinkedList.java | 278 ++++++ base/LinkedList.names.vaporm | 698 ++++++++++++++ base/LinkedList.opt.names.vaporm | 562 +++++++++++ base/LinkedList.opt.regalloc | 362 +++++++ base/LinkedList.opt.vapor | 373 ++++++++ base/LinkedList.opt.vaporm | 562 +++++++++++ base/LinkedList.regalloc | 539 +++++++++++ base/LinkedList.vapor | 505 ++++++++++ base/LinkedList.vaporm | 698 ++++++++++++++ base/MoreThan4-error.java | 29 + base/MoreThan4.java | 29 + base/MoreThan4.names.vaporm | 68 ++ base/MoreThan4.opt.names.vaporm | 57 ++ base/MoreThan4.opt.regalloc | 64 ++ base/MoreThan4.opt.vapor | 27 + base/MoreThan4.opt.vaporm | 57 ++ base/MoreThan4.regalloc | 73 ++ base/MoreThan4.vapor | 38 + base/MoreThan4.vaporm | 68 ++ base/NewNone.java | 9 + base/Operator.java | 15 + base/Printer-error.java | 5 + base/Printer.java | 5 + base/QuickSort-error.java | 112 +++ base/QuickSort.java | 112 +++ base/QuickSort.names.vaporm | 439 +++++++++ base/QuickSort.opt.names.vaporm | 418 +++++++++ base/QuickSort.opt.regalloc | 286 ++++++ base/QuickSort.opt.vapor | 378 ++++++++ base/QuickSort.opt.vaporm | 418 +++++++++ base/QuickSort.regalloc | 313 +++++++ base/QuickSort.vapor | 399 ++++++++ base/QuickSort.vaporm | 439 +++++++++ base/RetrieveInteger.java | 17 + base/ShortCircuit.opt.vapor | 215 +++++ base/ShortCircuit.vapor | 128 +++ base/SimpleArithmetic.java | 6 + base/SimpleArray-error.java | 6 + base/SimpleArray.java | 6 + base/TreeVisitor-error.java | 376 ++++++++ base/TreeVisitor.java | 374 ++++++++ base/TreeVisitor.names.vaporm | 1174 +++++++++++++++++++++++ base/TreeVisitor.opt.names.vaporm | 948 +++++++++++++++++++ base/TreeVisitor.opt.regalloc | 539 +++++++++++ base/TreeVisitor.opt.vapor | 635 +++++++++++++ base/TreeVisitor.opt.vaporm | 948 +++++++++++++++++++ base/TreeVisitor.regalloc | 830 +++++++++++++++++ base/TreeVisitor.vapor | 855 +++++++++++++++++ base/TreeVisitor.vaporm | 1174 +++++++++++++++++++++++ base/ex29.java | 5 + base/ex30.java | 11 + base/ex31.java | 16 + base/ex32.java | 14 + base/ex33.java | 23 + base/ex34.java | 20 + base/ex35.java | 11 + base/ex36.java | 15 + base/ex37.java | 20 + base/ex38.java | 20 + base/ex39.java | 12 + base/ex40.java | 19 + base/ex41.java | 25 + base/ex42.java | 26 + base/ex43.java | 22 + base/ex44.java | 16 + base/ex45.java | 19 + base/ex46.java | 32 + base/ex47.java | 24 + base/ex48.java | 23 + base/ex49.java | 26 + base/ex50.java | 35 + boil/BoilVisitor.java | 1294 ++++++++++++++++++++++++++ boil/TypeFactory.java | 51 + boil/library/BoilVisitor.java | 1294 -------------------------- boil/library/TypeFactory.java | 51 - boil/tests/BinaryTree.java | 334 ------- boil/tests/BubbleSort.java | 93 -- boil/tests/Factorial.java | 16 - boil/tests/LinearSearch.java | 99 -- boil/tests/LinkedList.java | 278 ------ boil/tests/MoreThan4.java | 29 - boil/tests/QuickSort.java | 112 --- boil/tests/TreeVisitor.java | 374 -------- boil/tests/ex29.java | 5 - boil/tests/ex30.java | 11 - boil/tests/ex31.java | 16 - boil/tests/ex32.java | 14 - boil/tests/ex33.java | 23 - boil/tests/ex34.java | 20 - boil/tests/ex35.java | 11 - boil/tests/ex36.java | 15 - boil/tests/ex37.java | 20 - boil/tests/ex38.java | 20 - boil/tests/ex39.java | 12 - boil/tests/ex40.java | 19 - boil/tests/ex41.java | 25 - boil/tests/ex42.java | 26 - boil/tests/ex43.java | 22 - boil/tests/ex44.java | 16 - boil/tests/ex45.java | 19 - boil/tests/ex46.java | 32 - boil/tests/ex47.java | 24 - boil/tests/ex48.java | 23 - boil/tests/ex49.java | 26 - boil/tests/ex50.java | 35 - test.sh | 2 +- typecheck/TypeCheckSimp.java | 1097 ++++++++++++++++++++++ typecheck/library/TypeCheckSimp.java | 1097 ---------------------- typecheck/tests/BinaryTree-error.java | 334 ------- typecheck/tests/BinaryTree.java | 334 ------- typecheck/tests/Branch-error.java | 11 - typecheck/tests/Branch.java | 11 - typecheck/tests/BubbleSort-error.java | 93 -- typecheck/tests/BubbleSort.java | 93 -- typecheck/tests/DeclareNone.java | 6 - typecheck/tests/Empty.java | 5 - typecheck/tests/Factorial-error.java | 16 - typecheck/tests/Factorial.java | 16 - typecheck/tests/FactorialEdit.java | 20 - typecheck/tests/IsPositive.java | 29 - typecheck/tests/LinearSearch-error.java | 99 -- typecheck/tests/LinearSearch.java | 99 -- typecheck/tests/LinkedList-error.java | 278 ------ typecheck/tests/LinkedList.java | 278 ------ typecheck/tests/MoreThan4-error.java | 29 - typecheck/tests/MoreThan4.java | 29 - typecheck/tests/NewNone.java | 9 - typecheck/tests/Operator.java | 15 - typecheck/tests/Printer-error.java | 5 - typecheck/tests/Printer.java | 5 - typecheck/tests/QuickSort-error.java | 112 --- typecheck/tests/QuickSort.java | 112 --- typecheck/tests/RetrieveInteger.java | 17 - typecheck/tests/SimpleArithmetic.java | 6 - typecheck/tests/SimpleArray-error.java | 6 - typecheck/tests/SimpleArray.java | 6 - typecheck/tests/TreeVisitor-error.java | 376 -------- typecheck/tests/TreeVisitor.java | 374 -------- vaporize/Kettle.java | 116 +++ vaporize/LIRDict.java | 86 ++ vaporize/LIRVar.java | 80 ++ vaporize/LIRVisitor.java | 258 +++++ vaporize/RegisterAlloc.java | 71 ++ vaporize/SpillEverywhere.java | 92 ++ vaporize/TransientInterval.java | 21 + vaporize/VaporizeVisitor.java | 271 ++++++ vaporize/library/Kettle.java | 116 --- vaporize/library/LIRDict.java | 86 -- vaporize/library/LIRVar.java | 81 -- vaporize/library/LIRVisitor.java | 258 ----- vaporize/library/RegisterAlloc.java | 71 -- vaporize/library/SpillEverywhere.java | 92 -- vaporize/library/TransientInterval.java | 21 - vaporize/library/VaporizeVisitor.java | 269 ------ vaporize/tests/BinaryTree.names.vaporm | 996 -------------------- vaporize/tests/BinaryTree.opt.names.vaporm | 797 ---------------- vaporize/tests/BinaryTree.opt.regalloc | 451 --------- vaporize/tests/BinaryTree.opt.vapor | 526 ----------- vaporize/tests/BinaryTree.opt.vaporm | 797 ---------------- vaporize/tests/BinaryTree.regalloc | 703 -------------- vaporize/tests/BinaryTree.vapor | 719 -------------- vaporize/tests/BinaryTree.vaporm | 996 -------------------- vaporize/tests/BubbleSort.names.vaporm | 316 ------- vaporize/tests/BubbleSort.opt.names.vaporm | 301 ------ vaporize/tests/BubbleSort.opt.regalloc | 230 ----- vaporize/tests/BubbleSort.opt.vapor | 277 ------ vaporize/tests/BubbleSort.opt.vaporm | 301 ------ vaporize/tests/BubbleSort.regalloc | 245 ----- vaporize/tests/BubbleSort.vapor | 292 ------ vaporize/tests/BubbleSort.vaporm | 316 ------- vaporize/tests/Factorial.names.vaporm | 40 - vaporize/tests/Factorial.opt.names.vaporm | 30 - vaporize/tests/Factorial.opt.regalloc | 33 - vaporize/tests/Factorial.opt.vapor | 20 - vaporize/tests/Factorial.opt.vaporm | 30 - vaporize/tests/Factorial.regalloc | 42 - vaporize/tests/Factorial.vapor | 30 - vaporize/tests/Factorial.vaporm | 40 - vaporize/tests/LinearSearch.names.vaporm | 182 ---- vaporize/tests/LinearSearch.opt.names.vaporm | 162 ---- vaporize/tests/LinearSearch.opt.regalloc | 169 ---- vaporize/tests/LinearSearch.opt.vapor | 130 --- vaporize/tests/LinearSearch.opt.vaporm | 162 ---- vaporize/tests/LinearSearch.regalloc | 193 ---- vaporize/tests/LinearSearch.vapor | 150 --- vaporize/tests/LinearSearch.vaporm | 182 ---- vaporize/tests/LinkedList.names.vaporm | 698 -------------- vaporize/tests/LinkedList.opt.names.vaporm | 562 ----------- vaporize/tests/LinkedList.opt.regalloc | 362 ------- vaporize/tests/LinkedList.opt.vapor | 373 -------- vaporize/tests/LinkedList.opt.vaporm | 562 ----------- vaporize/tests/LinkedList.regalloc | 539 ----------- vaporize/tests/LinkedList.vapor | 505 ---------- vaporize/tests/LinkedList.vaporm | 698 -------------- vaporize/tests/MoreThan4.names.vaporm | 68 -- vaporize/tests/MoreThan4.opt.names.vaporm | 57 -- vaporize/tests/MoreThan4.opt.regalloc | 64 -- vaporize/tests/MoreThan4.opt.vapor | 27 - vaporize/tests/MoreThan4.opt.vaporm | 57 -- vaporize/tests/MoreThan4.regalloc | 73 -- vaporize/tests/MoreThan4.vapor | 38 - vaporize/tests/MoreThan4.vaporm | 68 -- vaporize/tests/QuickSort.names.vaporm | 439 --------- vaporize/tests/QuickSort.opt.names.vaporm | 418 --------- vaporize/tests/QuickSort.opt.regalloc | 286 ------ vaporize/tests/QuickSort.opt.vapor | 378 -------- vaporize/tests/QuickSort.opt.vaporm | 418 --------- vaporize/tests/QuickSort.regalloc | 313 ------- vaporize/tests/QuickSort.vapor | 399 -------- vaporize/tests/QuickSort.vaporm | 439 --------- vaporize/tests/ShortCircuit.opt.vapor | 215 ----- vaporize/tests/ShortCircuit.vapor | 128 --- vaporize/tests/TreeVisitor.names.vaporm | 1174 ----------------------- vaporize/tests/TreeVisitor.opt.names.vaporm | 948 ------------------- vaporize/tests/TreeVisitor.opt.regalloc | 539 ----------- vaporize/tests/TreeVisitor.opt.vapor | 635 ------------- vaporize/tests/TreeVisitor.opt.vaporm | 948 ------------------- vaporize/tests/TreeVisitor.regalloc | 830 ----------------- vaporize/tests/TreeVisitor.vapor | 855 ----------------- vaporize/tests/TreeVisitor.vaporm | 1174 ----------------------- vaporize/tests/ex32.vapor | 15 - vaporize/tests/ex32.vaporm | 35 - 272 files changed, 31843 insertions(+), 33227 deletions(-) create mode 100644 base/BinaryTree-error.java create mode 100644 base/BinaryTree.java create mode 100644 base/BinaryTree.names.vaporm create mode 100644 base/BinaryTree.opt.names.vaporm create mode 100644 base/BinaryTree.opt.regalloc create mode 100644 base/BinaryTree.opt.vapor create mode 100644 base/BinaryTree.opt.vaporm create mode 100644 base/BinaryTree.regalloc create mode 100644 base/BinaryTree.vapor create mode 100644 base/BinaryTree.vaporm create mode 100644 base/Branch-error.java create mode 100644 base/Branch.java create mode 100644 base/BubbleSort-error.java create mode 100644 base/BubbleSort.java create mode 100644 base/BubbleSort.names.vaporm create mode 100644 base/BubbleSort.opt.names.vaporm create mode 100644 base/BubbleSort.opt.regalloc create mode 100644 base/BubbleSort.opt.vapor create mode 100644 base/BubbleSort.opt.vaporm create mode 100644 base/BubbleSort.regalloc create mode 100644 base/BubbleSort.vapor create mode 100644 base/BubbleSort.vaporm create mode 100644 base/DeclareNone.java create mode 100644 base/Empty.java create mode 100644 base/Factorial-error.java create mode 100644 base/Factorial.java create mode 100644 base/Factorial.names.vaporm create mode 100644 base/Factorial.opt.names.vaporm create mode 100644 base/Factorial.opt.regalloc create mode 100644 base/Factorial.opt.vapor create mode 100644 base/Factorial.opt.vaporm create mode 100644 base/Factorial.regalloc create mode 100644 base/Factorial.vapor create mode 100644 base/Factorial.vaporm create mode 100644 base/FactorialEdit.java create mode 100644 base/IsPositive.java create mode 100644 base/LinearSearch-error.java create mode 100644 base/LinearSearch.java create mode 100644 base/LinearSearch.names.vaporm create mode 100644 base/LinearSearch.opt.names.vaporm create mode 100644 base/LinearSearch.opt.regalloc create mode 100644 base/LinearSearch.opt.vapor create mode 100644 base/LinearSearch.opt.vaporm create mode 100644 base/LinearSearch.regalloc create mode 100644 base/LinearSearch.vapor create mode 100644 base/LinearSearch.vaporm create mode 100644 base/LinkedList-error.java create mode 100644 base/LinkedList.java create mode 100644 base/LinkedList.names.vaporm create mode 100644 base/LinkedList.opt.names.vaporm create mode 100644 base/LinkedList.opt.regalloc create mode 100644 base/LinkedList.opt.vapor create mode 100644 base/LinkedList.opt.vaporm create mode 100644 base/LinkedList.regalloc create mode 100644 base/LinkedList.vapor create mode 100644 base/LinkedList.vaporm create mode 100644 base/MoreThan4-error.java create mode 100644 base/MoreThan4.java create mode 100644 base/MoreThan4.names.vaporm create mode 100644 base/MoreThan4.opt.names.vaporm create mode 100644 base/MoreThan4.opt.regalloc create mode 100644 base/MoreThan4.opt.vapor create mode 100644 base/MoreThan4.opt.vaporm create mode 100644 base/MoreThan4.regalloc create mode 100644 base/MoreThan4.vapor create mode 100644 base/MoreThan4.vaporm create mode 100644 base/NewNone.java create mode 100644 base/Operator.java create mode 100644 base/Printer-error.java create mode 100644 base/Printer.java create mode 100644 base/QuickSort-error.java create mode 100644 base/QuickSort.java create mode 100644 base/QuickSort.names.vaporm create mode 100644 base/QuickSort.opt.names.vaporm create mode 100644 base/QuickSort.opt.regalloc create mode 100644 base/QuickSort.opt.vapor create mode 100644 base/QuickSort.opt.vaporm create mode 100644 base/QuickSort.regalloc create mode 100644 base/QuickSort.vapor create mode 100644 base/QuickSort.vaporm create mode 100644 base/RetrieveInteger.java create mode 100644 base/ShortCircuit.opt.vapor create mode 100644 base/ShortCircuit.vapor create mode 100644 base/SimpleArithmetic.java create mode 100644 base/SimpleArray-error.java create mode 100644 base/SimpleArray.java create mode 100644 base/TreeVisitor-error.java create mode 100644 base/TreeVisitor.java create mode 100644 base/TreeVisitor.names.vaporm create mode 100644 base/TreeVisitor.opt.names.vaporm create mode 100644 base/TreeVisitor.opt.regalloc create mode 100644 base/TreeVisitor.opt.vapor create mode 100644 base/TreeVisitor.opt.vaporm create mode 100644 base/TreeVisitor.regalloc create mode 100644 base/TreeVisitor.vapor create mode 100644 base/TreeVisitor.vaporm create mode 100644 base/ex29.java create mode 100644 base/ex30.java create mode 100644 base/ex31.java create mode 100644 base/ex32.java create mode 100644 base/ex33.java create mode 100644 base/ex34.java create mode 100644 base/ex35.java create mode 100644 base/ex36.java create mode 100644 base/ex37.java create mode 100644 base/ex38.java create mode 100644 base/ex39.java create mode 100644 base/ex40.java create mode 100644 base/ex41.java create mode 100644 base/ex42.java create mode 100644 base/ex43.java create mode 100644 base/ex44.java create mode 100644 base/ex45.java create mode 100644 base/ex46.java create mode 100644 base/ex47.java create mode 100644 base/ex48.java create mode 100644 base/ex49.java create mode 100644 base/ex50.java create mode 100644 boil/BoilVisitor.java create mode 100644 boil/TypeFactory.java delete mode 100644 boil/library/BoilVisitor.java delete mode 100644 boil/library/TypeFactory.java delete mode 100644 boil/tests/BinaryTree.java delete mode 100644 boil/tests/BubbleSort.java delete mode 100644 boil/tests/Factorial.java delete mode 100644 boil/tests/LinearSearch.java delete mode 100644 boil/tests/LinkedList.java delete mode 100644 boil/tests/MoreThan4.java delete mode 100644 boil/tests/QuickSort.java delete mode 100644 boil/tests/TreeVisitor.java delete mode 100644 boil/tests/ex29.java delete mode 100644 boil/tests/ex30.java delete mode 100644 boil/tests/ex31.java delete mode 100644 boil/tests/ex32.java delete mode 100644 boil/tests/ex33.java delete mode 100644 boil/tests/ex34.java delete mode 100644 boil/tests/ex35.java delete mode 100644 boil/tests/ex36.java delete mode 100644 boil/tests/ex37.java delete mode 100644 boil/tests/ex38.java delete mode 100644 boil/tests/ex39.java delete mode 100644 boil/tests/ex40.java delete mode 100644 boil/tests/ex41.java delete mode 100644 boil/tests/ex42.java delete mode 100644 boil/tests/ex43.java delete mode 100644 boil/tests/ex44.java delete mode 100644 boil/tests/ex45.java delete mode 100644 boil/tests/ex46.java delete mode 100644 boil/tests/ex47.java delete mode 100644 boil/tests/ex48.java delete mode 100644 boil/tests/ex49.java delete mode 100644 boil/tests/ex50.java create mode 100644 typecheck/TypeCheckSimp.java delete mode 100644 typecheck/library/TypeCheckSimp.java delete mode 100644 typecheck/tests/BinaryTree-error.java delete mode 100644 typecheck/tests/BinaryTree.java delete mode 100644 typecheck/tests/Branch-error.java delete mode 100644 typecheck/tests/Branch.java delete mode 100644 typecheck/tests/BubbleSort-error.java delete mode 100644 typecheck/tests/BubbleSort.java delete mode 100644 typecheck/tests/DeclareNone.java delete mode 100644 typecheck/tests/Empty.java delete mode 100644 typecheck/tests/Factorial-error.java delete mode 100644 typecheck/tests/Factorial.java delete mode 100644 typecheck/tests/FactorialEdit.java delete mode 100644 typecheck/tests/IsPositive.java delete mode 100644 typecheck/tests/LinearSearch-error.java delete mode 100644 typecheck/tests/LinearSearch.java delete mode 100644 typecheck/tests/LinkedList-error.java delete mode 100644 typecheck/tests/LinkedList.java delete mode 100644 typecheck/tests/MoreThan4-error.java delete mode 100644 typecheck/tests/MoreThan4.java delete mode 100644 typecheck/tests/NewNone.java delete mode 100644 typecheck/tests/Operator.java delete mode 100644 typecheck/tests/Printer-error.java delete mode 100644 typecheck/tests/Printer.java delete mode 100644 typecheck/tests/QuickSort-error.java delete mode 100644 typecheck/tests/QuickSort.java delete mode 100644 typecheck/tests/RetrieveInteger.java delete mode 100644 typecheck/tests/SimpleArithmetic.java delete mode 100644 typecheck/tests/SimpleArray-error.java delete mode 100644 typecheck/tests/SimpleArray.java delete mode 100644 typecheck/tests/TreeVisitor-error.java delete mode 100644 typecheck/tests/TreeVisitor.java create mode 100644 vaporize/Kettle.java create mode 100644 vaporize/LIRDict.java create mode 100644 vaporize/LIRVar.java create mode 100644 vaporize/LIRVisitor.java create mode 100644 vaporize/RegisterAlloc.java create mode 100644 vaporize/SpillEverywhere.java create mode 100644 vaporize/TransientInterval.java create mode 100644 vaporize/VaporizeVisitor.java delete mode 100644 vaporize/library/Kettle.java delete mode 100644 vaporize/library/LIRDict.java delete mode 100644 vaporize/library/LIRVar.java delete mode 100644 vaporize/library/LIRVisitor.java delete mode 100644 vaporize/library/RegisterAlloc.java delete mode 100644 vaporize/library/SpillEverywhere.java delete mode 100644 vaporize/library/TransientInterval.java delete mode 100644 vaporize/library/VaporizeVisitor.java delete mode 100644 vaporize/tests/BinaryTree.names.vaporm delete mode 100644 vaporize/tests/BinaryTree.opt.names.vaporm delete mode 100644 vaporize/tests/BinaryTree.opt.regalloc delete mode 100644 vaporize/tests/BinaryTree.opt.vapor delete mode 100644 vaporize/tests/BinaryTree.opt.vaporm delete mode 100644 vaporize/tests/BinaryTree.regalloc delete mode 100644 vaporize/tests/BinaryTree.vapor delete mode 100644 vaporize/tests/BinaryTree.vaporm delete mode 100644 vaporize/tests/BubbleSort.names.vaporm delete mode 100644 vaporize/tests/BubbleSort.opt.names.vaporm delete mode 100644 vaporize/tests/BubbleSort.opt.regalloc delete mode 100644 vaporize/tests/BubbleSort.opt.vapor delete mode 100644 vaporize/tests/BubbleSort.opt.vaporm delete mode 100644 vaporize/tests/BubbleSort.regalloc delete mode 100644 vaporize/tests/BubbleSort.vapor delete mode 100644 vaporize/tests/BubbleSort.vaporm delete mode 100644 vaporize/tests/Factorial.names.vaporm delete mode 100644 vaporize/tests/Factorial.opt.names.vaporm delete mode 100644 vaporize/tests/Factorial.opt.regalloc delete mode 100644 vaporize/tests/Factorial.opt.vapor delete mode 100644 vaporize/tests/Factorial.opt.vaporm delete mode 100644 vaporize/tests/Factorial.regalloc delete mode 100644 vaporize/tests/Factorial.vapor delete mode 100644 vaporize/tests/Factorial.vaporm delete mode 100644 vaporize/tests/LinearSearch.names.vaporm delete mode 100644 vaporize/tests/LinearSearch.opt.names.vaporm delete mode 100644 vaporize/tests/LinearSearch.opt.regalloc delete mode 100644 vaporize/tests/LinearSearch.opt.vapor delete mode 100644 vaporize/tests/LinearSearch.opt.vaporm delete mode 100644 vaporize/tests/LinearSearch.regalloc delete mode 100644 vaporize/tests/LinearSearch.vapor delete mode 100644 vaporize/tests/LinearSearch.vaporm delete mode 100644 vaporize/tests/LinkedList.names.vaporm delete mode 100644 vaporize/tests/LinkedList.opt.names.vaporm delete mode 100644 vaporize/tests/LinkedList.opt.regalloc delete mode 100644 vaporize/tests/LinkedList.opt.vapor delete mode 100644 vaporize/tests/LinkedList.opt.vaporm delete mode 100644 vaporize/tests/LinkedList.regalloc delete mode 100644 vaporize/tests/LinkedList.vapor delete mode 100644 vaporize/tests/LinkedList.vaporm delete mode 100644 vaporize/tests/MoreThan4.names.vaporm delete mode 100644 vaporize/tests/MoreThan4.opt.names.vaporm delete mode 100644 vaporize/tests/MoreThan4.opt.regalloc delete mode 100644 vaporize/tests/MoreThan4.opt.vapor delete mode 100644 vaporize/tests/MoreThan4.opt.vaporm delete mode 100644 vaporize/tests/MoreThan4.regalloc delete mode 100644 vaporize/tests/MoreThan4.vapor delete mode 100644 vaporize/tests/MoreThan4.vaporm delete mode 100644 vaporize/tests/QuickSort.names.vaporm delete mode 100644 vaporize/tests/QuickSort.opt.names.vaporm delete mode 100644 vaporize/tests/QuickSort.opt.regalloc delete mode 100644 vaporize/tests/QuickSort.opt.vapor delete mode 100644 vaporize/tests/QuickSort.opt.vaporm delete mode 100644 vaporize/tests/QuickSort.regalloc delete mode 100644 vaporize/tests/QuickSort.vapor delete mode 100644 vaporize/tests/QuickSort.vaporm delete mode 100644 vaporize/tests/ShortCircuit.opt.vapor delete mode 100644 vaporize/tests/ShortCircuit.vapor delete mode 100644 vaporize/tests/TreeVisitor.names.vaporm delete mode 100644 vaporize/tests/TreeVisitor.opt.names.vaporm delete mode 100644 vaporize/tests/TreeVisitor.opt.regalloc delete mode 100644 vaporize/tests/TreeVisitor.opt.vapor delete mode 100644 vaporize/tests/TreeVisitor.opt.vaporm delete mode 100644 vaporize/tests/TreeVisitor.regalloc delete mode 100644 vaporize/tests/TreeVisitor.vapor delete mode 100644 vaporize/tests/TreeVisitor.vaporm delete mode 100644 vaporize/tests/ex32.vapor delete mode 100644 vaporize/tests/ex32.vaporm diff --git a/J2V.java b/J2V.java index 53f42a7..01b1cdf 100644 --- a/J2V.java +++ b/J2V.java @@ -5,7 +5,7 @@ import syntaxtree.*; import java.util.*; import st.*; import misc.*; -import boil.library.*; +import boil.*; public class J2V { public static void main(String[] args) { diff --git a/Typecheck.java b/Typecheck.java index 755ce36..8c4559b 100644 --- a/Typecheck.java +++ b/Typecheck.java @@ -5,7 +5,7 @@ import syntaxtree.*; import java.util.*; import st.*; import misc.*; -import typecheck.library.*; +import typecheck.*; public class Typecheck { public static void main(String[] args) { diff --git a/V2VM.java b/V2VM.java index d4c9223..9198d71 100644 --- a/V2VM.java +++ b/V2VM.java @@ -16,7 +16,7 @@ import java.util.Arrays; import cfg.*; import misc.*; -import vaporize.library.*; +import vaporize.*; public class V2VM { 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 { + + private String vapor; + private TypeFactory tf; // the shared type generator + private int id; + private SymbolTable symt; + + private MethodInstance recentMethod = null; // the most recent method called + private ClassInstance recentClass = null; + + public BoilVisitor(SymbolTable symt) { + this.symt = symt; + this.vapor = ""; + this.tf = new TypeFactory(); + this.id = 0; + } + + public String getVapor() { + return this.vapor; + } + + public int getVarIndex(ClassInstance cls, TypeInstance type) { + /** + * Returns the index of the attribute in the class, or a negative number + * if it is not included. + */ + int attr_index = -1; + if (cls != null && + ((attr_index = cls.getLocals().indexOf(type)*4) >= 0)) { + attr_index += cls.getMethods().size() * 4; + } + return attr_index; + } + + public String memoryRead(String rhs) { + String lhs = this.tf.alias(this.getUniqueID()); + this.addVapor(String.format(" %s = %s\n", + lhs, + rhs)); + + return lhs; + } + + private void addVapor(String str) { + MinimalLogger.info(String.format("Adding \"%s\"", + str)); + this.vapor += str; + } + + private String getUniqueID() { + return Integer.toString(this.id++); + } + + private void resetIDs() { + MinimalLogger.info(String.format("Clearing tf for new function...")); + this.tf.reset(); + this.id = 0; + } + + // + // Auto class visitors--probably don't need to be overridden. + // + public String visit(NodeList n, String argu) { + String _ret=""; + int _count=0; + for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { + _ret += e.nextElement().accept(this,argu); + _count++; + } + return _ret; + } + + public String visit(NodeListOptional n, String argu) { + if ( n.present() ) { + String _ret=""; + int _count=0; + for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { + _ret += e.nextElement().accept(this,argu); + _count++; + } + return _ret; + } + else + return ""; + } + + public String visit(NodeOptional n, String argu) { + if ( n.present() ) + return n.node.accept(this,argu); + else + return ""; + } + + public String visit(NodeSequence n, String argu) { + String _ret=null; + int _count=0; + for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { + e.nextElement().accept(this,argu); + _count++; + } + return _ret; + } + + public String visit(NodeToken n, String argu) { + return null; + } + + // + // User-generated visitor methods below + // + + /** + * f0 -> MainClass() + * f1 -> ( TypeDeclaration() )* + * f2 -> + */ + public String visit(Goal n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + n.f0.accept(this, argu); + n.f1.accept(this, argu); + n.f2.accept(this, argu); + + this.addVapor(String.format("func AllocArray(size)\n bytes = MulS(size 4)\n bytes = Add(bytes 4)\n v = HeapAllocZ(bytes)\n [v] = size\n ret v\n")); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "{" + * f3 -> "public" + * f4 -> "static" + * f5 -> "void" + * f6 -> "main" + * f7 -> "(" + * f8 -> "String" + * f9 -> "[" + * f10 -> "]" + * f11 -> Identifier() + * f12 -> ")" + * f13 -> "{" + * f14 -> ( VarDeclaration() )* + * f15 -> ( Statement() )* + * f16 -> "}" + * f17 -> "}" + */ + public String visit(MainClass n, String argu) { + String _ret=null; + this.tf.reset(); + String id = n.f1.f0.tokenImage; + MinimalLogger.info(String.format("-> %s (%s)", + n.getClass().getSimpleName(), + id)); + this.symt.setActive(TypeEnum.classname, symt.getClass(id)); + this.symt.setActive(TypeEnum.method, symt.getMethod(n.f6.tokenImage)); + /////////////////////////////////////////////////////////////// + this.addVapor("func Main()\n"); + n.f1.accept(this, argu); + n.f11.accept(this, argu); + n.f14.accept(this, argu); + n.f15.accept(this, argu); + this.addVapor(" ret\n\n"); + /////////////////////////////////////////////////////////////// + this.symt.removeActive(TypeEnum.method); + symt.removeActive(TypeEnum.classname); + MinimalLogger.info(String.format("<- %s (%s)", + n.getClass().getSimpleName(), + id)); + return _ret; + } + + /** + * f0 -> ClassDeclaration() + * | ClassExtendsDeclaration() + */ + public String visit(TypeDeclaration n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + n.f0.accept(this, argu); + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + /////////////////////////////////////////////////////////////// + return _ret; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "{" + * f3 -> ( VarDeclaration() )* + * f4 -> ( MethodDeclaration() )* + * f5 -> "}" + */ + public String visit(ClassDeclaration n, String argu) { + String _ret=null; + String id = n.f1.f0.tokenImage; + MinimalLogger.info(String.format("-> %s (%s)", + n.getClass().getSimpleName(), + id)); + this.symt.setActive(TypeEnum.classname, symt.getClass(id)); + /////////////////////////////////////////////////////////////// + this.addVapor(String.format("const functable_%s\n", id)); + for (MethodInstance mtd : this.symt.getClass(id).getMethods()) { + this.addVapor(String.format(" :%s_%s\n", mtd.getParentClass().getName(), mtd)); + } + this.addVapor("\n"); + // n.f3.accept(this, argu); + n.f4.accept(this, argu); + /////////////////////////////////////////////////////////////// + this.symt.removeActive(TypeEnum.classname); + MinimalLogger.info(String.format("<- %s (%s)", + n.getClass().getSimpleName(), + id)); + return _ret; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "extends" + * f3 -> Identifier() + * f4 -> "{" + * f5 -> ( VarDeclaration() )* + * f6 -> ( MethodDeclaration() )* + * f7 -> "}" + */ + public String visit(ClassExtendsDeclaration n, String argu) { + String _ret=null; + String id = n.f1.f0.tokenImage; + MinimalLogger.info(String.format("-> %s (%s)", + n.getClass().getSimpleName(), + id)); + this.symt.setActive(TypeEnum.classname, symt.getClass(id)); + /////////////////////////////////////////////////////////////// + this.addVapor(String.format("const functable_%s\n", id)); + for (MethodInstance mtd : this.symt.getClass(id).getMethods()) { + this.addVapor(String.format(" :%s_%s\n", mtd.getParentClass().getName(), mtd)); + } + this.addVapor("\n"); + // n.f3.accept(this, argu); + // n.f5.accept(this, argu); + n.f6.accept(this, argu); + /////////////////////////////////////////////////////////////// + this.symt.removeActive(TypeEnum.classname); + MinimalLogger.info(String.format("<- %s (%s)", + n.getClass().getSimpleName(), + id)); + return _ret; + } + + /** + * f0 -> Type() + * f1 -> Identifier() + * f2 -> ";" + */ + public String visit(VarDeclaration n, String argu) { + String _ret=null; + String id = n.f1.f0.tokenImage; + MinimalLogger.info(String.format("-> %s (%s)", + n.getClass().getSimpleName(), + id)); + /////////////////////////////////////////////////////////////// + // if (t.getClassInstance() != null) + // this.addVapor(String.format(" %s = HeapAllocZ(%d)\n", + // this.tf.alias(t.getName()), + // t.getSize())); + n.f0.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s (%s)", + n.getClass().getSimpleName(), + id)); + return _ret; + } + + /** + * f0 -> "public" + * f1 -> Type() + * f2 -> Identifier() + * f3 -> "(" + * f4 -> ( FormalParameterList() )? + * f5 -> ")" + * f6 -> "{" + * f7 -> ( VarDeclaration() )* + * f8 -> ( Statement() )* + * f9 -> "return" + * f10 -> Expression() + * f11 -> ";" + * f12 -> "}" + */ + public String visit(MethodDeclaration n, String argu) { + String _ret=null; + this.tf.reset(); + String id = n.f2.f0.tokenImage; + MinimalLogger.info(String.format("-> %s (%s)", + n.getClass().getSimpleName(), + id)); + this.symt.setActive(TypeEnum.method, symt.getMethod(id)); + /////////////////////////////////////////////////////////////// + // n.f1.accept(this, argu); + this.addVapor(String.format("func %s_%s(this ", + this.symt.getActive(TypeEnum.classname), + id)); + String para = n.f4.accept(this, argu); + this.addVapor(String.format("%s)\n", para)); + + n.f7.accept(this, argu); + n.f8.accept(this, argu); + String ret = n.f10.accept(this, argu); + String retID = this.getUniqueID(); + this.addVapor(String.format(" %s = %s\n ret %s\n\n", + this.tf.alias(retID), + ret, + this.tf.alias(retID))); + /////////////////////////////////////////////////////////////// + this.symt.removeActive(TypeEnum.method); + MinimalLogger.info(String.format("<- %s (%s)", + n.getClass().getSimpleName(), + id)); + return _ret; + } + + /** + * f0 -> FormalParameter() + * f1 -> ( FormalParameterRest() )* + */ + public String visit(FormalParameterList n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += n.f0.accept(this, argu); + _ret += n.f1.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> Type() + * f1 -> Identifier() + */ + public String visit(FormalParameter n, String argu) { + String _ret=""; + String id = n.f1.f0.tokenImage; + MinimalLogger.info(String.format("-> %s (%s)", + n.getClass().getSimpleName(), + id)); + /////////////////////////////////////////////////////////////// + // n.f0.accept(this, argu); + _ret += n.f1.accept(this,argu) + " "; + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s (%s)", + n.getClass().getSimpleName(), + id)); + return _ret; + } + + /** + * f0 -> "," + * f1 -> FormalParameter() + */ + public String visit(FormalParameterRest n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += n.f1.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> ArrayType() + * | BooleanType() + * | IntegerType() + * | Identifier() + */ + public String visit(Type n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + n.f0.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "int" + * f1 -> "[" + * f2 -> "]" + */ + public String visit(ArrayType n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "boolean" + */ + public String visit(BooleanType n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "int" + */ + public String visit(IntegerType n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> Block() + * | AssignmentStatement() + * | ArrayAssignmentStatement() + * | IfStatement() + * | WhileStatement() + * | PrintStatement() + */ + public String visit(Statement n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += n.f0.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "{" + * f1 -> ( Statement() )* + * f2 -> "}" + */ + public String visit(Block n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + n.f1.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> Identifier() + * f1 -> "=" + * f2 -> Expression() + * f3 -> ";" + */ + public String visit(AssignmentStatement n, String argu) { + String _ret=null; + String id = n.f0.f0.tokenImage; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String lhs = n.f0.accept(this, argu); + String expr = n.f2.accept(this, argu); + + int attr_index = 0; + TypeInstance t; + if ((t = this.symt.getType(lhs)) != null) { + // memory store + ClassInstance cur = (ClassInstance) this.symt.getActive(TypeEnum.classname); + attr_index = getVarIndex(cur, t); + lhs = String.format("[this+%d]", attr_index); + } + + + this.addVapor(String.format(" %s = %s\n", + lhs, + expr)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s", + n.getClass().getSimpleName())); + return _ret; + } + + /** + * f0 -> Identifier() + * f1 -> "[" + * f2 -> Expression() + * f3 -> "]" + * f4 -> "=" + * f5 -> Expression() + * f6 -> ";" + */ + public String visit(ArrayAssignmentStatement n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String arrID = this.tf.alias(this.getUniqueID()); + String arr = n.f0.accept(this, argu); + this.addVapor(String.format(" %s = %s\n", + arrID, + arr)); + + String indexID = this.tf.alias(this.getUniqueID()); + this.addVapor(String.format(" %s = MulS(%s %s)\n", + indexID, + n.f2.accept(this, argu), + 4)); + this.addVapor(String.format(" %s = Add(%s %s)\n", + indexID, + indexID, + 4)); + this.addVapor(String.format(" %s = Add(%s %s)\n", + indexID, + arrID, + indexID)); + + String expr = n.f5.accept(this, argu); + + this.addVapor(String.format(" [%s] = %s\n", + indexID, + expr)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "if" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> Statement() + * f5 -> "else" + * f6 -> Statement() + */ + public String visit(IfStatement n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String ifID = this.getUniqueID(); + String cond = n.f2.accept(this, argu); + + this.addVapor(String.format(" %s = %s\n", + this.tf.alias(ifID), + cond)); + this.addVapor(String.format(" if0 %s goto :if%s_else\nif%s_body:\n", + this.tf.alias(ifID), + ifID, + ifID)); + + n.f4.accept(this, argu); + + this.addVapor(String.format(" goto :if%s_end\nif%s_else:\n", + ifID, + ifID)); + + n.f6.accept(this, argu); + + this.addVapor(String.format("if%s_end:\n", + ifID)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "while" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> Statement() + */ + public String visit(WhileStatement n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String whileID = this.getUniqueID(); + + this.addVapor(String.format("while%s_test:\n", + whileID)); + String cond = n.f2.accept(this, argu); + + String condID = this.getUniqueID(); + this.addVapor(String.format(" %s = %s\n", + this.tf.alias(condID), + cond)); + this.addVapor(String.format(" if0 %s goto :while%s_end\nwhile%s_body:\n", + this.tf.alias(condID), + whileID, + whileID)); + + n.f4.accept(this, argu); + + this.addVapor(String.format(" goto :while%s_test\nwhile%s_end:\n", + whileID, + whileID)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "System.out.println" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> ";" + */ + public String visit(PrintStatement n, String argu) { + String _ret=null; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String printTemp = this.getUniqueID(); + String expr = n.f2.accept(this, argu); + + this.addVapor(String.format(" %s = %s\n", + this.tf.alias(printTemp), + expr)); + + this.addVapor(String.format(" PrintIntS(%s)\n", + this.tf.alias(printTemp))); + + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> AndExpression() + * | CompareExpression() + * | PlusExpression() + * | MinusExpression() + * | TimesExpression() + * | ArrayLookup() + * | ArrayLength() + * | MessageSend() + * | PrimaryExpression() + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(Expression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += n.f0.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "&&" + * f2 -> PrimaryExpression() + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(AndExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + String oper1 = this.memoryRead(n.f0.accept(this, argu)); + String oper2 = this.memoryRead(n.f2.accept(this, argu)); + String one = this.tf.alias(this.getUniqueID()); + this.addVapor(String.format(" %s = Eq(1 %s)\n", + one, + oper1)); + String two = this.tf.alias(this.getUniqueID()); + this.addVapor(String.format(" %s = Eq(1 %s)\n", + two, + oper2)); + this.addVapor(String.format(" %s = Eq(%s %s)\n", + _ret, + one, + two)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "<" + * f2 -> PrimaryExpression() + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(CompareExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + String oper1 = this.memoryRead(n.f0.accept(this, argu)); + String oper2 = this.memoryRead(n.f2.accept(this, argu)); + this.addVapor(String.format(" %s = LtS(%s %s)\n", + _ret, + oper1, + oper2)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "+" + * f2 -> PrimaryExpression() + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(PlusExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + String oper1 = this.memoryRead(n.f0.accept(this, argu)); + String oper2 = this.memoryRead(n.f2.accept(this, argu)); + this.addVapor(String.format(" %s = Add(%s %s)\n", + _ret, + oper1, + oper2)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "-" + * f2 -> PrimaryExpression() + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(MinusExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + String oper1 = this.memoryRead(n.f0.accept(this, argu)); + String oper2 = this.memoryRead(n.f2.accept(this, argu)); + this.addVapor(String.format(" %s = Sub(%s %s)\n", + _ret, + oper1, + oper2)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "*" + * f2 -> PrimaryExpression() + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(TimesExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + String oper1 = this.memoryRead(n.f0.accept(this, argu)); + String oper2 = this.memoryRead(n.f2.accept(this, argu)); + this.addVapor(String.format(" %s = MulS(%s %s)\n", + _ret, + oper1, + oper2)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "[" + * f2 -> PrimaryExpression() + * f3 -> "]" + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(ArrayLookup n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + String arrID = this.tf.alias(this.getUniqueID()); + String arr = n.f0.accept(this, argu); + String indexID = this.tf.alias(this.getUniqueID()); + this.addVapor(String.format(" %s = %s\n", + arrID, + arr)); + this.addVapor(String.format(" %s = MulS(%s %s)\n", + indexID, + n.f2.accept(this, argu), + 4)); + this.addVapor(String.format(" %s = Add(%s %s)\n", + indexID, + indexID, + 4)); + this.addVapor(String.format(" %s = Add(%s %s)\n", + indexID, + arrID, + indexID)); + this.addVapor(String.format(" %s = [%s]\n", + _ret, + indexID)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "." + * f2 -> "length" + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(ArrayLength n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + String arrID = this.tf.alias(this.getUniqueID()); + String arr = n.f0.accept(this, argu); + this.addVapor(String.format(" %s = %s\n", + arrID, + arr)); + this.addVapor(String.format(" %s = [%s+0]\n", + _ret, + arrID)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> PrimaryExpression() + * f1 -> "." + * f2 -> Identifier() + * f3 -> "(" + * f4 -> ( ExpressionList() )? + * f5 -> ")" + */ + // Expressions return a TYPE alias which is equal to the expression! + public String visit(MessageSend n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += this.tf.alias(this.getUniqueID()); + String mtd = n.f2.f0.tokenImage; + String rhs; + TypeInstance t; + switch (n.f0.f0.which) { + case 3: + MinimalLogger.info("Message send found an IDENTIFIER"); + rhs = ((Identifier) n.f0.f0.choice).f0.tokenImage; + t = this.symt.getType(rhs); + if (t == null) + t = this.symt.getTypeAttr(rhs); + rhs = n.f0.accept(this, argu); + this.addVapor(String.format(" %s = %s\n", + this.tf.alias(t.getName()), + rhs)); + break; + case 4: + // we'll do everything here and exit the function + MinimalLogger.info("Message send found THIS"); + rhs = n.f0.accept(this, argu); + rhs = this.tf.alias(this.getUniqueID()); + this.addVapor(String.format(" %s = [this]\n", + rhs)); + ClassInstance cur = (ClassInstance) this.symt.getActive(TypeEnum.classname); + MinimalLogger.info("Calculating method index to call..."); + int mtdIndex = cur.getMethods() + .indexOf(this.symt.getMethod(mtd, cur)) * 4; + + this.addVapor(n.f4.accept(this, argu)); + this.addVapor(String.format(" %s = [%s+%d]\n", + rhs, + rhs, + mtdIndex)); + this.addVapor(String.format(" %s = call %s(this", + _ret, + rhs)); + this.addVapor(String.format(" %s)\n", + this.tf.retrieveRecentList(this.symt.getMethod(mtd, cur) + .getArguments() + .size()))); + this.recentMethod = this.symt.getMethod(mtd, cur); + return _ret; + case 6: + MinimalLogger.info("Message send found ANONYMOUS"); + // expand the entire object out! + rhs = n.f0.accept(this, argu); + t = new TypeInstance(rhs, TypeEnum.ERROR, + (MethodInstance) this.symt.getActive(TypeEnum.method), + (ClassInstance) this.symt.getActive(TypeEnum.classname)); + t.addClassInstance(this.recentClass); + this.addVapor(String.format(" %s = %s\n", + this.tf.alias(t.getName()), + rhs)); + break; + case 8: + MinimalLogger.info("Message send found BRACKET"); + rhs = n.f0.accept(this, argu); + ClassInstance cls = this.recentMethod.getReturn(); + t = new TypeInstance(this.getUniqueID(), TypeEnum.ERROR, + (MethodInstance) this.symt.getActive(TypeEnum.method), + (ClassInstance) this.symt.getActive(TypeEnum.classname)); + this.addVapor(String.format(" %s = %s\n", + this.tf.alias(t.getName()), + rhs)); + t.addClassInstance(cls); + break; + default: + MinimalLogger.severe(String.format("Message send found UNKNOWN %s", + n.f0.f0.choice.toString())); + rhs = null; + t = null; + } + + String tp1 = this.tf.alias(this.getUniqueID()); + String tp2 = this.tf.alias(this.getUniqueID()); + + this.addVapor(String.format(" %s = [%s+%d]\n", + tp1, + this.tf.alias(t.getName()), + 0)); + + MinimalLogger.info("Calculating method index to call..."); + MinimalLogger.severe("t: " + t); + MinimalLogger.severe("mtd: " + mtd); + MinimalLogger.severe("t.getClassInstance() " + t.getClassInstance()); + MinimalLogger.severe("t.getClassInstance().getMethods() " + t.getClassInstance().getMethods().toString()); + this.recentMethod = this.symt.getMethod(mtd, t.getClassInstance()); + int mtdIndex = t.getClassInstance().getMethods() + .indexOf(this.symt.getMethod(mtd, t.getClassInstance())) * 4; + + this.addVapor(String.format(" %s = [%s+%d]\n", + tp2, + tp1, + mtdIndex)); + + this.addVapor(n.f4.accept(this, argu)); + + this.addVapor(String.format(" %s = call %s(%s", + _ret, + tp2, + this.tf.alias(t.getName()))); + + this.addVapor(String.format(" %s)\n", + this.tf.retrieveRecentList(this.symt.getMethod(mtd, t.getClassInstance()) + .getArguments() + .size()))); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> Expression() + * f1 -> ( ExpressionRest() )* + */ + public String visit(ExpressionList n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String rhs = n.f0.accept(this, argu); + _ret += String.format(" %s = %s\n", + this.tf.alias(this.getUniqueID()), + rhs); + _ret += n.f1.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "," + * f1 -> Expression() + */ + public String visit(ExpressionRest n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String rhs = n.f1.accept(this, argu); + _ret += String.format(" %s = %s\n", + this.tf.alias(this.getUniqueID()), + rhs); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> IntegerLiteral() + * | TrueLiteral() + * | FalseLiteral() + * | Identifier() + * | ThisExpression() + * | ArrayAllocationExpression() + * | AllocationExpression() + * | NotExpression() + * | BracketExpression() + */ + public String visit(PrimaryExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += n.f0.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> + */ + public String visit(IntegerLiteral n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += n.f0.tokenImage; + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "true" + */ + public String visit(TrueLiteral n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += "1"; + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "false" + */ + public String visit(FalseLiteral n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += "0"; + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> + */ + public String visit(Identifier n, String argu) { + String _ret=""; + String id = n.f0.tokenImage; + MinimalLogger.info(String.format("-> %s (%s)", + n.getClass().getSimpleName(), + id)); + /////////////////////////////////////////////////////////////// + ClassInstance cur = (ClassInstance) this.symt.getActive(TypeEnum.classname); + // TypeInstance localt = this.symt.getType(id); + TypeInstance t = this.symt.getTypeAttr(id); + if (cur.getLocals().contains(t)) { + MinimalLogger.info(String.format("Identifier found a class variable %s", + id)); + int attr_index = getVarIndex(cur, t); + _ret += String.format("[this+%d]", attr_index); + } else { + _ret += this.tf.alias(id); + } + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s (%s) with %s", + n.getClass().getSimpleName(), + id, + _ret)); + return _ret; + } + + /** + * f0 -> "this" + */ + public String visit(ThisExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += "this"; + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "new" + * f1 -> "int" + * f2 -> "[" + * f3 -> Expression() + * f4 -> "]" + */ + public String visit(ArrayAllocationExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + String len = n.f3.accept(this, argu); + String aAllocID = this.tf.alias(this.getUniqueID()); + this.addVapor(String.format(" %s = call :AllocArray(%s)\n", + aAllocID, + len)); + + _ret += aAllocID; + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "new" + * f1 -> Identifier() + * f2 -> "(" + * f3 -> ")" + */ + public String visit(AllocationExpression n, String argu) { + String _ret=""; + String id = n.f1.f0.tokenImage; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + ClassInstance cls = this.symt.getClass(id); + this.recentClass = cls; + this.addVapor(String.format(" %s = HeapAllocZ(%d)\n", + _ret, + cls.getSize())); + + this.addVapor(String.format(" [%s+0] = :functable_%s\n", + _ret, + id)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "!" + * f1 -> Expression() + */ + public String visit(NotExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + _ret += this.tf.alias(this.getUniqueID()); + /////////////////////////////////////////////////////////////// + this.addVapor(String.format(" %s = Eq(%s 0)\n", + _ret, + n.f1.accept(this, argu))); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + + /** + * f0 -> "(" + * f1 -> Expression() + * f2 -> ")" + */ + public String visit(BracketExpression n, String argu) { + String _ret=""; + MinimalLogger.info(String.format("-> %s", + n.getClass().getSimpleName())); + /////////////////////////////////////////////////////////////// + _ret += n.f1.accept(this, argu); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<- %s with %s", + n.getClass().getSimpleName(), + _ret)); + return _ret; + } + +} diff --git a/boil/TypeFactory.java b/boil/TypeFactory.java new file mode 100644 index 0000000..d5b61f3 --- /dev/null +++ b/boil/TypeFactory.java @@ -0,0 +1,51 @@ +package boil; + +import misc.*; +import java.util.HashMap; + +public class TypeFactory { + + private int type_num; + private HashMap map; + + public void reset() { + this.type_num = 0; + this.map = new HashMap<>(); + } + + public String alias(String t) { + /** + * Given a TypeInstance, return the designated + * vapor alias. If the alias does not exist, create it. + */ + String alias; + if ((alias = this.map.get(t)) == null) { + alias = String.format("t.%d", this.type_num++); + MinimalLogger.info(String.format("Created alias %s for %s...", + alias, + t)); + + this.map.put(t, alias); + } + + return alias; + } + + public String retrieveRecentList(int x) { + /** + * Given int x, retrieve a space-delimited + * list of the x most recent entries. + */ + String rtn = ""; + if (x > 0) { + rtn += String.format("t.%d", + type_num-x); + for (int i = type_num-(x-1); i < type_num; ++i) { + rtn += String.format(" t.%d", + i); + } + } + + return rtn; + } +} diff --git a/boil/library/BoilVisitor.java b/boil/library/BoilVisitor.java deleted file mode 100644 index 001b6e6..0000000 --- a/boil/library/BoilVisitor.java +++ /dev/null @@ -1,1294 +0,0 @@ -package boil.library; - -import syntaxtree.*; -import visitor.*; -import st.*; -import misc.*; -import java.util.*; - -public class BoilVisitor extends GJDepthFirst { - - private String vapor; - private TypeFactory tf; // the shared type generator - private int id; - private SymbolTable symt; - - private MethodInstance recentMethod = null; // the most recent method called - private ClassInstance recentClass = null; - - public BoilVisitor(SymbolTable symt) { - this.symt = symt; - this.vapor = ""; - this.tf = new TypeFactory(); - this.id = 0; - } - - public String getVapor() { - return this.vapor; - } - - public int getVarIndex(ClassInstance cls, TypeInstance type) { - /** - * Returns the index of the attribute in the class, or a negative number - * if it is not included. - */ - int attr_index = -1; - if (cls != null && - ((attr_index = cls.getLocals().indexOf(type)*4) >= 0)) { - attr_index += cls.getMethods().size() * 4; - } - return attr_index; - } - - public String memoryRead(String rhs) { - String lhs = this.tf.alias(this.getUniqueID()); - this.addVapor(String.format(" %s = %s\n", - lhs, - rhs)); - - return lhs; - } - - private void addVapor(String str) { - MinimalLogger.info(String.format("Adding \"%s\"", - str)); - this.vapor += str; - } - - private String getUniqueID() { - return Integer.toString(this.id++); - } - - private void resetIDs() { - MinimalLogger.info(String.format("Clearing tf for new function...")); - this.tf.reset(); - this.id = 0; - } - - // - // Auto class visitors--probably don't need to be overridden. - // - public String visit(NodeList n, String argu) { - String _ret=""; - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - _ret += e.nextElement().accept(this,argu); - _count++; - } - return _ret; - } - - public String visit(NodeListOptional n, String argu) { - if ( n.present() ) { - String _ret=""; - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - _ret += e.nextElement().accept(this,argu); - _count++; - } - return _ret; - } - else - return ""; - } - - public String visit(NodeOptional n, String argu) { - if ( n.present() ) - return n.node.accept(this,argu); - else - return ""; - } - - public String visit(NodeSequence n, String argu) { - String _ret=null; - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - e.nextElement().accept(this,argu); - _count++; - } - return _ret; - } - - public String visit(NodeToken n, String argu) { - return null; - } - - // - // User-generated visitor methods below - // - - /** - * f0 -> MainClass() - * f1 -> ( TypeDeclaration() )* - * f2 -> - */ - public String visit(Goal n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - n.f0.accept(this, argu); - n.f1.accept(this, argu); - n.f2.accept(this, argu); - - this.addVapor(String.format("func AllocArray(size)\n bytes = MulS(size 4)\n bytes = Add(bytes 4)\n v = HeapAllocZ(bytes)\n [v] = size\n ret v\n")); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "{" - * f3 -> "public" - * f4 -> "static" - * f5 -> "void" - * f6 -> "main" - * f7 -> "(" - * f8 -> "String" - * f9 -> "[" - * f10 -> "]" - * f11 -> Identifier() - * f12 -> ")" - * f13 -> "{" - * f14 -> ( VarDeclaration() )* - * f15 -> ( Statement() )* - * f16 -> "}" - * f17 -> "}" - */ - public String visit(MainClass n, String argu) { - String _ret=null; - this.tf.reset(); - String id = n.f1.f0.tokenImage; - MinimalLogger.info(String.format("-> %s (%s)", - n.getClass().getSimpleName(), - id)); - this.symt.setActive(TypeEnum.classname, symt.getClass(id)); - this.symt.setActive(TypeEnum.method, symt.getMethod(n.f6.tokenImage)); - /////////////////////////////////////////////////////////////// - this.addVapor("func Main()\n"); - n.f1.accept(this, argu); - n.f11.accept(this, argu); - n.f14.accept(this, argu); - n.f15.accept(this, argu); - this.addVapor(" ret\n\n"); - /////////////////////////////////////////////////////////////// - this.symt.removeActive(TypeEnum.method); - symt.removeActive(TypeEnum.classname); - MinimalLogger.info(String.format("<- %s (%s)", - n.getClass().getSimpleName(), - id)); - return _ret; - } - - /** - * f0 -> ClassDeclaration() - * | ClassExtendsDeclaration() - */ - public String visit(TypeDeclaration n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - n.f0.accept(this, argu); - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - /////////////////////////////////////////////////////////////// - return _ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "{" - * f3 -> ( VarDeclaration() )* - * f4 -> ( MethodDeclaration() )* - * f5 -> "}" - */ - public String visit(ClassDeclaration n, String argu) { - String _ret=null; - String id = n.f1.f0.tokenImage; - MinimalLogger.info(String.format("-> %s (%s)", - n.getClass().getSimpleName(), - id)); - this.symt.setActive(TypeEnum.classname, symt.getClass(id)); - /////////////////////////////////////////////////////////////// - this.addVapor(String.format("const functable_%s\n", id)); - for (MethodInstance mtd : this.symt.getClass(id).getMethods()) { - this.addVapor(String.format(" :%s_%s\n", mtd.getParentClass().getName(), mtd)); - } - this.addVapor("\n"); - // n.f3.accept(this, argu); - n.f4.accept(this, argu); - /////////////////////////////////////////////////////////////// - this.symt.removeActive(TypeEnum.classname); - MinimalLogger.info(String.format("<- %s (%s)", - n.getClass().getSimpleName(), - id)); - return _ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "extends" - * f3 -> Identifier() - * f4 -> "{" - * f5 -> ( VarDeclaration() )* - * f6 -> ( MethodDeclaration() )* - * f7 -> "}" - */ - public String visit(ClassExtendsDeclaration n, String argu) { - String _ret=null; - String id = n.f1.f0.tokenImage; - MinimalLogger.info(String.format("-> %s (%s)", - n.getClass().getSimpleName(), - id)); - this.symt.setActive(TypeEnum.classname, symt.getClass(id)); - /////////////////////////////////////////////////////////////// - this.addVapor(String.format("const functable_%s\n", id)); - for (MethodInstance mtd : this.symt.getClass(id).getMethods()) { - this.addVapor(String.format(" :%s_%s\n", mtd.getParentClass().getName(), mtd)); - } - this.addVapor("\n"); - // n.f3.accept(this, argu); - // n.f5.accept(this, argu); - n.f6.accept(this, argu); - /////////////////////////////////////////////////////////////// - this.symt.removeActive(TypeEnum.classname); - MinimalLogger.info(String.format("<- %s (%s)", - n.getClass().getSimpleName(), - id)); - return _ret; - } - - /** - * f0 -> Type() - * f1 -> Identifier() - * f2 -> ";" - */ - public String visit(VarDeclaration n, String argu) { - String _ret=null; - String id = n.f1.f0.tokenImage; - MinimalLogger.info(String.format("-> %s (%s)", - n.getClass().getSimpleName(), - id)); - /////////////////////////////////////////////////////////////// - // if (t.getClassInstance() != null) - // this.addVapor(String.format(" %s = HeapAllocZ(%d)\n", - // this.tf.alias(t.getName()), - // t.getSize())); - n.f0.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s (%s)", - n.getClass().getSimpleName(), - id)); - return _ret; - } - - /** - * f0 -> "public" - * f1 -> Type() - * f2 -> Identifier() - * f3 -> "(" - * f4 -> ( FormalParameterList() )? - * f5 -> ")" - * f6 -> "{" - * f7 -> ( VarDeclaration() )* - * f8 -> ( Statement() )* - * f9 -> "return" - * f10 -> Expression() - * f11 -> ";" - * f12 -> "}" - */ - public String visit(MethodDeclaration n, String argu) { - String _ret=null; - this.tf.reset(); - String id = n.f2.f0.tokenImage; - MinimalLogger.info(String.format("-> %s (%s)", - n.getClass().getSimpleName(), - id)); - this.symt.setActive(TypeEnum.method, symt.getMethod(id)); - /////////////////////////////////////////////////////////////// - // n.f1.accept(this, argu); - this.addVapor(String.format("func %s_%s(this ", - this.symt.getActive(TypeEnum.classname), - id)); - String para = n.f4.accept(this, argu); - this.addVapor(String.format("%s)\n", para)); - - n.f7.accept(this, argu); - n.f8.accept(this, argu); - String ret = n.f10.accept(this, argu); - String retID = this.getUniqueID(); - this.addVapor(String.format(" %s = %s\n ret %s\n\n", - this.tf.alias(retID), - ret, - this.tf.alias(retID))); - /////////////////////////////////////////////////////////////// - this.symt.removeActive(TypeEnum.method); - MinimalLogger.info(String.format("<- %s (%s)", - n.getClass().getSimpleName(), - id)); - return _ret; - } - - /** - * f0 -> FormalParameter() - * f1 -> ( FormalParameterRest() )* - */ - public String visit(FormalParameterList n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += n.f0.accept(this, argu); - _ret += n.f1.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> Type() - * f1 -> Identifier() - */ - public String visit(FormalParameter n, String argu) { - String _ret=""; - String id = n.f1.f0.tokenImage; - MinimalLogger.info(String.format("-> %s (%s)", - n.getClass().getSimpleName(), - id)); - /////////////////////////////////////////////////////////////// - // n.f0.accept(this, argu); - _ret += n.f1.accept(this,argu) + " "; - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s (%s)", - n.getClass().getSimpleName(), - id)); - return _ret; - } - - /** - * f0 -> "," - * f1 -> FormalParameter() - */ - public String visit(FormalParameterRest n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += n.f1.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> ArrayType() - * | BooleanType() - * | IntegerType() - * | Identifier() - */ - public String visit(Type n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - n.f0.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "int" - * f1 -> "[" - * f2 -> "]" - */ - public String visit(ArrayType n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "boolean" - */ - public String visit(BooleanType n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "int" - */ - public String visit(IntegerType n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> Block() - * | AssignmentStatement() - * | ArrayAssignmentStatement() - * | IfStatement() - * | WhileStatement() - * | PrintStatement() - */ - public String visit(Statement n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += n.f0.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "{" - * f1 -> ( Statement() )* - * f2 -> "}" - */ - public String visit(Block n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - n.f1.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> Identifier() - * f1 -> "=" - * f2 -> Expression() - * f3 -> ";" - */ - public String visit(AssignmentStatement n, String argu) { - String _ret=null; - String id = n.f0.f0.tokenImage; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String lhs = n.f0.accept(this, argu); - String expr = n.f2.accept(this, argu); - - int attr_index = 0; - TypeInstance t; - if ((t = this.symt.getType(lhs)) != null) { - // memory store - ClassInstance cur = (ClassInstance) this.symt.getActive(TypeEnum.classname); - attr_index = getVarIndex(cur, t); - lhs = String.format("[this+%d]", attr_index); - } - - - this.addVapor(String.format(" %s = %s\n", - lhs, - expr)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s", - n.getClass().getSimpleName())); - return _ret; - } - - /** - * f0 -> Identifier() - * f1 -> "[" - * f2 -> Expression() - * f3 -> "]" - * f4 -> "=" - * f5 -> Expression() - * f6 -> ";" - */ - public String visit(ArrayAssignmentStatement n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String arrID = this.tf.alias(this.getUniqueID()); - String arr = n.f0.accept(this, argu); - this.addVapor(String.format(" %s = %s\n", - arrID, - arr)); - - String indexID = this.tf.alias(this.getUniqueID()); - this.addVapor(String.format(" %s = MulS(%s %s)\n", - indexID, - n.f2.accept(this, argu), - 4)); - this.addVapor(String.format(" %s = Add(%s %s)\n", - indexID, - indexID, - 4)); - this.addVapor(String.format(" %s = Add(%s %s)\n", - indexID, - arrID, - indexID)); - - String expr = n.f5.accept(this, argu); - - this.addVapor(String.format(" [%s] = %s\n", - indexID, - expr)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "if" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> Statement() - * f5 -> "else" - * f6 -> Statement() - */ - public String visit(IfStatement n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String ifID = this.getUniqueID(); - String cond = n.f2.accept(this, argu); - - this.addVapor(String.format(" %s = %s\n", - this.tf.alias(ifID), - cond)); - this.addVapor(String.format(" if0 %s goto :if%s_else\nif%s_body:\n", - this.tf.alias(ifID), - ifID, - ifID)); - - n.f4.accept(this, argu); - - this.addVapor(String.format(" goto :if%s_end\nif%s_else:\n", - ifID, - ifID)); - - n.f6.accept(this, argu); - - this.addVapor(String.format("if%s_end:\n", - ifID)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "while" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> Statement() - */ - public String visit(WhileStatement n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String whileID = this.getUniqueID(); - - this.addVapor(String.format("while%s_test:\n", - whileID)); - String cond = n.f2.accept(this, argu); - - String condID = this.getUniqueID(); - this.addVapor(String.format(" %s = %s\n", - this.tf.alias(condID), - cond)); - this.addVapor(String.format(" if0 %s goto :while%s_end\nwhile%s_body:\n", - this.tf.alias(condID), - whileID, - whileID)); - - n.f4.accept(this, argu); - - this.addVapor(String.format(" goto :while%s_test\nwhile%s_end:\n", - whileID, - whileID)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "System.out.println" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> ";" - */ - public String visit(PrintStatement n, String argu) { - String _ret=null; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String printTemp = this.getUniqueID(); - String expr = n.f2.accept(this, argu); - - this.addVapor(String.format(" %s = %s\n", - this.tf.alias(printTemp), - expr)); - - this.addVapor(String.format(" PrintIntS(%s)\n", - this.tf.alias(printTemp))); - - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> AndExpression() - * | CompareExpression() - * | PlusExpression() - * | MinusExpression() - * | TimesExpression() - * | ArrayLookup() - * | ArrayLength() - * | MessageSend() - * | PrimaryExpression() - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(Expression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += n.f0.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "&&" - * f2 -> PrimaryExpression() - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(AndExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); - String one = this.tf.alias(this.getUniqueID()); - this.addVapor(String.format(" %s = Eq(1 %s)\n", - one, - oper1)); - String two = this.tf.alias(this.getUniqueID()); - this.addVapor(String.format(" %s = Eq(1 %s)\n", - two, - oper2)); - this.addVapor(String.format(" %s = Eq(%s %s)\n", - _ret, - one, - two)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "<" - * f2 -> PrimaryExpression() - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(CompareExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); - this.addVapor(String.format(" %s = LtS(%s %s)\n", - _ret, - oper1, - oper2)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "+" - * f2 -> PrimaryExpression() - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(PlusExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); - this.addVapor(String.format(" %s = Add(%s %s)\n", - _ret, - oper1, - oper2)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "-" - * f2 -> PrimaryExpression() - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(MinusExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); - this.addVapor(String.format(" %s = Sub(%s %s)\n", - _ret, - oper1, - oper2)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "*" - * f2 -> PrimaryExpression() - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(TimesExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - String oper1 = this.memoryRead(n.f0.accept(this, argu)); - String oper2 = this.memoryRead(n.f2.accept(this, argu)); - this.addVapor(String.format(" %s = MulS(%s %s)\n", - _ret, - oper1, - oper2)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "[" - * f2 -> PrimaryExpression() - * f3 -> "]" - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(ArrayLookup n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - String arrID = this.tf.alias(this.getUniqueID()); - String arr = n.f0.accept(this, argu); - String indexID = this.tf.alias(this.getUniqueID()); - this.addVapor(String.format(" %s = %s\n", - arrID, - arr)); - this.addVapor(String.format(" %s = MulS(%s %s)\n", - indexID, - n.f2.accept(this, argu), - 4)); - this.addVapor(String.format(" %s = Add(%s %s)\n", - indexID, - indexID, - 4)); - this.addVapor(String.format(" %s = Add(%s %s)\n", - indexID, - arrID, - indexID)); - this.addVapor(String.format(" %s = [%s]\n", - _ret, - indexID)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "." - * f2 -> "length" - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(ArrayLength n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - String arrID = this.tf.alias(this.getUniqueID()); - String arr = n.f0.accept(this, argu); - this.addVapor(String.format(" %s = %s\n", - arrID, - arr)); - this.addVapor(String.format(" %s = [%s+0]\n", - _ret, - arrID)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> PrimaryExpression() - * f1 -> "." - * f2 -> Identifier() - * f3 -> "(" - * f4 -> ( ExpressionList() )? - * f5 -> ")" - */ - // Expressions return a TYPE alias which is equal to the expression! - public String visit(MessageSend n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += this.tf.alias(this.getUniqueID()); - String mtd = n.f2.f0.tokenImage; - String rhs; - TypeInstance t; - switch (n.f0.f0.which) { - case 3: - MinimalLogger.info("Message send found an IDENTIFIER"); - rhs = ((Identifier) n.f0.f0.choice).f0.tokenImage; - t = this.symt.getType(rhs); - if (t == null) - t = this.symt.getTypeAttr(rhs); - rhs = n.f0.accept(this, argu); - this.addVapor(String.format(" %s = %s\n", - this.tf.alias(t.getName()), - rhs)); - break; - case 4: - // we'll do everything here and exit the function - MinimalLogger.info("Message send found THIS"); - rhs = n.f0.accept(this, argu); - rhs = this.tf.alias(this.getUniqueID()); - this.addVapor(String.format(" %s = [this]\n", - rhs)); - ClassInstance cur = (ClassInstance) this.symt.getActive(TypeEnum.classname); - MinimalLogger.info("Calculating method index to call..."); - int mtdIndex = cur.getMethods() - .indexOf(this.symt.getMethod(mtd, cur)) * 4; - - this.addVapor(n.f4.accept(this, argu)); - this.addVapor(String.format(" %s = [%s+%d]\n", - rhs, - rhs, - mtdIndex)); - this.addVapor(String.format(" %s = call %s(this", - _ret, - rhs)); - this.addVapor(String.format(" %s)\n", - this.tf.retrieveRecentList(this.symt.getMethod(mtd, cur) - .getArguments() - .size()))); - this.recentMethod = this.symt.getMethod(mtd, cur); - return _ret; - case 6: - MinimalLogger.info("Message send found ANONYMOUS"); - // expand the entire object out! - rhs = n.f0.accept(this, argu); - t = new TypeInstance(rhs, TypeEnum.ERROR, - (MethodInstance) this.symt.getActive(TypeEnum.method), - (ClassInstance) this.symt.getActive(TypeEnum.classname)); - t.addClassInstance(this.recentClass); - this.addVapor(String.format(" %s = %s\n", - this.tf.alias(t.getName()), - rhs)); - break; - case 8: - MinimalLogger.info("Message send found BRACKET"); - rhs = n.f0.accept(this, argu); - ClassInstance cls = this.recentMethod.getReturn(); - t = new TypeInstance(this.getUniqueID(), TypeEnum.ERROR, - (MethodInstance) this.symt.getActive(TypeEnum.method), - (ClassInstance) this.symt.getActive(TypeEnum.classname)); - this.addVapor(String.format(" %s = %s\n", - this.tf.alias(t.getName()), - rhs)); - t.addClassInstance(cls); - break; - default: - MinimalLogger.severe(String.format("Message send found UNKNOWN %s", - n.f0.f0.choice.toString())); - rhs = null; - t = null; - } - - String tp1 = this.tf.alias(this.getUniqueID()); - String tp2 = this.tf.alias(this.getUniqueID()); - - this.addVapor(String.format(" %s = [%s+%d]\n", - tp1, - this.tf.alias(t.getName()), - 0)); - - MinimalLogger.info("Calculating method index to call..."); - MinimalLogger.severe("t: " + t); - MinimalLogger.severe("mtd: " + mtd); - MinimalLogger.severe("t.getClassInstance() " + t.getClassInstance()); - MinimalLogger.severe("t.getClassInstance().getMethods() " + t.getClassInstance().getMethods().toString()); - this.recentMethod = this.symt.getMethod(mtd, t.getClassInstance()); - int mtdIndex = t.getClassInstance().getMethods() - .indexOf(this.symt.getMethod(mtd, t.getClassInstance())) * 4; - - this.addVapor(String.format(" %s = [%s+%d]\n", - tp2, - tp1, - mtdIndex)); - - this.addVapor(n.f4.accept(this, argu)); - - this.addVapor(String.format(" %s = call %s(%s", - _ret, - tp2, - this.tf.alias(t.getName()))); - - this.addVapor(String.format(" %s)\n", - this.tf.retrieveRecentList(this.symt.getMethod(mtd, t.getClassInstance()) - .getArguments() - .size()))); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> Expression() - * f1 -> ( ExpressionRest() )* - */ - public String visit(ExpressionList n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String rhs = n.f0.accept(this, argu); - _ret += String.format(" %s = %s\n", - this.tf.alias(this.getUniqueID()), - rhs); - _ret += n.f1.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "," - * f1 -> Expression() - */ - public String visit(ExpressionRest n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String rhs = n.f1.accept(this, argu); - _ret += String.format(" %s = %s\n", - this.tf.alias(this.getUniqueID()), - rhs); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> IntegerLiteral() - * | TrueLiteral() - * | FalseLiteral() - * | Identifier() - * | ThisExpression() - * | ArrayAllocationExpression() - * | AllocationExpression() - * | NotExpression() - * | BracketExpression() - */ - public String visit(PrimaryExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += n.f0.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> - */ - public String visit(IntegerLiteral n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += n.f0.tokenImage; - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "true" - */ - public String visit(TrueLiteral n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += "1"; - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "false" - */ - public String visit(FalseLiteral n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += "0"; - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> - */ - public String visit(Identifier n, String argu) { - String _ret=""; - String id = n.f0.tokenImage; - MinimalLogger.info(String.format("-> %s (%s)", - n.getClass().getSimpleName(), - id)); - /////////////////////////////////////////////////////////////// - ClassInstance cur = (ClassInstance) this.symt.getActive(TypeEnum.classname); - // TypeInstance localt = this.symt.getType(id); - TypeInstance t = this.symt.getTypeAttr(id); - if (cur.getLocals().contains(t)) { - MinimalLogger.info(String.format("Identifier found a class variable %s", - id)); - int attr_index = getVarIndex(cur, t); - _ret += String.format("[this+%d]", attr_index); - } else { - _ret += this.tf.alias(id); - } - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s (%s) with %s", - n.getClass().getSimpleName(), - id, - _ret)); - return _ret; - } - - /** - * f0 -> "this" - */ - public String visit(ThisExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += "this"; - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "new" - * f1 -> "int" - * f2 -> "[" - * f3 -> Expression() - * f4 -> "]" - */ - public String visit(ArrayAllocationExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - String len = n.f3.accept(this, argu); - String aAllocID = this.tf.alias(this.getUniqueID()); - this.addVapor(String.format(" %s = call :AllocArray(%s)\n", - aAllocID, - len)); - - _ret += aAllocID; - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "new" - * f1 -> Identifier() - * f2 -> "(" - * f3 -> ")" - */ - public String visit(AllocationExpression n, String argu) { - String _ret=""; - String id = n.f1.f0.tokenImage; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - ClassInstance cls = this.symt.getClass(id); - this.recentClass = cls; - this.addVapor(String.format(" %s = HeapAllocZ(%d)\n", - _ret, - cls.getSize())); - - this.addVapor(String.format(" [%s+0] = :functable_%s\n", - _ret, - id)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "!" - * f1 -> Expression() - */ - public String visit(NotExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - _ret += this.tf.alias(this.getUniqueID()); - /////////////////////////////////////////////////////////////// - this.addVapor(String.format(" %s = Eq(%s 0)\n", - _ret, - n.f1.accept(this, argu))); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - - /** - * f0 -> "(" - * f1 -> Expression() - * f2 -> ")" - */ - public String visit(BracketExpression n, String argu) { - String _ret=""; - MinimalLogger.info(String.format("-> %s", - n.getClass().getSimpleName())); - /////////////////////////////////////////////////////////////// - _ret += n.f1.accept(this, argu); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<- %s with %s", - n.getClass().getSimpleName(), - _ret)); - return _ret; - } - -} diff --git a/boil/library/TypeFactory.java b/boil/library/TypeFactory.java deleted file mode 100644 index ddf54c8..0000000 --- a/boil/library/TypeFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -package boil.library; - -import misc.*; -import java.util.HashMap; - -public class TypeFactory { - - private int type_num; - private HashMap map; - - public void reset() { - this.type_num = 0; - this.map = new HashMap<>(); - } - - public String alias(String t) { - /** - * Given a TypeInstance, return the designated - * vapor alias. If the alias does not exist, create it. - */ - String alias; - if ((alias = this.map.get(t)) == null) { - alias = String.format("t.%d", this.type_num++); - MinimalLogger.info(String.format("Created alias %s for %s...", - alias, - t)); - - this.map.put(t, alias); - } - - return alias; - } - - public String retrieveRecentList(int x) { - /** - * Given int x, retrieve a space-delimited - * list of the x most recent entries. - */ - String rtn = ""; - if (x > 0) { - rtn += String.format("t.%d", - type_num-x); - for (int i = type_num-(x-1); i < type_num; ++i) { - rtn += String.format(" t.%d", - i); - } - } - - return rtn; - } -} diff --git a/boil/tests/BinaryTree.java b/boil/tests/BinaryTree.java deleted file mode 100644 index 18d1464..0000000 --- a/boil/tests/BinaryTree.java +++ /dev/null @@ -1,334 +0,0 @@ -class BinaryTree{ - public static void main(String[] a){ - System.out.println(new BT().Start()); - } -} - - -// This class invokes the methods to create a tree, -// insert, delete and serach for elements on it -class BT { - - public int Start(){ - Tree root ; - boolean ntb ; - int nti ; - - root = new Tree(); - ntb = root.Init(16); - ntb = root.Print(); - System.out.println(100000000); - ntb = root.Insert(8) ; - ntb = root.Print(); - ntb = root.Insert(24) ; - ntb = root.Insert(4) ; - ntb = root.Insert(12) ; - ntb = root.Insert(20) ; - ntb = root.Insert(28) ; - ntb = root.Insert(14) ; - ntb = root.Print(); - System.out.println(root.Search(24)); - System.out.println(root.Search(12)); - System.out.println(root.Search(16)); - System.out.println(root.Search(50)); - System.out.println(root.Search(12)); - ntb = root.Delete(12); - ntb = root.Print(); - System.out.println(root.Search(12)); - - return 0 ; - } - -} - -class Tree{ - Tree left ; - Tree right; - int key ; - boolean has_left ; - boolean has_right ; - Tree my_null ; - - // Initialize a node with a key value and no children - public boolean Init(int v_key){ - key = v_key ; - has_left = false ; - has_right = false ; - return true ; - } - - // Update the right child with rn - public boolean SetRight(Tree rn){ - right = rn ; - return true ; - } - - // Update the left child with ln - public boolean SetLeft(Tree ln){ - left = ln ; - return true ; - } - - public Tree GetRight(){ - return right ; - } - - public Tree GetLeft(){ - return left; - } - - public int GetKey(){ - return key ; - } - - public boolean SetKey(int v_key){ - key = v_key ; - return true ; - } - - public boolean GetHas_Right(){ - return has_right ; - } - - public boolean GetHas_Left(){ - return has_left ; - } - - public boolean SetHas_Left(boolean val){ - has_left = val ; - return true ; - } - - public boolean SetHas_Right(boolean val){ - has_right = val ; - return true ; - } - - // This method compares two integers and - // returns true if they are equal and false - // otherwise - public boolean Compare(int num1 , int num2){ - boolean ntb ; - int nti ; - - ntb = false ; - nti = num2 + 1 ; - if (num1 < num2) ntb = false ; - else if (!(num1 < nti)) ntb = false ; - else ntb = true ; - return ntb ; - } - - - // Insert a new element in the tree - public boolean Insert(int v_key){ - Tree new_node ; - boolean ntb ; - boolean cont ; - int key_aux ; - Tree current_node ; - - new_node = new Tree(); - ntb = new_node.Init(v_key) ; - current_node = this ; - cont = true ; - while (cont){ - key_aux = current_node.GetKey(); - if (v_key < key_aux){ - if (current_node.GetHas_Left()) - current_node = current_node.GetLeft() ; - else { - cont = false ; - ntb = current_node.SetHas_Left(true); - ntb = current_node.SetLeft(new_node); - } - } - else{ - if (current_node.GetHas_Right()) - current_node = current_node.GetRight() ; - else { - cont = false ; - ntb = current_node.SetHas_Right(true); - ntb = current_node.SetRight(new_node); - } - } - } - return true ; - } - - - // Delete an element from the tree - public boolean Delete(int v_key){ - Tree current_node ; - Tree parent_node ; - boolean cont ; - boolean found ; - boolean is_root ; - int key_aux ; - boolean ntb ; - - current_node = this ; - parent_node = this ; - cont = true ; - found = false ; - is_root = true ; - while (cont){ - key_aux = current_node.GetKey(); - if (v_key < key_aux) - if (current_node.GetHas_Left()){ - parent_node = current_node ; - current_node = current_node.GetLeft() ; - } - else cont = false ; - else - if (key_aux < v_key) - if (current_node.GetHas_Right()){ - parent_node = current_node ; - current_node = current_node.GetRight() ; - } - else cont = false ; - else { - if (is_root) - if ((!current_node.GetHas_Right()) && - (!current_node.GetHas_Left()) ) - ntb = true ; - else - ntb = this.Remove(parent_node,current_node); - else ntb = this.Remove(parent_node,current_node); - found = true ; - cont = false ; - } - is_root = false ; - } - return found ; - } - - - // Check if the element to be removed will use the - // righ or left subtree if one exists - public boolean Remove(Tree p_node, Tree c_node){ - boolean ntb ; - int auxkey1 ; - int auxkey2 ; - - if (c_node.GetHas_Left()) - ntb = this.RemoveLeft(p_node,c_node) ; - else - if (c_node.GetHas_Right()) - ntb = this.RemoveRight(p_node,c_node) ; - else { - auxkey1 = c_node.GetKey(); - //auxtree01 = p_node.GetLeft() ; - //auxkey2 = auxtree01.GetKey() ; - auxkey2 = (p_node.GetLeft()).GetKey() ; - if (this.Compare(auxkey1,auxkey2)) { - ntb = p_node.SetLeft(my_null); - ntb = p_node.SetHas_Left(false); - } - else { - ntb = p_node.SetRight(my_null); - ntb = p_node.SetHas_Right(false); - } - } - return true ; - } - - - // Copy the child key to the parent until a leaf is - // found and remove the leaf. This is done with the - // right subtree - public boolean RemoveRight(Tree p_node, Tree c_node){ - boolean ntb ; - - while (c_node.GetHas_Right()){ - //auxtree01 = c_node.GetRight() ; - //auxint02 = auxtree01.GetKey(); - //ntb = c_node.SetKey(auxint02); - ntb = c_node.SetKey((c_node.GetRight()).GetKey()); - p_node = c_node ; - c_node = c_node.GetRight() ; - } - ntb = p_node.SetRight(my_null); - ntb = p_node.SetHas_Right(false); - return true ; - } - - - // Copy the child key to the parent until a leaf is - // found and remove the leaf. This is done with the - // left subtree - public boolean RemoveLeft(Tree p_node, Tree c_node){ - boolean ntb ; - - while (c_node.GetHas_Left()){ - //auxtree01 = c_node.GetLeft() ; - //auxint02 = auxtree01.GetKey(); - //ntb = c_node.SetKey(auxint02); - ntb = c_node.SetKey((c_node.GetLeft()).GetKey()); - p_node = c_node ; - c_node = c_node.GetLeft() ; - } - ntb = p_node.SetLeft(my_null); - ntb = p_node.SetHas_Left(false); - return true ; - } - - // Search for an elemnt in the tree - public int Search(int v_key){ - boolean cont ; - int ifound ; - Tree current_node; - int key_aux ; - - current_node = this ; - cont = true ; - ifound = 0 ; - while (cont){ - key_aux = current_node.GetKey(); - if (v_key < key_aux) - if (current_node.GetHas_Left()) - current_node = current_node.GetLeft() ; - else cont = false ; - else - if (key_aux < v_key) - if (current_node.GetHas_Right()) - current_node = current_node.GetRight() ; - else cont = false ; - else { - ifound = 1 ; - cont = false ; - } - } - return ifound ; - } - - // Invoke the method to really print the tree elements - public boolean Print(){ - Tree current_node; - boolean ntb ; - - current_node = this ; - ntb = this.RecPrint(current_node); - return true ; - } - - // Print the elements of the tree - public boolean RecPrint(Tree node){ - boolean ntb ; - - if (node.GetHas_Left()){ - //auxtree01 = node.GetLeft() ; - //ntb = this.RecPrint(auxtree01); - ntb = this.RecPrint(node.GetLeft()); - } else ntb = true ; - System.out.println(node.GetKey()); - if (node.GetHas_Right()){ - //auxtree01 = node.GetRight() ; - //ntb = this.RecPrint(auxtree01); - ntb = this.RecPrint(node.GetRight()); - } else ntb = true ; - return true ; - } - -} - diff --git a/boil/tests/BubbleSort.java b/boil/tests/BubbleSort.java deleted file mode 100644 index e5645a9..0000000 --- a/boil/tests/BubbleSort.java +++ /dev/null @@ -1,93 +0,0 @@ -class BubbleSort{ - public static void main(String[] a){ - System.out.println(new BBS().Start(10)); - } -} - - -// This class contains the array of integers and -// methods to initialize, print and sort the array -// using Bublesort -class BBS{ - - int[] number ; - int size ; - - // Invoke the Initialization, Sort and Printing - // Methods - public int Start(int sz){ - int aux01 ; - aux01 = this.Init(sz); - aux01 = this.Print(); - System.out.println(99999); - aux01 = this.Sort(); - aux01 = this.Print(); - return 0 ; - } - - - // Sort array of integers using Bublesort method - public int Sort(){ - int nt ; - int i ; - int aux02 ; - int aux04 ; - int aux05 ; - int aux06 ; - int aux07 ; - int j ; - int t ; - i = size - 1 ; - aux02 = 0 - 1 ; - while (aux02 < i) { - j = 1 ; - //aux03 = i+1 ; - while (j < (i+1)){ - aux07 = j - 1 ; - aux04 = number[aux07] ; - aux05 = number[j] ; - if (aux05 < aux04) { - aux06 = j - 1 ; - t = number[aux06] ; - number[aux06] = number[j] ; - number[j] = t; - } - else nt = 0 ; - j = j + 1 ; - } - i = i - 1 ; - } - return 0 ; - } - - // Printing method - public int Print(){ - int j ; - j = 0 ; - while (j < (size)) { - System.out.println(number[j]); - j = j + 1 ; - } - return 0 ; - } - - // Initialize array of integers - public int Init(int sz){ - size = sz ; - number = new int[sz] ; - - number[0] = 20 ; - number[1] = 7 ; - number[2] = 12 ; - number[3] = 18 ; - number[4] = 2 ; - number[5] = 11 ; - number[6] = 6 ; - number[7] = 9 ; - number[8] = 19 ; - number[9] = 5 ; - - return 0 ; - } - -} diff --git a/boil/tests/Factorial.java b/boil/tests/Factorial.java deleted file mode 100644 index d938bb6..0000000 --- a/boil/tests/Factorial.java +++ /dev/null @@ -1,16 +0,0 @@ -class Factorial{ - public static void main(String[] a){ - System.out.println(new Fac().ComputeFac(10)); - } -} - -class Fac { - public int ComputeFac(int num){ - int num_aux ; - if (num < 1) - num_aux = 1 ; - else - num_aux = num * (this.ComputeFac(num-1)) ; - return num_aux ; - } -} diff --git a/boil/tests/LinearSearch.java b/boil/tests/LinearSearch.java deleted file mode 100644 index daddd94..0000000 --- a/boil/tests/LinearSearch.java +++ /dev/null @@ -1,99 +0,0 @@ -class LinearSearch{ - public static void main(String[] a){ - System.out.println(new LS().Start(10)); - } -} - - -// This class contains an array of integers and -// methods to initialize, print and search the array -// using Linear Search -class LS { - int[] number ; - int size ; - - // Invoke methods to initialize, print and search - // for elements on the array - public int Start(int sz){ - int aux01 ; - int aux02 ; - - aux01 = this.Init(sz); - aux02 = this.Print(); - System.out.println(9999); - System.out.println(this.Search(8)); - System.out.println(this.Search(12)) ; - System.out.println(this.Search(17)) ; - System.out.println(this.Search(50)) ; - return 55 ; - } - - // Print array of integers - public int Print(){ - int j ; - - j = 1 ; - while (j < (size)) { - System.out.println(number[j]); - j = j + 1 ; - } - return 0 ; - } - - // Search for a specific value (num) using - // linear search - public int Search(int num){ - int j ; - boolean ls01 ; - int ifound ; - int aux01 ; - int aux02 ; - int nt ; - - j = 1 ; - ls01 = false ; - ifound = 0 ; - - //System.out.println(num); - while (j < (size)) { - aux01 = number[j] ; - aux02 = num + 1 ; - if (aux01 < num) nt = 0 ; - else if (!(aux01 < aux02)) nt = 0 ; - else { - ls01 = true ; - ifound = 1 ; - j = size ; - } - j = j + 1 ; - } - - return ifound ; - } - - - - // initialize array of integers with some - // some sequence - public int Init(int sz){ - int j ; - int k ; - int aux01 ; - int aux02 ; - - size = sz ; - number = new int[sz] ; - - j = 1 ; - k = size + 1 ; - while (j < (size)) { - aux01 = 2 * j ; - aux02 = k - 3 ; - number[j] = aux01 + aux02 ; - j = j + 1 ; - k = k - 1 ; - } - return 0 ; - } - -} diff --git a/boil/tests/LinkedList.java b/boil/tests/LinkedList.java deleted file mode 100644 index 69adc33..0000000 --- a/boil/tests/LinkedList.java +++ /dev/null @@ -1,278 +0,0 @@ -class LinkedList{ - public static void main(String[] a){ - System.out.println(new LL().Start()); - } -} - -class Element { - int Age ; - int Salary ; - boolean Married ; - - // Initialize some class variables - public boolean Init(int v_Age, int v_Salary, boolean v_Married){ - Age = v_Age ; - Salary = v_Salary ; - Married = v_Married ; - return true ; - } - - public int GetAge(){ - return Age ; - } - - public int GetSalary(){ - return Salary ; - } - - public boolean GetMarried(){ - return Married ; - } - - // This method returns true if the object "other" - // has the same values for age, salary and - public boolean Equal(Element other){ - boolean ret_val ; - int aux01 ; - int aux02 ; - int nt ; - ret_val = true ; - - aux01 = other.GetAge(); - if (!this.Compare(aux01,Age)) ret_val = false ; - else { - aux02 = other.GetSalary(); - if (!this.Compare(aux02,Salary)) ret_val = false ; - else - if (Married) - if (!other.GetMarried()) ret_val = false; - else nt = 0 ; - else - if (other.GetMarried()) ret_val = false; - else nt = 0 ; - } - - return ret_val ; - } - - // This method compares two integers and - // returns true if they are equal and false - // otherwise - public boolean Compare(int num1 , int num2){ - boolean retval ; - int aux02 ; - retval = false ; - aux02 = num2 + 1 ; - if (num1 < num2) retval = false ; - else if (!(num1 < aux02)) retval = false ; - else retval = true ; - return retval ; - } - -} - -class List{ - Element elem ; - List next ; - boolean end ; - - // Initialize the node list as the last node - public boolean Init(){ - end = true ; - return true ; - } - - // Initialize the values of a new node - public boolean InitNew(Element v_elem, List v_next, boolean v_end){ - end = v_end ; - elem = v_elem ; - next = v_next ; - return true ; - } - - // Insert a new node at the beginning of the list - public List Insert(Element new_elem){ - boolean ret_val ; - List aux03 ; - List aux02 ; - aux03 = this ; - aux02 = new List(); - ret_val = aux02.InitNew(new_elem,aux03,false); - return aux02 ; - } - - - // Update the the pointer to the next node - public boolean SetNext(List v_next){ - next = v_next ; - return true ; - } - - // Delete an element e from the list - public List Delete(Element e){ - List my_head ; - boolean ret_val ; - boolean aux05; - List aux01 ; - List prev ; - boolean var_end ; - Element var_elem ; - int aux04 ; - int nt ; - - - my_head = this ; - ret_val = false ; - aux04 = 0 - 1 ; - aux01 = this ; - prev = this ; - var_end = end; - var_elem = elem ; - while ((!var_end) && (!ret_val)){ - if (e.Equal(var_elem)){ - ret_val = true ; - if (aux04 < 0) { - // delete first element - my_head = aux01.GetNext() ; - } - else{ // delete a non first element - System.out.println(0-555); - aux05 = prev.SetNext(aux01.GetNext()); - System.out.println(0-555); - - } - } else nt = 0 ; - if (!ret_val){ - prev = aux01 ; - aux01 = aux01.GetNext() ; - var_end = aux01.GetEnd(); - var_elem = aux01.GetElem(); - aux04 = 1 ; - } else nt = 0 ; - } - return my_head ; - } - - - // Search for an element e on the list - public int Search(Element e){ - int int_ret_val ; - List aux01 ; - Element var_elem ; - boolean var_end ; - int nt ; - - int_ret_val = 0 ; - aux01 = this ; - var_end = end; - var_elem = elem ; - while (!var_end){ - if (e.Equal(var_elem)){ - int_ret_val = 1 ; - } - else nt = 0 ; - aux01 = aux01.GetNext() ; - var_end = aux01.GetEnd(); - var_elem = aux01.GetElem(); - } - return int_ret_val ; - } - - public boolean GetEnd(){ - return end ; - } - - public Element GetElem(){ - return elem ; - } - - public List GetNext(){ - return next ; - } - - - // Print the linked list - public boolean Print(){ - List aux01 ; - boolean var_end ; - Element var_elem ; - - aux01 = this ; - var_end = end ; - var_elem = elem ; - while (!var_end){ - System.out.println(var_elem.GetAge()); - aux01 = aux01.GetNext() ; - var_end = aux01.GetEnd(); - var_elem = aux01.GetElem(); - } - - return true ; - } -} - - -// this class invokes the methods to insert, delete, -// search and print the linked list -class LL{ - - public int Start(){ - - List head ; - List last_elem ; - boolean aux01 ; - Element el01 ; - Element el02 ; - Element el03 ; - - last_elem = new List(); - aux01 = last_elem.Init(); - head = last_elem ; - aux01 = head.Init(); - aux01 = head.Print(); - - // inserting first element - el01 = new Element(); - aux01 = el01.Init(25,37000,false); - head = head.Insert(el01); - aux01 = head.Print(); - System.out.println(10000000); - // inserting second element - el01 = new Element(); - aux01 = el01.Init(39,42000,true); - el02 = el01 ; - head = head.Insert(el01); - aux01 = head.Print(); - System.out.println(10000000); - // inserting third element - el01 = new Element(); - aux01 = el01.Init(22,34000,false); - head = head.Insert(el01); - aux01 = head.Print(); - el03 = new Element(); - aux01 = el03.Init(27,34000,false); - System.out.println(head.Search(el02)); - System.out.println(head.Search(el03)); - System.out.println(10000000); - // inserting fourth element - el01 = new Element(); - aux01 = el01.Init(28,35000,false); - head = head.Insert(el01); - aux01 = head.Print(); - System.out.println(2220000); - - head = head.Delete(el02); - aux01 = head.Print(); - System.out.println(33300000); - - - head = head.Delete(el01); - aux01 = head.Print(); - System.out.println(44440000); - - return 0 ; - - - } - -} diff --git a/boil/tests/MoreThan4.java b/boil/tests/MoreThan4.java deleted file mode 100644 index 4960f01..0000000 --- a/boil/tests/MoreThan4.java +++ /dev/null @@ -1,29 +0,0 @@ -class MoreThan4{ - public static void main(String[] a){ - System.out.println(new MT4().Start(1,2,3,4,5,6)); - } -} - -class MT4 { - public int Start(int p1, int p2, int p3 , int p4, int p5, int p6){ - int aux ; - System.out.println(p1); - System.out.println(p2); - System.out.println(p3); - System.out.println(p4); - System.out.println(p5); - System.out.println(p6); - aux = this.Change(p6,p5,p4,p3,p2,p1); - return aux ; - } - - public int Change(int p1, int p2, int p3 , int p4, int p5, int p6){ - System.out.println(p1); - System.out.println(p2); - System.out.println(p3); - System.out.println(p4); - System.out.println(p5); - System.out.println(p6); - return 0 ; - } -} diff --git a/boil/tests/QuickSort.java b/boil/tests/QuickSort.java deleted file mode 100644 index 5893390..0000000 --- a/boil/tests/QuickSort.java +++ /dev/null @@ -1,112 +0,0 @@ -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 { + + private int offset; + + private void printNode(Node n, SymbolTable symt, boolean enter, TypeEnum consensus) { + String str = ""; + for (int i=0; i < this.offset; ++i) + str += "."; + if (enter) + str += "Visiting "; + else + str += "Leaving "; + str += "n.getClass().getSimpleName()"; + if (!enter) { + if (consensus == TypeEnum.ERROR) + str += " did not type check."; + else + str += String.format(" found type %s", consensus); + } + MinimalLogger.info(str); + } + + public TypeInstance visit(NodeList n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); + int _count=0; + for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { + TypeInstance node = e.nextElement().accept(this,symt); + e.nextElement().accept(this,symt); + if (node.getType() == TypeEnum.ERROR) + ret = node; + _count++; + } + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + public TypeInstance visit(NodeListOptional n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret; + if ( n.present() ) { + ret = new TypeInstance(null, TypeEnum.CHECK); + int _count=0; + for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { + TypeInstance node = e.nextElement().accept(this,symt); + if (node.getType() == TypeEnum.ERROR) + ret = node; + _count++; + } + } + else + ret = new TypeInstance(null, TypeEnum.CHECK); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME + public TypeInstance visit(NodeOptional n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret; + + if ( n.present() ) + ret = n.node.accept(this,symt); + else + ret = new TypeInstance(null, TypeEnum.CHECK); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + public TypeInstance visit(NodeSequence n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); + int _count=0; + for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { + TypeInstance node = e.nextElement().accept(this,symt); + if (node.getType() == TypeEnum.ERROR) + ret = node; + _count++; + } + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + public TypeInstance visit(NodeToken n, SymbolTable symt) { + // A fixed string token. '⌣' + String str = ""; + for (int i=0; i < this.offset; ++i) + str += "."; + MinimalLogger.info(String.format("%sLeaving %s => %s", + str, + n.getClass().getSimpleName(), + n.toString())); + return null; + } + + // + // User-generated visitor methods below + // + + /** + * f0 -> MainClass() + * f1 -> ( TypeDeclaration() )* + * f2 -> + */ + public TypeInstance visit(Goal n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + n.f1.accept(this, symt); + n.f2.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "{" + * f3 -> "public" + * f4 -> "static" + * f5 -> "void" + * f6 -> "main" + * f7 -> "(" + * f8 -> "String" + * f9 -> "[" + * f10 -> "]" + * f11 -> Identifier() + * f12 -> ")" + * f13 -> "{" + * f14 -> ( VarDeclaration() )* + * f15 -> ( Statement() )* + * f16 -> "}" + * f17 -> "}" + */ + public TypeInstance visit(MainClass n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance name = n.f1.accept(this, symt); + n.f2.accept(this, symt); + n.f3.accept(this, symt); + n.f4.accept(this, symt); + n.f5.accept(this, symt); + n.f6.accept(this, symt); + n.f7.accept(this, symt); + n.f8.accept(this, symt); + n.f9.accept(this, symt); + n.f10.accept(this, symt); + // TypeInstance args = n.f11.accept(this, symt); + n.f12.accept(this, symt); + n.f13.accept(this, symt); + TypeInstance var_dec = n.f14.accept(this, symt); + TypeInstance stmt = n.f15.accept(this, symt); + n.f16.accept(this, symt); + n.f17.accept(this, symt); + + this.printNode(n, symt, false, stmt.getType()); + --this.offset; + return stmt; + } + + /** + * f0 -> ClassDeclaration() + * | ClassExtendsDeclaration() + */ + public TypeInstance visit(TypeDeclaration n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "{" + * f3 -> ( VarDeclaration() )* + * f4 -> ( MethodDeclaration() )* + * f5 -> "}" + */ + public TypeInstance visit(ClassDeclaration n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance id = n.f1.accept(this, symt); + n.f2.accept(this, symt); + TypeInstance vars = n.f3.accept(this, symt); + TypeInstance mtds = n.f4.accept(this, symt); + n.f5.accept(this, symt); + TypeInstance ret = (vars.hasChecked() && + mtds.hasChecked()) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "extends" + * f3 -> Identifier() + * f4 -> "{" + * f5 -> ( VarDeclaration() )* + * f6 -> ( MethodDeclaration() )* + * f7 -> "}" + */ + public TypeInstance visit(ClassExtendsDeclaration n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance id = n.f1.accept(this, symt); + n.f2.accept(this, symt); + TypeInstance ext = n.f3.accept(this, symt); + n.f4.accept(this, symt); + TypeInstance vars = n.f5.accept(this, symt); + TypeInstance mehs = n.f6.accept(this, symt); + n.f7.accept(this, symt); + TypeInstance ret = (id.getType() == TypeEnum.classname && + vars.hasChecked() && + mehs.hasChecked()) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME (this may be ST-only) + /** + * f0 -> Type() + * f1 -> Identifier() + * f2 -> ";" + */ + public TypeInstance visit(VarDeclaration n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + n.f1.accept(this, symt); + n.f2.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME + /** + * [7.5]: Parameters identifiers are distinct, local vars are distinct, + * (vars in scope?), all statements type check + * + * f0 -> "public" + * f1 -> Type() + * f2 -> Identifier() + * f3 -> "(" + * f4 -> ( FormalParameterList() )? + * f5 -> ")" + * f6 -> "{" + * f7 -> ( VarDeclaration() )* + * f8 -> ( Statement() )* + * f9 -> "return" + * f10 -> Expression() + * f11 -> ";" + * f12 -> "}" + */ + public TypeInstance visit(MethodDeclaration n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + MethodInstance self = symt.getMethod(n.f2.f0.tokenImage); + n.f0.accept(this, symt); + TypeInstance ret_type = n.f1.accept(this, symt); + n.f2.accept(this, symt); + n.f3.accept(this, symt); + n.f4.accept(this, symt); + n.f5.accept(this, symt); + n.f6.accept(this, symt); + n.f7.accept(this, symt); + TypeInstance stmt = n.f8.accept(this, symt); + n.f9.accept(this, symt); + TypeInstance rtrn = n.f10.accept(this, symt); + n.f11.accept(this, symt); + n.f12.accept(this, symt); + TypeInstance ret = (self.getReturn() == rtrn.getType() && // FIXME I am checking that the rtrn matches the method's declared return type. Is this in the document? + stmt.hasChecked()) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> FormalParameter() + * f1 -> ( FormalParameterRest() )* + */ + public TypeInstance visit(FormalParameterList n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance _ret=null; + TypeInstance para1 = n.f0.accept(this, symt); + TypeInstance parar = n.f1.accept(this, symt); + TypeInstance ret = (para1.hasChecked() && + parar.hasChecked()) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> Type() + * f1 -> Identifier() + */ + public TypeInstance visit(FormalParameter n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + n.f1.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "," + * f1 -> FormalParameter() + */ + public TypeInstance visit(FormalParameterRest n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance ret = n.f1.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> ArrayType() + * | BooleanType() + * | IntegerType() + * | Identifier() + */ + public TypeInstance visit(Type n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "int" + * f1 -> "[" + * f2 -> "]" + */ + public TypeInstance visit(ArrayType n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = new TypeInstance(null, TypeEnum.intarray); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "boolean" + */ + public TypeInstance visit(BooleanType n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = new TypeInstance(null, TypeEnum.bool); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "int" + */ + public TypeInstance visit(IntegerType n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = new TypeInstance(null, TypeEnum.integer); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> Block() + * | AssignmentStatement() + * | ArrayAssignmentStatement() + * | IfStatement() + * | WhileStatement() + * | PrintStatement() + */ + public TypeInstance visit(Statement n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "{" + * f1 -> ( Statement() )* + * f2 -> "}" + */ + public TypeInstance visit(Block n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance ret = n.f1.accept(this, symt); + n.f2.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME FIXME FIXME + // Given we only have a few types, what is a subtype of what? + /** + * [23]: Expression is a subtype of identifier, and e typechecks* + * + * f0 -> Identifier() + * f1 -> "=" + * f2 -> Expression() + * f3 -> ";" + */ + public TypeInstance visit(AssignmentStatement n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance lhs = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance rhs = n.f2.accept(this, symt); + n.f3.accept(this, symt); + TypeInstance ret = (lhs.sameType(rhs)) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME (this may be done) + /** + * [24]: Identifier is an integer array, expressions are both integers + * + * f0 -> Identifier() + * f1 -> "[" + * f2 -> Expression() + * f3 -> "]" + * f4 -> "=" + * f5 -> Expression() + * f6 -> ";" + */ + public TypeInstance visit(ArrayAssignmentStatement n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance id = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance index = n.f2.accept(this, symt); + n.f3.accept(this, symt); + n.f4.accept(this, symt); + TypeInstance value = n.f5.accept(this, symt); + n.f6.accept(this, symt); + TypeInstance ret = (id.getType() == TypeEnum.intarray && + index.getType() == TypeEnum.integer && + value.getType() == TypeEnum.integer) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [25]: Expression is a bool, both statements type-check + * + * f0 -> "if" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> Statement() + * f5 -> "else" + * f6 -> Statement() + */ + public TypeInstance visit(IfStatement n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance expr = n.f2.accept(this, symt); + n.f3.accept(this, symt); + TypeInstance stmt1 = n.f4.accept(this, symt); + n.f5.accept(this, symt); + TypeInstance stmt2 = n.f6.accept(this, symt); + TypeInstance ret = (expr.getType() == TypeEnum.bool && + stmt1.getType() == stmt2.getType() && + stmt1.hasChecked()) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + + } + + /** + * DONE [26]: Expression is a bool, statement type-checks + * + * f0 -> "while" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> Statement() + */ + public TypeInstance visit(WhileStatement n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance expr = n.f2.accept(this, symt); + n.f3.accept(this, symt); + TypeInstance stmt = n.f4.accept(this, symt); + TypeInstance ret = (expr.getType() == TypeEnum.bool && + stmt.hasChecked()) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [27]: Expression is an integer + * + * f0 -> "System.out.println" + * f1 -> "(" + * f2 -> Expression() + * f3 -> ")" + * f4 -> ";" + */ + public TypeInstance visit(PrintStatement n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance ret = n.f2.accept(this, symt); + n.f3.accept(this, symt); + n.f4.accept(this, symt); + ret = (ret.getType() == TypeEnum.integer) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> AndExpression() + * | CompareExpression() + * | PlusExpression() + * | MinusExpression() + * | TimesExpression() + * | ArrayLookup() + * | ArrayLength() + * | MessageSend() + * | PrimaryExpression() + */ + public TypeInstance visit(Expression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [28]: If expressions are both booleans, return is a boolean + * + * f0 -> PrimaryExpression() + * f1 -> "&&" + * f2 -> PrimaryExpression() + */ + public TypeInstance visit(AndExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance oper1 = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance oper2 = n.f2.accept(this, symt); + TypeInstance ret = (oper1.getType() == TypeEnum.bool && + oper2.getType() == TypeEnum.bool) ? + new TypeInstance(null, TypeEnum.bool) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [29]: If expressions are both integers, return is a boolean + * + * f0 -> PrimaryExpression() + * f1 -> "<" + * f2 -> PrimaryExpression() + */ + public TypeInstance visit(CompareExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance oper1 = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance oper2 = n.f2.accept(this, symt); + TypeInstance ret = (oper1.getType() == TypeEnum.integer && + oper2.getType() == TypeEnum.integer) ? + new TypeInstance(null, TypeEnum.bool) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [30]: If expressions are both integers, return is an integer + * + * f0 -> PrimaryExpression() + * f1 -> "+" + * f2 -> PrimaryExpression() + */ + public TypeInstance visit(PlusExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance oper1 = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance oper2 = n.f2.accept(this, symt); + TypeInstance ret = (oper1.getType() == TypeEnum.integer && + oper2.getType() == TypeEnum.integer) ? + new TypeInstance(null, TypeEnum.integer) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [31]: If expressions are both integers, return is an integer + * + * f0 -> PrimaryExpression() + * f1 -> "-" + * f2 -> PrimaryExpression() + */ + public TypeInstance visit(MinusExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance oper1 = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance oper2 = n.f2.accept(this, symt); + TypeInstance ret = (oper1.getType() == TypeEnum.integer && + oper2.getType() == TypeEnum.integer) ? + new TypeInstance(null, TypeEnum.integer) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [32]: If expressions are both integers, return is an integer + * + * f0 -> PrimaryExpression() + * f1 -> "*" + * f2 -> PrimaryExpression() + */ + public TypeInstance visit(TimesExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance oper1 = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance oper2 = n.f2.accept(this, symt); + TypeInstance ret = (oper1.getType() == TypeEnum.integer && + oper2.getType() == TypeEnum.integer) ? + new TypeInstance(null, TypeEnum.integer) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [33]: If expr1 is an integer array and expr2 is an int, + * return is an int + * + * f0 -> PrimaryExpression() + * f1 -> "[" + * f2 -> PrimaryExpression() + * f3 -> "]" + */ + public TypeInstance visit(ArrayLookup n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance array = n.f0.accept(this, symt); + n.f1.accept(this, symt); + TypeInstance index = n.f2.accept(this, symt); + n.f3.accept(this, symt); + TypeInstance ret = (array.getType() == TypeEnum.intarray && + index.getType() == TypeEnum.integer) ? + new TypeInstance(null, TypeEnum.integer) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [34]: If expr1 is an integer array, return is an int + * + * f0 -> PrimaryExpression() + * f1 -> "." + * f2 -> "length" + */ + public TypeInstance visit(ArrayLength n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + n.f1.accept(this, symt); + n.f2.accept(this, symt); + ret = (ret.getType() == TypeEnum.intarray) ? new TypeInstance(null, TypeEnum.integer) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME FIXME FIXME + /** + * [35]: PrimaryExpr must be a classname, id must be a method name, expressionlist must be correct? + * + * f0 -> PrimaryExpression() + * f1 -> "." + * f2 -> Identifier() + * f3 -> "(" + * f4 -> ( ExpressionList() )? + * f5 -> ")" + */ + public TypeInstance visit(MessageSend n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + // this MUST be an instance of a class! + TypeInstance t = n.f0.accept(this, symt); + ClassInstance c = t.getClassInstance(); + n.f1.accept(this, symt); + n.f2.accept(this, symt); + MethodInstance m = symt.getMethod(n.f2.f0.tokenImage); + n.f3.accept(this, symt); + n.f4.accept(this, symt); + n.f5.accept(this, symt); + --this.offset; + return (true) ? + new TypeInstance(null, m.getReturn()) : + new TypeInstance(null, TypeEnum.ERROR); + } + + // FIXME + /** + * f0 -> Expression() + * f1 -> ( ExpressionRest() )* + */ + public TypeInstance visit(ExpressionList n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance expr1 = n.f0.accept(this, symt); + TypeInstance exprr = n.f1.accept(this, symt); + TypeInstance ret = (expr1.hasChecked() && + exprr.hasChecked()) ? + new TypeInstance(null, TypeEnum.CHECK) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> "," + * f1 -> Expression() + */ + public TypeInstance visit(ExpressionRest n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance ret = n.f1.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * f0 -> IntegerLiteral() + * | TrueLiteral() + * | FalseLiteral() + * | Identifier() + * | ThisExpression() + * | ArrayAllocationExpression() + * | AllocationExpression() + * | NotExpression() + * | BracketExpression() + */ + public TypeInstance visit(PrimaryExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance ret = n.f0.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [36]: return is an int + * + * + * f0 -> + */ + public TypeInstance visit(IntegerLiteral n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + this.printNode(n, symt, false, TypeEnum.integer); + --this.offset; + return new TypeInstance(null, TypeEnum.integer); + } + + /** + * DONE [37]: return is a bool + * + * f0 -> "true" + */ + public TypeInstance visit(TrueLiteral n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + this.printNode(n, symt, false, TypeEnum.bool); + --this.offset; + return new TypeInstance(null, TypeEnum.bool); + } + + /** + * DONE [38]: return is a bool + * + * f0 -> "false" + */ + public TypeInstance visit(FalseLiteral n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + this.printNode(n, symt, false, TypeEnum.bool); + --this.offset; + return new TypeInstance(null, TypeEnum.bool); + } + + // FIXME + /** + * [39]: id is a symbol in the current domain, return is id's type + * + * f0 -> + */ + public TypeInstance visit(Identifier n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + TypeInstance type; + TypeInstance ret; + ClassInstance cls; + if ((cls = symt.getClass(n.f0.tokenImage)) != null) { + // covers "anonymous" instance + ret = new TypeInstance(cls.getName(), + TypeEnum.classname); + ret.addClassInstance(cls); + } else { + if ((type = symt.getType(n.f0.tokenImage)) != null) { + ret = new TypeInstance(type.getName(), + type.getType()); + ret.addClassInstance(type.getClassInstance()); + } else + ret = new TypeInstance(null, TypeEnum.ERROR); + } + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME FIXME FIXME + /** + * [40]: method exists? but where is the token? + * + * f0 -> "this" + */ + public TypeInstance visit(ThisExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * DONE [41]: if expression is an integer, return is an int array + * + * f0 -> "new" + * f1 -> "int" + * f2 -> "[" + * f3 -> Expression() + * f4 -> "]" + */ + public TypeInstance visit(ArrayAllocationExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + n.f1.accept(this, symt); + n.f2.accept(this, symt); + TypeInstance ret = n.f3.accept(this, symt); + n.f4.accept(this, symt); + ret = (ret.getType() == TypeEnum.integer) ? new TypeInstance(null, TypeEnum.intarray) : + new TypeInstance(null, TypeEnum.ERROR); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + // FIXME + /** + * [42]: + * + * f0 -> "new" + * f1 -> Identifier() + * f2 -> "(" + * f3 -> ")" + */ + public TypeInstance visit(AllocationExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance ret = n.f1.accept(this, symt); + n.f2.accept(this, symt); + n.f3.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + + /** + * [43]: if expression is a boolean, return is a boolean + * + * f0 -> "!" + * f1 -> Expression() + */ + public TypeInstance visit(NotExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance ret = n.f1.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return (ret.getType() == TypeEnum.bool) ? ret : new TypeInstance(null, TypeEnum.ERROR); + } + + /** + * [44]: if e is a type, return is that same type + * + * f0 -> "(" + * f1 -> Expression() + * f2 -> ")" + */ + public TypeInstance visit(BracketExpression n, SymbolTable symt) { + ++this.offset; + this.printNode(n, symt, true, null); + + n.f0.accept(this, symt); + TypeInstance ret = n.f1.accept(this, symt); + n.f2.accept(this, symt); + + this.printNode(n, symt, false, ret.getType()); + --this.offset; + return ret; + } + +} diff --git a/typecheck/library/TypeCheckSimp.java b/typecheck/library/TypeCheckSimp.java deleted file mode 100644 index b330c65..0000000 --- a/typecheck/library/TypeCheckSimp.java +++ /dev/null @@ -1,1097 +0,0 @@ -package typecheck.library; - -import syntaxtree.*; -import visitor.*; -import st.*; -import misc.*; -import java.util.*; - -/** - * Provides default methods which visit each node in the tree in depth-first - * order. Your visitors may extend this class. - */ -public class TypeCheckSimp extends GJDepthFirst { - - private int offset; - - private void printNode(Node n, SymbolTable symt, boolean enter, TypeEnum consensus) { - String str = ""; - for (int i=0; i < this.offset; ++i) - str += "."; - if (enter) - str += "Visiting "; - else - str += "Leaving "; - str += "n.getClass().getSimpleName()"; - if (!enter) { - if (consensus == TypeEnum.ERROR) - str += " did not type check."; - else - str += String.format(" found type %s", consensus); - } - MinimalLogger.info(str); - } - - public TypeInstance visit(NodeList n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - TypeInstance node = e.nextElement().accept(this,symt); - e.nextElement().accept(this,symt); - if (node.getType() == TypeEnum.ERROR) - ret = node; - _count++; - } - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - public TypeInstance visit(NodeListOptional n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret; - if ( n.present() ) { - ret = new TypeInstance(null, TypeEnum.CHECK); - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - TypeInstance node = e.nextElement().accept(this,symt); - if (node.getType() == TypeEnum.ERROR) - ret = node; - _count++; - } - } - else - ret = new TypeInstance(null, TypeEnum.CHECK); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME - public TypeInstance visit(NodeOptional n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret; - - if ( n.present() ) - ret = n.node.accept(this,symt); - else - ret = new TypeInstance(null, TypeEnum.CHECK); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - public TypeInstance visit(NodeSequence n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); - int _count=0; - for ( Enumeration e = n.elements(); e.hasMoreElements(); ) { - TypeInstance node = e.nextElement().accept(this,symt); - if (node.getType() == TypeEnum.ERROR) - ret = node; - _count++; - } - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - public TypeInstance visit(NodeToken n, SymbolTable symt) { - // A fixed string token. '⌣' - String str = ""; - for (int i=0; i < this.offset; ++i) - str += "."; - MinimalLogger.info(String.format("%sLeaving %s => %s", - str, - n.getClass().getSimpleName(), - n.toString())); - return null; - } - - // - // User-generated visitor methods below - // - - /** - * f0 -> MainClass() - * f1 -> ( TypeDeclaration() )* - * f2 -> - */ - public TypeInstance visit(Goal n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "{" - * f3 -> "public" - * f4 -> "static" - * f5 -> "void" - * f6 -> "main" - * f7 -> "(" - * f8 -> "String" - * f9 -> "[" - * f10 -> "]" - * f11 -> Identifier() - * f12 -> ")" - * f13 -> "{" - * f14 -> ( VarDeclaration() )* - * f15 -> ( Statement() )* - * f16 -> "}" - * f17 -> "}" - */ - public TypeInstance visit(MainClass n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance name = n.f1.accept(this, symt); - n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - n.f5.accept(this, symt); - n.f6.accept(this, symt); - n.f7.accept(this, symt); - n.f8.accept(this, symt); - n.f9.accept(this, symt); - n.f10.accept(this, symt); - // TypeInstance args = n.f11.accept(this, symt); - n.f12.accept(this, symt); - n.f13.accept(this, symt); - TypeInstance var_dec = n.f14.accept(this, symt); - TypeInstance stmt = n.f15.accept(this, symt); - n.f16.accept(this, symt); - n.f17.accept(this, symt); - - this.printNode(n, symt, false, stmt.getType()); - --this.offset; - return stmt; - } - - /** - * f0 -> ClassDeclaration() - * | ClassExtendsDeclaration() - */ - public TypeInstance visit(TypeDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "{" - * f3 -> ( VarDeclaration() )* - * f4 -> ( MethodDeclaration() )* - * f5 -> "}" - */ - public TypeInstance visit(ClassDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance id = n.f1.accept(this, symt); - n.f2.accept(this, symt); - TypeInstance vars = n.f3.accept(this, symt); - TypeInstance mtds = n.f4.accept(this, symt); - n.f5.accept(this, symt); - TypeInstance ret = (vars.hasChecked() && - mtds.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "class" - * f1 -> Identifier() - * f2 -> "extends" - * f3 -> Identifier() - * f4 -> "{" - * f5 -> ( VarDeclaration() )* - * f6 -> ( MethodDeclaration() )* - * f7 -> "}" - */ - public TypeInstance visit(ClassExtendsDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance id = n.f1.accept(this, symt); - n.f2.accept(this, symt); - TypeInstance ext = n.f3.accept(this, symt); - n.f4.accept(this, symt); - TypeInstance vars = n.f5.accept(this, symt); - TypeInstance mehs = n.f6.accept(this, symt); - n.f7.accept(this, symt); - TypeInstance ret = (id.getType() == TypeEnum.classname && - vars.hasChecked() && - mehs.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME (this may be ST-only) - /** - * f0 -> Type() - * f1 -> Identifier() - * f2 -> ";" - */ - public TypeInstance visit(VarDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME - /** - * [7.5]: Parameters identifiers are distinct, local vars are distinct, - * (vars in scope?), all statements type check - * - * f0 -> "public" - * f1 -> Type() - * f2 -> Identifier() - * f3 -> "(" - * f4 -> ( FormalParameterList() )? - * f5 -> ")" - * f6 -> "{" - * f7 -> ( VarDeclaration() )* - * f8 -> ( Statement() )* - * f9 -> "return" - * f10 -> Expression() - * f11 -> ";" - * f12 -> "}" - */ - public TypeInstance visit(MethodDeclaration n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - MethodInstance self = symt.getMethod(n.f2.f0.tokenImage); - n.f0.accept(this, symt); - TypeInstance ret_type = n.f1.accept(this, symt); - n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - n.f5.accept(this, symt); - n.f6.accept(this, symt); - n.f7.accept(this, symt); - TypeInstance stmt = n.f8.accept(this, symt); - n.f9.accept(this, symt); - TypeInstance rtrn = n.f10.accept(this, symt); - n.f11.accept(this, symt); - n.f12.accept(this, symt); - TypeInstance ret = (self.getReturn() == rtrn.getType() && // FIXME I am checking that the rtrn matches the method's declared return type. Is this in the document? - stmt.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> FormalParameter() - * f1 -> ( FormalParameterRest() )* - */ - public TypeInstance visit(FormalParameterList n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance _ret=null; - TypeInstance para1 = n.f0.accept(this, symt); - TypeInstance parar = n.f1.accept(this, symt); - TypeInstance ret = (para1.hasChecked() && - parar.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> Type() - * f1 -> Identifier() - */ - public TypeInstance visit(FormalParameter n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "," - * f1 -> FormalParameter() - */ - public TypeInstance visit(FormalParameterRest n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> ArrayType() - * | BooleanType() - * | IntegerType() - * | Identifier() - */ - public TypeInstance visit(Type n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "int" - * f1 -> "[" - * f2 -> "]" - */ - public TypeInstance visit(ArrayType n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.intarray); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "boolean" - */ - public TypeInstance visit(BooleanType n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.bool); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "int" - */ - public TypeInstance visit(IntegerType n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = new TypeInstance(null, TypeEnum.integer); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> Block() - * | AssignmentStatement() - * | ArrayAssignmentStatement() - * | IfStatement() - * | WhileStatement() - * | PrintStatement() - */ - public TypeInstance visit(Statement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "{" - * f1 -> ( Statement() )* - * f2 -> "}" - */ - public TypeInstance visit(Block n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME FIXME FIXME - // Given we only have a few types, what is a subtype of what? - /** - * [23]: Expression is a subtype of identifier, and e typechecks* - * - * f0 -> Identifier() - * f1 -> "=" - * f2 -> Expression() - * f3 -> ";" - */ - public TypeInstance visit(AssignmentStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance lhs = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance rhs = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance ret = (lhs.sameType(rhs)) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME (this may be done) - /** - * [24]: Identifier is an integer array, expressions are both integers - * - * f0 -> Identifier() - * f1 -> "[" - * f2 -> Expression() - * f3 -> "]" - * f4 -> "=" - * f5 -> Expression() - * f6 -> ";" - */ - public TypeInstance visit(ArrayAssignmentStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance id = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance index = n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - TypeInstance value = n.f5.accept(this, symt); - n.f6.accept(this, symt); - TypeInstance ret = (id.getType() == TypeEnum.intarray && - index.getType() == TypeEnum.integer && - value.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [25]: Expression is a bool, both statements type-check - * - * f0 -> "if" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> Statement() - * f5 -> "else" - * f6 -> Statement() - */ - public TypeInstance visit(IfStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance expr = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance stmt1 = n.f4.accept(this, symt); - n.f5.accept(this, symt); - TypeInstance stmt2 = n.f6.accept(this, symt); - TypeInstance ret = (expr.getType() == TypeEnum.bool && - stmt1.getType() == stmt2.getType() && - stmt1.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - - } - - /** - * DONE [26]: Expression is a bool, statement type-checks - * - * f0 -> "while" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> Statement() - */ - public TypeInstance visit(WhileStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance expr = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance stmt = n.f4.accept(this, symt); - TypeInstance ret = (expr.getType() == TypeEnum.bool && - stmt.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [27]: Expression is an integer - * - * f0 -> "System.out.println" - * f1 -> "(" - * f2 -> Expression() - * f3 -> ")" - * f4 -> ";" - */ - public TypeInstance visit(PrintStatement n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance ret = n.f2.accept(this, symt); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - ret = (ret.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> AndExpression() - * | CompareExpression() - * | PlusExpression() - * | MinusExpression() - * | TimesExpression() - * | ArrayLookup() - * | ArrayLength() - * | MessageSend() - * | PrimaryExpression() - */ - public TypeInstance visit(Expression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [28]: If expressions are both booleans, return is a boolean - * - * f0 -> PrimaryExpression() - * f1 -> "&&" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(AndExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.bool && - oper2.getType() == TypeEnum.bool) ? - new TypeInstance(null, TypeEnum.bool) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [29]: If expressions are both integers, return is a boolean - * - * f0 -> PrimaryExpression() - * f1 -> "<" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(CompareExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.bool) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [30]: If expressions are both integers, return is an integer - * - * f0 -> PrimaryExpression() - * f1 -> "+" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(PlusExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [31]: If expressions are both integers, return is an integer - * - * f0 -> PrimaryExpression() - * f1 -> "-" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(MinusExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [32]: If expressions are both integers, return is an integer - * - * f0 -> PrimaryExpression() - * f1 -> "*" - * f2 -> PrimaryExpression() - */ - public TypeInstance visit(TimesExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance oper1 = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance oper2 = n.f2.accept(this, symt); - TypeInstance ret = (oper1.getType() == TypeEnum.integer && - oper2.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [33]: If expr1 is an integer array and expr2 is an int, - * return is an int - * - * f0 -> PrimaryExpression() - * f1 -> "[" - * f2 -> PrimaryExpression() - * f3 -> "]" - */ - public TypeInstance visit(ArrayLookup n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance array = n.f0.accept(this, symt); - n.f1.accept(this, symt); - TypeInstance index = n.f2.accept(this, symt); - n.f3.accept(this, symt); - TypeInstance ret = (array.getType() == TypeEnum.intarray && - index.getType() == TypeEnum.integer) ? - new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [34]: If expr1 is an integer array, return is an int - * - * f0 -> PrimaryExpression() - * f1 -> "." - * f2 -> "length" - */ - public TypeInstance visit(ArrayLength n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - ret = (ret.getType() == TypeEnum.intarray) ? new TypeInstance(null, TypeEnum.integer) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME FIXME FIXME - /** - * [35]: PrimaryExpr must be a classname, id must be a method name, expressionlist must be correct? - * - * f0 -> PrimaryExpression() - * f1 -> "." - * f2 -> Identifier() - * f3 -> "(" - * f4 -> ( ExpressionList() )? - * f5 -> ")" - */ - public TypeInstance visit(MessageSend n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - // this MUST be an instance of a class! - TypeInstance t = n.f0.accept(this, symt); - ClassInstance c = t.getClassInstance(); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - MethodInstance m = symt.getMethod(n.f2.f0.tokenImage); - n.f3.accept(this, symt); - n.f4.accept(this, symt); - n.f5.accept(this, symt); - --this.offset; - return (true) ? - new TypeInstance(null, m.getReturn()) : - new TypeInstance(null, TypeEnum.ERROR); - } - - // FIXME - /** - * f0 -> Expression() - * f1 -> ( ExpressionRest() )* - */ - public TypeInstance visit(ExpressionList n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance expr1 = n.f0.accept(this, symt); - TypeInstance exprr = n.f1.accept(this, symt); - TypeInstance ret = (expr1.hasChecked() && - exprr.hasChecked()) ? - new TypeInstance(null, TypeEnum.CHECK) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> "," - * f1 -> Expression() - */ - public TypeInstance visit(ExpressionRest n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * f0 -> IntegerLiteral() - * | TrueLiteral() - * | FalseLiteral() - * | Identifier() - * | ThisExpression() - * | ArrayAllocationExpression() - * | AllocationExpression() - * | NotExpression() - * | BracketExpression() - */ - public TypeInstance visit(PrimaryExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance ret = n.f0.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [36]: return is an int - * - * - * f0 -> - */ - public TypeInstance visit(IntegerLiteral n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - this.printNode(n, symt, false, TypeEnum.integer); - --this.offset; - return new TypeInstance(null, TypeEnum.integer); - } - - /** - * DONE [37]: return is a bool - * - * f0 -> "true" - */ - public TypeInstance visit(TrueLiteral n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - this.printNode(n, symt, false, TypeEnum.bool); - --this.offset; - return new TypeInstance(null, TypeEnum.bool); - } - - /** - * DONE [38]: return is a bool - * - * f0 -> "false" - */ - public TypeInstance visit(FalseLiteral n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - this.printNode(n, symt, false, TypeEnum.bool); - --this.offset; - return new TypeInstance(null, TypeEnum.bool); - } - - // FIXME - /** - * [39]: id is a symbol in the current domain, return is id's type - * - * f0 -> - */ - public TypeInstance visit(Identifier n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - TypeInstance type; - TypeInstance ret; - ClassInstance cls; - if ((cls = symt.getClass(n.f0.tokenImage)) != null) { - // covers "anonymous" instance - ret = new TypeInstance(cls.getName(), - TypeEnum.classname); - ret.addClassInstance(cls); - } else { - if ((type = symt.getType(n.f0.tokenImage)) != null) { - ret = new TypeInstance(type.getName(), - type.getType()); - ret.addClassInstance(type.getClassInstance()); - } else - ret = new TypeInstance(null, TypeEnum.ERROR); - } - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME FIXME FIXME - /** - * [40]: method exists? but where is the token? - * - * f0 -> "this" - */ - public TypeInstance visit(ThisExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = new TypeInstance(null, TypeEnum.CHECK); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * DONE [41]: if expression is an integer, return is an int array - * - * f0 -> "new" - * f1 -> "int" - * f2 -> "[" - * f3 -> Expression() - * f4 -> "]" - */ - public TypeInstance visit(ArrayAllocationExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - n.f1.accept(this, symt); - n.f2.accept(this, symt); - TypeInstance ret = n.f3.accept(this, symt); - n.f4.accept(this, symt); - ret = (ret.getType() == TypeEnum.integer) ? new TypeInstance(null, TypeEnum.intarray) : - new TypeInstance(null, TypeEnum.ERROR); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - // FIXME - /** - * [42]: - * - * f0 -> "new" - * f1 -> Identifier() - * f2 -> "(" - * f3 -> ")" - */ - public TypeInstance visit(AllocationExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - n.f2.accept(this, symt); - n.f3.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - - /** - * [43]: if expression is a boolean, return is a boolean - * - * f0 -> "!" - * f1 -> Expression() - */ - public TypeInstance visit(NotExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return (ret.getType() == TypeEnum.bool) ? ret : new TypeInstance(null, TypeEnum.ERROR); - } - - /** - * [44]: if e is a type, return is that same type - * - * f0 -> "(" - * f1 -> Expression() - * f2 -> ")" - */ - public TypeInstance visit(BracketExpression n, SymbolTable symt) { - ++this.offset; - this.printNode(n, symt, true, null); - - n.f0.accept(this, symt); - TypeInstance ret = n.f1.accept(this, symt); - n.f2.accept(this, symt); - - this.printNode(n, symt, false, ret.getType()); - --this.offset; - return ret; - } - -} diff --git a/typecheck/tests/BinaryTree-error.java b/typecheck/tests/BinaryTree-error.java deleted file mode 100644 index d9be857..0000000 --- a/typecheck/tests/BinaryTree-error.java +++ /dev/null @@ -1,334 +0,0 @@ -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/typecheck/tests/BinaryTree.java b/typecheck/tests/BinaryTree.java deleted file mode 100644 index 18d1464..0000000 --- a/typecheck/tests/BinaryTree.java +++ /dev/null @@ -1,334 +0,0 @@ -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/typecheck/tests/Branch-error.java b/typecheck/tests/Branch-error.java deleted file mode 100644 index bc58ff4..0000000 --- a/typecheck/tests/Branch-error.java +++ /dev/null @@ -1,11 +0,0 @@ -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/typecheck/tests/Branch.java b/typecheck/tests/Branch.java deleted file mode 100644 index 43df01f..0000000 --- a/typecheck/tests/Branch.java +++ /dev/null @@ -1,11 +0,0 @@ -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/typecheck/tests/BubbleSort-error.java b/typecheck/tests/BubbleSort-error.java deleted file mode 100644 index 97a1c1d..0000000 --- a/typecheck/tests/BubbleSort-error.java +++ /dev/null @@ -1,93 +0,0 @@ -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/typecheck/tests/BubbleSort.java b/typecheck/tests/BubbleSort.java deleted file mode 100644 index e5645a9..0000000 --- a/typecheck/tests/BubbleSort.java +++ /dev/null @@ -1,93 +0,0 @@ -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/typecheck/tests/DeclareNone.java b/typecheck/tests/DeclareNone.java deleted file mode 100644 index 0790056..0000000 --- a/typecheck/tests/DeclareNone.java +++ /dev/null @@ -1,6 +0,0 @@ -class DeclareNone{ - public static void main(String[] a){ - A a ; // 'A' does not exist - a = new A() ; - } -} diff --git a/typecheck/tests/Empty.java b/typecheck/tests/Empty.java deleted file mode 100644 index 975ac63..0000000 --- a/typecheck/tests/Empty.java +++ /dev/null @@ -1,5 +0,0 @@ -class Empty { - public static void main(String[] a) { - System.out.println(1); - } -} diff --git a/typecheck/tests/Factorial-error.java b/typecheck/tests/Factorial-error.java deleted file mode 100644 index 46ec59a..0000000 --- a/typecheck/tests/Factorial-error.java +++ /dev/null @@ -1,16 +0,0 @@ -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/typecheck/tests/Factorial.java b/typecheck/tests/Factorial.java deleted file mode 100644 index d938bb6..0000000 --- a/typecheck/tests/Factorial.java +++ /dev/null @@ -1,16 +0,0 @@ -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/typecheck/tests/FactorialEdit.java b/typecheck/tests/FactorialEdit.java deleted file mode 100644 index 919ed82..0000000 --- a/typecheck/tests/FactorialEdit.java +++ /dev/null @@ -1,20 +0,0 @@ -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/typecheck/tests/IsPositive.java b/typecheck/tests/IsPositive.java deleted file mode 100644 index 09bcf1d..0000000 --- a/typecheck/tests/IsPositive.java +++ /dev/null @@ -1,29 +0,0 @@ -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/typecheck/tests/LinearSearch-error.java b/typecheck/tests/LinearSearch-error.java deleted file mode 100644 index f8c48fe..0000000 --- a/typecheck/tests/LinearSearch-error.java +++ /dev/null @@ -1,99 +0,0 @@ -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/typecheck/tests/LinearSearch.java b/typecheck/tests/LinearSearch.java deleted file mode 100644 index daddd94..0000000 --- a/typecheck/tests/LinearSearch.java +++ /dev/null @@ -1,99 +0,0 @@ -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/typecheck/tests/LinkedList-error.java b/typecheck/tests/LinkedList-error.java deleted file mode 100644 index 181b599..0000000 --- a/typecheck/tests/LinkedList-error.java +++ /dev/null @@ -1,278 +0,0 @@ -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/typecheck/tests/LinkedList.java b/typecheck/tests/LinkedList.java deleted file mode 100644 index 69adc33..0000000 --- a/typecheck/tests/LinkedList.java +++ /dev/null @@ -1,278 +0,0 @@ -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/typecheck/tests/MoreThan4-error.java b/typecheck/tests/MoreThan4-error.java deleted file mode 100644 index 9e8f63e..0000000 --- a/typecheck/tests/MoreThan4-error.java +++ /dev/null @@ -1,29 +0,0 @@ -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/typecheck/tests/MoreThan4.java b/typecheck/tests/MoreThan4.java deleted file mode 100644 index 4960f01..0000000 --- a/typecheck/tests/MoreThan4.java +++ /dev/null @@ -1,29 +0,0 @@ -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/typecheck/tests/NewNone.java b/typecheck/tests/NewNone.java deleted file mode 100644 index 7858853..0000000 --- a/typecheck/tests/NewNone.java +++ /dev/null @@ -1,9 +0,0 @@ -class NewNone{ - public static void main(String[] a){ - A a ; - a = new A() ; - } -} - -class A { -} diff --git a/typecheck/tests/Operator.java b/typecheck/tests/Operator.java deleted file mode 100644 index 732c905..0000000 --- a/typecheck/tests/Operator.java +++ /dev/null @@ -1,15 +0,0 @@ -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/typecheck/tests/Printer-error.java b/typecheck/tests/Printer-error.java deleted file mode 100644 index 3f6469f..0000000 --- a/typecheck/tests/Printer-error.java +++ /dev/null @@ -1,5 +0,0 @@ -class Printer{ - public static void main(String[] a){ - System.out.println(false); - } -} diff --git a/typecheck/tests/Printer.java b/typecheck/tests/Printer.java deleted file mode 100644 index 3c4fa2f..0000000 --- a/typecheck/tests/Printer.java +++ /dev/null @@ -1,5 +0,0 @@ -class Printer{ - public static void main(String[] a){ - // System.out.println(0); - } -} diff --git a/typecheck/tests/QuickSort-error.java b/typecheck/tests/QuickSort-error.java deleted file mode 100644 index ff4ea2e..0000000 --- a/typecheck/tests/QuickSort-error.java +++ /dev/null @@ -1,112 +0,0 @@ -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 vapor; + ArrayList vaporm; + + protected Kettle(ArrayList vapor) { + MinimalLogger.info("Pouring program into kettle..."); + this.vapor = vapor; + this.vaporm = new ArrayList(); + } + + protected String get(Node n) { + /** + * Given the source position of a Node, returns the original line. + */ + return this.vapor.get(this.indexOf(n)); + } + + protected void replaceFunctionDeclare(VFunction prev, int in, + int out, int local) { + /** + * Replaces a function declaraction in the program + * with the vapor equivalent. + */ + String next = String.format("func %s [in %d, out %d, local %d]", + this.parseFuncName(prev), + in, + out, + local); + + MinimalLogger.info(String.format("Replacing function declaraction %s with %s", + this.get(prev), + next)); + + this.set(prev, next); + } + + protected String parseFuncName(VFunction func) { + /** + * Helper for replaceFunctionDeclare + * "func A_foo(this t.1)" -> "A_foo" + */ + String str = this.get(func); + int openParenIndex = str.indexOf('('); + return str.substring(5, openParenIndex).trim(); + } + + protected String spill() { + return null; + } + + protected String backup() { + return null; + } + + protected String dump() { + return String.join("\n", this.vapor); + } + + private void set(Node n, String s) { + /** + * Sets the position of Node n in the original + * file to String s. + */ + this.vapor.set(this.indexOf(n), s); + } + + protected int indexOf(Node n) { + return n.sourcePos.line-1; + } + + // METHODS INTENDED TO BE USED WITH CFG + + /** + * Needed because VBranch doesn't seem to + * keep track of this... + */ + protected int findLabelIndex(String str) { + int index = -3; + // is this guarenteed? + String search = str.substring(1); + String comp; + for (int i = 0; i < this.vapor.size(); ++i) { + if (!this.vapor.get(i).isEmpty()) { + comp = this.vapor.get(i).trim(); + if (comp.substring(0, comp.length()-1) + .equals(search)) { + index = i; + break; + } + } + } + + if (index == -3) { + MinimalLogger.severe(String.format("findLabelIndex could not compute label for %s!", + str.trim())); + } + // go to the section AFTER the label, and account for starting at zero + return index+2; + } + +} diff --git a/vaporize/LIRDict.java b/vaporize/LIRDict.java new file mode 100644 index 0000000..4f3d3c1 --- /dev/null +++ b/vaporize/LIRDict.java @@ -0,0 +1,86 @@ +package vaporize; + +import cs132.vapor.ast.VFunction; +import cs132.vapor.ast.VInstr; + +import misc.*; +import cfg.*; +import java.util.*; + +public class LIRDict { + + private TreeSet intervals; + private int spilled_num; // the number of spilled registers + private ControlFlowGraph cfg; + + public LIRDict(VFunction f, ControlFlowGraph cfg) { + + this.intervals = new TreeSet((v1, v2) -> { + return (v1.compareTo(v2) != 0) ? v1.compareTo(v2) : v1.equals(v2) ? 0 : 1; + }); + this.cfg = cfg; + + for (VInstr s : f.body) { + CFGNode n = cfg.getNode(s); + int line = n.getInstruction().sourcePos.line; + + String info = "L" + line; + for (String var : n.getReaching()) + if (!this.contains(var)) { + this.intervals.add(new LIRVar(var, line, line)); + MinimalLogger.info(String.format("Reaching on %s --- New var %s", + info, + var)); + } else { + this.getInterval(var).trySetLastUse(line); + MinimalLogger.info(String.format("Reaching on %s --- Updating var %s", + info, + var)); + } + for (String var : n.getLiveness()) { + if (!this.contains(var)) + MinimalLogger.severe(String.format("%s was used before defined!", + var)); + MinimalLogger.info(String.format("Liveness on %s --- Updating var %s", + info, + var)); + this.getInterval(var).trySetLastUse(line); + } + + } + } + + public LIRVar getInterval(String s) { + LIRVar ret = null; + for (LIRVar v : this.intervals) { + if (v.equals(s)) { + ret = v; + break; + } + } + + return ret; + } + + public boolean contains(String s) { + return this.getInterval(s) != null; + } + + public SortedSet getIntervals() { + // TODO Make this class iterable instead + return Collections.unmodifiableSortedSet(this.intervals); + } + + public String getFunction() { + return this.cfg.getFunction(); + } + + public void addSpilledNum() { + ++this.spilled_num; + } + + public int getSpilledNum() { + return this.spilled_num; + } + +} diff --git a/vaporize/LIRVar.java b/vaporize/LIRVar.java new file mode 100644 index 0000000..da23af5 --- /dev/null +++ b/vaporize/LIRVar.java @@ -0,0 +1,80 @@ +package vaporize; + +import misc.*; + +public class LIRVar implements Comparable { + + private String alias; + private TransientInterval interval; + + private String register; + + public LIRVar(String alias, int fd, int lu) { + this.alias = alias; + this.interval = new TransientInterval(fd, lu); + this.register = null; + } + + @Override public String toString() { + return String.format("%s: %d -> %d", + this.alias, + this.interval.first_def, + this.interval.last_use); + } + + @Override public boolean equals(Object other) { + return (other instanceof LIRVar && + ((LIRVar) other).alias.equals(this.alias) && + ((LIRVar) other).interval.equals(this.interval)) || + (other instanceof String && + this.alias.equals((String) other)); + } + + @Override public int hashCode() { + return alias.hashCode(); + } + + @Override public int compareTo(LIRVar other) { + int ret; + if (this.interval.first_def > other.interval.first_def) + ret = 1; + else if (this.interval.first_def < other.interval.first_def) + ret = -1; + else + ret = 0; + return ret; + } + + protected boolean trySetLastUse(int last_use) { + /** + * If the passed last_use is greater than + * the this.last_use, override this.last_use. + */ + boolean ret = last_use > this.interval.last_use; + + if (ret) + this.interval.last_use = last_use; + else + MinimalLogger.info(String.format("Bad order! %s %d >= %d", + this.alias, + this.interval.last_use, + last_use)); + return ret; + } + + public void assignRegister(String register) { + this.register = register; + } + + public int getFirstDef() { + return this.interval.first_def; + } + + public int getLastUse() { + return this.interval.last_use; + } + + public String getAssignedRegister() { + return this.register; + } +} diff --git a/vaporize/LIRVisitor.java b/vaporize/LIRVisitor.java new file mode 100644 index 0000000..d336ffe --- /dev/null +++ b/vaporize/LIRVisitor.java @@ -0,0 +1,258 @@ +package vaporize; + +import cs132.vapor.ast.*; +import graphviz.*; +import cfg.*; +import misc.*; + +import java.io.File; +import java.util.*; + +public class LIRVisitor extends VInstr.VisitorPR { + + private boolean use_graphviz = true; // if true, generates svg files of the edges in each function + + private Kettle kettle; + private ArrayList lirs; + private CFGNode curr; // the current node being processed + private String dot_format; // a list of edges to be processed by graphviz + + public LIRVisitor(VaporProgram vp, ArrayList vapor) { + this.kettle = new Kettle(vapor); + this.lirs = new ArrayList(); + this.curr = null; + + + for (VFunction f : vp.functions) { + ControlFlowGraph cfg = new ControlFlowGraph(f); + this.dot_format = ""; + + MinimalLogger.info(String.format("LIRVisitor is collecting nodes for %s", + this.kettle.parseFuncName(f))); + for (VCodeLabel s : f.labels) { + cfg.addNode(new CFGNode(s)); + } + for (VInstr s : f.body) { + cfg.addNode(new CFGNode(s)); + } + + + MinimalLogger.info(String.format("LIRVisitor is collecting edges for %s", + this.kettle.parseFuncName(f))); + + // inital setup + // first visit may not find edges; cfg.addEdges will handle + this.curr = cfg.getNode(f.body[0]); + // cascades downwards --- cfg.addEdges + for (VVarRef.Local l : f.params) + cfg.addReaching(this.curr, l.ident.toString()); + for (VInstr s : f.body) + s.accept(cfg, this); + + MinimalLogger.info(String.format("Spitting out reaching/liveness...")); + for (CFGNode n : cfg.getNodes()) + MinimalLogger.info(String.format("%s ::: %s ::: %s", + n.toString(), + n.getReaching(), + n.getLiveness())); + + if (this.use_graphviz) + this.createDotGraph(this.kettle.parseFuncName(f)); + + MinimalLogger.info(String.format("Gathering intervals for %s", + this.kettle.parseFuncName(f))); + LIRDict lir = new LIRDict(f, cfg); + this.lirs.add(lir); + MinimalLogger.info(String.format("Found intervals: %s", + lir.getIntervals().toString())); + } + } + + public ArrayList getLIRs() { + return this.lirs; + } + + protected void createDotGraph(String file_name) { + MinimalLogger.info(String.format("Outputting %s to %s", + this.dot_format, + file_name)); + GraphViz gv = new GraphViz(); + gv.addln(gv.start_graph()); + gv.add(this.dot_format); + gv.addln(gv.end_graph()); + String type = "svg"; + gv.decreaseDpi(); + gv.decreaseDpi(); + gv.decreaseDpi(); + gv.decreaseDpi(); + File out = new File(file_name+"."+ type); + gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out ); + } + + public String visit(ControlFlowGraph cfg, VMemRead n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.curr = curr; + + cfg.addReaching(curr, n.dest.toString()); + cfg.addLiveness(curr, ((VMemRef.Global) n.source).base.toString()); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(ControlFlowGraph cfg, VMemWrite n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.curr = curr; + + cfg.addLiveness(curr, n.source.toString()); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(ControlFlowGraph cfg, VAssign n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.curr = curr; + + cfg.addReaching(curr, n.dest.toString()); + cfg.addLiveness(curr, n.source.toString()); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(ControlFlowGraph cfg, VBranch n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.dot_format += cfg.addEdge(curr, cfg.getNode(new Integer(this.kettle + .findLabelIndex(n.target.toString())))); + + cfg.addLiveness(curr, n.value.toString()); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(ControlFlowGraph cfg, VGoto n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.dot_format += cfg.addEdge(curr, + cfg.getNode(new Integer(this.kettle + .findLabelIndex(n.target.toString())))); + + this.curr = cfg.getNextNode(curr); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(ControlFlowGraph cfg, VCall n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.curr = curr; + + if (n.dest != null) + cfg.addReaching(curr, n.dest.toString()); + for (VOperand a : n.args) { + cfg.addLiveness(curr, a.toString()); + } + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(ControlFlowGraph cfg, VBuiltIn n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.curr = curr; + + if (n.dest != null) + cfg.addReaching(curr, n.dest.toString()); + for (VOperand a : n.args) { + cfg.addLiveness(curr, a.toString()); + } + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(ControlFlowGraph cfg, VReturn n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + CFGNode curr = cfg.getNode(n); + this.dot_format += cfg.addEdge(this.curr, curr); + this.curr = curr; + + if (n.value != null) + cfg.addLiveness(curr, n.value.toString()); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (\"%s\":%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + +} diff --git a/vaporize/RegisterAlloc.java b/vaporize/RegisterAlloc.java new file mode 100644 index 0000000..4b956d0 --- /dev/null +++ b/vaporize/RegisterAlloc.java @@ -0,0 +1,71 @@ +package vaporize; + +import java.util.*; +import misc.*; + +public class RegisterAlloc { + + private LIRDict intervals; + private String[] all_registers; + private Stack free_registers; + private TreeSet active; + + public RegisterAlloc(LIRDict intervals, String[] all_registers) { + this.intervals = intervals; + this.all_registers = all_registers; + this.free_registers = new Stack(); + this.free_registers.addAll(Arrays.asList(this.all_registers)); + this.active = new TreeSet((v1, v2) -> { + int ret; + if (v1.getLastUse() > v2.getLastUse()) + ret = 1; + else if (v1.getLastUse() < v2.getLastUse()) + ret = -1; + else if (v1.equals(v2)) + ret = 0; + else + ret = 1; + return ret; + }); + + MinimalLogger.info(String.format("Starting allocation with registers %s", + this.free_registers.toString())); + + String register; + for (LIRVar interval : this.intervals.getIntervals()) { + this.expireOldIntervals(interval); + if (this.active.size() >= this.all_registers.length) + this.spillAtInterval(interval); + else { + register = this.free_registers.pop(); + interval.assignRegister(register); + this.active.add(interval); + MinimalLogger.info(String.format("Assigning register %s to %s.", + register, + interval.toString())); + + } + } + } + + private void expireOldIntervals(LIRVar interval) { + for (LIRVar active : new TreeSet(this.active)) { + if (active.getLastUse() >= interval.getFirstDef()) + return; + MinimalLogger.info("Register " + active.getAssignedRegister() + " expired!"); + this.active.remove(active); + this.free_registers.push(active.getAssignedRegister()); + } + } + + private void spillAtInterval(LIRVar interval) { + MinimalLogger.severe(String.format("Ran out of free registers, but a spill for %s was not performed!", + interval.toString())); + this.intervals.addSpilledNum(); + // LIRVar spill = this.active.get(this.active.length()-1); + // if (spill.getLastUse() > interval.getLastUse()) { + // ; + // } + } + +} diff --git a/vaporize/SpillEverywhere.java b/vaporize/SpillEverywhere.java new file mode 100644 index 0000000..317c79d --- /dev/null +++ b/vaporize/SpillEverywhere.java @@ -0,0 +1,92 @@ +package vaporize; + +import cs132.vapor.ast.*; +import st.*; +import misc.*; +import java.util.*; + +public class SpillEverywhere extends VInstr.VisitorPR { + + private VaporProgram vp; + private Kettle kettle; + + public SpillEverywhere(VaporProgram vp, ArrayList vapor) { + this.vp = vp; + this.kettle = new Kettle(vapor); + + for (VFunction f : this.vp.functions) { + MinimalLogger.severe("Num : " + Arrays.toString(f.vars)); + this.kettle.replaceFunctionDeclare(f, 0, 0, 3); // use three registers for "spill everywhere" + for (VInstr s : f.body) { + s.accept("", this); + } + } + MinimalLogger.info(kettle.dump()); + } + + + public String visit(String p, VMemRead n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(String p, VMemWrite n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(String p, VAssign n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(String p, VBranch n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(String p, VGoto n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(String p, VCall n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(String p, VBuiltIn n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.op.name, + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + + public String visit(String p, VReturn n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s:%s)", + n.getClass().getSimpleName(), + this.kettle.get(n).trim(), + n.sourcePos.toString())); + return null; + } + +} diff --git a/vaporize/TransientInterval.java b/vaporize/TransientInterval.java new file mode 100644 index 0000000..3399092 --- /dev/null +++ b/vaporize/TransientInterval.java @@ -0,0 +1,21 @@ +package vaporize; + +import misc.*; + +class TransientInterval { + + protected int first_def; + protected int last_use; + + protected TransientInterval(int first_def, int last_use) { + this.first_def = first_def; + this.last_use = last_use; + } + + @Override public boolean equals(Object other) { + TransientInterval o; + return (other instanceof TransientInterval) && + (((o = (TransientInterval) other)).first_def == this.first_def); + } + +} diff --git a/vaporize/VaporizeVisitor.java b/vaporize/VaporizeVisitor.java new file mode 100644 index 0000000..3562887 --- /dev/null +++ b/vaporize/VaporizeVisitor.java @@ -0,0 +1,271 @@ +package vaporize; + +import cs132.vapor.ast.*; +import misc.*; + +import java.util.*; + +public class VaporizeVisitor extends VInstr.VisitorP { + + private ArrayList vaporm; + + String[] callee_save = new String[] { "$s0", "$s1", "$s2", "$s3", "$s4", "$s5", "$s6", "$s7" }; + String[] caller_save = new String[] { "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8" }; + String[] arg_pass = new String[] { "$a0", "$a1", "$a2", "$a3" }; + String[] ret_pass = new String[] { "$v0" }; + + public VaporizeVisitor(VaporProgram vp, ArrayList vaporm, ArrayList interval_list) { + this.vaporm = vaporm; + + // is it possible for interval_list and the + // function in vp to be out of order? + for (int i = 0; i < vp.functions.length; ++i) { + this.addVaporm(String.format("func %s [in %d, out %d, local %d]", + vp.functions[i].ident, 0, 0, interval_list.get(i).getSpilledNum() + 17)); + for (int j = 0; j < this.callee_save.length; ++j) { + this.addVaporm(String.format(" local[%s] = %s", + j, + this.callee_save[j])); + } + + for (int j = 0; j < vp.functions[i].params.length; ++j) + this.addVaporm(String.format(" %s = %s", + interval_list.get(i).getInterval(vp.functions[i].params[j].toString()) + .getAssignedRegister(), + arg_pass[j])); + + + TreeSet f = this.sortFunction(vp.functions[i]); + MinimalLogger.info(String.format("Starting loop with function:\n %s", + f.toString())); + + for (Node n : f) { + if (n instanceof VInstr) + ((VInstr) n).accept(interval_list.get(i), this); + else + this.addVaporm(((VCodeLabel) n).ident + ":"); + } + } + } + + public TreeSet sortFunction(VFunction f) { + TreeSet sort = new TreeSet((v1, v2) -> { + return Integer.compare(v1.sourcePos.line, v2.sourcePos.line); + }); + + for (VInstr s : f.body) { + sort.add(s); + } + for (VCodeLabel l : f.labels) { + sort.add(l); + } + return sort; + } + + public ArrayList getVaporm() { + return this.vaporm; + } + + public void addVaporm(String str) { + MinimalLogger.info(String.format("Adding string:\n%s", + str)); + this.vaporm.add(str); + } + + public void visit(LIRDict d, VAssign n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + String dest = d.getInterval(((VVarRef.Local) n.dest).ident).getAssignedRegister(); + String source = (n.source instanceof VVarRef.Local) ? + d.getInterval(n.source.toString()).getAssignedRegister() + : n.source.toString(); + this.addVaporm(String.format(" %s = %s", + dest, source)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + + public void visit(LIRDict d, VCall n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + + for (int i = 0; i < this.caller_save.length; ++i) { + this.addVaporm(String.format(" local[%s] = %s", + i+8, + this.caller_save[i])); + } + + // FIXME for arg num > 4! + for (int i = 0; i < n.args.length; ++i) { + String reg = (n.args[i] instanceof VVarRef.Local) ? + d.getInterval(n.args[i].toString()).getAssignedRegister() + : n.args[i].toString(); + MinimalLogger.info(String.format("Adding argument for %s", + n.args[i].toString)); + this.addVaporm(String.format(" %s = %s", + this.arg_pass[i], + reg)); + } + + this.addVaporm(String.format(" call %s", + d.getInterval(n.addr.toString()) + .getAssignedRegister())); + // get dest + if (n.dest != null) { + this.addVaporm(String.format(" %s = $v0", + d.getInterval(((VVarRef.Local) n.dest).ident) + .getAssignedRegister())); + } + + for (int i = 0; i < this.caller_save.length; ++i) { + this.addVaporm(String.format(" %s = local[%s]", + this.caller_save[i], + i+8)); + } + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + + public void visit(LIRDict d, VBuiltIn n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + String ret = ""; + if (n.dest != null) { + ret += String.format("%s = ", + d.getInterval(((VVarRef.Local) n.dest).ident) + .getAssignedRegister()); + } + ret += String.format("%s(", + ((VBuiltIn.Op) n.op).name); + + String par; + for (VOperand a : n.args) { + par = (a instanceof VVarRef.Local) ? + d.getInterval(a.toString()).getAssignedRegister() + : a.toString(); + ret += String.format("%s ", + par); + } + + ret += ")"; + + this.addVaporm(String.format(" %s", + ret)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + + public void visit(LIRDict d, VMemWrite n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + String dest = d.getInterval(((VMemRef.Global) n.dest).base.toString()) + .getAssignedRegister(); + String source = (n.source instanceof VVarRef.Local) ? + d.getInterval(n.source.toString()).getAssignedRegister() : + n.source.toString(); + int byteOffset = ((VMemRef.Global) n.dest).byteOffset; + this.addVaporm(String.format(" [%s+%d] = %s", + dest, byteOffset, source)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + + public void visit(LIRDict d, VMemRead n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + String dest = (n.dest instanceof VVarRef.Local) ? + d.getInterval(n.dest.toString()).getAssignedRegister() : + n.dest.toString(); + String source = d.getInterval(((VMemRef.Global) n.source).base.toString()) + .getAssignedRegister(); + int byteOffset = ((VMemRef.Global) n.source).byteOffset; + this.addVaporm(String.format(" %s = [%s+%d]", + dest, source, byteOffset)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + + public void visit(LIRDict d, VBranch n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + String ret = " "; + if (n.positive) + ret += "if "; + else + ret += "if0 "; + + ret += d.getInterval(n.value.toString()) + .getAssignedRegister() + " goto :"; + + ret += n.target.ident; + + this.addVaporm(String.format("%s", + ret)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + + public void visit(LIRDict d, VGoto n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + this.addVaporm(String.format(" goto :%s", + (((VAddr.Label) n.target).label).ident)); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + + public void visit(LIRDict d, VReturn n) throws RuntimeException { + MinimalLogger.info(String.format("->%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + /////////////////////////////////////////////////////////////// + // get ret + if (n.value != null) { + String reg = (n.value instanceof VVarRef.Local) ? + d.getInterval(n.value.toString()).getAssignedRegister() : + n.value.toString(); + this.addVaporm(String.format(" $v0 = %s", + d.getInterval(((VVarRef.Local) n.value).ident) + .getAssignedRegister())); + } + for (int j = 0; j < this.callee_save.length; ++j) { + this.addVaporm(String.format(" %s = local[%s]", + this.callee_save[j], + j)); + } + this.addVaporm(" ret"); + /////////////////////////////////////////////////////////////// + MinimalLogger.info(String.format("<-%s (%s)", + n.getClass().getSimpleName(), + n.sourcePos.toString())); + } + +} diff --git a/vaporize/library/Kettle.java b/vaporize/library/Kettle.java deleted file mode 100644 index ffbf2dd..0000000 --- a/vaporize/library/Kettle.java +++ /dev/null @@ -1,116 +0,0 @@ -package vaporize.library; - -import cs132.vapor.ast.*; -import misc.*; - -import java.util.ArrayList; - -/** - * This class contains various generic methods for - * assembling common-use vaporm strings and managing - * the original input program. - * - * Robert Martin cries - */ -class Kettle { - - ArrayList vapor; - ArrayList vaporm; - - protected Kettle(ArrayList vapor) { - MinimalLogger.info("Pouring program into kettle..."); - this.vapor = vapor; - this.vaporm = new ArrayList(); - } - - protected String get(Node n) { - /** - * Given the source position of a Node, returns the original line. - */ - return this.vapor.get(this.indexOf(n)); - } - - protected void replaceFunctionDeclare(VFunction prev, int in, - int out, int local) { - /** - * Replaces a function declaraction in the program - * with the vapor equivalent. - */ - String next = String.format("func %s [in %d, out %d, local %d]", - this.parseFuncName(prev), - in, - out, - local); - - MinimalLogger.info(String.format("Replacing function declaraction %s with %s", - this.get(prev), - next)); - - this.set(prev, next); - } - - protected String parseFuncName(VFunction func) { - /** - * Helper for replaceFunctionDeclare - * "func A_foo(this t.1)" -> "A_foo" - */ - String str = this.get(func); - int openParenIndex = str.indexOf('('); - return str.substring(5, openParenIndex).trim(); - } - - protected String spill() { - return null; - } - - protected String backup() { - return null; - } - - protected String dump() { - return String.join("\n", this.vapor); - } - - private void set(Node n, String s) { - /** - * Sets the position of Node n in the original - * file to String s. - */ - this.vapor.set(this.indexOf(n), s); - } - - protected int indexOf(Node n) { - return n.sourcePos.line-1; - } - - // METHODS INTENDED TO BE USED WITH CFG - - /** - * Needed because VBranch doesn't seem to - * keep track of this... - */ - protected int findLabelIndex(String str) { - int index = -3; - // is this guarenteed? - String search = str.substring(1); - String comp; - for (int i = 0; i < this.vapor.size(); ++i) { - if (!this.vapor.get(i).isEmpty()) { - comp = this.vapor.get(i).trim(); - if (comp.substring(0, comp.length()-1) - .equals(search)) { - index = i; - break; - } - } - } - - if (index == -3) { - MinimalLogger.severe(String.format("findLabelIndex could not compute label for %s!", - str.trim())); - } - // go to the section AFTER the label, and account for starting at zero - return index+2; - } - -} diff --git a/vaporize/library/LIRDict.java b/vaporize/library/LIRDict.java deleted file mode 100644 index d924d5e..0000000 --- a/vaporize/library/LIRDict.java +++ /dev/null @@ -1,86 +0,0 @@ -package vaporize.library; - -import cs132.vapor.ast.VFunction; -import cs132.vapor.ast.VInstr; - -import misc.*; -import cfg.*; -import java.util.*; - -public class LIRDict { - - private TreeSet intervals; - private int spilled_num; // the number of spilled registers - private ControlFlowGraph cfg; - - public LIRDict(VFunction f, ControlFlowGraph cfg) { - - this.intervals = new TreeSet((v1, v2) -> { - return (v1.compareTo(v2) != 0) ? v1.compareTo(v2) : v1.equals(v2) ? 0 : 1; - }); - this.cfg = cfg; - - for (VInstr s : f.body) { - CFGNode n = cfg.getNode(s); - int line = n.getInstruction().sourcePos.line; - - String info = "L" + line; - for (String var : n.getReaching()) - if (!this.contains(var)) { - this.intervals.add(new LIRVar(var, line, line)); - MinimalLogger.info(String.format("Reaching on %s --- New var %s", - info, - var)); - } else { - this.getInterval(var).trySetLastUse(line); - MinimalLogger.info(String.format("Reaching on %s --- Updating var %s", - info, - var)); - } - for (String var : n.getLiveness()) { - if (!this.contains(var)) - MinimalLogger.severe(String.format("%s was used before defined!", - var)); - MinimalLogger.info(String.format("Liveness on %s --- Updating var %s", - info, - var)); - this.getInterval(var).trySetLastUse(line); - } - - } - } - - public LIRVar getInterval(String s) { - LIRVar ret = null; - for (LIRVar v : this.intervals) { - if (v.equals(s)) { - ret = v; - break; - } - } - - return ret; - } - - public boolean contains(String s) { - return this.getInterval(s) != null; - } - - public SortedSet getIntervals() { - // TODO Make this class iterable instead - return Collections.unmodifiableSortedSet(this.intervals); - } - - public String getFunction() { - return this.cfg.getFunction(); - } - - public void addSpilledNum() { - ++this.spilled_num; - } - - public int getSpilledNum() { - return this.spilled_num; - } - -} diff --git a/vaporize/library/LIRVar.java b/vaporize/library/LIRVar.java deleted file mode 100644 index d388797..0000000 --- a/vaporize/library/LIRVar.java +++ /dev/null @@ -1,81 +0,0 @@ -package vaporize.library; - -import misc.*; - -public class LIRVar implements Comparable { - - private String alias; - private TransientInterval interval; - - private String register; - - public LIRVar(String alias, int fd, int lu) { - this.alias = alias; - this.interval = new TransientInterval(fd, lu); - this.register = null; - } - - @Override public String toString() { - return String.format("%s: %d -> %d", - this.alias, - this.interval.first_def, - this.interval.last_use); - } - - @Override public boolean equals(Object other) { - return (other instanceof LIRVar && - ((LIRVar) other).alias.equals(this.alias) && - ((LIRVar) other).interval.equals(this.interval)) || - (other instanceof String && - this.alias.equals((String) other)); - } - - @Override public int hashCode() { - return alias.hashCode(); - } - - @Override public int compareTo(LIRVar other) { - int ret; - if (this.interval.first_def > other.interval.first_def) - ret = 1; - else if (this.interval.first_def < other.interval.first_def) - ret = -1; - else - ret = 0; - return ret; - } - - protected boolean trySetLastUse(int last_use) { - /** - * If the passed last_use is greater than - * the this.last_use, override this.last_use. - */ - boolean ret = last_use > this.interval.last_use; - - if (ret) - this.interval.last_use = last_use; - else - MinimalLogger.info(String.format("Bad order! %s %d >= %d", - this.alias, - this.interval.last_use, - last_use)); - return ret; - } - - public void assignRegister(String register) { - this.register = register; - } - - public int getFirstDef() { - return this.interval.first_def; - } - - public int getLastUse() { - return this.interval.last_use; - } - - public String getAssignedRegister() { - return this.register; - } -} - diff --git a/vaporize/library/LIRVisitor.java b/vaporize/library/LIRVisitor.java deleted file mode 100644 index a962775..0000000 --- a/vaporize/library/LIRVisitor.java +++ /dev/null @@ -1,258 +0,0 @@ -package vaporize.library; - -import cs132.vapor.ast.*; -import graphviz.*; -import cfg.*; -import misc.*; - -import java.io.File; -import java.util.*; - -public class LIRVisitor extends VInstr.VisitorPR { - - private boolean use_graphviz = true; // if true, generates svg files of the edges in each function - - private Kettle kettle; - private ArrayList lirs; - private CFGNode curr; // the current node being processed - private String dot_format; // a list of edges to be processed by graphviz - - public LIRVisitor(VaporProgram vp, ArrayList vapor) { - this.kettle = new Kettle(vapor); - this.lirs = new ArrayList(); - this.curr = null; - - - for (VFunction f : vp.functions) { - ControlFlowGraph cfg = new ControlFlowGraph(f); - this.dot_format = ""; - - MinimalLogger.info(String.format("LIRVisitor is collecting nodes for %s", - this.kettle.parseFuncName(f))); - for (VCodeLabel s : f.labels) { - cfg.addNode(new CFGNode(s)); - } - for (VInstr s : f.body) { - cfg.addNode(new CFGNode(s)); - } - - - MinimalLogger.info(String.format("LIRVisitor is collecting edges for %s", - this.kettle.parseFuncName(f))); - - // inital setup - // first visit may not find edges; cfg.addEdges will handle - this.curr = cfg.getNode(f.body[0]); - // cascades downwards --- cfg.addEdges - for (VVarRef.Local l : f.params) - cfg.addReaching(this.curr, l.ident.toString()); - for (VInstr s : f.body) - s.accept(cfg, this); - - MinimalLogger.info(String.format("Spitting out reaching/liveness...")); - for (CFGNode n : cfg.getNodes()) - MinimalLogger.info(String.format("%s ::: %s ::: %s", - n.toString(), - n.getReaching(), - n.getLiveness())); - - if (this.use_graphviz) - this.createDotGraph(this.kettle.parseFuncName(f)); - - MinimalLogger.info(String.format("Gathering intervals for %s", - this.kettle.parseFuncName(f))); - LIRDict lir = new LIRDict(f, cfg); - this.lirs.add(lir); - MinimalLogger.info(String.format("Found intervals: %s", - lir.getIntervals().toString())); - } - } - - public ArrayList getLIRs() { - return this.lirs; - } - - protected void createDotGraph(String file_name) { - MinimalLogger.info(String.format("Outputting %s to %s", - this.dot_format, - file_name)); - GraphViz gv = new GraphViz(); - gv.addln(gv.start_graph()); - gv.add(this.dot_format); - gv.addln(gv.end_graph()); - String type = "svg"; - gv.decreaseDpi(); - gv.decreaseDpi(); - gv.decreaseDpi(); - gv.decreaseDpi(); - File out = new File(file_name+"."+ type); - gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out ); - } - - public String visit(ControlFlowGraph cfg, VMemRead n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.curr = curr; - - cfg.addReaching(curr, n.dest.toString()); - cfg.addLiveness(curr, ((VMemRef.Global) n.source).base.toString()); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(ControlFlowGraph cfg, VMemWrite n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.curr = curr; - - cfg.addLiveness(curr, n.source.toString()); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(ControlFlowGraph cfg, VAssign n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.curr = curr; - - cfg.addReaching(curr, n.dest.toString()); - cfg.addLiveness(curr, n.source.toString()); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(ControlFlowGraph cfg, VBranch n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.dot_format += cfg.addEdge(curr, cfg.getNode(new Integer(this.kettle - .findLabelIndex(n.target.toString())))); - - cfg.addLiveness(curr, n.value.toString()); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(ControlFlowGraph cfg, VGoto n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.dot_format += cfg.addEdge(curr, - cfg.getNode(new Integer(this.kettle - .findLabelIndex(n.target.toString())))); - - this.curr = cfg.getNextNode(curr); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(ControlFlowGraph cfg, VCall n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.curr = curr; - - if (n.dest != null) - cfg.addReaching(curr, n.dest.toString()); - for (VOperand a : n.args) { - cfg.addLiveness(curr, a.toString()); - } - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(ControlFlowGraph cfg, VBuiltIn n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.curr = curr; - - if (n.dest != null) - cfg.addReaching(curr, n.dest.toString()); - for (VOperand a : n.args) { - cfg.addLiveness(curr, a.toString()); - } - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(ControlFlowGraph cfg, VReturn n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - CFGNode curr = cfg.getNode(n); - this.dot_format += cfg.addEdge(this.curr, curr); - this.curr = curr; - - if (n.value != null) - cfg.addLiveness(curr, n.value.toString()); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (\"%s\":%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - -} diff --git a/vaporize/library/RegisterAlloc.java b/vaporize/library/RegisterAlloc.java deleted file mode 100644 index b316b96..0000000 --- a/vaporize/library/RegisterAlloc.java +++ /dev/null @@ -1,71 +0,0 @@ -package vaporize.library; - -import java.util.*; -import misc.*; - -public class RegisterAlloc { - - private LIRDict intervals; - private String[] all_registers; - private Stack free_registers; - private TreeSet active; - - public RegisterAlloc(LIRDict intervals, String[] all_registers) { - this.intervals = intervals; - this.all_registers = all_registers; - this.free_registers = new Stack(); - this.free_registers.addAll(Arrays.asList(this.all_registers)); - this.active = new TreeSet((v1, v2) -> { - int ret; - if (v1.getLastUse() > v2.getLastUse()) - ret = 1; - else if (v1.getLastUse() < v2.getLastUse()) - ret = -1; - else if (v1.equals(v2)) - ret = 0; - else - ret = 1; - return ret; - }); - - MinimalLogger.info(String.format("Starting allocation with registers %s", - this.free_registers.toString())); - - String register; - for (LIRVar interval : this.intervals.getIntervals()) { - this.expireOldIntervals(interval); - if (this.active.size() >= this.all_registers.length) - this.spillAtInterval(interval); - else { - register = this.free_registers.pop(); - interval.assignRegister(register); - this.active.add(interval); - MinimalLogger.info(String.format("Assigning register %s to %s.", - register, - interval.toString())); - - } - } - } - - private void expireOldIntervals(LIRVar interval) { - for (LIRVar active : new TreeSet(this.active)) { - if (active.getLastUse() >= interval.getFirstDef()) - return; - MinimalLogger.info("Register " + active.getAssignedRegister() + " expired!"); - this.active.remove(active); - this.free_registers.push(active.getAssignedRegister()); - } - } - - private void spillAtInterval(LIRVar interval) { - MinimalLogger.severe(String.format("Ran out of free registers, but a spill for %s was not performed!", - interval.toString())); - this.intervals.addSpilledNum(); - // LIRVar spill = this.active.get(this.active.length()-1); - // if (spill.getLastUse() > interval.getLastUse()) { - // ; - // } - } - -} diff --git a/vaporize/library/SpillEverywhere.java b/vaporize/library/SpillEverywhere.java deleted file mode 100644 index 993bfa6..0000000 --- a/vaporize/library/SpillEverywhere.java +++ /dev/null @@ -1,92 +0,0 @@ -package vaporize.library; - -import cs132.vapor.ast.*; -import st.*; -import misc.*; -import java.util.*; - -public class SpillEverywhere extends VInstr.VisitorPR { - - private VaporProgram vp; - private Kettle kettle; - - public SpillEverywhere(VaporProgram vp, ArrayList vapor) { - this.vp = vp; - this.kettle = new Kettle(vapor); - - for (VFunction f : this.vp.functions) { - MinimalLogger.severe("Num : " + Arrays.toString(f.vars)); - this.kettle.replaceFunctionDeclare(f, 0, 0, 3); // use three registers for "spill everywhere" - for (VInstr s : f.body) { - s.accept("", this); - } - } - MinimalLogger.info(kettle.dump()); - } - - - public String visit(String p, VMemRead n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(String p, VMemWrite n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(String p, VAssign n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(String p, VBranch n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(String p, VGoto n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(String p, VCall n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(String p, VBuiltIn n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.op.name, - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - - public String visit(String p, VReturn n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s:%s)", - n.getClass().getSimpleName(), - this.kettle.get(n).trim(), - n.sourcePos.toString())); - return null; - } - -} diff --git a/vaporize/library/TransientInterval.java b/vaporize/library/TransientInterval.java deleted file mode 100644 index faf7637..0000000 --- a/vaporize/library/TransientInterval.java +++ /dev/null @@ -1,21 +0,0 @@ -package vaporize.library; - -import misc.*; - -class TransientInterval { - - protected int first_def; - protected int last_use; - - protected TransientInterval(int first_def, int last_use) { - this.first_def = first_def; - this.last_use = last_use; - } - - @Override public boolean equals(Object other) { - TransientInterval o; - return (other instanceof TransientInterval) && - (((o = (TransientInterval) other)).first_def == this.first_def); - } - -} diff --git a/vaporize/library/VaporizeVisitor.java b/vaporize/library/VaporizeVisitor.java deleted file mode 100644 index 0dfca02..0000000 --- a/vaporize/library/VaporizeVisitor.java +++ /dev/null @@ -1,269 +0,0 @@ -package vaporize.library; - -import cs132.vapor.ast.*; -import misc.*; - -import java.util.*; - -public class VaporizeVisitor extends VInstr.VisitorP { - - private ArrayList vaporm; - - String[] callee_save = new String[] { "$s0", "$s1", "$s2", "$s3", "$s4", "$s5", "$s6", "$s7" }; - String[] caller_save = new String[] { "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8" }; - String[] arg_pass = new String[] { "$a0", "$a1", "$a2", "$a3" }; - String[] ret_pass = new String[] { "$v0" }; - - public VaporizeVisitor(VaporProgram vp, ArrayList vaporm, ArrayList interval_list) { - this.vaporm = vaporm; - - // is it possible for interval_list and the - // function in vp to be out of order? - for (int i = 0; i < vp.functions.length; ++i) { - this.addVaporm(String.format("func %s [in %d, out %d, local %d]", - vp.functions[i].ident, 0, 0, interval_list.get(i).getSpilledNum() + 17)); - for (int j = 0; j < this.callee_save.length; ++j) { - this.addVaporm(String.format(" local[%s] = %s", - j, - this.callee_save[j])); - } - - for (int j = 0; j < vp.functions[i].params.length; ++j) - this.addVaporm(String.format(" %s = %s", - interval_list.get(i).getInterval(vp.functions[i].params[j].toString()) - .getAssignedRegister(), - arg_pass[j])); - - - TreeSet f = this.sortFunction(vp.functions[i]); - MinimalLogger.info(String.format("Starting loop with function:\n %s", - f.toString())); - - for (Node n : f) { - if (n instanceof VInstr) - ((VInstr) n).accept(interval_list.get(i), this); - else - this.addVaporm(((VCodeLabel) n).ident + ":"); - } - } - } - - public TreeSet sortFunction(VFunction f) { - TreeSet sort = new TreeSet((v1, v2) -> { - return Integer.compare(v1.sourcePos.line, v2.sourcePos.line); - }); - - for (VInstr s : f.body) { - sort.add(s); - } - for (VCodeLabel l : f.labels) { - sort.add(l); - } - return sort; - } - - public ArrayList getVaporm() { - return this.vaporm; - } - - public void addVaporm(String str) { - MinimalLogger.info(String.format("Adding string:\n%s", - str)); - this.vaporm.add(str); - } - - public void visit(LIRDict d, VAssign n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - String dest = d.getInterval(((VVarRef.Local) n.dest).ident).getAssignedRegister(); - String source = (n.source instanceof VVarRef.Local) ? - d.getInterval(n.source.toString()).getAssignedRegister() - : n.source.toString(); - this.addVaporm(String.format(" %s = %s", - dest, source)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - - public void visit(LIRDict d, VCall n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - - for (int i = 0; i < this.caller_save.length; ++i) { - this.addVaporm(String.format(" local[%s] = %s", - i+8, - this.caller_save[i])); - } - - // FIXME for arg num > 4! - for (int i = 0; i < n.args.length; ++i) { - String reg = (n.args[i] instanceof VVarRef.Local) ? - d.getInterval(n.args[i].toString()).getAssignedRegister() - : n.args[i].toString(); - this.addVaporm(String.format(" %s = %s", - this.arg_pass[i], - reg)); - } - - this.addVaporm(String.format(" call %s", - d.getInterval(n.addr.toString()) - .getAssignedRegister())); - // get dest - if (n.dest != null) { - this.addVaporm(String.format(" %s = $v0", - d.getInterval(((VVarRef.Local) n.dest).ident) - .getAssignedRegister())); - } - - for (int i = 0; i < this.caller_save.length; ++i) { - this.addVaporm(String.format(" %s = local[%s]", - this.caller_save[i], - i+8)); - } - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - - public void visit(LIRDict d, VBuiltIn n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - String ret = ""; - if (n.dest != null) { - ret += String.format("%s = ", - d.getInterval(((VVarRef.Local) n.dest).ident) - .getAssignedRegister()); - } - ret += String.format("%s(", - ((VBuiltIn.Op) n.op).name); - - String par; - for (VOperand a : n.args) { - par = (a instanceof VVarRef.Local) ? - d.getInterval(a.toString()).getAssignedRegister() - : a.toString(); - ret += String.format("%s ", - par); - } - - ret += ")"; - - this.addVaporm(String.format(" %s", - ret)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - - public void visit(LIRDict d, VMemWrite n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - String dest = d.getInterval(((VMemRef.Global) n.dest).base.toString()) - .getAssignedRegister(); - String source = (n.source instanceof VVarRef.Local) ? - d.getInterval(n.source.toString()).getAssignedRegister() : - n.source.toString(); - int byteOffset = ((VMemRef.Global) n.dest).byteOffset; - this.addVaporm(String.format(" [%s+%d] = %s", - dest, byteOffset, source)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - - public void visit(LIRDict d, VMemRead n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - String dest = (n.dest instanceof VVarRef.Local) ? - d.getInterval(n.dest.toString()).getAssignedRegister() : - n.dest.toString(); - String source = d.getInterval(((VMemRef.Global) n.source).base.toString()) - .getAssignedRegister(); - int byteOffset = ((VMemRef.Global) n.source).byteOffset; - this.addVaporm(String.format(" %s = [%s+%d]", - dest, source, byteOffset)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - - public void visit(LIRDict d, VBranch n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - String ret = " "; - if (n.positive) - ret += "if "; - else - ret += "if0 "; - - ret += d.getInterval(n.value.toString()) - .getAssignedRegister() + " goto :"; - - ret += n.target.ident; - - this.addVaporm(String.format("%s", - ret)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - - public void visit(LIRDict d, VGoto n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - this.addVaporm(String.format(" goto :%s", - (((VAddr.Label) n.target).label).ident)); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - - public void visit(LIRDict d, VReturn n) throws RuntimeException { - MinimalLogger.info(String.format("->%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - /////////////////////////////////////////////////////////////// - // get ret - if (n.value != null) { - String reg = (n.value instanceof VVarRef.Local) ? - d.getInterval(n.value.toString()).getAssignedRegister() : - n.value.toString(); - this.addVaporm(String.format(" $v0 = %s", - d.getInterval(((VVarRef.Local) n.value).ident) - .getAssignedRegister())); - } - for (int j = 0; j < this.callee_save.length; ++j) { - this.addVaporm(String.format(" %s = local[%s]", - this.callee_save[j], - j)); - } - this.addVaporm(" ret"); - /////////////////////////////////////////////////////////////// - MinimalLogger.info(String.format("<-%s (%s)", - n.getClass().getSimpleName(), - n.sourcePos.toString())); - } - -} diff --git a/vaporize/tests/BinaryTree.names.vaporm b/vaporize/tests/BinaryTree.names.vaporm deleted file mode 100644 index e5785ee..0000000 --- a/vaporize/tests/BinaryTree.names.vaporm +++ /dev/null @@ -1,996 +0,0 @@ -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/vaporize/tests/BinaryTree.opt.names.vaporm b/vaporize/tests/BinaryTree.opt.names.vaporm deleted file mode 100644 index fa61f97..0000000 --- a/vaporize/tests/BinaryTree.opt.names.vaporm +++ /dev/null @@ -1,797 +0,0 @@ -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/vaporize/tests/BinaryTree.opt.regalloc b/vaporize/tests/BinaryTree.opt.regalloc deleted file mode 100644 index 635f436..0000000 --- a/vaporize/tests/BinaryTree.opt.regalloc +++ /dev/null @@ -1,451 +0,0 @@ -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/vaporize/tests/BinaryTree.opt.vapor b/vaporize/tests/BinaryTree.opt.vapor deleted file mode 100644 index ef6ac4e..0000000 --- a/vaporize/tests/BinaryTree.opt.vapor +++ /dev/null @@ -1,526 +0,0 @@ - -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/vaporize/tests/BinaryTree.opt.vaporm b/vaporize/tests/BinaryTree.opt.vaporm deleted file mode 100644 index f3bee43..0000000 --- a/vaporize/tests/BinaryTree.opt.vaporm +++ /dev/null @@ -1,797 +0,0 @@ -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/vaporize/tests/BinaryTree.regalloc b/vaporize/tests/BinaryTree.regalloc deleted file mode 100644 index 68a8265..0000000 --- a/vaporize/tests/BinaryTree.regalloc +++ /dev/null @@ -1,703 +0,0 @@ -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/vaporize/tests/BinaryTree.vapor b/vaporize/tests/BinaryTree.vapor deleted file mode 100644 index 275cfe3..0000000 --- a/vaporize/tests/BinaryTree.vapor +++ /dev/null @@ -1,719 +0,0 @@ - -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/vaporize/tests/BinaryTree.vaporm b/vaporize/tests/BinaryTree.vaporm deleted file mode 100644 index ad25de5..0000000 --- a/vaporize/tests/BinaryTree.vaporm +++ /dev/null @@ -1,996 +0,0 @@ -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/vaporize/tests/BubbleSort.names.vaporm b/vaporize/tests/BubbleSort.names.vaporm deleted file mode 100644 index 9984ffe..0000000 --- a/vaporize/tests/BubbleSort.names.vaporm +++ /dev/null @@ -1,316 +0,0 @@ -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/vaporize/tests/BubbleSort.opt.names.vaporm b/vaporize/tests/BubbleSort.opt.names.vaporm deleted file mode 100644 index 943b295..0000000 --- a/vaporize/tests/BubbleSort.opt.names.vaporm +++ /dev/null @@ -1,301 +0,0 @@ -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/vaporize/tests/BubbleSort.opt.regalloc b/vaporize/tests/BubbleSort.opt.regalloc deleted file mode 100644 index 5696e19..0000000 --- a/vaporize/tests/BubbleSort.opt.regalloc +++ /dev/null @@ -1,230 +0,0 @@ -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/vaporize/tests/BubbleSort.opt.vapor b/vaporize/tests/BubbleSort.opt.vapor deleted file mode 100644 index a118894..0000000 --- a/vaporize/tests/BubbleSort.opt.vapor +++ /dev/null @@ -1,277 +0,0 @@ - -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/vaporize/tests/BubbleSort.opt.vaporm b/vaporize/tests/BubbleSort.opt.vaporm deleted file mode 100644 index 41c6ac4..0000000 --- a/vaporize/tests/BubbleSort.opt.vaporm +++ /dev/null @@ -1,301 +0,0 @@ -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/vaporize/tests/BubbleSort.regalloc b/vaporize/tests/BubbleSort.regalloc deleted file mode 100644 index bd27d17..0000000 --- a/vaporize/tests/BubbleSort.regalloc +++ /dev/null @@ -1,245 +0,0 @@ -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/vaporize/tests/BubbleSort.vapor b/vaporize/tests/BubbleSort.vapor deleted file mode 100644 index cedba69..0000000 --- a/vaporize/tests/BubbleSort.vapor +++ /dev/null @@ -1,292 +0,0 @@ - -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/vaporize/tests/BubbleSort.vaporm b/vaporize/tests/BubbleSort.vaporm deleted file mode 100644 index f64e2b3..0000000 --- a/vaporize/tests/BubbleSort.vaporm +++ /dev/null @@ -1,316 +0,0 @@ -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/vaporize/tests/Factorial.names.vaporm b/vaporize/tests/Factorial.names.vaporm deleted file mode 100644 index 7c2c2d7..0000000 --- a/vaporize/tests/Factorial.names.vaporm +++ /dev/null @@ -1,40 +0,0 @@ -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/vaporize/tests/Factorial.opt.names.vaporm b/vaporize/tests/Factorial.opt.names.vaporm deleted file mode 100644 index bbc6604..0000000 --- a/vaporize/tests/Factorial.opt.names.vaporm +++ /dev/null @@ -1,30 +0,0 @@ -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/vaporize/tests/Factorial.opt.regalloc b/vaporize/tests/Factorial.opt.regalloc deleted file mode 100644 index 21e46f5..0000000 --- a/vaporize/tests/Factorial.opt.regalloc +++ /dev/null @@ -1,33 +0,0 @@ -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/vaporize/tests/Factorial.opt.vapor b/vaporize/tests/Factorial.opt.vapor deleted file mode 100644 index aca17fe..0000000 --- a/vaporize/tests/Factorial.opt.vapor +++ /dev/null @@ -1,20 +0,0 @@ - -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/vaporize/tests/Factorial.opt.vaporm b/vaporize/tests/Factorial.opt.vaporm deleted file mode 100644 index fb5f8e6..0000000 --- a/vaporize/tests/Factorial.opt.vaporm +++ /dev/null @@ -1,30 +0,0 @@ -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/vaporize/tests/Factorial.regalloc b/vaporize/tests/Factorial.regalloc deleted file mode 100644 index e07e8d1..0000000 --- a/vaporize/tests/Factorial.regalloc +++ /dev/null @@ -1,42 +0,0 @@ -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/vaporize/tests/Factorial.vapor b/vaporize/tests/Factorial.vapor deleted file mode 100644 index 28e1126..0000000 --- a/vaporize/tests/Factorial.vapor +++ /dev/null @@ -1,30 +0,0 @@ - -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/vaporize/tests/Factorial.vaporm b/vaporize/tests/Factorial.vaporm deleted file mode 100644 index a7e981c..0000000 --- a/vaporize/tests/Factorial.vaporm +++ /dev/null @@ -1,40 +0,0 @@ -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/vaporize/tests/LinearSearch.names.vaporm b/vaporize/tests/LinearSearch.names.vaporm deleted file mode 100644 index 7dbe0c8..0000000 --- a/vaporize/tests/LinearSearch.names.vaporm +++ /dev/null @@ -1,182 +0,0 @@ -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/vaporize/tests/LinearSearch.opt.names.vaporm b/vaporize/tests/LinearSearch.opt.names.vaporm deleted file mode 100644 index de6b96a..0000000 --- a/vaporize/tests/LinearSearch.opt.names.vaporm +++ /dev/null @@ -1,162 +0,0 @@ -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/vaporize/tests/LinearSearch.opt.regalloc b/vaporize/tests/LinearSearch.opt.regalloc deleted file mode 100644 index abfdfeb..0000000 --- a/vaporize/tests/LinearSearch.opt.regalloc +++ /dev/null @@ -1,169 +0,0 @@ -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/vaporize/tests/LinearSearch.opt.vapor b/vaporize/tests/LinearSearch.opt.vapor deleted file mode 100644 index 302de05..0000000 --- a/vaporize/tests/LinearSearch.opt.vapor +++ /dev/null @@ -1,130 +0,0 @@ - -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/vaporize/tests/LinearSearch.opt.vaporm b/vaporize/tests/LinearSearch.opt.vaporm deleted file mode 100644 index 4fa8c5c..0000000 --- a/vaporize/tests/LinearSearch.opt.vaporm +++ /dev/null @@ -1,162 +0,0 @@ -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/vaporize/tests/LinearSearch.regalloc b/vaporize/tests/LinearSearch.regalloc deleted file mode 100644 index 817df4f..0000000 --- a/vaporize/tests/LinearSearch.regalloc +++ /dev/null @@ -1,193 +0,0 @@ -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/vaporize/tests/LinearSearch.vapor b/vaporize/tests/LinearSearch.vapor deleted file mode 100644 index db4884a..0000000 --- a/vaporize/tests/LinearSearch.vapor +++ /dev/null @@ -1,150 +0,0 @@ - -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/vaporize/tests/LinearSearch.vaporm b/vaporize/tests/LinearSearch.vaporm deleted file mode 100644 index 094cfe1..0000000 --- a/vaporize/tests/LinearSearch.vaporm +++ /dev/null @@ -1,182 +0,0 @@ -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/vaporize/tests/LinkedList.names.vaporm b/vaporize/tests/LinkedList.names.vaporm deleted file mode 100644 index a04d039..0000000 --- a/vaporize/tests/LinkedList.names.vaporm +++ /dev/null @@ -1,698 +0,0 @@ -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/vaporize/tests/LinkedList.opt.names.vaporm b/vaporize/tests/LinkedList.opt.names.vaporm deleted file mode 100644 index e0b60f8..0000000 --- a/vaporize/tests/LinkedList.opt.names.vaporm +++ /dev/null @@ -1,562 +0,0 @@ -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/vaporize/tests/LinkedList.opt.regalloc b/vaporize/tests/LinkedList.opt.regalloc deleted file mode 100644 index 30991e8..0000000 --- a/vaporize/tests/LinkedList.opt.regalloc +++ /dev/null @@ -1,362 +0,0 @@ -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/vaporize/tests/LinkedList.opt.vapor b/vaporize/tests/LinkedList.opt.vapor deleted file mode 100644 index aaca62c..0000000 --- a/vaporize/tests/LinkedList.opt.vapor +++ /dev/null @@ -1,373 +0,0 @@ - -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/vaporize/tests/LinkedList.opt.vaporm b/vaporize/tests/LinkedList.opt.vaporm deleted file mode 100644 index b9bef66..0000000 --- a/vaporize/tests/LinkedList.opt.vaporm +++ /dev/null @@ -1,562 +0,0 @@ -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/vaporize/tests/LinkedList.regalloc b/vaporize/tests/LinkedList.regalloc deleted file mode 100644 index 7b3da4e..0000000 --- a/vaporize/tests/LinkedList.regalloc +++ /dev/null @@ -1,539 +0,0 @@ -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/vaporize/tests/LinkedList.vapor b/vaporize/tests/LinkedList.vapor deleted file mode 100644 index bebdf94..0000000 --- a/vaporize/tests/LinkedList.vapor +++ /dev/null @@ -1,505 +0,0 @@ - -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/vaporize/tests/LinkedList.vaporm b/vaporize/tests/LinkedList.vaporm deleted file mode 100644 index 80c3a99..0000000 --- a/vaporize/tests/LinkedList.vaporm +++ /dev/null @@ -1,698 +0,0 @@ -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/vaporize/tests/MoreThan4.names.vaporm b/vaporize/tests/MoreThan4.names.vaporm deleted file mode 100644 index 366618c..0000000 --- a/vaporize/tests/MoreThan4.names.vaporm +++ /dev/null @@ -1,68 +0,0 @@ -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/vaporize/tests/MoreThan4.opt.names.vaporm b/vaporize/tests/MoreThan4.opt.names.vaporm deleted file mode 100644 index a07f7e7..0000000 --- a/vaporize/tests/MoreThan4.opt.names.vaporm +++ /dev/null @@ -1,57 +0,0 @@ -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/vaporize/tests/MoreThan4.opt.regalloc b/vaporize/tests/MoreThan4.opt.regalloc deleted file mode 100644 index ceb8927..0000000 --- a/vaporize/tests/MoreThan4.opt.regalloc +++ /dev/null @@ -1,64 +0,0 @@ -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/vaporize/tests/MoreThan4.opt.vapor b/vaporize/tests/MoreThan4.opt.vapor deleted file mode 100644 index a59d1b5..0000000 --- a/vaporize/tests/MoreThan4.opt.vapor +++ /dev/null @@ -1,27 +0,0 @@ - -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/vaporize/tests/MoreThan4.opt.vaporm b/vaporize/tests/MoreThan4.opt.vaporm deleted file mode 100644 index d1d663b..0000000 --- a/vaporize/tests/MoreThan4.opt.vaporm +++ /dev/null @@ -1,57 +0,0 @@ -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/vaporize/tests/MoreThan4.regalloc b/vaporize/tests/MoreThan4.regalloc deleted file mode 100644 index 0748f62..0000000 --- a/vaporize/tests/MoreThan4.regalloc +++ /dev/null @@ -1,73 +0,0 @@ -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/vaporize/tests/MoreThan4.vapor b/vaporize/tests/MoreThan4.vapor deleted file mode 100644 index 6067f8e..0000000 --- a/vaporize/tests/MoreThan4.vapor +++ /dev/null @@ -1,38 +0,0 @@ - -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/vaporize/tests/MoreThan4.vaporm b/vaporize/tests/MoreThan4.vaporm deleted file mode 100644 index bf549b2..0000000 --- a/vaporize/tests/MoreThan4.vaporm +++ /dev/null @@ -1,68 +0,0 @@ -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/vaporize/tests/QuickSort.names.vaporm b/vaporize/tests/QuickSort.names.vaporm deleted file mode 100644 index 0029cf0..0000000 --- a/vaporize/tests/QuickSort.names.vaporm +++ /dev/null @@ -1,439 +0,0 @@ -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/vaporize/tests/QuickSort.opt.names.vaporm b/vaporize/tests/QuickSort.opt.names.vaporm deleted file mode 100644 index 9946042..0000000 --- a/vaporize/tests/QuickSort.opt.names.vaporm +++ /dev/null @@ -1,418 +0,0 @@ -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/vaporize/tests/QuickSort.opt.regalloc b/vaporize/tests/QuickSort.opt.regalloc deleted file mode 100644 index cb7fb8c..0000000 --- a/vaporize/tests/QuickSort.opt.regalloc +++ /dev/null @@ -1,286 +0,0 @@ -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/vaporize/tests/QuickSort.opt.vapor b/vaporize/tests/QuickSort.opt.vapor deleted file mode 100644 index 6e14e5a..0000000 --- a/vaporize/tests/QuickSort.opt.vapor +++ /dev/null @@ -1,378 +0,0 @@ - -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/vaporize/tests/QuickSort.opt.vaporm b/vaporize/tests/QuickSort.opt.vaporm deleted file mode 100644 index 61f1151..0000000 --- a/vaporize/tests/QuickSort.opt.vaporm +++ /dev/null @@ -1,418 +0,0 @@ -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/vaporize/tests/QuickSort.regalloc b/vaporize/tests/QuickSort.regalloc deleted file mode 100644 index 02b4418..0000000 --- a/vaporize/tests/QuickSort.regalloc +++ /dev/null @@ -1,313 +0,0 @@ -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/vaporize/tests/QuickSort.vapor b/vaporize/tests/QuickSort.vapor deleted file mode 100644 index 3fe3798..0000000 --- a/vaporize/tests/QuickSort.vapor +++ /dev/null @@ -1,399 +0,0 @@ - -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/vaporize/tests/QuickSort.vaporm b/vaporize/tests/QuickSort.vaporm deleted file mode 100644 index 2aaa582..0000000 --- a/vaporize/tests/QuickSort.vaporm +++ /dev/null @@ -1,439 +0,0 @@ -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/vaporize/tests/ShortCircuit.opt.vapor b/vaporize/tests/ShortCircuit.opt.vapor deleted file mode 100644 index 8275acd..0000000 --- a/vaporize/tests/ShortCircuit.opt.vapor +++ /dev/null @@ -1,215 +0,0 @@ - -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/vaporize/tests/ShortCircuit.vapor b/vaporize/tests/ShortCircuit.vapor deleted file mode 100644 index 31cc088..0000000 --- a/vaporize/tests/ShortCircuit.vapor +++ /dev/null @@ -1,128 +0,0 @@ - -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/vaporize/tests/TreeVisitor.names.vaporm b/vaporize/tests/TreeVisitor.names.vaporm deleted file mode 100644 index 0eefb6e..0000000 --- a/vaporize/tests/TreeVisitor.names.vaporm +++ /dev/null @@ -1,1174 +0,0 @@ -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/vaporize/tests/TreeVisitor.opt.names.vaporm b/vaporize/tests/TreeVisitor.opt.names.vaporm deleted file mode 100644 index 69a62c4..0000000 --- a/vaporize/tests/TreeVisitor.opt.names.vaporm +++ /dev/null @@ -1,948 +0,0 @@ -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/vaporize/tests/TreeVisitor.opt.regalloc b/vaporize/tests/TreeVisitor.opt.regalloc deleted file mode 100644 index 985ead2..0000000 --- a/vaporize/tests/TreeVisitor.opt.regalloc +++ /dev/null @@ -1,539 +0,0 @@ -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/vaporize/tests/TreeVisitor.opt.vapor b/vaporize/tests/TreeVisitor.opt.vapor deleted file mode 100644 index dfa80a6..0000000 --- a/vaporize/tests/TreeVisitor.opt.vapor +++ /dev/null @@ -1,635 +0,0 @@ - -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/vaporize/tests/TreeVisitor.opt.vaporm b/vaporize/tests/TreeVisitor.opt.vaporm deleted file mode 100644 index 0ff4fc4..0000000 --- a/vaporize/tests/TreeVisitor.opt.vaporm +++ /dev/null @@ -1,948 +0,0 @@ -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/vaporize/tests/TreeVisitor.regalloc b/vaporize/tests/TreeVisitor.regalloc deleted file mode 100644 index 3edb0c1..0000000 --- a/vaporize/tests/TreeVisitor.regalloc +++ /dev/null @@ -1,830 +0,0 @@ -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/vaporize/tests/TreeVisitor.vapor b/vaporize/tests/TreeVisitor.vapor deleted file mode 100644 index d8aa63b..0000000 --- a/vaporize/tests/TreeVisitor.vapor +++ /dev/null @@ -1,855 +0,0 @@ - -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/vaporize/tests/TreeVisitor.vaporm b/vaporize/tests/TreeVisitor.vaporm deleted file mode 100644 index 392cf0c..0000000 --- a/vaporize/tests/TreeVisitor.vaporm +++ /dev/null @@ -1,1174 +0,0 @@ -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/vaporize/tests/ex32.vapor b/vaporize/tests/ex32.vapor deleted file mode 100644 index 8a8dc62..0000000 --- a/vaporize/tests/ex32.vapor +++ /dev/null @@ -1,15 +0,0 @@ -func Main() - t.3 = HeapAllocZ(4) - [t.3+0] = :functable_A - t.4 = [t.3+0] - t.5 = [t.4+0] - t.6 = 12 - t.10 = call t.5(t.3 t.6) - PrintIntS(t.10) - ret - -const functable_A - :A_foo - -func A_foo(this t.1) - ret t.1 diff --git a/vaporize/tests/ex32.vaporm b/vaporize/tests/ex32.vaporm deleted file mode 100644 index 7ef23aa..0000000 --- a/vaporize/tests/ex32.vaporm +++ /dev/null @@ -1,35 +0,0 @@ -func Main [in 0, out 0, local 4] - local[0] = $s0 - local[1] = $s1 - local[2] = $s2 - $s0 = HeapAllocZ(4) - local[3] = $s0 - $s0 = local[3] - [$s0] = :functable_A - $local[4] = $s0 - $t1 = [$t0] - $t2 = [$t1] - $a0 = $t0 - $a1 = 12 - call $t2 - $t1 = $v0 - PrintIntS($t1) - $s0 = local[0] - $s1 = local[1] - $s2 = local[2] - ret - -const functable_A - :A_foo - -func A_foo [in 0, out 0, local 6] - local[0] = $s0 - local[1] = $s1 - local[2] = $s2 - $t0 = $a0 - $s0 = $a1 - $v0 = $s0 - $s0 = local[0] - $s1 = local[1] - $s2 = local[2] - ret -- cgit v1.2.3