aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-07-28 14:06:14 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-07-28 14:06:14 +0300
commit33fde43199c0b9874d362ee13c8b752e7174527d (patch)
tree3757ff0556b684d31e0483ccbe3c679f3fd3a25c /src
parentef996e05bf43f67d01ea5ae3c03285a8df25c01a (diff)
Add builtins to the pool in their individual constructors
Implement toString for lists of DataContainers
Diffstat (limited to 'src')
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/datatype/DataContainer.java12
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java1
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java26
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java6
5 files changed, 34 insertions, 15 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/DataContainer.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/DataContainer.java
index de18278..344d6c9 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/datatype/DataContainer.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/DataContainer.java
@@ -2,6 +2,10 @@ package com.jantuomi.tunkki.core.parser.datatype;
import com.jantuomi.tunkki.exception.TunkkiError;
+import javax.xml.crypto.Data;
+import java.util.List;
+import java.util.stream.Collectors;
+
/**
* Created by jan on 11.6.2016.
*/
@@ -35,4 +39,12 @@ abstract public class DataContainer<T> {
public abstract DataContainer<T> subtract(DataContainer<T> other) throws TunkkiError;
public abstract DataContainer<T> multiply(DataContainer<T> other) throws TunkkiError;
public abstract DataContainer<T> divide(DataContainer<T> other) throws TunkkiError;
+
+ public static String toString(List<DataContainer> variables) {
+ String result = "[";
+ List<String> strings = variables.stream().map(DataContainer::toString).collect(Collectors.toList());
+ result += String.join(", ", strings);
+ result += "]";
+ return result;
+ }
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java
index 288e232..af72ae0 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java
@@ -12,6 +12,7 @@ import java.util.List;
abstract public class BuiltinFunction extends Function{
public BuiltinFunction(List<String> argumentNames) {
super(argumentNames, null);
+ BuiltinManager.getInstance().addBuiltin(this);
}
@Override
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 534430b..298fe55 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
@@ -15,20 +15,26 @@ public class BuiltinManager {
return instance;
}
- private List<Function> builtins = new ArrayList<>();
+ private List<BuiltinFunction> builtins;
private BuiltinManager() {
- builtins.add(new OutputBuiltinFunction());
- builtins.add(new InputBuiltinFunction());
- builtins.add(new ConcatBuiltinFunction());
- builtins.add(new AsIntBuiltinFunction());
- builtins.add(new IncludeBuiltinFunction());
- builtins.add(new ListBuiltinFunction());
- builtins.add(new ContainsBuiltinFunction());
- builtins.add(new GetBuiltinFunction());
+ instance = this;
+ builtins = new ArrayList<>();
+ new OutputBuiltinFunction();
+ new InputBuiltinFunction();
+ new ConcatBuiltinFunction();
+ new AsIntBuiltinFunction();
+ new IncludeBuiltinFunction();
+ new ListBuiltinFunction();
+ new ContainsBuiltinFunction();
+ new GetBuiltinFunction();
}
- public List<Function> getBuiltins() {
+ public void addBuiltin(BuiltinFunction func) {
+ builtins.add(func);
+ }
+
+ public List<BuiltinFunction> getBuiltins() {
return builtins;
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java
index ec8d6c3..776fde0 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java
@@ -19,11 +19,11 @@ public class ContainsBuiltinFunction extends BuiltinFunction {
@Override
public DataContainer evaluate(List<DataContainer> params) throws TunkkiError {
if (params.size() != 2) {
- throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'contains' expects two arguments.");
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, getName(), DataContainer.toString(params));
}
if (params.get(0).getType() != DataContainer.Type.List) {
- throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'contains' expects a list as its first argument.");
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, getName(), DataContainer.toString(params));
}
ListDataContainer list = (ListDataContainer) params.get(0);
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java
index b6d42cf..e9d10d1 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java
@@ -20,15 +20,15 @@ public class GetBuiltinFunction extends BuiltinFunction {
@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.");
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, getName(), params.toString());
}
if (params.get(0).getType() != DataContainer.Type.List) {
- throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'get' expects a list as its first argument.");
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, getName(), DataContainer.toString(params));
}
if (params.get(1).getType() != DataContainer.Type.Integer) {
- throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'get' expects an integer as its second argument.");
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, getName(), DataContainer.toString(params));
}
ListDataContainer list = (ListDataContainer) params.get(0);