diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/ArrayFunctions.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/ArrayFunctions.java index 0bae4ca..91b8598 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/ArrayFunctions.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/ArrayFunctions.java @@ -10,7 +10,7 @@ import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.ValueUtils; import java.io.UnsupportedEncodingException; -public final class ArrayFunctions { +final class ArrayFunctions { private ArrayFunctions() { } diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/NumberFunctions.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/NumberFunctions.java index 2b65451..9bdbd24 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/NumberFunctions.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/NumberFunctions.java @@ -6,7 +6,7 @@ import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Value; -public final class NumberFunctions { +final class NumberFunctions { private NumberFunctions() { } diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/StringFunctions.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/StringFunctions.java index b89de09..c36ca1b 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/StringFunctions.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/StringFunctions.java @@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; import java.io.UnsupportedEncodingException; -public final class StringFunctions { +final class StringFunctions { private StringFunctions() { } @@ -21,6 +21,11 @@ public final class StringFunctions { throw new OwnLangRuntimeException(uee); } } + + static Value parseDouble(Value[] args) { + Arguments.check(1, args.length); + return NumberValue.of(Double.parseDouble(args[0].asString())); + } static Value parseInt(Value[] args) { Arguments.checkOrOr(1, 2, args.length); @@ -45,7 +50,7 @@ public final class StringFunctions { // First blank line is omitted final StringBuilder sb = new StringBuilder(); - final int firstLineIndex = (isBlank(lines[0])) ? 1 : 0; + final int firstLineIndex = (lines[0].isBlank()) ? 1 : 0; final int lastLineIndex = lines.length - 1; int index = firstLineIndex; while (true) { @@ -54,7 +59,7 @@ public final class StringFunctions { sb.append('\n'); } // Process last line - if (lastLineIndex >= (firstLineIndex + 1) && !isBlank(lines[lastLineIndex])) { + if (lastLineIndex >= (firstLineIndex + 1) && !lines[lastLineIndex].isBlank()) { sb.append('\n').append(strip(lines[lastLineIndex], marginPrefix)); } return new StringValue(sb.toString()); @@ -68,10 +73,6 @@ public final class StringFunctions { return str; } } - - private static boolean isBlank(String str) { - return firstNonBlankIndex(str) == str.length(); - } private static int firstNonBlankIndex(String str) { final int length = str.length(); diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/SystemFunctions.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/SystemFunctions.java new file mode 100644 index 0000000..9c8f7a3 --- /dev/null +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/SystemFunctions.java @@ -0,0 +1,42 @@ +package com.annimon.ownlang.modules.std; + +import com.annimon.ownlang.lib.*; + +final class SystemFunctions { + + private SystemFunctions() { } + + static Value exit(Value[] args) { + Arguments.check(1, args.length); + System.exit(args[0].asInt()); + return NumberValue.ZERO; + } + + static Value getenv(Value[] args) { + Arguments.checkOrOr(1, 2, args.length); + final var env = System.getenv(args[0].asString()); + if (env == null) { + return args.length == 2 ? args[1] : StringValue.EMPTY; + } + return new StringValue(env); + } + + static Value getprop(Value[] args) { + Arguments.checkOrOr(1, 2, args.length); + final var env = System.getProperty(args[0].asString()); + if (env == null) { + return args.length == 2 ? args[1] : StringValue.EMPTY; + } + return new StringValue(env); + } + + static Value time(Value[] args) { + Arguments.check(0, args.length); + return NumberValue.of(System.currentTimeMillis()); + } + + static Value nanotime(Value[] args) { + Arguments.check(0, args.length); + return NumberValue.of(System.nanoTime()); + } +} diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std.java index fe76b58..c3fafa0 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std.java @@ -4,6 +4,7 @@ import com.annimon.ownlang.Shared; import com.annimon.ownlang.Version; import com.annimon.ownlang.lib.*; import com.annimon.ownlang.modules.Module; +import java.util.HashMap; import java.util.Map; import static java.util.Map.entry; @@ -30,22 +31,31 @@ public final class std implements Module { @Override public Map functions() { - return Map.ofEntries( + // std, System + final var result = new HashMap<>(Map.ofEntries( entry("echo", new std_echo()), entry("readln", new std_readln()), entry("length", new std_length()), entry("rand", new std_rand()), - entry("time", new std_time()), + entry("time", SystemFunctions::time), + entry("nanotime", SystemFunctions::nanotime), entry("sleep", new std_sleep()), entry("thread", new std_thread()), entry("sync", new std_sync()), entry("try", new std_try()), entry("default", new std_default()), + entry("exit", SystemFunctions::exit), + entry("getenv", SystemFunctions::getenv), + entry("getprop", SystemFunctions::getprop) + )); - // Numbers - entry("toHexString", NumberFunctions::toHexString), + // Numbers + result.putAll(Map.ofEntries( + entry("toHexString", NumberFunctions::toHexString) + )); - // String + // String + result.putAll(Map.ofEntries( entry("getBytes", StringFunctions::getBytes), entry("sprintf", new std_sprintf()), entry("split", new std_split()), @@ -62,9 +72,12 @@ public final class std implements Module { entry("replaceFirst", new std_replacefirst()), entry("parseInt", StringFunctions::parseInt), entry("parseLong", StringFunctions::parseLong), - entry("stripMargin", StringFunctions::stripMargin), + entry("parseDouble", StringFunctions::parseDouble), + entry("stripMargin", StringFunctions::stripMargin) + )); - // Arrays and map, + // Arrays and map + result.putAll(Map.ofEntries( entry("newarray", new std_newarray()), entry("join", new std_join()), entry("sort", new std_sort()), @@ -75,6 +88,7 @@ public final class std implements Module { entry("arraySplice", new std_arraySplice()), entry("range", new std_range()), entry("stringFromBytes", ArrayFunctions::stringFromBytes) - ); + )); + return Map.copyOf(result); } } diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayCombine.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayCombine.java index d9a32a4..78a4837 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayCombine.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayCombine.java @@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.MapValue; import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Value; -public final class std_arrayCombine implements Function { +final class std_arrayCombine implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeyExists.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeyExists.java index fb4b241..51eff70 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeyExists.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeyExists.java @@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Value; -public final class std_arrayKeyExists implements Function { +final class std_arrayKeyExists implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeys.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeys.java index e2f1565..2bd2e47 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeys.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayKeys.java @@ -11,7 +11,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public final class std_arrayKeys implements Function { +final class std_arrayKeys implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arraySplice.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arraySplice.java index 2614bc2..daf6870 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arraySplice.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arraySplice.java @@ -7,7 +7,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Value; -public final class std_arraySplice implements Function { +final class std_arraySplice implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayValues.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayValues.java index f263d0f..1a7de75 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayValues.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_arrayValues.java @@ -11,7 +11,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public final class std_arrayValues implements Function { +final class std_arrayValues implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_charat.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_charat.java index de0407a..35b8ba1 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_charat.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_charat.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Value; -public final class std_charat implements Function { +final class std_charat implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_default.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_default.java index 76b96ad..f2d3a81 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_default.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_default.java @@ -1,13 +1,8 @@ package com.annimon.ownlang.modules.std; -import com.annimon.ownlang.lib.Arguments; -import com.annimon.ownlang.lib.ArrayValue; -import com.annimon.ownlang.lib.Function; -import com.annimon.ownlang.lib.MapValue; -import com.annimon.ownlang.lib.Types; -import com.annimon.ownlang.lib.Value; +import com.annimon.ownlang.lib.*; -public final class std_default implements Function { +final class std_default implements Function { @Override public Value execute(Value[] args) { @@ -22,17 +17,13 @@ public final class std_default implements Function { if (value == null || value.raw() == null) { return true; } - switch (value.type()) { - case Types.NUMBER: - return (value.asInt() == 0); - case Types.STRING: - return (value.asString().isEmpty()); - case Types.ARRAY: - return ((ArrayValue) value).size() == 0; - case Types.MAP: - return ((MapValue) value).size() == 0; - default: - return false; - } + return switch (value.type()) { + case Types.NUMBER -> (value.asInt() == 0); + case Types.STRING -> (value.asString().isEmpty()); + case Types.ARRAY -> ((ArrayValue) value).size() == 0; + case Types.MAP -> ((MapValue) value).size() == 0; + case Types.CLASS -> ((ClassInstance) value).getThisMap().size() == 0; + default -> false; + }; } } \ No newline at end of file diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_echo.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_echo.java index 27bdfb6..3c4e68b 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_echo.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_echo.java @@ -5,14 +5,14 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Value; -public final class std_echo implements Function { +final class std_echo implements Function { @Override public Value execute(Value[] args) { final StringBuilder sb = new StringBuilder(); for (Value arg : args) { sb.append(arg.asString()); - sb.append(" "); + sb.append(' '); } Console.println(sb.toString()); return NumberValue.ZERO; diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_indexof.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_indexof.java index 5b9e1db..6168042 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_indexof.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_indexof.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Value; -public final class std_indexof implements Function { +final class std_indexof implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_join.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_join.java index 7806c93..033ac1c 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_join.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_join.java @@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Value; -public final class std_join implements Function { +final class std_join implements Function { @Override public Value execute(Value[] args) { @@ -18,17 +18,12 @@ public final class std_join implements Function { } final ArrayValue array = (ArrayValue) args[0]; - switch (args.length) { - case 1: - return ArrayValue.joinToString(array, "", "", ""); - case 2: - return ArrayValue.joinToString(array, args[1].asString(), "", ""); - case 3: - return ArrayValue.joinToString(array, args[1].asString(), args[2].asString(), args[2].asString()); - case 4: - return ArrayValue.joinToString(array, args[1].asString(), args[2].asString(), args[3].asString()); - default: - throw new ArgumentsMismatchException("Wrong number of arguments"); - } + return switch (args.length) { + case 1 -> ArrayValue.joinToString(array, "", "", ""); + case 2 -> ArrayValue.joinToString(array, args[1].asString(), "", ""); + case 3 -> ArrayValue.joinToString(array, args[1].asString(), args[2].asString(), args[2].asString()); + case 4 -> ArrayValue.joinToString(array, args[1].asString(), args[2].asString(), args[3].asString()); + default -> throw new ArgumentsMismatchException("Wrong number of arguments"); + }; } } diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_lastindexof.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_lastindexof.java index b412466..ab60e3a 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_lastindexof.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_lastindexof.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Value; -public final class std_lastindexof implements Function { +final class std_lastindexof implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_length.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_length.java index 67487ce..5e58b50 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_length.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_length.java @@ -2,32 +2,24 @@ package com.annimon.ownlang.modules.std; import com.annimon.ownlang.lib.*; -public final class std_length implements Function { +final class std_length implements Function { @Override public Value execute(Value[] args) { Arguments.check(1, args.length); - final Value val = args[0]; - final int length; - switch (val.type()) { - case Types.ARRAY: - length = ((ArrayValue) val).size(); - break; - case Types.MAP: - length = ((MapValue) val).size(); - break; - case Types.STRING: - length = ((StringValue) val).length(); - break; - case Types.FUNCTION: - final Function func = ((FunctionValue) val).getValue(); - length = func.getArgsCount(); - break; - default: - length = 0; - - } + final Value value = args[0]; + final int length = switch (value.type()) { + case Types.ARRAY -> ((ArrayValue) value).size(); + case Types.MAP -> ((MapValue) value).size(); + case Types.CLASS -> ((ClassInstance) value).getThisMap().size(); + case Types.STRING -> ((StringValue) value).length(); + case Types.FUNCTION -> { + final Function func = ((FunctionValue) value).getValue(); + yield func.getArgsCount(); + } + default -> 0; + }; return NumberValue.of(length); } } \ No newline at end of file diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_newarray.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_newarray.java index 78029e9..33c1b4d 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_newarray.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_newarray.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Value; -public final class std_newarray implements Function { +final class std_newarray implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_rand.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_rand.java index 5696253..0888abc 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_rand.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_rand.java @@ -6,7 +6,7 @@ import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Value; import java.util.Random; -public final class std_rand implements Function { +final class std_rand implements Function { private static final Random RND = new Random(); diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_range.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_range.java index a7336ae..1feb1b9 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_range.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_range.java @@ -3,32 +3,16 @@ package com.annimon.ownlang.modules.std; import com.annimon.ownlang.lib.*; import java.util.Iterator; -public final class std_range implements Function { +final class std_range implements Function { @Override public Value execute(Value[] args) { Arguments.checkRange(1, 3, args.length); - - final long from, to, step; - switch (args.length) { - default: - case 1: - from = 0; - to = getLong(args[0]); - step = 1; - break; - case 2: - from = getLong(args[0]); - to = getLong(args[1]); - step = 1; - break; - case 3: - from = getLong(args[0]); - to = getLong(args[1]); - step = getLong(args[2]); - break; - } - return RangeValue.of(from, to, step); + return switch (args.length) { + default -> RangeValue.of(0, getLong(args[0]), 1); + case 2 -> RangeValue.of(getLong(args[0]), getLong(args[1]), 1); + case 3 -> RangeValue.of(getLong(args[0]), getLong(args[1]), getLong(args[2])); + }; } private static long getLong(Value v) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_readln.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_readln.java index 50605e7..703f789 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_readln.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_readln.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; import java.util.Scanner; -public final class std_readln implements Function { +final class std_readln implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replace.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replace.java index 8a274a1..aee1dd5 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replace.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replace.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_replace implements Function { +final class std_replace implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replaceall.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replaceall.java index 6e3c283..74e425d 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replaceall.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replaceall.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_replaceall implements Function { +final class std_replaceall implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replacefirst.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replacefirst.java index c02e554..04ba373 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replacefirst.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_replacefirst.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_replacefirst implements Function { +final class std_replacefirst implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sleep.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sleep.java index f0742aa..9d01de1 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sleep.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sleep.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.Value; -public final class std_sleep implements Function { +final class std_sleep implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sort.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sort.java index 6735fc7..adb6728 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sort.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sort.java @@ -10,7 +10,7 @@ import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.ValueUtils; import java.util.Arrays; -public final class std_sort implements Function { +final class std_sort implements Function { @Override public Value execute(Value[] args) { @@ -19,17 +19,14 @@ public final class std_sort implements Function { throw new TypeException("Array expected in first argument"); } final Value[] elements = ((ArrayValue) args[0]).getCopyElements(); - + switch (args.length) { - case 1: - Arrays.sort(elements); - break; - case 2: + case 1 -> Arrays.sort(elements); + case 2 -> { final Function comparator = ValueUtils.consumeFunction(args[1], 1); Arrays.sort(elements, (o1, o2) -> comparator.execute(o1, o2).asInt()); - break; - default: - throw new ArgumentsMismatchException("Wrong number of arguments"); + } + default -> throw new ArgumentsMismatchException("Wrong number of arguments"); } return new ArrayValue(elements); diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_split.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_split.java index 7b2c5a1..73aa73f 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_split.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_split.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.ArrayValue; import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.Value; -public final class std_split implements Function { +final class std_split implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sprintf.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sprintf.java index 5dfdb11..944f640 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sprintf.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sprintf.java @@ -6,7 +6,7 @@ import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Value; -public final class std_sprintf implements Function { +final class std_sprintf implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_substring.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_substring.java index dcae235..84f769e 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_substring.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_substring.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_substring implements Function { +final class std_substring implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sync.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sync.java index 2c91c82..04a4d31 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sync.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_sync.java @@ -10,7 +10,7 @@ import com.annimon.ownlang.lib.ValueUtils; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; -public final class std_sync implements Function { +final class std_sync implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_thread.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_thread.java index d4ece89..ca36114 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_thread.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_thread.java @@ -3,7 +3,7 @@ package com.annimon.ownlang.modules.std; import com.annimon.ownlang.Console; import com.annimon.ownlang.lib.*; -public final class std_thread implements Function { +final class std_thread implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_time.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_time.java deleted file mode 100644 index f5fc062..0000000 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_time.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.annimon.ownlang.modules.std; - -import com.annimon.ownlang.lib.Function; -import com.annimon.ownlang.lib.NumberValue; -import com.annimon.ownlang.lib.Value; - -public final class std_time implements Function { - - @Override - public Value execute(Value[] args) { - return NumberValue.of(System.currentTimeMillis()); - } -} \ No newline at end of file diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tochar.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tochar.java index b59bc0d..d052cf8 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tochar.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tochar.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_tochar implements Function { +final class std_tochar implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tolowercase.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tolowercase.java index f27fe01..813f78d 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tolowercase.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_tolowercase.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_tolowercase implements Function { +final class std_tolowercase implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_touppercase.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_touppercase.java index e59397c..74c071c 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_touppercase.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_touppercase.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_touppercase implements Function { +final class std_touppercase implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_trim.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_trim.java index de57bbc..7ee1cba 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_trim.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_trim.java @@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.Value; -public final class std_trim implements Function { +final class std_trim implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_try.java b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_try.java index 8546119..bf37ae4 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_try.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/std/std_try.java @@ -2,7 +2,7 @@ package com.annimon.ownlang.modules.std; import com.annimon.ownlang.lib.*; -public final class std_try implements Function { +final class std_try implements Function { @Override public Value execute(Value[] args) { diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/types/types.java b/modules/main/src/main/java/com/annimon/ownlang/modules/types/types.java index 613080a..5a84570 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/types/types.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/types/types.java @@ -19,7 +19,8 @@ public final class types implements Module { entry("STRING", NumberValue.of(Types.STRING)), entry("ARRAY", NumberValue.of(Types.ARRAY)), entry("MAP", NumberValue.of(Types.MAP)), - entry("FUNCTION", NumberValue.of(Types.FUNCTION)) + entry("FUNCTION", NumberValue.of(Types.FUNCTION)), + entry("CLASS", NumberValue.of(Types.CLASS)) ); }