diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/http/http_http.java b/modules/main/src/main/java/com/annimon/ownlang/modules/http/http_http.java index 336b9a7..23048d6 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/http/http_http.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/http/http_http.java @@ -1,7 +1,6 @@ package com.annimon.ownlang.modules.http; import com.annimon.ownlang.exceptions.ArgumentsMismatchException; -import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.lib.*; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -31,65 +30,59 @@ public final class http_http implements Function { @Override public Value execute(Value[] args) { String url, method; + Function function; switch (args.length) { case 1: // http(url) url = args[0].asString(); return process(url, "GET"); - + case 2: // http(url, method) || http(url, callback) url = args[0].asString(); if (args[1].type() == Types.FUNCTION) { - return process(url, "GET", (FunctionValue) args[1]); + return process(url, "GET", ValueUtils.consumeFunction(args[1], 1)); } return process(url, args[1].asString()); - + case 3: // http(url, method, params) || http(url, method, callback) url = args[0].asString(); method = args[1].asString(); if (args[2].type() == Types.FUNCTION) { - return process(url, method, (FunctionValue) args[2]); + return process(url, method, ValueUtils.consumeFunction(args[2], 2)); } - return process(url, method, args[2], FunctionValue.EMPTY); - + return process(url, method, args[2], FunctionValue.EMPTY.getValue()); + case 4: // http(url, method, params, callback) - if (args[3].type() != Types.FUNCTION) { - throw new TypeException("Fourth arg must be a function callback"); - } url = args[0].asString(); method = args[1].asString(); - return process(url, method, args[2], (FunctionValue) args[3]); - + function = ValueUtils.consumeFunction(args[3], 3); + return process(url, method, args[2], function); + case 5: // http(url, method, params, headerParams, callback) - if (args[3].type() != Types.MAP) { - throw new TypeException("Third arg must be a map"); - } - if (args[4].type() != Types.FUNCTION) { - throw new TypeException("Fifth arg must be a function callback"); - } url = args[0].asString(); method = args[1].asString(); - return process(url, method, args[2], (MapValue) args[3], (FunctionValue) args[4]); - + MapValue options = ValueUtils.consumeMap(args[3], 3); + function = ValueUtils.consumeFunction(args[4], 4); + return process(url, method, args[2], options, function); + default: throw new ArgumentsMismatchException("From 1 to 5 arguments expected, got " + args.length); } } private Value process(String url, String method) { - return process(url, method, FunctionValue.EMPTY); + return process(url, method, FunctionValue.EMPTY.getValue()); } - private Value process(String url, String method, FunctionValue function) { - return process(url, method, MapValue.EMPTY, function); + private Value process(String url, String method, Function callback) { + return process(url, method, MapValue.EMPTY, callback); } - private Value process(String url, String method, Value params, FunctionValue function) { - return process(url, method, params, MapValue.EMPTY, function); + private Value process(String url, String method, Value params, Function callback) { + return process(url, method, params, MapValue.EMPTY, callback); } - private Value process(String url, String methodStr, Value requestParams, MapValue options, FunctionValue function) { + private Value process(String url, String methodStr, Value requestParams, MapValue options, Function callback) { final String method = methodStr.toUpperCase(); - final Function callback = function.getValue(); try { final Request.Builder builder = new Request.Builder() .url(url) diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/robot/robot_exec.java b/modules/main/src/main/java/com/annimon/ownlang/modules/robot/robot_exec.java index ae2ad8d..d953dc8 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/robot/robot_exec.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/robot/robot_exec.java @@ -25,23 +25,17 @@ public final class robot_exec implements Function { final Process process; if (args.length > 1) { process = Runtime.getRuntime().exec(toStringArray(args)); - } else switch (args[0].type()) { - case Types.ARRAY: - final ArrayValue array = (ArrayValue) args[0]; - process = Runtime.getRuntime().exec(toStringArray(array.getCopyElements())); - break; - - default: - process = Runtime.getRuntime().exec(args[0].asString()); + } else if (args[0].type() == Types.ARRAY) { + final ArrayValue array = (ArrayValue) args[0]; + process = Runtime.getRuntime().exec(toStringArray(array.getCopyElements())); + } else { + process = Runtime.getRuntime().exec(args[0].asString()); } - - switch (mode) { - case EXEC_AND_WAIT: - return NumberValue.of(process.waitFor()); - case EXEC: - default: - return NumberValue.ZERO; + + if (mode == Mode.EXEC_AND_WAIT) { + return NumberValue.of(process.waitFor()); } + return NumberValue.ZERO; } catch (Exception ex) { return NumberValue.ZERO; } diff --git a/ownlang-core/src/main/java/com/annimon/ownlang/lib/NumberValue.java b/ownlang-core/src/main/java/com/annimon/ownlang/lib/NumberValue.java index 68e005d..e3e9e37 100644 --- a/ownlang-core/src/main/java/com/annimon/ownlang/lib/NumberValue.java +++ b/ownlang-core/src/main/java/com/annimon/ownlang/lib/NumberValue.java @@ -120,9 +120,9 @@ public final class NumberValue implements Value { return Float.compare(value.floatValue(), other.floatValue()) == 0; } if (value instanceof Long || other instanceof Long) { - return Long.compare(value.longValue(), other.longValue()) == 0; + return value.longValue() == other.longValue(); } - return Integer.compare(value.intValue(), other.intValue()) == 0; + return value.intValue() == other.intValue(); } @Override diff --git a/ownlang-desktop/src/main/java/com/annimon/ownlang/Main.java b/ownlang-desktop/src/main/java/com/annimon/ownlang/Main.java index 78460e1..86efaf4 100644 --- a/ownlang-desktop/src/main/java/com/annimon/ownlang/Main.java +++ b/ownlang-desktop/src/main/java/com/annimon/ownlang/Main.java @@ -178,7 +178,7 @@ public final class Main { System.out.println(stagesData.getOrDefault(OptimizationStage.TAG_OPTIMIZATION_SUMMARY, "")); } if (options.showMeasurements) { - System.out.println("======================"); + System.out.println("=".repeat(25)); System.out.println(measurement.summary(TimeUnit.MILLISECONDS, true)); } }