diff options
| author | jantuomi <jans.tuomi@gmail.com> | 2016-08-01 15:52:53 +0300 |
|---|---|---|
| committer | jantuomi <jans.tuomi@gmail.com> | 2016-08-01 15:52:53 +0300 |
| commit | 44e67d9e2768e1de36698c1be0452b835cbfb1e0 (patch) | |
| tree | 20dddd8022590e8cd8e7c20af1505dacbd314d0e /src | |
| parent | b41c18256f3488f9cebd80fc928bf34a6abc2677 (diff) | |
Implement 'as_bool' builtin
Diffstat (limited to 'src')
5 files changed, 100 insertions, 51 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java deleted file mode 100644 index adb5209..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins.globals; - -import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; -import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -public class AsIntBuiltinFunction extends BuiltinFunction { - public AsIntBuiltinFunction() { - super( - Arrays.asList("expression") - ); - } - - @Override - public String getName() { - return "as_int"; - } - - @Override - public Datatype evaluate(List<Datatype> params) throws TunkkiError { - if (params.size() != 1) { - return null; - } - Datatype param = params.get(0); - int i = 0; - if (param instanceof StringDatatype) { - try { - i = Integer.parseInt(((StringDatatype) param).getData()); - } - catch (NumberFormatException ex) { - return null; - } - } - else if (param instanceof IntegerDatatype) { - i = ((IntegerDatatype) param).getData(); - } - else if (param instanceof BooleanDatatype) { - i = ((BooleanDatatype) param).getData() ? 1 : 0; - } - return new IntegerDatatype(i); - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java index 5d6e5c2..76b4916 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java @@ -1,5 +1,8 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; +import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsBooleanBuiltinFunction; +import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsIntBuiltinFunction; + import java.util.ArrayList; import java.util.List; @@ -22,6 +25,7 @@ public class BuiltinManager { new InputBuiltinFunction(); new ConcatBuiltinFunction(); new AsIntBuiltinFunction(); + new AsBooleanBuiltinFunction(); new IncludeBuiltinFunction(); new ListBuiltinFunction(); new ContainsBuiltinFunction(); diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java new file mode 100644 index 0000000..ed47b6e --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java @@ -0,0 +1,42 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals.cast; + +import com.jantuomi.tunkki.core.parser.datatype.*; +import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 21.6.2016. + */ +public class AsBooleanBuiltinFunction extends BuiltinFunction { + public AsBooleanBuiltinFunction() { + super( + Arrays.asList("expression") + ); + } + + @Override + public String getName() { + return "as_bool"; + } + + @Override + public BooleanDatatype evaluate(List<Datatype> params) throws TunkkiError { + if (params.size() != 1) { + return null; + } + Datatype param = params.get(0); + boolean b; + switch (param.getType()) { + case Integer: + return new BooleanDatatype(((IntegerDatatype) param).getData() != 0); + case Boolean: + return new BooleanDatatype(((BooleanDatatype) param).getData()); + default: + throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Boolean", param.toString()); + } + + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java new file mode 100644 index 0000000..55e542d --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java @@ -0,0 +1,52 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals.cast; + +import com.jantuomi.tunkki.core.parser.datatype.*; +import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 21.6.2016. + */ +public class AsIntBuiltinFunction extends BuiltinFunction { + public AsIntBuiltinFunction() { + super( + Arrays.asList("expression") + ); + } + + @Override + public String getName() { + return "as_int"; + } + + @Override + public IntegerDatatype evaluate(List<Datatype> params) throws TunkkiError { + if (params.size() != 1) { + return null; + } + Datatype param = params.get(0); + int i; + switch (param.getType()) { + case String: + try { + i = Integer.parseInt(((StringDatatype) param).getData()); + } + catch (NumberFormatException ex) { + throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Integer", ((StringDatatype) param).getData()); + } + return new IntegerDatatype(i); + case Integer: + return new IntegerDatatype(((IntegerDatatype) param).getData()); + case Boolean: + return new IntegerDatatype(((BooleanDatatype) param).getData() ? 1 : 0); + case Double: + return new IntegerDatatype((int) Math.round(((DoubleDatatype) param).getData())); + default: + throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Integer", param.toString()); + } + + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/TunkkiError.java b/src/main/com/jantuomi/tunkki/exception/TunkkiError.java index dd48077..2f133e6 100644 --- a/src/main/com/jantuomi/tunkki/exception/TunkkiError.java +++ b/src/main/com/jantuomi/tunkki/exception/TunkkiError.java @@ -20,7 +20,7 @@ public class TunkkiError extends Exception { UndeclaredSymbolError, IncludeError, GeneralError, - NadaError + CastError, NadaError } private static Map<ExceptionType, String> errorTexts = new HashMap<>(); @@ -35,6 +35,7 @@ public class TunkkiError extends Exception { errorTexts.put(ExceptionType.IncludeError, "File %s could not be included."); errorTexts.put(ExceptionType.GeneralError, "%s"); errorTexts.put(ExceptionType.NadaError, "Can't do operation with a nada value."); + errorTexts.put(ExceptionType.CastError, "Illegal cast to type %s from value %s."); } private ExceptionType exceptionType; |
