| 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 | |
| parent | 6d01d428f53bbe1203bc08b15bddb74554ea2d86 (diff) | |
...
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); - } - - } -} |


