summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-09-04 00:21:30 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-09-04 00:21:30 +0200
commit3e1a05a2a82d9f567491d68a6004a5e027e5c873 (patch)
tree1bacdf64f43989bef8456e2039317ff260b8cbf5 /src
parent6d01d428f53bbe1203bc08b15bddb74554ea2d86 (diff)
...
Diffstat (limited to 'src')
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java73
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java52
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java22
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Filter.java50
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java54
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java150
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java236
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java59
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java142
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java230
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java56
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java (renamed from src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputation.java)0
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMapCompiler.java140
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMergeCompiler.java154
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedSafeMergeCompiler.java179
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MapCompiler.java140
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MergeCompiler.java154
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SafeMergeCompiler.java180
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);
- }
-
- }
-}