aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-07-28 13:43:56 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-07-28 13:43:56 +0300
commitef996e05bf43f67d01ea5ae3c03285a8df25c01a (patch)
treeec19c6d600fbb83abfcd28871a05aad1b1c691a8 /src
parent080fcd8dc32e18bf395b73aa6a5f14fd9bcf1958 (diff)
Implement get builtin function
Get returns an element of a list at a given index
Diffstat (limited to 'src')
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java1
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java49
2 files changed, 50 insertions, 0 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
index 94c4fce..534430b 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
@@ -25,6 +25,7 @@ public class BuiltinManager {
builtins.add(new IncludeBuiltinFunction());
builtins.add(new ListBuiltinFunction());
builtins.add(new ContainsBuiltinFunction());
+ builtins.add(new GetBuiltinFunction());
}
public List<Function> getBuiltins() {
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java
new file mode 100644
index 0000000..b6d42cf
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java
@@ -0,0 +1,49 @@
+package com.jantuomi.tunkki.core.runtime.builtins;
+
+import com.jantuomi.tunkki.core.parser.datatype.BooleanDataContainer;
+import com.jantuomi.tunkki.core.parser.datatype.DataContainer;
+import com.jantuomi.tunkki.core.parser.datatype.IntegerDataContainer;
+import com.jantuomi.tunkki.core.parser.datatype.ListDataContainer;
+import com.jantuomi.tunkki.exception.TunkkiError;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 28.7.2016.
+ */
+public class GetBuiltinFunction extends BuiltinFunction {
+ public GetBuiltinFunction() {
+ super(Arrays.asList("index"));
+ }
+
+ @Override
+ public DataContainer evaluate(List<DataContainer> params) throws TunkkiError {
+ if (params.size() != 2) {
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'get' expects two arguments.");
+ }
+
+ if (params.get(0).getType() != DataContainer.Type.List) {
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'get' expects a list as its first argument.");
+ }
+
+ if (params.get(1).getType() != DataContainer.Type.Integer) {
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'get' expects an integer as its second argument.");
+ }
+
+ ListDataContainer list = (ListDataContainer) params.get(0);
+ IntegerDataContainer index = (IntegerDataContainer) params.get(1);
+
+ try {
+ return list.getData().get(index.getData());
+ }
+ catch (Exception ex) {
+ throw new TunkkiError(TunkkiError.ExceptionType.GeneralError, -1, "List index out of bounds.");
+ }
+ }
+
+ @Override
+ public String getName() {
+ return "get";
+ }
+}