| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-09-04 00:21:30 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-09-04 00:21:30 +0200 | 
| commit | 3e1a05a2a82d9f567491d68a6004a5e027e5c873 (patch) | |
| tree | 1bacdf64f43989bef8456e2039317ff260b8cbf5 /src/core | |
| parent | 6d01d428f53bbe1203bc08b15bddb74554ea2d86 (diff) | |
...
Diffstat (limited to 'src/core')
18 files changed, 206 insertions, 1865 deletions
| diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java index 694bcaf..47afc11 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java @@ -60,8 +60,12 @@ public class Fold extends GenericComputation        final Computation collection;        final boolean is_foldl;        final List<Computation> extra_params; -      final List<Type> signature; -      final List<Type> expected_signature; +      final List<Type> base_param_types; +      final Type return_type; + +      is_foldl = (alias.contains("foldl") || alias.contains("eft")); + +      base_param_types = new ArrayList<Type>();        if (call_parameters.size() < 3)        { @@ -74,71 +78,34 @@ public class Fold extends GenericComputation        lambda_function = call_parameters.get(0);        initial_value = call_parameters.get(1);        collection = call_parameters.get(2); +      extra_params = call_parameters.subList(3, call_parameters.size());        lambda_function.expect_non_string();        collection.expect_non_string(); -      is_foldl = (alias.contains("foldl") || alias.contains("eft")); - -      if (call_parameters.size() == 3) -      { -         extra_params = new ArrayList<Computation>(); -      } -      else -      { -         extra_params = call_parameters.subList(3, call_parameters.size()); -      } - -      signature = ((LambdaType) lambda_function.get_type()).get_signature(); - -      if (signature.size() < 2) -      { -         // TODO: Error. -         System.err.println -         ( -            "Lambda signature too small at " -            + lambda_function.get_origin().toString() -         ); - -         return null; -      } - -      if (signature.size() > 2) -      { -         RecurrentChecks.propagate_expected_types_and_assert_computations_matches_signature -         ( -            origin, -            extra_params, -            signature.subList(2, signature.size()) -         ); -      } +      RecurrentChecks.assert_is_a_lambda_function(lambda_function); +      RecurrentChecks.assert_is_a_collection(collection); -      if (alias.startsWith("set:")) -      { -         RecurrentChecks.assert_is_a_set_of(collection, signature.get(0)); -      } -      else -      { -         RecurrentChecks.assert_is_a_list_of(collection, signature.get(0)); -      } +      return_type = ((LambdaType) lambda_function.get_type()).get_return_type();        RecurrentChecks.handle_expected_type_propagation        (           initial_value, -         signature.get(1) +         return_type        ); +      RecurrentChecks.assert_can_be_used_as(initial_value, return_type); -      RecurrentChecks.assert_can_be_used_as +      base_param_types.add(return_type); +      base_param_types.add        ( -         initial_value, -         signature.get(1) +         ((CollectionType) collection.get_type()).get_content_type()        ); -      RecurrentChecks.assert_can_be_used_as +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda        ( -         lambda_function.get_origin(), -         ((LambdaType) lambda_function.get_type()).get_return_type(), -         initial_value.get_type() +         lambda_function, +         base_param_types, +         extra_params        );        return @@ -150,7 +117,7 @@ public class Fold extends GenericComputation              collection,              is_foldl,              extra_params, -            initial_value.get_type() +            return_type           );     } diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java index d41a1e4..f09ba2a 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java @@ -47,36 +47,53 @@ public class IndexedPartitionComputation extends GenericComputation     )     throws Throwable     { -      // TODO: implement -      final Computation lambda_function = null; -      final Computation collection = null; -      final List<Computation> extra_params = null; +      final Computation lambda_function; +      final Computation collection; +      final List<Computation> extra_params; +      final List<Type> base_param_types;        final Type type; -      final List<Type> target_signature; -      target_signature = new ArrayList<Type>(); +      base_param_types = new ArrayList<Type>(); -      RecurrentChecks.assert_is_a_collection(collection); +      if (call_parameters.size() < 2) +      { +         // TODO: Error. +         System.err.println("Wrong number of params at " + origin.toString()); -      target_signature.add(Type.INT); +         return null; +      } -      target_signature.add -      ( -         ((CollectionType) collection.get_type()).get_content_type() -      ); +      lambda_function = call_parameters.get(0); +      collection = call_parameters.get(1); +      extra_params = call_parameters.subList(2, call_parameters.size()); -      for (final Computation c: extra_params) +      collection.expect_non_string(); + +      if (alias.startsWith("set:")) +      { +         RecurrentChecks.assert_is_a_set(collection); +      } +      else        { -         target_signature.add(c.get_type()); +         RecurrentChecks.assert_is_a_list(collection);        } -      RecurrentChecks.assert_lambda_matches_types +      base_param_types.add(Type.INT); + +      base_param_types.add +      ( +         ((CollectionType) collection.get_type()).get_content_type() +      ); + +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         Type.BOOL, -         target_signature +         base_param_types, +         extra_params        ); +      RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); +        type =           new ConsType           ( @@ -86,6 +103,7 @@ public class IndexedPartitionComputation extends GenericComputation              "auto generated"           ); +        return           new IndexedPartitionComputation           ( diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java index 4d67101..a28949e 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java @@ -42,7 +42,7 @@ public class LambdaEvaluation extends GenericComputation     throws Throwable     {        final Computation lambda_function; -      final List<Type> lambda_signature; +      final List<Computation> parameters;        if (call_parameters.size() < 1)        { @@ -53,21 +53,13 @@ public class LambdaEvaluation extends GenericComputation        }        lambda_function = call_parameters.get(0); +      parameters = call_parameters.subList(1, call_parameters.size()); -      lambda_function.expect_non_string(); - -      RecurrentChecks.assert_is_a_lambda_function(lambda_function); - -      lambda_signature = -         ((LambdaType) lambda_function.get_type()).get_signature(); - -      call_parameters.remove(0); - -      RecurrentChecks.propagate_expected_types_and_assert_computations_matches_signature +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda        ( -         origin, -         call_parameters, -         lambda_signature +         lambda_function, +         new ArrayList<Type>(), +         parameters        );        return @@ -75,7 +67,7 @@ public class LambdaEvaluation extends GenericComputation           (              origin,              lambda_function, -            call_parameters, +            parameters,              (((LambdaType) lambda_function.get_type()).get_return_type())           );     } diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Filter.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Filter.java index 1ad42f4..6603152 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Filter.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Filter.java @@ -39,39 +39,53 @@ public class Filter extends GenericInstruction     public static Instruction build     (        final Origin origin, -      final String _alias, +      final String alias,        final List<Computation> call_parameters     )     throws Throwable     { -      // TODO: implement -      final Computation lambda_function = null; -      final Computation collection = null; -      final List<Computation> extra_params = null; -      final List<Type> target_signature; +      final Computation lambda_function; +      final Computation collection; +      final List<Computation> extra_params; -      target_signature = new ArrayList<Type>(); +      if (call_parameters.size() < 2) +      { +         // TODO: Error. +         System.err.println("Wrong number of params at " + origin.toString()); -      RecurrentChecks.assert_is_a_collection(collection); +         return null; +      } -      target_signature.add -      ( -         ((CollectionType) collection.get_type()).get_content_type() -      ); +      lambda_function = call_parameters.get(0); +      collection = call_parameters.get(1); +      extra_params = call_parameters.subList(2, call_parameters.size()); -      for (final Computation c: extra_params) +      collection.expect_non_string(); + +      if (alias.startsWith("set:"))        { -         target_signature.add(c.get_type()); +         RecurrentChecks.assert_is_a_set(collection);        } -      RecurrentChecks.assert_lambda_matches_types +      else +      { +         RecurrentChecks.assert_is_a_list(collection); +      } + +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         Type.BOOL, -         target_signature +         Collections.singletonList +         ( +            ((CollectionType) collection.get_type()).get_content_type() +         ), +         extra_params        ); -      return new Filter(origin, lambda_function, collection, extra_params); +      RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); + +      collection.use_as_reference(); +      return new Filter(origin, lambda_function, collection, extra_params);     }     /***************************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java index 94ad938..4589ccf 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java @@ -46,38 +46,58 @@ public class IndexedFilter extends GenericInstruction     public static Instruction build     (        final Origin origin, -      final String _alias, +      final String alias,        final List<Computation> call_parameters     )     throws Throwable     { -      final Computation lambda_function = null; -      final Computation collection = null; -      final List<Computation> extra_params = null; -      final List<Type> target_signature; +      final Computation lambda_function; +      final Computation collection; +      final List<Computation> extra_params; +      final List<Type> base_param_types; -      target_signature = new ArrayList<Type>(); +      base_param_types = new ArrayList<Type>(); -      RecurrentChecks.assert_is_a_collection(collection); +      if (call_parameters.size() < 2) +      { +         // TODO: Error. +         System.err.println("Wrong number of params at " + origin.toString()); -      target_signature.add(Type.INT); -      target_signature.add -      ( -         ((CollectionType) collection.get_type()).get_content_type() -      ); +         return null; +      } -      for (final Computation c: extra_params) +      lambda_function = call_parameters.get(0); +      collection = call_parameters.get(1); +      extra_params = call_parameters.subList(2, call_parameters.size()); + +      collection.expect_non_string(); + +      if (alias.startsWith("set:"))        { -         target_signature.add(c.get_type()); +         RecurrentChecks.assert_is_a_set(collection);        } +      else +      { +         RecurrentChecks.assert_is_a_list(collection); +      } + +      base_param_types.add(Type.INT); +      base_param_types.add +      ( +         ((CollectionType) collection.get_type()).get_content_type() +      ); -      RecurrentChecks.assert_lambda_matches_types +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         Type.BOOL, -         target_signature +         base_param_types, +         extra_params        ); +      RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); + +      collection.use_as_reference(); +        return           new IndexedFilter           ( diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java deleted file mode 100644 index acb2d98..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java +++ /dev/null @@ -1,150 +0,0 @@ -package tonkadur.fate.v1.lang.instruction.generic; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import java.util.ArrayList; -import java.util.List; - -import tonkadur.parser.Origin; -import tonkadur.parser.ParsingError; - -import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.type.CollectionType; - -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.RecurrentChecks; - -import tonkadur.fate.v1.lang.instruction.GenericInstruction; - -public class IndexedMap extends GenericInstruction -{ -   public static Collection<String> get_aliases () -   { -      final List<String> aliases; - -      aliases = new ArrayList<String>(); - -      aliases.add("list:indexed_map"); -      aliases.add("list:indexedmap"); -      aliases.add("list:indexedMap"); -      aliases.add("list:imap"); -      aliases.add("set:indexed_map"); -      aliases.add("set:indexedmap"); -      aliases.add("set:indexedMap"); -      aliases.add("set:imap"); - - -      return aliases; -   } - -   public static Instruction build -   ( -      final Origin origin, -      final String _alias, -      final List<Computation> call_parameters -   ) -   throws Throwable -   { -      final Computation lambda_function = null; -      final Computation collection = null; -      final List<Computation> extra_params = null; - -      final List<Type> in_types; - -      in_types = new ArrayList<Type>(); - -      RecurrentChecks.assert_is_a_collection(collection); - -      in_types.add(Type.INT); -      in_types.add -      ( -         ((CollectionType) collection.get_type()).get_content_type() -      ); - -      for (final Computation c: extra_params) -      { -         in_types.add(c.get_type()); -      } - -      RecurrentChecks.assert_lambda_matches_types -      ( -         lambda_function, -         ((CollectionType) collection.get_type()).get_content_type(), -         in_types -      ); - -      return new IndexedMap(origin, lambda_function, collection, extra_params); -   } - -   /***************************************************************************/ -   /**** MEMBERS **************************************************************/ -   /***************************************************************************/ -   protected final List<Computation> extra_params; -   protected final Computation lambda_function; -   protected final Computation collection; - -   /***************************************************************************/ -   /**** PROTECTED ************************************************************/ -   /***************************************************************************/ -   /**** Constructors *********************************************************/ -   protected IndexedMap -   ( -      final Origin origin, -      final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params -   ) -   { -      super(origin); - -      this.lambda_function = lambda_function; -      this.collection = collection; -      this.extra_params = extra_params; -   } - -   /***************************************************************************/ -   /**** PUBLIC ***************************************************************/ -   /***************************************************************************/ -   /**** Accessors ************************************************************/ -   public Computation get_lambda_function () -   { -      return lambda_function; -   } - -   public Computation get_collection () -   { -      return collection; -   } - -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } - -   /**** Misc. ****************************************************************/ -   @Override -   public String toString () -   { -      final StringBuilder sb = new StringBuilder(); - -      sb.append("(IndexedMap "); -      sb.append(lambda_function.toString()); -      sb.append(" "); -      sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } - -      sb.append(")"); - -      return sb.toString(); -   } -} diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java deleted file mode 100644 index d2616c6..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java +++ /dev/null @@ -1,236 +0,0 @@ -package tonkadur.fate.v1.lang.instruction.generic; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import java.util.ArrayList; -import java.util.List; - -import tonkadur.parser.Origin; -import tonkadur.parser.ParsingError; - -import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.type.CollectionType; - -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.RecurrentChecks; - -import tonkadur.fate.v1.lang.instruction.GenericInstruction; - -public class IndexedMerge extends GenericInstruction -{ -   public static Collection<String> get_aliases () -   { -      final List<String> aliases; - -      aliases = new ArrayList<String>(); - -      aliases.add("list:indexed_merge"); -      aliases.add("list:indexedmerge"); -      aliases.add("list:indexedMerge"); -      aliases.add("list:imerge"); -      aliases.add("set:indexed_merge"); -      aliases.add("set:indexedmerge"); -      aliases.add("set:indexedMerge"); -      aliases.add("set:imerge"); - -      return aliases; -   } - -   public static Instruction build -   ( -      final Origin origin, -      final String _alias, -      final List<Computation> call_parameters -   ) -   throws Throwable -   { -      // TODO: implement -      final Computation lambda_function = null; -      final Computation collection_in_b = null; -      final Computation default_b = null; -      final Computation collection = null; -      final Computation default_a = null; -      final List<Computation> extra_params = null; - -      final List<Type> types_in; - -      types_in = new ArrayList<Type>(); - -      if (default_a == null) -      { -         RecurrentChecks.assert_is_a_collection(collection); -      } -      else -      { -         //RecurrentChecks.assert_is_a_collection_of(collection, default_a); -      } - -      if (default_b == null) -      { -         RecurrentChecks.assert_is_a_collection(collection_in_b); -      } -      else -      { -         //RecurrentChecks.assert_is_a_collection_of(collection_in_b, default_b); -      } - -      types_in.add(Type.INT); -      types_in.add -      ( -         ((CollectionType) collection.get_type()).get_content_type() -      ); - -      if (default_b != null) -      { -         types_in.add(Type.INT); -      } - -      types_in.add -      ( -         ((CollectionType) collection_in_b.get_type()).get_content_type() -      ); - -      for (final Computation c: extra_params) -      { -         types_in.add(c.get_type()); -      } - -      RecurrentChecks.assert_lambda_matches_types -      ( -         lambda_function, -         ((CollectionType) collection.get_type()).get_content_type(), -         types_in -      ); - -      return -         new IndexedMerge -         ( -            origin, -            lambda_function, -            collection_in_b, -            default_b, -            collection, -            default_a, -            extra_params -         ); -   } - -   /***************************************************************************/ -   /**** MEMBERS **************************************************************/ -   /***************************************************************************/ -   protected final List<Computation> extra_params; -   protected final Computation lambda_function; -   protected final Computation collection; -   protected final Computation default_a; -   protected final Computation collection_in_b; -   protected final Computation default_b; - -   /***************************************************************************/ -   /**** PROTECTED ************************************************************/ -   /***************************************************************************/ -   /**** Constructors *********************************************************/ -   protected IndexedMerge -   ( -      final Origin origin, -      final Computation lambda_function, -      final Computation collection_in_b, -      final Computation default_b, -      final Computation collection, -      final Computation default_a, -      final List<Computation> extra_params -   ) -   { -      super(origin); - -      this.lambda_function = lambda_function; -      this.collection = collection; -      this.default_a = default_a; -      this.collection_in_b = collection_in_b; -      this.default_b = default_b; -      this.extra_params = extra_params; -   } - -   /***************************************************************************/ -   /**** PUBLIC ***************************************************************/ -   /***************************************************************************/ -   /**** Accessors ************************************************************/ -   public Computation get_lambda_function () -   { -      return lambda_function; -   } - -   public Computation get_main_default () -   { -      return default_a; -   } - -   public Computation get_secondary_collection () -   { -      return collection_in_b; -   } - -   public Computation get_secondary_default () -   { -      return default_b; -   } - -   public Computation get_main_collection () -   { -      return collection; -   } - -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } - -   /**** Misc. ****************************************************************/ -   @Override -   public String toString () -   { -      final StringBuilder sb = new StringBuilder(); - -      sb.append("(IndexedMerge "); -      sb.append(lambda_function.toString()); -      sb.append(" "); -      sb.append(collection.toString()); -      sb.append(" "); - -      if (default_a == null) -      { -         sb.append("null"); -      } -      else -      { -         sb.append(default_a.toString()); -      } - -      sb.append(" "); -      sb.append(collection_in_b.toString()); -      sb.append(" "); - -      if (default_b == null) -      { -         sb.append("null"); -      } -      else -      { -         sb.append(default_b.toString()); -      } - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } - -      sb.append(")"); - -      return sb.toString(); -   } -} diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java index 4efc697..21c7817 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java @@ -45,47 +45,66 @@ public class IndexedPartition extends GenericInstruction     public static Instruction build     (        final Origin origin, -      final String _alias, +      final String alias,        final List<Computation> call_parameters     )     throws Throwable     { -      // TODO: implement -      final Computation lambda_function = null; -      final Computation collection_in = null; -      final Computation collection_out = null; -      final List<Computation> extra_params = null; +      final Computation lambda_function; +      final Computation collection_in; +      final Computation collection_out; +      final List<Computation> extra_params; +      final List<Type> base_param_types; -      final List<Type> target_signature; +      base_param_types = new ArrayList<Type>(); -      target_signature = new ArrayList<Type>(); +      if (call_parameters.size() < 3) +      { +         // TODO: Error. +         System.err.println("Wrong number of params at " + origin.toString()); + +         return null; +      } + +      lambda_function = call_parameters.get(0); +      collection_in = call_parameters.get(1); +      collection_out = call_parameters.get(2); +      extra_params = call_parameters.subList(3, call_parameters.size()); + +      if (alias.startsWith("set:")) +      { +         RecurrentChecks.assert_is_a_set(collection_in); +         RecurrentChecks.assert_is_a_set(collection_out); +      } +      else +      { +         RecurrentChecks.assert_is_a_list(collection_in); +         RecurrentChecks.assert_is_a_list(collection_out); +      } -      RecurrentChecks.assert_is_a_collection(collection_in); -      RecurrentChecks.assert_is_a_collection(collection_out);        RecurrentChecks.assert_can_be_used_as        (           collection_in,           collection_out.get_type()        ); -      target_signature.add(Type.INT); -      target_signature.add +      base_param_types.add(Type.INT); +      base_param_types.add        (           ((CollectionType) collection_in.get_type()).get_content_type()        ); -      for (final Computation c: extra_params) -      { -         target_signature.add(c.get_type()); -      } - -      RecurrentChecks.assert_lambda_matches_types +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         Type.BOOL, -         target_signature +         base_param_types, +         extra_params        ); +      RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); + +      collection_out.use_as_reference(); +        return           new IndexedPartition           ( diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java deleted file mode 100644 index 8fcfade..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java +++ /dev/null @@ -1,142 +0,0 @@ -package tonkadur.fate.v1.lang.instruction.generic; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import java.util.Collections; -import java.util.List; -import java.util.ArrayList; - -import tonkadur.parser.Origin; -import tonkadur.parser.ParsingError; - -import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.type.CollectionType; - -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.RecurrentChecks; - -import tonkadur.fate.v1.lang.instruction.GenericInstruction; - -public class Map extends GenericInstruction -{ -   public static Collection<String> get_aliases () -   { -      final List<String> aliases; - -      aliases = new ArrayList<String>(); - -      aliases.add("list:map"); -      aliases.add("set:map"); - -      return aliases; -   } - -   public static Instruction build -   ( -      final Origin origin, -      final String _alias, -      final List<Computation> call_parameters -   ) -   throws Throwable -   { -      final Computation lambda_function = null; -      final Computation collection = null; -      final List<Computation> extra_params = null; -      final List<Type> target_signature; - -      target_signature = new ArrayList<Type>(); - -      RecurrentChecks.assert_is_a_collection(collection); - -      target_signature.add -      ( -         ((CollectionType) collection.get_type()).get_content_type() -      ); - -      for (final Computation c: extra_params) -      { -         target_signature.add(c.get_type()); -      } - -      RecurrentChecks.assert_lambda_matches_types -      ( -         lambda_function, -         ((CollectionType) collection.get_type()).get_content_type(), -         target_signature -      ); - -      return new Map(origin, lambda_function, collection, extra_params); -   } - -   /***************************************************************************/ -   /**** MEMBERS **************************************************************/ -   /***************************************************************************/ -   protected final List<Computation> extra_params; -   protected final Computation lambda_function; -   protected final Computation collection; - -   /***************************************************************************/ -   /**** PROTECTED ************************************************************/ -   /***************************************************************************/ -   /**** Constructors *********************************************************/ -   protected Map -   ( -      final Origin origin, -      final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params -   ) -   { -      super(origin); - -      this.lambda_function = lambda_function; -      this.collection = collection; -      this.extra_params = extra_params; -   } - -   /***************************************************************************/ -   /**** PUBLIC ***************************************************************/ -   /***************************************************************************/ -   /**** Accessors ************************************************************/ -   public Computation get_lambda_function () -   { -      return lambda_function; -   } - -   public Computation get_collection () -   { -      return collection; -   } - -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } - -   /**** Misc. ****************************************************************/ -   @Override -   public String toString () -   { -      final StringBuilder sb = new StringBuilder(); - -      sb.append("(Map "); -      sb.append(lambda_function.toString()); -      sb.append(" "); -      sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } - -      sb.append(")"); - -      return sb.toString(); -   } -} diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java deleted file mode 100644 index 6461848..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java +++ /dev/null @@ -1,230 +0,0 @@ -package tonkadur.fate.v1.lang.instruction.generic; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import java.util.ArrayList; -import java.util.List; - -import tonkadur.parser.Origin; -import tonkadur.parser.ParsingError; - -import tonkadur.fate.v1.lang.type.Type; -import tonkadur.fate.v1.lang.type.CollectionType; - -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.RecurrentChecks; - -import tonkadur.fate.v1.lang.instruction.GenericInstruction; - -public class Merge extends GenericInstruction -{ -   public static Collection<String> get_aliases () -   { -      final List<String> aliases; - -      aliases = new ArrayList<String>(); - -      aliases.add("list:merge"); -      aliases.add("list:safe_merge"); -      aliases.add("list:safemerge"); -      aliases.add("list:safeMerge"); -      aliases.add("set:merge"); -      aliases.add("set:safe_merge"); -      aliases.add("set:safemerge"); -      aliases.add("set:safeMerge"); - -      return aliases; -   } - -   public static Instruction build -   ( -      final Origin origin, -      final String alias, -      final List<Computation> call_parameters -   ) -   throws Throwable -   { -      // TODO: implement -      final Computation lambda_function = null; -      final Computation collection_in_b = null; -      final Computation default_b = null; -      final Computation collection = null; -      final Computation default_a = null; -      final List<Computation> extra_params = null; - -      final List<Type> types_in; - -      types_in = new ArrayList<Type>(); - -      if (default_a == null) -      { -         RecurrentChecks.assert_is_a_collection(collection); -      } -      else -      { -         //RecurrentChecks.assert_is_a_collection_of(collection, default_a); -      } - -      if (default_b == null) -      { -         RecurrentChecks.assert_is_a_collection(collection_in_b); -      } -      else -      { -         //RecurrentChecks.assert_is_a_collection_of(collection_in_b, default_b); -      } - -      types_in.add -      ( -         ((CollectionType) collection.get_type()).get_content_type() -      ); - -      types_in.add -      ( -         ((CollectionType) collection_in_b.get_type()).get_content_type() -      ); - -      for (final Computation c: extra_params) -      { -         types_in.add(c.get_type()); -      } - -      RecurrentChecks.assert_lambda_matches_types -      ( -         lambda_function, -         ((CollectionType) collection.get_type()).get_content_type(), -         types_in -      ); - -      return -         new Merge -         ( -            origin, -            lambda_function, -            collection_in_b, -            default_b, -            collection, -            default_a, -            extra_params -         ); -   } - -   /***************************************************************************/ -   /**** MEMBERS **************************************************************/ -   /***************************************************************************/ -   protected final List<Computation> extra_params; -   protected final Computation lambda_function; -   protected final Computation collection; -   protected final Computation default_a; -   protected final Computation collection_in_b; -   protected final Computation default_b; - -   /***************************************************************************/ -   /**** PROTECTED ************************************************************/ -   /***************************************************************************/ -   /**** Constructors *********************************************************/ -   protected Merge -   ( -      final Origin origin, -      final Computation lambda_function, -      final Computation collection_in_b, -      final Computation default_b, -      final Computation collection, -      final Computation default_a, -      final List<Computation> extra_params -   ) -   { -      super(origin); - -      this.lambda_function = lambda_function; -      this.collection = collection; -      this.default_a = default_a; -      this.collection_in_b = collection_in_b; -      this.default_b = default_b; -      this.extra_params = extra_params; -   } - -   /***************************************************************************/ -   /**** PUBLIC ***************************************************************/ -   /***************************************************************************/ -   /**** Accessors ************************************************************/ -   public Computation get_lambda_function () -   { -      return lambda_function; -   } - -   public Computation get_main_default () -   { -      return default_a; -   } - -   public Computation get_secondary_collection () -   { -      return collection_in_b; -   } - -   public Computation get_secondary_default () -   { -      return default_b; -   } - -   public Computation get_main_collection () -   { -      return collection; -   } - -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } - -   /**** Misc. ****************************************************************/ -   @Override -   public String toString () -   { -      final StringBuilder sb = new StringBuilder(); - -      sb.append("(Merge "); -      sb.append(lambda_function.toString()); -      sb.append(" "); -      sb.append(collection.toString()); -      sb.append(" "); - -      if (default_a == null) -      { -         sb.append("null"); -      } -      else -      { -         sb.append(default_a.toString()); -      } - -      sb.append(" "); -      sb.append(collection_in_b.toString()); -      sb.append(" "); - -      if (default_b == null) -      { -         sb.append("null"); -      } -      else -      { -         sb.append(default_b.toString()); -      } - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } - -      sb.append(")"); - -      return sb.toString(); -   } -} diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java index 820c8af..2b0b59d 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java @@ -44,38 +44,54 @@ public class Partition extends GenericInstruction     )     throws Throwable     { -      final Computation lambda_function = null; -      final Computation collection_in = null; -      final Computation collection_out = null; -      final List<Computation> extra_params = null; -      final List<Type> target_signature; +      final Computation lambda_function; +      final Computation collection_in; +      final Computation collection_out; +      final List<Computation> extra_params; -      target_signature = new ArrayList<Type>(); +      if (call_parameters.size() < 3) +      { +         // TODO: Error. +         System.err.println("Wrong number of params at " + origin.toString()); + +         return null; +      } + +      lambda_function = call_parameters.get(0); +      collection_in = call_parameters.get(1); +      collection_out = call_parameters.get(2); +      extra_params = call_parameters.subList(3, call_parameters.size()); + +      if (alias.startsWith("set:")) +      { +         RecurrentChecks.assert_is_a_set(collection_in); +         RecurrentChecks.assert_is_a_set(collection_out); +      } +      else +      { +         RecurrentChecks.assert_is_a_list(collection_in); +         RecurrentChecks.assert_is_a_list(collection_out); +      } -      RecurrentChecks.assert_is_a_collection(collection_in); -      RecurrentChecks.assert_is_a_collection(collection_out);        RecurrentChecks.assert_can_be_used_as        (           collection_in,           collection_out.get_type()        ); -      target_signature.add +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda        ( -         ((CollectionType) collection_in.get_type()).get_content_type() +         lambda_function, +         Collections.singletonList +         ( +            ((CollectionType) collection_in.get_type()).get_content_type() +         ), +         extra_params        ); -      for (final Computation c: extra_params) -      { -         target_signature.add(c.get_type()); -      } +      RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); -      RecurrentChecks.assert_lambda_matches_types -      ( -         lambda_function, -         Type.BOOL, -         target_signature -      ); +      collection_out.use_as_reference();        return           new Partition diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputation.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java index 17673da..17673da 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputation.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMapCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMapCompiler.java deleted file mode 100644 index 3704db2..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMapCompiler.java +++ /dev/null @@ -1,140 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic; - -import java.util.List; -import java.util.ArrayList; - -import tonkadur.fate.v1.lang.instruction.generic.IndexedMap; - -import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; -import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; - -import tonkadur.wyrd.v1.lang.Register; - -import tonkadur.wyrd.v1.lang.meta.Computation; - -import tonkadur.wyrd.v1.lang.instruction.SetValue; - -import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler; - -public class IndexedMapCompiler extends GenericInstructionCompiler -{ -   public static Class get_target_class () -   { -      return IndexedMap.class; -   } - -   public IndexedMapCompiler (final Compiler compiler) -   { -      super(compiler); -   } - -   public void compile -   ( -      final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction -   ) -   throws Throwable -   { -      final IndexedMap source; -      final List<Computation> params; -      final List<ComputationCompiler> param_cc_list; -      // This is one dangerous operation to do in-place, so we don't. -      final Register holder; -      final ComputationCompiler lambda_cc, collection_cc; - -      source = (IndexedMap) instruction; - -      params = new ArrayList<Computation>(); -      param_cc_list = new ArrayList<ComputationCompiler>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         if (param_cc.has_init()) -         { -            result.add(param_cc.get_init()); -         } - -         param_cc_list.add(param_cc); - -         params.add(param_cc.get_computation()); -      } - -      lambda_cc = new ComputationCompiler(compiler); - -      source.get_lambda_function().get_visited_by(lambda_cc); - -      if (lambda_cc.has_init()) -      { -         result.add(lambda_cc.get_init()); -      } - -      collection_cc = new ComputationCompiler(compiler); - -      source.get_collection().get_visited_by(collection_cc); - -      if (collection_cc.has_init()) -      { -         result.add(collection_cc.get_init()); -      } - -      holder = -         compiler.registers().reserve -         ( -            collection_cc.get_computation().get_type(), -            result -         ); - -      result.add -      ( -         new SetValue(holder.get_address(), collection_cc.get_computation()) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.Clear.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            collection_cc.get_address() -         ) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.IndexedMapLambda.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            lambda_cc.get_computation(), -            holder.get_address(), -            collection_cc.get_address(), -            ( -               (tonkadur.fate.v1.lang.type.CollectionType) -               source.get_collection().get_type() -            ).is_set(), -            params -         ) -      ); - -      lambda_cc.release_registers(result); -      collection_cc.release_registers(result); -      compiler.registers().release(holder, result); - -      for (final ComputationCompiler cc: param_cc_list) -      { -         cc.release_registers(result); -      } -   } -} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMergeCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMergeCompiler.java deleted file mode 100644 index 8d4d4a5..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMergeCompiler.java +++ /dev/null @@ -1,154 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic; - -import java.util.List; -import java.util.ArrayList; - -import tonkadur.fate.v1.lang.instruction.generic.IndexedMerge; - -import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; -import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; - -import tonkadur.wyrd.v1.lang.Register; - -import tonkadur.wyrd.v1.lang.meta.Computation; - -import tonkadur.wyrd.v1.lang.instruction.SetValue; - -import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler; - -public class IndexedMergeCompiler extends GenericInstructionCompiler -{ -   public static Class get_target_class () -   { -      return IndexedMerge.class; -   } - -   public IndexedMergeCompiler (final Compiler compiler) -   { -      super(compiler); -   } - -   public void compile -   ( -      final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction -   ) -   throws Throwable -   { -      final IndexedMerge source; -      final Register holder; -      final ComputationCompiler lambda_cc; -      final List<Computation> params; -      final List<ComputationCompiler> param_cc_list; -      final ComputationCompiler main_collection_cc, secondary_collection_cc; - -      source = (IndexedMerge) instruction; - -      params = new ArrayList<Computation>(); -      param_cc_list = new ArrayList<ComputationCompiler>(); - -      lambda_cc = new ComputationCompiler(compiler); - -      source.get_lambda_function().get_visited_by(lambda_cc); - -      if (lambda_cc.has_init()) -      { -         result.add(lambda_cc.get_init()); -      } - -      main_collection_cc = new ComputationCompiler(compiler); - -      source.get_main_collection().get_visited_by(main_collection_cc); - -      if (main_collection_cc.has_init()) -      { -         result.add(main_collection_cc.get_init()); -      } - -      holder = -         compiler.registers().reserve -         ( -            main_collection_cc.get_computation().get_type(), -            result -         ); - -      result.add -      ( -         new SetValue -         ( -            holder.get_address(), -            main_collection_cc.get_computation() -         ) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.Clear.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            main_collection_cc.get_address() -         ) -      ); - -      secondary_collection_cc = new ComputationCompiler(compiler); - -      source.get_secondary_collection().get_visited_by(secondary_collection_cc); - -      if (secondary_collection_cc.has_init()) -      { -         result.add(secondary_collection_cc.get_init()); -      } - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         if (param_cc.has_init()) -         { -            result.add(param_cc.get_init()); -         } - -         param_cc_list.add(param_cc); - -         params.add(param_cc.get_computation()); -      } - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.IndexedMergeLambda.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            lambda_cc.get_computation(), -            secondary_collection_cc.get_address(), -            holder.get_address(), -            main_collection_cc.get_address(), -            ( -               (tonkadur.fate.v1.lang.type.CollectionType) -               source.get_main_collection().get_type() -            ).is_set(), -            params -         ) -      ); - -      main_collection_cc.release_registers(result); -      secondary_collection_cc.release_registers(result); -      compiler.registers().release(holder, result); - -      for (final ComputationCompiler cc: param_cc_list) -      { -         cc.release_registers(result); -      } -   } -} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedSafeMergeCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedSafeMergeCompiler.java deleted file mode 100644 index 726ad2e..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedSafeMergeCompiler.java +++ /dev/null @@ -1,179 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic; - -import java.util.List; -import java.util.ArrayList; - -import tonkadur.fate.v1.lang.instruction.generic.IndexedSafeMerge; - -import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; -import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; - -import tonkadur.wyrd.v1.lang.Register; - -import tonkadur.wyrd.v1.lang.meta.Computation; - -import tonkadur.wyrd.v1.lang.instruction.SetValue; - -import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler; - -public class IndexedSafeMergeCompiler extends GenericInstructionCompiler -{ -   public static Class get_target_class () -   { -      return IndexedSafeMerge.class; -   } - -   public IndexedSafeMergeCompiler (final Compiler compiler) -   { -      super(compiler); -   } - -   public void compile -   ( -      final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction -   ) -   throws Throwable -   { -      final IndexedSafeMerge source; -      final Register holder; -      final ComputationCompiler lambda_cc; -      final ComputationCompiler main_default_cc, secondary_default_cc; -      final List<Computation> params; -      final List<ComputationCompiler> param_cc_list; -      final ComputationCompiler main_collection_cc, secondary_collection_cc; - -      source = (IndexedSafeMerge) instruction; - -      params = new ArrayList<Computation>(); -      param_cc_list = new ArrayList<ComputationCompiler>(); - -      lambda_cc = new ComputationCompiler(compiler); -      main_default_cc = new ComputationCompiler(compiler); -      secondary_default_cc = new ComputationCompiler(compiler); - -      source.get_lambda_function().get_visited_by(lambda_cc); - -      if (lambda_cc.has_init()) -      { -         result.add(lambda_cc.get_init()); -      } - -      main_collection_cc = new ComputationCompiler(compiler); - -      source.get_main_collection().get_visited_by(main_collection_cc); - -      if (main_collection_cc.has_init()) -      { -         result.add(main_collection_cc.get_init()); -      } - -      source.get_main_default().get_visited_by(main_default_cc); - -      main_default_cc.generate_address(); - -      if (main_default_cc.has_init()) -      { -         result.add(main_default_cc.get_init()); -      } - -      source.get_secondary_default().get_visited_by(secondary_default_cc); - -      secondary_default_cc.generate_address(); - -      if (secondary_default_cc.has_init()) -      { -         result.add(secondary_default_cc.get_init()); -      } - -      holder = -         compiler.registers().reserve -         ( -            main_collection_cc.get_computation().get_type(), -            result -         ); - -      result.add -      ( -         new SetValue -         ( -            holder.get_address(), -            main_collection_cc.get_computation() -         ) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.Clear.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            main_collection_cc.get_address() -         ) -      ); - -      secondary_collection_cc = new ComputationCompiler(compiler); - -      source.get_secondary_collection().get_visited_by(secondary_collection_cc); - -      if (secondary_collection_cc.has_init()) -      { -         result.add(secondary_collection_cc.get_init()); -      } - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         if (param_cc.has_init()) -         { -            result.add(param_cc.get_init()); -         } - -         param_cc_list.add(param_cc); - -         params.add(param_cc.get_computation()); -      } - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.IndexedMergeLambda.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            lambda_cc.get_computation(), -            secondary_default_cc.get_computation(), -            secondary_collection_cc.get_address(), -            main_default_cc.get_computation(), -            holder.get_address(), -            main_collection_cc.get_address(), -            ( -               (tonkadur.fate.v1.lang.type.CollectionType) -               source.get_main_collection().get_type() -            ).is_set(), -            params -         ) -      ); - -      main_collection_cc.release_registers(result); -      secondary_collection_cc.release_registers(result); -      main_default_cc.release_registers(result); -      secondary_default_cc.release_registers(result); -      compiler.registers().release(holder, result); - -      for (final ComputationCompiler cc: param_cc_list) -      { -         cc.release_registers(result); -      } -   } -} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MapCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MapCompiler.java deleted file mode 100644 index 9e0f883..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MapCompiler.java +++ /dev/null @@ -1,140 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic; - -import java.util.List; -import java.util.ArrayList; - -import tonkadur.fate.v1.lang.instruction.generic.Map; - -import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; -import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; - -import tonkadur.wyrd.v1.lang.Register; - -import tonkadur.wyrd.v1.lang.meta.Computation; - -import tonkadur.wyrd.v1.lang.instruction.SetValue; - -import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler; - -public class MapCompiler extends GenericInstructionCompiler -{ -   public static Class get_target_class () -   { -      return Map.class; -   } - -   public MapCompiler (final Compiler compiler) -   { -      super(compiler); -   } - -   public void compile -   ( -      final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction -   ) -   throws Throwable -   { -      final Map source; -      final List<Computation> params; -      final List<ComputationCompiler> param_cc_list; -      // This is one dangerous operation to do in-place, so we don't. -      final Register holder; -      final ComputationCompiler lambda_cc, collection_cc; - -      source = (Map) instruction; - -      params = new ArrayList<Computation>(); -      param_cc_list = new ArrayList<ComputationCompiler>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         if (param_cc.has_init()) -         { -            result.add(param_cc.get_init()); -         } - -         param_cc_list.add(param_cc); - -         params.add(param_cc.get_computation()); -      } - -      lambda_cc = new ComputationCompiler(compiler); - -      source.get_lambda_function().get_visited_by(lambda_cc); - -      if (lambda_cc.has_init()) -      { -         result.add(lambda_cc.get_init()); -      } - -      collection_cc = new ComputationCompiler(compiler); - -      source.get_collection().get_visited_by(collection_cc); - -      if (collection_cc.has_init()) -      { -         result.add(collection_cc.get_init()); -      } - -      holder = -         compiler.registers().reserve -         ( -            collection_cc.get_computation().get_type(), -            result -         ); - -      result.add -      ( -         new SetValue(holder.get_address(), collection_cc.get_computation()) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.Clear.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            collection_cc.get_address() -         ) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.MapLambda.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            lambda_cc.get_computation(), -            holder.get_address(), -            collection_cc.get_address(), -            ( -               (tonkadur.fate.v1.lang.type.CollectionType) -               source.get_collection().get_type() -            ).is_set(), -            params -         ) -      ); - -      lambda_cc.release_registers(result); -      collection_cc.release_registers(result); -      compiler.registers().release(holder, result); - -      for (final ComputationCompiler cc: param_cc_list) -      { -         cc.release_registers(result); -      } -   } -} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MergeCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MergeCompiler.java deleted file mode 100644 index 12f77e9..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MergeCompiler.java +++ /dev/null @@ -1,154 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic; - -import java.util.List; -import java.util.ArrayList; - -import tonkadur.fate.v1.lang.instruction.generic.Merge; - -import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; -import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; - -import tonkadur.wyrd.v1.lang.Register; - -import tonkadur.wyrd.v1.lang.meta.Computation; - -import tonkadur.wyrd.v1.lang.instruction.SetValue; - -import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler; - -public class MergeCompiler extends GenericInstructionCompiler -{ -   public static Class get_target_class () -   { -      return Merge.class; -   } - -   public MergeCompiler (final Compiler compiler) -   { -      super(compiler); -   } - -   public void compile -   ( -      final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction -   ) -   throws Throwable -   { -      final Merge source; -      final Register holder; -      final ComputationCompiler lambda_cc; -      final List<Computation> params; -      final List<ComputationCompiler> param_cc_list; -      final ComputationCompiler main_collection_cc, secondary_collection_cc; - -      source = (Merge) instruction; - -      params = new ArrayList<Computation>(); -      param_cc_list = new ArrayList<ComputationCompiler>(); - -      lambda_cc = new ComputationCompiler(compiler); - -      source.get_lambda_function().get_visited_by(lambda_cc); - -      if (lambda_cc.has_init()) -      { -         result.add(lambda_cc.get_init()); -      } - -      main_collection_cc = new ComputationCompiler(compiler); - -      source.get_main_collection().get_visited_by(main_collection_cc); - -      if (main_collection_cc.has_init()) -      { -         result.add(main_collection_cc.get_init()); -      } - -      holder = -         compiler.registers().reserve -         ( -            main_collection_cc.get_computation().get_type(), -            result -         ); - -      result.add -      ( -         new SetValue -         ( -            holder.get_address(), -            main_collection_cc.get_computation() -         ) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.Clear.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            main_collection_cc.get_address() -         ) -      ); - -      secondary_collection_cc = new ComputationCompiler(compiler); - -      source.get_secondary_collection().get_visited_by(secondary_collection_cc); - -      if (secondary_collection_cc.has_init()) -      { -         result.add(secondary_collection_cc.get_init()); -      } - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         if (param_cc.has_init()) -         { -            result.add(param_cc.get_init()); -         } - -         param_cc_list.add(param_cc); - -         params.add(param_cc.get_computation()); -      } - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.MergeLambda.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            lambda_cc.get_computation(), -            secondary_collection_cc.get_address(), -            holder.get_address(), -            main_collection_cc.get_address(), -            ( -               (tonkadur.fate.v1.lang.type.CollectionType) -               source.get_main_collection().get_type() -            ).is_set(), -            params -         ) -      ); - -      main_collection_cc.release_registers(result); -      secondary_collection_cc.release_registers(result); -      compiler.registers().release(holder, result); - -      for (final ComputationCompiler cc: param_cc_list) -      { -         cc.release_registers(result); -      } -   } -} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SafeMergeCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SafeMergeCompiler.java deleted file mode 100644 index 128569d..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SafeMergeCompiler.java +++ /dev/null @@ -1,180 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic; - -import java.util.List; -import java.util.ArrayList; - -import tonkadur.fate.v1.lang.instruction.generic.SafeMerge; - -import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; -import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; - -import tonkadur.wyrd.v1.lang.Register; - -import tonkadur.wyrd.v1.lang.meta.Computation; - -import tonkadur.wyrd.v1.lang.instruction.SetValue; - -import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler; - -public class SafeMergeCompiler extends GenericInstructionCompiler -{ -   public static Class get_target_class () -   { -      return SafeMerge.class; -   } - -   public SafeMergeCompiler (final Compiler compiler) -   { -      super(compiler); -   } - -   public void compile -   ( -      final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction -   ) -   throws Throwable -   { -      final SafeMerge source; -      final Register holder; -      final ComputationCompiler lambda_cc; -      final ComputationCompiler main_default_cc, secondary_default_cc; -      final List<Computation> params; -      final List<ComputationCompiler> param_cc_list; -      final ComputationCompiler main_collection_cc, secondary_collection_cc; - -      source = (SafeMerge) instruction; - -      params = new ArrayList<Computation>(); -      param_cc_list = new ArrayList<ComputationCompiler>(); - -      lambda_cc = new ComputationCompiler(compiler); -      main_default_cc = new ComputationCompiler(compiler); -      secondary_default_cc = new ComputationCompiler(compiler); - -      source.get_lambda_function().get_visited_by(lambda_cc); - -      if (lambda_cc.has_init()) -      { -         result.add(lambda_cc.get_init()); -      } - -      main_collection_cc = new ComputationCompiler(compiler); - -      source.get_main_collection().get_visited_by(main_collection_cc); - -      if (main_collection_cc.has_init()) -      { -         result.add(main_collection_cc.get_init()); -      } - -      source.get_main_default().get_visited_by(main_default_cc); - -      main_default_cc.generate_address(); - -      if (main_default_cc.has_init()) -      { -         result.add(main_default_cc.get_init()); -      } - -      source.get_secondary_default().get_visited_by(secondary_default_cc); - -      secondary_default_cc.generate_address(); - -      if (secondary_default_cc.has_init()) -      { -         result.add(secondary_default_cc.get_init()); -      } - -      holder = -         compiler.registers().reserve -         ( -            main_collection_cc.get_computation().get_type(), -            result -         ); - -      result.add -      ( -         new SetValue -         ( -            holder.get_address(), -            main_collection_cc.get_computation() -         ) -      ); - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.Clear.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            main_collection_cc.get_address() -         ) -      ); - -      secondary_collection_cc = new ComputationCompiler(compiler); - -      source.get_secondary_collection().get_visited_by(secondary_collection_cc); - -      if (secondary_collection_cc.has_init()) -      { -         result.add(secondary_collection_cc.get_init()); -      } - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         if (param_cc.has_init()) -         { -            result.add(param_cc.get_init()); -         } - -         param_cc_list.add(param_cc); - -         params.add(param_cc.get_computation()); -      } - -      result.add -      ( -         tonkadur.wyrd.v1.compiler.util.MergeLambda.generate -         ( -            compiler.registers(), -            compiler.assembler(), -            lambda_cc.get_computation(), -            secondary_default_cc.get_computation(), -            secondary_collection_cc.get_address(), -            main_default_cc.get_computation(), -            holder.get_address(), -            main_collection_cc.get_address(), -            ( -               (tonkadur.fate.v1.lang.type.CollectionType) -               source.get_main_collection().get_type() -            ).is_set(), -            params -         ) -      ); - -      main_collection_cc.release_registers(result); -      secondary_collection_cc.release_registers(result); -      main_default_cc.release_registers(result); -      secondary_default_cc.release_registers(result); -      compiler.registers().release(holder, result); - -      for (final ComputationCompiler cc: param_cc_list) -      { -         cc.release_registers(result); -      } - -   } -} | 


