aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/runtime
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-21 22:41:57 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:08 +0300
commitacf7fa23e7a254fc690f036aab61fe4d9633fc30 (patch)
tree6d87747e1c43712c892a239933b27becc72b7f34 /main/core/runtime
parent485fe60b9838708a07b1d1af7054c729cfa9bbf5 (diff)
Add builtin function 'as_int'
Diffstat (limited to 'main/core/runtime')
-rw-r--r--main/core/runtime/builtins/AsIntBuiltinFunction.java55
-rw-r--r--main/core/runtime/builtins/BuiltinManager.java1
2 files changed, 56 insertions, 0 deletions
diff --git a/main/core/runtime/builtins/AsIntBuiltinFunction.java b/main/core/runtime/builtins/AsIntBuiltinFunction.java
new file mode 100644
index 0000000..3e1c71c
--- /dev/null
+++ b/main/core/runtime/builtins/AsIntBuiltinFunction.java
@@ -0,0 +1,55 @@
+package com.jantuomi.interpreter.main.core.runtime.builtins;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.BooleanDataContainer;
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.parser.datatype.IntegerDataContainer;
+import com.jantuomi.interpreter.main.core.parser.datatype.StringDataContainer;
+import com.jantuomi.interpreter.main.core.runtime.Function;
+import com.jantuomi.interpreter.main.exception.ExceptionManager;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 21.6.2016.
+ */
+public class AsIntBuiltinFunction extends Function {
+ public AsIntBuiltinFunction() {
+ super(
+ Arrays.asList("expression"),
+ null
+ );
+ }
+
+ @Override
+ public String getName() {
+ return "as_int";
+ }
+
+ @Override
+ public DataContainer evaluate(List<DataContainer> params) throws InterpreterException {
+ if (params.size() != 1) {
+ ExceptionManager.raise(InterpreterException.ExceptionType.SyntaxError, -1, "amount of parameters to as_int");
+ }
+ DataContainer param = params.get(0);
+ int i = 0;
+ if (param instanceof StringDataContainer) {
+ try {
+ i = Integer.parseInt(((StringDataContainer) param).getData());
+ }
+ catch (NumberFormatException ex) {
+ ExceptionManager.raise(InterpreterException.ExceptionType.SyntaxError, -1,
+ String.format("parameter %s to as_int", param.toString()));
+ return null;
+ }
+ }
+ else if (param instanceof IntegerDataContainer) {
+ i = ((IntegerDataContainer) param).getData();
+ }
+ else if (param instanceof BooleanDataContainer) {
+ i = ((BooleanDataContainer) param).getData() ? 1 : 0;
+ }
+ return new IntegerDataContainer(i);
+ }
+}
diff --git a/main/core/runtime/builtins/BuiltinManager.java b/main/core/runtime/builtins/BuiltinManager.java
index a16d8e9..c6c9e26 100644
--- a/main/core/runtime/builtins/BuiltinManager.java
+++ b/main/core/runtime/builtins/BuiltinManager.java
@@ -21,6 +21,7 @@ public class BuiltinManager {
builtins.add(new OutBuiltinFunction());
builtins.add(new InBuiltinFunction());
builtins.add(new ConcatBuiltinFunction());
+ builtins.add(new AsIntBuiltinFunction());
}
public List<Function> getBuiltins() {