summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-08-28 23:46:05 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-08-28 23:46:05 +0200
commit746329272fcab689d0fa2f0594f7914c8cc497b0 (patch)
tree1a07a5c1fe1bb8c2973274e4b5ab783e0660b88f
parent7605eaa49bfdafa6d386440aa301c809245055ae (diff)
...
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/AmbiguousWord.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/Let.java7
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/Access.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/AtReference.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/CarCdr.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMergeComputation.java18
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/computation/generic/MergeComputation.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElement.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementAt.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementsOf.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Allocate.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Break.java29
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java1
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Done.java29
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/End.java28
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Filter.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Free.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java97
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java90
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java118
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java98
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java82
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java120
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java94
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/PopElement.java9
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/PushElement.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveAllOfElement.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElement.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementAt.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementsOf.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableCall.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableJump.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/SetValue.java21
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Sort.java4
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/SubList.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/Computation.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java18
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java1578
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementAtCompiler.java124
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementCompiler.java69
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementsOfCompiler.java70
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/BreakCompiler.java38
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/DoneCompiler.java42
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/EndCompiler.java30
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/FilterCompiler.java106
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedFilterCompiler.java106
-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.java314
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedPartitionCompiler.java121
-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.java311
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PartitionCompiler.java121
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PopElementCompiler.java67
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PushElementCompiler.java106
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveAllOfElementCompiler.java180
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementAtCompiler.java88
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementCompiler.java106
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementsOfCompiler.java69
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/ReverseListCompiler.java61
63 files changed, 2876 insertions, 2019 deletions
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/AmbiguousWord.java b/src/core/src/tonkadur/fate/v1/lang/computation/AmbiguousWord.java
index b29e997..d78dcc9 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/AmbiguousWord.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/AmbiguousWord.java
@@ -1,6 +1,7 @@
package tonkadur.fate.v1.lang.computation;
import tonkadur.parser.Origin;
+import tonkadur.parser.ParsingError;
import tonkadur.fate.v1.parser.ParserData;
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java b/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java
index 0b89688..d48c997 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/FieldAccess.java
@@ -4,6 +4,7 @@ import java.util.Collections;
import java.util.List;
import tonkadur.parser.Origin;
+import tonkadur.parser.ParsingError;
import tonkadur.error.ErrorManager;
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Let.java b/src/core/src/tonkadur/fate/v1/lang/computation/Let.java
index d093b80..baba303 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/Let.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/Let.java
@@ -75,6 +75,13 @@ public class Let extends Computation
return assignments;
}
+ @Override
+ public void use_as_reference ()
+ throws ParsingError
+ {
+ computation.use_as_reference();
+ }
+
/**** Misc. ****************************************************************/
@Override
public String toString ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java
index 98f6116..6b7f2ac 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/VariableReference.java
@@ -1,6 +1,7 @@
package tonkadur.fate.v1.lang.computation;
import tonkadur.parser.Origin;
+import tonkadur.parser.ParsingError;
import tonkadur.fate.v1.lang.Variable;
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/Access.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/Access.java
index d1527aa..67335f3 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/Access.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/Access.java
@@ -6,6 +6,7 @@ import java.util.Collections;
import java.util.List;
import tonkadur.parser.Origin;
+import tonkadur.parser.ParsingError;
import tonkadur.error.ErrorManager;
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/AtReference.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/AtReference.java
index 19e5c0b..b28abbc 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/AtReference.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/AtReference.java
@@ -6,6 +6,7 @@ import java.util.Collections;
import java.util.List;
import tonkadur.parser.Origin;
+import tonkadur.parser.ParsingError;
import tonkadur.error.ErrorManager;
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/CarCdr.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/CarCdr.java
index 1400847..48f50e2 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/CarCdr.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/CarCdr.java
@@ -6,6 +6,7 @@ import java.util.Collections;
import java.util.List;
import tonkadur.parser.Origin;
+import tonkadur.parser.ParsingError;
import tonkadur.error.ErrorManager;
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMergeComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMergeComputation.java
index aba8e45..c90540d 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMergeComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMergeComputation.java
@@ -35,6 +35,24 @@ public class IndexedMergeComputation extends GenericComputation
aliases.add("set:indexedMerge");
aliases.add("set:imerge");
+ aliases.add("list:indexed_safe_merge");
+ aliases.add("list:indexedsafemerge");
+ aliases.add("list:indexedSafeMerge");
+ aliases.add("list:isafemerge");
+ aliases.add("list:safe_indexed_merge");
+ aliases.add("list:safeindexedmerge");
+ aliases.add("list:safeIndexedMerge");
+ aliases.add("list:safeimerge");
+
+ aliases.add("set:indexed_safe_merge");
+ aliases.add("set:indexedsafemerge");
+ aliases.add("set:indexedSafeMerge");
+ aliases.add("set:isafemerge");
+ aliases.add("set:safe_indexed_merge");
+ aliases.add("set:safeindexedmerge");
+ aliases.add("set:safeIndexedMerge");
+ aliases.add("set:safeimerge");
+
return aliases;
}
diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/MergeComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/MergeComputation.java
index 171d448..3ebe675 100644
--- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/MergeComputation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/MergeComputation.java
@@ -27,7 +27,13 @@ public class MergeComputation extends GenericComputation
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;
}
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElement.java
index 51296f4..53240cb 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElement.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElement.java
@@ -12,6 +12,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class AddElement extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementAt.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementAt.java
index 4436bea..4b784f1 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementAt.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementAt.java
@@ -14,6 +14,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class AddElementAt extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementsOf.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementsOf.java
index 689ae35..f0b9f8c 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementsOf.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/AddElementsOf.java
@@ -14,6 +14,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class AddElementsOf extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Allocate.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Allocate.java
index 6d42e94..9043194 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Allocate.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Allocate.java
@@ -16,6 +16,7 @@ import tonkadur.fate.v1.lang.type.Type;
import tonkadur.fate.v1.lang.type.PointerType;
import tonkadur.fate.v1.lang.meta.Computation;
+import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.instruction.GenericInstruction;
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Break.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Break.java
index dd26d0e..b8305bd 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Break.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Break.java
@@ -8,6 +8,9 @@ import tonkadur.parser.Origin;
import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.Instruction;
+import tonkadur.fate.v1.lang.meta.Computation;
+
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
public class Break extends GenericInstruction
{
@@ -17,12 +20,7 @@ public class Break extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ aliases.add("break");
return aliases;
}
@@ -35,6 +33,17 @@ public class Break extends GenericInstruction
)
throws Throwable
{
+ if (call_parameters.size() != 0)
+ {
+ // TODO: Error.
+ System.err.println("Wrong number of params at " + origin.toString());
+
+ return null;
+ }
+
+ return new Break(origin);
+ }
+
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
@@ -48,14 +57,6 @@ public class Break extends GenericInstruction
super(origin);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
- {
- iv.visit_break(this);
- }
-
/**** Misc. ****************************************************************/
@Override
public String toString ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java
index f228174..ce59cdf 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java
@@ -8,6 +8,7 @@ import tonkadur.parser.Origin;
import tonkadur.parser.ParsingError;
import tonkadur.fate.v1.lang.meta.Computation;
+import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
import tonkadur.fate.v1.lang.instruction.GenericInstruction;
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Done.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Done.java
index ec21eec..844c583 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Done.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Done.java
@@ -8,6 +8,9 @@ import tonkadur.parser.Origin;
import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.Instruction;
+import tonkadur.fate.v1.lang.meta.Computation;
+
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
public class Done extends GenericInstruction
{
@@ -17,12 +20,7 @@ public class Done extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ aliases.add("done");
return aliases;
}
@@ -35,6 +33,17 @@ public class Done extends GenericInstruction
)
throws Throwable
{
+ if (call_parameters.size() != 0)
+ {
+ // TODO: Error.
+ System.err.println("Wrong number of params at " + origin.toString());
+
+ return null;
+ }
+
+ return new Done(origin);
+ }
+
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
@@ -48,14 +57,6 @@ public class Done extends GenericInstruction
super(origin);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
- {
- iv.visit_done(this);
- }
-
/**** Misc. ****************************************************************/
@Override
public String toString ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/End.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/End.java
index 762f0ba..b504486 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/End.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/End.java
@@ -8,6 +8,9 @@ import tonkadur.parser.Origin;
import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.Instruction;
+import tonkadur.fate.v1.lang.meta.Computation;
+
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
public class End extends GenericInstruction
{
@@ -17,12 +20,7 @@ public class End extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ aliases.add("end");
return aliases;
}
@@ -35,6 +33,16 @@ public class End extends GenericInstruction
)
throws Throwable
{
+ if (call_parameters.size() != 0)
+ {
+ // TODO: Error.
+ System.err.println("Wrong number of params at " + origin.toString());
+
+ return null;
+ }
+
+ return new End(origin);
+ }
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
@@ -48,14 +56,6 @@ public class End extends GenericInstruction
super(origin);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
- {
- iv.visit_end(this);
- }
-
/**** Misc. ****************************************************************/
@Override
public String toString ()
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 a86be76..1ad42f4 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
@@ -20,6 +20,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class Filter extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Free.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Free.java
index 799c47d..26e7175 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Free.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Free.java
@@ -15,6 +15,7 @@ import tonkadur.fate.v1.lang.type.Type;
import tonkadur.fate.v1.lang.type.PointerType;
import tonkadur.fate.v1.lang.meta.Computation;
+import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.instruction.GenericInstruction;
@@ -25,6 +26,7 @@ public class Free extends GenericInstruction
final List<String> aliases;
aliases = new ArrayList<String>();
+
aliases.add("free");
aliases.add("delete");
aliases.add("destroy");
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 7477df1..94ad938 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
@@ -21,6 +21,8 @@ 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 IndexedFilter extends GenericInstruction
{
public static Collection<String> get_aliases ()
@@ -29,12 +31,14 @@ public class IndexedFilter extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ aliases.add("list:indexed_filter");
+ aliases.add("list:indexedfilter");
+ aliases.add("list:indexedFilter");
+ aliases.add("list:ifilter");
+ aliases.add("set:indexed_filter");
+ aliases.add("set:indexedfilter");
+ aliases.add("set:indexedFilter");
+ aliases.add("set:ifilter");
return aliases;
}
@@ -47,6 +51,43 @@ public class IndexedFilter extends GenericInstruction
)
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(Type.INT);
+ 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,
+ Type.BOOL,
+ target_signature
+ );
+
+ return
+ new IndexedFilter
+ (
+ origin,
+ lambda_function,
+ collection,
+ extra_params
+ );
+ }
+
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
@@ -76,51 +117,7 @@ public class IndexedFilter extends GenericInstruction
/***************************************************************************/
/**** PUBLIC ***************************************************************/
/***************************************************************************/
- /**** Constructors *********************************************************/
- public static IndexedFilter build
- (
- final Origin origin,
- final Computation lambda_function,
- final Computation collection,
- final List<Computation> extra_params
- )
- throws ParsingError
- {
- final List<Type> target_signature;
-
- target_signature = new ArrayList<Type>();
-
- RecurrentChecks.assert_is_a_collection(collection);
-
- target_signature.add(Type.INT);
- 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,
- Type.BOOL,
- target_signature
- );
-
- return new IndexedFilter(origin, lambda_function, collection, extra_params);
- }
-
/**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
- {
- iv.visit_indexed_filter(this);
- }
-
public Computation get_lambda_function ()
{
return lambda_function;
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
index bbb0188..acb2d98 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMap.java
@@ -19,6 +19,8 @@ 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 ()
@@ -27,12 +29,15 @@ public class IndexedMap extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ 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;
}
@@ -45,45 +50,10 @@ public class IndexedMap extends GenericInstruction
)
throws Throwable
{
- /***************************************************************************/
- /**** MEMBERS **************************************************************/
- /***************************************************************************/
- protected final List<Computation> extra_params;
- protected final Computation lambda_function;
- protected final Computation collection;
+ final Computation lambda_function = null;
+ final Computation collection = null;
+ final List<Computation> extra_params = null;
- /***************************************************************************/
- /**** 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 ***************************************************************/
- /***************************************************************************/
- /**** Constructors *********************************************************/
- public static IndexedMap build
- (
- final Origin origin,
- final Computation lambda_function,
- final Computation collection,
- final List<Computation> extra_params
- )
- throws Throwable
- {
final List<Type> in_types;
in_types = new ArrayList<Type>();
@@ -111,14 +81,36 @@ public class IndexedMap extends GenericInstruction
return new IndexedMap(origin, lambda_function, collection, extra_params);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
+ /***************************************************************************/
+ /**** 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
+ )
{
- iv.visit_indexed_map(this);
+ 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;
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
index f2bab19..d2616c6 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedMerge.java
@@ -19,6 +19,8 @@ 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 ()
@@ -27,12 +29,14 @@ public class IndexedMerge extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ 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;
}
@@ -45,57 +49,14 @@ public class IndexedMerge extends GenericInstruction
)
throws Throwable
{
- /***************************************************************************/
- /**** 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;
+ // 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;
- /***************************************************************************/
- /**** 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 ***************************************************************/
- /***************************************************************************/
- /**** Constructors *********************************************************/
- public static IndexedMerge build
- (
- 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
- )
- throws Throwable
- {
final List<Type> types_in;
types_in = new ArrayList<Type>();
@@ -106,7 +67,7 @@ public class IndexedMerge extends GenericInstruction
}
else
{
- RecurrentChecks.assert_is_a_collection_of(collection, default_a);
+ //RecurrentChecks.assert_is_a_collection_of(collection, default_a);
}
if (default_b == null)
@@ -115,7 +76,7 @@ public class IndexedMerge extends GenericInstruction
}
else
{
- RecurrentChecks.assert_is_a_collection_of(collection_in_b, default_b);
+ //RecurrentChecks.assert_is_a_collection_of(collection_in_b, default_b);
}
types_in.add(Type.INT);
@@ -159,14 +120,45 @@ public class IndexedMerge extends GenericInstruction
);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
+ /***************************************************************************/
+ /**** 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
+ )
{
- iv.visit_indexed_merge(this);
+ 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;
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 aa049ca..4efc697 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
@@ -20,6 +20,8 @@ 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 IndexedPartition extends GenericInstruction
{
public static Collection<String> get_aliases ()
@@ -28,12 +30,14 @@ public class IndexedPartition extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ aliases.add("list:indexed_partition");
+ aliases.add("list:indexedpartition");
+ aliases.add("list:indexedPartition");
+ aliases.add("list:ipartition");
+ aliases.add("set:indexed_partition");
+ aliases.add("set:indexedpartition");
+ aliases.add("set:indexedPartition");
+ aliases.add("set:ipartition");
return aliases;
}
@@ -46,49 +50,12 @@ public class IndexedPartition extends GenericInstruction
)
throws Throwable
{
- /***************************************************************************/
- /**** MEMBERS **************************************************************/
- /***************************************************************************/
- protected final List<Computation> extra_params;
- protected final Computation lambda_function;
- protected final Computation collection_in;
- protected final Computation collection_out;
+ // TODO: implement
+ final Computation lambda_function = null;
+ final Computation collection_in = null;
+ final Computation collection_out = null;
+ final List<Computation> extra_params = null;
- /***************************************************************************/
- /**** PROTECTED ************************************************************/
- /***************************************************************************/
- /**** Constructors *********************************************************/
- protected IndexedPartition
- (
- final Origin origin,
- final Computation lambda_function,
- final Computation collection_in,
- final Computation collection_out,
- final List<Computation> extra_params
- )
- {
- super(origin);
-
- this.lambda_function = lambda_function;
- this.collection_in = collection_in;
- this.collection_out = collection_out;
- this.extra_params = extra_params;
- }
-
- /***************************************************************************/
- /**** PUBLIC ***************************************************************/
- /***************************************************************************/
- /**** Constructors *********************************************************/
- public static IndexedPartition build
- (
- final Origin origin,
- final Computation lambda_function,
- final Computation collection_in,
- final Computation collection_out,
- final List<Computation> extra_params
- )
- throws ParsingError
- {
final List<Type> target_signature;
target_signature = new ArrayList<Type>();
@@ -130,14 +97,39 @@ public class IndexedPartition extends GenericInstruction
);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
+ /***************************************************************************/
+ /**** MEMBERS **************************************************************/
+ /***************************************************************************/
+ protected final List<Computation> extra_params;
+ protected final Computation lambda_function;
+ protected final Computation collection_in;
+ protected final Computation collection_out;
+
+ /***************************************************************************/
+ /**** PROTECTED ************************************************************/
+ /***************************************************************************/
+ /**** Constructors *********************************************************/
+ protected IndexedPartition
+ (
+ final Origin origin,
+ final Computation lambda_function,
+ final Computation collection_in,
+ final Computation collection_out,
+ final List<Computation> extra_params
+ )
{
- iv.visit_indexed_partition(this);
+ super(origin);
+
+ this.lambda_function = lambda_function;
+ this.collection_in = collection_in;
+ this.collection_out = collection_out;
+ this.extra_params = extra_params;
}
+ /***************************************************************************/
+ /**** PUBLIC ***************************************************************/
+ /***************************************************************************/
+ /**** Accessors ************************************************************/
public Computation get_lambda_function ()
{
return lambda_function;
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
index 067b161..8fcfade 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Map.java
@@ -20,6 +20,8 @@ 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 ()
@@ -28,12 +30,8 @@ public class Map extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ aliases.add("list:map");
+ aliases.add("set:map");
return aliases;
}
@@ -46,6 +44,35 @@ public class Map extends GenericInstruction
)
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 **************************************************************/
/***************************************************************************/
@@ -75,50 +102,7 @@ public class Map extends GenericInstruction
/***************************************************************************/
/**** PUBLIC ***************************************************************/
/***************************************************************************/
- /**** Constructors *********************************************************/
- public static Map build
- (
- final Origin origin,
- final Computation lambda_function,
- final Computation collection,
- final List<Computation> extra_params
- )
- throws ParsingError
- {
- 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);
- }
-
/**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
- {
- iv.visit_map(this);
- }
-
public Computation get_lambda_function ()
{
return lambda_function;
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
index ddfe4b7..6461848 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Merge.java
@@ -19,6 +19,8 @@ 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 ()
@@ -27,12 +29,14 @@ public class Merge extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ 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;
}
@@ -40,62 +44,19 @@ public class Merge extends GenericInstruction
public static Instruction build
(
final Origin origin,
- final String _alias,
+ final String alias,
final List<Computation> call_parameters
)
throws Throwable
{
- /***************************************************************************/
- /**** 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;
+ // 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;
- /***************************************************************************/
- /**** 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 ***************************************************************/
- /***************************************************************************/
- /**** Constructors *********************************************************/
- public static Merge build
- (
- 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
- )
- throws Throwable
- {
final List<Type> types_in;
types_in = new ArrayList<Type>();
@@ -106,7 +67,7 @@ public class Merge extends GenericInstruction
}
else
{
- RecurrentChecks.assert_is_a_collection_of(collection, default_a);
+ //RecurrentChecks.assert_is_a_collection_of(collection, default_a);
}
if (default_b == null)
@@ -115,7 +76,7 @@ public class Merge extends GenericInstruction
}
else
{
- RecurrentChecks.assert_is_a_collection_of(collection_in_b, default_b);
+ //RecurrentChecks.assert_is_a_collection_of(collection_in_b, default_b);
}
types_in.add
@@ -153,14 +114,45 @@ public class Merge extends GenericInstruction
);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
+ /***************************************************************************/
+ /**** 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
+ )
{
- iv.visit_merge(this);
+ 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;
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 be4b733..820c8af 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
@@ -20,6 +20,8 @@ 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 Partition extends GenericInstruction
{
public static Collection<String> get_aliases ()
@@ -28,12 +30,8 @@ public class Partition extends GenericInstruction
aliases = new ArrayList<String>();
- aliases.add("list:add_element_at");
- aliases.add("list:addelementat");
- aliases.add("list:addElementAt");
- aliases.add("list:add_at");
- aliases.add("list:addat");
- aliases.add("list:addAt");
+ aliases.add("list:partition");
+ aliases.add("set:partition");
return aliases;
}
@@ -41,54 +39,15 @@ public class Partition extends GenericInstruction
public static Instruction build
(
final Origin origin,
- final String _alias,
+ final String alias,
final List<Computation> call_parameters
)
throws Throwable
{
- /***************************************************************************/
- /**** MEMBERS **************************************************************/
- /***************************************************************************/
- protected final List<Computation> extra_params;
- protected final Computation lambda_function;
- protected final Computation collection_in;
- protected final Computation collection_out;
-
- /***************************************************************************/
- /**** PROTECTED ************************************************************/
- /***************************************************************************/
- /**** Constructors *********************************************************/
- protected Partition
- (
- final Origin origin,
- final Computation lambda_function,
- final Computation collection_in,
- final Computation collection_out,
- final List<Computation> extra_params
- )
- {
- super(origin);
-
- this.lambda_function = lambda_function;
- this.collection_in = collection_in;
- this.collection_out = collection_out;
- this.extra_params = extra_params;
- }
-
- /***************************************************************************/
- /**** PUBLIC ***************************************************************/
- /***************************************************************************/
- /**** Constructors *********************************************************/
- public static Partition build
- (
- final Origin origin,
- final Computation lambda_function,
- final Computation collection_in,
- final Computation collection_out,
- final List<Computation> extra_params
- )
- throws ParsingError
- {
+ 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;
target_signature = new ArrayList<Type>();
@@ -129,14 +88,39 @@ public class Partition extends GenericInstruction
);
}
- /**** Accessors ************************************************************/
- @Override
- public void get_visited_by (final InstructionVisitor iv)
- throws Throwable
+ /***************************************************************************/
+ /**** MEMBERS **************************************************************/
+ /***************************************************************************/
+ protected final List<Computation> extra_params;
+ protected final Computation lambda_function;
+ protected final Computation collection_in;
+ protected final Computation collection_out;
+
+ /***************************************************************************/
+ /**** PROTECTED ************************************************************/
+ /***************************************************************************/
+ /**** Constructors *********************************************************/
+ protected Partition
+ (
+ final Origin origin,
+ final Computation lambda_function,
+ final Computation collection_in,
+ final Computation collection_out,
+ final List<Computation> extra_params
+ )
{
- iv.visit_partition(this);
+ super(origin);
+
+ this.lambda_function = lambda_function;
+ this.collection_in = collection_in;
+ this.collection_out = collection_out;
+ this.extra_params = extra_params;
}
+ /***************************************************************************/
+ /**** PUBLIC ***************************************************************/
+ /***************************************************************************/
+ /**** Accessors ************************************************************/
public Computation get_lambda_function ()
{
return lambda_function;
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PopElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PopElement.java
index 2f16762..c8df7f4 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PopElement.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PopElement.java
@@ -16,6 +16,8 @@ import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class PopElement extends GenericInstruction
{
public static Collection<String> get_aliases ()
@@ -55,7 +57,7 @@ public class PopElement extends GenericInstruction
public static Instruction build
(
final Origin origin,
- final String _alias,
+ final String alias,
final List<Computation> call_parameters
)
throws Throwable
@@ -98,7 +100,7 @@ public class PopElement extends GenericInstruction
/***************************************************************************/
/**** MEMBERS **************************************************************/
/***************************************************************************/
- protected final Computation storage_ptr;
+ protected final Computation storage;
protected final Computation collection;
protected final boolean is_from_left;
@@ -109,13 +111,14 @@ public class PopElement extends GenericInstruction
protected PopElement
(
final Origin origin,
+ final Computation storage,
final Computation collection,
final boolean is_from_left
)
{
super(origin);
- this.storage_ptr = storage_ptr;
+ this.storage = storage;
this.collection = collection;
this.is_from_left = is_from_left;
}
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PushElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PushElement.java
index b4c5a29..612d169 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PushElement.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/PushElement.java
@@ -12,6 +12,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class PushElement extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveAllOfElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveAllOfElement.java
index 79d5bc1..e397097 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveAllOfElement.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveAllOfElement.java
@@ -12,6 +12,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class RemoveAllOfElement extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElement.java
index 667b489..f61a4d9 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElement.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElement.java
@@ -12,6 +12,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class RemoveElement extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementAt.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementAt.java
index a7e83e1..7d6d1ee 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementAt.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementAt.java
@@ -14,6 +14,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class RemoveElementAt extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementsOf.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementsOf.java
index e37601d..ebee46d 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementsOf.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/RemoveElementsOf.java
@@ -14,6 +14,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class RemoveElementsOf extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java
index 3281c5e..f57075b 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java
@@ -12,6 +12,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class ReverseList extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableCall.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableCall.java
index f09dcdd..285ed81 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableCall.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableCall.java
@@ -20,6 +20,8 @@ import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class SequenceVariableCall extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableJump.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableJump.java
index 87365c4..ee09bef 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableJump.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SequenceVariableJump.java
@@ -20,6 +20,8 @@ import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class SequenceVariableJump extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SetValue.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SetValue.java
index 324694d..2102743 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SetValue.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SetValue.java
@@ -12,6 +12,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class SetValue extends GenericInstruction
{
public static Collection<String> get_aliases ()
@@ -34,7 +36,7 @@ public class SetValue extends GenericInstruction
public static Instruction build
(
final Origin origin,
- final String alias,
+ final String _alias,
final List<Computation> call_parameters
)
throws Throwable
@@ -42,9 +44,24 @@ public class SetValue extends GenericInstruction
final Computation reference;
final Computation value;
+ if (call_parameters.size() != 2)
+ {
+ // TODO: Error.
+ System.err.print
+ (
+ "[E] Wrong number of arguments at "
+ + origin.toString()
+ );
+
+ return null;
+ }
+
+ reference = call_parameters.get(0);
+ value = call_parameters.get(1);
+
reference.expect_non_string();
- RecurrentChecks.propagate_expected_type
+ RecurrentChecks.handle_expected_type_propagation
(
value,
reference.get_type()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java
index ca9e5d7..587826f 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java
@@ -12,6 +12,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.Computation;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class Shuffle extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Sort.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Sort.java
index df3cc1e..5723518 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Sort.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Sort.java
@@ -18,6 +18,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class Sort extends GenericInstruction
{
public static Collection<String> get_aliases ()
@@ -42,7 +44,7 @@ public class Sort extends GenericInstruction
// TODO: implement
final Computation lambda_function = null;
final Computation collection = null;
- final List<Computation> extra_params = nulls;
+ final List<Computation> extra_params = null;
final List<Type> types_in;
types_in = new ArrayList<Type>();
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SubList.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SubList.java
index 933d44d..69c498f 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SubList.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/SubList.java
@@ -14,6 +14,8 @@ import tonkadur.fate.v1.lang.meta.Instruction;
import tonkadur.fate.v1.lang.meta.InstructionVisitor;
import tonkadur.fate.v1.lang.meta.RecurrentChecks;
+import tonkadur.fate.v1.lang.instruction.GenericInstruction;
+
public class SubList extends GenericInstruction
{
public static Collection<String> get_aliases ()
diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java b/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java
index 851df56..17b3ec3 100644
--- a/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java
+++ b/src/core/src/tonkadur/fate/v1/lang/meta/Computation.java
@@ -55,7 +55,7 @@ public abstract class Computation extends Node
System.err.println
(
"[W] Computation at "
- + origin.toString
+ + origin.toString()
+ " is being used as a reference, but isn't one. The instruction will"
+ " not be able to modify the memory you thought was targeted by this"
+ " computation."
diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java
index 8b43486..521e850 100644
--- a/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java
+++ b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java
@@ -8,15 +8,6 @@ public interface InstructionVisitor
public void visit_assert (final Assert n)
throws Throwable;
- public void visit_break (final Break n)
- throws Throwable;
-
- public void visit_end (final End n)
- throws Throwable;
-
- public void visit_done (final Done n)
- throws Throwable;
-
public void visit_while (final While n)
throws Throwable;
@@ -68,18 +59,9 @@ public interface InstructionVisitor
public void visit_sequence_jump (final SequenceJump n)
throws Throwable;
- public void visit_sequence_variable_call (final SequenceVariableCall n)
- throws Throwable;
-
- public void visit_sequence_variable_jump (final SequenceVariableJump n)
- throws Throwable;
-
public void visit_local_variable (final LocalVariable n)
throws Throwable;
- public void visit_set_value (final SetValue n)
- throws Throwable;
-
public void visit_set_fields (final SetFields n)
throws Throwable;
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java
index becbe0d..049e343 100644
--- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java
@@ -109,235 +109,6 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
compiler.registers().bind(n.get_variable().get_name(), r);
}
-/*
- @Override
- public void visit_remove_elements_of
- (
- final tonkadur.fate.v1.lang.instruction.RemoveElementsOf n
- )
- throws Throwable
- {
- final ComputationCompiler collection_in_cc, collection_cc;
-
- collection_cc = new ComputationCompiler(compiler);
-
- n.get_target_collection().get_visited_by(collection_cc);
-
- if (collection_cc.has_init())
- {
- result.add(collection_cc.get_init());
- }
-
- collection_in_cc = new ComputationCompiler(compiler);
-
- n.get_source_collection().get_visited_by(collection_in_cc);
-
- if (collection_in_cc.has_init())
- {
- result.add(collection_in_cc.get_init());
- }
-
- result.add
- (
- RemoveElementsOf.generate
- (
- compiler.registers(),
- compiler.assembler(),
- collection_in_cc.get_address(),
- collection_cc.get_address(),
- (
- (tonkadur.fate.v1.lang.type.CollectionType)
- n.get_target_collection().get_type()
- ).is_set()
- )
- );
-
- collection_cc.release_registers(result);
- collection_in_cc.release_registers(result);
- }
-*/
-/*
- @Override
- public void visit_add_elements_of
- (
- final tonkadur.fate.v1.lang.instruction.AddElementsOf n
- )
- throws Throwable
- {
- final ComputationCompiler collection_in_cc, collection_cc;
-
- collection_cc = new ComputationCompiler(compiler);
-
- n.get_target_collection().get_visited_by(collection_cc);
-
- if (collection_cc.has_init())
- {
- result.add(collection_cc.get_init());
- }
-
- collection_in_cc = new ComputationCompiler(compiler);
-
- n.get_source_collection().get_visited_by(collection_in_cc);
-
- if (collection_in_cc.has_init())
- {
- result.add(collection_in_cc.get_init());
- }
-
- result.add
- (
- AddElementsOf.generate
- (
- compiler.registers(),
- compiler.assembler(),
- collection_in_cc.get_address(),
- collection_cc.get_address(),
- (
- (tonkadur.fate.v1.lang.type.CollectionType)
- n.get_target_collection().get_type()
- ).is_set()
- )
- );
-
- collection_cc.release_registers(result);
- collection_in_cc.release_registers(result);
- }
-*/
-/*
- @Override
- public void visit_add_element_at
- (
- final tonkadur.fate.v1.lang.instruction.AddElementAt n
- )
- throws Throwable
- {
- final Address collection_as_address;
- final ComputationCompiler index_compiler, element_compiler;
- final ComputationCompiler collection_compiler;
- final Register index_holder;
-
- index_holder = compiler.registers().reserve(Type.INT, result);
-
- index_compiler = new ComputationCompiler(compiler);
-
- n.get_index().get_visited_by(index_compiler);
-
- if (index_compiler.has_init())
- {
- result.add(index_compiler.get_init());
- }
-
- element_compiler = new ComputationCompiler(compiler);
-
- n.get_element().get_visited_by(element_compiler);
-
- if (element_compiler.has_init())
- {
- result.add(element_compiler.get_init());
- }
-
- collection_compiler = new ComputationCompiler(compiler);
-
- n.get_collection().get_visited_by(collection_compiler);
-
- if (collection_compiler.has_init())
- {
- result.add(collection_compiler.get_init());
- }
-
- result.add
- (
- new SetValue
- (
- index_holder.get_address(),
- new IfElseComputation
- (
- Operation.greater_than
- (
- index_compiler.get_computation(),
- new Size(collection_compiler.get_address())
- ),
- new Size(collection_compiler.get_address()),
- new IfElseComputation
- (
- Operation.less_than
- (
- index_compiler.get_computation(),
- Constant.ZERO
- ),
- Constant.ZERO,
- index_compiler.get_computation()
- )
- )
- )
- );
-
- result.add
- (
- InsertAt.generate
- (
- compiler.registers(),
- compiler.assembler(),
- index_holder.get_address(),
- element_compiler.get_computation(),
- new Size(collection_compiler.get_address()),
- collection_compiler.get_address()
- )
- );
-
- compiler.registers().release(index_holder, result);
-
- index_compiler.release_registers(result);
- element_compiler.release_registers(result);
- collection_compiler.release_registers(result);
- }
-*/
-/*
- @Override
- public void visit_add_element
- (
- final tonkadur.fate.v1.lang.instruction.AddElement n
- )
- throws Throwable
- {
- final ComputationCompiler address_compiler, element_compiler;
-
- address_compiler = new ComputationCompiler(compiler);
- element_compiler = new ComputationCompiler(compiler);
-
- n.get_collection().get_visited_by(address_compiler);
-
- if (address_compiler.has_init())
- {
- result.add(address_compiler.get_init());
- }
-
- n.get_element().get_visited_by(element_compiler);
-
- if (element_compiler.has_init())
- {
- result.add(element_compiler.get_init());
- }
-
- result.add
- (
- AddElement.generate
- (
- compiler.registers(),
- compiler.assembler(),
- element_compiler.get_computation(),
- address_compiler.get_address(),
- (
- (tonkadur.fate.v1.lang.type.CollectionType)
- n.get_collection().get_type()
- ).is_set()
- )
- );
-
- element_compiler.release_registers(result);
- address_compiler.release_registers(result);
- }
-*/
@Override
public void visit_assert (final tonkadur.fate.v1.lang.instruction.Assert a)
@@ -504,115 +275,6 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
/*
@Override
- public void visit_map
- (
- final tonkadur.fate.v1.lang.instruction.Map n
- )
- throws Throwable
- {
- 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;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- for
- (
- final tonkadur.fate.v1.lang.meta.Computation p:
- n.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);
-
- n.get_lambda_function().get_visited_by(lambda_cc);
-
- if (lambda_cc.has_init())
- {
- result.add(lambda_cc.get_init());
- }
-
- collection_cc = new ComputationCompiler(compiler);
-
- n.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
- (
- Clear.generate
- (
- compiler.registers(),
- compiler.assembler(),
- collection_cc.get_address()
- )
- );
-
- result.add
- (
- MapLambda.generate
- (
- compiler.registers(),
- compiler.assembler(),
- lambda_cc.get_computation(),
- holder.get_address(),
- collection_cc.get_address(),
- (
- (tonkadur.fate.v1.lang.type.CollectionType)
- n.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);
- }
- }
-*/
-/*
- @Override
public void visit_sort
(
final tonkadur.fate.v1.lang.instruction.Sort n
@@ -707,749 +369,6 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
}
*/
/*
- private void visit_merge_with_defaults
- (
- final tonkadur.fate.v1.lang.instruction.Merge n
- )
- throws Throwable
- {
- 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;
-
- 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);
-
- n.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);
-
- n.get_main_collection().get_visited_by(main_collection_cc);
-
- if (main_collection_cc.has_init())
- {
- result.add(main_collection_cc.get_init());
- }
-
- n.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());
- }
-
- n.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
- (
- Clear.generate
- (
- compiler.registers(),
- compiler.assembler(),
- main_collection_cc.get_address()
- )
- );
-
- secondary_collection_cc = new ComputationCompiler(compiler);
-
- n.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:
- n.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
- (
- 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)
- n.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);
- }
- }
-*/
-/*
- @Override
- public void visit_merge
- (
- final tonkadur.fate.v1.lang.instruction.Merge n
- )
- throws Throwable
- {
- // This is one dangerous operation to do in-place, so we don't.
-
- if (n.get_main_default() != null)
- {
- visit_merge_with_defaults(n);
- return;
- }
-
- 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;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- lambda_cc = new ComputationCompiler(compiler);
-
- n.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);
-
- n.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
- (
- Clear.generate
- (
- compiler.registers(),
- compiler.assembler(),
- main_collection_cc.get_address()
- )
- );
-
- secondary_collection_cc = new ComputationCompiler(compiler);
-
- n.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:
- n.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
- (
- 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)
- n.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);
- }
- }
-*/
-/*
- private void visit_indexed_merge_with_defaults
- (
- final tonkadur.fate.v1.lang.instruction.IndexedMerge n
- )
- throws Throwable
- {
- 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;
-
- 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);
-
- n.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);
-
- n.get_main_collection().get_visited_by(main_collection_cc);
-
- if (main_collection_cc.has_init())
- {
- result.add(main_collection_cc.get_init());
- }
-
- n.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());
- }
-
- n.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
- (
- Clear.generate
- (
- compiler.registers(),
- compiler.assembler(),
- main_collection_cc.get_address()
- )
- );
-
- secondary_collection_cc = new ComputationCompiler(compiler);
-
- n.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:
- n.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
- (
- 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)
- n.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);
- }
- }
-*/
-/*
- @Override
- public void visit_indexed_merge
- (
- final tonkadur.fate.v1.lang.instruction.IndexedMerge n
- )
- throws Throwable
- {
- if (n.get_main_default() != null)
- {
- visit_indexed_merge_with_defaults(n);
- return;
- }
-
- // This is one dangerous operation to do in-place, so we don't.
- 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;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- lambda_cc = new ComputationCompiler(compiler);
-
- n.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);
-
- n.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
- (
- Clear.generate
- (
- compiler.registers(),
- compiler.assembler(),
- main_collection_cc.get_address()
- )
- );
-
- secondary_collection_cc = new ComputationCompiler(compiler);
-
- n.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:
- n.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
- (
- 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)
- n.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);
- }
- }
-*/
-/*
- @Override
- public void visit_partition
- (
- final tonkadur.fate.v1.lang.instruction.Partition n
- )
- throws Throwable
- {
- final List<Computation> params;
- final List<ComputationCompiler> param_cc_list;
- final ComputationCompiler lambda_cc, collection_in_cc, collection_out_cc;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- for
- (
- final tonkadur.fate.v1.lang.meta.Computation p:
- n.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);
-
- n.get_lambda_function().get_visited_by(lambda_cc);
-
- if (lambda_cc.has_init())
- {
- result.add(lambda_cc.get_init());
- }
-
- collection_in_cc = new ComputationCompiler(compiler);
-
- n.get_collection_in().get_visited_by(collection_in_cc);
-
- if (collection_in_cc.has_init())
- {
- result.add(collection_in_cc.get_init());
- }
-
- collection_out_cc = new ComputationCompiler(compiler);
-
- n.get_collection_out().get_visited_by(collection_out_cc);
-
- if (collection_out_cc.has_init())
- {
- result.add(collection_out_cc.get_init());
- }
-
- result.add
- (
- PartitionLambda.generate
- (
- compiler.registers(),
- compiler.assembler(),
- lambda_cc.get_computation(),
- collection_in_cc.get_address(),
- collection_out_cc.get_address(),
- (
- (tonkadur.fate.v1.lang.type.CollectionType)
- n.get_collection_out().get_type()
- ).is_set(),
- params
- )
- );
-
- lambda_cc.release_registers(result);
- collection_in_cc.release_registers(result);
- collection_out_cc.release_registers(result);
-
- for (final ComputationCompiler cc: param_cc_list)
- {
- cc.release_registers(result);
- }
- }
-*/
-/*
- @Override
- public void visit_indexed_partition
- (
- final tonkadur.fate.v1.lang.instruction.IndexedPartition n
- )
- throws Throwable
- {
- final List<Computation> params;
- final List<ComputationCompiler> param_cc_list;
- final ComputationCompiler lambda_cc, collection_in_cc, collection_out_cc;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- for
- (
- final tonkadur.fate.v1.lang.meta.Computation p:
- n.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);
-
- n.get_lambda_function().get_visited_by(lambda_cc);
-
- if (lambda_cc.has_init())
- {
- result.add(lambda_cc.get_init());
- }
-
- collection_in_cc = new ComputationCompiler(compiler);
-
- n.get_collection_in().get_visited_by(collection_in_cc);
-
- if (collection_in_cc.has_init())
- {
- result.add(collection_in_cc.get_init());
- }
-
- collection_out_cc = new ComputationCompiler(compiler);
-
- n.get_collection_out().get_visited_by(collection_out_cc);
-
- if (collection_out_cc.has_init())
- {
- result.add(collection_out_cc.get_init());
- }
-
- result.add
- (
- IndexedPartitionLambda.generate
- (
- compiler.registers(),
- compiler.assembler(),
- lambda_cc.get_computation(),
- collection_in_cc.get_address(),
- collection_out_cc.get_address(),
- (
- (tonkadur.fate.v1.lang.type.CollectionType)
- n.get_collection_out().get_type()
- ).is_set(),
- params
- )
- );
-
- lambda_cc.release_registers(result);
- collection_in_cc.release_registers(result);
- collection_out_cc.release_registers(result);
-
- for (final ComputationCompiler cc: param_cc_list)
- {
- cc.release_registers(result);
- }
- }
-*/
-/*
@Override
public void visit_sublist
(
@@ -1521,385 +440,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
end_compiler.release_registers(result);
}
*/
-/*
- @Override
- public void visit_push_element
- (
- final tonkadur.fate.v1.lang.instruction.PushElement n
- )
- throws Throwable
- {
- final ComputationCompiler address_compiler, element_compiler;
- final Register collection_size, index;
-
- address_compiler = new ComputationCompiler(compiler);
- element_compiler = new ComputationCompiler(compiler);
-
- n.get_collection().get_visited_by(address_compiler);
-
- if (address_compiler.has_init())
- {
- result.add(address_compiler.get_init());
- }
-
- n.get_element().get_visited_by(element_compiler);
-
- if (element_compiler.has_init())
- {
- result.add(element_compiler.get_init());
- }
-
- collection_size = compiler.registers().reserve(Type.INT, result);
- index = compiler.registers().reserve(Type.INT, result);
-
- result.add
- (
- new SetValue
- (
- collection_size.get_address(),
- new Size(address_compiler.get_address())
- )
- );
-
- result.add
- (
- new SetValue
- (
- index.get_address(),
- (n.is_from_left() ? Constant.ZERO : collection_size.get_value())
- )
- );
-
- result.add
- (
- InsertAt.generate
- (
- compiler.registers(),
- compiler.assembler(),
- index.get_address(),
- element_compiler.get_computation(),
- collection_size.get_value(),
- address_compiler.get_address()
- )
- );
-
- address_compiler.release_registers(result);
- element_compiler.release_registers(result);
-
- compiler.registers().release(collection_size, result);
- compiler.registers().release(index, result);
- }
-*/
-/*
- @Override
- public void visit_pop_element
- (
- final tonkadur.fate.v1.lang.instruction.PopElement n
- )
- throws Throwable
- {
- final ComputationCompiler address_compiler, element_compiler;
-
- address_compiler = new ComputationCompiler(compiler);
- element_compiler = new ComputationCompiler(compiler);
-
- n.get_collection().get_visited_by(address_compiler);
-
- if (address_compiler.has_init())
- {
- result.add(address_compiler.get_init());
- }
-
- n.get_storage_pointer().get_visited_by(element_compiler);
-
- if (element_compiler.has_init())
- {
- result.add(element_compiler.get_init());
- }
-
- result.add
- (
- PopElement.generate
- (
- compiler.registers(),
- compiler.assembler(),
- address_compiler.get_address(),
- element_compiler.get_computation(),
- n.is_from_left()
- )
- );
- address_compiler.release_registers(result);
- element_compiler.release_registers(result);
- }
-*/
-/*
- @Override
- public void visit_filter
- (
- final tonkadur.fate.v1.lang.instruction.Filter n
- )
- throws Throwable
- {
- final List<Computation> params;
- final List<ComputationCompiler> param_cc_list;
- final ComputationCompiler lambda_cc, collection_cc;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- for
- (
- final tonkadur.fate.v1.lang.meta.Computation p:
- n.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);
-
- n.get_lambda_function().get_visited_by(lambda_cc);
-
- if (lambda_cc.has_init())
- {
- result.add(lambda_cc.get_init());
- }
-
- collection_cc = new ComputationCompiler(compiler);
-
- n.get_collection().get_visited_by(collection_cc);
-
- if (collection_cc.has_init())
- {
- result.add(collection_cc.get_init());
- }
-
- result.add
- (
- FilterLambda.generate
- (
- compiler.registers(),
- compiler.assembler(),
- lambda_cc.get_computation(),
- collection_cc.get_address(),
- params
- )
- );
-
- lambda_cc.release_registers(result);
- collection_cc.release_registers(result);
-
- for (final ComputationCompiler cc: param_cc_list)
- {
- cc.release_registers(result);
- }
- }
-*/
-/*
- @Override
- public void visit_indexed_filter
- (
- final tonkadur.fate.v1.lang.instruction.IndexedFilter n
- )
- throws Throwable
- {
- final List<Computation> params;
- final List<ComputationCompiler> param_cc_list;
- final ComputationCompiler lambda_cc, collection_cc;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- for
- (
- final tonkadur.fate.v1.lang.meta.Computation p:
- n.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);
-
- n.get_lambda_function().get_visited_by(lambda_cc);
-
- if (lambda_cc.has_init())
- {
- result.add(lambda_cc.get_init());
- }
-
- collection_cc = new ComputationCompiler(compiler);
-
- n.get_collection().get_visited_by(collection_cc);
-
- if (collection_cc.has_init())
- {
- result.add(collection_cc.get_init());
- }
-
- result.add
- (
- IndexedFilterLambda.generate
- (
- compiler.registers(),
- compiler.assembler(),
- lambda_cc.get_computation(),
- collection_cc.get_address(),
- params
- )
- );
-
- lambda_cc.release_registers(result);
- collection_cc.release_registers(result);
-
- for (final ComputationCompiler cc: param_cc_list)
- {
- cc.release_registers(result);
- }
- }
-*/
-/*
- @Override
- public void visit_indexed_map
- (
- final tonkadur.fate.v1.lang.instruction.IndexedMap n
- )
- throws Throwable
- {
- 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;
-
- params = new ArrayList<Computation>();
- param_cc_list = new ArrayList<ComputationCompiler>();
-
- for
- (
- final tonkadur.fate.v1.lang.meta.Computation p:
- n.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);
-
- n.get_lambda_function().get_visited_by(lambda_cc);
-
- if (lambda_cc.has_init())
- {
- result.add(lambda_cc.get_init());
- }
-
- collection_cc = new ComputationCompiler(compiler);
-
- n.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
- (
- Clear.generate
- (
- compiler.registers(),
- compiler.assembler(),
- collection_cc.get_address()
- )
- );
-
- result.add
- (
- IndexedMapLambda.generate
- (
- compiler.registers(),
- compiler.assembler(),
- lambda_cc.get_computation(),
- holder.get_address(),
- collection_cc.get_address(),
- (
- (tonkadur.fate.v1.lang.type.CollectionType)
- n.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);
- }
- }
-*/
@Override
public void visit_switch_instruction
(
@@ -2370,6 +911,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
end_of_loop_label
)
);
+
compiler.registers().unbind(n.get_parameter_name(), result);
compiler.assembler().pop_context_label("breakable");
@@ -2379,63 +921,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
/* Already released by the unbind above. */
/* compiler.registers().release(current_value, result); */
}
-/*
- @Override
- public void visit_remove_element_at
- (
- final tonkadur.fate.v1.lang.instruction.RemoveElementAt n
- )
- throws Throwable
- {
- final ComputationCompiler index_cc, collection_cc;
- final Address collection;
- final Register collection_size;
-
- index_cc = new ComputationCompiler(compiler);
- collection_cc = new ComputationCompiler(compiler);
-
- collection_size = compiler.registers().reserve(Type.INT, result);
-
- n.get_index().get_visited_by(index_cc);
- n.get_collection().get_visited_by(collection_cc);
- index_cc.generate_address();
-
- if (index_cc.has_init())
- {
- result.add(index_cc.get_init());
- }
-
- if (collection_cc.has_init())
- {
- result.add(collection_cc.get_init());
- }
-
- collection = collection_cc.get_address();
-
- result.add
- (
- new SetValue(collection_size.get_address(), new Size(collection))
- );
-
- result.add
- (
- RemoveAt.generate
- (
- compiler.registers(),
- compiler.assembler(),
- index_cc.get_address(),
- collection_size.get_value(),
- collection
- )
- );
-
- compiler.registers().release(collection_size, result);
-
- index_cc.release_registers(result);
- collection_cc.release_registers(result);
- }
-*/
@Override
public void visit_cond_instruction
(
@@ -2733,55 +1219,6 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
}
@Override
- public void visit_done
- (
- final tonkadur.fate.v1.lang.instruction.Done n
- )
- throws Throwable
- {
- result.add
- (
- compiler.assembler().merge
- (
- compiler.registers().get_finalize_context_instructions()
- )
- );
- result.add
- (
- compiler.assembler().merge
- (
- compiler.registers().get_leave_context_instructions()
- )
- );
- }
-
- @Override
- public void visit_end
- (
- final tonkadur.fate.v1.lang.instruction.End n
- )
- throws Throwable
- {
- result.add(new End());
- }
-
- @Override
- public void visit_break
- (
- final tonkadur.fate.v1.lang.instruction.Break n
- )
- throws Throwable
- {
- result.add
- (
- new SetPC
- (
- compiler.assembler().get_context_label_constant("breakable")
- )
- );
- }
-
- @Override
public void visit_text_option
(
final tonkadur.fate.v1.lang.instruction.TextOption n
@@ -3464,6 +1901,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
}
}
+/*
@Override
public void visit_sequence_variable_call
(
@@ -3536,7 +1974,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
cc.release_registers(result);
}
}
-
+*/
@Override
public void visit_sequence_jump
(
@@ -3596,7 +2034,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
)
);
}
-
+/*
@Override
public void visit_sequence_variable_jump
(
@@ -3646,7 +2084,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
cc.release_registers(result);
}
- /* Terminate current context */
+ // Terminate current context
result.addAll
(
compiler.registers().get_finalize_context_instructions()
@@ -3662,7 +2100,8 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
sequence_cc.release_registers(result);
}
-
+*/
+/*
@Override
public void visit_set_value
(
@@ -3673,7 +2112,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
/*
* Fate: (set_value address value)
* Wyrd: (set_value address value)
- */
+ *//*
final ComputationCompiler value_cc, address_cc;
value_cc = new ComputationCompiler(compiler);
@@ -3701,6 +2140,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor
value_cc.release_registers(result);
address_cc.release_registers(result);
}
+*/
@Override
public void visit_prompt_integer
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementAtCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementAtCompiler.java
new file mode 100644
index 0000000..0948d7a
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementAtCompiler.java
@@ -0,0 +1,124 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.AddElementAt;
+
+import tonkadur.wyrd.v1.lang.Register;
+
+import tonkadur.wyrd.v1.lang.computation.Address;
+import tonkadur.wyrd.v1.lang.computation.Constant;
+import tonkadur.wyrd.v1.lang.computation.IfElseComputation;
+import tonkadur.wyrd.v1.lang.computation.Size;
+import tonkadur.wyrd.v1.lang.computation.Operation;
+
+import tonkadur.wyrd.v1.lang.instruction.SetValue;
+
+import tonkadur.wyrd.v1.lang.type.Type;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.TypeCompiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class AddElementAtCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return AddElementAt.class;
+ }
+
+ public AddElementAtCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final AddElementAt source;
+ final Address collection_as_address;
+ final ComputationCompiler index_compiler, element_compiler;
+ final ComputationCompiler collection_compiler;
+ final Register index_holder;
+
+ source = (AddElementAt) instruction;
+
+ index_holder = compiler.registers().reserve(Type.INT, result);
+
+ index_compiler = new ComputationCompiler(compiler);
+
+ source.get_index().get_visited_by(index_compiler);
+
+ if (index_compiler.has_init())
+ {
+ result.add(index_compiler.get_init());
+ }
+
+ element_compiler = new ComputationCompiler(compiler);
+
+ source.get_element().get_visited_by(element_compiler);
+
+ if (element_compiler.has_init())
+ {
+ result.add(element_compiler.get_init());
+ }
+
+ collection_compiler = new ComputationCompiler(compiler);
+
+ source.get_collection().get_visited_by(collection_compiler);
+
+ if (collection_compiler.has_init())
+ {
+ result.add(collection_compiler.get_init());
+ }
+
+ result.add
+ (
+ new SetValue
+ (
+ index_holder.get_address(),
+ new IfElseComputation
+ (
+ Operation.greater_than
+ (
+ index_compiler.get_computation(),
+ new Size(collection_compiler.get_address())
+ ),
+ new Size(collection_compiler.get_address()),
+ new IfElseComputation
+ (
+ Operation.less_than
+ (
+ index_compiler.get_computation(),
+ Constant.ZERO
+ ),
+ Constant.ZERO,
+ index_compiler.get_computation()
+ )
+ )
+ )
+ );
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.InsertAt.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ index_holder.get_address(),
+ element_compiler.get_computation(),
+ new Size(collection_compiler.get_address()),
+ collection_compiler.get_address()
+ )
+ );
+
+ compiler.registers().release(index_holder, result);
+
+ index_compiler.release_registers(result);
+ element_compiler.release_registers(result);
+ collection_compiler.release_registers(result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementCompiler.java
new file mode 100644
index 0000000..b3d8a3b
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementCompiler.java
@@ -0,0 +1,69 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.AddElement;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.TypeCompiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class AddElementCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return AddElement.class;
+ }
+
+ public AddElementCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final AddElement source;
+ final ComputationCompiler address_compiler, element_compiler;
+
+ source = (AddElement) instruction;
+
+ address_compiler = new ComputationCompiler(compiler);
+ element_compiler = new ComputationCompiler(compiler);
+
+ source.get_collection().get_visited_by(address_compiler);
+
+ if (address_compiler.has_init())
+ {
+ result.add(address_compiler.get_init());
+ }
+
+ source.get_element().get_visited_by(element_compiler);
+
+ if (element_compiler.has_init())
+ {
+ result.add(element_compiler.get_init());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.AddElement.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ element_compiler.get_computation(),
+ address_compiler.get_address(),
+ (
+ (tonkadur.fate.v1.lang.type.CollectionType)
+ source.get_collection().get_type()
+ ).is_set()
+ )
+ );
+
+ element_compiler.release_registers(result);
+ address_compiler.release_registers(result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementsOfCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementsOfCompiler.java
new file mode 100644
index 0000000..5cfb0bd
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/AddElementsOfCompiler.java
@@ -0,0 +1,70 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.AddElementsOf;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.TypeCompiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class AddElementsOfCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return AddElementsOf.class;
+ }
+
+ public AddElementsOfCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final AddElementsOf source;
+ final ComputationCompiler collection_in_cc, collection_cc;
+
+ source = (AddElementsOf) instruction;
+
+ collection_cc = new ComputationCompiler(compiler);
+
+ source.get_target_collection().get_visited_by(collection_cc);
+
+ if (collection_cc.has_init())
+ {
+ result.add(collection_cc.get_init());
+ }
+
+ collection_in_cc = new ComputationCompiler(compiler);
+
+ source.get_source_collection().get_visited_by(collection_in_cc);
+
+ if (collection_in_cc.has_init())
+ {
+ result.add(collection_in_cc.get_init());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.AddElementsOf.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ collection_in_cc.get_address(),
+ collection_cc.get_address(),
+ (
+ (tonkadur.fate.v1.lang.type.CollectionType)
+ source.get_target_collection().get_type()
+ ).is_set()
+ )
+ );
+
+ collection_cc.release_registers(result);
+ collection_in_cc.release_registers(result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/BreakCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/BreakCompiler.java
new file mode 100644
index 0000000..eca0841
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/BreakCompiler.java
@@ -0,0 +1,38 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.Break;
+
+import tonkadur.wyrd.v1.lang.instruction.SetPC;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+
+public class BreakCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return Break.class;
+ }
+
+ public BreakCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ result.add
+ (
+ new SetPC
+ (
+ compiler.assembler().get_context_label_constant("breakable")
+ )
+ );
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/DoneCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/DoneCompiler.java
new file mode 100644
index 0000000..c87262d
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/DoneCompiler.java
@@ -0,0 +1,42 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.Done;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class DoneCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return Done.class;
+ }
+
+ public DoneCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ result.add
+ (
+ compiler.assembler().merge
+ (
+ compiler.registers().get_finalize_context_instructions()
+ )
+ );
+ result.add
+ (
+ compiler.assembler().merge
+ (
+ compiler.registers().get_leave_context_instructions()
+ )
+ );
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/EndCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/EndCompiler.java
new file mode 100644
index 0000000..7957fe1
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/EndCompiler.java
@@ -0,0 +1,30 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.wyrd.v1.lang.instruction.End;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+
+public class EndCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return tonkadur.fate.v1.lang.instruction.generic.End.class;
+ }
+
+ public EndCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ result.add(new End());
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/FilterCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/FilterCompiler.java
new file mode 100644
index 0000000..a7e2035
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/FilterCompiler.java
@@ -0,0 +1,106 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import tonkadur.fate.v1.lang.instruction.generic.Filter;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.lang.meta.Computation;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class FilterCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return Filter.class;
+ }
+
+ public FilterCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final Filter source;
+ final List<Computation> params;
+ final List<ComputationCompiler> param_cc_list;
+ final ComputationCompiler lambda_cc, collection_cc;
+
+ source = (Filter) 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());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.FilterLambda.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ lambda_cc.get_computation(),
+ collection_cc.get_address(),
+ params
+ )
+ );
+
+ lambda_cc.release_registers(result);
+ collection_cc.release_registers(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/IndexedFilterCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedFilterCompiler.java
new file mode 100644
index 0000000..d4e00a3
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedFilterCompiler.java
@@ -0,0 +1,106 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import tonkadur.fate.v1.lang.instruction.generic.IndexedFilter;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.lang.meta.Computation;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class IndexedFilterCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return IndexedFilter.class;
+ }
+
+ public IndexedFilterCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final IndexedFilter source;
+ final List<Computation> params;
+ final List<ComputationCompiler> param_cc_list;
+ final ComputationCompiler lambda_cc, collection_cc;
+
+ source = (IndexedFilter) 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());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.IndexedFilterLambda.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ lambda_cc.get_computation(),
+ collection_cc.get_address(),
+ params
+ )
+ );
+
+ lambda_cc.release_registers(result);
+ collection_cc.release_registers(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/IndexedMapCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMapCompiler.java
new file mode 100644
index 0000000..3704db2
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMapCompiler.java
@@ -0,0 +1,140 @@
+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
new file mode 100644
index 0000000..0f94485
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedMergeCompiler.java
@@ -0,0 +1,314 @@
+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);
+ }
+
+ private void compile_indexed_merge_with_defaults (final IndexedMerge source)
+ throws Throwable
+ {
+ 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;
+
+ 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);
+ }
+ }
+
+ private void compile_indexed_merge_without_defaults
+ (
+ final IndexedMerge source
+ )
+ throws Throwable
+ {
+ 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;
+
+ 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);
+ }
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final IndexedMerge source;
+
+ source = (IndexedMerge) instruction;
+
+ if (source.get_main_default() != null)
+ {
+ compile_indexed_merge_with_defaults(source);
+ }
+ else
+ {
+ compile_indexed_merge_without_defaults(source);
+ }
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedPartitionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedPartitionCompiler.java
new file mode 100644
index 0000000..ebe8eb2
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedPartitionCompiler.java
@@ -0,0 +1,121 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import tonkadur.fate.v1.lang.instruction.generic.IndexedPartition;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.lang.meta.Computation;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class IndexedPartitionCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return IndexedPartition.class;
+ }
+
+ public IndexedPartitionCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final IndexedPartition source;
+ final List<Computation> params;
+ final List<ComputationCompiler> param_cc_list;
+ final ComputationCompiler lambda_cc, collection_in_cc, collection_out_cc;
+
+ source = (IndexedPartition) 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_in_cc = new ComputationCompiler(compiler);
+
+ source.get_collection_in().get_visited_by(collection_in_cc);
+
+ if (collection_in_cc.has_init())
+ {
+ result.add(collection_in_cc.get_init());
+ }
+
+ collection_out_cc = new ComputationCompiler(compiler);
+
+ source.get_collection_out().get_visited_by(collection_out_cc);
+
+ if (collection_out_cc.has_init())
+ {
+ result.add(collection_out_cc.get_init());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.IndexedPartitionLambda.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ lambda_cc.get_computation(),
+ collection_in_cc.get_address(),
+ collection_out_cc.get_address(),
+ (
+ (tonkadur.fate.v1.lang.type.CollectionType)
+ source.get_collection_out().get_type()
+ ).is_set(),
+ params
+ )
+ );
+
+ lambda_cc.release_registers(result);
+ collection_in_cc.release_registers(result);
+ collection_out_cc.release_registers(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
new file mode 100644
index 0000000..9e0f883
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MapCompiler.java
@@ -0,0 +1,140 @@
+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
new file mode 100644
index 0000000..21c817e
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/MergeCompiler.java
@@ -0,0 +1,311 @@
+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);
+ }
+
+ private void compile_merge_with_defaults (final Merge source)
+ throws Throwable
+ {
+ 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;
+
+ 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);
+ }
+ }
+
+ private void compile_merge_without_defaults (final Merge source)
+ throws Throwable
+ {
+ 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;
+
+ 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);
+ }
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final Merge source;
+
+ source = (Merge) instruction;
+
+ if (source.get_main_default() != null)
+ {
+ compile_merge_with_defaults(source);
+ }
+ else
+ {
+ compile_merge_without_defaults(source);
+ }
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PartitionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PartitionCompiler.java
new file mode 100644
index 0000000..602d89f
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PartitionCompiler.java
@@ -0,0 +1,121 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import tonkadur.fate.v1.lang.instruction.generic.Partition;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.lang.meta.Computation;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class PartitionCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return Partition.class;
+ }
+
+ public PartitionCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final Partition source;
+ final List<Computation> params;
+ final List<ComputationCompiler> param_cc_list;
+ final ComputationCompiler lambda_cc, collection_in_cc, collection_out_cc;
+
+ source = (Partition) 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_in_cc = new ComputationCompiler(compiler);
+
+ source.get_collection_in().get_visited_by(collection_in_cc);
+
+ if (collection_in_cc.has_init())
+ {
+ result.add(collection_in_cc.get_init());
+ }
+
+ collection_out_cc = new ComputationCompiler(compiler);
+
+ source.get_collection_out().get_visited_by(collection_out_cc);
+
+ if (collection_out_cc.has_init())
+ {
+ result.add(collection_out_cc.get_init());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.PartitionLambda.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ lambda_cc.get_computation(),
+ collection_in_cc.get_address(),
+ collection_out_cc.get_address(),
+ (
+ (tonkadur.fate.v1.lang.type.CollectionType)
+ source.get_collection_out().get_type()
+ ).is_set(),
+ params
+ )
+ );
+
+ lambda_cc.release_registers(result);
+ collection_in_cc.release_registers(result);
+ collection_out_cc.release_registers(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/PopElementCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PopElementCompiler.java
new file mode 100644
index 0000000..dbd4bee
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PopElementCompiler.java
@@ -0,0 +1,67 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.PopElement;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.lang.meta.Computation;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class PopElementCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return PopElement.class;
+ }
+
+ public PopElementCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final PopElement source;
+ final ComputationCompiler address_compiler, element_compiler;
+
+ source = (PopElement) instruction;
+
+ address_compiler = new ComputationCompiler(compiler);
+ element_compiler = new ComputationCompiler(compiler);
+
+ source.get_collection().get_visited_by(address_compiler);
+
+ if (address_compiler.has_init())
+ {
+ result.add(address_compiler.get_init());
+ }
+
+ source.get_storage().get_visited_by(element_compiler);
+
+ if (element_compiler.has_init())
+ {
+ result.add(element_compiler.get_init());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.PopElement.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ address_compiler.get_address(),
+ element_compiler.get_address(),
+ source.is_from_left()
+ )
+ );
+
+ address_compiler.release_registers(result);
+ element_compiler.release_registers(result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PushElementCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PushElementCompiler.java
new file mode 100644
index 0000000..d91699b
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PushElementCompiler.java
@@ -0,0 +1,106 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.PushElement;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.lang.meta.Computation;
+
+import tonkadur.wyrd.v1.lang.computation.Constant;
+import tonkadur.wyrd.v1.lang.computation.Size;
+
+import tonkadur.wyrd.v1.lang.instruction.SetValue;
+
+import tonkadur.wyrd.v1.lang.Register;
+
+import tonkadur.wyrd.v1.lang.type.Type;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class PushElementCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return PushElement.class;
+ }
+
+ public PushElementCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final PushElement source;
+ final ComputationCompiler address_compiler, element_compiler;
+ final Register collection_size, index;
+
+ source = (PushElement) instruction;
+
+ address_compiler = new ComputationCompiler(compiler);
+ element_compiler = new ComputationCompiler(compiler);
+
+ source.get_collection().get_visited_by(address_compiler);
+
+ if (address_compiler.has_init())
+ {
+ result.add(address_compiler.get_init());
+ }
+
+ source.get_element().get_visited_by(element_compiler);
+
+ if (element_compiler.has_init())
+ {
+ result.add(element_compiler.get_init());
+ }
+
+ collection_size = compiler.registers().reserve(Type.INT, result);
+ index = compiler.registers().reserve(Type.INT, result);
+
+ result.add
+ (
+ new SetValue
+ (
+ collection_size.get_address(),
+ new Size(address_compiler.get_address())
+ )
+ );
+
+ result.add
+ (
+ new SetValue
+ (
+ index.get_address(),
+ (
+ source.is_from_left() ?
+ Constant.ZERO
+ : collection_size.get_value()
+ )
+ )
+ );
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.InsertAt.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ index.get_address(),
+ element_compiler.get_computation(),
+ collection_size.get_value(),
+ address_compiler.get_address()
+ )
+ );
+
+ address_compiler.release_registers(result);
+ element_compiler.release_registers(result);
+
+ compiler.registers().release(collection_size, result);
+ compiler.registers().release(index, result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveAllOfElementCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveAllOfElementCompiler.java
new file mode 100644
index 0000000..92c9e6e
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveAllOfElementCompiler.java
@@ -0,0 +1,180 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.RemoveAllOfElement;
+
+import tonkadur.wyrd.v1.lang.Register;
+
+import tonkadur.wyrd.v1.lang.meta.Computation;
+
+import tonkadur.wyrd.v1.lang.instruction.SetValue;
+
+import tonkadur.wyrd.v1.lang.computation.Address;
+import tonkadur.wyrd.v1.lang.computation.Size;
+import tonkadur.wyrd.v1.lang.computation.ValueOf;
+
+import tonkadur.wyrd.v1.lang.type.Type;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class RemoveAllOfElementCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return RemoveAllOfElement.class;
+ }
+
+ public RemoveAllOfElementCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ /*
+ * Fate:
+ * (remove_all_of element collection)
+ *
+ * Wyrd:
+ * (declare_variable <element_type> .elem)
+ * (declare_variable int .collection_size)
+ *
+ * (set .elem element)
+ * (set .collection_size (size collection))
+ *
+ * <if collection is a list:
+ * <remove_all (var .elem) (var .collection_size) collection>
+ * >
+ * <if collection is a set:
+ * (declare_variable bool .found)
+ * (declare_variable int .index)
+ *
+ * <binary_search
+ * (var .elem)
+ * (var .collection_size)
+ * collection
+ * .found
+ * .index
+ * >
+ * (ifelse (var .found)
+ * <remove_at (var .index) (var .collection_size) collection>
+ * (nop)
+ * )
+ * >
+ */
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final RemoveAllOfElement source;
+ final ComputationCompiler elem_cc, collection_cc;
+ final Register collection_size;
+ final Address elem, collection;
+
+ source = (RemoveAllOfElement) instruction;
+
+ elem_cc = new ComputationCompiler(compiler);
+ collection_cc = new ComputationCompiler(compiler);
+
+ collection_size = compiler.registers().reserve(Type.INT, result);
+
+ source.get_element().get_visited_by(elem_cc);
+ source.get_collection().get_visited_by(collection_cc);
+
+ elem_cc.generate_address();
+
+ if (elem_cc.has_init())
+ {
+ result.add(elem_cc.get_init());
+ }
+
+ if (collection_cc.has_init())
+ {
+ result.add(collection_cc.get_init());
+ }
+
+ collection = collection_cc.get_address();
+ elem = elem_cc.get_address();
+
+ result.add
+ (
+ new SetValue(collection_size.get_address(), new Size(collection))
+ );
+
+ if
+ (
+ (
+ (tonkadur.fate.v1.lang.type.CollectionType)
+ source.get_collection().get_type()
+ ).is_set()
+ )
+ {
+ final Computation value_of_elem;
+ final Register index, found;
+
+ index = compiler.registers().reserve(Type.INT, result);
+ found = compiler.registers().reserve(Type.BOOL, result);
+
+ value_of_elem = new ValueOf(elem);
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.BinarySearch.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ new ValueOf(elem),
+ collection_size.get_value(),
+ collection,
+ found.get_address(),
+ index.get_address()
+ )
+ );
+
+ elem_cc.release_registers(result);
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.If.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ found.get_value(),
+ tonkadur.wyrd.v1.compiler.util.RemoveAt.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ index.get_address(),
+ collection_size.get_value(),
+ collection
+ )
+ )
+ );
+
+ compiler.registers().release(index, result);
+ compiler.registers().release(found, result);
+ }
+ else
+ {
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.RemoveAllOf.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ new ValueOf(elem),
+ collection_size.get_value(),
+ collection
+ )
+ );
+
+ elem_cc.release_registers(result);
+ }
+
+ collection_cc.release_registers(result);
+
+ compiler.registers().release(collection_size, result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementAtCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementAtCompiler.java
new file mode 100644
index 0000000..48b0cd3
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementAtCompiler.java
@@ -0,0 +1,88 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.RemoveElementAt;
+
+import tonkadur.wyrd.v1.lang.Register;
+
+import tonkadur.wyrd.v1.lang.computation.Address;
+import tonkadur.wyrd.v1.lang.computation.Size;
+
+import tonkadur.wyrd.v1.lang.instruction.SetValue;
+
+import tonkadur.wyrd.v1.lang.type.Type;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class RemoveElementAtCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return RemoveElementAt.class;
+ }
+
+ public RemoveElementAtCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final RemoveElementAt source;
+ final ComputationCompiler index_cc, collection_cc;
+ final Address collection;
+ final Register collection_size;
+
+ source = (RemoveElementAt) instruction;
+
+ index_cc = new ComputationCompiler(compiler);
+ collection_cc = new ComputationCompiler(compiler);
+
+ collection_size = compiler.registers().reserve(Type.INT, result);
+
+ source.get_index().get_visited_by(index_cc);
+ source.get_collection().get_visited_by(collection_cc);
+
+ index_cc.generate_address();
+
+ if (index_cc.has_init())
+ {
+ result.add(index_cc.get_init());
+ }
+
+ if (collection_cc.has_init())
+ {
+ result.add(collection_cc.get_init());
+ }
+
+ collection = collection_cc.get_address();
+
+ result.add
+ (
+ new SetValue(collection_size.get_address(), new Size(collection))
+ );
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.RemoveAt.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ index_cc.get_address(),
+ collection_size.get_value(),
+ collection
+ )
+ );
+
+ compiler.registers().release(collection_size, result);
+
+ index_cc.release_registers(result);
+ collection_cc.release_registers(result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementCompiler.java
new file mode 100644
index 0000000..056a720
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementCompiler.java
@@ -0,0 +1,106 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.RemoveElement;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class RemoveElementCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return RemoveElement.class;
+ }
+
+ public RemoveElementCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ /*
+ * Fate:
+ * (remove_element element collection)
+ *
+ * Wyrd:
+ * (declare_variable <element_type> .elem)
+ * (declare_variable int .collection_size)
+ * (declare_variable boolean .found)
+ * (declare_variable int .index)
+ *
+ * (set .elem element)
+ * (set .collection_size (size collection))
+ *
+ * <if collection is a set:
+ * <BinarySearch
+ * (var .elem)
+ * (var .collection_size)
+ * collection
+ * .found
+ * .index
+ * >
+ * >
+ * <if collection is a list:
+ * <IterativeSearch
+ * (var .elem)
+ * (var .collection_size)
+ * collection
+ * .found
+ * .index
+ * >
+ * >
+ *
+ * (if (var .found)
+ * <remove_at (var index) (var .collection_size) collection>
+ * (nop)
+ * )
+ */
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final RemoveElement source;
+ final ComputationCompiler elem_cc, collection_cc;
+
+ source = (RemoveElement) instruction;
+
+ elem_cc = new ComputationCompiler(compiler);
+ collection_cc = new ComputationCompiler(compiler);
+
+ source.get_element().get_visited_by(elem_cc);
+ source.get_collection().get_visited_by(collection_cc);
+
+ elem_cc.generate_address();
+
+ if (elem_cc.has_init())
+ {
+ result.add(elem_cc.get_init());
+ }
+
+ if (collection_cc.has_init())
+ {
+ result.add(collection_cc.get_init());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.RemoveOneOf.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ elem_cc.get_computation(),
+ collection_cc.get_address(),
+ (
+ (tonkadur.fate.v1.lang.type.CollectionType)
+ source.get_collection().get_type()
+ ).is_set()
+ )
+ );
+
+ elem_cc.release_registers(result);
+ collection_cc.release_registers(result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementsOfCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementsOfCompiler.java
new file mode 100644
index 0000000..6a5fbe1
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/RemoveElementsOfCompiler.java
@@ -0,0 +1,69 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.RemoveElementsOf;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class RemoveElementsOfCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return RemoveElementsOf.class;
+ }
+
+ public RemoveElementsOfCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final RemoveElementsOf source;
+ final ComputationCompiler collection_in_cc, collection_cc;
+
+ source = (RemoveElementsOf) instruction;
+
+ collection_cc = new ComputationCompiler(compiler);
+
+ source.get_target_collection().get_visited_by(collection_cc);
+
+ if (collection_cc.has_init())
+ {
+ result.add(collection_cc.get_init());
+ }
+
+ collection_in_cc = new ComputationCompiler(compiler);
+
+ source.get_source_collection().get_visited_by(collection_in_cc);
+
+ if (collection_in_cc.has_init())
+ {
+ result.add(collection_in_cc.get_init());
+ }
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.RemoveElementsOf.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ collection_in_cc.get_address(),
+ collection_cc.get_address(),
+ (
+ (tonkadur.fate.v1.lang.type.CollectionType)
+ source.get_target_collection().get_type()
+ ).is_set()
+ )
+ );
+
+ collection_cc.release_registers(result);
+ collection_in_cc.release_registers(result);
+ }
+}
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/ReverseListCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/ReverseListCompiler.java
new file mode 100644
index 0000000..6cc2856
--- /dev/null
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/ReverseListCompiler.java
@@ -0,0 +1,61 @@
+package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic;
+
+import tonkadur.fate.v1.lang.instruction.generic.ReverseList;
+
+import tonkadur.wyrd.v1.lang.computation.Size;
+import tonkadur.wyrd.v1.lang.computation.Address;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;
+import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;
+
+import tonkadur.wyrd.v1.compiler.fate.v1.instruction.GenericInstructionCompiler;
+
+public class ReverseListCompiler extends GenericInstructionCompiler
+{
+ public static Class get_target_class ()
+ {
+ return ReverseList.class;
+ }
+
+ public ReverseListCompiler (final Compiler compiler)
+ {
+ super(compiler);
+ }
+
+ public void compile
+ (
+ final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction
+ )
+ throws Throwable
+ {
+ final ReverseList source;
+ final ComputationCompiler address_compiler;
+ final Address collection_address;
+
+ source = (ReverseList) instruction;
+
+ address_compiler = new ComputationCompiler(compiler);
+
+ source.get_collection().get_visited_by(address_compiler);
+
+ if (address_compiler.has_init())
+ {
+ result.add(address_compiler.get_init());
+ }
+
+ collection_address = address_compiler.get_address();
+
+ result.add
+ (
+ tonkadur.wyrd.v1.compiler.util.ReverseList.generate
+ (
+ compiler.registers(),
+ compiler.assembler(),
+ new Size(collection_address),
+ collection_address
+ )
+ );
+
+ address_compiler.release_registers(result);
+ }
+}