[std] Add parseDouble, nanotime, exit, getenv, getprop

This commit is contained in:
aNNiMON 2023-10-28 18:54:19 +03:00 committed by Victor Melnik
parent c3a893ea25
commit 5d00598e8c
38 changed files with 146 additions and 142 deletions

View File

@ -10,7 +10,7 @@ import com.annimon.ownlang.lib.Value;
import com.annimon.ownlang.lib.ValueUtils; import com.annimon.ownlang.lib.ValueUtils;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
public final class ArrayFunctions { final class ArrayFunctions {
private ArrayFunctions() { } private ArrayFunctions() { }

View File

@ -6,7 +6,7 @@ import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class NumberFunctions { final class NumberFunctions {
private NumberFunctions() { } private NumberFunctions() { }

View File

@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
public final class StringFunctions { final class StringFunctions {
private StringFunctions() { } private StringFunctions() { }
@ -22,6 +22,11 @@ public final class StringFunctions {
} }
} }
static Value parseDouble(Value[] args) {
Arguments.check(1, args.length);
return NumberValue.of(Double.parseDouble(args[0].asString()));
}
static Value parseInt(Value[] args) { static Value parseInt(Value[] args) {
Arguments.checkOrOr(1, 2, args.length); Arguments.checkOrOr(1, 2, args.length);
final int radix = (args.length == 2) ? args[1].asInt() : 10; final int radix = (args.length == 2) ? args[1].asInt() : 10;
@ -45,7 +50,7 @@ public final class StringFunctions {
// First blank line is omitted // First blank line is omitted
final StringBuilder sb = new StringBuilder(); 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; final int lastLineIndex = lines.length - 1;
int index = firstLineIndex; int index = firstLineIndex;
while (true) { while (true) {
@ -54,7 +59,7 @@ public final class StringFunctions {
sb.append('\n'); sb.append('\n');
} }
// Process last line // 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)); sb.append('\n').append(strip(lines[lastLineIndex], marginPrefix));
} }
return new StringValue(sb.toString()); return new StringValue(sb.toString());
@ -69,10 +74,6 @@ public final class StringFunctions {
} }
} }
private static boolean isBlank(String str) {
return firstNonBlankIndex(str) == str.length();
}
private static int firstNonBlankIndex(String str) { private static int firstNonBlankIndex(String str) {
final int length = str.length(); final int length = str.length();
for (int index = 0; index < length; index++) { for (int index = 0; index < length; index++) {

View File

@ -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());
}
}

View File

@ -4,6 +4,7 @@ import com.annimon.ownlang.Shared;
import com.annimon.ownlang.Version; import com.annimon.ownlang.Version;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.modules.Module; import com.annimon.ownlang.modules.Module;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static java.util.Map.entry; import static java.util.Map.entry;
@ -30,22 +31,31 @@ public final class std implements Module {
@Override @Override
public Map<String, Function> functions() { public Map<String, Function> functions() {
return Map.ofEntries( // std, System
final var result = new HashMap<>(Map.ofEntries(
entry("echo", new std_echo()), entry("echo", new std_echo()),
entry("readln", new std_readln()), entry("readln", new std_readln()),
entry("length", new std_length()), entry("length", new std_length()),
entry("rand", new std_rand()), entry("rand", new std_rand()),
entry("time", new std_time()), entry("time", SystemFunctions::time),
entry("nanotime", SystemFunctions::nanotime),
entry("sleep", new std_sleep()), entry("sleep", new std_sleep()),
entry("thread", new std_thread()), entry("thread", new std_thread()),
entry("sync", new std_sync()), entry("sync", new std_sync()),
entry("try", new std_try()), entry("try", new std_try()),
entry("default", new std_default()), entry("default", new std_default()),
entry("exit", SystemFunctions::exit),
entry("getenv", SystemFunctions::getenv),
entry("getprop", SystemFunctions::getprop)
));
// Numbers // Numbers
entry("toHexString", NumberFunctions::toHexString), result.putAll(Map.ofEntries(
entry("toHexString", NumberFunctions::toHexString)
));
// String // String
result.putAll(Map.ofEntries(
entry("getBytes", StringFunctions::getBytes), entry("getBytes", StringFunctions::getBytes),
entry("sprintf", new std_sprintf()), entry("sprintf", new std_sprintf()),
entry("split", new std_split()), entry("split", new std_split()),
@ -62,9 +72,12 @@ public final class std implements Module {
entry("replaceFirst", new std_replacefirst()), entry("replaceFirst", new std_replacefirst()),
entry("parseInt", StringFunctions::parseInt), entry("parseInt", StringFunctions::parseInt),
entry("parseLong", StringFunctions::parseLong), 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("newarray", new std_newarray()),
entry("join", new std_join()), entry("join", new std_join()),
entry("sort", new std_sort()), entry("sort", new std_sort()),
@ -75,6 +88,7 @@ public final class std implements Module {
entry("arraySplice", new std_arraySplice()), entry("arraySplice", new std_arraySplice()),
entry("range", new std_range()), entry("range", new std_range()),
entry("stringFromBytes", ArrayFunctions::stringFromBytes) entry("stringFromBytes", ArrayFunctions::stringFromBytes)
); ));
return Map.copyOf(result);
} }
} }

View File

@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.MapValue;
import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_arrayCombine implements Function { final class std_arrayCombine implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_arrayKeyExists implements Function { final class std_arrayKeyExists implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -11,7 +11,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public final class std_arrayKeys implements Function { final class std_arrayKeys implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -7,7 +7,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_arraySplice implements Function { final class std_arraySplice implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -11,7 +11,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public final class std_arrayValues implements Function { final class std_arrayValues implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_charat implements Function { final class std_charat implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -1,13 +1,8 @@
package com.annimon.ownlang.modules.std; package com.annimon.ownlang.modules.std;
import com.annimon.ownlang.lib.Arguments; import com.annimon.ownlang.lib.*;
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;
public final class std_default implements Function { final class std_default implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {
@ -22,17 +17,13 @@ public final class std_default implements Function {
if (value == null || value.raw() == null) { if (value == null || value.raw() == null) {
return true; return true;
} }
switch (value.type()) { return switch (value.type()) {
case Types.NUMBER: case Types.NUMBER -> (value.asInt() == 0);
return (value.asInt() == 0); case Types.STRING -> (value.asString().isEmpty());
case Types.STRING: case Types.ARRAY -> ((ArrayValue) value).size() == 0;
return (value.asString().isEmpty()); case Types.MAP -> ((MapValue) value).size() == 0;
case Types.ARRAY: case Types.CLASS -> ((ClassInstance) value).getThisMap().size() == 0;
return ((ArrayValue) value).size() == 0; default -> false;
case Types.MAP: };
return ((MapValue) value).size() == 0;
default:
return false;
}
} }
} }

View File

@ -5,14 +5,14 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_echo implements Function { final class std_echo implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (Value arg : args) { for (Value arg : args) {
sb.append(arg.asString()); sb.append(arg.asString());
sb.append(" "); sb.append(' ');
} }
Console.println(sb.toString()); Console.println(sb.toString());
return NumberValue.ZERO; return NumberValue.ZERO;

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_indexof implements Function { final class std_indexof implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -8,7 +8,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_join implements Function { final class std_join implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {
@ -18,17 +18,12 @@ public final class std_join implements Function {
} }
final ArrayValue array = (ArrayValue) args[0]; final ArrayValue array = (ArrayValue) args[0];
switch (args.length) { return switch (args.length) {
case 1: case 1 -> ArrayValue.joinToString(array, "", "", "");
return ArrayValue.joinToString(array, "", "", ""); case 2 -> ArrayValue.joinToString(array, args[1].asString(), "", "");
case 2: case 3 -> ArrayValue.joinToString(array, args[1].asString(), args[2].asString(), args[2].asString());
return ArrayValue.joinToString(array, args[1].asString(), "", ""); case 4 -> ArrayValue.joinToString(array, args[1].asString(), args[2].asString(), args[3].asString());
case 3: default -> throw new ArgumentsMismatchException("Wrong number of arguments");
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");
}
} }
} }

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_lastindexof implements Function { final class std_lastindexof implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -2,32 +2,24 @@ package com.annimon.ownlang.modules.std;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
public final class std_length implements Function { final class std_length implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {
Arguments.check(1, args.length); Arguments.check(1, args.length);
final Value val = args[0]; final Value value = args[0];
final int length; final int length = switch (value.type()) {
switch (val.type()) { case Types.ARRAY -> ((ArrayValue) value).size();
case Types.ARRAY: case Types.MAP -> ((MapValue) value).size();
length = ((ArrayValue) val).size(); case Types.CLASS -> ((ClassInstance) value).getThisMap().size();
break; case Types.STRING -> ((StringValue) value).length();
case Types.MAP: case Types.FUNCTION -> {
length = ((MapValue) val).size(); final Function func = ((FunctionValue) value).getValue();
break; yield func.getArgsCount();
case Types.STRING: }
length = ((StringValue) val).length(); default -> 0;
break; };
case Types.FUNCTION:
final Function func = ((FunctionValue) val).getValue();
length = func.getArgsCount();
break;
default:
length = 0;
}
return NumberValue.of(length); return NumberValue.of(length);
} }
} }

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_newarray implements Function { final class std_newarray implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -6,7 +6,7 @@ import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
import java.util.Random; import java.util.Random;
public final class std_rand implements Function { final class std_rand implements Function {
private static final Random RND = new Random(); private static final Random RND = new Random();

View File

@ -3,32 +3,16 @@ package com.annimon.ownlang.modules.std;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.util.Iterator; import java.util.Iterator;
public final class std_range implements Function { final class std_range implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {
Arguments.checkRange(1, 3, args.length); Arguments.checkRange(1, 3, args.length);
return switch (args.length) {
final long from, to, step; default -> RangeValue.of(0, getLong(args[0]), 1);
switch (args.length) { case 2 -> RangeValue.of(getLong(args[0]), getLong(args[1]), 1);
default: case 3 -> RangeValue.of(getLong(args[0]), getLong(args[1]), getLong(args[2]));
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);
} }
private static long getLong(Value v) { private static long getLong(Value v) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
import java.util.Scanner; import java.util.Scanner;
public final class std_readln implements Function { final class std_readln implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_replace implements Function { final class std_replace implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_replaceall implements Function { final class std_replaceall implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_replacefirst implements Function { final class std_replacefirst implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.NumberValue; import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_sleep implements Function { final class std_sleep implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -10,7 +10,7 @@ import com.annimon.ownlang.lib.Value;
import com.annimon.ownlang.lib.ValueUtils; import com.annimon.ownlang.lib.ValueUtils;
import java.util.Arrays; import java.util.Arrays;
public final class std_sort implements Function { final class std_sort implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {
@ -21,15 +21,12 @@ public final class std_sort implements Function {
final Value[] elements = ((ArrayValue) args[0]).getCopyElements(); final Value[] elements = ((ArrayValue) args[0]).getCopyElements();
switch (args.length) { switch (args.length) {
case 1: case 1 -> Arrays.sort(elements);
Arrays.sort(elements); case 2 -> {
break;
case 2:
final Function comparator = ValueUtils.consumeFunction(args[1], 1); final Function comparator = ValueUtils.consumeFunction(args[1], 1);
Arrays.sort(elements, (o1, o2) -> comparator.execute(o1, o2).asInt()); Arrays.sort(elements, (o1, o2) -> comparator.execute(o1, o2).asInt());
break; }
default: default -> throw new ArgumentsMismatchException("Wrong number of arguments");
throw new ArgumentsMismatchException("Wrong number of arguments");
} }
return new ArrayValue(elements); return new ArrayValue(elements);

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.ArrayValue;
import com.annimon.ownlang.lib.Function; import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_split implements Function { final class std_split implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -6,7 +6,7 @@ import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Types; import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_sprintf implements Function { final class std_sprintf implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_substring implements Function { final class std_substring implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -10,7 +10,7 @@ import com.annimon.ownlang.lib.ValueUtils;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
public final class std_sync implements Function { final class std_sync implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -3,7 +3,7 @@ package com.annimon.ownlang.modules.std;
import com.annimon.ownlang.Console; import com.annimon.ownlang.Console;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
public final class std_thread implements Function { final class std_thread implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -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());
}
}

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_tochar implements Function { final class std_tochar implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_tolowercase implements Function { final class std_tolowercase implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_touppercase implements Function { final class std_touppercase implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -5,7 +5,7 @@ import com.annimon.ownlang.lib.Function;
import com.annimon.ownlang.lib.StringValue; import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public final class std_trim implements Function { final class std_trim implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -2,7 +2,7 @@ package com.annimon.ownlang.modules.std;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
public final class std_try implements Function { final class std_try implements Function {
@Override @Override
public Value execute(Value[] args) { public Value execute(Value[] args) {

View File

@ -19,7 +19,8 @@ public final class types implements Module {
entry("STRING", NumberValue.of(Types.STRING)), entry("STRING", NumberValue.of(Types.STRING)),
entry("ARRAY", NumberValue.of(Types.ARRAY)), entry("ARRAY", NumberValue.of(Types.ARRAY)),
entry("MAP", NumberValue.of(Types.MAP)), entry("MAP", NumberValue.of(Types.MAP)),
entry("FUNCTION", NumberValue.of(Types.FUNCTION)) entry("FUNCTION", NumberValue.of(Types.FUNCTION)),
entry("CLASS", NumberValue.of(Types.CLASS))
); );
} }