diff options
| author | jantuomi <jans.tuomi@gmail.com> | 2016-07-28 14:06:14 +0300 |
|---|---|---|
| committer | jantuomi <jans.tuomi@gmail.com> | 2016-07-28 14:06:14 +0300 |
| commit | 33fde43199c0b9874d362ee13c8b752e7174527d (patch) | |
| tree | 3757ff0556b684d31e0483ccbe3c679f3fd3a25c /src | |
| parent | ef996e05bf43f67d01ea5ae3c03285a8df25c01a (diff) | |
Add builtins to the pool in their individual constructors
Implement toString for lists of DataContainers
Diffstat (limited to 'src')
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); |
