| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-12-22 21:09:26 +0100 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-12-22 21:09:26 +0100 |
| commit | f263c5966cb856cefa99c8671c0ebe0a5de3b804 (patch) | |
| tree | 3d3dfd153002e92ac276e6f8a88b6d0cfd19eb46 /src | |
| parent | 81fa9a42ac0e47b4eb24cb6c0e619c21f364ea8a (diff) | |
`add_element` can now take multiple elements.extra_functional
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); |


