aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java6
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java3
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java12
4 files changed, 17 insertions, 8 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java
index 4483ff6..31a7f96 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java
@@ -23,11 +23,13 @@ public class DoubleDatatype extends Datatype<Double> {
}
@Override
- public BooleanDatatype equals(Datatype<Double> other) throws TunkkiError {
+ public BooleanDatatype equals(Datatype other) throws TunkkiError {
switch (other.getType()) {
+ case Integer:
+ return new DoubleDatatype(((IntegerDatatype) other).getData()).equals(this);
case Double:
return new BooleanDatatype(
- Math.abs(getData() - other.getData()) < EPSILON
+ Math.abs(getData() - ((DoubleDatatype) other).getData()) < EPSILON
);
case Nada:
return new BooleanDatatype(false);
diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java
index 3b5eaf2..50936b5 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java
@@ -35,8 +35,8 @@ public class Tokenizer {
private Tokenizer() {
tokenRegexes.put(Token.Type.CommentToken, "^\\/\\*(.*?)\\*\\/");
- tokenRegexes.put(Token.Type.DoubleLiteralToken, "^([-+]?[0-9]*\\.?[0-9]+)f\\b");
- tokenRegexes.put(Token.Type.IntegerLiteralToken, "^([-+]?\\d+)\\b");
+ tokenRegexes.put(Token.Type.DoubleLiteralToken, "^([-+]?[0-9]*\\.?[0-9]?)f\\b");
+ tokenRegexes.put(Token.Type.IntegerLiteralToken, "^([-+]?[0-9]+)\\b");
tokenRegexes.put(Token.Type.BooleanLiteralToken, "^(true|false)\\b");
tokenRegexes.put(Token.Type.StringLiteralToken, "^\"(.*?)\"");
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java b/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java
index 0c986c3..7160b04 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java
@@ -27,7 +27,8 @@ public class Interpreter {
data = node.evaluate();
}
catch (NullPointerException ex) {
- throw new TunkkiError(TunkkiError.ExceptionType.GeneralError, -1, "Malformed input.");
+ continue;
+ //throw new TunkkiError(TunkkiError.ExceptionType.GeneralError, -1, "Malformed input.");
}
if (data != null) {
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
index 3a8f525..b9a62cb 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java
@@ -21,9 +21,15 @@ public class EqualsBuiltinFunction extends BuiltinFunction {
throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params));
}
- return new BooleanDatatype(
- params.get(0).equals(params.get(1)).getData()
- );
+ Datatype lhs = params.get(0);
+ Datatype rhs = params.get(1);
+
+ BooleanDatatype isEqual = lhs.equals(rhs);
+ if (isEqual != null) {
+ return isEqual;
+ } else {
+ throw new TunkkiError(TunkkiError.ExceptionType.TypeError, -1, lhs.getType().toString(), rhs.getType().toString());
+ }
}
@Override