aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-08-01 15:52:53 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-08-01 15:52:53 +0300
commit44e67d9e2768e1de36698c1be0452b835cbfb1e0 (patch)
tree20dddd8022590e8cd8e7c20af1505dacbd314d0e
parentb41c18256f3488f9cebd80fc928bf34a6abc2677 (diff)
Implement 'as_bool' builtin
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java50
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java42
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java52
-rw-r--r--src/main/com/jantuomi/tunkki/exception/TunkkiError.java3
5 files changed, 100 insertions, 51 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java
deleted file mode 100644
index adb5209..0000000
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.jantuomi.tunkki.core.runtime.builtins.globals;
-
-import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype;
-import com.jantuomi.tunkki.core.parser.datatype.Datatype;
-import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype;
-import com.jantuomi.tunkki.core.parser.datatype.StringDatatype;
-import com.jantuomi.tunkki.exception.TunkkiError;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Created by jan on 21.6.2016.
- */
-public class AsIntBuiltinFunction extends BuiltinFunction {
- public AsIntBuiltinFunction() {
- super(
- Arrays.asList("expression")
- );
- }
-
- @Override
- public String getName() {
- return "as_int";
- }
-
- @Override
- public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- if (params.size() != 1) {
- return null;
- }
- Datatype param = params.get(0);
- int i = 0;
- if (param instanceof StringDatatype) {
- try {
- i = Integer.parseInt(((StringDatatype) param).getData());
- }
- catch (NumberFormatException ex) {
- return null;
- }
- }
- else if (param instanceof IntegerDatatype) {
- i = ((IntegerDatatype) param).getData();
- }
- else if (param instanceof BooleanDatatype) {
- i = ((BooleanDatatype) param).getData() ? 1 : 0;
- }
- return new IntegerDatatype(i);
- }
-}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java
index 5d6e5c2..76b4916 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java
@@ -1,5 +1,8 @@
package com.jantuomi.tunkki.core.runtime.builtins.globals;
+import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsBooleanBuiltinFunction;
+import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsIntBuiltinFunction;
+
import java.util.ArrayList;
import java.util.List;
@@ -22,6 +25,7 @@ public class BuiltinManager {
new InputBuiltinFunction();
new ConcatBuiltinFunction();
new AsIntBuiltinFunction();
+ new AsBooleanBuiltinFunction();
new IncludeBuiltinFunction();
new ListBuiltinFunction();
new ContainsBuiltinFunction();
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
new file mode 100644
index 0000000..ed47b6e
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java
@@ -0,0 +1,42 @@
+package com.jantuomi.tunkki.core.runtime.builtins.globals.cast;
+
+import com.jantuomi.tunkki.core.parser.datatype.*;
+import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction;
+import com.jantuomi.tunkki.exception.TunkkiError;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 21.6.2016.
+ */
+public class AsBooleanBuiltinFunction extends BuiltinFunction {
+ public AsBooleanBuiltinFunction() {
+ super(
+ Arrays.asList("expression")
+ );
+ }
+
+ @Override
+ public String getName() {
+ return "as_bool";
+ }
+
+ @Override
+ public BooleanDatatype evaluate(List<Datatype> params) throws TunkkiError {
+ if (params.size() != 1) {
+ return null;
+ }
+ Datatype param = params.get(0);
+ boolean b;
+ switch (param.getType()) {
+ case Integer:
+ return new BooleanDatatype(((IntegerDatatype) param).getData() != 0);
+ case Boolean:
+ return new BooleanDatatype(((BooleanDatatype) param).getData());
+ default:
+ throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Boolean", param.toString());
+ }
+
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
new file mode 100644
index 0000000..55e542d
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java
@@ -0,0 +1,52 @@
+package com.jantuomi.tunkki.core.runtime.builtins.globals.cast;
+
+import com.jantuomi.tunkki.core.parser.datatype.*;
+import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction;
+import com.jantuomi.tunkki.exception.TunkkiError;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 21.6.2016.
+ */
+public class AsIntBuiltinFunction extends BuiltinFunction {
+ public AsIntBuiltinFunction() {
+ super(
+ Arrays.asList("expression")
+ );
+ }
+
+ @Override
+ public String getName() {
+ return "as_int";
+ }
+
+ @Override
+ public IntegerDatatype evaluate(List<Datatype> params) throws TunkkiError {
+ if (params.size() != 1) {
+ return null;
+ }
+ Datatype param = params.get(0);
+ int i;
+ switch (param.getType()) {
+ case String:
+ try {
+ i = Integer.parseInt(((StringDatatype) param).getData());
+ }
+ catch (NumberFormatException ex) {
+ throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Integer", ((StringDatatype) param).getData());
+ }
+ return new IntegerDatatype(i);
+ case Integer:
+ return new IntegerDatatype(((IntegerDatatype) param).getData());
+ case Boolean:
+ return new IntegerDatatype(((BooleanDatatype) param).getData() ? 1 : 0);
+ case Double:
+ return new IntegerDatatype((int) Math.round(((DoubleDatatype) param).getData()));
+ default:
+ throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Integer", param.toString());
+ }
+
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/exception/TunkkiError.java b/src/main/com/jantuomi/tunkki/exception/TunkkiError.java
index dd48077..2f133e6 100644
--- a/src/main/com/jantuomi/tunkki/exception/TunkkiError.java
+++ b/src/main/com/jantuomi/tunkki/exception/TunkkiError.java
@@ -20,7 +20,7 @@ public class TunkkiError extends Exception {
UndeclaredSymbolError,
IncludeError,
GeneralError,
- NadaError
+ CastError, NadaError
}
private static Map<ExceptionType, String> errorTexts = new HashMap<>();
@@ -35,6 +35,7 @@ public class TunkkiError extends Exception {
errorTexts.put(ExceptionType.IncludeError, "File %s could not be included.");
errorTexts.put(ExceptionType.GeneralError, "%s");
errorTexts.put(ExceptionType.NadaError, "Can't do operation with a nada value.");
+ errorTexts.put(ExceptionType.CastError, "Illegal cast to type %s from value %s.");
}
private ExceptionType exceptionType;