| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/core')
61 files changed, 953 insertions, 1108 deletions
| diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/FilterComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/FilterComputation.java index b12aec8..fe368da 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/FilterComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/FilterComputation.java @@ -47,9 +47,8 @@ public class FilterComputation extends GenericComputation     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params; -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -58,7 +57,7 @@ public class FilterComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA BOOL (X Y0...YN))> <(LIST X)|(SET X)> <Y0>...<YN>)" +               + " <(LAMBDA BOOL (X))> <(LIST X)|(SET X)>)"              )           ); @@ -67,7 +66,6 @@ public class FilterComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -86,8 +84,7 @@ public class FilterComputation extends GenericComputation           Collections.singletonList           (              ((CollectionType) collection.get_type()).get_content_type() -         ), -         extra_params +         )        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); @@ -97,15 +94,13 @@ public class FilterComputation extends GenericComputation           (              origin,              lambda_function, -            collection, -            extra_params +            collection           );     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -117,15 +112,13 @@ public class FilterComputation extends GenericComputation     (        final Origin origin,        final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params +      final Computation collection     )     {        super(origin, collection.get_type());        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -142,11 +135,6 @@ public class FilterComputation extends GenericComputation        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -157,13 +145,6 @@ public class FilterComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java index 7bb5300..c0a200c 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/Fold.java @@ -63,7 +63,6 @@ public class Fold extends GenericComputation        final Computation initial_value;        final Computation collection;        final boolean is_foldl; -      final List<Computation> extra_params;        final List<Type> base_param_types;        final Type return_type; @@ -71,7 +70,7 @@ public class Fold extends GenericComputation        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 3) +      if (call_parameters.size() != 3)        {           ErrorManager.handle           ( @@ -80,8 +79,7 @@ public class Fold extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA X (X Y Z0...ZN))> <initial_value: X>" -               + " <(LIST Y)|(SET Y)> <Z0>...<ZN>)" +               + " <(LAMBDA X (X Y))> <initial_value: X> <(SET Y)|(LIST Y)>)"              )           ); @@ -91,7 +89,6 @@ public class Fold extends GenericComputation        lambda_function = call_parameters.get(0);        initial_value = call_parameters.get(1);        collection = call_parameters.get(2); -      extra_params = call_parameters.subList(3, call_parameters.size());        lambda_function.expect_non_string();        collection.expect_non_string(); @@ -117,8 +114,7 @@ public class Fold extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        return @@ -129,7 +125,6 @@ public class Fold extends GenericComputation              initial_value,              collection,              is_foldl, -            extra_params,              return_type           );     } @@ -137,7 +132,6 @@ public class Fold extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation initial_value;     protected final Computation collection; @@ -154,7 +148,6 @@ public class Fold extends GenericComputation        final Computation initial_value,        final Computation collection,        final boolean is_foldl, -      final List<Computation> extra_params,        final Type act_as     )     { @@ -164,7 +157,6 @@ public class Fold extends GenericComputation        this.initial_value = initial_value;        this.collection = collection;        this.is_foldl = is_foldl; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -191,11 +183,6 @@ public class Fold extends GenericComputation        return is_foldl;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -217,13 +204,6 @@ public class Fold extends GenericComputation        sb.append(initial_value.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedFilterComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedFilterComputation.java index 9a4ac64..4f3eb57 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedFilterComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedFilterComputation.java @@ -52,12 +52,11 @@ public class IndexedFilterComputation extends GenericComputation     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params;        final List<Type> base_param_types;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -66,8 +65,7 @@ public class IndexedFilterComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA BOOL (INT X Y0...YN))> <(LIST X)|(SET X)>" -               + " <Y0>...<YN>)" +               + " <(LAMBDA BOOL (INT X))> <(LIST X)|(SET X)>)"              )           ); @@ -76,7 +74,6 @@ public class IndexedFilterComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -98,8 +95,7 @@ public class IndexedFilterComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); @@ -109,15 +105,13 @@ public class IndexedFilterComputation extends GenericComputation           (              origin,              lambda_function, -            collection, -            extra_params +            collection           );     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -129,15 +123,13 @@ public class IndexedFilterComputation extends GenericComputation     (        final Origin origin,        final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params +      final Computation collection     )     {        super(origin, collection.get_type());        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -154,11 +146,6 @@ public class IndexedFilterComputation extends GenericComputation        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -169,13 +156,6 @@ public class IndexedFilterComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMapComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMapComputation.java index c02f3f4..3358e01 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMapComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMapComputation.java @@ -52,13 +52,12 @@ public class IndexedMapComputation extends GenericComputation     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params;        final List<Type> base_param_types;        base_param_types = new ArrayList<Type>();        base_param_types.add(Type.INT); -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -67,8 +66,7 @@ public class IndexedMapComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA X (INT Y Z0...ZN))> <(LIST Y)|(SET Y)>" -               + " <Z0>...<ZN>)" +               + " <(LAMBDA X (INT Y))> <(LIST Y)|(SET Y)>)"              )           ); @@ -77,7 +75,6 @@ public class IndexedMapComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -98,8 +95,7 @@ public class IndexedMapComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        return @@ -108,7 +104,6 @@ public class IndexedMapComputation extends GenericComputation              origin,              lambda_function,              collection, -            extra_params,              CollectionType.build              (                 origin, @@ -122,7 +117,6 @@ public class IndexedMapComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -135,7 +129,6 @@ public class IndexedMapComputation extends GenericComputation        final Origin origin,        final Computation lambda_function,        final Computation collection, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -143,7 +136,6 @@ public class IndexedMapComputation extends GenericComputation        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -160,11 +152,6 @@ public class IndexedMapComputation extends GenericComputation        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -175,13 +162,6 @@ public class IndexedMapComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMergeComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedMergeComputation.java index 23fc09f..193fc63 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 @@ -53,13 +53,12 @@ public class IndexedMergeComputation extends GenericComputation        final Computation lambda_function;        final Computation collection_a;        final Computation collection_b; -      final List<Computation> extra_params;        final List<Type> base_param_types;        final boolean to_set;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 3) +      if (call_parameters.size() != 3)        {           ErrorManager.handle           ( @@ -68,8 +67,8 @@ public class IndexedMergeComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA X (INT Y Z W0...WN))> <(LIST Y)|(SET Y)>" -               + " <(LIST Z)|(SET Z)> <W0>...<WN>)" +               + " <(LAMBDA X (INT Y Z))> <(LIST Y)|(SET Y)>" +               + " <(LIST Z)|(SET Z)>)"              )           ); @@ -79,7 +78,6 @@ public class IndexedMergeComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection_a = call_parameters.get(1);        collection_b = call_parameters.get(2); -      extra_params = call_parameters.subList(3, call_parameters.size());        collection_a.expect_non_string();        collection_b.expect_non_string(); @@ -99,8 +97,7 @@ public class IndexedMergeComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        to_set = alias.startsWith("set:"); @@ -122,7 +119,6 @@ public class IndexedMergeComputation extends GenericComputation              collection_a,              collection_b,              to_set, -            extra_params,              CollectionType.build              (                 origin, @@ -136,7 +132,6 @@ public class IndexedMergeComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection_in_a;     protected final Computation collection_in_b; @@ -153,7 +148,6 @@ public class IndexedMergeComputation extends GenericComputation        final Computation collection_in_a,        final Computation collection_in_b,        final boolean to_set, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -163,7 +157,6 @@ public class IndexedMergeComputation extends GenericComputation        this.collection_in_a = collection_in_a;        this.collection_in_b = collection_in_b;        this.to_set = to_set; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -185,11 +178,6 @@ public class IndexedMergeComputation extends GenericComputation        return collection_in_b;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     public boolean to_set ()     {        return to_set; @@ -214,15 +202,7 @@ public class IndexedMergeComputation extends GenericComputation        sb.append(" ");        sb.append(collection_in_a.toString());        sb.append(" "); -        sb.append(collection_in_b.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java index bb253a0..8da23b4 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedPartitionComputation.java @@ -53,13 +53,12 @@ public class IndexedPartitionComputation extends GenericComputation     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params;        final List<Type> base_param_types;        final Type type;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -68,8 +67,7 @@ public class IndexedPartitionComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA BOOL (INT X Y0...YN))> <(LIST X)|(SET X)>" -               + " <Y0>...<YN>)" +               + " <(LAMBDA BOOL (INT X))> <(LIST X)|(SET X)>)"              )           ); @@ -78,7 +76,6 @@ public class IndexedPartitionComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -101,8 +98,7 @@ public class IndexedPartitionComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); @@ -122,7 +118,6 @@ public class IndexedPartitionComputation extends GenericComputation              origin,              lambda_function,              collection, -            extra_params,              type           );     } @@ -130,7 +125,6 @@ public class IndexedPartitionComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -143,7 +137,6 @@ public class IndexedPartitionComputation extends GenericComputation        final Origin origin,        final Computation lambda_function,        final Computation collection, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -151,7 +144,6 @@ public class IndexedPartitionComputation extends GenericComputation        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -168,11 +160,6 @@ public class IndexedPartitionComputation extends GenericComputation        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -183,13 +170,6 @@ public class IndexedPartitionComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedSafeMergeComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedSafeMergeComputation.java index 3d1e22a..d59fb2f 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedSafeMergeComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/IndexedSafeMergeComputation.java @@ -64,13 +64,12 @@ public class IndexedSafeMergeComputation extends GenericComputation        final Computation default_a;        final Computation collection_b;        final Computation default_b; -      final List<Computation> extra_params;        final List<Type> base_param_types;        final boolean to_set;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 5) +      if (call_parameters.size() != 5)        {           ErrorManager.handle           ( @@ -79,9 +78,8 @@ public class IndexedSafeMergeComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA X (INT Y Z W0...WN))> <(LIST Y)|(SET Y)>" -               + " <default_y: Y> <(LIST Z)|(SET Z)> <default_z: Z>" -               + " <W0>...<WN>)" +               + " <(LAMBDA X (INT Y Z))> <(LIST Y)|(SET Y)>" +               + " <default_y: Y> <(LIST Z)|(SET Z)> <default_z: Z>)"              )           ); @@ -93,7 +91,6 @@ public class IndexedSafeMergeComputation extends GenericComputation        default_a = call_parameters.get(2);        collection_b = call_parameters.get(3);        default_b = call_parameters.get(4); -      extra_params = call_parameters.subList(5, call_parameters.size());        RecurrentChecks.propagate_expected_types_and_assert_is_a_collection_of        ( @@ -124,8 +121,7 @@ public class IndexedSafeMergeComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        to_set = alias.startsWith("set:"); @@ -149,7 +145,6 @@ public class IndexedSafeMergeComputation extends GenericComputation              collection_b,              default_b,              to_set, -            extra_params,              CollectionType.build              (                 origin, @@ -163,7 +158,6 @@ public class IndexedSafeMergeComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection_in_a;     protected final Computation default_a; @@ -184,7 +178,6 @@ public class IndexedSafeMergeComputation extends GenericComputation        final Computation collection_in_b,        final Computation default_b,        final boolean to_set, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -196,7 +189,6 @@ public class IndexedSafeMergeComputation extends GenericComputation        this.collection_in_b = collection_in_b;        this.default_b = default_b;        this.to_set = to_set; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -228,11 +220,6 @@ public class IndexedSafeMergeComputation extends GenericComputation        return default_b;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     public boolean to_set ()     {        return to_set; @@ -280,12 +267,6 @@ public class IndexedSafeMergeComputation extends GenericComputation           sb.append(default_b.toString());        } -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java index fe5466a..207845d 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/LambdaEvaluation.java @@ -65,10 +65,9 @@ public class LambdaEvaluation extends GenericComputation        lambda_function = call_parameters.get(0);        parameters = call_parameters.subList(1, call_parameters.size()); -      RecurrentChecks.propagate_expected_types_and_assert_is_lambda +      RecurrentChecks.propagate_expected_types_and_assert_is_lambda_params        (           lambda_function, -         new ArrayList<Type>(),           parameters        ); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/MapComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/MapComputation.java index bb3157f..7093980 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/MapComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/MapComputation.java @@ -47,9 +47,8 @@ public class MapComputation extends GenericComputation     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params; -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -58,8 +57,7 @@ public class MapComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA X (Y Z0...ZN))> <(LIST Y)|(SET Y)>" -               + " <Z0>...<ZN>)" +               + " <(LAMBDA X (Y))> <(LIST Y)|(SET Y)>)"              )           ); @@ -68,7 +66,6 @@ public class MapComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -87,8 +84,7 @@ public class MapComputation extends GenericComputation           Collections.singletonList           (              ((CollectionType) collection.get_type()).get_content_type() -         ), -         extra_params +         )        );        return @@ -97,7 +93,6 @@ public class MapComputation extends GenericComputation              origin,              lambda_function,              collection, -            extra_params,              CollectionType.build              (                 origin, @@ -110,7 +105,6 @@ public class MapComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -123,7 +117,6 @@ public class MapComputation extends GenericComputation        final Origin origin,        final Computation lambda_function,        final Computation collection, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -131,7 +124,6 @@ public class MapComputation extends GenericComputation        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -148,11 +140,6 @@ public class MapComputation extends GenericComputation        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -163,13 +150,6 @@ public class MapComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/MergeComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/MergeComputation.java index a29caa9..bf36913 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 @@ -47,13 +47,12 @@ public class MergeComputation extends GenericComputation        final Computation lambda_function;        final Computation collection_a;        final Computation collection_b; -      final List<Computation> extra_params;        final List<Type> base_param_types;        final boolean to_set;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 3) +      if (call_parameters.size() != 3)        {           ErrorManager.handle           ( @@ -62,8 +61,8 @@ public class MergeComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA X (Y Z W0...WN))> <(LIST Y)|(SET Y)>" -               + " <(LIST Z)|(SET Z)> <W0>...<WN>)" +               + " <(LAMBDA X (Y Z))> <(LIST Y)|(SET Y)>" +               + " <(LIST Z)|(SET Z)>)"              )           ); @@ -73,7 +72,6 @@ public class MergeComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection_a = call_parameters.get(1);        collection_b = call_parameters.get(2); -      extra_params = call_parameters.subList(3, call_parameters.size());        collection_a.expect_non_string();        collection_b.expect_non_string(); @@ -91,8 +89,7 @@ public class MergeComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        to_set = alias.startsWith("set:"); @@ -114,7 +111,6 @@ public class MergeComputation extends GenericComputation              collection_a,              collection_b,              to_set, -            extra_params,              CollectionType.build              (                 origin, @@ -127,7 +123,6 @@ public class MergeComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection_in_a;     protected final Computation collection_in_b; @@ -144,7 +139,6 @@ public class MergeComputation extends GenericComputation        final Computation collection_in_a,        final Computation collection_in_b,        final boolean to_set, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -154,7 +148,6 @@ public class MergeComputation extends GenericComputation        this.collection_in_a = collection_in_a;        this.collection_in_b = collection_in_b;        this.to_set = to_set; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -176,11 +169,6 @@ public class MergeComputation extends GenericComputation        return collection_in_b;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     public boolean to_set ()     {        return to_set; @@ -205,15 +193,7 @@ public class MergeComputation extends GenericComputation        sb.append(" ");        sb.append(collection_in_a.toString());        sb.append(" "); -        sb.append(collection_in_b.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/PartialLambdaEvaluation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/PartialLambdaEvaluation.java new file mode 100644 index 0000000..4f15340 --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/PartialLambdaEvaluation.java @@ -0,0 +1,166 @@ +package tonkadur.fate.v1.lang.computation.generic; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; + +import tonkadur.functional.Merge; + +import tonkadur.error.ErrorManager; + +import tonkadur.fate.v1.error.WrongNumberOfParametersException; + +import tonkadur.fate.v1.lang.type.Type; +import tonkadur.fate.v1.lang.type.LambdaType; + +import tonkadur.fate.v1.lang.meta.ComputationVisitor; +import tonkadur.fate.v1.lang.meta.Computation; +import tonkadur.fate.v1.lang.meta.RecurrentChecks; + +import tonkadur.fate.v1.lang.computation.GenericComputation; + +public class PartialLambdaEvaluation extends GenericComputation +{ +   public static Collection<String> get_aliases () +   { +      final Collection<String> aliases; + +      aliases = new ArrayList<String>(); + +      aliases.add("partial"); +      aliases.add("partial_eval"); +      aliases.add("partialeval"); +      aliases.add("partialEval"); +      aliases.add("partial_evaluate"); +      aliases.add("partialevaluate"); +      aliases.add("partialEvaluate"); + +      return aliases; +   } + +   /**** Constructors *********************************************************/ +   public static Computation build +   ( +      final Origin origin, +      final String alias, +      final List<Computation> call_parameters +   ) +   throws Throwable +   { +      final Computation lambda_function; +      final List<Computation> parameters; +      final LambdaType initial_type; +      final List<Type> initial_signature; +      final List<Type> remaining_signature; + +      if (call_parameters.size() < 1) +      { +         ErrorManager.handle +         ( +            new WrongNumberOfParametersException +            ( +               origin, +               "(" + alias + " <(LAMBDA X (Y0...YN))> <Y0>...<YM, with M =< N>)" +            ) +         ); + +         return null; +      } + +      lambda_function = call_parameters.get(0); +      parameters = call_parameters.subList(1, call_parameters.size()); + +      RecurrentChecks.propagate_partial_expected_types_and_assert_is_lambda +      ( +         lambda_function, +         new ArrayList<Type>(), +         parameters +      ); + +      initial_type = (LambdaType) lambda_function.get_type(); +      initial_signature = initial_type.get_signature(); +      remaining_signature = +         initial_signature.subList +         ( +            (call_parameters.size() - 1), +            initial_signature.size() +         ); + +      return +         new PartialLambdaEvaluation +         ( +            origin, +            lambda_function, +            parameters, +            new LambdaType +            ( +               origin, +               initial_type.get_return_type(), +               ("(Partial from " + initial_type.get_name() + ")"), +               remaining_signature +            ) +         ); +   } + +   /***************************************************************************/ +   /**** MEMBERS **************************************************************/ +   /***************************************************************************/ +   protected final Computation lambda_function; +   protected final List<Computation> parameters; + +   /***************************************************************************/ +   /**** PROTECTED ************************************************************/ +   /***************************************************************************/ +   /**** Constructors *********************************************************/ +   protected PartialLambdaEvaluation +   ( +      final Origin origin, +      final Computation lambda_function, +      final List<Computation> parameters, +      final Type act_as +   ) +   { +      super(origin, act_as); + +      this.lambda_function = lambda_function; +      this.parameters = parameters; +   } + +   /***************************************************************************/ +   /**** PUBLIC ***************************************************************/ +   /***************************************************************************/ + +   /**** Accessors ************************************************************/ +   public Computation get_lambda_function () +   { +      return lambda_function; +   } + +   public List<Computation> get_parameters () +   { +      return parameters; +   } + +   /**** Misc. ****************************************************************/ +   @Override +   public String toString () +   { +      final StringBuilder sb = new StringBuilder(); + +      sb.append("(PartialLambdaEvaluation ("); +      sb.append(lambda_function.toString()); + +      for (final Computation param: parameters) +      { +         sb.append(" "); +         sb.append(param.toString()); +      } + +      sb.append("))"); + +      return sb.toString(); +   } +} diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/PartitionComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/PartitionComputation.java index b4125c8..3a0f93c 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/PartitionComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/PartitionComputation.java @@ -47,10 +47,9 @@ public class PartitionComputation extends GenericComputation     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params;        final Type type; -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -59,8 +58,7 @@ public class PartitionComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA BOOL (X Y0...YN))> <(LIST X)|(SET X)>" -               + " <Y0>...<YN>)" +               + " <(LAMBDA BOOL (X)> <(LIST X)|(SET X)>)"              )           ); @@ -69,7 +67,6 @@ public class PartitionComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -88,8 +85,7 @@ public class PartitionComputation extends GenericComputation           Collections.singletonList           (              ((CollectionType) collection.get_type()).get_content_type() -         ), -         extra_params +         )        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); @@ -109,7 +105,6 @@ public class PartitionComputation extends GenericComputation              origin,              lambda_function,              collection, -            extra_params,              type           );     } @@ -117,7 +112,6 @@ public class PartitionComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -130,7 +124,6 @@ public class PartitionComputation extends GenericComputation        final Origin origin,        final Computation lambda_function,        final Computation collection, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -138,7 +131,6 @@ public class PartitionComputation extends GenericComputation        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -155,11 +147,6 @@ public class PartitionComputation extends GenericComputation        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -170,13 +157,6 @@ public class PartitionComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/SafeMergeComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/SafeMergeComputation.java index 308bba7..f879f15 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/SafeMergeComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/SafeMergeComputation.java @@ -17,7 +17,6 @@ import tonkadur.fate.v1.lang.type.CollectionType;  import tonkadur.fate.v1.lang.meta.ComputationVisitor;  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.computation.GenericComputation; @@ -53,13 +52,12 @@ public class SafeMergeComputation extends GenericComputation        final Computation default_a;        final Computation collection_b;        final Computation default_b; -      final List<Computation> extra_params;        final List<Type> base_param_types;        final boolean to_set;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 5) +      if (call_parameters.size() != 5)        {           ErrorManager.handle           ( @@ -68,9 +66,8 @@ public class SafeMergeComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA X (Y Z W0...WN))> <(LIST Y)|(SET Y)>" -               + " <default_y: Y> <(LIST Z)|(SET Z)> <default_z: Z>" -               + " <W0>...<WN>)" +               + " <(LAMBDA X (Y Z))> <(LIST Y)|(SET Y)>" +               + " <default_y: Y> <(LIST Z)|(SET Z)> <default_z: Z>)"              )           ); @@ -82,7 +79,6 @@ public class SafeMergeComputation extends GenericComputation        default_a = call_parameters.get(2);        collection_b = call_parameters.get(3);        default_b = call_parameters.get(4); -      extra_params = call_parameters.subList(5, call_parameters.size());        RecurrentChecks.propagate_expected_types_and_assert_is_a_collection_of        ( @@ -109,8 +105,7 @@ public class SafeMergeComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        to_set = alias.startsWith("set:"); @@ -134,7 +129,6 @@ public class SafeMergeComputation extends GenericComputation              collection_b,              default_b,              to_set, -            extra_params,              CollectionType.build              (                 origin, @@ -147,7 +141,6 @@ public class SafeMergeComputation extends GenericComputation     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection_in_a;     protected final Computation default_a; @@ -168,7 +161,6 @@ public class SafeMergeComputation extends GenericComputation        final Computation collection_in_b,        final Computation default_b,        final boolean to_set, -      final List<Computation> extra_params,        final Type output_type     )     { @@ -180,7 +172,6 @@ public class SafeMergeComputation extends GenericComputation        this.collection_in_b = collection_in_b;        this.default_b = default_b;        this.to_set = to_set; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -212,11 +203,6 @@ public class SafeMergeComputation extends GenericComputation        return default_b;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     public boolean to_set ()     {        return to_set; @@ -240,22 +226,15 @@ public class SafeMergeComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection_in_a.toString()); -      sb.append(" "); +      sb.append(" ");        sb.append(default_a.toString());        sb.append(" ");        sb.append(collection_in_b.toString()); -      sb.append(" "); +      sb.append(" ");        sb.append(default_b.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/SortComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/SortComputation.java index 1caa529..b1f9280 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/SortComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/SortComputation.java @@ -44,13 +44,12 @@ public class SortComputation extends GenericComputation     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params;        final List<Type> base_param_types;        base_param_types = new ArrayList<Type>();        base_param_types.add(Type.INT); -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -59,8 +58,7 @@ public class SortComputation extends GenericComputation                 origin,                 "("                 + alias -               + " <(LAMBDA INT (X Y0...YN))> <(LIST X)|(SET X)>" -               + " <Y0>...<YN>)" +               + " <(LAMBDA INT (X))> <(LIST X)|(SET X)>)"              )           ); @@ -69,7 +67,6 @@ public class SortComputation extends GenericComputation        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -85,20 +82,17 @@ public class SortComputation extends GenericComputation        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.INT); -      return -         new SortComputation(origin, lambda_function, collection, extra_params); +      return new SortComputation(origin, lambda_function, collection);     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -110,15 +104,13 @@ public class SortComputation extends GenericComputation     (        final Origin origin,        final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params +      final Computation collection     )     {        super(origin, collection.get_type());        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -135,11 +127,6 @@ public class SortComputation extends GenericComputation        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -150,13 +137,6 @@ public class SortComputation extends GenericComputation        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/generic/SubListComputation.java b/src/core/src/tonkadur/fate/v1/lang/computation/generic/SubListComputation.java index 39225e9..6d7f29f 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/generic/SubListComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/generic/SubListComputation.java @@ -60,7 +60,7 @@ public class SubListComputation extends GenericComputation                 "("                 + alias                 + " <start_at_index: INT> <end_before_index: INT>" -               + " <(LIST X)|(SET X)> <Y0>...<YN>)" +               + " <(LIST X)|(SET X)>)"              )           ); 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 5a15f17..fa0080a 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 @@ -50,9 +50,8 @@ public class Filter extends GenericInstruction     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params; -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -61,8 +60,7 @@ public class Filter extends GenericInstruction                 origin,                 "("                 + alias -               + "! <(LAMBDA BOOL (X Y0...YN))> <(LIST X)|(SET X) REFERENCE>" -               + " <Y0>...<YN>)" +               + "! <(LAMBDA BOOL (X))> <(LIST X)|(SET X) REFERENCE>)"              )           ); @@ -71,7 +69,6 @@ public class Filter extends GenericInstruction        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -90,21 +87,19 @@ public class Filter extends GenericInstruction           Collections.singletonList           (              ((CollectionType) collection.get_type()).get_content_type() -         ), -         extra_params +         )        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL);        collection.use_as_reference(); -      return new Filter(origin, lambda_function, collection, extra_params); +      return new Filter(origin, lambda_function, collection);     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -116,15 +111,13 @@ public class Filter extends GenericInstruction     (        final Origin origin,        final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params +      final Computation collection     )     {        super(origin);        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -141,11 +134,6 @@ public class Filter extends GenericInstruction        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -156,13 +144,6 @@ public class Filter extends GenericInstruction        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedFilter.java index 4a99186..4782bb3 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 @@ -57,12 +57,11 @@ public class IndexedFilter extends GenericInstruction     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params;        final List<Type> base_param_types;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -71,9 +70,8 @@ public class IndexedFilter extends GenericInstruction                 origin,                 "("                 + alias -               + "! <(LAMBDA BOOL (INT X Y0...YN))>" -               + " <(LIST X)|(SET X) REFERENCE>" -               + " <Y0>...<YN>)" +               + "! <(LAMBDA BOOL (INT X))>" +               + " <(LIST X)|(SET X) REFERENCE>)"              )           ); @@ -82,7 +80,6 @@ public class IndexedFilter extends GenericInstruction        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -104,8 +101,7 @@ public class IndexedFilter extends GenericInstruction        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); @@ -117,15 +113,13 @@ public class IndexedFilter extends GenericInstruction           (              origin,              lambda_function, -            collection, -            extra_params +            collection           );     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -137,15 +131,13 @@ public class IndexedFilter extends GenericInstruction     (        final Origin origin,        final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params +      final Computation collection     )     {        super(origin);        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -162,11 +154,6 @@ public class IndexedFilter extends GenericInstruction        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -177,13 +164,6 @@ public class IndexedFilter extends GenericInstruction        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/IndexedPartition.java index 7e8e9c9..5e35e15 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 @@ -57,12 +57,11 @@ public class IndexedPartition extends GenericInstruction        final Computation lambda_function;        final Computation collection_in;        final Computation collection_out; -      final List<Computation> extra_params;        final List<Type> base_param_types;        base_param_types = new ArrayList<Type>(); -      if (call_parameters.size() < 3) +      if (call_parameters.size() != 3)        {           ErrorManager.handle           ( @@ -71,10 +70,9 @@ public class IndexedPartition extends GenericInstruction                 origin,                 "("                 + alias -               + "! <(LAMBDA BOOL (INT X Y0...YN))>" +               + "! <(LAMBDA BOOL (INT X))>"                 + " <if_true: (LIST X)|(SET X) REFERENCE>" -               + " <if_false: (LIST X)|(SET X) REFERENCE>" -               + " <Y0>...<YN>)" +               + " <if_false: (LIST X)|(SET X) REFERENCE>)"              )           ); @@ -84,7 +82,6 @@ public class IndexedPartition extends GenericInstruction        lambda_function = call_parameters.get(0);        collection_in = call_parameters.get(1);        collection_out = call_parameters.get(2); -      extra_params = call_parameters.subList(3, call_parameters.size());        if (alias.startsWith("set:"))        { @@ -112,8 +109,7 @@ public class IndexedPartition extends GenericInstruction        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); @@ -126,15 +122,13 @@ public class IndexedPartition extends GenericInstruction              origin,              lambda_function,              collection_in, -            collection_out, -            extra_params +            collection_out           );     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection_in;     protected final Computation collection_out; @@ -148,8 +142,7 @@ public class IndexedPartition extends GenericInstruction        final Origin origin,        final Computation lambda_function,        final Computation collection_in, -      final Computation collection_out, -      final List<Computation> extra_params +      final Computation collection_out     )     {        super(origin); @@ -157,7 +150,6 @@ public class IndexedPartition extends GenericInstruction        this.lambda_function = lambda_function;        this.collection_in = collection_in;        this.collection_out = collection_out; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -179,11 +171,6 @@ public class IndexedPartition extends GenericInstruction        return collection_out;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -196,13 +183,6 @@ public class IndexedPartition extends GenericInstruction        sb.append(collection_in.toString());        sb.append(" ");        sb.append(collection_out.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Partition.java index fa6b3f7..7807db5 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 @@ -51,9 +51,8 @@ public class Partition extends GenericInstruction        final Computation lambda_function;        final Computation collection_in;        final Computation collection_out; -      final List<Computation> extra_params; -      if (call_parameters.size() < 3) +      if (call_parameters.size() != 3)        {           ErrorManager.handle           ( @@ -62,10 +61,9 @@ public class Partition extends GenericInstruction                 origin,                 "("                 + alias -               + "! <(LAMBDA BOOL (X Y0...YN))>" +               + "! <(LAMBDA BOOL (X))>"                 + " <if_true: (LIST X)|(SET X) REFERENCE>" -               + " <if_false: (LIST X)|(SET X) REFERENCE>" -               + " <Y0>...<YN>)" +               + " <if_false: (LIST X)|(SET X) REFERENCE>)"              )           ); @@ -75,7 +73,6 @@ public class Partition extends GenericInstruction        lambda_function = call_parameters.get(0);        collection_in = call_parameters.get(1);        collection_out = call_parameters.get(2); -      extra_params = call_parameters.subList(3, call_parameters.size());        if (alias.startsWith("set:"))        { @@ -100,8 +97,7 @@ public class Partition extends GenericInstruction           Collections.singletonList           (              ((CollectionType) collection_in.get_type()).get_content_type() -         ), -         extra_params +         )        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.BOOL); @@ -114,15 +110,13 @@ public class Partition extends GenericInstruction              origin,              lambda_function,              collection_in, -            collection_out, -            extra_params +            collection_out           );     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection_in;     protected final Computation collection_out; @@ -136,8 +130,7 @@ public class Partition extends GenericInstruction        final Origin origin,        final Computation lambda_function,        final Computation collection_in, -      final Computation collection_out, -      final List<Computation> extra_params +      final Computation collection_out     )     {        super(origin); @@ -145,7 +138,6 @@ public class Partition extends GenericInstruction        this.lambda_function = lambda_function;        this.collection_in = collection_in;        this.collection_out = collection_out; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -167,11 +159,6 @@ public class Partition extends GenericInstruction        return collection_out;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -184,13 +171,6 @@ public class Partition extends GenericInstruction        sb.append(collection_in.toString());        sb.append(" ");        sb.append(collection_out.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Sort.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Sort.java index 72d0ef6..ac2c02b 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 @@ -47,13 +47,12 @@ public class Sort extends GenericInstruction     {        final Computation lambda_function;        final Computation collection; -      final List<Computation> extra_params;        final List<Type> base_param_types;        base_param_types = new ArrayList<Type>();        base_param_types.add(Type.INT); -      if (call_parameters.size() < 2) +      if (call_parameters.size() != 2)        {           ErrorManager.handle           ( @@ -62,8 +61,7 @@ public class Sort extends GenericInstruction                 origin,                 "("                 + alias -               + "! <(LAMBDA INT (X Y0...YN))> <(LIST X)|(SET X) REFERENCE>" -               + " <Y0>...<YN>)" +               + "! <(LAMBDA INT (X))> <(LIST X)|(SET X) REFERENCE>)"              )           ); @@ -72,7 +70,6 @@ public class Sort extends GenericInstruction        lambda_function = call_parameters.get(0);        collection = call_parameters.get(1); -      extra_params = call_parameters.subList(2, call_parameters.size());        collection.expect_non_string(); @@ -88,21 +85,19 @@ public class Sort extends GenericInstruction        RecurrentChecks.propagate_expected_types_and_assert_is_lambda        (           lambda_function, -         base_param_types, -         extra_params +         base_param_types        );        RecurrentChecks.assert_return_type_is(lambda_function, Type.INT);        collection.use_as_reference(); -      return new Sort(origin, lambda_function, collection, extra_params); +      return new Sort(origin, lambda_function, collection);     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final List<Computation> extra_params;     protected final Computation lambda_function;     protected final Computation collection; @@ -114,15 +109,13 @@ public class Sort extends GenericInstruction     (        final Origin origin,        final Computation lambda_function, -      final Computation collection, -      final List<Computation> extra_params +      final Computation collection     )     {        super(origin);        this.lambda_function = lambda_function;        this.collection = collection; -      this.extra_params = extra_params;     }     /***************************************************************************/ @@ -139,11 +132,6 @@ public class Sort extends GenericInstruction        return collection;     } -   public List<Computation> get_extra_parameters () -   { -      return extra_params; -   } -     /**** Misc. ****************************************************************/     @Override     public String toString () @@ -154,13 +142,6 @@ public class Sort extends GenericInstruction        sb.append(lambda_function.toString());        sb.append(" ");        sb.append(collection.toString()); - -      for (final Computation c: extra_params) -      { -         sb.append(" "); -         sb.append(c.toString()); -      } -        sb.append(")");        return sb.toString(); diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/UserInstruction.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/UserInstruction.java index 9c32c20..3d8140d 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/UserInstruction.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/UserInstruction.java @@ -72,13 +72,13 @@ public class UserInstruction extends GenericInstruction           call_parameters        ); -      return new UserInstruction(origin, definition, call_parameters); +      return new UserInstruction(origin, alias, call_parameters);     }     /***************************************************************************/     /**** MEMBERS **************************************************************/     /***************************************************************************/ -   protected final Sequence definition; +   protected final String instruction_name;     protected final List<Computation> parameters;     /***************************************************************************/ @@ -88,24 +88,23 @@ public class UserInstruction extends GenericInstruction     protected UserInstruction     (        final Origin origin, -      final Sequence definition, +      final String instruction_name,        final List<Computation> parameters     )     {        super(origin); -      this.definition = definition; +      this.instruction_name = instruction_name;        this.parameters = parameters;     }     /***************************************************************************/     /**** PUBLIC ***************************************************************/     /***************************************************************************/ -     /**** Accessors ************************************************************/ -   public Sequence get_definition () +   public String get_instruction_name ()     { -      return definition; +      return instruction_name;     }     public List<Computation> get_parameters () @@ -120,9 +119,9 @@ public class UserInstruction extends GenericInstruction        final StringBuilder sb = new StringBuilder();        sb.append("("); -      sb.append(definition.get_name()); +      sb.append(get_instruction_name()); -      for (final Computation param: parameters) +      for (final Computation param: get_parameters())        {           sb.append(" ");           sb.append(param.toString()); diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/RecurrentChecks.java b/src/core/src/tonkadur/fate/v1/lang/meta/RecurrentChecks.java index 4c701ab..038e687 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/RecurrentChecks.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/RecurrentChecks.java @@ -442,7 +442,7 @@ public class RecurrentChecks        }     } -   public static void propagate_expected_types_and_assert_is_lambda +   public static void propagate_partial_expected_types_and_assert_is_lambda     (        final Computation lambda,        final List<Type> filled_types, @@ -461,7 +461,7 @@ public class RecurrentChecks        extra_params_size = extra_params.size(); -      if ((filled_types.size() + extra_params_size) != lambda_signature.size()) +      if ((filled_types.size() + extra_params_size) > lambda_signature.size())        {           ErrorManager.handle           ( @@ -491,6 +491,84 @@ public class RecurrentChecks        }     } +   public static void propagate_expected_types_and_assert_is_lambda_params +   ( +      final Computation lambda, +      final List<Computation> params +   ) +   throws ParsingError +   { +      final List<Type> lambda_signature; +      final int params_size; + +      lambda.expect_non_string(); + +      assert_is_a_lambda_function(lambda); + +      lambda_signature = ((LambdaType) lambda.get_type()).get_signature(); + +      params_size = params.size(); + +      if (params_size != lambda_signature.size()) +      { +         ErrorManager.handle +         ( +            new InvalidArityException +            ( +               lambda.get_origin(), +               params_size, +               lambda_signature.size(), +               lambda_signature.size() +            ) +         ); +      } + +      for (int i = 0; i < params_size; ++i) +      { +         handle_expected_type_propagation +         ( +            params.get(i), +            lambda_signature.get(i) +         ); + +         assert_can_be_used_as +         ( +            params.get(i), +            lambda_signature.get(i) +         ); +      } +   } + +   public static void propagate_expected_types_and_assert_is_lambda +   ( +      final Computation lambda, +      final List<Type> filled_types +   ) +   throws ParsingError +   { +      final List<Type> lambda_signature; + +      lambda.expect_non_string(); + +      assert_is_a_lambda_function(lambda); + +      lambda_signature = ((LambdaType) lambda.get_type()).get_signature(); + +      if (filled_types.size() != lambda_signature.size()) +      { +         ErrorManager.handle +         ( +            new InvalidArityException +            ( +               lambda.get_origin(), +               filled_types.size(), +               lambda_signature.size(), +               lambda_signature.size() +            ) +         ); +      } +   } +     public static void assert_types_matches_signature     (        final Origin o, diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index a06487b..c8eba75 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -48,9 +48,11 @@ options     import tonkadur.fate.v1.lang.computation.*;     import tonkadur.fate.v1.lang.computation.generic.ExtraComputation; +   import tonkadur.fate.v1.lang.computation.generic.UserComputation;     import tonkadur.fate.v1.lang.instruction.generic.SetValue;     import tonkadur.fate.v1.lang.instruction.generic.ExtraInstruction; +   import tonkadur.fate.v1.lang.instruction.generic.UserInstruction;  }  @members @@ -562,9 +564,10 @@ first_level_instruction              ($variable_list.result).get_entries()           ); -      //PARSER.get_world().user_defined_instructions().add(new_sequence);        PARSER.restore_local_variables_stack(previous_local_variables_stack); +      UserInstruction.register(new_sequence); +        RecurrentChecks.assert_has_user_content_prefix        (           start_origin, @@ -607,13 +610,9 @@ first_level_instruction                 ($variable_list.result).get_entries(),                 ($computation.result)              ); -         /* -         PARSER.get_world().user_defined_computations().add -         ( -            ($identifier.result), -            new_sequence -         ); -         */ + +         UserComputation.register(($identifier.result), computation); +           RecurrentChecks.assert_has_user_content_prefix           (              start_origin, diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java index 7fee7f6..6e91184 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java @@ -42,6 +42,9 @@ public class Compiler  //      compiler.compile_types(fate_world);        compiler.compile_variables(fate_world); +      compiler.compile_user_instructions(fate_world); +      compiler.compile_user_computations(fate_world); +        compiler.compile_sequences(fate_world);        compiler.compile_main_sequence(fate_world); @@ -141,8 +144,43 @@ public class Compiler              fate_world.sequences().get_all()        )        { -         SequenceCompiler.compile(this, sequence); +         SequenceCompiler.compile(this, sequence, ""); +      } +   } + +   protected void compile_user_instructions +   ( +      final tonkadur.fate.v1.lang.World fate_world +   ) +   throws Throwable +   { +      for +      ( +         final tonkadur.fate.v1.lang.Sequence sequence: +            tonkadur.fate.v1.lang.instruction.generic.UserInstruction.get_all_definitions() +      ) +      { +         SequenceCompiler.compile(this, sequence, "User Instruction "); +      } +   } + +   protected void compile_user_computations +   ( +      final tonkadur.fate.v1.lang.World fate_world +   ) +   throws Throwable +   { +      // TODO: implement. +      /* +      for +      ( +         final tonkadur.fate.v1.lang.Sequence sequence: +            tonkadur.fate.v1.lang.computation.generic.UserComputation.get_all_definitions() +      ) +      { +         SequenceCompiler.compile(this, sequence, "User Instruction ");        } +      */     }     protected void compile_main_sequence diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java index 721f6d8..ac905d0 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java @@ -728,16 +728,23 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor     throws Throwable     {        final String out_label, in_label; +      final List<Register> side_channel_parameters;        final List<Register> parameters;        final Register result_holder;        final ComputationCompiler expr_compiler;        final Type result_type;        final String context_name; +      final Register lambda_data_register; +      final Address lambda_function_line_address; +      int i;        out_label = compiler.assembler().generate_label("<lambda_expr#out>");        in_label = compiler.assembler().generate_label("<lambda_expr#in>");        parameters = new ArrayList<Register>(); +      side_channel_parameters = new ArrayList<Register>(); + +      lambda_data_register = reserve(DictType.WILD);        context_name = compiler.registers().create_stackable_context_name(); @@ -777,7 +784,18 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor              init_instructions           ); -      parameters.add(result_holder); +      side_channel_parameters.add(result_holder); +      side_channel_parameters.add(lambda_data_register); + +      // TODO: read two params: +      // - result holder +      // - wild dict, where the real params are. +      init_instructions.addAll +      ( +         compiler.registers().read_parameters(side_channel_parameters) +      ); + +      i = n.get_parameters().size() - 1;        for (final tonkadur.fate.v1.lang.Variable param: n.get_parameters())        { @@ -794,12 +812,29 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor           parameters.add(r);           compiler.registers().bind(param.get_name(), r); -      } +         init_instructions.add +         ( +            new SetValue +            ( +               r.get_address(), +               new ValueOf +               ( +                  new RelativeAddress +                  ( +                     new Address +                     ( +                        lambda_data_register.get_value(), +                        DictType.WILD +                     ), +                     Constant.string_value(Integer.toString(i)), +                     r.get_value().get_type() +                  ) +               ) +            ) +         ); -      init_instructions.addAll -      ( -         compiler.registers().read_parameters(parameters) -      ); +         --i; +      }        expr_compiler = new ComputationCompiler(compiler); @@ -846,7 +881,30 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor        compiler.registers().pop_context(); -      result_as_computation = compiler.assembler().get_label_constant(in_label); +      lambda_function_line_address = +         new RelativeAddress +         ( +            lambda_data_register.get_address(), +            Constant.string_value("l"), +            Type.INT +         ); + +      init_instructions.add +      ( +         new Initialize(lambda_function_line_address, Type.INT) +      ); + +      init_instructions.add +      ( +         new SetValue +         ( +            lambda_function_line_address, +            compiler.assembler().get_label_constant(in_label) +         ) +      ); + +      result_as_computation = lambda_data_register.get_value(); +      result_as_address = lambda_data_register.get_address();     }     @Override diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java index 6f3a83d..c10ae2a 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java @@ -20,7 +20,8 @@ public class SequenceCompiler     public static void compile     (        final Compiler compiler, -      final tonkadur.fate.v1.lang.Sequence fate_sequence +      final tonkadur.fate.v1.lang.Sequence fate_sequence, +      final String name_prefix     )     throws Throwable     { @@ -29,25 +30,27 @@ public class SequenceCompiler        final String end_of_sequence;        final List<Register> to_be_cleaned;        final InstructionCompiler ic; +      final String name;        init_instructions = new ArrayList<Instruction>();        parameters = new ArrayList<Register>();        to_be_cleaned = new ArrayList<Register>();        ic = new InstructionCompiler(compiler); +      name = (name_prefix + fate_sequence.get_name());        end_of_sequence = compiler.assembler().generate_label("<sequence#end>");        compiler.world().add_sequence_label        ( -         fate_sequence.get_name(), +         name,           (compiler.world().get_current_line() + 1)        ); -      compiler.assembler().add_fixed_name_label(fate_sequence.get_name()); +      compiler.assembler().add_fixed_name_label(name);        compiler.registers().create_stackable_context        ( -         fate_sequence.get_name(), +         name,           init_instructions        ); @@ -56,24 +59,21 @@ public class SequenceCompiler           new SetPC(compiler.assembler().get_label_constant(end_of_sequence))        ); -      System.out.println("[D] Defining Context " + fate_sequence.get_name()); +      System.out.println("[D] Defining Context " + name);        init_instructions.add        (           compiler.assembler().mark           ( -            fate_sequence.get_name(), +            name,              compiler.assembler().merge              ( -               compiler.registers().get_initialize_context_instructions -               ( -                  fate_sequence.get_name() -               ) +               compiler.registers().get_initialize_context_instructions(name)              )           )        ); -      compiler.registers().push_context(fate_sequence.get_name()); +      compiler.registers().push_context(name);        for        ( @@ -114,7 +114,6 @@ public class SequenceCompiler        }        */ -        init_instructions.addAll        (           compiler.registers().get_finalize_context_instructions() @@ -131,7 +130,6 @@ public class SequenceCompiler           compiler.registers().get_leave_context_instructions()        ); -        compiler.registers().pop_context();        compiler.assembler().handle_adding_instruction diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/AtReferenceCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/AtReferenceCompiler.java index f840dbd..3c538f8 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/AtReferenceCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/AtReferenceCompiler.java @@ -10,7 +10,6 @@ import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler;  import tonkadur.wyrd.v1.compiler.fate.v1.computation.GenericComputationCompiler; -  public class AtReferenceCompiler extends GenericComputationCompiler  {     public static Class get_target_class () diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FilterComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FilterComputationCompiler.java index b2123f7..ecc8bc6 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FilterComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FilterComputationCompiler.java @@ -40,7 +40,6 @@ extends GenericComputationCompiler     throws Throwable     {        final FilterComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc;        final Register result; @@ -51,32 +50,10 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); - +      lambda_cc.generate_address();        assimilate(lambda_cc);        in_collection_cc = new ComputationCompiler(compiler); @@ -101,9 +78,8 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), -            result_as_address, -            params +            lambda_cc.get_address(), +            result_as_address           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FoldCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FoldCompiler.java index 9dc4106..551667a 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FoldCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/FoldCompiler.java @@ -40,7 +40,6 @@ extends GenericComputationCompiler     throws Throwable     {        final Fold source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc, default_cc;        final Register result; @@ -51,28 +50,6 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        default_cc = new ComputationCompiler(compiler);        source.get_initial_value().get_visited_by(default_cc); @@ -92,6 +69,7 @@ extends GenericComputationCompiler        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address();        assimilate(lambda_cc); @@ -107,11 +85,10 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              result_as_address,              in_collection_cc.get_address(), -            source.is_foldl(), -            params +            source.is_foldl()           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedFilterComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedFilterComputationCompiler.java index 6ebcd62..3413b83 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedFilterComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedFilterComputationCompiler.java @@ -39,7 +39,6 @@ extends GenericComputationCompiler     throws Throwable     {        final IndexedFilterComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc;        final Register result; @@ -50,32 +49,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_cc = new ComputationCompiler(compiler); @@ -100,9 +79,8 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), -            result_as_address, -            params +            lambda_cc.get_address(), +            result_as_address           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMapComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMapComputationCompiler.java index c5b5e3c..bf4bae8 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMapComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMapComputationCompiler.java @@ -40,7 +40,6 @@ extends GenericComputationCompiler     throws Throwable     {        final IndexedMapComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc;        final Register result; @@ -51,32 +50,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_cc = new ComputationCompiler(compiler); @@ -91,14 +70,13 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              in_collection_cc.get_address(),              result_as_address,              (                 (tonkadur.fate.v1.lang.type.CollectionType)                 source.get_collection().get_type() -            ).is_set(), -            params +            ).is_set()           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMergeComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMergeComputationCompiler.java index 3106a29..0138a7b 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMergeComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedMergeComputationCompiler.java @@ -47,7 +47,6 @@ extends GenericComputationCompiler     throws Throwable     {        final IndexedMergeComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc;        final ComputationCompiler in_collection_a_cc, in_collection_b_cc;        final Register result; @@ -59,32 +58,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_a_cc = new ComputationCompiler(compiler); @@ -105,12 +84,11 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              in_collection_a_cc.get_address(),              in_collection_b_cc.get_address(),              result_as_address, -            source.to_set(), -            params +            source.to_set()           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedPartitionComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedPartitionComputationCompiler.java index 196ae37..10c4563 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedPartitionComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedPartitionComputationCompiler.java @@ -5,7 +5,6 @@ import java.util.ArrayList;  import tonkadur.fate.v1.lang.computation.generic.IndexedPartitionComputation; -  import tonkadur.wyrd.v1.lang.Register;  import tonkadur.wyrd.v1.lang.instruction.SetValue; @@ -17,8 +16,8 @@ import tonkadur.wyrd.v1.lang.computation.RelativeAddress;  import tonkadur.wyrd.v1.lang.meta.Computation; -import tonkadur.wyrd.v1.lang.type.Type;  import tonkadur.wyrd.v1.lang.type.DictType; +import tonkadur.wyrd.v1.lang.type.Type;  import tonkadur.wyrd.v1.compiler.fate.v1.Compiler;  import tonkadur.wyrd.v1.compiler.fate.v1.TypeCompiler; @@ -46,7 +45,6 @@ extends GenericComputationCompiler     throws Throwable     {        final IndexedPartitionComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc;        final Address car_addr, cdr_addr;        final Register result; @@ -58,32 +56,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_cc = new ComputationCompiler(compiler); @@ -99,7 +77,7 @@ extends GenericComputationCompiler           new RelativeAddress           (              result_as_address, -            new Constant(Type.STRING, "0"), +            Constant.string_value("0"),              in_collection_cc.get_computation().get_type()           ); @@ -116,7 +94,7 @@ extends GenericComputationCompiler           new RelativeAddress           (              result_as_address, -            new Constant(Type.STRING, "1"), +            Constant.string_value("1"),              in_collection_cc.get_computation().get_type()           ); @@ -130,14 +108,13 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              car_addr,              cdr_addr,              (                 (tonkadur.fate.v1.lang.type.CollectionType)                 source.get_collection().get_type() -            ).is_set(), -            params +            ).is_set()           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedSafeMergeComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedSafeMergeComputationCompiler.java index 97aabdd..4dcd5e4 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedSafeMergeComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/IndexedSafeMergeComputationCompiler.java @@ -39,7 +39,6 @@ extends GenericComputationCompiler     throws Throwable     {        final IndexedSafeMergeComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, default_a_cc, default_b_cc;        final ComputationCompiler in_collection_a_cc, in_collection_b_cc;        final Register result; @@ -51,32 +50,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        default_a_cc = new ComputationCompiler(compiler); @@ -113,14 +92,13 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              default_a_cc.get_computation(),              in_collection_a_cc.get_address(),              default_b_cc.get_computation(),              in_collection_b_cc.get_address(),              result_as_address, -            source.to_set(), -            params +            source.to_set()           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java index fb74eb9..825491d 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java @@ -9,6 +9,8 @@ import tonkadur.wyrd.v1.lang.Register;  import tonkadur.wyrd.v1.lang.meta.Computation; +import tonkadur.wyrd.v1.lang.type.DictType; +  import tonkadur.wyrd.v1.lang.computation.Address;  import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; @@ -37,21 +39,22 @@ public class LambdaEvaluationCompiler extends GenericComputationCompiler     throws Throwable     {        final LambdaEvaluation source; -      final ComputationCompiler parent_cc; -      final ComputationCompiler target_line_cc; +      final ComputationCompiler lambda_cc;        final List<Computation> parameters;        final Register result;        source = (LambdaEvaluation) computation;        parameters = new ArrayList<Computation>(); -      target_line_cc = new ComputationCompiler(compiler); +      lambda_cc = new ComputationCompiler(compiler); + +      source.get_lambda_function().get_visited_by(lambda_cc); -      source.get_lambda_function().get_visited_by(target_line_cc); +      lambda_cc.generate_address(); -      assimilate(target_line_cc); +      assimilate(lambda_cc); -      result = reserve(TypeCompiler.compile(compiler, source.get_type())); +      result = reserve(DictType.WILD);        result_as_address = result.get_address();        result_as_computation = result.get_value(); @@ -79,7 +82,7 @@ public class LambdaEvaluationCompiler extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            target_line_cc.get_computation(), +            lambda_cc.get_address(),              result_as_address,              parameters           ) diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MapComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MapComputationCompiler.java index 459936f..7e98df9 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MapComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MapComputationCompiler.java @@ -37,7 +37,6 @@ extends GenericComputationCompiler     throws Throwable     {        final MapComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc;        final Register result; @@ -48,32 +47,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_cc = new ComputationCompiler(compiler); @@ -88,14 +67,13 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              in_collection_cc.get_address(),              result_as_address,              (                 (tonkadur.fate.v1.lang.type.CollectionType)                 source.get_collection().get_type() -            ).is_set(), -            params +            ).is_set()           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MergeComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MergeComputationCompiler.java index 116ce1e..2767364 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MergeComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/MergeComputationCompiler.java @@ -37,7 +37,6 @@ extends GenericComputationCompiler     throws Throwable     {        final MergeComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc;        final ComputationCompiler in_collection_a_cc, in_collection_b_cc;        final Register result; @@ -49,32 +48,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_a_cc = new ComputationCompiler(compiler); @@ -95,12 +74,11 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              in_collection_a_cc.get_address(),              in_collection_b_cc.get_address(),              result_as_address, -            source.to_set(), -            params +            source.to_set()           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/PartialLambdaEvaluationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/PartialLambdaEvaluationCompiler.java new file mode 100644 index 0000000..8bf8a20 --- /dev/null +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/PartialLambdaEvaluationCompiler.java @@ -0,0 +1,100 @@ +package tonkadur.wyrd.v1.compiler.fate.v1.computation.generic; + +import java.util.List; +import java.util.ArrayList; + +import tonkadur.fate.v1.lang.computation.generic.PartialLambdaEvaluation; + +import tonkadur.fate.v1.lang.type.LambdaType; +import tonkadur.fate.v1.lang.type.Type; + +import tonkadur.wyrd.v1.lang.Register; + +import tonkadur.wyrd.v1.lang.type.DictType; + +import tonkadur.wyrd.v1.lang.meta.Computation; + +import tonkadur.wyrd.v1.lang.computation.Address; + +import tonkadur.wyrd.v1.compiler.fate.v1.Compiler; +import tonkadur.wyrd.v1.compiler.fate.v1.TypeCompiler; +import tonkadur.wyrd.v1.compiler.fate.v1.ComputationCompiler; + +import tonkadur.wyrd.v1.compiler.fate.v1.computation.GenericComputationCompiler; + +public class PartialLambdaEvaluationCompiler extends GenericComputationCompiler +{ +   public static Class get_target_class () +   { +      return PartialLambdaEvaluation.class; +   } + +   public PartialLambdaEvaluationCompiler (final Compiler compiler) +   { +      super(compiler); +   } + +   public void compile +   ( +      final tonkadur.fate.v1.lang.computation.GenericComputation computation +   ) +   throws Throwable +   { +      final PartialLambdaEvaluation source; +      final ComputationCompiler parent_lambda_cc; +      final List<Computation> parameters; +      final Register result; +      final int max_number_of_arguments; + +      source = (PartialLambdaEvaluation) computation; + +      parameters = new ArrayList<Computation>(); +      parent_lambda_cc = new ComputationCompiler(compiler); + +      source.get_lambda_function().get_visited_by(parent_lambda_cc); + +      parent_lambda_cc.generate_address(); + +      assimilate(parent_lambda_cc); + +      result = reserve(DictType.WILD); + +      result_as_address = result.get_address(); +      result_as_computation = result.get_value(); + +      max_number_of_arguments = +         ( +            (LambdaType) source.get_lambda_function().get_type() +         ).get_signature().size(); + +      for +      ( +         final tonkadur.fate.v1.lang.meta.Computation param: +            source.get_parameters() +      ) +      { +         final ComputationCompiler cc; + +         cc = new ComputationCompiler(compiler); + +         param.get_visited_by(cc); + +         assimilate(cc); + +         parameters.add(cc.get_computation()); +      } + +      init_instructions.add +      ( +         tonkadur.wyrd.v1.compiler.util.AddParametersToLambda.generate +         ( +            compiler.registers(), +            compiler.assembler(), +            parent_lambda_cc.get_address(), +            result_as_address, +            parameters, +            (max_number_of_arguments - parameters.size()) +         ) +      ); +   } +} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/PartitionComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/PartitionComputationCompiler.java index d66c1dd..f6ab5e2 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/PartitionComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/PartitionComputationCompiler.java @@ -46,7 +46,6 @@ extends GenericComputationCompiler     throws Throwable     {        final PartitionComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc;        final Address car_addr, cdr_addr;        final Register result; @@ -58,32 +57,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_cc = new ComputationCompiler(compiler); @@ -99,7 +78,7 @@ extends GenericComputationCompiler           new RelativeAddress           (              result_as_address, -            new Constant(Type.STRING, "0"), +            Constant.string_value("0"),              in_collection_cc.get_computation().get_type()           ); @@ -116,7 +95,7 @@ extends GenericComputationCompiler           new RelativeAddress           (              result_as_address, -            new Constant(Type.STRING, "1"), +            Constant.string_value("1"),              in_collection_cc.get_computation().get_type()           ); @@ -130,14 +109,13 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              car_addr,              cdr_addr,              (                 (tonkadur.fate.v1.lang.type.CollectionType)                 source.get_collection().get_type() -            ).is_set(), -            params +            ).is_set()           )        );     } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java index 17673da..29162fe 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SafeMergeComputationCompiler.java @@ -37,7 +37,6 @@ extends GenericComputationCompiler     throws Throwable     {        final SafeMergeComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, default_a_cc, default_b_cc;        final ComputationCompiler in_collection_a_cc, in_collection_b_cc;        final Register result; @@ -49,32 +48,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        default_a_cc = new ComputationCompiler(compiler); @@ -111,16 +90,14 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              default_a_cc.get_computation(),              in_collection_a_cc.get_address(),              default_b_cc.get_computation(),              in_collection_b_cc.get_address(),              result_as_address, -            source.to_set(), -            params +            source.to_set()           )        ); -     }  } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SortComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SortComputationCompiler.java index f4805e1..250c7e9 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SortComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/SortComputationCompiler.java @@ -35,7 +35,6 @@ extends GenericComputationCompiler     throws Throwable     {        final SortComputation source; -      final List<Computation> params;        final ComputationCompiler lambda_cc, in_collection_cc;        final Register result; @@ -46,32 +45,12 @@ extends GenericComputationCompiler        result_as_address = result.get_address();        result_as_computation = result.get_value(); -      params = new ArrayList<Computation>(); - -      for -      ( -         final tonkadur.fate.v1.lang.meta.Computation p: -            source.get_extra_parameters() -      ) -      { -         final ComputationCompiler param_cc; - -         param_cc = new ComputationCompiler(compiler); - -         p.get_visited_by(param_cc); - -         // Let's not re-compute the parameters on every iteration. -         param_cc.generate_address(); - -         assimilate(param_cc); - -         params.add(param_cc.get_computation()); -      } -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        assimilate(lambda_cc);        in_collection_cc = new ComputationCompiler(compiler); @@ -89,10 +68,9 @@ extends GenericComputationCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              in_collection_cc.get_address(), -            result_as_address, -            params +            result_as_address           )        ); 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 index a7e2035..eec5385 100644 --- 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 @@ -31,44 +31,16 @@ public class FilterCompiler extends GenericInstructionCompiler     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); +      lambda_cc.generate_address(); +        if (lambda_cc.has_init())        {           result.add(lambda_cc.get_init()); @@ -89,18 +61,12 @@ public class FilterCompiler extends GenericInstructionCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), -            collection_cc.get_address(), -            params +            lambda_cc.get_address(), +            collection_cc.get_address()           )        );        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 index d4e00a3..0ab19a9 100644 --- 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 @@ -31,44 +31,16 @@ public class IndexedFilterCompiler extends GenericInstructionCompiler     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); +      lambda_cc.generate_address(); +        if (lambda_cc.has_init())        {           result.add(lambda_cc.get_init()); @@ -89,18 +61,12 @@ public class IndexedFilterCompiler extends GenericInstructionCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), -            collection_cc.get_address(), -            params +            lambda_cc.get_address(), +            collection_cc.get_address()           )        );        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/IndexedPartitionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/IndexedPartitionCompiler.java index ebe8eb2..bda2914 100644 --- 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 @@ -31,44 +31,16 @@ public class IndexedPartitionCompiler extends GenericInstructionCompiler     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); +      lambda_cc.generate_address(); +        if (lambda_cc.has_init())        {           result.add(lambda_cc.get_init()); @@ -98,24 +70,18 @@ public class IndexedPartitionCompiler extends GenericInstructionCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              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 +            ).is_set()           )        );        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/PartitionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/PartitionCompiler.java index 602d89f..5818c5a 100644 --- 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 @@ -31,44 +31,16 @@ public class PartitionCompiler extends GenericInstructionCompiler     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); +      lambda_cc.generate_address(); +        if (lambda_cc.has_init())        {           result.add(lambda_cc.get_init()); @@ -98,24 +70,18 @@ public class PartitionCompiler extends GenericInstructionCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              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 +            ).is_set()           )        );        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/SortCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SortCompiler.java index f31f58e..00f9642 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SortCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/SortCompiler.java @@ -36,20 +36,17 @@ public class SortCompiler extends GenericInstructionCompiler     {        final Sort source;        final ComputationCompiler lambda_cc; -      final List<Computation> params; -      final List<ComputationCompiler> param_cc_list;        final ComputationCompiler collection_cc;        final Register sorted_result;        source = (Sort) instruction; -      params = new ArrayList<Computation>(); -      param_cc_list = new ArrayList<ComputationCompiler>(); -        lambda_cc = new ComputationCompiler(compiler);        source.get_lambda_function().get_visited_by(lambda_cc); +      lambda_cc.generate_address(); +        if (lambda_cc.has_init())        {           result.add(lambda_cc.get_init()); @@ -64,31 +61,6 @@ public class SortCompiler extends GenericInstructionCompiler           result.add(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()); -      } -        sorted_result =           compiler.registers().reserve           ( @@ -102,10 +74,9 @@ public class SortCompiler extends GenericInstructionCompiler           (              compiler.registers(),              compiler.assembler(), -            lambda_cc.get_computation(), +            lambda_cc.get_address(),              collection_cc.get_address(), -            sorted_result.get_address(), -            params +            sorted_result.get_address()           )        ); @@ -117,10 +88,5 @@ public class SortCompiler extends GenericInstructionCompiler        compiler.registers().release(sorted_result, 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/UserInstructionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/UserInstructionCompiler.java new file mode 100644 index 0000000..674b7b4 --- /dev/null +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/instruction/generic/UserInstructionCompiler.java @@ -0,0 +1,39 @@ +package tonkadur.wyrd.v1.compiler.fate.v1.instruction.generic; + +import java.util.List; +import java.util.ArrayList; + +import tonkadur.fate.v1.lang.instruction.generic.UserInstruction; + +import tonkadur.wyrd.v1.lang.meta.Computation; + +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 UserInstructionCompiler extends GenericInstructionCompiler +{ +   public static Class get_target_class () +   { +      return UserInstruction.class; +   } + +   public UserInstructionCompiler (final Compiler compiler) +   { +      super(compiler); +   } + +   /* +    * Fate: (event_call <string> c0 ... cn) +    * +    * Wyrd (event_call <string> c0 ... cn) +    */ +   public void compile +   ( +      final tonkadur.fate.v1.lang.instruction.GenericInstruction instruction +   ) +   throws Throwable +   { +   } +} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/AddParametersToLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/AddParametersToLambda.java new file mode 100644 index 0000000..ffed045 --- /dev/null +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/AddParametersToLambda.java @@ -0,0 +1,78 @@ +package tonkadur.wyrd.v1.compiler.util; + +import java.util.List; +import java.util.ArrayList; + +import tonkadur.wyrd.v1.lang.meta.Instruction; +import tonkadur.wyrd.v1.lang.meta.Computation; + +import tonkadur.wyrd.v1.lang.computation.Address; +import tonkadur.wyrd.v1.lang.computation.Constant; +import tonkadur.wyrd.v1.lang.computation.ValueOf; +import tonkadur.wyrd.v1.lang.computation.RelativeAddress; + +import tonkadur.wyrd.v1.lang.instruction.SetValue; +import tonkadur.wyrd.v1.lang.instruction.Initialize; + +import tonkadur.wyrd.v1.compiler.util.registers.RegisterManager; + +public class AddParametersToLambda +{ +   /* Utility Class */ +   private AddParametersToLambda () {} + +   public static Instruction generate +   ( +      final RegisterManager registers, +      final InstructionManager assembler, +      final Address parent_lambda, +      final Address result_storage, +      final List<Computation> parameters, +      final int missing_params_count +   ) +   { +      final List<Instruction> result; +      final int parameters_size; + +      result = new ArrayList<Instruction>(); +      parameters_size = parameters.size(); + +      result.add(new SetValue(result_storage, new ValueOf(parent_lambda))); + +      for (int i = 0; i < parameters_size; ++i) +      { +         final Computation param; +         final Address param_storage_address; + +         param = parameters.get(i); + +         param_storage_address = +            new RelativeAddress +            ( +               result_storage, +               Constant.string_value +               ( +                  Integer.toString +                  ( +                     ((parameters_size - 1) - i) +                     + missing_params_count +                  ) +               ), +               param.get_type() +            ); + +         result.add +         ( +            new Initialize +            ( +               param_storage_address, +               param.get_type() +            ) +         ); + +         result.add(new SetValue(param_storage_address, param)); +      } + +      return assembler.merge(result); +   } +} diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java index 00b80e5..656e816 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/BinarySearch.java @@ -268,13 +268,12 @@ public class BinarySearch     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation sort_fun, +      final Address sort_fun,        final Computation target,        final Computation collection_size,        final Address collection,        final Address result_was_found, -      final Address result_index, -      final List<Computation> sort_fun_extra_params +      final Address result_index     )     {        final List<Instruction> result; @@ -299,7 +298,6 @@ public class BinarySearch              collection,              result_was_found,              result_index, -            sort_fun_extra_params,              bot,              top,              midval, @@ -319,13 +317,12 @@ public class BinarySearch     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation sort_fun, +      final Address sort_fun,        final Computation target,        final Computation collection_size,        final Address collection,        final Address result_was_found,        final Address result_index, -      final List<Computation> sort_fun_extra_params,        final Register bot,        final Register top,        final Register midval, @@ -335,10 +332,13 @@ public class BinarySearch        final List<Instruction> result, while_body;        final Type element_type;        final Computation value_of_result_index; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        element_type = target.get_type();        value_of_result_index = new ValueOf(result_index); @@ -413,8 +413,8 @@ public class BinarySearch           )        ); -      sort_fun_extra_params.add(0, target); -      sort_fun_extra_params.add(0, midval.get_value()); +      lambda_params.add(midval.get_value()); +      lambda_params.add(target);        while_body.add        ( @@ -424,7 +424,7 @@ public class BinarySearch              assembler,              sort_fun,              cmp.get_address(), -            sort_fun_extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java index 6617688..2b1d31d 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/FilterLambda.java @@ -33,18 +33,20 @@ public class FilterLambda     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, -      final Address collection, -      final List<Computation> extra_params +      final Address lambda, +      final Address collection     )     {        final List<Instruction> result, while_body, remove_instructions;        final Register iterator, index_storage, collection_size, storage; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>();        remove_instructions = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        index_storage = registers.reserve(Type.INT, result);        collection_size = registers.reserve(Type.INT, result); @@ -56,9 +58,8 @@ public class FilterLambda           new SetValue(collection_size.get_address(), new Size(collection))        ); -      extra_params.add +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress @@ -107,7 +108,7 @@ public class FilterLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/Fold.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/Fold.java index 7e6a225..b4a17aa 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/Fold.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/Fold.java @@ -29,25 +29,26 @@ public class Fold     /* Utility Class */     private Fold () {} -   /* Uses Durstenfeld's shuffling algorithm */     public static Instruction generate     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Address storage_address,        final Address collection_in, -      final boolean is_foldl, -      final List<Computation> extra_params +      final boolean is_foldl     )     {        final List<Instruction> result, while_body;        final Register iterator, collection_in_size;        final Computation start_point, end_point, condition, increment; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        collection_in_size = registers.reserve(Type.INT, result); @@ -80,9 +81,9 @@ public class Fold        result.add(new SetValue(iterator.get_address(), start_point)); -      extra_params.add +      lambda_params.add(new ValueOf(storage_address)); +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress @@ -95,7 +96,6 @@ public class Fold              )           )        ); -      extra_params.add(0, new ValueOf(storage_address));        while_body.add        ( @@ -108,7 +108,7 @@ public class Fold               * be a set.               */              storage_address, -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java index 620f06b..09e9851 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java @@ -29,24 +29,25 @@ public class IndexedFilterLambda     /* Utility Class */     private IndexedFilterLambda () {} -   /* Uses Durstenfeld's shuffling algorithm */     public static Instruction generate     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, -      final Address collection, -      final List<Computation> extra_params +      final Address lambda, +      final Address collection     )     {        final List<Instruction> result, while_body, remove_instructions;        final Register iterator, index_storage, collection_size, storage;        final Register index_counter; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>();        remove_instructions = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        index_counter = registers.reserve(Type.INT, result);        index_storage = registers.reserve(Type.INT, result); @@ -60,9 +61,9 @@ public class IndexedFilterLambda           new SetValue(collection_size.get_address(), new Size(collection))        ); -      extra_params.add +      lambda_params.add(index_counter.get_value()); +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress @@ -74,7 +75,6 @@ public class IndexedFilterLambda           )        ); -      extra_params.add(0, index_counter.get_value());        remove_instructions.add        ( @@ -113,7 +113,7 @@ public class IndexedFilterLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMapLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMapLambda.java index 869b049..ee589e4 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMapLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMapLambda.java @@ -29,24 +29,25 @@ public class IndexedMapLambda     /* Utility Class */     private IndexedMapLambda () {} -   /* Uses Durstenfeld's shuffling algorithm */     public static Instruction generate     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Address collection_in,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body;        final Register iterator, collection_in_size, storage; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        collection_in_size = registers.reserve(Type.INT, result);        storage = @@ -67,9 +68,9 @@ public class IndexedMapLambda        ); -      extra_params.add +      lambda_params.add(iterator.get_value()); +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress @@ -81,7 +82,6 @@ public class IndexedMapLambda           )        ); -      extra_params.add(0, iterator.get_value());        while_body.add        ( @@ -94,7 +94,7 @@ public class IndexedMapLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMergeLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMergeLambda.java index 818fde6..7406ad7 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMergeLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedMergeLambda.java @@ -34,21 +34,23 @@ public class IndexedMergeLambda     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Address collection_in_a,        final Address collection_in_b,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body;        final Register iterator, collection_in_size, storage;        final Register collection_in_b_size; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        collection_in_size = registers.reserve(Type.INT, result);        collection_in_b_size = registers.reserve(Type.INT, result); @@ -98,36 +100,33 @@ public class IndexedMergeLambda        ); -      extra_params.add + +      lambda_params.add(iterator.get_value()); +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress              ( -               collection_in_b, +               collection_in_a,                 new Cast(iterator.get_value(), Type.STRING), -               ((MapType) collection_in_b.get_target_type()).get_member_type() +               ((MapType) collection_in_a.get_target_type()).get_member_type()              )           )        ); - -      extra_params.add +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress              ( -               collection_in_a, +               collection_in_b,                 new Cast(iterator.get_value(), Type.STRING), -               ((MapType) collection_in_a.get_target_type()).get_member_type() +               ((MapType) collection_in_b.get_target_type()).get_member_type()              )           )        ); -      extra_params.add(0, iterator.get_value()); -        while_body.add        (           LambdaEvaluation.generate @@ -139,7 +138,7 @@ public class IndexedMergeLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); @@ -191,26 +190,28 @@ public class IndexedMergeLambda     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Computation default_a,        final Address collection_in_a,        final Computation default_b,        final Address collection_in_b,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body, oob_a_body, oob_b_body;        final Register iterator_a, iterator_b, oob_a, oob_b;        final Register collection_a_size, collection_b_size;        final Register storage; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>();        oob_a_body = new ArrayList<Instruction>();        oob_b_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator_a = registers.reserve(Type.INT, result);        iterator_b = registers.reserve(Type.INT, result); @@ -274,52 +275,52 @@ public class IndexedMergeLambda           )        ); -      extra_params.add + + +      lambda_params.add(iterator_a.get_value()); + +      lambda_params.add        ( -         0,           new IfElseComputation           ( -            oob_b.get_value(), -            default_b, +            oob_a.get_value(), +            default_a,              new ValueOf              (                 new RelativeAddress                 ( -                  collection_in_b, -                  new Cast(iterator_b.get_value(), Type.STRING), +                  collection_in_a, +                  new Cast(iterator_a.get_value(), Type.STRING),                    ( -                     (MapType) collection_in_b.get_target_type() +                     (MapType) collection_in_a.get_target_type()                    ).get_member_type()                 )              )           )        ); -      extra_params.add(0, iterator_b.get_value()); +      lambda_params.add(iterator_b.get_value()); -      extra_params.add +      lambda_params.add        ( -         0,           new IfElseComputation           ( -            oob_a.get_value(), -            default_a, +            oob_b.get_value(), +            default_b,              new ValueOf              (                 new RelativeAddress                 ( -                  collection_in_a, -                  new Cast(iterator_a.get_value(), Type.STRING), +                  collection_in_b, +                  new Cast(iterator_b.get_value(), Type.STRING),                    ( -                     (MapType) collection_in_a.get_target_type() +                     (MapType) collection_in_b.get_target_type()                    ).get_member_type()                 )              )           )        ); -      extra_params.add(0, iterator_a.get_value()); -        while_body.add        (           LambdaEvaluation.generate @@ -331,7 +332,7 @@ public class IndexedMergeLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedPartitionLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedPartitionLambda.java index 8bd2c74..eea0fef 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedPartitionLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedPartitionLambda.java @@ -34,21 +34,23 @@ public class IndexedPartitionLambda     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Address collection_in,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body, remove_instructions;        final Register iterator, index_storage, collection_size, storage;        final Computation iterator_target; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>();        remove_instructions = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        index_storage = registers.reserve(Type.INT, result);        collection_size = registers.reserve(Type.INT, result); @@ -71,8 +73,8 @@ public class IndexedPartitionLambda           new SetValue(collection_size.get_address(), new Size(collection_in))        ); -      extra_params.add(0, iterator_target); -      extra_params.add(0, iterator.get_value()); +      lambda_params.add(0, iterator.get_value()); +      lambda_params.add(0, iterator_target);        remove_instructions.add        ( @@ -123,7 +125,7 @@ public class IndexedPartitionLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/LambdaEvaluation.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/LambdaEvaluation.java index 976c60e..00341bf 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/LambdaEvaluation.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/LambdaEvaluation.java @@ -5,10 +5,19 @@ import java.util.ArrayList;  import tonkadur.wyrd.v1.lang.meta.Instruction;  import tonkadur.wyrd.v1.lang.meta.Computation; +  import tonkadur.wyrd.v1.lang.computation.Address; +import tonkadur.wyrd.v1.lang.computation.Constant; +import tonkadur.wyrd.v1.lang.computation.RelativeAddress; +import tonkadur.wyrd.v1.lang.computation.ValueOf;  import tonkadur.wyrd.v1.lang.instruction.SetValue; +import tonkadur.wyrd.v1.lang.type.DictType; +import tonkadur.wyrd.v1.lang.type.Type; + +import tonkadur.wyrd.v1.lang.Register; +  import tonkadur.wyrd.v1.compiler.util.registers.RegisterManager;  public class LambdaEvaluation @@ -16,26 +25,57 @@ public class LambdaEvaluation     /* Utility Class */     private LambdaEvaluation () {} -   /* Uses Durstenfeld's shuffling algorithm */     public static Instruction generate     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda_function, +      final Address lambda_function,        final Address result_storage,        final List<Computation> parameters     )     {        final List<Instruction> result;        final String return_to_label; +      final int invokation_parameters_count; +      final Computation lambda_line; +      final List<Computation> side_channel_params; +      final Register lambda_data_storage; + +      lambda_line = +         new ValueOf +         ( +            new RelativeAddress +            ( +               lambda_function, +               Constant.string_value("l"), +               Type.INT +            ) +         );        result = new ArrayList<Instruction>(); +      side_channel_params = new ArrayList<Computation>(); + +      lambda_data_storage = registers.reserve(DictType.WILD, result);        return_to_label = assembler.generate_label("<lambda_eval#return_to>"); -      parameters.add(0, result_storage); +      result.add +      ( +         AddParametersToLambda.generate +         ( +            registers, +            assembler, +            lambda_function, +            lambda_data_storage.get_address(), +            parameters, +            0 +         ) +      ); + +      side_channel_params.add(result_storage); +      side_channel_params.add(lambda_data_storage.get_address()); -      result.addAll(registers.store_parameters(parameters)); +      result.addAll(registers.store_parameters(side_channel_params));        result.add        ( @@ -45,7 +85,7 @@ public class LambdaEvaluation              (                 registers.get_visit_context_instructions                 ( -                  lambda_function, +                  lambda_line,                    assembler.get_label_constant(return_to_label)                 )              ), @@ -53,6 +93,8 @@ public class LambdaEvaluation           )        ); +      registers.release(lambda_data_storage, result); +        return assembler.merge(result);     }  } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/MapLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/MapLambda.java index 0b02130..f3642ff 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/MapLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/MapLambda.java @@ -34,19 +34,21 @@ public class MapLambda     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Address collection_in,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body;        final Register iterator, collection_in_size, storage; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        collection_in_size = registers.reserve(Type.INT, result);        storage = @@ -66,9 +68,8 @@ public class MapLambda           )        ); -      extra_params.add +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress @@ -93,7 +94,7 @@ public class MapLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/MergeLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/MergeLambda.java index 3cbed3d..b8a88a6 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/MergeLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/MergeLambda.java @@ -34,21 +34,23 @@ public class MergeLambda     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Address collection_in_a,        final Address collection_in_b,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body;        final Register iterator, collection_in_size, storage;        final Register collection_in_b_size; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        collection_in_size = registers.reserve(Type.INT, result);        collection_in_b_size = registers.reserve(Type.INT, result); @@ -97,30 +99,28 @@ public class MergeLambda           )        ); -      extra_params.add +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress              ( -               collection_in_b, +               collection_in_a,                 new Cast(iterator.get_value(), Type.STRING), -               ((MapType) collection_in_b.get_target_type()).get_member_type() +               ((MapType) collection_in_a.get_target_type()).get_member_type()              )           )        ); -      extra_params.add +      lambda_params.add        ( -         0,           new ValueOf           (              new RelativeAddress              ( -               collection_in_a, +               collection_in_b,                 new Cast(iterator.get_value(), Type.STRING), -               ((MapType) collection_in_a.get_target_type()).get_member_type() +               ((MapType) collection_in_b.get_target_type()).get_member_type()              )           )        ); @@ -136,7 +136,7 @@ public class MergeLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); @@ -188,24 +188,26 @@ public class MergeLambda     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Computation default_a,        final Address collection_in_a,        final Computation default_b,        final Address collection_in_b,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body;        final Register iterator_a, iterator_b;        final Register collection_a_size, collection_b_size;        final Register storage; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator_a = registers.reserve(Type.INT, result);        iterator_b = registers.reserve(Type.INT, result); @@ -240,53 +242,52 @@ public class MergeLambda           )        ); -      extra_params.add + +      lambda_params.add        ( -         0,           new IfElseComputation           (              Operation.less_than              ( -               iterator_b.get_value(), -               collection_b_size.get_value() +               iterator_a.get_value(), +               collection_a_size.get_value()              ),              new ValueOf              (                 new RelativeAddress                 ( -                  collection_in_b, -                  new Cast(iterator_b.get_value(), Type.STRING), +                  collection_in_a, +                  new Cast(iterator_a.get_value(), Type.STRING),                    ( -                     (MapType) collection_in_b.get_target_type() +                     (MapType) collection_in_a.get_target_type()                    ).get_member_type()                 )              ), -            default_b +            default_a           )        ); -      extra_params.add +      lambda_params.add        ( -         0,           new IfElseComputation           (              Operation.less_than              ( -               iterator_a.get_value(), -               collection_a_size.get_value() +               iterator_b.get_value(), +               collection_b_size.get_value()              ),              new ValueOf              (                 new RelativeAddress                 ( -                  collection_in_a, -                  new Cast(iterator_a.get_value(), Type.STRING), +                  collection_in_b, +                  new Cast(iterator_b.get_value(), Type.STRING),                    ( -                     (MapType) collection_in_a.get_target_type() +                     (MapType) collection_in_b.get_target_type()                    ).get_member_type()                 )              ), -            default_a +            default_b           )        ); @@ -301,7 +302,7 @@ public class MergeLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/PartitionLambda.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/PartitionLambda.java index 706aee2..8d40f49 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/PartitionLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/PartitionLambda.java @@ -29,26 +29,27 @@ public class PartitionLambda     /* Utility Class */     private PartitionLambda () {} -   /* Uses Durstenfeld's shuffling algorithm */     public static Instruction generate     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda, +      final Address lambda,        final Address collection_in,        final Address collection_out, -      final boolean to_set, -      final List<Computation> extra_params +      final boolean to_set     )     {        final List<Instruction> result, while_body, remove_instructions;        final Register iterator, index_storage, collection_size, storage;        final Computation iterator_target; +      final List<Computation> lambda_params;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>();        remove_instructions = new ArrayList<Instruction>(); +      lambda_params = new ArrayList<Computation>(); +        iterator = registers.reserve(Type.INT, result);        index_storage = registers.reserve(Type.INT, result);        collection_size = registers.reserve(Type.INT, result); @@ -71,7 +72,7 @@ public class PartitionLambda           new SetValue(collection_size.get_address(), new Size(collection_in))        ); -      extra_params.add(0, iterator_target); +      lambda_params.add(iterator_target);        remove_instructions.add        ( @@ -122,7 +123,7 @@ public class PartitionLambda               * be a set.               */              storage.get_address(), -            extra_params +            lambda_params           )        ); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/Sort.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/Sort.java index 6a67389..a6dfa5f 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/Sort.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/Sort.java @@ -34,10 +34,9 @@ public class Sort     (        final RegisterManager registers,        final InstructionManager assembler, -      final Computation lambda_fun, +      final Address lambda_fun,        final Address collection, -      final Address sorted_result_holder, -      final List<Computation> extra_params +      final Address sorted_result_holder     )     {        final Type element_type; @@ -102,7 +101,6 @@ public class Sort              sorted_result_holder,              result_was_found.get_address(),              result_index.get_address(), -            extra_params,              bot,              top,              midval, diff --git a/src/core/src/tonkadur/wyrd/v1/lang/computation/Constant.java b/src/core/src/tonkadur/wyrd/v1/lang/computation/Constant.java index c0c6778..5467669 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/computation/Constant.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/computation/Constant.java @@ -38,6 +38,26 @@ public class Constant extends Computation        this.as_string = as_string;     } +   public static Constant string_value (final String s) +   { +      return new Constant(Type.STRING, s); +   } + +   public static Constant integer_value (final int s) +   { +      return new Constant(Type.INT, Integer.toString(s)); +   } + +   public static Constant boolean_value (final boolean s) +   { +      return s ? TRUE : FALSE; +   } + +   public static Constant float_value (final float s) +   { +      return new Constant(Type.FLOAT, Float.toString(s)); +   } +     /**** Accessors ************************************************************/     public String get_as_string ()     { | 


