mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Более удобная проверка аргументов функций
This commit is contained in:
parent
23f0b340d3
commit
48f3ce1a5f
32
src/com/annimon/ownlang/lib/Arguments.java
Normal file
32
src/com/annimon/ownlang/lib/Arguments.java
Normal file
@ -0,0 +1,32 @@
|
||||
package com.annimon.ownlang.lib;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
|
||||
public final class Arguments {
|
||||
|
||||
public static void check(int expected, int got) {
|
||||
if (got != expected) throw new ArgumentsMismatchException(String.format(
|
||||
"%d %s expected, got %d", expected, pluralize(expected), got));
|
||||
}
|
||||
|
||||
public static void checkAtLeast(int expected, int got) {
|
||||
if (got < expected) throw new ArgumentsMismatchException(String.format(
|
||||
"At least %d %s expected, got %d", expected, pluralize(expected), got));
|
||||
}
|
||||
|
||||
public static void checkOrOr(int expectedOne, int expectedTwo, int got) {
|
||||
if (expectedOne != got && expectedTwo != got)
|
||||
throw new ArgumentsMismatchException(String.format(
|
||||
"%d or %d arguments expected, got %d", expectedOne, expectedTwo, got));
|
||||
}
|
||||
|
||||
public static void checkRange(int from, int to, int got) {
|
||||
if (from > got || got > to)
|
||||
throw new ArgumentsMismatchException(String.format(
|
||||
"From %d to %d arguments expected, got %d", from, to, got));
|
||||
}
|
||||
|
||||
private static String pluralize(int count) {
|
||||
return (count == 1) ? "argument" : "arguments";
|
||||
}
|
||||
}
|
@ -88,7 +88,7 @@ public final class canvas implements Module {
|
||||
|
||||
private static Function intConsumer4Convert(IntConsumer4 consumer) {
|
||||
return args -> {
|
||||
if (args.length != 4) throw new ArgumentsMismatchException("Four args expected");
|
||||
Arguments.check(4, args.length);
|
||||
consumer.accept(args[0].asInt(), args[1].asInt(), args[2].asInt(), args[3].asInt());
|
||||
return NumberValue.ZERO;
|
||||
};
|
||||
@ -181,7 +181,7 @@ public final class canvas implements Module {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 3) throw new ArgumentsMismatchException("Three args expected");
|
||||
Arguments.check(3, args.length);
|
||||
int x = args[1].asInt();
|
||||
int y = args[2].asInt();
|
||||
graphics.drawString(args[0].asString(), x, y);
|
||||
|
@ -69,7 +69,7 @@ public final class files implements Module {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 1) throw new ArgumentsMismatchException("At least one argument expected");
|
||||
Arguments.checkAtLeast(1, args.length);
|
||||
|
||||
final File file = new File(args[0].asString());
|
||||
try {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
@ -8,8 +7,7 @@ public final class functional_combine implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 1) throw new ArgumentsMismatchException("At least one arg expected");
|
||||
|
||||
Arguments.checkAtLeast(1, args.length);
|
||||
Function result = null;
|
||||
for (Value arg : args) {
|
||||
if (arg.type() != Types.FUNCTION) {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.ArrayList;
|
||||
@ -12,11 +11,11 @@ public final class functional_filter implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 2) throw new ArgumentsMismatchException("At least two args expected");
|
||||
|
||||
Arguments.check(2, args.length);
|
||||
if (args[1].type() != Types.FUNCTION) {
|
||||
throw new TypeException("Function expected in second arg");
|
||||
throw new TypeException("Function expected in second argument");
|
||||
}
|
||||
|
||||
final Value container = args[0];
|
||||
final Function consumer = ((FunctionValue) args[1]).getValue();
|
||||
if (container.type() == Types.ARRAY) {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.ArrayList;
|
||||
@ -10,8 +9,7 @@ public final class functional_flatmap implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 2) throw new ArgumentsMismatchException("At least two arguments expected");
|
||||
|
||||
Arguments.check(2, args.length);
|
||||
if (args[0].type() != Types.ARRAY) {
|
||||
throw new TypeException("Array expected in first argument");
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
@ -10,7 +9,7 @@ public final class functional_foreach implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 2) throw new ArgumentsMismatchException("Two args expected");
|
||||
Arguments.check(2, args.length);
|
||||
|
||||
if (args[1].type() != Types.FUNCTION) {
|
||||
throw new TypeException("Function expected in second arg");
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
@ -10,7 +9,7 @@ public final class functional_map implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 2) throw new ArgumentsMismatchException("At least two args expected");
|
||||
Arguments.checkOrOr(2, 3, args.length);
|
||||
|
||||
final Value container = args[0];
|
||||
if (container.type() == Types.ARRAY) {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
@ -10,10 +9,10 @@ public final class functional_reduce implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 3) throw new ArgumentsMismatchException("Three args expected");
|
||||
Arguments.check(3, args.length);
|
||||
|
||||
if (args[2].type() != Types.FUNCTION) {
|
||||
throw new TypeException("Function expected in third arg");
|
||||
throw new TypeException("Function expected in third argument");
|
||||
}
|
||||
final Value container = args[0];
|
||||
final Value identity = args[1];
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.Arrays;
|
||||
@ -9,8 +8,7 @@ public final class functional_sortby implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 2) throw new ArgumentsMismatchException("Two arguments expected");
|
||||
|
||||
Arguments.check(2, args.length);
|
||||
if (args[0].type() != Types.ARRAY) {
|
||||
throw new TypeException("Array expected in first argument");
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ public final class http_http implements Function {
|
||||
return process(url, method, args[2], (MapValue) args[3], (FunctionValue) args[4]);
|
||||
|
||||
default:
|
||||
throw new ArgumentsMismatchException("Wrong number of arguments");
|
||||
throw new ArgumentsMismatchException("From 1 to 5 arguments expected, got " + args.length);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.Arguments;
|
||||
import com.annimon.ownlang.lib.Function;
|
||||
import com.annimon.ownlang.lib.StringValue;
|
||||
import com.annimon.ownlang.lib.Value;
|
||||
@ -11,7 +11,7 @@ public final class http_urlencode implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length == 0) throw new ArgumentsMismatchException("At least one arg expected");
|
||||
Arguments.checkOrOr(1, 2, args.length);
|
||||
|
||||
String charset = "UTF-8";
|
||||
if (args.length >= 2) {
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.Iterator;
|
||||
import org.json.*;
|
||||
@ -9,7 +8,7 @@ public final class json_decode implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
Arguments.check(1, args.length);
|
||||
try {
|
||||
final String jsonRaw = args[0].asString();
|
||||
final Object root = new JSONTokener(jsonRaw).nextValue();
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.Map;
|
||||
import org.json.*;
|
||||
@ -9,7 +8,7 @@ public final class json_encode implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
Arguments.check(1, args.length);
|
||||
try {
|
||||
final Object root = process(args[0]);
|
||||
final String jsonRaw = JSONObject.valueToString(root);
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class robot_exec implements Function {
|
||||
@ -15,7 +14,7 @@ public final class robot_exec implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length == 0) throw new ArgumentsMismatchException("At least one argument expected");
|
||||
Arguments.checkAtLeast(1, args.length);
|
||||
|
||||
try {
|
||||
final Process process;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.Arguments;
|
||||
import com.annimon.ownlang.lib.Function;
|
||||
import com.annimon.ownlang.lib.NumberValue;
|
||||
import com.annimon.ownlang.lib.Value;
|
||||
@ -11,8 +11,7 @@ public final class robot_toclipboard implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
|
||||
Arguments.check(1, args.length);
|
||||
Toolkit.getDefaultToolkit().getSystemClipboard()
|
||||
.setContents(new StringSelection(args[0].asString()), null);
|
||||
return NumberValue.ZERO;
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
@ -8,7 +7,7 @@ public final class std_arrayCombine implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 2) throw new ArgumentsMismatchException("Two arguments expected");
|
||||
Arguments.check(2, args.length);
|
||||
if (args[0].type() != Types.ARRAY) {
|
||||
throw new TypeException("Array expected in first argument");
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
@ -8,7 +7,7 @@ public final class std_arrayKeyExists implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 2) throw new ArgumentsMismatchException("Two arguments expected");
|
||||
Arguments.check(2, args.length);
|
||||
if (args[1].type() != Types.MAP) {
|
||||
throw new TypeException("Map expected in second argument");
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.ArrayList;
|
||||
@ -11,7 +10,7 @@ public final class std_arrayKeys implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
Arguments.check(1, args.length);
|
||||
if (args[0].type() != Types.MAP) {
|
||||
throw new TypeException("Map expected in first argument");
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.exceptions.TypeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.ArrayList;
|
||||
@ -11,7 +10,7 @@ public final class std_arrayValues implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
Arguments.check(1, args.length);
|
||||
if (args[0].type() != Types.MAP) {
|
||||
throw new TypeException("Map expected in first argument");
|
||||
}
|
||||
|
@ -1,14 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_charat implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 2) throw new ArgumentsMismatchException("Two arguments expected");
|
||||
|
||||
Arguments.check(2, args.length);
|
||||
final String input = args[0].asString();
|
||||
final int index = args[1].asInt();
|
||||
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_indexof implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 2 || args.length > 3) throw new ArgumentsMismatchException("Two or three arguments expected");
|
||||
Arguments.checkOrOr(2, 3, args.length);
|
||||
|
||||
final String input = args[0].asString();
|
||||
final String what = args[1].asString();
|
||||
|
@ -8,7 +8,7 @@ public final class std_join implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 1) throw new ArgumentsMismatchException("At least one argument expected");
|
||||
Arguments.checkRange(1, 4, args.length);
|
||||
if (args[0].type() != Types.ARRAY) {
|
||||
throw new TypeException("Array expected in first argument");
|
||||
}
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_lastindexof implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 2 || args.length > 3) throw new ArgumentsMismatchException("Two or three arguments expected");
|
||||
Arguments.checkOrOr(2, 3, args.length);
|
||||
|
||||
final String input = args[0].asString();
|
||||
final String what = args[1].asString();
|
||||
|
@ -1,16 +1,15 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_length implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length == 0) throw new ArgumentsMismatchException("At least one arg expected");
|
||||
Arguments.check(1, args.length);
|
||||
|
||||
final Value val = args[0];
|
||||
int length;
|
||||
final int length;
|
||||
switch (val.type()) {
|
||||
case Types.ARRAY:
|
||||
length = ((ArrayValue) val).size();
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.lib.Arguments;
|
||||
import com.annimon.ownlang.lib.Function;
|
||||
import com.annimon.ownlang.lib.NumberValue;
|
||||
import com.annimon.ownlang.lib.Value;
|
||||
@ -12,6 +13,7 @@ public final class std_rand implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
Arguments.checkRange(0, 2, args.length);
|
||||
if (args.length == 0) return new NumberValue(RND.nextDouble());
|
||||
|
||||
int from = 0;
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_replace implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 3) throw new ArgumentsMismatchException("Three arguments expected");
|
||||
Arguments.check(3, args.length);
|
||||
|
||||
final String input = args[0].asString();
|
||||
final String target = args[1].asString();
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_replaceall implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 3) throw new ArgumentsMismatchException("Three arguments expected");
|
||||
Arguments.check(3, args.length);
|
||||
|
||||
final String input = args[0].asString();
|
||||
final String regex = args[1].asString();
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_replacefirst implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 3) throw new ArgumentsMismatchException("Three arguments expected");
|
||||
Arguments.check(3, args.length);
|
||||
|
||||
final String input = args[0].asString();
|
||||
final String regex = args[1].asString();
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.Arguments;
|
||||
import com.annimon.ownlang.lib.Function;
|
||||
import com.annimon.ownlang.lib.NumberValue;
|
||||
import com.annimon.ownlang.lib.Value;
|
||||
@ -9,7 +9,7 @@ public final class std_sleep implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
Arguments.check(1, args.length);
|
||||
|
||||
try {
|
||||
Thread.sleep((long) args[0].asNumber());
|
||||
|
@ -9,7 +9,7 @@ public final class std_sort implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 1) throw new ArgumentsMismatchException("At least one argument expected");
|
||||
Arguments.checkAtLeast(1, args.length);
|
||||
if (args[0].type() != Types.ARRAY) {
|
||||
throw new TypeException("Array expected in first argument");
|
||||
}
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_split implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 2 || args.length > 3) throw new ArgumentsMismatchException("Two or three arguments expected");
|
||||
Arguments.checkOrOr(2, 3, args.length);
|
||||
|
||||
final String input = args[0].asString();
|
||||
final String regex = args[1].asString();
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_sprintf implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 1) throw new ArgumentsMismatchException("At least one argument expected");
|
||||
Arguments.checkAtLeast(1, args.length);
|
||||
|
||||
final String format = args[0].asString();
|
||||
final Object[] values = new Object[args.length - 1];
|
||||
|
@ -1,13 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_substring implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length < 2 || args.length > 3) throw new ArgumentsMismatchException("Two or three arguments expected");
|
||||
Arguments.checkOrOr(2, 3, args.length);
|
||||
|
||||
final String input = args[0].asString();
|
||||
final int startIndex = args[1].asInt();
|
||||
|
@ -1,16 +1,13 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.Console;
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_thread implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
// Создаём новый поток и передаём параметры, если есть.
|
||||
// Функция может передаваться как напрямую, так и по имени
|
||||
if (args.length == 0) throw new ArgumentsMismatchException("At least one arg expected");
|
||||
Arguments.checkAtLeast(1, args.length);
|
||||
|
||||
Function body;
|
||||
if (args[0].type() == Types.FUNCTION) {
|
||||
|
@ -1,14 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_tochar implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
|
||||
Arguments.check(1, args.length);
|
||||
return new StringValue(String.valueOf((char) args[0].asInt()));
|
||||
}
|
||||
}
|
@ -1,14 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_tolowercase implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
|
||||
Arguments.check(1, args.length);
|
||||
return new StringValue(args[0].asString().toLowerCase());
|
||||
}
|
||||
}
|
@ -1,14 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_touppercase implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
|
||||
Arguments.check(1, args.length);
|
||||
return new StringValue(args[0].asString().toUpperCase());
|
||||
}
|
||||
}
|
@ -1,14 +1,12 @@
|
||||
package com.annimon.ownlang.lib.modules.functions;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
|
||||
public final class std_trim implements Function {
|
||||
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
|
||||
Arguments.check(1, args.length);
|
||||
return new StringValue(args[0].asString().trim());
|
||||
}
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import java.util.function.DoubleBinaryOperator;
|
||||
import java.util.function.DoubleFunction;
|
||||
@ -58,14 +57,14 @@ public final class math implements Module {
|
||||
|
||||
private static Function functionConvert(DoubleUnaryOperator op) {
|
||||
return args -> {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One arg expected");
|
||||
Arguments.check(1, args.length);
|
||||
return doubleToNumber.apply(op.applyAsDouble(args[0].asNumber()));
|
||||
};
|
||||
}
|
||||
|
||||
private static Function biFunctionConvert(DoubleBinaryOperator op) {
|
||||
return args -> {
|
||||
if (args.length != 2) throw new ArgumentsMismatchException("Two args expected");
|
||||
Arguments.check(2, args.length);
|
||||
return doubleToNumber.apply(op.applyAsDouble(args[0].asNumber(), args[1].asNumber()));
|
||||
};
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ public final class ounit implements Module {
|
||||
private static class assertEquals implements Function {
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
Arguments.check(2, args.length);
|
||||
if (args[0].equals(args[1])) return NumberValue.ONE;
|
||||
throw new OUnitAssertionException("Values are not equals: "
|
||||
+ "1: " + args[0] + ", 2: " + args[1]);
|
||||
@ -37,6 +38,7 @@ public final class ounit implements Module {
|
||||
private static class assertNotEquals implements Function {
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
Arguments.check(2, args.length);
|
||||
if (!args[0].equals(args[1])) return NumberValue.ONE;
|
||||
throw new OUnitAssertionException("Values are equals: " + args[0]);
|
||||
}
|
||||
@ -45,6 +47,7 @@ public final class ounit implements Module {
|
||||
private static class assertSameType implements Function {
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
Arguments.check(2, args.length);
|
||||
if (args[0].type() == args[1].type()) return NumberValue.ONE;
|
||||
throw new OUnitAssertionException("Types mismatch. "
|
||||
+ "1: " + Types.typeToString(args[0].type())
|
||||
@ -55,6 +58,7 @@ public final class ounit implements Module {
|
||||
private static class assertTrue implements Function {
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
Arguments.check(1, args.length);
|
||||
if (args[0].asInt() != 0) return NumberValue.ONE;
|
||||
throw new OUnitAssertionException("Expected true, but found false.");
|
||||
}
|
||||
@ -63,6 +67,7 @@ public final class ounit implements Module {
|
||||
private static class assertFalse implements Function {
|
||||
@Override
|
||||
public Value execute(Value... args) {
|
||||
Arguments.check(1, args.length);
|
||||
if (args[0].asInt() == 0) return NumberValue.ONE;
|
||||
throw new OUnitAssertionException("Expected false, but found true.");
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.annimon.ownlang.lib.modules;
|
||||
|
||||
import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import com.annimon.ownlang.lib.modules.functions.robot_exec;
|
||||
import com.annimon.ownlang.lib.modules.functions.robot_fromclipboard;
|
||||
@ -43,14 +42,14 @@ public final class robot implements Module {
|
||||
Functions.set("mouseRelease", convertFunction(awtRobot::mouseRelease));
|
||||
Functions.set("mouseWheel", convertFunction(awtRobot::mouseWheel));
|
||||
Functions.set("mouseMove", (args) -> {
|
||||
if (args.length != 2) throw new ArgumentsMismatchException("Two arguments expected");
|
||||
Arguments.check(2, args.length);
|
||||
try {
|
||||
awtRobot.mouseMove(args[0].asInt(), args[1].asInt());
|
||||
} catch (IllegalArgumentException iae) { }
|
||||
return NumberValue.ZERO;
|
||||
});
|
||||
Functions.set("typeText", (args) -> {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
Arguments.check(1, args.length);
|
||||
try {
|
||||
typeText(args[0].asString());
|
||||
} catch (IllegalArgumentException iae) { }
|
||||
@ -87,7 +86,7 @@ public final class robot implements Module {
|
||||
|
||||
private static Function convertFunction(RobotIntConsumer consumer) {
|
||||
return args -> {
|
||||
if (args.length != 1) throw new ArgumentsMismatchException("One argument expected");
|
||||
Arguments.check(1, args.length);
|
||||
try {
|
||||
consumer.accept(args[0].asInt());
|
||||
} catch (IllegalArgumentException iae) { }
|
||||
|
Loading…
Reference in New Issue
Block a user