Skip to content

Commit f29815b

Browse files
committed
make VAL robust to non-parseable inputs
1 parent 6c9ee45 commit f29815b

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

src/main/java/de/haupz/basicode/ast/ValNode.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
package de.haupz.basicode.ast;
22

33
import java.util.Optional;
4+
import java.util.regex.Matcher;
5+
import java.util.regex.Pattern;
46

57
/**
68
* {@code VAL}.
79
*/
810
public class ValNode extends WrappingExpressionNode {
911

12+
private static final Pattern DOUBLE = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?");
13+
1014
public ValNode(ExpressionNode expression) {
1115
super(expression);
1216
}
1317

1418
@Override
1519
Optional<Object> evalWithTypes(Object value) {
1620
if (value instanceof String s) {
17-
return Optional.of(Double.parseDouble(s));
21+
Matcher matcher = DOUBLE.matcher(s);
22+
return Optional.of(matcher.find() ? Double.parseDouble(matcher.group()) : 0.0);
1823
}
1924
return Optional.empty();
2025
}

src/test/java/de/haupz/basicode/MidsTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,9 @@ public void testOmitLengthArgument() {
5757
testExpression("MID$(\"BASICODE\",8)", "E", String.class);
5858
}
5959

60+
@Test
61+
public void testb64() {
62+
testExpression("MID$(\"b64\",2,2)", "64", String.class);
63+
}
64+
6065
}

src/test/java/de/haupz/basicode/ValTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public void testDouble() {
1919
}
2020

2121
@Test
22-
public void testError() {
23-
testExpressionThrows("VAL(\"2+4\")", NumberFormatException.class);
24-
testExpressionThrows("VAL(\"Hello\")", NumberFormatException.class);
22+
public void testStrangeInput() {
23+
testExpression("VAL(\"2+4\")", 2.0, Double.class);
24+
testExpression("VAL(\"Hello\")", 0.0, Double.class);
2525
}
2626

2727
}

0 commit comments

Comments
 (0)