summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-12-22 21:09:26 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-12-22 21:09:26 +0100
commitf263c5966cb856cefa99c8671c0ebe0a5de3b804 (patch)
tree3d3dfd153002e92ac276e6f8a88b6d0cfd19eb46 /src
parent81fa9a42ac0e47b4eb24cb6c0e619c21f364ea8a (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.g456
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java10
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);