| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | data/tests/sequences.fate | 158 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java | 30 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java | 11 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java | 11 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/lang/type/Type.java | 17 | 
5 files changed, 226 insertions, 1 deletions
| diff --git a/data/tests/sequences.fate b/data/tests/sequences.fate new file mode 100644 index 0000000..62c0948 --- /dev/null +++ b/data/tests/sequences.fate @@ -0,0 +1,158 @@ +(fate_version 1) + +(global int test_var) + +(set test_var 0) + +(define_sequence seq0 () +   (set test_var 1) +) + +(assert (= (var test_var) 0) FAILED: sequence A) + +(call seq0) + +(assert (= (var test_var) 1) FAILED: sequence B) + +(set test_var 0) + +(define_sequence seq1 () +   (set test_var (+ 1 (var test_var))) +   (if (< (var test_var) 6) +      (call seq1) +   ) +) + +(call seq1) + +(assert (= (var test_var) 6) FAILED: sequence C) + +(set test_var 0) + +(define_sequence seq2 () +   (local int a) +   (set a 2) +   (set test_var (+ (var a) (var test_var))) +   (if (< (var test_var) 8) +      (call seq2) +   ) +) + +(call seq2) + +(assert (= (var test_var) 8) FAILED: sequence D) + +(set test_var 0) + +(define_sequence seq3 (((ptr int) a_ptr)) +   (set (at a_ptr) 2) +) + +(call seq3 (ptr test_var)) + +(assert (= (var test_var) 2) FAILED: sequence E) + +(set test_var 0) + +(define_sequence index_of_loop +   ( +      ((ptr int) result_holder) +      ((list int) collection) +      (int target) +   ) +   (local int collection_size) +   (local int i) + +   (set collection_size (size collection)) + +   (for (set i 0) (< (var i) (var collection_size)) (set i (+ (var i) 1)) +      (if (= (access collection (var i)) (var target)) +         ( +            (set (at result_holder) (var i)) +            (done) +         ) +      ) +   ) +   (set (at result_holder) -1) +) + +(global (list int) l0) + +(add 0 l0) +(add 1 l0) +(add 2 l0) +(add 3 l0) +(add 4 l0) +(add 5 l0) + +(call index_of_loop (ptr test_var) (var l0) 5) + +(assert (= (var test_var) 5) FAILED: sequence E) + +(call index_of_loop (ptr test_var) (var l0) 6) + +(assert (= (var test_var) -1) FAILED: sequence F) + +(define_sequence index_of_jump +   ( +      ((ptr int) result_holder) +      ((list int) collection) +      (int target) +      (int i) +      (int collection_size) +   ) +   (ifelse (= (var i) (var collection_size)) +      (set (at result_holder) -1) +      (ifelse (= (access collection (var i)) (var target)) +         (set (at result_holder) (var i)) +         (jump index_of_jump +            (var result_holder) +            (var collection) +            (var target) +            (+ (var i) 1) +            (var collection_size) +         ) +      ) +   ) +) + +(call index_of_jump (ptr test_var) (var l0) 5 0 (size l0)) + +(assert (= (var test_var) 5) FAILED: sequence G) + +(call index_of_jump (ptr test_var) (var l0) 6 0 (size l0)) + +(assert (= (var test_var) -1) FAILED: sequence H) + +(define_sequence index_of_call +   ( +      ((ptr int) result_holder) +      ((list int) collection) +      (int target) +      (int i) +      (int collection_size) +   ) +   (ifelse (= (var i) (var collection_size)) +      (set (at result_holder) -1) +      (ifelse (= (access collection (var i)) (var target)) +         (set (at result_holder) (var i)) +         (call index_of_call +            (var result_holder) +            (var collection) +            (var target) +            (+ (var i) 1) +            (var collection_size) +         ) +      ) +   ) +) + +(call index_of_call (ptr test_var) (var l0) 5 0 (size l0)) + +(assert (= (var test_var) 5) FAILED: sequence I) + +(call index_of_call (ptr test_var) (var l0) 6 0 (size l0)) + +(assert (= (var test_var) -1) FAILED: sequence J) + +(end) diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java index 5607450..8c91206 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java @@ -17,6 +17,7 @@ import tonkadur.wyrd.v1.lang.meta.Instruction;  import tonkadur.wyrd.v1.lang.computation.Address;  import tonkadur.wyrd.v1.lang.computation.RelativeAddress; +import tonkadur.wyrd.v1.lang.computation.Operation;  import tonkadur.wyrd.v1.lang.computation.Constant;  import tonkadur.wyrd.v1.lang.computation.Cast;  import tonkadur.wyrd.v1.lang.computation.ValueOf; @@ -201,7 +202,15 @@ public class RegisterManager           new RelativeAddress           (              pc_stack.get_address(), -            new Cast(new Size(pc_stack.get_address()), Type.STRING), +            new Cast +            ( +               Operation.minus +               ( +                  new Size(pc_stack.get_address()), +                  Constant.ONE +               ), +               Type.STRING +            ),              Type.INT           ); @@ -256,6 +265,16 @@ public class RegisterManager           r = parameter_context.reserve(p.get_type()); +         System.out.println +         ( +            "[D] Storing param (" +            + p.get_type().toString() +            + ") " +            + r.get_name() +            + " <- " +            + p.toString() +         ); +           result.add(new SetValue(r.get_address(), p));           used_registers.add(r); @@ -284,6 +303,15 @@ public class RegisterManager           r = parameter_context.reserve(p.get_type()); +         System.out.println +         ( +            "[D] Reading param (" +            + p.get_type().toString() +            + ") " +            + p.get_name() +            + " <- " +            + r.get_name() +         );           result.add(new SetValue(p.get_address(), r.get_value()));           used_registers.add(r); diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java b/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java index d8316da..3af830c 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java @@ -38,4 +38,15 @@ public class MapType extends Type     {        return name;     } + +   @Override +   public boolean equals (final Object o) +   { +      if (o instanceof MapType) +      { +         return ((MapType) o).member_type.equals(member_type); +      } + +      return false; +   }  } diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java b/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java index ee34c0d..5f5e563 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java @@ -23,4 +23,15 @@ public class PointerType extends Type     {        return name;     } + +   @Override +   public boolean equals (final Object o) +   { +      if (o instanceof PointerType) +      { +         return ((PointerType) o).target_type.equals(target_type); +      } + +      return false; +   }  } diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java b/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java index d2f5684..baa3bc3 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java @@ -37,4 +37,21 @@ public class Type     {        return name;     } + +   @Override +   public int hashCode () +   { +      return toString().hashCode(); +   } + +   @Override +   public boolean equals (final Object o) +   { +      if (o instanceof Type) +      { +         return ((Type) o).toString().equals(toString()); +      } + +      return false; +   }  } | 


