summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-09-08 22:27:22 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-09-08 22:27:22 +0200
commitcb767eaa8fb4000acd269bba851df2d6cbc10968 (patch)
tree1931b35160e776c617797b845bc168cce3a64525 /src
parenta12e2813b03cbb1253d5105f9e8d97781ad11db7 (diff)
Bug fix + blackjack update.
Diffstat (limited to 'src')
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Decrement.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Increment.java6
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java2
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g483
6 files changed, 92 insertions, 9 deletions
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java
index 3d60f88..9fabde5 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Clear.java
@@ -76,7 +76,7 @@ public class Clear extends GenericInstruction
result = new ArrayList<Instruction>();
sub_call_parameters = new ArrayList<Computation>();
- sub_call_parameters.add(sub_call_parameters.get(0));
+ sub_call_parameters.add(call_parameters.get(0));
for (int i = 0; i < size_minus_one; ++i)
{
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Decrement.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Decrement.java
index 9f3be2e..c8800b4 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Decrement.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Decrement.java
@@ -70,7 +70,7 @@ public class Decrement extends GenericInstruction
result = new ArrayList<Instruction>();
sub_call_parameters = new ArrayList<Computation>();
- sub_call_parameters.add(call_parameters.get(size_minus_one));
+ sub_call_parameters.add(call_parameters.get(0));
for (int i = 0; i < size_minus_one; ++i)
{
@@ -88,10 +88,10 @@ public class Decrement extends GenericInstruction
element = call_parameters.get(0);
- RecurrentChecks.assert_can_be_used_as(element, Type.INT);
-
element.expect_non_string();
+ RecurrentChecks.assert_can_be_used_as(element, Type.INT);
+
element.use_as_reference();
return new Decrement(origin, element);
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Increment.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Increment.java
index 92e8290..8f81c88 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Increment.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Increment.java
@@ -70,7 +70,7 @@ public class Increment extends GenericInstruction
result = new ArrayList<Instruction>();
sub_call_parameters = new ArrayList<Computation>();
- sub_call_parameters.add(call_parameters.get(size_minus_one));
+ sub_call_parameters.add(call_parameters.get(0));
for (int i = 0; i < size_minus_one; ++i)
{
@@ -88,10 +88,10 @@ public class Increment extends GenericInstruction
element = call_parameters.get(0);
- RecurrentChecks.assert_can_be_used_as(element, Type.INT);
-
element.expect_non_string();
+ RecurrentChecks.assert_can_be_used_as(element, Type.INT);
+
element.use_as_reference();
return new Increment(origin, element);
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java
index 15835e1..e71a117 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/ReverseList.java
@@ -67,7 +67,7 @@ public class ReverseList extends GenericInstruction
result = new ArrayList<Instruction>();
sub_call_parameters = new ArrayList<Computation>();
- sub_call_parameters.add(sub_call_parameters.get(0));
+ sub_call_parameters.add(call_parameters.get(0));
for (int i = 0; i < size_minus_one; ++i)
{
diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java
index eac8434..6f3a55f 100644
--- a/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java
+++ b/src/core/src/tonkadur/fate/v1/lang/instruction/generic/Shuffle.java
@@ -66,7 +66,7 @@ public class Shuffle extends GenericInstruction
result = new ArrayList<Instruction>();
sub_call_parameters = new ArrayList<Computation>();
- sub_call_parameters.add(sub_call_parameters.get(0));
+ sub_call_parameters.add(call_parameters.get(0));
for (int i = 0; i < size_minus_one; ++i)
{
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
index 71d1d36..2aa2695 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
@@ -371,6 +371,44 @@ first_level_instruction
PARSER.get_world().variables().add(new_variable);
}
+ | DECLARE_GLOBAL_VARIABLE_KW
+ type WS+
+ name=identifier WS+
+ value=computation WS*
+ R_PAREN
+ {
+ final Origin start_origin, type_origin;
+ final Variable new_variable;
+
+ start_origin =
+ PARSER.get_origin_at
+ (
+ ($DECLARE_GLOBAL_VARIABLE_KW.getLine()),
+ ($DECLARE_GLOBAL_VARIABLE_KW.getCharPositionInLine())
+ );
+
+ new_variable =
+ new Variable
+ (
+ start_origin,
+ ($type.result),
+ ($name.result),
+ false
+ );
+
+ PARSER.get_world().variables().add(new_variable);
+
+ PARSER.get_world().add_global_instruction
+ (
+ SetValue.build
+ (
+ start_origin,
+ new VariableReference(start_origin, new_variable),
+ ($value.result)
+ )
+ );
+ }
+
| DECLARE_EXTERNAL_VARIABLE_KW type WS+ name=identifier WS* R_PAREN
{
final Origin start_origin, type_origin;
@@ -592,6 +630,51 @@ returns [Instruction result]
$result = new LocalVariable(new_variable);
}
+ | DECLARE_LOCAL_VARIABLE_KW
+ type WS+
+ name=identifier WS+
+ value=computation WS*
+ R_PAREN
+ {
+ final Origin start_origin, type_origin;
+ final Variable new_variable;
+ final Map<String, Variable> variable_map;
+ final List<Instruction> shorthand;
+
+ shorthand = new ArrayList<Instruction>();
+
+ start_origin =
+ PARSER.get_origin_at
+ (
+ ($DECLARE_LOCAL_VARIABLE_KW.getLine()),
+ ($DECLARE_LOCAL_VARIABLE_KW.getCharPositionInLine())
+ );
+
+ new_variable =
+ new Variable
+ (
+ start_origin,
+ ($type.result),
+ ($name.result),
+ false
+ );
+
+ PARSER.add_local_variable(new_variable);
+
+ shorthand.add(new LocalVariable(new_variable));
+ shorthand.add
+ (
+ SetValue.build
+ (
+ start_origin,
+ new VariableReference(start_origin, new_variable),
+ ($value.result)
+ )
+ );
+
+ $result = new InstructionList(start_origin, shorthand);
+ }
+
/******************************************************************************/
/**** LOOPS *******************************************************************/
/******************************************************************************/