diff options
| author | jantuomi <jans.tuomi@gmail.com> | 2016-07-28 13:43:56 +0300 |
|---|---|---|
| committer | jantuomi <jans.tuomi@gmail.com> | 2016-07-28 13:43:56 +0300 |
| commit | ef996e05bf43f67d01ea5ae3c03285a8df25c01a (patch) | |
| tree | ec19c6d600fbb83abfcd28871a05aad1b1c691a8 /src | |
| parent | 080fcd8dc32e18bf395b73aa6a5f14fd9bcf1958 (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.java | 1 | ||||
| -rw-r--r-- | src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java | 49 |
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"; + } +} |
