| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-08-28 23:46:05 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-08-28 23:46:05 +0200 | 
| commit | 746329272fcab689d0fa2f0594f7914c8cc497b0 (patch) | |
| tree | 1a07a5c1fe1bb8c2973274e4b5ab783e0660b88f /src/core | |
| parent | 7605eaa49bfdafa6d386440aa301c809245055ae (diff) | |
...
Diffstat (limited to 'src/core')
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); +   } +} | 


