| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 56 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java | 10 | 
2 files changed, 51 insertions, 15 deletions
| diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index 6f84490..d16dfb2 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -655,18 +655,39 @@ returns [Instruction result]           );     } -   | IMP_ADD_KW value WS+ value_reference WS* R_PAREN +   | IMP_ADD_KW value_list WS+ value_reference WS* R_PAREN     { +      final List<Instruction> add_instrs; + +      add_instrs = new ArrayList<Instruction>(); + + +      for (final Computation value: ($value_list.result)) +      { +         add_instrs.add +         ( +            AddElement.build +            ( +               CONTEXT.get_origin_at +               ( +                  ($IMP_ADD_KW.getLine()), +                  ($IMP_ADD_KW.getCharPositionInLine()) +               ), +               value, +               ($value_reference.result) +            ) +         ); +      } +        $result = -         AddElement.build +         new InstructionList           (              CONTEXT.get_origin_at              (                 ($IMP_ADD_KW.getLine()),                 ($IMP_ADD_KW.getCharPositionInLine())              ), -            ($value.result), -            ($value_reference.result) +            add_instrs           );     } @@ -4111,19 +4132,24 @@ returns [Computation result]           );     } -   | ADD_KW val=value WS+ coll=non_text_value WS* R_PAREN +   | ADD_KW vall=value_list WS+ coll=non_text_value WS* R_PAREN     { -      $result = -         AddElementComputation.build -         ( -            CONTEXT.get_origin_at +      $result = ($coll.result); + +      for (final Computation value: ($vall.result)) +      { +         $result = +            AddElementComputation.build              ( -               ($ADD_KW.getLine()), -               ($ADD_KW.getCharPositionInLine()) -            ), -            ($val.result), -            ($coll.result) -         ); +               CONTEXT.get_origin_at +               ( +                  ($ADD_KW.getLine()), +                  ($ADD_KW.getCharPositionInLine()) +               ), +               value, +               $result +            ); +      }     }     | ADD_AT_KW diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java index 36e7b66..19baae7 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java @@ -1204,6 +1204,16 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor           new SetValue(holder.get_address(), collection_cc.get_computation())        ); +      result.add +      ( +         Clear.generate +         ( +            compiler.registers(), +            compiler.assembler(), +            collection_cc.get_address() +         ) +      ); +        in_collection_b_cc = new ComputationCompiler(compiler);        n.get_collection_in_b().get_visited_by(in_collection_b_cc); | 


