Fix pre- and post- ops

(cherry picked from commit 0f787a89b8f2b0f29e0e4a2327224a3b0d050171)
This commit is contained in:
Octavia Togami 2020-02-25 16:20:21 -08:00 committed by MattBDev
parent 6d9f30e6a6
commit e20765beef
2 changed files with 11 additions and 3 deletions

View File

@ -269,13 +269,14 @@ class CompilingVisitor extends ExpressionBaseVisitor<MethodHandle> {
return ExpressionHandles.call(data -> {
LocalSlot.Variable variable = ExpressionHandles.getVariable(data, target);
double value = variable.getValue();
double result = value;
if (opType == INCREMENT) {
value++;
} else {
value--;
}
variable.setValue(value);
return value;
return result;
});
}
@ -286,14 +287,13 @@ class CompilingVisitor extends ExpressionBaseVisitor<MethodHandle> {
return ExpressionHandles.call(data -> {
LocalSlot.Variable variable = ExpressionHandles.getVariable(data, target);
double value = variable.getValue();
double result = value;
if (opType == INCREMENT) {
value++;
} else {
value--;
}
variable.setValue(value);
return result;
return value;
});
}

View File

@ -84,6 +84,14 @@ class ExpressionTest extends BaseExpressionTest {
checkTestCase("3+1", 4);
}
@Test
void testPostPreOps() {
checkTestCase("a=0; b=a++; a+b", 1);
checkTestCase("a=0; b=++a; a+b", 2);
checkTestCase("a=0; b=a--; a+b", -1);
checkTestCase("a=0; b=--a; a+b", -2);
}
@Test
public void testErrors() {
// test lexer errors