| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 8 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java | 15 | 
2 files changed, 18 insertions, 5 deletions
| diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index 62f5e4b..2ea8bc4 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -3715,7 +3715,7 @@ returns [Computation result]     | FOLDL_KW           fun=non_text_value WS+           init=value WS+ -         inr=value_reference WS* +         inr=non_text_value WS*        R_PAREN     {        $result = @@ -3737,7 +3737,7 @@ returns [Computation result]     | FOLDL_KW           fun=non_text_value WS+           init=value WS+ -         inr=value_reference WS+ +         inr=non_text_value WS+           value_list WS*        R_PAREN     { @@ -3760,7 +3760,7 @@ returns [Computation result]     | FOLDR_KW           fun=non_text_value WS+           init=value WS+ -         inr=value_reference WS* +         inr=non_text_value WS*        R_PAREN     {        $result = @@ -3782,7 +3782,7 @@ returns [Computation result]     | FOLDR_KW           fun=non_text_value WS+           init=value WS+ -         inr=value_reference WS+ +         inr=non_text_value WS+           value_list WS*        R_PAREN     { 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 68166a8..620f06b 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/IndexedFilterLambda.java @@ -41,17 +41,20 @@ public class IndexedFilterLambda     {        final List<Instruction> result, while_body, remove_instructions;        final Register iterator, index_storage, collection_size, storage; +      final Register index_counter;        result = new ArrayList<Instruction>();        while_body = new ArrayList<Instruction>();        remove_instructions = new ArrayList<Instruction>();        iterator = registers.reserve(Type.INT, result); +      index_counter = registers.reserve(Type.INT, result);        index_storage = registers.reserve(Type.INT, result);        collection_size = registers.reserve(Type.INT, result);        storage = registers.reserve(Type.BOOL, result);        result.add(new SetValue(iterator.get_address(), Constant.ZERO)); +      result.add(new SetValue(index_counter.get_address(), Constant.ZERO));        result.add        (           new SetValue(collection_size.get_address(), new Size(collection)) @@ -71,7 +74,7 @@ public class IndexedFilterLambda           )        ); -      extra_params.add(0, iterator.get_value()); +      extra_params.add(0, index_counter.get_value());        remove_instructions.add        ( @@ -130,6 +133,15 @@ public class IndexedFilterLambda           )        ); +      while_body.add +      ( +         new SetValue +         ( +            index_counter.get_address(), +            Operation.plus(index_counter.get_value(), Constant.ONE) +         ) +      ); +        result.add        (           While.generate @@ -147,6 +159,7 @@ public class IndexedFilterLambda        registers.release(iterator, result);        registers.release(index_storage, result); +      registers.release(index_counter, result);        registers.release(collection_size, result);        registers.release(storage, result); | 


