From 3e1a05a2a82d9f567491d68a6004a5e027e5c873 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Sat, 4 Sep 2021 00:21:30 +0200 Subject: ... --- .../fate/v1/lang/computation/generic/Fold.java | 73 ++----- .../generic/IndexedPartitionComputation.java | 52 +++-- .../lang/computation/generic/LambdaEvaluation.java | 22 +- .../fate/v1/lang/instruction/generic/Filter.java | 50 +++-- .../v1/lang/instruction/generic/IndexedFilter.java | 54 +++-- .../v1/lang/instruction/generic/IndexedMap.java | 150 ------------- .../v1/lang/instruction/generic/IndexedMerge.java | 236 --------------------- .../lang/instruction/generic/IndexedPartition.java | 59 ++++-- .../fate/v1/lang/instruction/generic/Map.java | 142 ------------- .../fate/v1/lang/instruction/generic/Merge.java | 230 -------------------- .../v1/lang/instruction/generic/Partition.java | 56 +++-- .../computation/generic/SafeMergeComputation.java | 126 ----------- .../generic/SafeMergeComputationCompiler.java | 126 +++++++++++ .../v1/instruction/generic/IndexedMapCompiler.java | 140 ------------ .../instruction/generic/IndexedMergeCompiler.java | 154 -------------- .../generic/IndexedSafeMergeCompiler.java | 179 ---------------- .../fate/v1/instruction/generic/MapCompiler.java | 140 ------------ .../fate/v1/instruction/generic/MergeCompiler.java | 154 -------------- .../v1/instruction/generic/SafeMergeCompiler.java | 180 ---------------- 19 files changed, 332 insertions(+), 1991 deletions(-) delete mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java delete mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputation.java create mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java delete mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMapCompiler.java delete mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMergeCompiler.java delete mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedSafeMergeCompiler.java delete mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MapCompiler.java delete mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MergeCompiler.java delete mode 100644 src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SafeMergeCompiler.java 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 extra_params; - final List signature; - final List expected_signature; + final List base_param_types; + final Type return_type; + + is_foldl = (alias.contains("foldl") || alias.contains("eft")); + + base_param_types = new ArrayList(); 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(); - } - 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 extra_params = null; + final Computation lambda_function; + final Computation collection; + final List extra_params; + final List base_param_types; final Type type; - final List target_signature; - target_signature = new ArrayList(); + base_param_types = new ArrayList(); - 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 lambda_signature; + final List 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(), + 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 call_parameters ) throws Throwable { - // TODO: implement - final Computation lambda_function = null; - final Computation collection = null; - final List extra_params = null; - final List target_signature; + final Computation lambda_function; + final Computation collection; + final List extra_params; - target_signature = new ArrayList(); + 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 call_parameters ) throws Throwable { - final Computation lambda_function = null; - final Computation collection = null; - final List extra_params = null; - final List target_signature; + final Computation lambda_function; + final Computation collection; + final List extra_params; + final List base_param_types; - target_signature = new ArrayList(); + base_param_types = new ArrayList(); - 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 get_aliases () - { - final List aliases; - - aliases = new ArrayList(); - - 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 call_parameters - ) - throws Throwable - { - final Computation lambda_function = null; - final Computation collection = null; - final List extra_params = null; - - final List in_types; - - in_types = new ArrayList(); - - 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 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 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 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 get_aliases () - { - final List aliases; - - aliases = new ArrayList(); - - 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 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 extra_params = null; - - final List types_in; - - types_in = new ArrayList(); - - 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 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 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 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 call_parameters ) throws Throwable { - // TODO: implement - final Computation lambda_function = null; - final Computation collection_in = null; - final Computation collection_out = null; - final List extra_params = null; + final Computation lambda_function; + final Computation collection_in; + final Computation collection_out; + final List extra_params; + final List base_param_types; - final List target_signature; + base_param_types = new ArrayList(); - target_signature = new ArrayList(); + 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 get_aliases () - { - final List aliases; - - aliases = new ArrayList(); - - aliases.add("list:map"); - aliases.add("set:map"); - - return aliases; - } - - public static Instruction build - ( - final Origin origin, - final String _alias, - final List call_parameters - ) - throws Throwable - { - final Computation lambda_function = null; - final Computation collection = null; - final List extra_params = null; - final List target_signature; - - target_signature = new ArrayList(); - - 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 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 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 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 get_aliases () - { - final List aliases; - - aliases = new ArrayList(); - - 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 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 extra_params = null; - - final List types_in; - - types_in = new ArrayList(); - - 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 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 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 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 extra_params = null; - final List target_signature; + final Computation lambda_function; + final Computation collection_in; + final Computation collection_out; + final List extra_params; - target_signature = new ArrayList(); + 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/SafeMergeComputation.java deleted file mode 100644 index 17673da..0000000 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputation.java +++ /dev/null @@ -1,126 +0,0 @@ -package tonkadur.wyrd.v1.compiler.fate.v1.computation.generic; - -import java.util.List; -import java.util.ArrayList; - -import tonkadur.fate.v1.lang.computation.generic.SafeMergeComputation; - -import tonkadur.wyrd.v1.lang.Register; - -import tonkadur.wyrd.v1.lang.meta.Computation; - -import tonkadur.wyrd.v1.lang.type.Type; - -import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; -import tonkadur.wyrd.v1.compiler.fate.v1.TypeCompiler; -import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; - -import tonkadur.wyrd.v1.compiler.fate.v1.computation.GenericComputationCompiler; - -public class SafeMergeComputationCompiler -extends GenericComputationCompiler -{ - public static Class get_target_class () - { - return SafeMergeComputation.class; - } - - public SafeMergeComputationCompiler (final Compiler compiler) - { - super(compiler); - } - - public void compile - ( - final tonkadur.fate.v1.lang.computation.GenericComputation computation - ) - throws Throwable - { - final SafeMergeComputation source; - final List params; - final ComputationCompiler lambda_cc, default_a_cc, default_b_cc; - final ComputationCompiler in_collection_a_cc, in_collection_b_cc; - final Register result; - - source = (SafeMergeComputation) computation; - - result = reserve(TypeCompiler.compile(compiler, source.get_type())); - - result_as_address = result.get_address(); - result_as_computation = result.get_value(); - - params = new ArrayList(); - - 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(); - - assimilate(param_cc); - - params.add(param_cc.get_computation()); - } - - lambda_cc = new ComputationCompiler(compiler); - - source.get_lambda_function().get_visited_by(lambda_cc); - - assimilate(lambda_cc); - - default_a_cc = new ComputationCompiler(compiler); - - source.get_default_a().get_visited_by(default_a_cc); - - default_a_cc.generate_address(); - - assimilate(default_a_cc); - - default_b_cc = new ComputationCompiler(compiler); - - source.get_default_b().get_visited_by(default_b_cc); - - default_b_cc.generate_address(); - - assimilate(default_b_cc); - - in_collection_a_cc = new ComputationCompiler(compiler); - - source.get_collection_in_a().get_visited_by(in_collection_a_cc); - - assimilate(in_collection_a_cc); - - in_collection_b_cc = new ComputationCompiler(compiler); - - source.get_collection_in_b().get_visited_by(in_collection_b_cc); - - assimilate(in_collection_b_cc); - - init_instructions.add - ( - tonkadur.wyrd.v1.compiler.util.MergeLambda.generate - ( - compiler.registers(), - compiler.assembler(), - lambda_cc.get_computation(), - default_a_cc.get_computation(), - in_collection_a_cc.get_address(), - default_b_cc.get_computation(), - in_collection_b_cc.get_address(), - result_as_address, - source.to_set(), - params - ) - ); - - } -} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java new file mode 100644 index 0000000..17673da --- /dev/null +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java @@ -0,0 +1,126 @@ +package tonkadur.wyrd.v1.compiler.fate.v1.computation.generic; + +import java.util.List; +import java.util.ArrayList; + +import tonkadur.fate.v1.lang.computation.generic.SafeMergeComputation; + +import tonkadur.wyrd.v1.lang.Register; + +import tonkadur.wyrd.v1.lang.meta.Computation; + +import tonkadur.wyrd.v1.lang.type.Type; + +import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; +import tonkadur.wyrd.v1.compiler.fate.v1.TypeCompiler; +import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; + +import tonkadur.wyrd.v1.compiler.fate.v1.computation.GenericComputationCompiler; + +public class SafeMergeComputationCompiler +extends GenericComputationCompiler +{ + public static Class get_target_class () + { + return SafeMergeComputation.class; + } + + public SafeMergeComputationCompiler (final Compiler compiler) + { + super(compiler); + } + + public void compile + ( + final tonkadur.fate.v1.lang.computation.GenericComputation computation + ) + throws Throwable + { + final SafeMergeComputation source; + final List params; + final ComputationCompiler lambda_cc, default_a_cc, default_b_cc; + final ComputationCompiler in_collection_a_cc, in_collection_b_cc; + final Register result; + + source = (SafeMergeComputation) computation; + + result = reserve(TypeCompiler.compile(compiler, source.get_type())); + + result_as_address = result.get_address(); + result_as_computation = result.get_value(); + + params = new ArrayList(); + + 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(); + + assimilate(param_cc); + + params.add(param_cc.get_computation()); + } + + lambda_cc = new ComputationCompiler(compiler); + + source.get_lambda_function().get_visited_by(lambda_cc); + + assimilate(lambda_cc); + + default_a_cc = new ComputationCompiler(compiler); + + source.get_default_a().get_visited_by(default_a_cc); + + default_a_cc.generate_address(); + + assimilate(default_a_cc); + + default_b_cc = new ComputationCompiler(compiler); + + source.get_default_b().get_visited_by(default_b_cc); + + default_b_cc.generate_address(); + + assimilate(default_b_cc); + + in_collection_a_cc = new ComputationCompiler(compiler); + + source.get_collection_in_a().get_visited_by(in_collection_a_cc); + + assimilate(in_collection_a_cc); + + in_collection_b_cc = new ComputationCompiler(compiler); + + source.get_collection_in_b().get_visited_by(in_collection_b_cc); + + assimilate(in_collection_b_cc); + + init_instructions.add + ( + tonkadur.wyrd.v1.compiler.util.MergeLambda.generate + ( + compiler.registers(), + compiler.assembler(), + lambda_cc.get_computation(), + default_a_cc.get_computation(), + in_collection_a_cc.get_address(), + default_b_cc.get_computation(), + in_collection_b_cc.get_address(), + result_as_address, + source.to_set(), + params + ) + ); + + } +} 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 params; - final List 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(); - param_cc_list = new ArrayList(); - - 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 params; - final List param_cc_list; - final ComputationCompiler main_collection_cc, secondary_collection_cc; - - source = (IndexedMerge) instruction; - - params = new ArrayList(); - param_cc_list = new ArrayList(); - - 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 params; - final List param_cc_list; - final ComputationCompiler main_collection_cc, secondary_collection_cc; - - source = (IndexedSafeMerge) instruction; - - params = new ArrayList(); - param_cc_list = new ArrayList(); - - 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 params; - final List 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(); - param_cc_list = new ArrayList(); - - 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 params; - final List param_cc_list; - final ComputationCompiler main_collection_cc, secondary_collection_cc; - - source = (Merge) instruction; - - params = new ArrayList(); - param_cc_list = new ArrayList(); - - 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 params; - final List param_cc_list; - final ComputationCompiler main_collection_cc, secondary_collection_cc; - - source = (SafeMerge) instruction; - - params = new ArrayList(); - param_cc_list = new ArrayList(); - - 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); - } - - } -} -- cgit v1.2.3-70-g09d2