diff --git a/core/src/main/java/lucee/commons/math/MathUtil.java b/core/src/main/java/lucee/commons/math/MathUtil.java index b5751a0ced..95eaa2370e 100644 --- a/core/src/main/java/lucee/commons/math/MathUtil.java +++ b/core/src/main/java/lucee/commons/math/MathUtil.java @@ -42,6 +42,10 @@ public static double abs(double number) { return (number <= 0.0D) ? 0.0D - number : number; } + public static BigDecimal abs(BigDecimal number) { + return number.abs(); + } + public static double sgn(double number) { return number != 0.0d ? number >= 0.0d ? 1 : -1 : 0; } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayDeleteAt.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayDeleteAt.java index 035e5af4a3..8a2d084a8c 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayDeleteAt.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayDeleteAt.java @@ -32,14 +32,17 @@ public final class ArrayDeleteAt extends BIF { private static final long serialVersionUID = -5900967522809749154L; - public static boolean call(PageContext pc, Array array, double number) throws PageException { - array.removeE((int) number); + public static boolean call(PageContext pc, Array array, Number number) throws PageException { + array.removeE(Caster.toIntValue(number)); return true; } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1])); - else throw new FunctionException(pc, "ArrayDeleteAt", 2, 3, args.length); + if (args.length == 2) { + Caster.toArray(args[0]).removeE(Caster.toIntValue(args[1])); + return true; + } + throw new FunctionException(pc, "ArrayDeleteAt", 2, 3, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayEach.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayEach.java index 5a0c8879d4..0200723e3c 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayEach.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayEach.java @@ -42,23 +42,12 @@ public static String call(PageContext pc, Array array, UDF udf, boolean parallel return _call(pc, array, udf, parallel, 20); } - public static String call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, array, udf, parallel, (int) maxThreads); + public static String call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads)); } private static String _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException { - return Each.call(pc, array, udf, parallel, maxThreads); - - /* - * ExecutorService execute=null; List>> futures=null; if(parallel) { execute = - * Executors.newFixedThreadPool(maxThreads); futures=new ArrayList>>(); } - * Each.invoke(pc, array, udf,execute,futures); - * - * if(parallel) Each.afterCall(pc,futures); - * - * return null; - */ } @Override diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayEvery.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayEvery.java index b92cc67bc2..eb119f2d8a 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayEvery.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayEvery.java @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Array array, UDF udf, boolean paralle return _call(pc, array, udf, parallel, 20); } - public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, array, udf, parallel, (int) maxThreads); + public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads)); } private static boolean _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayFilter.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayFilter.java index f18970cf61..d7bd436dd9 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayFilter.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayFilter.java @@ -42,8 +42,8 @@ public static Array call(PageContext pc, Array array, UDF udf, boolean parallel) return _call(pc, array, udf, parallel, 20); } - public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, array, udf, parallel, (int) maxThreads); + public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads)); } public static Array _call(PageContext pc, Array array, UDF filter, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayIndexExists.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayIndexExists.java index a10fe4ba34..472395972a 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayIndexExists.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayIndexExists.java @@ -33,14 +33,14 @@ public final class ArrayIndexExists extends BIF { private static final long serialVersionUID = -4490011932571314711L; - public static boolean call(PageContext pc, Array array, double index) { + public static boolean call(PageContext pc, Array array, Number index) { Object _null = NullSupportHelper.NULL(pc); - return array.get((int) index, _null) != _null; + return array.get(Caster.toIntValue(index), _null) != _null; } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1])); - else throw new FunctionException(pc, "ArrayIndexExists", 2, 2, args.length); + if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1])); + throw new FunctionException(pc, "ArrayIndexExists", 2, 2, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayInsertAt.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayInsertAt.java index 9db1a2465f..88579a97fa 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayInsertAt.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayInsertAt.java @@ -32,13 +32,13 @@ public final class ArrayInsertAt extends BIF { private static final long serialVersionUID = -418752384898360791L; - public static boolean call(PageContext pc, Array array, double number, Object object) throws PageException { - return array.insert((int) number, object); + public static boolean call(PageContext pc, Array array, Number number, Object object) throws PageException { + return array.insert(Caster.toIntValue(number), object); } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), args[2]); - else throw new FunctionException(pc, "ArrayInsertAt", 3, 3, args.length); + if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), args[2]); + throw new FunctionException(pc, "ArrayInsertAt", 3, 3, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayIsDefined.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayIsDefined.java index a11612656b..8829e3dd0f 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayIsDefined.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayIsDefined.java @@ -32,13 +32,13 @@ public final class ArrayIsDefined extends BIF { private static final long serialVersionUID = 5821478169641360902L; - public static boolean call(PageContext pc, Array array, double index) { + public static boolean call(PageContext pc, Array array, Number index) { return ArrayIndexExists.call(pc, array, index); } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1])); + if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1])); else throw new FunctionException(pc, "ArrayIsDefined", 2, 2, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayLen.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayLen.java index 929b26c502..cbec7cb838 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayLen.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayLen.java @@ -32,7 +32,7 @@ public final class ArrayLen extends BIF { private static final long serialVersionUID = -1530118609194349457L; - public static double call(PageContext pc, Array array) { + public static Number call(PageContext pc, Array array) { return array.size(); } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMap.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMap.java index 9287872704..9dbe62fcf4 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMap.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMap.java @@ -40,8 +40,8 @@ public static Array call(PageContext pc, Array array, UDF udf, boolean parallel) return _call(pc, array, udf, parallel, 20); } - public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, array, udf, parallel, (int) maxThreads); + public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads)); } private static Array _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException { @@ -52,7 +52,7 @@ private static Array _call(PageContext pc, Array array, UDF udf, boolean paralle public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1])); if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2])); - if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3])); + if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(pc, args[3])); throw new FunctionException(pc, "ArrayMap", 2, 4, args.length); } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMax.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMax.java index 17d7506973..1a03e90af8 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMax.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMax.java @@ -33,7 +33,7 @@ public final class ArrayMax extends BIF { private static final long serialVersionUID = -4347418519322157914L; - public static double call(PageContext pc, Array array) throws PageException { + public static Number call(PageContext pc, Array array) throws PageException { return ArrayUtil.max(array); } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMedian.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMedian.java index 48982333ef..4609a51531 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMedian.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMedian.java @@ -29,7 +29,7 @@ public class ArrayMedian extends BIF { - public static double call(PageContext pc, Array array) throws ExpressionException { + public static Number call(PageContext pc, Array array) throws ExpressionException { return ArrayUtil.median(array); } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMid.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMid.java index fc4c351b74..91612c57aa 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMid.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMid.java @@ -31,13 +31,13 @@ public final class ArrayMid extends BIF { private static final long serialVersionUID = 4996354700884413289L; - public static Array call(PageContext pc, Array arr, double start) throws ExpressionException { + public static Array call(PageContext pc, Array arr, Number start) throws ExpressionException { return call(pc, arr, start, -1); } - public static Array call(PageContext pc, Array arr, double start, double count) throws ExpressionException { - int s = (int) start; - int c = (int) count; + public static Array call(PageContext pc, Array arr, Number start, Number count) throws ExpressionException { + int s = Caster.toIntValue(start); + int c = Caster.toIntValue(count); if (s < 1) throw new FunctionException(pc, "ArrayMid", 2, "start", "Parameter which is now [" + s + "] must be a positive integer"); if (c == -1) c = arr.size(); diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMin.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMin.java index 0002b6cb83..05b0a8e2c1 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayMin.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayMin.java @@ -33,7 +33,7 @@ public final class ArrayMin extends BIF { private static final long serialVersionUID = 7640801691378949924L; - public static double call(PageContext pc, Array array) throws PageException { + public static Number call(PageContext pc, Array array) throws PageException { return ArrayUtil.min(array); } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayNew.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayNew.java index bb151afcc2..052f9eefd8 100755 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayNew.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayNew.java @@ -37,13 +37,13 @@ public final class ArrayNew extends BIF { private static final long serialVersionUID = -5923269433550568279L; - public static Array call(PageContext pc, double dimension, String type, boolean _synchronized) throws PageException { + public static Array call(PageContext pc, Number dimension, String type, boolean _synchronized) throws PageException { Array a; if (StringUtil.isEmpty(type, true) || Decision.isBoolean(type)) { - a = ArrayUtil.getInstance((int) dimension, _synchronized); + a = ArrayUtil.getInstance(Caster.toIntValue(dimension), _synchronized); } else { - if (dimension > 1) { + if (Caster.toIntValue(dimension) > 1) { throw new ApplicationException("multi dimensional arrays are not supported with typed arrays"); } a = new ArrayTyped(type.trim()); diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayPush.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayPush.java index 438d0cb20c..765f1435d1 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayPush.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayPush.java @@ -11,7 +11,7 @@ public final class ArrayPush extends BIF { private static final long serialVersionUID = -5673140457325547233L; - public static double call(PageContext pc, Array array, Object object) throws PageException { + public static Number call(PageContext pc, Array array, Object object) throws PageException { // TODO need to be atomic array.append(object); return array.size(); diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayResize.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayResize.java index 80bc93bffd..1d0ad77848 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayResize.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayResize.java @@ -32,9 +32,9 @@ public final class ArrayResize extends BIF { private static final long serialVersionUID = -3107784929660340665L; - public static boolean call(PageContext pc, Array array, double number) { + public static boolean call(PageContext pc, Array array, Number number) { try { - array.resize((int) number); + array.resize(Caster.toIntValue(number)); return true; } catch (PageException e) { @@ -45,7 +45,7 @@ public static boolean call(PageContext pc, Array array, double number) { @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1])); + if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1])); else throw new FunctionException(pc, "ArrayResize", 2, 2, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArraySet.java b/core/src/main/java/lucee/runtime/functions/arrays/ArraySet.java index ff080ef369..b8f5429494 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArraySet.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArraySet.java @@ -34,9 +34,9 @@ public final class ArraySet extends BIF { private static final long serialVersionUID = -7804363479876538167L; - public static boolean call(PageContext pc, Array array, double from, double to, Object value) throws PageException { - int f = (int) from; - int t = (int) to; + public static boolean call(PageContext pc, Array array, Number from, Number to, Object value) throws PageException { + int f = Caster.toIntValue(from); + int t = Caster.toIntValue(to); if (f < 1) throw new ExpressionException("Start index of the function arraySet must be greater than zero; now [" + f + "]"); if (f > t) throw new ExpressionException("End index of the function arraySet must be greater than the Start index; now [start:" + f + ", end:" + t + "]"); if (array.getDimension() > 1) @@ -50,7 +50,7 @@ public static boolean call(PageContext pc, Array array, double from, double to, @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2]), args[3]); + if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2]), args[3]); else throw new FunctionException(pc, "ArraySet", 4, 4, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArraySlice.java b/core/src/main/java/lucee/runtime/functions/arrays/ArraySlice.java index 8dfb4c5bc8..6040759cf5 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArraySlice.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArraySlice.java @@ -36,32 +36,33 @@ public final class ArraySlice extends BIF { private static final long serialVersionUID = 7309769117464009924L; - public static Array call(PageContext pc, Array arr, double offset) throws PageException { + public static Array call(PageContext pc, Array arr, Number offset) throws PageException { return call(pc, arr, offset, 0); } - public static Array call(PageContext pc, Array arr, double offset, double length) throws PageException { + public static Array call(PageContext pc, Array arr, Number offset, Number length) throws PageException { + int off = Caster.toIntValue(offset); + int len = Caster.toIntValue(length); + int arrLen = arr.size(); + if (arrLen == 0) throw new FunctionException(pc, "arraySlice", 1, "array", "Array cannot be empty"); - int len = arr.size(); - if (len == 0) throw new FunctionException(pc, "arraySlice", 1, "array", "Array cannot be empty"); - - if (offset > 0) { - if (len < offset) throw new FunctionException(pc, "arraySlice", 2, "offset", "Offset cannot be greater than size of the array"); + if (off > 0) { + if (arrLen < off) throw new FunctionException(pc, "arraySlice", 2, "offset", "Offset cannot be greater than size of the array"); int to = 0; - if (length > 0) to = (int) (offset + length - 1); - else if (length < 0) to = (int) (len + length); - if (len < to) throw new FunctionException(pc, "arraySlice", 3, "length", "Offset+length cannot be greater than size of the array"); + if (len > 0) to = off + len - 1; + else if (len < 0) to = arrLen + len; + if (arrLen < to) throw new FunctionException(pc, "arraySlice", 3, "length", "Offset+length cannot be greater than size of the array"); - return get(arr, (int) offset, to); + return get(arr, off, to); } - return call(pc, arr, len + offset, length); + return call(pc, arr, arrLen + off, len); } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1])); - else if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2])); + if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1])); + else if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2])); else throw new FunctionException(pc, "ArraySlice", 2, 3, args.length); } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArraySome.java b/core/src/main/java/lucee/runtime/functions/arrays/ArraySome.java index cb92c926a1..f22975e0ed 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArraySome.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArraySome.java @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Array array, UDF udf, boolean paralle return _call(pc, array, udf, parallel, 20); } - public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, array, udf, parallel, (int) maxThreads); + public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads)); } private static boolean _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException { @@ -52,7 +52,7 @@ private static boolean _call(PageContext pc, Array array, UDF udf, boolean paral public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1])); if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2])); - if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3])); + if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(pc, args[3])); throw new FunctionException(pc, "ArraySome", 2, 4, args.length); diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArraySplice.java b/core/src/main/java/lucee/runtime/functions/arrays/ArraySplice.java index deb528f658..d0336a6766 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArraySplice.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArraySplice.java @@ -15,23 +15,24 @@ public class ArraySplice extends BIF implements Function { private static final long serialVersionUID = -8604228677976070247L; - public static Array call(PageContext pc, Array arr, double index) throws PageException { + public static Array call(PageContext pc, Array arr, Number index) throws PageException { return call(pc, arr, index, -1, null); } - public static Array call(PageContext pc, Array arr, double index, double len) throws PageException { + public static Array call(PageContext pc, Array arr, Number index, Number len) throws PageException { return call(pc, arr, index, len, null); } - public static Array call(PageContext pc, Array arr, double index, double length, Array replacements) throws PageException { + public static Array call(PageContext pc, Array arr, Number index, Number length, Array replacements) throws PageException { Array removed = new ArrayImpl(); + // check index - if (index < 1) index = arr.size() + index + 1; - else if (index > arr.size()) index = arr.size() + 1; - int idx = (int) index; + int idx = Caster.toIntValue(index); + if (idx < 1) idx = arr.size() + idx + 1; + else if (idx > arr.size()) idx = arr.size() + 1; // check len - int len = (int) length; + int len = Caster.toIntValue(length); if (len == -1) len = arr.size() - idx + 1; else if (len < -1) len = 0; // stupid ut how acf works else { @@ -57,9 +58,9 @@ public static Array call(PageContext pc, Array arr, double index, double length, @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1])); - if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2])); - if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2]), Caster.toArray(args[3])); + if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1])); + if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2])); + if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2]), Caster.toArray(args[3])); throw new FunctionException(pc, "ArraySplice", 2, 4, args.length); } diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArraySum.java b/core/src/main/java/lucee/runtime/functions/arrays/ArraySum.java index f13b19402a..e39c4173f5 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArraySum.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArraySum.java @@ -34,13 +34,13 @@ public final class ArraySum extends BIF { private static final long serialVersionUID = 2414586741503001864L; - public static double call(PageContext pc, Array array) throws ExpressionException { + public static Number call(PageContext pc, Array array) throws ExpressionException { return ArrayUtil.sum(array); } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 1) return call(pc, Caster.toArray(args[0])); - else throw new FunctionException(pc, "ArraySum", 1, 1, args.length); + throw new FunctionException(pc, "ArraySum", 1, 1, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArraySwap.java b/core/src/main/java/lucee/runtime/functions/arrays/ArraySwap.java index a5b4f705fa..33cb9691b7 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArraySwap.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArraySwap.java @@ -34,14 +34,14 @@ public final class ArraySwap extends BIF { private static final long serialVersionUID = 4539191577529273165L; - public static boolean call(PageContext pc, Array array, double number, double number2) throws ExpressionException { - ArrayUtil.swap(array, (int) number, (int) number2); + public static boolean call(PageContext pc, Array array, Number number, Number number2) throws ExpressionException { + ArrayUtil.swap(array, Caster.toIntValue(number), Caster.toIntValue(number2)); return true; } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2])); + if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2])); else throw new FunctionException(pc, "ArraySwap", 3, 3, args.length); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/arrays/ArrayUnShift.java b/core/src/main/java/lucee/runtime/functions/arrays/ArrayUnShift.java index e8abf9e0bf..d704bd79fe 100644 --- a/core/src/main/java/lucee/runtime/functions/arrays/ArrayUnShift.java +++ b/core/src/main/java/lucee/runtime/functions/arrays/ArrayUnShift.java @@ -11,7 +11,7 @@ public final class ArrayUnShift extends BIF { private static final long serialVersionUID = 6952045964109881804L; - public static double call(PageContext pc, Array array, Object object) throws PageException { + public static Number call(PageContext pc, Array array, Object object) throws PageException { // TODO make it atomar array.prepend(object); return array.size(); diff --git a/core/src/main/java/lucee/runtime/functions/cache/CacheClear.java b/core/src/main/java/lucee/runtime/functions/cache/CacheClear.java index 421f44de02..dcc3e2dd10 100644 --- a/core/src/main/java/lucee/runtime/functions/cache/CacheClear.java +++ b/core/src/main/java/lucee/runtime/functions/cache/CacheClear.java @@ -30,7 +30,6 @@ import lucee.runtime.exp.FunctionException; import lucee.runtime.exp.PageException; import lucee.runtime.ext.function.BIF; -import lucee.runtime.ext.function.Function; import lucee.runtime.op.Caster; import lucee.runtime.op.Decision; import lucee.runtime.type.Array; @@ -38,25 +37,25 @@ import lucee.runtime.type.util.KeyConstants; import lucee.runtime.type.util.ListUtil; -public final class CacheClear extends BIF implements Function, CacheKeyFilter { +public final class CacheClear extends BIF implements CacheKeyFilter { private static final long serialVersionUID = 6080620551371620016L; public static CacheKeyFilter FILTER = new CacheClear(); - public static double call(PageContext pc) throws PageException { - return _call(pc, null, null); + public static Number call(PageContext pc) throws PageException { + return Caster.toNumber(pc, _call(pc, null, null)); } - public static double call(PageContext pc, Object filterOrTags) throws PageException { - return _call(pc, filterOrTags, null); + public static Number call(PageContext pc, Object filterOrTags) throws PageException { + return Caster.toNumber(pc, _call(pc, filterOrTags, null)); } - public static double call(PageContext pc, Object filterOrTags, String cacheName) throws PageException { - return _call(pc, filterOrTags, cacheName); + public static Number call(PageContext pc, Object filterOrTags, String cacheName) throws PageException { + return Caster.toNumber(pc, _call(pc, filterOrTags, cacheName)); } - private static double _call(PageContext pc, Object filterOrTags, String cacheName) throws PageException { + private static int _call(PageContext pc, Object filterOrTags, String cacheName) throws PageException { try { Object filter = FILTER; // tags diff --git a/core/src/main/java/lucee/runtime/functions/cache/CacheCount.java b/core/src/main/java/lucee/runtime/functions/cache/CacheCount.java index a4fcfba6e1..8d9b36591d 100644 --- a/core/src/main/java/lucee/runtime/functions/cache/CacheCount.java +++ b/core/src/main/java/lucee/runtime/functions/cache/CacheCount.java @@ -32,14 +32,14 @@ public final class CacheCount extends BIF { private static final long serialVersionUID = 4192649311671009474L; - public static double call(PageContext pc) throws PageException { + public static Number call(PageContext pc) throws PageException { return call(pc, null); } - public static double call(PageContext pc, String cacheName) throws PageException { + public static Number call(PageContext pc, String cacheName) throws PageException { try { - return CacheUtil.getCache(pc, cacheName, Config.CACHE_TYPE_OBJECT).keys().size(); + return Caster.toNumber(pc, CacheUtil.getCache(pc, cacheName, Config.CACHE_TYPE_OBJECT).keys().size()); } catch (IOException e) { throw Caster.toPageException(e); diff --git a/core/src/main/java/lucee/runtime/functions/cache/CacheRemoveAll.java b/core/src/main/java/lucee/runtime/functions/cache/CacheRemoveAll.java index 7d9d41dba0..b31124b455 100644 --- a/core/src/main/java/lucee/runtime/functions/cache/CacheRemoveAll.java +++ b/core/src/main/java/lucee/runtime/functions/cache/CacheRemoveAll.java @@ -28,12 +28,12 @@ public class CacheRemoveAll extends BIF { private static final long serialVersionUID = -3444983104369826751L; - public static double call(PageContext pc) throws PageException { + public static Number call(PageContext pc) throws PageException { return CacheClear.call(pc); } - public static double call(PageContext pc, String cacheName) throws PageException { + public static Number call(PageContext pc, String cacheName) throws PageException { return CacheClear.call(pc, null, cacheName); } diff --git a/core/src/main/java/lucee/runtime/functions/closure/Each.java b/core/src/main/java/lucee/runtime/functions/closure/Each.java index 5daf8ccefa..e30ca9f361 100644 --- a/core/src/main/java/lucee/runtime/functions/closure/Each.java +++ b/core/src/main/java/lucee/runtime/functions/closure/Each.java @@ -64,8 +64,8 @@ public static String call(PageContext pc, Object obj, UDF udf, boolean parallel) return _call(pc, obj, udf, parallel, DEFAULT_MAX_THREAD, TYPE_UNDEFINED); } - public static String call(PageContext pc, Object obj, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, obj, udf, parallel, (int) maxThreads, TYPE_UNDEFINED); + public static String call(PageContext pc, Object obj, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, obj, udf, parallel, Caster.toIntValue(maxThreads), TYPE_UNDEFINED); } private static String _call(PageContext pc, Object obj, UDF udf, boolean parallel, int maxThreads, short type) throws PageException { @@ -236,7 +236,7 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 2) return call(pc, args[0], Caster.toFunction(args[1])); if (args.length == 3) return call(pc, args[0], Caster.toFunction(args[1]), Caster.toBooleanValue(args[2])); - if (args.length == 4) return call(pc, args[0], Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3])); + if (args.length == 4) return call(pc, args[0], Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(pc, args[3])); throw new FunctionException(pc, "Each", 2, 4, args.length); diff --git a/core/src/main/java/lucee/runtime/functions/closure/Every.java b/core/src/main/java/lucee/runtime/functions/closure/Every.java index 635b4cf9db..e46e1c8f12 100644 --- a/core/src/main/java/lucee/runtime/functions/closure/Every.java +++ b/core/src/main/java/lucee/runtime/functions/closure/Every.java @@ -62,12 +62,12 @@ public static boolean call(PageContext pc, Object obj, UDF udf, boolean parallel return _call(pc, obj, udf, parallel, Each.DEFAULT_MAX_THREAD, TYPE_UNDEFINED); } - public static boolean call(PageContext pc, Object obj, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, obj, udf, parallel, (int) maxThreads, TYPE_UNDEFINED); + public static boolean call(PageContext pc, Object obj, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, obj, udf, parallel, Caster.toIntValue(maxThreads), TYPE_UNDEFINED); } - public static boolean call(PageContext pc, Object obj, UDF udf, boolean parallel, double maxThreads, short type) throws PageException { - return _call(pc, obj, udf, parallel, (int) maxThreads, type); + public static boolean call(PageContext pc, Object obj, UDF udf, boolean parallel, Number maxThreads, short type) throws PageException { + return _call(pc, obj, udf, parallel, Caster.toIntValue(maxThreads), type); } private static boolean _call(PageContext pc, Object obj, UDF udf, boolean parallel, int maxThreads, short type) throws PageException { @@ -332,7 +332,7 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 2) return call(pc, (args[0]), Caster.toFunction(args[1])); if (args.length == 3) return call(pc, (args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2])); - if (args.length == 4) return call(pc, (args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3])); + if (args.length == 4) return call(pc, (args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(args[3])); throw new FunctionException(pc, "Every", 2, 4, args.length); diff --git a/core/src/main/java/lucee/runtime/functions/closure/Filter.java b/core/src/main/java/lucee/runtime/functions/closure/Filter.java index 4f29311408..bee69c6b14 100644 --- a/core/src/main/java/lucee/runtime/functions/closure/Filter.java +++ b/core/src/main/java/lucee/runtime/functions/closure/Filter.java @@ -68,8 +68,8 @@ public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel) return _call(pc, obj, udf, parallel, Each.DEFAULT_MAX_THREAD, TYPE_UNDEFINED); } - public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, obj, udf, parallel, (int) maxThreads, TYPE_UNDEFINED); + public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, obj, udf, parallel, Caster.toIntValue(maxThreads), TYPE_UNDEFINED); } public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel, int maxThreads, short type) throws PageException { @@ -364,7 +364,7 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 2) return call(pc, (args[0]), Caster.toFunction(args[1])); if (args.length == 3) return call(pc, (args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2])); - if (args.length == 4) return call(pc, (args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3])); + if (args.length == 4) return call(pc, (args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(pc, args[3])); throw new FunctionException(pc, "Filter", 2, 4, args.length); } diff --git a/core/src/main/java/lucee/runtime/functions/closure/Map.java b/core/src/main/java/lucee/runtime/functions/closure/Map.java index b3694c3e3d..d81bbb890c 100644 --- a/core/src/main/java/lucee/runtime/functions/closure/Map.java +++ b/core/src/main/java/lucee/runtime/functions/closure/Map.java @@ -68,8 +68,8 @@ public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel) return _call(pc, obj, udf, parallel, Each.DEFAULT_MAX_THREAD, null, TYPE_UNDEFINED); } - public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, obj, udf, parallel, (int) maxThreads, null, TYPE_UNDEFINED); + public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, obj, udf, parallel, Caster.toIntValue(maxThreads), null, TYPE_UNDEFINED); } public static Object call(PageContext pc, Object obj, UDF udf, boolean parallel, int maxThreads, Query resQry, short type) throws PageException { @@ -358,7 +358,7 @@ public static void afterCall(PageContext pc, Collection coll, List>> futur public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 2) return call(pc, Caster.toStruct(args[0]), Caster.toFunction(args[1])); if (args.length == 3) return call(pc, Caster.toStruct(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2])); - if (args.length == 4) return call(pc, Caster.toStruct(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3])); + if (args.length == 4) return call(pc, Caster.toStruct(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(pc, args[3])); throw new FunctionException(pc, "Some", 2, 4, args.length); diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Beat.java b/core/src/main/java/lucee/runtime/functions/dateTime/Beat.java index 9a2bbb8d87..850487d300 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Beat.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Beat.java @@ -30,14 +30,15 @@ import lucee.runtime.type.dt.DateTimeImpl; public final class Beat implements Function { + private static final long serialVersionUID = -6071264062930362828L; private static final double day = 86400000; private static final TimeZone BMD = TimeZone.getTimeZone("GMT+1"); - public static double call(PageContext pc) throws PageException { + public static Number call(PageContext pc) throws PageException { return call(pc, null); } - public static double call(PageContext pc, Object obj) throws PageException { + public static Number call(PageContext pc, Object obj) throws PageException { if (obj == null) obj = new DateTimeImpl(pc); TimeZone tz = ThreadLocalPageContext.getTimeZone(pc); diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/CreateDate.java b/core/src/main/java/lucee/runtime/functions/dateTime/CreateDate.java index 6f4f6e0e90..b4bb2aafa0 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/CreateDate.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/CreateDate.java @@ -27,29 +27,30 @@ import lucee.runtime.PageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.type.dt.DateTime; public final class CreateDate implements Function { private static final long serialVersionUID = -8116641467358905335L; - public static DateTime call(PageContext pc, double year) throws ExpressionException { + public static DateTime call(PageContext pc, Number year) throws ExpressionException { return _call(pc, year, 1, 1, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month) throws ExpressionException { + public static DateTime call(PageContext pc, Number year, Number month) throws ExpressionException { return _call(pc, year, month, 1, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day) throws ExpressionException { + public static DateTime call(PageContext pc, Number year, Number month, Number day) throws ExpressionException { return _call(pc, year, month, day, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day, TimeZone tz) throws ExpressionException { + public static DateTime call(PageContext pc, Number year, Number month, Number day, TimeZone tz) throws ExpressionException { return _call(pc, year, month, day, tz == null ? pc.getTimeZone() : tz); } - private static DateTime _call(PageContext pc, double year, double month, double day, TimeZone tz) throws ExpressionException { - return DateTimeUtil.getInstance().toDateTime(tz, (int) year, (int) month, (int) day, 0, 0, 0, 0); + private static DateTime _call(PageContext pc, Number year, Number month, Number day, TimeZone tz) throws ExpressionException { + return DateTimeUtil.getInstance().toDateTime(tz, Caster.toIntValue(year), Caster.toIntValue(month), Caster.toIntValue(day), 0, 0, 0, 0); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/CreateDateTime.java b/core/src/main/java/lucee/runtime/functions/dateTime/CreateDateTime.java index e5f0298961..9585a6f7e5 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/CreateDateTime.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/CreateDateTime.java @@ -36,37 +36,40 @@ public final class CreateDateTime extends BIF { private static final long serialVersionUID = 2158994510749730985L; - public static DateTime call(PageContext pc, double year) throws ExpressionException { - return _call(pc, (int) year, 1, 1, 0, 0, 0, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number year) throws ExpressionException { + return _call(pc, Caster.toIntValue(year), 1, 1, 0, 0, 0, 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month) throws ExpressionException { - return _call(pc, (int) year, (int) month, 1, 0, 0, 0, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number year, Number month) throws ExpressionException { + return _call(pc, Caster.toIntValue(year), Caster.toIntValue(month), 1, 0, 0, 0, 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day) throws ExpressionException { - return _call(pc, (int) year, (int) month, (int) day, 0, 0, 0, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number year, Number month, Number day) throws ExpressionException { + return _call(pc, Caster.toIntValue(year), Caster.toIntValue(month), Caster.toIntValue(day), 0, 0, 0, 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day, double hour) throws ExpressionException { - return _call(pc, (int) year, (int) month, (int) day, (int) hour, 0, 0, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number year, Number month, Number day, Number hour) throws ExpressionException { + return _call(pc, Caster.toIntValue(year), Caster.toIntValue(month), Caster.toIntValue(day), Caster.toIntValue(hour), 0, 0, 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day, double hour, double minute) throws ExpressionException { - return _call(pc, (int) year, (int) month, (int) day, (int) hour, (int) minute, 0, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number year, Number month, Number day, Number hour, Number minute) throws ExpressionException { + return _call(pc, Caster.toIntValue(year), Caster.toIntValue(month), Caster.toIntValue(day), Caster.toIntValue(hour), Caster.toIntValue(minute), 0, 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day, double hour, double minute, double second) throws ExpressionException { - return _call(pc, (int) year, (int) month, (int) day, (int) hour, (int) minute, (int) second, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number year, Number month, Number day, Number hour, Number minute, Number second) throws ExpressionException { + return _call(pc, Caster.toIntValue(year), Caster.toIntValue(month), Caster.toIntValue(day), Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second), + 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day, double hour, double minute, double second, double millis) throws ExpressionException { - return _call(pc, (int) year, (int) month, (int) day, (int) hour, (int) minute, (int) second, (int) millis, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number year, Number month, Number day, Number hour, Number minute, Number second, Number millis) throws ExpressionException { + return _call(pc, Caster.toIntValue(year), Caster.toIntValue(month), Caster.toIntValue(day), Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second), + Caster.toIntValue(millis), pc.getTimeZone()); } - public static DateTime call(PageContext pc, double year, double month, double day, double hour, double minute, double second, double millis, TimeZone tz) + public static DateTime call(PageContext pc, Number year, Number month, Number day, Number hour, Number minute, Number second, Number millis, TimeZone tz) throws ExpressionException { - return _call(pc, (int) year, (int) month, (int) day, (int) hour, (int) minute, (int) second, (int) millis, tz == null ? pc.getTimeZone() : tz); + return _call(pc, Caster.toIntValue(year), Caster.toIntValue(month), Caster.toIntValue(day), Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second), + Caster.toIntValue(millis), tz == null ? pc.getTimeZone() : tz); } private static DateTime _call(PageContext pc, int year, int month, int day, int hour, int minute, int second, int millis, TimeZone tz) throws ExpressionException { diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/CreateTime.java b/core/src/main/java/lucee/runtime/functions/dateTime/CreateTime.java index 37c4b98c14..89a1215909 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/CreateTime.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/CreateTime.java @@ -27,6 +27,7 @@ import lucee.runtime.PageContext; import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.type.dt.DateTime; import lucee.runtime.type.dt.TimeImpl; @@ -34,29 +35,29 @@ public final class CreateTime implements Function { private static final long serialVersionUID = -5887770689991548576L; - public static DateTime call(PageContext pc, double hour) { - return _call(pc, hour, 0, 0, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number hour) { + return _call(pc, Caster.toIntValue(hour), 0, 0, 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double hour, double minute) { - return _call(pc, hour, minute, 0, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number hour, Number minute) { + return _call(pc, Caster.toIntValue(hour), Caster.toIntValue(minute), 0, 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double hour, double minute, double second) { - return _call(pc, hour, minute, second, 0, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number hour, Number minute, Number second) { + return _call(pc, Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second), 0, pc.getTimeZone()); } - public static DateTime call(PageContext pc, double hour, double minute, double second, double millis) { - return _call(pc, hour, minute, second, millis, pc.getTimeZone()); + public static DateTime call(PageContext pc, Number hour, Number minute, Number second, Number millis) { + return _call(pc, Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second), Caster.toIntValue(millis), pc.getTimeZone()); } - public static DateTime call(PageContext pc, double hour, double minute, double second, double millis, TimeZone tz) { - return _call(pc, hour, minute, second, millis, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, Number hour, Number minute, Number second, Number millis, TimeZone tz) { + return _call(pc, Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second), Caster.toIntValue(millis), tz == null ? pc.getTimeZone() : tz); } - private static DateTime _call(PageContext pc, double hour, double minute, double second, double millis, TimeZone tz) { + private static DateTime _call(PageContext pc, int hour, int minute, int second, int millis, TimeZone tz) { // TODO check this looks wrong if (tz == null) tz = ThreadLocalPageContext.getTimeZone(pc); - return new TimeImpl(DateTimeUtil.getInstance().toTime(tz, 1899, 12, 30, (int) hour, (int) minute, (int) second, (int) millis, 0), false); + return new TimeImpl(DateTimeUtil.getInstance().toTime(tz, 1899, 12, 30, hour, minute, second, millis, 0), false); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/CreateTimeSpan.java b/core/src/main/java/lucee/runtime/functions/dateTime/CreateTimeSpan.java index db41e31b88..e5ba407119 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/CreateTimeSpan.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/CreateTimeSpan.java @@ -23,15 +23,18 @@ import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.type.dt.TimeSpan; import lucee.runtime.type.dt.TimeSpanImpl; public final class CreateTimeSpan implements Function { - public static TimeSpan call(PageContext pc, double day, double hour, double minute, double second) { - return new TimeSpanImpl((int) day, (int) hour, (int) minute, (int) second); + private static final long serialVersionUID = -5518000993498260249L; + + public static TimeSpan call(PageContext pc, Number day, Number hour, Number minute, Number second) { + return new TimeSpanImpl(Caster.toIntValue(day), Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second)); } - public static TimeSpan call(PageContext pc, double day, double hour, double minute, double second, double millisecond) { - return new TimeSpanImpl((int) day, (int) hour, (int) minute, (int) second, (int) millisecond); + public static TimeSpan call(PageContext pc, Number day, Number hour, Number minute, Number second, Number millisecond) { + return new TimeSpanImpl(Caster.toIntValue(day), Caster.toIntValue(hour), Caster.toIntValue(minute), Caster.toIntValue(second), Caster.toIntValue(millisecond)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DateAdd.java b/core/src/main/java/lucee/runtime/functions/dateTime/DateAdd.java index e485e576ab..56fc62c7d2 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DateAdd.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DateAdd.java @@ -38,17 +38,17 @@ public final class DateAdd extends BIF { // do not change this is used in the chart extension private static final long serialVersionUID = -5827644560609841341L; - public static DateTime call(PageContext pc, String datepart, double number, DateTime date) throws ExpressionException { + public static DateTime call(PageContext pc, String datepart, Number number, DateTime date) throws ExpressionException { return _call(pc, pc.getTimeZone(), datepart, number, date); } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length != 3) throw new FunctionException(pc, "DateAdd", 3, 3, args.length); - return call(pc, Caster.toString(args[0]), Caster.toDoubleValue(args[1]), Caster.toDate(args[2], pc.getTimeZone())); + return call(pc, Caster.toString(args[0]), Caster.toNumber(pc, args[1]), Caster.toDate(args[2], pc.getTimeZone())); } - public static DateTime _call(PageContext pc, TimeZone tz, String datepart, double number, DateTime date) throws ExpressionException { + public static DateTime _call(PageContext pc, TimeZone tz, String datepart, Number number, DateTime date) throws ExpressionException { datepart = datepart.toLowerCase(); long l = (long) number; int n = (int) l; diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DateAddMember.java b/core/src/main/java/lucee/runtime/functions/dateTime/DateAddMember.java index 543d8cbd7c..97f227f650 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DateAddMember.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DateAddMember.java @@ -29,12 +29,16 @@ public class DateAddMember extends BIF { private static final long serialVersionUID = 2435230088985760512L; + public static DateTime call(PageContext pc, DateTime date, String datepart, Number number) throws ExpressionException { + return DateAdd.call(pc, datepart, number, date); + } + public static DateTime call(PageContext pc, DateTime date, String datepart, double number) throws ExpressionException { return DateAdd.call(pc, datepart, number, date); } @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - return call(pc, Caster.toDatetime(args[0], pc.getTimeZone()), Caster.toString(args[1]), Caster.toDoubleValue(args[2])); + return call(pc, Caster.toDatetime(args[0], pc.getTimeZone()), Caster.toString(args[1]), Caster.toNumber(pc, args[2])); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DateCompare.java b/core/src/main/java/lucee/runtime/functions/dateTime/DateCompare.java index 88a27fbeb9..d11ce56ae1 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DateCompare.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DateCompare.java @@ -28,7 +28,6 @@ import lucee.commons.date.JREDateTimeUtil; import lucee.runtime.PageContext; import lucee.runtime.engine.ThreadLocalPageContext; -import lucee.runtime.exp.ExpressionException; import lucee.runtime.exp.FunctionException; import lucee.runtime.exp.PageException; import lucee.runtime.ext.function.BIF; @@ -37,11 +36,13 @@ public final class DateCompare extends BIF { - public static double call(PageContext pc, DateTime left, DateTime right) throws ExpressionException { + private static final long serialVersionUID = -6948569111084038007L; + + public static Number call(PageContext pc, DateTime left, DateTime right) throws PageException { return call(pc, left, right, "s"); } - public static double call(PageContext pc, DateTime left, DateTime right, String datepart) throws ExpressionException { + public static Number call(PageContext pc, DateTime left, DateTime right, String datepart) throws PageException { datepart = datepart.toLowerCase().trim(); TimeZone tz = ThreadLocalPageContext.getTimeZone(pc); Calendar cLeft = JREDateTimeUtil.getThreadCalendar(tz); @@ -66,35 +67,35 @@ public static double call(PageContext pc, DateTime left, DateTime right, String // Year int value = cLeft.get(Calendar.YEAR) - cRight.get(Calendar.YEAR); - if (value != 0) return value > 0 ? 1 : -1; - if (Calendar.YEAR == type) return 0; - if (Calendar.YEAR == type) return 0; + if (value != 0) return Caster.toNumber(pc, value > 0 ? 1 : -1); + if (Calendar.YEAR == type) return Caster.toNumber(pc, 0); + if (Calendar.YEAR == type) return Caster.toNumber(pc, 0); // Month value = cLeft.get(Calendar.MONTH) - cRight.get(Calendar.MONTH); - if (value != 0) return value > 0 ? 1 : -1; - if (Calendar.MONTH == type) return 0; + if (value != 0) return Caster.toNumber(pc, value > 0 ? 1 : -1); + if (Calendar.MONTH == type) return Caster.toNumber(pc, 0); // Day value = cLeft.get(Calendar.DATE) - cRight.get(Calendar.DATE); - if (value != 0) return value > 0 ? 1 : -1; - if (Calendar.DATE == type) return 0; + if (value != 0) return Caster.toNumber(pc, value > 0 ? 1 : -1); + if (Calendar.DATE == type) return Caster.toNumber(pc, 0); // Hour // print.out(cLeft.get(Calendar.HOUR_OF_DAY)+"-"+cRight.get(Calendar.HOUR_OF_DAY)); value = cLeft.get(Calendar.HOUR_OF_DAY) - cRight.get(Calendar.HOUR_OF_DAY); - if (value != 0) return value > 0 ? 1 : -1; - if (Calendar.HOUR == type) return 0; + if (value != 0) return Caster.toNumber(pc, value > 0 ? 1 : -1); + if (Calendar.HOUR == type) return Caster.toNumber(pc, 0); // Minute value = cLeft.get(Calendar.MINUTE) - cRight.get(Calendar.MINUTE); - if (value != 0) return value > 0 ? 1 : -1; - if (Calendar.MINUTE == type) return 0; + if (value != 0) return Caster.toNumber(pc, value > 0 ? 1 : -1); + if (Calendar.MINUTE == type) return Caster.toNumber(pc, 0); // Second value = cLeft.get(Calendar.SECOND) - cRight.get(Calendar.SECOND); - if (value != 0) return value > 0 ? 1 : -1; - return 0; + if (value != 0) return Caster.toNumber(pc, value > 0 ? 1 : -1); + return Caster.toNumber(pc, 0); } diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DateDiff.java b/core/src/main/java/lucee/runtime/functions/dateTime/DateDiff.java index 250d22e3c4..1ca6a7a56a 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DateDiff.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DateDiff.java @@ -60,7 +60,7 @@ public final class DateDiff extends BIF { * @return * @throws ExpressionException */ - public static double call(PageContext pc, String datePart, DateTime left, DateTime right) throws ExpressionException { + public static Number call(PageContext pc, String datePart, DateTime left, DateTime right) throws ExpressionException { long msLeft = left.getTime(); long msRight = right.getTime(); TimeZone tz = ThreadLocalPageContext.getTimeZone(pc); diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DatePart.java b/core/src/main/java/lucee/runtime/functions/dateTime/DatePart.java index 421f895f0c..1868a773c6 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DatePart.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DatePart.java @@ -35,11 +35,11 @@ public final class DatePart extends BIF { private static final long serialVersionUID = -4203375459570986511L; - public static double call(PageContext pc, String datepart, DateTime date) throws ExpressionException { + public static Number call(PageContext pc, String datepart, DateTime date) throws ExpressionException { return call(pc, datepart, date, null); } - public static double call(PageContext pc, String datepart, DateTime date, TimeZone tz) throws ExpressionException { + public static Number call(PageContext pc, String datepart, DateTime date, TimeZone tz) throws ExpressionException { datepart = datepart.toLowerCase(); char first = datepart.length() == 1 ? datepart.charAt(0) : (char) 0; diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DatePartMember.java b/core/src/main/java/lucee/runtime/functions/dateTime/DatePartMember.java index 567421a112..de6b6a6ba9 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DatePartMember.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DatePartMember.java @@ -31,11 +31,11 @@ public class DatePartMember extends BIF { private static final long serialVersionUID = 4954080153486127616L; - public static double call(PageContext pc, DateTime date, String datepart) throws ExpressionException { + public static Number call(PageContext pc, DateTime date, String datepart) throws ExpressionException { return DatePart.call(pc, datepart, date, null); } - public static double call(PageContext pc, DateTime date, String datepart, TimeZone tz) throws ExpressionException { + public static Number call(PageContext pc, DateTime date, String datepart, TimeZone tz) throws ExpressionException { return DatePart.call(pc, datepart, date, tz); } diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Day.java b/core/src/main/java/lucee/runtime/functions/dateTime/Day.java index 62ae8dc6d0..e25092eddd 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Day.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Day.java @@ -34,16 +34,16 @@ public final class Day extends BIF { private static final long serialVersionUID = -7476348690381151695L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getDay(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getDay(tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DayOfWeek.java b/core/src/main/java/lucee/runtime/functions/dateTime/DayOfWeek.java index a5cdf67456..52f92b4378 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DayOfWeek.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DayOfWeek.java @@ -35,16 +35,16 @@ public final class DayOfWeek extends BIF { private static final long serialVersionUID = 8025414014490122478L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getDayOfWeek(Locale.US, tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getDayOfWeek(Locale.US, tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DayOfYear.java b/core/src/main/java/lucee/runtime/functions/dateTime/DayOfYear.java index d9583148ec..555204a368 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DayOfYear.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DayOfYear.java @@ -35,16 +35,16 @@ public final class DayOfYear extends BIF { private static final long serialVersionUID = 8136302798735384757L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getDayOfYear(Locale.US, tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getDayOfYear(Locale.US, tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DaysInMonth.java b/core/src/main/java/lucee/runtime/functions/dateTime/DaysInMonth.java index ffa3271e95..2213982621 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DaysInMonth.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DaysInMonth.java @@ -34,16 +34,16 @@ public final class DaysInMonth extends BIF { private static final long serialVersionUID = 1383750689865240892L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getDaysInMonth(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getDaysInMonth(tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/DaysInYear.java b/core/src/main/java/lucee/runtime/functions/dateTime/DaysInYear.java index 20a37a2574..14bad4fbc7 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/DaysInYear.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/DaysInYear.java @@ -34,17 +34,17 @@ public final class DaysInYear extends BIF { private static final long serialVersionUID = -2900647153777735688L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { DateTimeUtil util = DateTimeUtil.getInstance(); - return util.isLeapYear(util.getYear(tz, date)) ? 366 : 365; + return Caster.toNumber(pc, util.isLeapYear(util.getYear(tz, date)) ? 366 : 365); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/FirstDayOfMonth.java b/core/src/main/java/lucee/runtime/functions/dateTime/FirstDayOfMonth.java index d3df4dcce7..dc8f33ab13 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/FirstDayOfMonth.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/FirstDayOfMonth.java @@ -34,16 +34,16 @@ public final class FirstDayOfMonth extends BIF { private static final long serialVersionUID = 2771139908016254661L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getFirstDayOfMonth(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getFirstDayOfMonth(tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Hour.java b/core/src/main/java/lucee/runtime/functions/dateTime/Hour.java index 36d2d16aa8..ad6820f20c 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Hour.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Hour.java @@ -34,16 +34,16 @@ public final class Hour extends BIF { private static final long serialVersionUID = 1249742018407086889L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getHour(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getHour(tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/MilliSecond.java b/core/src/main/java/lucee/runtime/functions/dateTime/MilliSecond.java index 4a99636862..8ed362abfb 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/MilliSecond.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/MilliSecond.java @@ -34,16 +34,16 @@ public final class MilliSecond extends BIF { private static final long serialVersionUID = -7897327551736295220L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getMilliSecond(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getMilliSecond(tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Minute.java b/core/src/main/java/lucee/runtime/functions/dateTime/Minute.java index a59c0fca2d..48c188946e 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Minute.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Minute.java @@ -34,16 +34,16 @@ public final class Minute extends BIF { private static final long serialVersionUID = 1716321988319981966L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getMinute(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getMinute(tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Month.java b/core/src/main/java/lucee/runtime/functions/dateTime/Month.java index a9bb640f54..4ab3006192 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Month.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Month.java @@ -34,16 +34,16 @@ public final class Month extends BIF { private static final long serialVersionUID = -5901154569294391655L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getMonth(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getMonth(tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Quarter.java b/core/src/main/java/lucee/runtime/functions/dateTime/Quarter.java index db8d173bc2..4a47d69dd4 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Quarter.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Quarter.java @@ -34,16 +34,16 @@ public final class Quarter extends BIF { private static final long serialVersionUID = 297634314192413459L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return (DateTimeUtil.getInstance().getMonth(tz, date) - 1) / 3 + 1; + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, (DateTimeUtil.getInstance().getMonth(tz, date) - 1) / 3 + 1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Second.java b/core/src/main/java/lucee/runtime/functions/dateTime/Second.java index 32ca1a6bd4..182b7cc66c 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Second.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Second.java @@ -26,19 +26,22 @@ import lucee.commons.date.DateTimeUtil; import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.type.dt.DateTime; public final class Second implements Function { - public static double call(PageContext pc, DateTime date) { + private static final long serialVersionUID = 5414126101123214213L; + + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getSecond(tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getSecond(tz, date)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/SetDay.java b/core/src/main/java/lucee/runtime/functions/dateTime/SetDay.java index dc32652e08..d0ab49934c 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/SetDay.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/SetDay.java @@ -14,12 +14,12 @@ public class SetDay extends BIF { private static final long serialVersionUID = 5311313376456035139L; - public static DateTime call(PageContext pc, DateTime date, double value) { - return _call(date, (int) value, pc.getTimeZone()); + public static DateTime call(PageContext pc, DateTime date, Number value) { + return _call(date, Caster.toIntValue(value), pc.getTimeZone()); } - public static DateTime call(PageContext pc, DateTime date, double value, TimeZone tz) { - return _call(date, (int) value, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, DateTime date, Number value, TimeZone tz) { + return _call(date, Caster.toIntValue(value), tz == null ? pc.getTimeZone() : tz); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/SetHour.java b/core/src/main/java/lucee/runtime/functions/dateTime/SetHour.java index b91497edb9..f6902bfa4f 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/SetHour.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/SetHour.java @@ -14,12 +14,12 @@ public class SetHour extends BIF { private static final long serialVersionUID = -3456184293622999770L; - public static DateTime call(PageContext pc, DateTime date, double value) { - return _call(date, (int) value, pc.getTimeZone()); + public static DateTime call(PageContext pc, DateTime date, Number value) { + return _call(date, Caster.toIntValue(value), pc.getTimeZone()); } - public static DateTime call(PageContext pc, DateTime date, double value, TimeZone tz) { - return _call(date, (int) value, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, DateTime date, Number value, TimeZone tz) { + return _call(date, Caster.toIntValue(value), tz == null ? pc.getTimeZone() : tz); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/SetMilliSecond.java b/core/src/main/java/lucee/runtime/functions/dateTime/SetMilliSecond.java index 3752c6f463..2bddc3d972 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/SetMilliSecond.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/SetMilliSecond.java @@ -14,12 +14,12 @@ public class SetMilliSecond extends BIF { private static final long serialVersionUID = -2599246132828267606L; - public static DateTime call(PageContext pc, DateTime date, double value) { - return _call(date, (int) value, pc.getTimeZone()); + public static DateTime call(PageContext pc, DateTime date, Number value) { + return _call(date, Caster.toIntValue(value), pc.getTimeZone()); } - public static DateTime call(PageContext pc, DateTime date, double value, TimeZone tz) { - return _call(date, (int) value, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, DateTime date, Number value, TimeZone tz) { + return _call(date, Caster.toIntValue(value), tz == null ? pc.getTimeZone() : tz); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/SetMinute.java b/core/src/main/java/lucee/runtime/functions/dateTime/SetMinute.java index 026bd050ec..642b503a18 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/SetMinute.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/SetMinute.java @@ -14,12 +14,12 @@ public class SetMinute extends BIF { private static final long serialVersionUID = -6903969643282438979L; - public static DateTime call(PageContext pc, DateTime date, double value) { - return _call(date, (int) value, pc.getTimeZone()); + public static DateTime call(PageContext pc, DateTime date, Number value) { + return _call(date, Caster.toIntValue(value), pc.getTimeZone()); } - public static DateTime call(PageContext pc, DateTime date, double value, TimeZone tz) { - return _call(date, (int) value, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, DateTime date, Number value, TimeZone tz) { + return _call(date, Caster.toIntValue(value), tz == null ? pc.getTimeZone() : tz); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/SetMonth.java b/core/src/main/java/lucee/runtime/functions/dateTime/SetMonth.java index 22fa12c911..ae34d55b05 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/SetMonth.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/SetMonth.java @@ -14,12 +14,12 @@ public class SetMonth extends BIF { private static final long serialVersionUID = 4327734406273363858L; - public static DateTime call(PageContext pc, DateTime date, double value) { - return _call(date, (int) value, pc.getTimeZone()); + public static DateTime call(PageContext pc, DateTime date, Number value) { + return _call(date, Caster.toIntValue(value), pc.getTimeZone()); } - public static DateTime call(PageContext pc, DateTime date, double value, TimeZone tz) { - return _call(date, (int) value, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, DateTime date, Number value, TimeZone tz) { + return _call(date, Caster.toIntValue(value), tz == null ? pc.getTimeZone() : tz); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/SetSecond.java b/core/src/main/java/lucee/runtime/functions/dateTime/SetSecond.java index 350abe9f75..f0eb386b0a 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/SetSecond.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/SetSecond.java @@ -14,12 +14,12 @@ public class SetSecond extends BIF { private static final long serialVersionUID = 4545770892579927986L; - public static DateTime call(PageContext pc, DateTime date, double seconds) { - return _call(date, (int) seconds, pc.getTimeZone()); + public static DateTime call(PageContext pc, DateTime date, Number seconds) { + return _call(date, Caster.toIntValue(seconds), pc.getTimeZone()); } - public static DateTime call(PageContext pc, DateTime date, double seconds, TimeZone tz) { - return _call(date, (int) seconds, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, DateTime date, Number seconds, TimeZone tz) { + return _call(date, Caster.toIntValue(seconds), tz == null ? pc.getTimeZone() : tz); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/SetYear.java b/core/src/main/java/lucee/runtime/functions/dateTime/SetYear.java index b1701c042f..79a6492d55 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/SetYear.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/SetYear.java @@ -14,12 +14,12 @@ public class SetYear extends BIF { private static final long serialVersionUID = -6382570189803653591L; - public static DateTime call(PageContext pc, DateTime date, double value) { - return _call(date, (int) value, pc.getTimeZone()); + public static DateTime call(PageContext pc, DateTime date, Number value) { + return _call(date, Caster.toIntValue(value), pc.getTimeZone()); } - public static DateTime call(PageContext pc, DateTime date, double value, TimeZone tz) { - return _call(date, (int) value, tz == null ? pc.getTimeZone() : tz); + public static DateTime call(PageContext pc, DateTime date, Number value, TimeZone tz) { + return _call(date, Caster.toIntValue(value), tz == null ? pc.getTimeZone() : tz); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Week.java b/core/src/main/java/lucee/runtime/functions/dateTime/Week.java index fcde257600..134ae80fba 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Week.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Week.java @@ -27,19 +27,20 @@ import lucee.commons.date.DateTimeUtil; import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.type.dt.DateTime; public final class Week implements Function { - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, TimeZone tz) { return _call(pc, date, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getWeekOfYear(Locale.US, tz, date); + private static Number _call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getWeekOfYear(Locale.US, tz, date)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/dateTime/Year.java b/core/src/main/java/lucee/runtime/functions/dateTime/Year.java index fcb0836591..e00b272ec3 100644 --- a/core/src/main/java/lucee/runtime/functions/dateTime/Year.java +++ b/core/src/main/java/lucee/runtime/functions/dateTime/Year.java @@ -23,6 +23,7 @@ import lucee.commons.date.DateTimeUtil; import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.type.dt.DateTime; /** @@ -30,11 +31,11 @@ */ public final class Year implements Function { - public static double call(PageContext pc, DateTime date) { - return DateTimeUtil.getInstance().getYear(pc.getTimeZone(), date); + public static Number call(PageContext pc, DateTime date) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getYear(pc.getTimeZone(), date)); } - public static double call(PageContext pc, DateTime date, TimeZone tz) { - return DateTimeUtil.getInstance().getYear(tz == null ? pc.getTimeZone() : tz, date); + public static Number call(PageContext pc, DateTime date, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getYear(tz == null ? pc.getTimeZone() : tz, date)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/decision/IsArray.java b/core/src/main/java/lucee/runtime/functions/decision/IsArray.java index 2ead7798e2..83dd59e8e6 100644 --- a/core/src/main/java/lucee/runtime/functions/decision/IsArray.java +++ b/core/src/main/java/lucee/runtime/functions/decision/IsArray.java @@ -23,21 +23,25 @@ import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.op.Decision; import lucee.runtime.type.Array; public final class IsArray implements Function { + private static final long serialVersionUID = 5624829658684259509L; + public static boolean call(PageContext pc, Object object) { return Decision.isArray(object); } - public static boolean call(PageContext pc, Object object, double dimension) { - if (dimension == -999) return Decision.isArray(object); // -999 == default value for named argument + public static boolean call(PageContext pc, Object object, Number dimension) { + int dim = Caster.toIntValue(dimension); + if (dim == -999) return Decision.isArray(object); // -999 == default value for named argument if ((object instanceof Array)) { return ((Array) object).getDimension() == (int) dimension; } - else if (dimension == 1) { + else if (dim == 1) { return Decision.isArray(object); } return false; diff --git a/core/src/main/java/lucee/runtime/functions/decision/IsDefined.java b/core/src/main/java/lucee/runtime/functions/decision/IsDefined.java index 7837817bdf..2572909e07 100644 --- a/core/src/main/java/lucee/runtime/functions/decision/IsDefined.java +++ b/core/src/main/java/lucee/runtime/functions/decision/IsDefined.java @@ -27,6 +27,7 @@ import lucee.runtime.ext.function.Function; import lucee.runtime.interpreter.SecurityInterpreterException; import lucee.runtime.interpreter.VariableInterpreter; +import lucee.runtime.op.Caster; import lucee.runtime.type.Collection; import lucee.runtime.type.KeyImpl; import lucee.runtime.type.Null; @@ -42,9 +43,14 @@ public static boolean call(PageContext pc, String varName) throws SecurityInterp // return pc.isDefined(varName); } + // used for older compiled code in ra files public static boolean call(PageContext pc, double scope, Collection.Key key) { + return call(pc, Caster.toNumber(scope), key); + } + + public static boolean call(PageContext pc, Number scope, Collection.Key key) { try { - Object coll = VariableInterpreter.scope(pc, (int) scope, false); + Object coll = VariableInterpreter.scope(pc, Caster.toIntValue(scope), false); if (coll == null) return false; Object _null = NullSupportHelper.NULL(pc); coll = ((VariableUtilImpl) pc.getVariableUtil()).get(pc, coll, key, _null); @@ -58,10 +64,15 @@ public static boolean call(PageContext pc, double scope, Collection.Key key) { return true; } + // used for older compiled code in ra files public static boolean call(PageContext pc, double scope, Collection.Key[] varNames) { + return call(pc, Caster.toNumber(scope), varNames); + } + + public static boolean call(PageContext pc, Number scope, Collection.Key[] varNames) { Object defVal = NullSupportHelper.NULL(pc); try { - Object coll = VariableInterpreter.scope(pc, (int) scope, false); + Object coll = VariableInterpreter.scope(pc, Caster.toIntValue(scope), false); // Object coll =pc.scope((int)scope); VariableUtilImpl vu = ((VariableUtilImpl) pc.getVariableUtil()); for (int i = 0; i < varNames.length; i++) { diff --git a/core/src/main/java/lucee/runtime/functions/decision/IsLeapYear.java b/core/src/main/java/lucee/runtime/functions/decision/IsLeapYear.java index fca23cc379..213c6db8d3 100644 --- a/core/src/main/java/lucee/runtime/functions/decision/IsLeapYear.java +++ b/core/src/main/java/lucee/runtime/functions/decision/IsLeapYear.java @@ -20,14 +20,15 @@ import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.op.Decision; /** * Implements the CFML Function isleapyear */ public final class IsLeapYear implements Function { - public static boolean call(PageContext pc, double year) { - return Decision.isLeapYear((int) year); + public static boolean call(PageContext pc, Number year) { + return Decision.isLeapYear(Caster.toIntValue(year)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/displayFormatting/FormatBaseN.java b/core/src/main/java/lucee/runtime/functions/displayFormatting/FormatBaseN.java index 6425c49955..50990f5b8f 100644 --- a/core/src/main/java/lucee/runtime/functions/displayFormatting/FormatBaseN.java +++ b/core/src/main/java/lucee/runtime/functions/displayFormatting/FormatBaseN.java @@ -28,10 +28,13 @@ import lucee.runtime.op.Caster; public final class FormatBaseN implements Function { + private static final long serialVersionUID = -8509493957721943317L; private static final long uint32_mask = 0x0000_0000_FFFF_FFFFL; - public static String call(PageContext pc, double number, double radix) throws ExpressionException { - if (radix < 2 || radix > 36) throw new FunctionException(pc, "formatBaseN", 2, "radix", "radix must be between 2 an 36"); + public static String call(PageContext pc, Number number, Number radix) throws ExpressionException { + int rdx = Caster.toIntValue(radix); + + if (rdx < 2 || rdx > 36) throw new FunctionException(pc, "formatBaseN", 2, "radix", "radix must be between 2 an 36"); // LDEV-3776 // Adobe compat - only support values in the range of a signed int32, and for base 2 and 16 mask @@ -43,6 +46,6 @@ public static String call(PageContext pc, double number, double radix) throws Ex throw new FunctionException(pc, "formatBaseN", 1, "number", "number to formatted must be on or between Integer.MIN_VALUE and Integer.MAX_VALUE (" + Integer.MIN_VALUE + ", " + Integer.MAX_VALUE + ")"); } - return radix == 2 || radix == 16 ? Long.toString(converted & uint32_mask, (int) radix) : Long.toString(converted, (int) radix); + return rdx == 2 || rdx == 16 ? Long.toString(converted & uint32_mask, (int) radix) : Long.toString(converted, (int) radix); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLCodeFormat.java b/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLCodeFormat.java index 3ed2450b4d..2bef22361b 100644 --- a/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLCodeFormat.java +++ b/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLCodeFormat.java @@ -24,17 +24,20 @@ import lucee.commons.lang.HTMLEntities; import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class HTMLCodeFormat implements Function { + private static final long serialVersionUID = -765605600324494442L; + public static String call(PageContext pc, String html) { return "
" + HTMLEntities.escapeHTML(html, HTMLEntities.HTMLV40) + "
"; } - public static String call(PageContext pc, String html, double version) { + public static String call(PageContext pc, String html, Number version) { + double ver = Caster.toDoubleValue(version); short v = HTMLEntities.HTMLV40; - if (version == 3.2D) v = HTMLEntities.HTMLV32; - else if (version == 4.0D) v = HTMLEntities.HTMLV40; - + if (ver == 3.2D) v = HTMLEntities.HTMLV32; + else if (ver == 4.0D) v = HTMLEntities.HTMLV40; return "
" + HTMLEntities.escapeHTML(html, v) + "
"; } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLEditFormat.java b/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLEditFormat.java index 2d995e5e5d..4a37948d46 100644 --- a/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLEditFormat.java +++ b/core/src/main/java/lucee/runtime/functions/displayFormatting/HTMLEditFormat.java @@ -24,18 +24,22 @@ import lucee.commons.lang.HTMLEntities; import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class HTMLEditFormat implements Function { + private static final long serialVersionUID = 5405529396560613367L; + public static String call(PageContext pc, String html) { return HTMLEntities.escapeHTML(html, HTMLEntities.HTMLV20); } - public static String call(PageContext pc, String html, double version) { + public static String call(PageContext pc, String html, Number version) { + double ver = Caster.toDoubleValue(version); short v = HTMLEntities.HTMLV20; - if (version == 2D) v = HTMLEntities.HTMLV20; - else if (version == 3.2D) v = HTMLEntities.HTMLV32; - else if (version == 4D) v = HTMLEntities.HTMLV40; - else if (version <= 0D) v = HTMLEntities.HTMLV40; + if (ver == 2D) v = HTMLEntities.HTMLV20; + else if (ver == 3.2D) v = HTMLEntities.HTMLV32; + else if (ver == 4D) v = HTMLEntities.HTMLV40; + else if (ver <= 0D) v = HTMLEntities.HTMLV40; return HTMLEntities.escapeHTML(html, v); } diff --git a/core/src/main/java/lucee/runtime/functions/file/FileSeek.java b/core/src/main/java/lucee/runtime/functions/file/FileSeek.java index 2a9dd47cf5..ad02759d57 100755 --- a/core/src/main/java/lucee/runtime/functions/file/FileSeek.java +++ b/core/src/main/java/lucee/runtime/functions/file/FileSeek.java @@ -24,12 +24,12 @@ import lucee.runtime.op.Caster; public class FileSeek { - public static String call(PageContext pc, Object fileObj, double pos) throws PageException { + public static String call(PageContext pc, Object fileObj, Number pos) throws PageException { if (!(fileObj instanceof FileStreamWrapper)) throw new FunctionException(pc, "FileSeek", 1, "fileObj", "invalid type [" + Caster.toTypeName(fileObj) + "], only File Object produced by FileOpen supported"); FileStreamWrapper fs = (FileStreamWrapper) fileObj; - fs.seek((long) pos); + fs.seek(Caster.toLongValue(pos)); return null; } diff --git a/core/src/main/java/lucee/runtime/functions/file/FileSkipBytes.java b/core/src/main/java/lucee/runtime/functions/file/FileSkipBytes.java index 6ce3139311..97b98a9669 100755 --- a/core/src/main/java/lucee/runtime/functions/file/FileSkipBytes.java +++ b/core/src/main/java/lucee/runtime/functions/file/FileSkipBytes.java @@ -25,12 +25,12 @@ public class FileSkipBytes { - public static String call(PageContext pc, Object fileObj, double len) throws PageException { + public static String call(PageContext pc, Object fileObj, Number len) throws PageException { if (!(fileObj instanceof FileStreamWrapper)) throw new FunctionException(pc, "FileSkipBytes", 1, "fileObj", "invalid type [" + Caster.toTypeName(fileObj) + "], only File Object produced by FileOpen supported"); FileStreamWrapper fs = (FileStreamWrapper) fileObj; - fs.skip((int) len); + fs.skip(Caster.toIntValue(len)); return null; } diff --git a/core/src/main/java/lucee/runtime/functions/file/GetFreeSpace.java b/core/src/main/java/lucee/runtime/functions/file/GetFreeSpace.java index f3e87645f8..0f6ba7b73c 100644 --- a/core/src/main/java/lucee/runtime/functions/file/GetFreeSpace.java +++ b/core/src/main/java/lucee/runtime/functions/file/GetFreeSpace.java @@ -28,10 +28,10 @@ public class GetFreeSpace { - public static double call(PageContext pc, Object obj) throws PageException { + public static Number call(PageContext pc, Object obj) throws PageException { Resource res = Caster.toResource(pc, obj, true, pc.getConfig().allowRealPath()); if (!(res instanceof File)) throw new FunctionException(pc, "getFreeSpace", 1, "filepath", "this function is only supported for the local filesystem"); File file = (File) res; - return file.getFreeSpace(); + return Caster.toNumber(pc, file.getFreeSpace()); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/file/GetTotalSpace.java b/core/src/main/java/lucee/runtime/functions/file/GetTotalSpace.java index e26086bda7..7246c0d7f3 100644 --- a/core/src/main/java/lucee/runtime/functions/file/GetTotalSpace.java +++ b/core/src/main/java/lucee/runtime/functions/file/GetTotalSpace.java @@ -27,10 +27,10 @@ import lucee.runtime.op.Caster; public class GetTotalSpace { - public static double call(PageContext pc, Object obj) throws PageException { + public static Number call(PageContext pc, Object obj) throws PageException { Resource res = Caster.toResource(pc, obj, true, pc.getConfig().allowRealPath()); if (!(res instanceof File)) throw new FunctionException(pc, "getTotalSpace", 1, "filepath", "this function is only supported for the local filesystem"); File file = (File) res; - return file.getTotalSpace(); + return Caster.toNumber(pc, file.getTotalSpace()); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/international/LSDatePart.java b/core/src/main/java/lucee/runtime/functions/international/LSDatePart.java index ea787697ef..66e489a826 100644 --- a/core/src/main/java/lucee/runtime/functions/international/LSDatePart.java +++ b/core/src/main/java/lucee/runtime/functions/international/LSDatePart.java @@ -41,15 +41,15 @@ public final class LSDatePart implements Function { private static final long serialVersionUID = -4203375459570986511L; - public static double call(PageContext pc, String datepart, DateTime date) throws ExpressionException { + public static Number call(PageContext pc, String datepart, DateTime date) throws ExpressionException { return call(pc, datepart, date, null, null); } - public static double call(PageContext pc, String datepart, DateTime date, Locale locale) throws ExpressionException { + public static Number call(PageContext pc, String datepart, DateTime date, Locale locale) throws ExpressionException { return call(pc, datepart, date, locale, null); } - public static double call(PageContext pc, String datepart, DateTime date, Locale locale, TimeZone tz) throws ExpressionException { + public static Number call(PageContext pc, String datepart, DateTime date, Locale locale, TimeZone tz) throws ExpressionException { datepart = datepart.toLowerCase(); char first = datepart.length() == 1 ? datepart.charAt(0) : (char) 0; diff --git a/core/src/main/java/lucee/runtime/functions/international/LSDayOfWeek.java b/core/src/main/java/lucee/runtime/functions/international/LSDayOfWeek.java index ff19bfcbce..2aa8e51e97 100644 --- a/core/src/main/java/lucee/runtime/functions/international/LSDayOfWeek.java +++ b/core/src/main/java/lucee/runtime/functions/international/LSDayOfWeek.java @@ -35,15 +35,15 @@ public final class LSDayOfWeek extends BIF { private static final long serialVersionUID = -9002250869621547151L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getLocale(), pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, Locale locale) { + public static Number call(PageContext pc, DateTime date, Locale locale) { return _call(pc, date, locale, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { return _call(pc, date, locale == null ? pc.getLocale() : locale, tz == null ? pc.getTimeZone() : tz); } @@ -54,7 +54,7 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { return call(pc, Caster.toDatetime(args[0], pc.getTimeZone()), Caster.toLocale(args[1]), Caster.toTimeZone(args[2])); } - private static double _call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { - return DateTimeUtil.getInstance().getDayOfWeek(locale, tz, date); + private static Number _call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getDayOfWeek(locale, tz, date)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/international/LSDayOfYear.java b/core/src/main/java/lucee/runtime/functions/international/LSDayOfYear.java index 77a381ae37..3333924c05 100644 --- a/core/src/main/java/lucee/runtime/functions/international/LSDayOfYear.java +++ b/core/src/main/java/lucee/runtime/functions/international/LSDayOfYear.java @@ -35,20 +35,20 @@ public final class LSDayOfYear extends BIF { private static final long serialVersionUID = 8136302798735384757L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, null, null); } - public static double call(PageContext pc, DateTime date, Locale locale) { + public static Number call(PageContext pc, DateTime date, Locale locale) { return _call(pc, date, locale, null); } - public static double call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { return _call(pc, date, locale == null ? pc.getLocale() : locale, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, Locale l, TimeZone tz) { - return DateTimeUtil.getInstance().getDayOfYear(l, tz, date); + private static Number _call(PageContext pc, DateTime date, Locale l, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getDayOfYear(l, tz, date)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/international/LSParseNumber.java b/core/src/main/java/lucee/runtime/functions/international/LSParseNumber.java index 77b1e1b2db..699d476360 100644 --- a/core/src/main/java/lucee/runtime/functions/international/LSParseNumber.java +++ b/core/src/main/java/lucee/runtime/functions/international/LSParseNumber.java @@ -40,11 +40,11 @@ public final class LSParseNumber implements Function { private static Map> formatters = new ConcurrentHashMap>(); - public static double call(PageContext pc, String string) throws PageException { + public static Number call(PageContext pc, String string) throws PageException { return toDoubleValue(pc.getLocale(), string); } - public static double call(PageContext pc, String string, Locale locale) throws PageException { + public static Number call(PageContext pc, String string, Locale locale) throws PageException { return toDoubleValue(locale == null ? pc.getLocale() : locale, string); } diff --git a/core/src/main/java/lucee/runtime/functions/international/LSWeek.java b/core/src/main/java/lucee/runtime/functions/international/LSWeek.java index 5e14c0fac9..9639556f15 100644 --- a/core/src/main/java/lucee/runtime/functions/international/LSWeek.java +++ b/core/src/main/java/lucee/runtime/functions/international/LSWeek.java @@ -24,25 +24,26 @@ import lucee.commons.date.DateTimeUtil; import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.type.dt.DateTime; public final class LSWeek implements Function { private static final long serialVersionUID = -4184509921145613454L; - public static double call(PageContext pc, DateTime date) { + public static Number call(PageContext pc, DateTime date) { return _call(pc, date, pc.getLocale(), pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, Locale locale) { + public static Number call(PageContext pc, DateTime date, Locale locale) { return _call(pc, date, locale == null ? pc.getLocale() : locale, pc.getTimeZone()); } - public static double call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { + public static Number call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { return _call(pc, date, locale == null ? pc.getLocale() : locale, tz == null ? pc.getTimeZone() : tz); } - private static double _call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { - return DateTimeUtil.getInstance().getWeekOfYear(locale, tz, date); + private static Number _call(PageContext pc, DateTime date, Locale locale, TimeZone tz) { + return Caster.toNumber(pc, DateTimeUtil.getInstance().getWeekOfYear(locale, tz, date)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/list/ListAvg.java b/core/src/main/java/lucee/runtime/functions/list/ListAvg.java index 2f433685c3..da4f57b274 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListAvg.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListAvg.java @@ -34,16 +34,16 @@ public final class ListAvg extends BIF { private static final long serialVersionUID = -7365055491706152507L; - public static double call(PageContext pc, String list) throws ExpressionException { + public static Number call(PageContext pc, String list) throws ExpressionException { return call(pc, list, ",", false); } - public static double call(PageContext pc, String list, String delimiter) throws ExpressionException { + public static Number call(PageContext pc, String list, String delimiter) throws ExpressionException { return call(pc, list, delimiter, false); } - public static double call(PageContext pc, String list, String delimiter, boolean multiCharacterDelimiter) throws ExpressionException { - return ArrayUtil.avg(ListUtil.listToArray(list, delimiter, false, multiCharacterDelimiter)); + public static Number call(PageContext pc, String list, String delimiter, boolean multiCharacterDelimiter) throws ExpressionException { + return Caster.toNumber(pc, ArrayUtil.avg(ListUtil.listToArray(list, delimiter, false, multiCharacterDelimiter))); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListContains.java b/core/src/main/java/lucee/runtime/functions/list/ListContains.java index 1a48964e44..5330bf1eb7 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListContains.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListContains.java @@ -32,20 +32,20 @@ public final class ListContains extends BIF { private static final long serialVersionUID = -7580788340022587225L; - public static double call(PageContext pc, String list, String value) { + public static Number call(PageContext pc, String list, String value) { return call(pc, list, value, ",", false, false); } - public static double call(PageContext pc, String list, String value, String delimter) { + public static Number call(PageContext pc, String list, String value, String delimter) { return call(pc, list, value, delimter, false, false); } - public static double call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields) { + public static Number call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields) { return call(pc, list, value, delimter, includeEmptyFields, false); } - public static double call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields, boolean multiCharacterDelimiter) { - return ListUtil.listContains(list, value, delimter, includeEmptyFields, multiCharacterDelimiter) + 1; + public static Number call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields, boolean multiCharacterDelimiter) { + return Caster.toNumber(pc, ListUtil.listContains(list, value, delimter, includeEmptyFields, multiCharacterDelimiter) + 1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListContainsNoCase.java b/core/src/main/java/lucee/runtime/functions/list/ListContainsNoCase.java index 5d21a0d90c..a6d11ec48f 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListContainsNoCase.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListContainsNoCase.java @@ -32,20 +32,20 @@ public final class ListContainsNoCase extends BIF { private static final long serialVersionUID = 4955787566835292639L; - public static double call(PageContext pc, String list, String value) { + public static Number call(PageContext pc, String list, String value) { return call(pc, list, value, ",", false, false); } - public static double call(PageContext pc, String list, String value, String delimter) { + public static Number call(PageContext pc, String list, String value, String delimter) { return call(pc, list, value, delimter, false, false); } - public static double call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields) { + public static Number call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields) { return call(pc, list, value, delimter, includeEmptyFields, false); } - public static double call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields, boolean multiCharacterDelimiter) { - return ListUtil.listContainsNoCase(list, value, delimter, includeEmptyFields, multiCharacterDelimiter) + 1; + public static Number call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields, boolean multiCharacterDelimiter) { + return Caster.toNumber(pc, ListUtil.listContainsNoCase(list, value, delimter, includeEmptyFields, multiCharacterDelimiter) + 1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListDeleteAt.java b/core/src/main/java/lucee/runtime/functions/list/ListDeleteAt.java index baba8ffd58..ab40d58fd4 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListDeleteAt.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListDeleteAt.java @@ -33,16 +33,16 @@ public final class ListDeleteAt extends BIF { private static final long serialVersionUID = 7050644316663288912L; private static char[] DEFAULT_DELIMITER = new char[] { ',' }; - public static String call(PageContext pc, String list, double posNumber) throws ExpressionException { - return _call(pc, list, (int) posNumber, DEFAULT_DELIMITER, false); + public static String call(PageContext pc, String list, Number posNumber) throws ExpressionException { + return _call(pc, list, Caster.toIntValue(posNumber), DEFAULT_DELIMITER, false); } - public static String call(PageContext pc, String list, double posNumber, String del) throws ExpressionException { - return _call(pc, list, (int) posNumber, del.toCharArray(), false); + public static String call(PageContext pc, String list, Number posNumber, String del) throws ExpressionException { + return _call(pc, list, Caster.toIntValue(posNumber), del.toCharArray(), false); } - public static String call(PageContext pc, String list, double posNumber, String del, boolean includeEmptyFields) throws ExpressionException { - return _call(pc, list, (int) posNumber, del.toCharArray(), includeEmptyFields); + public static String call(PageContext pc, String list, Number posNumber, String del, boolean includeEmptyFields) throws ExpressionException { + return _call(pc, list, Caster.toIntValue(posNumber), del.toCharArray(), includeEmptyFields); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListEach.java b/core/src/main/java/lucee/runtime/functions/list/ListEach.java index 623fad87aa..6a9b0619db 100644 --- a/core/src/main/java/lucee/runtime/functions/list/ListEach.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListEach.java @@ -56,8 +56,8 @@ public static String call(PageContext pc, String list, UDF udf, String delimiter } public static String call(PageContext pc, String list, UDF udf, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, - double maxThreads) throws PageException { - return _call(pc, list, udf, delimiter, includeEmptyFields, multiCharacterDelimiter, parallel, (int) maxThreads); + Number maxThreads) throws PageException { + return _call(pc, list, udf, delimiter, includeEmptyFields, multiCharacterDelimiter, parallel, Caster.toIntValue(maxThreads)); } private static String _call(PageContext pc, String list, UDF udf, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, diff --git a/core/src/main/java/lucee/runtime/functions/list/ListEvery.java b/core/src/main/java/lucee/runtime/functions/list/ListEvery.java index faff9b4e7a..a849161b14 100644 --- a/core/src/main/java/lucee/runtime/functions/list/ListEvery.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListEvery.java @@ -56,8 +56,8 @@ public static boolean call(PageContext pc, String list, UDF udf, String delimite } public static boolean call(PageContext pc, String list, UDF udf, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, - double maxThreads) throws PageException { - return _call(pc, list, udf, delimiter, includeEmptyFields, multiCharacterDelimiter, parallel, (int) maxThreads); + Number maxThreads) throws PageException { + return _call(pc, list, udf, delimiter, includeEmptyFields, multiCharacterDelimiter, parallel, Caster.toIntValue(maxThreads)); } private static boolean _call(PageContext pc, String list, UDF udf, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, diff --git a/core/src/main/java/lucee/runtime/functions/list/ListFilter.java b/core/src/main/java/lucee/runtime/functions/list/ListFilter.java index c8c30a26ea..25b1f387e8 100644 --- a/core/src/main/java/lucee/runtime/functions/list/ListFilter.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListFilter.java @@ -37,28 +37,33 @@ public final class ListFilter extends BIF { private static final long serialVersionUID = 2182867537570796564L; public static String call(PageContext pc, String list, UDF filter) throws PageException { - return call(pc, list, filter, ",", false, true, false, 20); + return _call(pc, list, filter, ",", false, true, false, 20); } public static String call(PageContext pc, String list, UDF filter, String delimiter) throws PageException { - return call(pc, list, filter, delimiter, false, true, false, 20); + return _call(pc, list, filter, delimiter, false, true, false, 20); } public static String call(PageContext pc, String list, UDF filter, String delimiter, boolean includeEmptyFields) throws PageException { - return call(pc, list, filter, delimiter, includeEmptyFields, true, false, 20); + return _call(pc, list, filter, delimiter, includeEmptyFields, true, false, 20); } public static String call(PageContext pc, String list, UDF filter, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter) throws PageException { - return call(pc, list, filter, delimiter, includeEmptyFields, multiCharacterDelimiter, false, 20); + return _call(pc, list, filter, delimiter, includeEmptyFields, multiCharacterDelimiter, false, 20); } public static String call(PageContext pc, String list, UDF filter, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel) throws PageException { - return call(pc, list, filter, delimiter, includeEmptyFields, multiCharacterDelimiter, parallel, 20); + return _call(pc, list, filter, delimiter, includeEmptyFields, multiCharacterDelimiter, parallel, 20); } public static String call(PageContext pc, String list, UDF filter, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, - double maxThreads) throws PageException { + Number maxThreads) throws PageException { + return _call(pc, list, filter, delimiter, includeEmptyFields, multiCharacterDelimiter, parallel, Caster.toIntValue(maxThreads)); + } + + private static String _call(PageContext pc, String list, UDF filter, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, + int maxThreads) throws PageException { return ListUtil.arrayToList((Array) Filter.call(pc, new StringListData(list, delimiter, includeEmptyFields, multiCharacterDelimiter), filter, parallel, maxThreads), delimiter); } diff --git a/core/src/main/java/lucee/runtime/functions/list/ListFind.java b/core/src/main/java/lucee/runtime/functions/list/ListFind.java index 0df71c368f..f941abdfb9 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListFind.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListFind.java @@ -32,17 +32,17 @@ public final class ListFind extends BIF { private static final long serialVersionUID = -8999117503012321225L; - public static double call(PageContext pc, String list, String value) { + public static Number call(PageContext pc, String list, String value) { return ListUtil.listFindIgnoreEmpty(list, value, ',') + 1; } - public static double call(PageContext pc, String list, String value, String delimter) { + public static Number call(PageContext pc, String list, String value, String delimter) { return ListUtil.listFindIgnoreEmpty(list, value, delimter) + 1; } - public static double call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields) { + public static Number call(PageContext pc, String list, String value, String delimter, boolean includeEmptyFields) { if (includeEmptyFields) return ListUtil.listFind(list, value, delimter) + 1; - return ListUtil.listFindIgnoreEmpty(list, value, delimter) + 1; + return Caster.toNumber(pc, ListUtil.listFindIgnoreEmpty(list, value, delimter) + 1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListFirst.java b/core/src/main/java/lucee/runtime/functions/list/ListFirst.java index 253c14196f..335af17022 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListFirst.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListFirst.java @@ -44,8 +44,9 @@ public static String call(PageContext pc, String list, String delimiter, boolean return ListUtil.first(list, delimiter, !includeEmptyFields, 1); } - public static String call(PageContext pc, String list, String delimiter, boolean includeEmptyFields, double count) throws FunctionException { - if (count < 1) throw new FunctionException(pc, "ListFirst", 4, "count", "Argument count must be a positive value greater than 0"); + public static String call(PageContext pc, String list, String delimiter, boolean includeEmptyFields, Number count) throws FunctionException { + int cnt = Caster.toIntValue(count); + if (cnt < 1) throw new FunctionException(pc, "ListFirst", 4, "count", "Argument count must be a positive value greater than 0"); return ListUtil.first(list, delimiter, !includeEmptyFields, (int) count); } diff --git a/core/src/main/java/lucee/runtime/functions/list/ListGetAt.java b/core/src/main/java/lucee/runtime/functions/list/ListGetAt.java index 0142a1555d..bdf68d03cf 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListGetAt.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListGetAt.java @@ -32,16 +32,16 @@ public final class ListGetAt extends BIF { private static final long serialVersionUID = -8227074223983816122L; - public static String call(PageContext pc, String list, double posNumber) throws PageException { + public static String call(PageContext pc, String list, Number posNumber) throws PageException { return call(pc, list, posNumber, ",", false); } - public static String call(PageContext pc, String list, double posNumber, String delimiter) throws PageException { + public static String call(PageContext pc, String list, Number posNumber, String delimiter) throws PageException { return call(pc, list, posNumber, delimiter, false); } - public static String call(PageContext pc, String list, double posNumber, String delimiter, boolean includeEmptyFields) throws PageException { - int pos = (int) posNumber; + public static String call(PageContext pc, String list, Number posNumber, String delimiter, boolean includeEmptyFields) throws PageException { + int pos = Caster.toIntValue(posNumber); String rtn = ListUtil.getAt(list, delimiter, pos - 1, !includeEmptyFields, null); if (rtn == null) throw new FunctionException(pc, "listGetAt", 2, "posNumber", "invalid string list index [" + pos + "]"); return rtn; diff --git a/core/src/main/java/lucee/runtime/functions/list/ListIndexExists.java b/core/src/main/java/lucee/runtime/functions/list/ListIndexExists.java index 09567e0e03..04b2fe6b56 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListIndexExists.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListIndexExists.java @@ -32,17 +32,17 @@ public final class ListIndexExists extends BIF { private static final long serialVersionUID = 7642583305678735361L; - public static boolean call(PageContext pc, String list, double index) { + public static boolean call(PageContext pc, String list, Number index) { return call(pc, list, index, ",", false); } - public static boolean call(PageContext pc, String list, double index, String delimiter) { + public static boolean call(PageContext pc, String list, Number index, String delimiter) { return call(pc, list, index, delimiter, false); } - public static boolean call(PageContext pc, String list, double index, String delimiter, boolean includeEmptyFields) { - if (includeEmptyFields) return ListUtil.listToArray(list, delimiter).get((int) index, null) != null; - return ListUtil.listToArrayRemoveEmpty(list, delimiter).get((int) index, null) != null; + public static boolean call(PageContext pc, String list, Number index, String delimiter, boolean includeEmptyFields) { + if (includeEmptyFields) return ListUtil.listToArray(list, delimiter).get(Caster.toIntValue(index), null) != null; + return ListUtil.listToArrayRemoveEmpty(list, delimiter).get(Caster.toIntValue(index), null) != null; } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListInsertAt.java b/core/src/main/java/lucee/runtime/functions/list/ListInsertAt.java index b62ebc8042..6617ccfddf 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListInsertAt.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListInsertAt.java @@ -33,18 +33,18 @@ public final class ListInsertAt extends BIF { private static final long serialVersionUID = 2796195727971683118L; - public static String call(PageContext pc, String list, double posNumber, String value) throws ExpressionException { + public static String call(PageContext pc, String list, Number posNumber, String value) throws ExpressionException { return call(pc, list, posNumber, value, ",", false); } - public static String call(PageContext pc, String list, double posNumber, String value, String strDelimiter) throws ExpressionException { + public static String call(PageContext pc, String list, Number posNumber, String value, String strDelimiter) throws ExpressionException { return call(pc, list, posNumber, value, strDelimiter, false); } - public static String call(PageContext pc, String list, double posNumber, String value, String strDelimiter, boolean includeEmptyFields) throws ExpressionException { + public static String call(PageContext pc, String list, Number posNumber, String value, String strDelimiter, boolean includeEmptyFields) throws ExpressionException { if (strDelimiter.length() == 0) throw new FunctionException(pc, "listInsertAt", 4, "delimiter", "invalid delimiter value, can't be an empty string"); - return ListUtil.listInsertAt(list, (int) posNumber, value, strDelimiter, !includeEmptyFields); + return ListUtil.listInsertAt(list, Caster.toIntValue(posNumber), value, strDelimiter, !includeEmptyFields); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListLast.java b/core/src/main/java/lucee/runtime/functions/list/ListLast.java index f0984e6c29..0d30e7d116 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListLast.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListLast.java @@ -44,8 +44,9 @@ public static String call(PageContext pc, String list, String delimiter, boolean return ListUtil.last(list, delimiter, !includeEmptyFields); } - public static String call(PageContext pc, String list, String delimiter, boolean includeEmptyFields, double count) { - if (count == 1d) return ListUtil.last(list, delimiter, !includeEmptyFields); + public static String call(PageContext pc, String list, String delimiter, boolean includeEmptyFields, Number count) { + int cnt = Caster.toIntValue(count); + if (cnt == 1d) return ListUtil.last(list, delimiter, !includeEmptyFields); return ListUtil.last(list, delimiter, !includeEmptyFields, (int) count); } diff --git a/core/src/main/java/lucee/runtime/functions/list/ListLen.java b/core/src/main/java/lucee/runtime/functions/list/ListLen.java index 629c65751c..0e19f5ccfa 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListLen.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListLen.java @@ -32,16 +32,16 @@ public final class ListLen extends BIF { private static final long serialVersionUID = -592317399255505765L; - public static double call(PageContext pc, String list) { - return ListUtil.len(list, ',', true); + public static Number call(PageContext pc, String list) { + return Caster.toNumber(pc, ListUtil.len(list, ',', true)); } - public static double call(PageContext pc, String list, String delimter) { - return ListUtil.len(list, delimter, true); + public static Number call(PageContext pc, String list, String delimter) { + return Caster.toNumber(pc, ListUtil.len(list, delimter, true)); } - public static double call(PageContext pc, String list, String delimter, boolean includeEmptyFields) { - return ListUtil.len(list, delimter, !includeEmptyFields); + public static Number call(PageContext pc, String list, String delimter, boolean includeEmptyFields) { + return Caster.toNumber(pc, ListUtil.len(list, delimter, !includeEmptyFields)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListMap.java b/core/src/main/java/lucee/runtime/functions/list/ListMap.java index 5f76e06b2b..e66a4baf88 100644 --- a/core/src/main/java/lucee/runtime/functions/list/ListMap.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListMap.java @@ -61,7 +61,7 @@ public static String call(PageContext pc, String list, UDF filter, String delimi } public static String call(PageContext pc, String list, UDF filter, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, - double maxThreads) throws PageException { + Number maxThreads) throws PageException { return ListUtil.arrayToList((Array) Map.call(pc, new StringListData(list, delimiter, includeEmptyFields, multiCharacterDelimiter), filter, parallel, maxThreads), delimiter); @@ -78,7 +78,7 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 6) return call(pc, Caster.toString(args[0]), Caster.toFunction(args[1]), Caster.toString(args[2]), Caster.toBooleanValue(args[3]), Caster.toBooleanValue(args[4]), Caster.toBooleanValue(args[5])); if (args.length == 7) return call(pc, Caster.toString(args[0]), Caster.toFunction(args[1]), Caster.toString(args[2]), Caster.toBooleanValue(args[3]), - Caster.toBooleanValue(args[4]), Caster.toBooleanValue(args[5]), Caster.toDoubleValue(args[6])); + Caster.toBooleanValue(args[4]), Caster.toBooleanValue(args[5]), Caster.toNumber(pc, args[6])); throw new FunctionException(pc, "ListMap", 2, 7, args.length); } diff --git a/core/src/main/java/lucee/runtime/functions/list/ListSetAt.java b/core/src/main/java/lucee/runtime/functions/list/ListSetAt.java index 29d0a115a2..f2e12e9b98 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListSetAt.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListSetAt.java @@ -34,19 +34,19 @@ public final class ListSetAt extends BIF { private static final long serialVersionUID = -105782799713547552L; - public static String call(PageContext pc, String list, double posNumber, String value) throws ExpressionException { + public static String call(PageContext pc, String list, Number posNumber, String value) throws ExpressionException { return call(pc, list, posNumber, value, ",", false); } - public static String call(PageContext pc, String list, double posNumber, String value, String delimiter) throws ExpressionException { + public static String call(PageContext pc, String list, Number posNumber, String value, String delimiter) throws ExpressionException { return call(pc, list, posNumber, value, delimiter, false); } - public static String call(PageContext pc, String list, double posNumber, String value, String delimiter, boolean includeEmptyFields) throws ExpressionException { + public static String call(PageContext pc, String list, Number posNumber, String value, String delimiter, boolean includeEmptyFields) throws ExpressionException { if (list.length() == 0) throw new FunctionException(pc, "listSetAt", 1, "list", "can't be empty"); - int pos = ((int) posNumber); + int pos = Caster.toIntValue(posNumber); // int[] removedInfo=new int[2]; Array arr = ListUtil.listToArray(list, delimiter); @@ -86,10 +86,10 @@ else if (len < pos) { @Override public Object invoke(PageContext pc, Object[] args) throws PageException { - if (args.length == 3) return call(pc, Caster.toString(args[0]), Caster.toDoubleValue(args[1]), Caster.toString(args[2])); - if (args.length == 4) return call(pc, Caster.toString(args[0]), Caster.toDoubleValue(args[1]), Caster.toString(args[2]), Caster.toString(args[3])); + if (args.length == 3) return call(pc, Caster.toString(args[0]), Caster.toNumber(pc, args[1]), Caster.toString(args[2])); + if (args.length == 4) return call(pc, Caster.toString(args[0]), Caster.toNumber(pc, args[1]), Caster.toString(args[2]), Caster.toString(args[3])); if (args.length == 5) - return call(pc, Caster.toString(args[0]), Caster.toDoubleValue(args[1]), Caster.toString(args[2]), Caster.toString(args[3]), Caster.toBooleanValue(args[4])); + return call(pc, Caster.toString(args[0]), Caster.toNumber(pc, args[1]), Caster.toString(args[2]), Caster.toString(args[3]), Caster.toBooleanValue(args[4])); throw new FunctionException(pc, "ListSetAt", 3, 5, args.length); } diff --git a/core/src/main/java/lucee/runtime/functions/list/ListSome.java b/core/src/main/java/lucee/runtime/functions/list/ListSome.java index 28939e2711..391cf01eed 100644 --- a/core/src/main/java/lucee/runtime/functions/list/ListSome.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListSome.java @@ -53,7 +53,7 @@ public static boolean call(PageContext pc, String list, UDF udf, String delimite } public static boolean call(PageContext pc, String list, UDF udf, String delimiter, boolean includeEmptyFields, boolean multiCharacterDelimiter, boolean parallel, - double maxThreads) throws PageException { + Number maxThreads) throws PageException { StringListData data = new StringListData(list, delimiter, includeEmptyFields, multiCharacterDelimiter); return Some.call(pc, data, udf, parallel, maxThreads); @@ -70,7 +70,7 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { if (args.length == 6) return call(pc, Caster.toString(args[0]), Caster.toFunction(args[1]), Caster.toString(args[2]), Caster.toBooleanValue(args[3]), Caster.toBooleanValue(args[4]), Caster.toBooleanValue(args[5])); if (args.length == 7) return call(pc, Caster.toString(args[0]), Caster.toFunction(args[1]), Caster.toString(args[2]), Caster.toBooleanValue(args[3]), - Caster.toBooleanValue(args[4]), Caster.toBooleanValue(args[5]), Caster.toDoubleValue(args[6])); + Caster.toBooleanValue(args[4]), Caster.toBooleanValue(args[5]), Caster.toNumber(pc, args[6])); throw new FunctionException(pc, "ListSome", 2, 7, args.length); } diff --git a/core/src/main/java/lucee/runtime/functions/list/ListValueCount.java b/core/src/main/java/lucee/runtime/functions/list/ListValueCount.java index a39c8439fd..bcce14d185 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListValueCount.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListValueCount.java @@ -33,15 +33,15 @@ public final class ListValueCount extends BIF { private static final long serialVersionUID = -1808030347105091742L; - public static double call(PageContext pc, String list, String value) throws PageException { + public static Number call(PageContext pc, String list, String value) throws PageException { return call(pc, list, value, ",", false); } - public static double call(PageContext pc, String list, String value, String delimiter) throws PageException { + public static Number call(PageContext pc, String list, String value, String delimiter) throws PageException { return call(pc, list, value, delimiter, false); } - public static double call(PageContext pc, String list, String value, String delimiter, boolean includeEmptyFields) throws PageException { + public static Number call(PageContext pc, String list, String value, String delimiter, boolean includeEmptyFields) throws PageException { int count = 0; Array arr = includeEmptyFields ? ListUtil.listToArray(list, delimiter) : ListUtil.listToArrayRemoveEmpty(list, delimiter); int len = arr.size(); @@ -49,7 +49,7 @@ public static double call(PageContext pc, String list, String value, String deli for (int i = 1; i <= len; i++) { if (arr.getE(i).equals(value)) count++; } - return count; + return Caster.toNumber(pc, count); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/list/ListValueCountNoCase.java b/core/src/main/java/lucee/runtime/functions/list/ListValueCountNoCase.java index 247915e720..4f6366ced2 100755 --- a/core/src/main/java/lucee/runtime/functions/list/ListValueCountNoCase.java +++ b/core/src/main/java/lucee/runtime/functions/list/ListValueCountNoCase.java @@ -31,16 +31,16 @@ public final class ListValueCountNoCase extends BIF { private static final long serialVersionUID = 2648222056209118284L; - public static double call(PageContext pc, String list, String value) throws PageException { + public static Number call(PageContext pc, String list, String value) throws PageException { return ListValueCount.call(pc, list.toLowerCase(), value.toLowerCase(), ","); } - public static double call(PageContext pc, String list, String value, String delimiter) throws PageException { + public static Number call(PageContext pc, String list, String value, String delimiter) throws PageException { return ListValueCount.call(pc, list.toLowerCase(), value.toLowerCase(), delimiter); } - public static double call(PageContext pc, String list, String value, String delimiter, boolean includeEmptyFields) throws PageException { + public static Number call(PageContext pc, String list, String value, String delimiter, boolean includeEmptyFields) throws PageException { return ListValueCount.call(pc, list.toLowerCase(), value.toLowerCase(), delimiter, includeEmptyFields); } diff --git a/core/src/main/java/lucee/runtime/functions/math/ACos.java b/core/src/main/java/lucee/runtime/functions/math/ACos.java index 7a59e7cb32..ba56a74a40 100644 --- a/core/src/main/java/lucee/runtime/functions/math/ACos.java +++ b/core/src/main/java/lucee/runtime/functions/math/ACos.java @@ -22,6 +22,7 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; import lucee.runtime.op.Caster; @@ -29,13 +30,14 @@ public final class ACos implements Function { private static final long serialVersionUID = -7453640128079472952L; - public static double call(PageContext pc, double number) throws ExpressionException { - if (number >= -1d && number <= 1d) return StrictMath.acos(number); - throw new ExpressionException("invalid range of argument for function aCos, argument range must be between -1 and 1, now is [" + number + "]"); - } - public static Number call(PageContext pc, Number number) throws ExpressionException { - if (number.doubleValue() >= -1d && number.doubleValue() <= 1d) return Caster.toBigDecimal(StrictMath.acos(Caster.toDoubleValue(number))); - throw new ExpressionException("invalid range of argument for function aCos, argument range must be between -1 and 1, now is [" + number + "]"); + double res; + if (number.doubleValue() >= -1d && number.doubleValue() <= 1d) res = (StrictMath.acos(Caster.toDoubleValue(number))); + else throw new ExpressionException("invalid range of argument for function aCos, argument range must be between -1 and 1, now is [" + number + "]"); + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(res); + } + return Caster.toDouble(res); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/ASin.java b/core/src/main/java/lucee/runtime/functions/math/ASin.java index 4fd6f0184c..5c92e5b2bf 100644 --- a/core/src/main/java/lucee/runtime/functions/math/ASin.java +++ b/core/src/main/java/lucee/runtime/functions/math/ASin.java @@ -22,6 +22,7 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; import lucee.runtime.op.Caster; @@ -30,13 +31,14 @@ public final class ASin implements Function { private static final long serialVersionUID = -1803518218845996354L; - public static double call(PageContext pc, double number) throws ExpressionException { - if (number >= -1d && number <= 1d) return StrictMath.asin(number); - throw new ExpressionException("invalid range of argument for function aSin, argument range must be between -1 and 1, now is [" + number + "]"); - } - public static Number call(PageContext pc, Number number) throws ExpressionException { - if (number.doubleValue() >= -1d && number.doubleValue() <= 1d) return Caster.toBigDecimal(StrictMath.asin(Caster.toDoubleValue(number))); - throw new ExpressionException("invalid range of argument for function aSin, argument range must be between -1 and 1, now is [" + number + "]"); + double res; + if (number.doubleValue() >= -1d && number.doubleValue() <= 1d) res = (StrictMath.asin(Caster.toDoubleValue(number))); + else throw new ExpressionException("invalid range of argument for function aSin, argument range must be between -1 and 1, now is [" + number + "]"); + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(res); + } + return Caster.toDouble(res); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/Abs.java b/core/src/main/java/lucee/runtime/functions/math/Abs.java index 64914ad1e5..37a3cae4c6 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Abs.java +++ b/core/src/main/java/lucee/runtime/functions/math/Abs.java @@ -23,12 +23,19 @@ import lucee.commons.math.MathUtil; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; import lucee.runtime.op.Caster; public final class Abs implements Function { + private static final long serialVersionUID = 6284295838111579098L; + public static Number call(PageContext pc, Number n) { + + if (ThreadLocalPageContext.preciseMath(pc)) { + return MathUtil.abs(Caster.toBigDecimal(n)); + } return MathUtil.abs(Caster.toDoubleValue(n)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/Atn.java b/core/src/main/java/lucee/runtime/functions/math/Atn.java index 2bdbce09ce..e13bdfe6ef 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Atn.java +++ b/core/src/main/java/lucee/runtime/functions/math/Atn.java @@ -22,10 +22,19 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Atn implements Function { - public static double call(PageContext pc, double number) { - return StrictMath.atan(number); + + private static final long serialVersionUID = 4094854682780902171L; + + public static Number call(PageContext pc, Number number) { + double res = (StrictMath.atan(Caster.toDoubleValue(number))); + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(res); + } + return Caster.toDouble(res); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/BitMaskClear.java b/core/src/main/java/lucee/runtime/functions/math/BitMaskClear.java index e6c4e1a8ec..b2011360d3 100644 --- a/core/src/main/java/lucee/runtime/functions/math/BitMaskClear.java +++ b/core/src/main/java/lucee/runtime/functions/math/BitMaskClear.java @@ -16,25 +16,44 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function bitmaskclear - */ package lucee.runtime.functions.math; import lucee.runtime.PageContext; -import lucee.runtime.op.Decision; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.FunctionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; +import lucee.runtime.op.Decision; public final class BitMaskClear implements Function { - public static double call(PageContext pc, double dnumber, double dstart, double dlength) throws FunctionException { - int number = (int) dnumber, start = (int) dstart, length = (int) dlength; + private static final long serialVersionUID = 6185902331633982712L; + + public static Number call(PageContext pc, Number number, Number start, Number length) throws FunctionException { + + // Convert the input numbers to integers for bitwise operations + int numValue = Caster.toInteger(number); + int startValue = Caster.toInteger(start); + int lengthValue = Caster.toInteger(length); + + // Validation checks + if (!Decision.isInteger(number)) { + throw new FunctionException(pc, "bitMaskClear", 1, "number", "value [" + number + "] must be an integer."); + } + if (startValue > 31 || startValue < 0) { + throw new FunctionException(pc, "bitMaskClear", 2, "start", "must be between 0 and 31, now " + startValue); + } + if (lengthValue > 31 || lengthValue < 0) { + throw new FunctionException(pc, "bitMaskClear", 3, "length", "must be between 0 and 31, now " + lengthValue); + } - if (!Decision.isInteger(dnumber)) throw new FunctionException(pc, "bitMaskClear", 1, "number", "value [" + dnumber + "] must be between the integer range"); - if (start > 31 || start < 0) throw new FunctionException(pc, "bitMaskClear", 2, "start", "must be between 0 and 31 now " + start); - if (length > 31 || length < 0) throw new FunctionException(pc, "bitMaskClear", 3, "length", "must be between 0 and 31 now " + length); + // Perform bitwise clear operation + int result = numValue & ~((1 << lengthValue) - 1 << startValue); - return number & ~((1 << length) - 1 << start); + // Return result based on precise math + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(result); + } + return result; } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/BitMaskRead.java b/core/src/main/java/lucee/runtime/functions/math/BitMaskRead.java index 71eed72884..ce8f65f084 100644 --- a/core/src/main/java/lucee/runtime/functions/math/BitMaskRead.java +++ b/core/src/main/java/lucee/runtime/functions/math/BitMaskRead.java @@ -16,25 +16,42 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function bitmaskread - */ package lucee.runtime.functions.math; import lucee.runtime.PageContext; -import lucee.runtime.op.Decision; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.FunctionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; +import lucee.runtime.op.Decision; public final class BitMaskRead implements Function { - public static double call(PageContext pc, double dnumber, double dstart, double dlength) throws FunctionException { + private static final long serialVersionUID = -91415058328441099L; + + // Method that uses Number instead of double and handles precise math + public static Number call(PageContext pc, Number number, Number start, Number length) throws FunctionException { + + // Convert the input numbers to integers for bitwise operations + int numValue = Caster.toInteger(number); + int startValue = Caster.toInteger(start); + int lengthValue = Caster.toInteger(length); - int number = (int) dnumber, start = (int) dstart, length = (int) dlength; - if (!Decision.isInteger(dnumber)) throw new FunctionException(pc, "bitMaskRead", 1, "number", "value [" + dnumber + "] must be between the integer range"); - if (start > 31 || start < 0) throw new FunctionException(pc, "bitMaskRead", 2, "start", "must be between 0 and 31 now " + start); - if (length > 31 || length < 0) throw new FunctionException(pc, "bitMaskRead", 3, "length", "must be between 0 and 31 now " + length); + // Validation checks + if (!Decision.isInteger(number)) { + throw new FunctionException(pc, "bitMaskRead", 1, "number", "value [" + number + "] must be an integer."); + } + if (startValue > 31 || startValue < 0) { + throw new FunctionException(pc, "bitMaskRead", 2, "start", "must be between 0 and 31, now " + startValue); + } + if (lengthValue > 31 || lengthValue < 0) { + throw new FunctionException(pc, "bitMaskRead", 3, "length", "must be between 0 and 31, now " + lengthValue); + } - return number >> start & (1 << length) - 1; + int result = numValue >> startValue & (1 << lengthValue) - 1; + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(result); + } + return result; } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/BitMaskSet.java b/core/src/main/java/lucee/runtime/functions/math/BitMaskSet.java index a703669575..02ba4551d2 100644 --- a/core/src/main/java/lucee/runtime/functions/math/BitMaskSet.java +++ b/core/src/main/java/lucee/runtime/functions/math/BitMaskSet.java @@ -22,22 +22,43 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; -import lucee.runtime.op.Decision; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.FunctionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; +import lucee.runtime.op.Decision; public final class BitMaskSet implements Function { - public static double call(PageContext pc, double dnumber, double dmask, double dstart, double dlength) throws FunctionException { + private static final long serialVersionUID = -6113955054602192041L; + + public static Number call(PageContext pc, Number number, Number mask, Number start, Number length) throws FunctionException { + + // Convert the input numbers to integers for bitwise operations + int numValue = Caster.toInteger(number); + int maskValue = Caster.toInteger(mask); + int startValue = Caster.toInteger(start); + int lengthValue = Caster.toInteger(length); - int number = (int) dnumber, mask = (int) dmask, start = (int) dstart, length = (int) dlength; + // Validation checks + if (!Decision.isInteger(number)) { + throw new FunctionException(pc, "bitMaskSet", 1, "number", "value [" + number + "] must be an integer."); + } + if (startValue > 31 || startValue < 0) { + throw new FunctionException(pc, "bitMaskSet", 2, "start", "must be between 0 and 31, now " + startValue); + } + if (lengthValue > 31 || lengthValue < 0) { + throw new FunctionException(pc, "bitMaskSet", 3, "length", "must be between 0 and 31, now " + lengthValue); + } - if (!Decision.isInteger(dnumber)) throw new FunctionException(pc, "bitMaskSet", 1, "number", "value [" + dnumber + "] must be between the integer range"); - if (start > 31 || start < 0) throw new FunctionException(pc, "bitMaskSet", 2, "start", "must be between 0 and 31 now " + start); - if (length > 31 || length < 0) throw new FunctionException(pc, "bitMaskSet", 3, "length", "must be between 0 and 31 now " + length); + // Perform bitwise set operation + int tmp = (1 << lengthValue) - 1 << startValue; + maskValue &= (1 << lengthValue) - 1; + int result = numValue & ~tmp | maskValue << startValue; - int tmp = (1 << length) - 1 << start; - mask &= (1 << length) - 1; - return number & ~tmp | mask << start; + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(result); + } + return result; } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/BitNot.java b/core/src/main/java/lucee/runtime/functions/math/BitNot.java index 0fcf53bf58..293d4d8f31 100644 --- a/core/src/main/java/lucee/runtime/functions/math/BitNot.java +++ b/core/src/main/java/lucee/runtime/functions/math/BitNot.java @@ -25,10 +25,9 @@ import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.PageException; import lucee.runtime.ext.function.BIF; -import lucee.runtime.ext.function.Function; import lucee.runtime.op.Caster; -public final class BitNot extends BIF implements Function { +public final class BitNot extends BIF { private static final long serialVersionUID = 5762882485653530918L; diff --git a/core/src/main/java/lucee/runtime/functions/math/Cos.java b/core/src/main/java/lucee/runtime/functions/math/Cos.java index 2274feef43..bdb4b04af5 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Cos.java +++ b/core/src/main/java/lucee/runtime/functions/math/Cos.java @@ -31,14 +31,10 @@ import lucee.runtime.op.Caster; public final class Cos implements Function { + private static final long serialVersionUID = -6746800530182386158L; - // MathContext to specify the precision and rounding of big decimal calculations private static final MathContext mc = new MathContext(30, RoundingMode.HALF_UP); - public static double call(PageContext pc, double number) { - return StrictMath.cos(number); - } - public static Number call(PageContext pc, Number number) { if (ThreadLocalPageContext.preciseMath(pc)) { return cosine(Caster.toBigDecimal(number)); @@ -63,7 +59,6 @@ public static BigDecimal cosine(BigDecimal x) { break; } } - return sum; } diff --git a/core/src/main/java/lucee/runtime/functions/math/DecrementValue.java b/core/src/main/java/lucee/runtime/functions/math/DecrementValue.java index 5a46f3dd5d..a273608778 100644 --- a/core/src/main/java/lucee/runtime/functions/math/DecrementValue.java +++ b/core/src/main/java/lucee/runtime/functions/math/DecrementValue.java @@ -21,11 +21,22 @@ */ package lucee.runtime.functions.math; +import java.math.BigDecimal; + import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class DecrementValue implements Function { - public static double call(PageContext pc, double number) { - return --number; + + private static final long serialVersionUID = -1751015438898230994L; + + public static Number call(PageContext pc, Number number) { + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(number).subtract(BigDecimal.ONE); + } + return number.doubleValue() - 1; } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/Exp.java b/core/src/main/java/lucee/runtime/functions/math/Exp.java index 8b631c9fed..d85dbd70f3 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Exp.java +++ b/core/src/main/java/lucee/runtime/functions/math/Exp.java @@ -22,10 +22,18 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Exp implements Function { - public static double call(PageContext pc, double number) { - return Math.exp(number); + + private static final long serialVersionUID = -3559574758816303574L; + + public static Number call(PageContext pc, Number number) { + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(Math.exp(Caster.toDoubleValue(number))); + } + return Math.exp(Caster.toDoubleValue(number)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/Fix.java b/core/src/main/java/lucee/runtime/functions/math/Fix.java index d813b46249..afeb446d76 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Fix.java +++ b/core/src/main/java/lucee/runtime/functions/math/Fix.java @@ -22,11 +22,24 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Fix implements Function { - public static double call(PageContext pc, double number) { - if (number == 0) return number; - return number > 0 ? StrictMath.floor(number) : StrictMath.ceil(number); + private static final long serialVersionUID = -6306628352821070813L; + + public static Number call(PageContext pc, Number number) { + + double numValue = Caster.toDoubleValue(number); + + if (numValue != 0) { + numValue = numValue > 0 ? StrictMath.floor(numValue) : StrictMath.ceil(numValue); + } + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(numValue); + } + return numValue; } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/IncrementValue.java b/core/src/main/java/lucee/runtime/functions/math/IncrementValue.java index e783d56bc4..608a7ae4cc 100644 --- a/core/src/main/java/lucee/runtime/functions/math/IncrementValue.java +++ b/core/src/main/java/lucee/runtime/functions/math/IncrementValue.java @@ -21,11 +21,25 @@ */ package lucee.runtime.functions.math; +import java.math.BigDecimal; + import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class IncrementValue implements Function { + + private static final long serialVersionUID = 4690923533697203403L; + public static double call(PageContext pc, double number) { return ++number; } + + public static Number call(PageContext pc, Number number) { + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(number).add(BigDecimal.ONE); + } + return number.doubleValue() + 1; + } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/InputBaseN.java b/core/src/main/java/lucee/runtime/functions/math/InputBaseN.java index c69b7ba0a0..accfbb75b0 100644 --- a/core/src/main/java/lucee/runtime/functions/math/InputBaseN.java +++ b/core/src/main/java/lucee/runtime/functions/math/InputBaseN.java @@ -19,25 +19,38 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.exp.FunctionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; -/** - * Implements the CFML Function inputbasen - */ public final class InputBaseN implements Function { - public static double call(PageContext pc, String string, double radix) throws ExpressionException { - if (radix < 2 || radix > 36) throw new FunctionException(pc, "inputBaseN", 2, "radix", "radix must be between 2 an 36"); + + private static final long serialVersionUID = 951439327862024318L; + + public static Number call(PageContext pc, String string, Number radix) throws ExpressionException { + + int radixValue = Caster.toInteger(radix); + + if (radixValue < 2 || radixValue > 36) { + throw new FunctionException(pc, "inputBaseN", 2, "radix", "radix must be between 2 and 36"); + } string = string.trim().toLowerCase(); - if (string.startsWith("0x")) string = string.substring(2, string.length()); + if (string.startsWith("0x")) { + string = string.substring(2); // Remove '0x' prefix + } - if (string.length() > 32) throw new FunctionException(pc, "inputBaseN", 1, "string", "argument is too large, it can only be a maximum of 32 digits (-0x at start)"); + if (string.length() > 32) { + throw new FunctionException(pc, "inputBaseN", 1, "string", "argument is too large, it can only be a maximum of 32 digits (-0x at start)"); + } - // print.ln(string+"-"+radix); - return Long.parseLong(string, (int) radix); + long result = Long.parseLong(string, radixValue); + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(result); + } + return result; } - } diff --git a/core/src/main/java/lucee/runtime/functions/math/Log.java b/core/src/main/java/lucee/runtime/functions/math/Log.java index 2d2fdaf614..f15f994d9a 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Log.java +++ b/core/src/main/java/lucee/runtime/functions/math/Log.java @@ -16,20 +16,32 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function log - */ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.exp.FunctionException; import lucee.runtime.ext.function.Function; import lucee.runtime.op.Caster; public final class Log implements Function { - public static double call(PageContext pc, double number) throws ExpressionException { - if (number <= 0.0D) throw new FunctionException(pc, "log", 1, "number", "value must be a positive number now " + Caster.toString(number) + ""); - return StrictMath.log(number); + + private static final long serialVersionUID = -4931285702053654102L; + + public static Number call(PageContext pc, Number number) throws ExpressionException { + + double numValue = Caster.toDoubleValue(number); + + if (numValue <= 0.0D) { + throw new FunctionException(pc, "log", 1, "number", "value must be a positive number, now " + Caster.toString(number) + ""); + } + + double result = StrictMath.log(numValue); + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(result); + } + return result; } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/Log10.java b/core/src/main/java/lucee/runtime/functions/math/Log10.java index 5bd803c602..829af86cfd 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Log10.java +++ b/core/src/main/java/lucee/runtime/functions/math/Log10.java @@ -16,18 +16,32 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function log10 - */ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Log10 implements Function { - public static double call(PageContext pc, double number) throws ExpressionException { - if (number <= 0) throw new ExpressionException("invalid argument at function log10, vale must be a positive number now " + ((int) number) + ""); - return 0.43429448190325182D * StrictMath.log(number); + + private static final long serialVersionUID = 5661273846487684766L; + private static final double LOG10_CONVERSION = 0.43429448190325182D; + + public static Number call(PageContext pc, Number number) throws ExpressionException { + + double numValue = Caster.toDoubleValue(number); + + if (numValue <= 0.0D) { + throw new ExpressionException("invalid argument at function log10, value must be a positive number, now " + Caster.toString(number) + ""); + } + + double result = LOG10_CONVERSION * StrictMath.log(numValue); + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(result); + } + return result; } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/Max.java b/core/src/main/java/lucee/runtime/functions/math/Max.java index 1f4ba200f9..be3f048a88 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Max.java +++ b/core/src/main/java/lucee/runtime/functions/math/Max.java @@ -27,6 +27,8 @@ import lucee.runtime.op.Caster; public final class Max implements Function { + private static final long serialVersionUID = 4506803307163054252L; + public static Number call(PageContext pc, Number number1, Number number2) { if (ThreadLocalPageContext.preciseMath(pc)) { diff --git a/core/src/main/java/lucee/runtime/functions/math/Min.java b/core/src/main/java/lucee/runtime/functions/math/Min.java index 4ce1e35321..5bceb00c5e 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Min.java +++ b/core/src/main/java/lucee/runtime/functions/math/Min.java @@ -27,6 +27,8 @@ import lucee.runtime.op.Caster; public final class Min implements Function { + private static final long serialVersionUID = 5324510164743536854L; + public static Number call(PageContext pc, Number number1, Number number2) { if (ThreadLocalPageContext.preciseMath(pc)) { return (Caster.toBigDecimal(number1).compareTo(Caster.toBigDecimal(number2)) < 0) ? number1 : number2; diff --git a/core/src/main/java/lucee/runtime/functions/math/Rand.java b/core/src/main/java/lucee/runtime/functions/math/Rand.java index 32ed5d19d2..665c0e8900 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Rand.java +++ b/core/src/main/java/lucee/runtime/functions/math/Rand.java @@ -16,9 +16,6 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function rand - */ package lucee.runtime.functions.math; import java.security.NoSuchAlgorithmException; @@ -29,38 +26,39 @@ import lucee.runtime.PageContext; import lucee.runtime.crypt.CFMXCompat; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Rand implements Function { + private static final long serialVersionUID = -9153653138698137803L; private static Map randoms = new HashMap(); - public static double call(PageContext pc) throws ExpressionException { - - return getRandom(CFMXCompat.ALGORITHM_NAME, Double.NaN).nextDouble(); + public static Number call(PageContext pc) throws ExpressionException { + return call(pc, CFMXCompat.ALGORITHM_NAME); } - public static double call(PageContext pc, String algorithm) throws ExpressionException { - + public static Number call(PageContext pc, String algorithm) throws ExpressionException { + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(getRandom(algorithm, Double.NaN).nextDouble()); + } return getRandom(algorithm, Double.NaN).nextDouble(); } + // Helper method to get the Random instance based on the algorithm static Random getRandom(String algorithm, Double seed) throws ExpressionException { - algorithm = algorithm.toLowerCase(); Random result = randoms.get(algorithm); if (result == null || !seed.isNaN()) { if (CFMXCompat.ALGORITHM_NAME.equalsIgnoreCase(algorithm)) { - result = new Random(); } else { - try { - result = SecureRandom.getInstance(algorithm); } catch (NoSuchAlgorithmException e) { @@ -75,4 +73,4 @@ static Random getRandom(String algorithm, Double seed) throws ExpressionExceptio return result; } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/RandRange.java b/core/src/main/java/lucee/runtime/functions/math/RandRange.java index 037c169754..949143fb25 100644 --- a/core/src/main/java/lucee/runtime/functions/math/RandRange.java +++ b/core/src/main/java/lucee/runtime/functions/math/RandRange.java @@ -1,47 +1,54 @@ -/** - * - * Copyright (c) 2014, the Railo Company Ltd. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - * - **/ -/** - * Implements the CFML Function randrange - */ package lucee.runtime.functions.math; +import java.math.BigDecimal; + import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class RandRange implements Function { - public static double call(PageContext pc, double number1, double number2) throws ExpressionException { + + private static final long serialVersionUID = -695896210547038106L; + + public static Number call(PageContext pc, Number number1, Number number2) throws ExpressionException { return call(pc, number1, number2, "cfmx_compat"); } - public static double call(PageContext pc, double number1, double number2, String algo) throws ExpressionException { + public static Number call(PageContext pc, Number number1, Number number2, String algo) throws ExpressionException { + // Handle BigDecimal for precise math + if (ThreadLocalPageContext.preciseMath(pc)) { + BigDecimal min = Caster.toBigDecimal(number1); + BigDecimal max = Caster.toBigDecimal(number2); - int min = (int) number1; - int max = (int) number2; + if (min.compareTo(max) > 0) { + BigDecimal tmp = min; + min = max; + max = tmp; + } - if (number1 > number2) { - int tmp = min; + BigDecimal diff = max.subtract(min); + BigDecimal randValue = Caster.toBigDecimal(Rand.call(pc, algo)).multiply(diff.add(BigDecimal.ONE)); + + return randValue.add(min); // Can return as BigDecimal + } + + // Handle double for non-precise math + double min = number1.doubleValue(); + double max = number2.doubleValue(); + + // Swap min and max if necessary + if (min > max) { + double tmp = min; min = max; max = tmp; } - int diff = max - min; - return ((int) (Rand.call(pc, algo) * (diff + 1))) + min; + + // Calculate the difference and random value + int diff = (int) (max - min); + return ((int) (Rand.call(pc, algo).doubleValue() * (diff + 1))) + (int) min; + } public static int invoke(int min, int max) throws ExpressionException { @@ -51,8 +58,9 @@ public static int invoke(int min, int max) throws ExpressionException { min = max; max = tmp; } + + // Calculate the difference and random value int diff = max - min; - return ((int) (Rand.call(null, "cfmx_compat") * (diff + 1))) + min; + return ((int) (Rand.call(null, "cfmx_compat").doubleValue() * (diff + 1))) + min; } - -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/Randomize.java b/core/src/main/java/lucee/runtime/functions/math/Randomize.java index fe0b36871e..e16618d5f4 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Randomize.java +++ b/core/src/main/java/lucee/runtime/functions/math/Randomize.java @@ -23,23 +23,25 @@ import lucee.runtime.PageContext; import lucee.runtime.crypt.CFMXCompat; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Randomize implements Function { - public static double call(PageContext pc, double number) throws ExpressionException { + private static final long serialVersionUID = -7493245881811279645L; - Rand.getRandom(CFMXCompat.ALGORITHM_NAME, number); - - return Rand.call(pc, CFMXCompat.ALGORITHM_NAME); + public static Number call(PageContext pc, Number number) throws ExpressionException { + return call(pc, number, CFMXCompat.ALGORITHM_NAME); } - public static double call(PageContext pc, double number, String algorithm) throws ExpressionException { - - Rand.getRandom(algorithm, number); + public static Number call(PageContext pc, Number number, String algorithm) throws ExpressionException { - return Rand.call(pc, algorithm); + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(Rand.getRandom(algorithm, Caster.toDouble(number)).nextDouble()); + } + return Rand.getRandom(algorithm, Caster.toDouble(number)).nextDouble(); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/Sgn.java b/core/src/main/java/lucee/runtime/functions/math/Sgn.java index c023365633..40210c8716 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Sgn.java +++ b/core/src/main/java/lucee/runtime/functions/math/Sgn.java @@ -16,16 +16,26 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function sgn - */ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Sgn implements Function { - public static double call(PageContext pc, double number) { - return number != 0.0d ? number >= 0.0d ? 1 : -1 : 0; + + private static final long serialVersionUID = -6590806959925629603L; + + public static Number call(PageContext pc, Number number) { + + double numValue = Caster.toDoubleValue(number); + + int result = numValue != 0.0d ? (numValue >= 0.0d ? 1 : -1) : 0; + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(result); + } + return result; } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/Sin.java b/core/src/main/java/lucee/runtime/functions/math/Sin.java index 3ae511f166..6ed9558f1b 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Sin.java +++ b/core/src/main/java/lucee/runtime/functions/math/Sin.java @@ -22,17 +22,17 @@ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; import lucee.runtime.op.Caster; public final class Sin implements Function { private static final long serialVersionUID = -5944535986043820873L; - public static double call(PageContext pc, double number) { - return StrictMath.sin(number); - } - public static Number call(PageContext pc, Number number) { - return Caster.toBigDecimal(StrictMath.sin(Caster.toDoubleValue(number))); + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(StrictMath.sin(Caster.toDoubleValue(number))); + } + return Caster.toDouble(StrictMath.sin(Caster.toDoubleValue(number))); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/math/Sqr.java b/core/src/main/java/lucee/runtime/functions/math/Sqr.java index 4f82e02fb5..eadce5f916 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Sqr.java +++ b/core/src/main/java/lucee/runtime/functions/math/Sqr.java @@ -16,19 +16,28 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function sqr - */ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Sqr implements Function { - public static double call(PageContext pc, double number) throws ExpressionException { - if (number >= 0.0D) return StrictMath.sqrt(number); - throw new ExpressionException("invalid argument, function argument must be a positive number"); + private static final long serialVersionUID = 1905751872241318598L; + + public static Number call(PageContext pc, Number number) throws ExpressionException { + + double numValue = Caster.toDoubleValue(number); + if (numValue < 0.0D) { + throw new ExpressionException("invalid argument, function argument must be a positive number"); + } + + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(StrictMath.sqrt(numValue)); + } + return StrictMath.sqrt(numValue); } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/math/Tan.java b/core/src/main/java/lucee/runtime/functions/math/Tan.java index 0b297694d2..be6ceee99d 100644 --- a/core/src/main/java/lucee/runtime/functions/math/Tan.java +++ b/core/src/main/java/lucee/runtime/functions/math/Tan.java @@ -16,16 +16,23 @@ * License along with this library. If not, see . * **/ -/** - * Implements the CFML Function tan - */ package lucee.runtime.functions.math; import lucee.runtime.PageContext; +import lucee.runtime.engine.ThreadLocalPageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class Tan implements Function { - public static double call(PageContext pc, double number) { - return StrictMath.tan(number); + + private static final long serialVersionUID = 4317741894871385443L; + + public static Number call(PageContext pc, Number number) { + + double numValue = Caster.toDoubleValue(number); + if (ThreadLocalPageContext.preciseMath(pc)) { + return Caster.toBigDecimal(StrictMath.tan(numValue)); + } + return StrictMath.tan(numValue); } -} \ No newline at end of file +} diff --git a/core/src/main/java/lucee/runtime/functions/other/CreateULID.java b/core/src/main/java/lucee/runtime/functions/other/CreateULID.java index 5281d95828..f0ffcf0440 100644 --- a/core/src/main/java/lucee/runtime/functions/other/CreateULID.java +++ b/core/src/main/java/lucee/runtime/functions/other/CreateULID.java @@ -24,7 +24,7 @@ public static String call(PageContext pc, String type) throws PageException { return invoke(pc, type, -1, null); } - public static String call(PageContext pc, String type, double input1, String input2) throws PageException { + public static String call(PageContext pc, String type, Number input1, String input2) throws PageException { return invoke(pc, type, input1, input2); } @@ -38,7 +38,7 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { throw new FunctionException(pc, CreateUniqueId.class.getSimpleName(), 0, 3, args.length); } - public static String invoke(PageContext pc, String type, double input1, String input2) throws PageException { + public static String invoke(PageContext pc, String type, Number input1, String input2) throws PageException { if (StringUtil.isEmpty(type)) return UlidCreator.getUlid().toString(); // empty,monotonic,hash diff --git a/core/src/main/java/lucee/runtime/functions/other/Decrypt.java b/core/src/main/java/lucee/runtime/functions/other/Decrypt.java index 6f064fa77f..21781d6fd9 100644 --- a/core/src/main/java/lucee/runtime/functions/other/Decrypt.java +++ b/core/src/main/java/lucee/runtime/functions/other/Decrypt.java @@ -51,11 +51,11 @@ public static String call(PageContext pc, String input, String key, String algor return invoke(input, key, algorithm, encoding, ivOrSalt, 0, true); } - public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, double iterations) throws PageException { + public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, Number iterations) throws PageException { return invoke(input, key, algorithm, encoding, ivOrSalt, Caster.toInteger(iterations), true); } - public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, double iterations, boolean precise) + public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, Number iterations, boolean precise) throws PageException { return invoke(input, key, algorithm, encoding, ivOrSalt, Caster.toInteger(iterations), precise); } diff --git a/core/src/main/java/lucee/runtime/functions/other/DecryptBinary.java b/core/src/main/java/lucee/runtime/functions/other/DecryptBinary.java index 6147c43c78..eae1b965b3 100644 --- a/core/src/main/java/lucee/runtime/functions/other/DecryptBinary.java +++ b/core/src/main/java/lucee/runtime/functions/other/DecryptBinary.java @@ -43,11 +43,11 @@ public static Object call(PageContext pc, Object oBytes, String key, String algo return Decrypt.invoke(Caster.toBinary(oBytes), key, algorithm, Caster.toBinary(ivOrSalt), 0, true); } - public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, double iterations) throws PageException { + public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, Number iterations) throws PageException { return Decrypt.invoke(Caster.toBinary(oBytes), key, algorithm, Caster.toBinary(ivOrSalt), Caster.toInteger(iterations), true); } - public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, double iterations, boolean precise) throws PageException { + public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, Number iterations, boolean precise) throws PageException { return Decrypt.invoke(Caster.toBinary(oBytes), key, algorithm, Caster.toBinary(ivOrSalt), Caster.toInteger(iterations), precise); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/other/Dump.java b/core/src/main/java/lucee/runtime/functions/other/Dump.java index 829d94248d..d94f38472f 100644 --- a/core/src/main/java/lucee/runtime/functions/other/Dump.java +++ b/core/src/main/java/lucee/runtime/functions/other/Dump.java @@ -63,38 +63,38 @@ public static String call(PageContext pc, Object object, String label, boolean e return call(pc, object, label, expand, 9999, null, null, null, null, 9999, true, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel) throws PageException { + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel) throws PageException { return call(pc, object, label, expand, maxLevel, null, null, null, null, 9999, true, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel, String show) throws PageException { + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel, String show) throws PageException { return call(pc, object, label, expand, maxLevel, show, null, null, null, 9999, true, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel, String show, String hide) throws PageException { + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel, String show, String hide) throws PageException { return call(pc, object, label, expand, maxLevel, show, hide, null, null, 9999, true, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel, String show, String hide, String output) throws PageException { + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel, String show, String hide, String output) throws PageException { return call(pc, object, label, expand, maxLevel, show, hide, output, null, 9999, true, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel, String show, String hide, String output, String format) + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel, String show, String hide, String output, String format) throws PageException { return call(pc, object, label, expand, maxLevel, show, hide, output, format, 9999, true, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel, String show, String hide, String output, String format, double keys) + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel, String show, String hide, String output, String format, double keys) throws PageException { return call(pc, object, label, expand, maxLevel, show, hide, output, format, keys, true, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel, String show, String hide, String output, String format, double keys, + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel, String show, String hide, String output, String format, double keys, boolean metainfo) throws PageException { return call(pc, object, label, expand, maxLevel, show, hide, output, format, keys, metainfo, true); } - public static String call(PageContext pc, Object object, String label, boolean expand, double maxLevel, String show, String hide, String output, String format, double keys, + public static String call(PageContext pc, Object object, String label, boolean expand, Number maxLevel, String show, String hide, String output, String format, double keys, boolean metainfo, boolean showUDFs) throws PageException { if (show != null && "all".equalsIgnoreCase(show.trim())) show = null; if (hide != null && "all".equalsIgnoreCase(hide.trim())) hide = null; @@ -130,8 +130,8 @@ else if ("console".equalsIgnoreCase(output)) { Set setShow = (show != null) ? ListUtil.listToSet(show.toLowerCase(), ",", true) : null; Set setHide = (hide != null) ? ListUtil.listToSet(hide.toLowerCase(), ",", true) : null; - DumpProperties properties = new DumpProperties((int) maxLevel, setShow, setHide, (int) keys, metainfo, showUDFs); - DumpData dd = DumpUtil.toDumpData(object, pc, (int) maxLevel, properties); + DumpProperties properties = new DumpProperties(Caster.toIntValue(maxLevel), setShow, setHide, (int) keys, metainfo, showUDFs); + DumpData dd = DumpUtil.toDumpData(object, pc, Caster.toIntValue(maxLevel), properties); if (!StringUtil.isEmpty(label)) { DumpTable table = new DumpTable("#ffffff", "#cccccc", "#000000"); diff --git a/core/src/main/java/lucee/runtime/functions/other/DumpStruct.java b/core/src/main/java/lucee/runtime/functions/other/DumpStruct.java index bb6855ab26..59edfd4a90 100644 --- a/core/src/main/java/lucee/runtime/functions/other/DumpStruct.java +++ b/core/src/main/java/lucee/runtime/functions/other/DumpStruct.java @@ -58,39 +58,39 @@ public static Struct call(PageContext pc, Object object) { return call(pc, object, 9999, null, null, 9999, true); } - public static Struct call(PageContext pc, Object object, double maxLevel) { + public static Struct call(PageContext pc, Object object, Number maxLevel) { return call(pc, object, maxLevel, null, null, 9999, true, true, null); } - public static Struct call(PageContext pc, Object object, double maxLevel, String show) { + public static Struct call(PageContext pc, Object object, Number maxLevel, String show) { return call(pc, object, maxLevel, show, null, 9999, true, true, null); } - public static Struct call(PageContext pc, Object object, double maxLevel, String show, String hide) { + public static Struct call(PageContext pc, Object object, Number maxLevel, String show, String hide) { return call(pc, object, maxLevel, show, hide, 9999, true, true, null); } - public static Struct call(PageContext pc, Object object, double maxLevel, String show, String hide, double keys) { + public static Struct call(PageContext pc, Object object, Number maxLevel, String show, String hide, Number keys) { return call(pc, object, maxLevel, show, hide, keys, true, true, null); } - public static Struct call(PageContext pc, Object object, double maxLevel, String show, String hide, double keys, boolean metainfo) { + public static Struct call(PageContext pc, Object object, Number maxLevel, String show, String hide, Number keys, boolean metainfo) { return call(pc, object, maxLevel, show, hide, keys, metainfo, true, null); } - public static Struct call(PageContext pc, Object object, double maxLevel, String show, String hide, double keys, boolean metainfo, boolean showUDFs) { + public static Struct call(PageContext pc, Object object, Number maxLevel, String show, String hide, Number keys, boolean metainfo, boolean showUDFs) { return call(pc, object, maxLevel, show, hide, keys, metainfo, showUDFs, null); } - public static Struct call(PageContext pc, Object object, double maxLevel, String show, String hide, double keys, boolean metainfo, boolean showUDFs, String label) { + public static Struct call(PageContext pc, Object object, Number maxLevel, String show, String hide, Number keys, boolean metainfo, boolean showUDFs, String label) { if (show != null && "all".equalsIgnoreCase(show.trim())) show = null; if (hide != null && "all".equalsIgnoreCase(hide.trim())) hide = null; Set setShow = (show != null) ? ListUtil.listToSet(show.toLowerCase(), ",", true) : null; Set setHide = (hide != null) ? ListUtil.listToSet(hide.toLowerCase(), ",", true) : null; - DumpProperties properties = new DumpProperties((int) maxLevel, setShow, setHide, (int) keys, metainfo, showUDFs); - DumpData dd = DumpUtil.toDumpData(object, pc, (int) maxLevel, properties); + DumpProperties properties = new DumpProperties(Caster.toIntValue(maxLevel), setShow, setHide, Caster.toIntValue(keys), metainfo, showUDFs); + DumpData dd = DumpUtil.toDumpData(object, pc, Caster.toIntValue(maxLevel), properties); if (!StringUtil.isEmpty(label)) { DumpTable table = new DumpTable("#ffffff", "#cccccc", "#000000"); diff --git a/core/src/main/java/lucee/runtime/functions/other/Encrypt.java b/core/src/main/java/lucee/runtime/functions/other/Encrypt.java index 9169c4f7d5..ba24754775 100644 --- a/core/src/main/java/lucee/runtime/functions/other/Encrypt.java +++ b/core/src/main/java/lucee/runtime/functions/other/Encrypt.java @@ -51,11 +51,11 @@ public static String call(PageContext pc, String input, String key, String algor return invoke(input, key, algorithm, encoding, ivOrSalt, 0, true); } - public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, double iterations) throws PageException { + public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, Number iterations) throws PageException { return invoke(input, key, algorithm, encoding, ivOrSalt, Caster.toInteger(iterations), true); } - public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, double iterations, boolean precise) + public static String call(PageContext pc, String input, String key, String algorithm, String encoding, Object ivOrSalt, Number iterations, boolean precise) throws PageException { return invoke(input, key, algorithm, encoding, ivOrSalt, Caster.toInteger(iterations), precise); } diff --git a/core/src/main/java/lucee/runtime/functions/other/EncryptBinary.java b/core/src/main/java/lucee/runtime/functions/other/EncryptBinary.java index f662433f10..401d35c442 100644 --- a/core/src/main/java/lucee/runtime/functions/other/EncryptBinary.java +++ b/core/src/main/java/lucee/runtime/functions/other/EncryptBinary.java @@ -43,11 +43,11 @@ public static Object call(PageContext pc, Object oBytes, String key, String algo return Encrypt.invoke(Caster.toBinary(oBytes), key, algorithm, Caster.toBinary(ivOrSalt), 0, true); } - public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, double iterations) throws PageException { + public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, Number iterations) throws PageException { return Encrypt.invoke(Caster.toBinary(oBytes), key, algorithm, Caster.toBinary(ivOrSalt), Caster.toInteger(iterations), true); } - public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, double iterations, boolean precise) throws PageException { + public static Object call(PageContext pc, Object oBytes, String key, String algorithm, Object ivOrSalt, Number iterations, boolean precise) throws PageException { return Encrypt.invoke(Caster.toBinary(oBytes), key, algorithm, Caster.toBinary(ivOrSalt), Caster.toInteger(iterations), precise); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/other/GeneratePBKDFKey.java b/core/src/main/java/lucee/runtime/functions/other/GeneratePBKDFKey.java index af617dba2a..c4c51a09aa 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GeneratePBKDFKey.java +++ b/core/src/main/java/lucee/runtime/functions/other/GeneratePBKDFKey.java @@ -40,11 +40,11 @@ public static String call(PageContext pc, String algorithm, String passPhrase, S return call(pc, algorithm, passPhrase, salt, 4096, 128); } - public static String call(PageContext pc, String algorithm, String passPhrase, String salt, double iterations) throws PageException { + public static String call(PageContext pc, String algorithm, String passPhrase, String salt, Number iterations) throws PageException { return call(pc, algorithm, passPhrase, salt, iterations, 128); } - public static String call(PageContext pc, String algorithm, String passPhrase, String salt, double iterations, double keySize) throws PageException { + public static String call(PageContext pc, String algorithm, String passPhrase, String salt, Number iterations, Number keySize) throws PageException { // algo if (StringUtil.isEmpty(algorithm)) throw new FunctionException(pc, "GeneratePBKDFKey", 1, "algorithm", "Argument [algorithm] is empty."); algorithm = algorithm.trim(); @@ -64,7 +64,7 @@ public static String call(PageContext pc, String algorithm, String passPhrase, S } try { - PBEKeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), salt.getBytes(), (int) iterations, (int) keySize); + PBEKeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), salt.getBytes(), Caster.toIntValue(iterations), Caster.toIntValue(keySize)); return Base64Coder.encode(key.generateSecret(spec).getEncoded()); } catch (InvalidKeySpecException ikse) { diff --git a/core/src/main/java/lucee/runtime/functions/other/GenerateRSAKeys.java b/core/src/main/java/lucee/runtime/functions/other/GenerateRSAKeys.java index 55876250df..359e6dcbc2 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GenerateRSAKeys.java +++ b/core/src/main/java/lucee/runtime/functions/other/GenerateRSAKeys.java @@ -19,7 +19,7 @@ public static Struct call(PageContext pc) throws PageException { return createKeyPair(Caster.toIntValue(RSA.KEY_SIZE)); } - public static Struct call(PageContext pc, double keySize) throws PageException { + public static Struct call(PageContext pc, Number keySize) throws PageException { return createKeyPair(Caster.toIntValue(keySize)); } diff --git a/core/src/main/java/lucee/runtime/functions/other/GenerateSecretKey.java b/core/src/main/java/lucee/runtime/functions/other/GenerateSecretKey.java index 1f3b8a5afd..cc4922f660 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GenerateSecretKey.java +++ b/core/src/main/java/lucee/runtime/functions/other/GenerateSecretKey.java @@ -35,10 +35,11 @@ public static String call(PageContext pc, String algorithm) throws PageException return call(pc, algorithm, 0); } - public static String call(PageContext pc, String algorithm, double keySize) throws PageException { + public static String call(PageContext pc, String algorithm, Number keySize) throws PageException { try { KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm.toUpperCase()); - if (keySize > 0) keyGenerator.init(Caster.toIntValue(keySize)); + int kz = Caster.toIntValue(keySize); + if (kz > 0) keyGenerator.init(Caster.toIntValue(keySize)); return Coder.encode(Coder.ENCODING_BASE64, keyGenerator.generateKey().getEncoded()); } catch (Exception e) { diff --git a/core/src/main/java/lucee/runtime/functions/other/GetBaseTagData.java b/core/src/main/java/lucee/runtime/functions/other/GetBaseTagData.java index 317f3f0161..a2a27343dd 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GetBaseTagData.java +++ b/core/src/main/java/lucee/runtime/functions/other/GetBaseTagData.java @@ -28,6 +28,7 @@ import lucee.runtime.exp.ExpressionException; import lucee.runtime.exp.PageException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.tag.CFTag; import lucee.runtime.tag.CFTagCore; import lucee.runtime.type.Struct; @@ -40,8 +41,8 @@ public static Struct call(PageContext pc, String tagName) throws PageException { return call(pc, tagName, -1); } - public static Struct call(PageContext pc, String tagName, double minLevel) throws PageException { - CFTag tag = getParentCFTag(pc.getCurrentTag(), tagName, (int) minLevel); + public static Struct call(PageContext pc, String tagName, Number minLevel) throws PageException { + CFTag tag = getParentCFTag(pc.getCurrentTag(), tagName, Caster.toIntValue(minLevel)); if (tag == null) throw new ExpressionException("can't find base tag with name [" + tagName + "]"); return tag.getVariablesScope(); } diff --git a/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCount.java b/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCount.java index 906457711d..247632a09b 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCount.java +++ b/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCount.java @@ -23,9 +23,12 @@ import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class GetK2ServerDocCount implements Function { - public static double call(PageContext pc) { - return 0; + private static final long serialVersionUID = 341959256890747154L; + + public static Number call(PageContext pc) { + return Caster.toNumber(pc, 0); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCountLimit.java b/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCountLimit.java index 3db0aacf8c..b1766dbed8 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCountLimit.java +++ b/core/src/main/java/lucee/runtime/functions/other/GetK2ServerDocCountLimit.java @@ -23,11 +23,14 @@ import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.tag.util.DeprecatedUtil; public final class GetK2ServerDocCountLimit implements Function { - public static double call(PageContext pc) { + private static final long serialVersionUID = -5381791167298940973L; + + public static Number call(PageContext pc) { DeprecatedUtil.function(pc, "GetK2ServerDocCountLimit"); - return 0; + return Caster.toNumber(pc, 0); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/other/GetNumericDate.java b/core/src/main/java/lucee/runtime/functions/other/GetNumericDate.java index 11ccf86104..a920219748 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GetNumericDate.java +++ b/core/src/main/java/lucee/runtime/functions/other/GetNumericDate.java @@ -28,10 +28,10 @@ import lucee.runtime.type.dt.DateTime; public final class GetNumericDate implements Function { - public static double call(PageContext pc, Object object) throws PageException { + public static Number call(PageContext pc, Object object) throws PageException { DateTime date = Caster.toDate(object, true, pc.getTimeZone(), null); if (date == null) date = Caster.toDate(object, pc.getTimeZone()); - return date.toDoubleValue(); + return Caster.toNumber(pc, date.toDoubleValue()); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/other/GetTickCount.java b/core/src/main/java/lucee/runtime/functions/other/GetTickCount.java index 71772134ab..dfb4f352a6 100644 --- a/core/src/main/java/lucee/runtime/functions/other/GetTickCount.java +++ b/core/src/main/java/lucee/runtime/functions/other/GetTickCount.java @@ -25,6 +25,7 @@ import lucee.runtime.PageContext; import lucee.runtime.exp.FunctionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class GetTickCount implements Function { @@ -35,26 +36,34 @@ public final class GetTickCount implements Function { public static double UNIT_MICRO = 4; public static double UNIT_SECOND = 8; - public static double call(PageContext pc) { + public static Number call(PageContext pc) { return System.currentTimeMillis(); } - public static double call(PageContext pc, String unit) throws FunctionException { + public static Number call(PageContext pc, String unit) throws FunctionException { if (!StringUtil.isEmpty(unit, true)) { unit = unit.trim(); char c = unit.charAt(0); - if (c == 'n' || c == 'N') return System.nanoTime(); + if (c == 'n' || c == 'N') return Caster.toNumber(pc, System.nanoTime()); else if (c == 'm' || c == 'M') { - if ("micro".equalsIgnoreCase(unit)) return System.nanoTime() / 1000; + if ("micro".equalsIgnoreCase(unit)) return Caster.toNumber(pc, System.nanoTime() / 1000); return System.currentTimeMillis(); } - else if (c == 's' || c == 'S') return System.currentTimeMillis() / 1000; + else if (c == 's' || c == 'S') return Caster.toNumber(pc, System.currentTimeMillis() / 1000); } throw new FunctionException(pc, "GetTickCount", 1, "unit", "invalid value [" + unit + "], valid values are (nano, micro, milli, second)"); } + public static Number call(PageContext pc, Number unit) { + double u = Caster.toDoubleValue(unit); + if (UNIT_NANO == u) return Caster.toNumber(pc, System.nanoTime()); + if (UNIT_MICRO == u) return Caster.toNumber(pc, System.nanoTime() / 1000); + if (UNIT_MILLI == u) return Caster.toNumber(pc, System.currentTimeMillis()); + return Caster.toNumber(pc, System.currentTimeMillis() / 1000); + } + // this function is only called when the evaluator validates the unit definition on compilation time public static double call(PageContext pc, double unit) { if (UNIT_NANO == unit) return System.nanoTime(); diff --git a/core/src/main/java/lucee/runtime/functions/other/SSLCertificateInstall.java b/core/src/main/java/lucee/runtime/functions/other/SSLCertificateInstall.java index de76a10508..bf669990ec 100644 --- a/core/src/main/java/lucee/runtime/functions/other/SSLCertificateInstall.java +++ b/core/src/main/java/lucee/runtime/functions/other/SSLCertificateInstall.java @@ -21,6 +21,7 @@ import lucee.runtime.PageContext; import lucee.runtime.exp.PageException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.tag.Admin; public final class SSLCertificateInstall implements Function { @@ -31,8 +32,8 @@ public static String call(PageContext pc, String host) throws PageException { return call(pc, host, 443); } - public static String call(PageContext pc, String host, double port) throws PageException { - Admin.updateSSLCertificate(pc.getConfig(), host, (int) port); + public static String call(PageContext pc, String host, Number port) throws PageException { + Admin.updateSSLCertificate(pc.getConfig(), host, Caster.toIntValue(port)); return ""; } diff --git a/core/src/main/java/lucee/runtime/functions/other/ToNumeric.java b/core/src/main/java/lucee/runtime/functions/other/ToNumeric.java index a8b26d1854..c01501ada8 100644 --- a/core/src/main/java/lucee/runtime/functions/other/ToNumeric.java +++ b/core/src/main/java/lucee/runtime/functions/other/ToNumeric.java @@ -25,11 +25,11 @@ import lucee.runtime.op.Decision; public class ToNumeric { - public static double call(PageContext pc, Object value) throws PageException { - return Caster.toDoubleValue(value); + public static Number call(PageContext pc, Object value) throws PageException { + return Caster.toNumber(pc, value); } - public static double call(PageContext pc, Object value, Object oRadix) throws PageException { + public static Number call(PageContext pc, Object value, Object oRadix) throws PageException { if (oRadix == null) return call(pc, value); int radix; if (Decision.isNumber(oRadix)) { @@ -44,7 +44,7 @@ public static double call(PageContext pc, Object value, Object oRadix) throws Pa else if ("hex".equals(str)) radix = 16; else throw invalidRadix(pc, str); } - return Long.parseLong(Caster.toString(value), radix); + return Caster.toNumber(pc, Long.parseLong(Caster.toString(value), radix)); } private static FunctionException invalidRadix(PageContext pc, String radix) { diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryAddColumn.java b/core/src/main/java/lucee/runtime/functions/query/QueryAddColumn.java index 4916422403..4a74e4176a 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryAddColumn.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryAddColumn.java @@ -36,19 +36,19 @@ public final class QueryAddColumn extends BIF { private static final long serialVersionUID = -242783888553490683L; - public static double call(PageContext pc, Query query, String string) throws PageException { + public static Number call(PageContext pc, Query query, String string) throws PageException { return call(pc, query, string, null, new ArrayImpl()); } - public static double call(PageContext pc, Query query, String string, Object arrayOrDataType) throws PageException { + public static Number call(PageContext pc, Query query, String string, Object arrayOrDataType) throws PageException { if (!Decision.isArray(arrayOrDataType)) return call(pc, query, string, Caster.toString(arrayOrDataType), new ArrayImpl()); return call(pc, query, string, null, Caster.toArray(arrayOrDataType)); } - public static double call(PageContext pc, Query query, String string, Object datatype, Object array) throws PageException { + public static Number call(PageContext pc, Query query, String string, Object datatype, Object array) throws PageException { if (StringUtil.isEmpty(datatype)) query.addColumn(KeyImpl.init(string), Caster.toArray(array)); else query.addColumn(KeyImpl.init(string), Caster.toArray(array), SQLCaster.toSQLType(Caster.toString(datatype))); - return query.size(); + return Caster.toNumber(pc, query.size()); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryAddRow.java b/core/src/main/java/lucee/runtime/functions/query/QueryAddRow.java index 2f8a590e2f..efbeca8354 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryAddRow.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryAddRow.java @@ -33,19 +33,19 @@ public final class QueryAddRow extends BIF { private static final long serialVersionUID = 1252130736067181453L; - public static double call(PageContext pc, Query query) { - return query.addRow(); + public static Number call(PageContext pc, Query query) { + return Caster.toNumber(pc, query.addRow()); } - public static double call(PageContext pc, Query query, Object numberOrData) throws PageException { + public static Number call(PageContext pc, Query query, Object numberOrData) throws PageException { if (numberOrData == null) return call(pc, query); else if (Decision.isNumber(numberOrData)) { - return ((QueryImpl) query).addRowAndGet(Caster.toIntValue(numberOrData)); + return Caster.toNumber(pc, ((QueryImpl) query).addRowAndGet(Caster.toIntValue(numberOrData))); } else { QueryNew.populate(pc, query, numberOrData, false); } - return query.getRecordcount(); + return Caster.toNumber(pc, query.getRecordcount()); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryColumnCount.java b/core/src/main/java/lucee/runtime/functions/query/QueryColumnCount.java index 74906752f9..75bb58e829 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryColumnCount.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryColumnCount.java @@ -31,8 +31,8 @@ public final class QueryColumnCount extends BIF { private static final long serialVersionUID = 7637016307562378310L; - public static double call(PageContext pc, Query qry) { - return qry.getColumnCount(); + public static Number call(PageContext pc, Query qry) { + return Caster.toNumber(pc, qry.getColumnCount()); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryConvertForGrid.java b/core/src/main/java/lucee/runtime/functions/query/QueryConvertForGrid.java index 39d4b35009..dbf01b9b75 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryConvertForGrid.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryConvertForGrid.java @@ -37,8 +37,8 @@ public final class QueryConvertForGrid extends BIF { private static final long serialVersionUID = 871091293736619034L; - public static Struct call(PageContext pc, Query src, double dpage, double dpageSize) throws PageException { - int page = (int) dpage; + public static Struct call(PageContext pc, Query src, Number npage, double dpageSize) throws PageException { + int page = Caster.toIntValue(npage); int pageSize = (int) dpageSize; if (page < 1) { throw new FunctionException(pc, "QueryConvertForGrid", 2, "page", "page must be a positive number now (" + page + ")"); diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryCurrentRow.java b/core/src/main/java/lucee/runtime/functions/query/QueryCurrentRow.java index 4794388970..b71878e53b 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryCurrentRow.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryCurrentRow.java @@ -32,8 +32,8 @@ public final class QueryCurrentRow extends BIF { private static final long serialVersionUID = 6744860152468692462L; - public static double call(PageContext pc, Query qry) { - return qry.getCurrentrow(pc.getId()); + public static Number call(PageContext pc, Query qry) { + return Caster.toNumber(pc, qry.getCurrentrow(pc.getId())); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryDeleteRow.java b/core/src/main/java/lucee/runtime/functions/query/QueryDeleteRow.java index 9cbcf58c75..9e5d3be4f4 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryDeleteRow.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryDeleteRow.java @@ -32,9 +32,10 @@ public static boolean call(PageContext pc, Query query) throws PageException { return call(pc, query, query.getRowCount()); } - public static boolean call(PageContext pc, Query query, double row) throws PageException { + public static boolean call(PageContext pc, Query query, Number nrow) throws PageException { + int row = Caster.toIntValue(nrow); if (row == -9999) row = query.getRowCount();// used for named arguments - query.removeRow((int) row); + query.removeRow(row); return true; } diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryEach.java b/core/src/main/java/lucee/runtime/functions/query/QueryEach.java index 8d7d89c60e..f3d9f0e3e3 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryEach.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryEach.java @@ -42,8 +42,8 @@ public static String call(PageContext pc, Query qry, UDF udf, boolean parallel) return _call(pc, qry, udf, parallel, 20); } - public static String call(PageContext pc, Query qry, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, qry, udf, parallel, (int) maxThreads); + public static String call(PageContext pc, Query qry, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, qry, udf, parallel, Caster.toIntValue(maxThreads)); } private static String _call(PageContext pc, Query qry, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryEvery.java b/core/src/main/java/lucee/runtime/functions/query/QueryEvery.java index e95bf27529..e6115c2b37 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryEvery.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryEvery.java @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Query qry, UDF udf, boolean parallel) return _call(pc, qry, udf, parallel, 20); } - public static boolean call(PageContext pc, Query qry, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, qry, udf, parallel, (int) maxThreads); + public static boolean call(PageContext pc, Query qry, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, qry, udf, parallel, Caster.toIntValue(maxThreads)); } private static boolean _call(PageContext pc, Query qry, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryFilter.java b/core/src/main/java/lucee/runtime/functions/query/QueryFilter.java index ece8f2d7ea..fa23fde9a8 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryFilter.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryFilter.java @@ -44,8 +44,8 @@ public static Query call(PageContext pc, Query qry, UDF udf, boolean parallel) t return _call(pc, qry, udf, parallel, 20); } - public static Query call(PageContext pc, Query qry, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, qry, udf, parallel, (int) maxThreads); + public static Query call(PageContext pc, Query qry, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, qry, udf, parallel, Caster.toIntValue(maxThreads)); } public static Query _call(PageContext pc, Query qry, UDF filter, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryGetCell.java b/core/src/main/java/lucee/runtime/functions/query/QueryGetCell.java index 9232c6398d..8ef79ce630 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryGetCell.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryGetCell.java @@ -36,9 +36,10 @@ public static Object call(PageContext pc, Query query, String columnName) throws return call(pc, query, columnName, query.getRecordcount()); } - public static Object call(PageContext pc, Query query, String columnName, double rowNumber) throws PageException { + public static Object call(PageContext pc, Query query, String columnName, Number nrowNumber) throws PageException { + int rowNumber = Caster.toIntValue(nrowNumber); if (rowNumber == -9999) rowNumber = query.getRecordcount();// used for named arguments - return query.getAt(KeyImpl.init(columnName), (int) rowNumber); + return query.getAt(KeyImpl.init(columnName), rowNumber); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryInsertAt.java b/core/src/main/java/lucee/runtime/functions/query/QueryInsertAt.java index d4385c7ee8..d9f3f4e2f5 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryInsertAt.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryInsertAt.java @@ -18,11 +18,12 @@ public class QueryInsertAt extends BIF implements Function { private static final long serialVersionUID = -2549767593942513005L; - public static Query call(PageContext pc, Query qry, Object value, double index) throws PageException { + public static Query call(PageContext pc, Query qry, Object value, Number nindex) throws PageException { + int index = Caster.toIntValue(nindex); if (index < 1) throw new FunctionException(pc, "QueryInsertAt", 3, "index", "index most be at least one, now it is [" + Caster.toString(index) + "]."); if (index - 1 > qry.getRowCount()) throw new FunctionException(pc, "QueryInsertAt", 3, "index", "index [" + Caster.toString(index) + "] cannot be bigger than recordcount [" + qry.getRecordcount() + "] of the query plus 1."); - int off = (int) (index - 1); + int off = index - 1; // QUERY if (Decision.isQuery(value)) { diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryMap.java b/core/src/main/java/lucee/runtime/functions/query/QueryMap.java index 36b749a837..8b4f9530c2 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryMap.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryMap.java @@ -45,8 +45,8 @@ public static Query call(PageContext pc, Query qry, UDF udf, Query resQuery, boo return _call(pc, qry, udf, resQuery, parallel, 20); } - public static Query call(PageContext pc, Query qry, UDF udf, Query resQuery, boolean parallel, double maxThreads) throws PageException { - return _call(pc, qry, udf, resQuery, parallel, (int) maxThreads); + public static Query call(PageContext pc, Query qry, UDF udf, Query resQuery, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, qry, udf, resQuery, parallel, Caster.toIntValue(maxThreads)); } private static Query _call(PageContext pc, Query qry, UDF udf, Query resQuery, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryRecordCount.java b/core/src/main/java/lucee/runtime/functions/query/QueryRecordCount.java index c85b3dd316..9edcfecbd1 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryRecordCount.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryRecordCount.java @@ -31,8 +31,8 @@ public final class QueryRecordCount extends BIF { private static final long serialVersionUID = -5956390806966915503L; - public static double call(PageContext pc, Query qry) { - return qry.getRowCount(); + public static Number call(PageContext pc, Query qry) { + return Caster.toNumber(pc, qry.getRowCount()); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryRowByIndex.java b/core/src/main/java/lucee/runtime/functions/query/QueryRowByIndex.java index f537d8fa9b..01cc8eb17e 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryRowByIndex.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryRowByIndex.java @@ -20,12 +20,12 @@ public class QueryRowByIndex extends BIF { private static final long serialVersionUID = -1462555083727605910L; - public static double call(PageContext pc, Query query, String index) throws PageException { - return Caster.toDoubleValue(getIndex(query, index)); + public static Number call(PageContext pc, Query query, String index) throws PageException { + return Caster.toNumber(pc, getIndex(query, index)); } - public static double call(PageContext pc, Query query, String index, double defaultValue) { - return Caster.toDoubleValue(getIndex(query, index, (int) defaultValue)); + public static Number call(PageContext pc, Query query, String index, Number defaultValue) { + return Caster.toNumber(pc, getIndex(query, index, Caster.toIntValue(defaultValue))); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryRowData.java b/core/src/main/java/lucee/runtime/functions/query/QueryRowData.java index 344a6370ec..7c44ecd603 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryRowData.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryRowData.java @@ -40,11 +40,11 @@ public class QueryRowData extends BIF { // is this needed? private static final long serialVersionUID = -5234853923691806118L; - public static Object call(PageContext pc, Query query, double rowNumber) throws PageException { + public static Object call(PageContext pc, Query query, Number rowNumber) throws PageException { return call(pc, query, rowNumber, "struct"); } - public static Object call(PageContext pc, Query query, double rowNumber, String returnFormat) throws PageException { + public static Object call(PageContext pc, Query query, Number rowNumber, String returnFormat) throws PageException { int row = Caster.toInteger(rowNumber); diff --git a/core/src/main/java/lucee/runtime/functions/query/QueryRowSwap.java b/core/src/main/java/lucee/runtime/functions/query/QueryRowSwap.java index a05582b554..4a3e4b3847 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QueryRowSwap.java +++ b/core/src/main/java/lucee/runtime/functions/query/QueryRowSwap.java @@ -16,12 +16,13 @@ public class QueryRowSwap extends BIF implements Function { private static final long serialVersionUID = -812740090032092109L; - public static Query call(PageContext pc, Query qry, double source, double destination) throws PageException { + public static Query call(PageContext pc, Query qry, Number nsource, double destination) throws PageException { // validate source + int source = Caster.toIntValue(nsource); if (source < 1) throw new FunctionException(pc, "QueryRowSwap", 2, "source", "source most be at least one, now it is [" + Caster.toString(source) + "]."); if (source > qry.getRowCount()) throw new FunctionException(pc, "QueryRowSwap", 2, "source", "source [" + Caster.toString(source) + "] cannot be bigger than recordcount [" + qry.getRecordcount() + "] of the query."); - int src = (int) source; + int src = source; // validate destination if (destination < 1) diff --git a/core/src/main/java/lucee/runtime/functions/query/QuerySetCell.java b/core/src/main/java/lucee/runtime/functions/query/QuerySetCell.java index 608c4838ae..f39c8e0b08 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QuerySetCell.java +++ b/core/src/main/java/lucee/runtime/functions/query/QuerySetCell.java @@ -36,9 +36,10 @@ public static boolean call(PageContext pc, Query query, String columnName, Objec return call(pc, query, columnName, value, query.getRecordcount()); } - public static boolean call(PageContext pc, Query query, String columnName, Object value, double rowNumber) throws PageException { + public static boolean call(PageContext pc, Query query, String columnName, Object value, Number nrowNumber) throws PageException { + int rowNumber = Caster.toIntValue(nrowNumber); if (rowNumber == -9999) rowNumber = query.getRecordcount();// used for named arguments - query.setAt(KeyImpl.init(columnName.trim()), (int) rowNumber, value); + query.setAt(KeyImpl.init(columnName.trim()), rowNumber, value); return true; } diff --git a/core/src/main/java/lucee/runtime/functions/query/QuerySetRow.java b/core/src/main/java/lucee/runtime/functions/query/QuerySetRow.java index ad1a41cb01..2d57beeb73 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QuerySetRow.java +++ b/core/src/main/java/lucee/runtime/functions/query/QuerySetRow.java @@ -39,12 +39,13 @@ public final class QuerySetRow extends BIF { private static final long serialVersionUID = -5234853923691806118L; - public static boolean call(PageContext pc, Query query, double rowNumber, Object rowData) throws PageException { + public static boolean call(PageContext pc, Query query, Number nrowNumber, Object rowData) throws PageException { + int rowNumber = Caster.toIntValue(nrowNumber); if (rowNumber < 1) { query.addRow(1); rowNumber = query.getRecordcount(); } - int rn = (int) rowNumber; + int rn = rowNumber; Collection.Key[] colNames = query.getColumnNames(); if (Decision.isStruct(rowData)) { diff --git a/core/src/main/java/lucee/runtime/functions/query/QuerySlice.java b/core/src/main/java/lucee/runtime/functions/query/QuerySlice.java index fbe0bfb91c..28faa4a176 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QuerySlice.java +++ b/core/src/main/java/lucee/runtime/functions/query/QuerySlice.java @@ -34,12 +34,13 @@ public final class QuerySlice extends BIF { private static final long serialVersionUID = -2760070317171532995L; - public static Query call(PageContext pc, Query qry, double offset) throws PageException { + public static Query call(PageContext pc, Query qry, Number offset) throws PageException { return call(pc, qry, offset, 0); } - public static Query call(PageContext pc, Query qry, double offset, double length) throws PageException { - + public static Query call(PageContext pc, Query qry, Number noffset, Number nlength) throws PageException { + int offset = Caster.toIntValue(noffset); + int length = Caster.toIntValue(nlength); int len = qry.getRecordcount(); if (len == 0) throw new FunctionException(pc, "querySlice", 1, "query", "Query cannot be empty"); @@ -47,11 +48,11 @@ public static Query call(PageContext pc, Query qry, double offset, double length if (len < offset) throw new FunctionException(pc, "querySlice", 2, "offset", "offset cannot be greater than the recordcount of the query"); int to = 0; - if (length > 0) to = (int) (offset + length - 1); - else if (length <= 0) to = (int) (len + length); + if (length > 0) to = offset + length - 1; + else if (length <= 0) to = len + length; if (len < to) throw new FunctionException(pc, "querySlice", 3, "length", "offset+length cannot be greater than the recordcount of the query"); - return get(qry, (int) offset, to); + return get(qry, offset, to); } return call(pc, qry, len + offset, length); } diff --git a/core/src/main/java/lucee/runtime/functions/query/QuerySome.java b/core/src/main/java/lucee/runtime/functions/query/QuerySome.java index 9a8b28bc6f..3d0ef2d808 100644 --- a/core/src/main/java/lucee/runtime/functions/query/QuerySome.java +++ b/core/src/main/java/lucee/runtime/functions/query/QuerySome.java @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Query qry, UDF udf, boolean parallel) return _call(pc, qry, udf, parallel, 20); } - public static boolean call(PageContext pc, Query qry, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, qry, udf, parallel, (int) maxThreads); + public static boolean call(PageContext pc, Query qry, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, qry, udf, parallel, Caster.toIntValue(maxThreads)); } private static boolean _call(PageContext pc, Query qry, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/string/Asc.java b/core/src/main/java/lucee/runtime/functions/string/Asc.java index 5c432a452d..8427b681c5 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Asc.java +++ b/core/src/main/java/lucee/runtime/functions/string/Asc.java @@ -31,15 +31,15 @@ public final class Asc extends BIF { private static final long serialVersionUID = 8147532406904456091L; - public static double call(PageContext pc, String string) { + public static Number call(PageContext pc, String string) { if (string.length() == 0) return 0; - return string.charAt(0); + return Caster.toNumber(pc, string.charAt(0)); } - public static double call(PageContext pc, String string, double position) { + public static Number call(PageContext pc, String string, double position) { int pos = (int) position; if (pos < 1 || pos > string.length()) return 0; - return string.charAt(pos - 1); + return Caster.toNumber(pc, string.charAt(pos - 1)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/CJustify.java b/core/src/main/java/lucee/runtime/functions/string/CJustify.java index 8305ad9316..31b6200a8d 100644 --- a/core/src/main/java/lucee/runtime/functions/string/CJustify.java +++ b/core/src/main/java/lucee/runtime/functions/string/CJustify.java @@ -32,8 +32,8 @@ public final class CJustify extends BIF { private static final long serialVersionUID = -4145093552477680411L; - public static String call(PageContext pc, String string, double length) throws ExpressionException { - int len = (int) length; + public static String call(PageContext pc, String string, Number length) throws ExpressionException { + int len = Caster.toIntValue(length); if (len < 1) throw new ExpressionException("Parameter 2 of function cJustify which is now [" + len + "] must be a non-negative integer"); else if ((len -= string.length()) <= 0) return string; else { diff --git a/core/src/main/java/lucee/runtime/functions/string/Chr.java b/core/src/main/java/lucee/runtime/functions/string/Chr.java index 47ff1852e1..65493f878f 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Chr.java +++ b/core/src/main/java/lucee/runtime/functions/string/Chr.java @@ -32,8 +32,8 @@ public final class Chr extends BIF { private static final long serialVersionUID = -4941617303146860984L; - public static String call(PageContext pc, double number) throws ExpressionException { - int value = (int) number; + public static String call(PageContext pc, Number number) throws ExpressionException { + int value = Caster.toIntValue(number); if (value < 1) { if (value == 0) return ""; // else { diff --git a/core/src/main/java/lucee/runtime/functions/string/Compare.java b/core/src/main/java/lucee/runtime/functions/string/Compare.java index c3261d2d00..95586ab1c5 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Compare.java +++ b/core/src/main/java/lucee/runtime/functions/string/Compare.java @@ -31,10 +31,10 @@ public final class Compare extends BIF { private static final long serialVersionUID = -6982310146145687711L; - public static double call(PageContext pc, String str1, String str2) { + public static Number call(PageContext pc, String str1, String str2) { int compare = str1.compareTo(str2); if (compare == 0) return 0; - return compare > 0 ? 1 : -1; + return Caster.toNumber(pc, compare > 0 ? 1 : -1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/CompareNoCase.java b/core/src/main/java/lucee/runtime/functions/string/CompareNoCase.java index e388468801..57d87fc051 100644 --- a/core/src/main/java/lucee/runtime/functions/string/CompareNoCase.java +++ b/core/src/main/java/lucee/runtime/functions/string/CompareNoCase.java @@ -31,10 +31,10 @@ public final class CompareNoCase extends BIF { private static final long serialVersionUID = 4570856747042434801L; - public static double call(PageContext pc, String str1, String str2) { + public static Number call(PageContext pc, String str1, String str2) { int compare = str1.compareToIgnoreCase(str2); if (compare == 0) return 0; - return compare > 0 ? 1 : -1; + return Caster.toNumber(pc, compare > 0 ? 1 : -1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/DayOfWeekAsString.java b/core/src/main/java/lucee/runtime/functions/string/DayOfWeekAsString.java index 9940d00d82..6932edcebf 100644 --- a/core/src/main/java/lucee/runtime/functions/string/DayOfWeekAsString.java +++ b/core/src/main/java/lucee/runtime/functions/string/DayOfWeekAsString.java @@ -42,17 +42,17 @@ public final class DayOfWeekAsString extends BIF { private static Date[] dates = new Date[] { new Date(0 + (3 * DAY)), new Date(0 + (4 * DAY)), new Date(0 + (5 * DAY)), new Date(0 + (6 * DAY)), new Date(0), new Date(0 + (1 * DAY)), new Date(0 + (2 * DAY)) }; - public static String call(PageContext pc, double dow) throws ExpressionException { + public static String call(PageContext pc, Number dow) throws ExpressionException { return call(pc, dow, pc.getLocale(), true); } - public static String call(PageContext pc, double dow, Locale locale) throws ExpressionException { + public static String call(PageContext pc, Number dow, Locale locale) throws ExpressionException { return call(pc, dow, locale == null ? pc.getLocale() : locale, true); } - protected static String call(PageContext pc, double dow, Locale locale, boolean _long) throws ExpressionException { + protected static String call(PageContext pc, Number dow, Locale locale, boolean _long) throws ExpressionException { - int dayOfWeek = (int) dow; + int dayOfWeek = Caster.toIntValue(dow); if (dayOfWeek >= 1 && dayOfWeek <= 7) { if (_long) return DateFormatPool.format(locale, TimeZoneConstants.GMT0, "EEEE", dates[dayOfWeek - 1]); return StringUtil.replace(DateFormatPool.format(locale, TimeZoneConstants.GMT0, "EEE", dates[dayOfWeek - 1]), ".", "", true); diff --git a/core/src/main/java/lucee/runtime/functions/string/Find.java b/core/src/main/java/lucee/runtime/functions/string/Find.java index cd00bad26b..2f529b9caa 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Find.java +++ b/core/src/main/java/lucee/runtime/functions/string/Find.java @@ -31,13 +31,14 @@ public final class Find extends BIF { private static final long serialVersionUID = 1399049740954864771L; - public static double call(PageContext pc, String sub, String str) { - return str.indexOf(sub) + 1; + public static Number call(PageContext pc, String sub, String str) { + return Caster.toNumber(pc, str.indexOf(sub) + 1); } - public static double call(PageContext pc, String sub, String str, double number) { - if (sub.length() == 0) return (int) number; - return str.indexOf(sub, (int) number - 1) + 1; + public static Number call(PageContext pc, String sub, String str, Number number) { + int nbr = Caster.toIntValue(number); + if (sub.length() == 0) return number; + return Caster.toNumber(pc, str.indexOf(sub, nbr - 1) + 1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/FindLast.java b/core/src/main/java/lucee/runtime/functions/string/FindLast.java index 899fe6eb82..6493648869 100644 --- a/core/src/main/java/lucee/runtime/functions/string/FindLast.java +++ b/core/src/main/java/lucee/runtime/functions/string/FindLast.java @@ -10,13 +10,14 @@ public class FindLast extends BIF { private static final long serialVersionUID = -176191593295823013L; - public static double call(PageContext pc, String sub, String str) { - return str.lastIndexOf(sub) + 1; + public static Number call(PageContext pc, String sub, String str) { + return Caster.toNumber(pc, str.lastIndexOf(sub) + 1); } - public static double call(PageContext pc, String sub, String str, double number) { - if (sub.length() == 0) return (int) number; - return str.lastIndexOf(sub, (int) number - 1) + 1; + public static Number call(PageContext pc, String sub, String str, Number number) { + int nbr = Caster.toIntValue(number); + if (sub.length() == 0) return number; + return Caster.toNumber(pc, str.lastIndexOf(sub, nbr - 1) + 1); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/FindLastNoCase.java b/core/src/main/java/lucee/runtime/functions/string/FindLastNoCase.java index 17e12a1689..5f20cc6662 100644 --- a/core/src/main/java/lucee/runtime/functions/string/FindLastNoCase.java +++ b/core/src/main/java/lucee/runtime/functions/string/FindLastNoCase.java @@ -10,11 +10,11 @@ public final class FindLastNoCase extends BIF { private static final long serialVersionUID = -5722812211523628009L; - public static double call(PageContext pc, String sub, String str) { + public static Number call(PageContext pc, String sub, String str) { return FindLast.call(pc, sub.toLowerCase(), str.toLowerCase()); } - public static double call(PageContext pc, String sub, String str, double number) { + public static Number call(PageContext pc, String sub, String str, Number number) { return FindLast.call(pc, sub.toLowerCase(), str.toLowerCase(), number); } diff --git a/core/src/main/java/lucee/runtime/functions/string/FindNoCase.java b/core/src/main/java/lucee/runtime/functions/string/FindNoCase.java index 62f7615066..0d8155d066 100644 --- a/core/src/main/java/lucee/runtime/functions/string/FindNoCase.java +++ b/core/src/main/java/lucee/runtime/functions/string/FindNoCase.java @@ -32,11 +32,11 @@ public final class FindNoCase extends BIF { private static final long serialVersionUID = 3372064423000880501L; - public static double call(PageContext pc, String sub, String str) { + public static Number call(PageContext pc, String sub, String str) { return StringUtil.indexOfIgnoreCase(str, sub) + 1; } - public static double call(PageContext pc, String sub, String str, double number) { + public static Number call(PageContext pc, String sub, String str, Number number) { return Find.call(pc, sub.toLowerCase(), str.toLowerCase(), number); } diff --git a/core/src/main/java/lucee/runtime/functions/string/FindOneOf.java b/core/src/main/java/lucee/runtime/functions/string/FindOneOf.java index caeed4ed74..2e5dc7cbf2 100644 --- a/core/src/main/java/lucee/runtime/functions/string/FindOneOf.java +++ b/core/src/main/java/lucee/runtime/functions/string/FindOneOf.java @@ -31,28 +31,28 @@ public final class FindOneOf extends BIF { private static final long serialVersionUID = -7521748254181624968L; - public static double call(PageContext pc, String set, String str) { + public static Number call(PageContext pc, String set, String str) { return call(pc, set, str, 1); } - public static double call(PageContext pc, String strSet, String strData, double number) { + public static Number call(PageContext pc, String strSet, String strData, Number number) { // strData char[] data = strData.toCharArray(); // set char[] set = strSet.toCharArray(); // start - int start = (int) number - 1; + int start = Caster.toIntValue(number) - 1; if (start < 0) start = 0; - if (start >= data.length || set.length == 0) return 0; + if (start >= data.length || set.length == 0) return Caster.toNumber(pc, 0); // else { for (int i = start; i < data.length; i++) { for (int y = 0; y < set.length; y++) { - if (data[i] == set[y]) return i + 1; + if (data[i] == set[y]) return Caster.toNumber(pc, i + 1); } } // } - return 0; + return Caster.toNumber(pc, 0); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/GetToken.java b/core/src/main/java/lucee/runtime/functions/string/GetToken.java index 931cbdce34..e0a94c6a27 100644 --- a/core/src/main/java/lucee/runtime/functions/string/GetToken.java +++ b/core/src/main/java/lucee/runtime/functions/string/GetToken.java @@ -34,19 +34,19 @@ public final class GetToken extends BIF { private static final long serialVersionUID = 4114410822911429954L; - public static String call(PageContext pc, String str, double index) throws ExpressionException { + public static String call(PageContext pc, String str, Number index) throws ExpressionException { return call(pc, str, index, null); } - public static String call(PageContext pc, String str, double index, String delimiters) throws ExpressionException { + public static String call(PageContext pc, String str, Number index, String delimiters) throws ExpressionException { if (delimiters == null) delimiters = "\r\n\t "; - - if (index < 1) throw new FunctionException(pc, "getToken", 2, "index", "index must be a positive number now (" + ((int) index) + ")"); + int idx = Caster.toIntValue(index); + if (idx < 1) throw new FunctionException(pc, "getToken", 2, "index", "index must be a positive number now (" + idx + ")"); StringTokenizer tokens = new StringTokenizer(str, delimiters); int count = 0; while (tokens.hasMoreTokens()) { - if (++count == index) return tokens.nextToken(); + if (++count == idx) return tokens.nextToken(); tokens.nextToken(); } return ""; diff --git a/core/src/main/java/lucee/runtime/functions/string/Hash.java b/core/src/main/java/lucee/runtime/functions/string/Hash.java index ac078bf176..fa257cbec9 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Hash.java +++ b/core/src/main/java/lucee/runtime/functions/string/Hash.java @@ -64,8 +64,8 @@ public static String call(PageContext pc, Object input, String algorithm, String return invoke(pc.getConfig(), input, algorithm, encoding, 1); } - public static String call(PageContext pc, Object input, String algorithm, String encoding, double numIterations) throws PageException { - return invoke(pc.getConfig(), input, algorithm, encoding, (int) numIterations); + public static String call(PageContext pc, Object input, String algorithm, String encoding, Number numIterations) throws PageException { + return invoke(pc.getConfig(), input, algorithm, encoding, Caster.toIntValue(numIterations)); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/Hash40.java b/core/src/main/java/lucee/runtime/functions/string/Hash40.java index 6a8c387992..a6461ed40d 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Hash40.java +++ b/core/src/main/java/lucee/runtime/functions/string/Hash40.java @@ -62,8 +62,8 @@ public static String call(PageContext pc, Object input, String algorithm, String return invoke(pc.getConfig(), input, algorithm, encoding, 1); } - public static String call(PageContext pc, Object input, String algorithm, String encoding, double numIterations) throws PageException { - return invoke(pc.getConfig(), input, algorithm, encoding, (int) numIterations); + public static String call(PageContext pc, Object input, String algorithm, String encoding, Number numIterations) throws PageException { + return invoke(pc.getConfig(), input, algorithm, encoding, Caster.toIntValue(numIterations)); } public static String invoke(Config config, Object input, String algorithm, String encoding, int numIterations) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/string/Insert.java b/core/src/main/java/lucee/runtime/functions/string/Insert.java index 824705f1df..4249306c9f 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Insert.java +++ b/core/src/main/java/lucee/runtime/functions/string/Insert.java @@ -32,8 +32,8 @@ public final class Insert extends BIF { private static final long serialVersionUID = 5926183314989306282L; - public static String call(PageContext pc, String sub, String str, double pos) throws ExpressionException { - int p = (int) pos; + public static String call(PageContext pc, String sub, String str, Number pos) throws ExpressionException { + int p = Caster.toIntValue(pos); if (p < 0 || p > str.length()) throw new ExpressionException("third parameter of the function insert, must be between 0 and " + str.length() + " now [" + (p) + "]"); StringBuilder sb = new StringBuilder(str.length() + sub.length()); diff --git a/core/src/main/java/lucee/runtime/functions/string/LJustify.java b/core/src/main/java/lucee/runtime/functions/string/LJustify.java index 79c49ba062..1e0c586c47 100644 --- a/core/src/main/java/lucee/runtime/functions/string/LJustify.java +++ b/core/src/main/java/lucee/runtime/functions/string/LJustify.java @@ -32,8 +32,8 @@ public final class LJustify extends BIF { private static final long serialVersionUID = 4431425567063867833L; - public static String call(PageContext pc, String str, double length) throws ExpressionException { - int len = (int) length; + public static String call(PageContext pc, String str, Number length) throws ExpressionException { + int len = Caster.toIntValue(length); if (len < 1) throw new ExpressionException("Parameter 2 of function lJustify which is now [" + len + "] must be a positive integer"); else if ((len -= str.length()) <= 0) return str; else { diff --git a/core/src/main/java/lucee/runtime/functions/string/Left.java b/core/src/main/java/lucee/runtime/functions/string/Left.java index 6271497035..2e2f700f50 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Left.java +++ b/core/src/main/java/lucee/runtime/functions/string/Left.java @@ -32,8 +32,8 @@ public final class Left extends BIF { private static final long serialVersionUID = 571667661130843970L; - public static String call(PageContext pc, String str, double number) throws ExpressionException { - int len = (int) number; + public static String call(PageContext pc, String str, Number number) throws ExpressionException { + int len = Caster.toIntValue(number); if (len == 0) throw new ExpressionException("parameter 2 of the function left can not be 0 for the string [" + str + "]"); if (Math.abs(len) >= str.length()) return str; if (len < 0) len = str.length() + len; diff --git a/core/src/main/java/lucee/runtime/functions/string/Len.java b/core/src/main/java/lucee/runtime/functions/string/Len.java index 804064030a..8bb9cf56da 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Len.java +++ b/core/src/main/java/lucee/runtime/functions/string/Len.java @@ -32,14 +32,15 @@ import lucee.runtime.type.Query; public final class Len implements Function { - public static double call(PageContext pc, String string) { - return string.length(); + + public static Number call(PageContext pc, String string) { + return Caster.toNumber(pc, string.length()); } - public static double call(PageContext pc, Object obj) throws FunctionException { + public static Number call(PageContext pc, Object obj) throws FunctionException { double len = invoke(obj, -1); if (len == -1) throw new FunctionException(pc, "len", 1, "object", "this type [" + Caster.toTypeName(obj) + "] is not supported for returning the len"); - return len; + return Caster.toNumber(pc, len); } public static double invoke(Object obj, double defaultValue) { diff --git a/core/src/main/java/lucee/runtime/functions/string/Mid.java b/core/src/main/java/lucee/runtime/functions/string/Mid.java index 47ad76fd06..c4fdf1299c 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Mid.java +++ b/core/src/main/java/lucee/runtime/functions/string/Mid.java @@ -29,13 +29,13 @@ import lucee.runtime.op.Caster; public final class Mid extends BIF { - public static String call(PageContext pc, String str, double start) throws ExpressionException { + public static String call(PageContext pc, String str, Number start) throws ExpressionException { return call(pc, str, start, -1); } - public static String call(PageContext pc, String str, double start, double count) throws ExpressionException { - int s = (int) (start - 1); - int c = (int) count; + public static String call(PageContext pc, String str, Number start, Number count) throws ExpressionException { + int s = Caster.toIntValue(start) - 1; + int c = Caster.toIntValue(count); if (s < 0) throw new ExpressionException("Parameter 2 of function mid which is now [" + (s + 1) + "] must be a positive integer"); if (c == -1) c = str.length(); diff --git a/core/src/main/java/lucee/runtime/functions/string/MonthAsString.java b/core/src/main/java/lucee/runtime/functions/string/MonthAsString.java index 9aa1952d44..3f129bee0e 100644 --- a/core/src/main/java/lucee/runtime/functions/string/MonthAsString.java +++ b/core/src/main/java/lucee/runtime/functions/string/MonthAsString.java @@ -27,19 +27,20 @@ import lucee.runtime.PageContext; import lucee.runtime.exp.ExpressionException; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; public final class MonthAsString implements Function { - public static String call(PageContext pc, double month) throws ExpressionException { + public static String call(PageContext pc, Number month) throws ExpressionException { return call(month, pc.getLocale(), false); } - public static String call(PageContext pc, double month, Locale locale) throws ExpressionException { + public static String call(PageContext pc, Number month, Locale locale) throws ExpressionException { return call(month, locale == null ? pc.getLocale() : locale, false); } - protected static String call(double month, Locale locale, boolean _short) throws ExpressionException { - int m = (int) month; + protected static String call(Number month, Locale locale, boolean _short) throws ExpressionException { + int m = Caster.toIntValue(month); if (m >= 1 && m <= 12) { DateFormatSymbols dfs = new DateFormatSymbols(locale); String[] months = _short ? dfs.getShortMonths() : dfs.getMonths(); diff --git a/core/src/main/java/lucee/runtime/functions/string/MonthShortAsString.java b/core/src/main/java/lucee/runtime/functions/string/MonthShortAsString.java index c47aa58e2f..d8f3a66c59 100644 --- a/core/src/main/java/lucee/runtime/functions/string/MonthShortAsString.java +++ b/core/src/main/java/lucee/runtime/functions/string/MonthShortAsString.java @@ -29,11 +29,11 @@ public final class MonthShortAsString implements Function { - public static String call(PageContext pc, double month) throws ExpressionException { + public static String call(PageContext pc, Number month) throws ExpressionException { return MonthAsString.call(month, pc.getLocale(), true); } - public static String call(PageContext pc, double month, Locale locale) throws ExpressionException { + public static String call(PageContext pc, Number month, Locale locale) throws ExpressionException { if (locale == null) locale = pc.getLocale(); return MonthAsString.call(month, locale, true); } diff --git a/core/src/main/java/lucee/runtime/functions/string/ParseNumber.java b/core/src/main/java/lucee/runtime/functions/string/ParseNumber.java index 2cb11793d0..84237a6d42 100644 --- a/core/src/main/java/lucee/runtime/functions/string/ParseNumber.java +++ b/core/src/main/java/lucee/runtime/functions/string/ParseNumber.java @@ -30,15 +30,15 @@ public class ParseNumber { private static final int DEC = 10; private static final int HEX = 16; - public static double call(PageContext pc, String strNumber) throws PageException { + public static Number call(PageContext pc, String strNumber) throws PageException { return call(pc, strNumber, null); } - public static double call(PageContext pc, String strNumber, String strRadix) throws PageException { + public static Number call(PageContext pc, String strNumber, String strRadix) throws PageException { return invoke(strNumber, strRadix); } - public static double invoke(String strNumber, String strRadix, double defaultValue) { + public static Number invoke(String strNumber, String strRadix, Number defaultValue) { try { return invoke(strNumber, strRadix); } @@ -47,7 +47,7 @@ public static double invoke(String strNumber, String strRadix, double defaultVal } } - public static double invoke(String strNumber, String strRadix) throws PageException { + public static Number invoke(String strNumber, String strRadix) throws PageException { strNumber = strNumber.trim(); int radix = DEC; if (strRadix == null) { diff --git a/core/src/main/java/lucee/runtime/functions/string/REFind.java b/core/src/main/java/lucee/runtime/functions/string/REFind.java index cb84782f80..e3649022f7 100644 --- a/core/src/main/java/lucee/runtime/functions/string/REFind.java +++ b/core/src/main/java/lucee/runtime/functions/string/REFind.java @@ -37,27 +37,27 @@ public static Object call(PageContext pc, String regExpr, String str) throws Pag return call(pc, regExpr, str, 1, false, null, false); } - public static Object call(PageContext pc, String regExpr, String str, double start) throws PageException { + public static Object call(PageContext pc, String regExpr, String str, Number start) throws PageException { return call(pc, regExpr, str, start, false, null, false); } - public static Object call(PageContext pc, String regExpr, String str, double start, boolean returnsubexpressions) throws PageException { + public static Object call(PageContext pc, String regExpr, String str, Number start, boolean returnsubexpressions) throws PageException { return call(pc, regExpr, str, start, returnsubexpressions, null, false); } - public static Object call(PageContext pc, String regExpr, String str, double start, boolean returnsubexpressions, String scope) throws PageException { + public static Object call(PageContext pc, String regExpr, String str, Number start, boolean returnsubexpressions, String scope) throws PageException { return call(pc, regExpr, str, start, returnsubexpressions, scope, false); } - public static Object call(PageContext pc, String regExpr, String str, double start, boolean returnsubexpressions, String scope, boolean multiLine) throws PageException { + public static Object call(PageContext pc, String regExpr, String str, Number start, boolean returnsubexpressions, String scope, boolean multiLine) throws PageException { boolean isMatchAll = scope == null ? false : scope.equalsIgnoreCase("all"); Regex regex = ((PageContextImpl) pc).getRegex(); if (returnsubexpressions) { - if (isMatchAll) return regex.findAll(regExpr, str, (int) start, true, multiLine); - return regex.find(regExpr, str, (int) start, true, multiLine); + if (isMatchAll) return regex.findAll(regExpr, str, Caster.toIntValue(start), true, multiLine); + return regex.find(regExpr, str, Caster.toIntValue(start), true, multiLine); } - if (isMatchAll) return regex.indexOfAll(regExpr, str, (int) start, true, multiLine); - return regex.indexOf(regExpr, str, (int) start, true, multiLine); + if (isMatchAll) return regex.indexOfAll(regExpr, str, Caster.toIntValue(start), true, multiLine); + return regex.indexOf(regExpr, str, Caster.toIntValue(start), true, multiLine); } diff --git a/core/src/main/java/lucee/runtime/functions/string/RJustify.java b/core/src/main/java/lucee/runtime/functions/string/RJustify.java index b20921926f..bf7874cf2c 100644 --- a/core/src/main/java/lucee/runtime/functions/string/RJustify.java +++ b/core/src/main/java/lucee/runtime/functions/string/RJustify.java @@ -32,8 +32,8 @@ public final class RJustify extends BIF { private static final long serialVersionUID = -4245695462372641408L; - public static String call(PageContext pc, String str, double length) throws ExpressionException { - int len = (int) length; + public static String call(PageContext pc, String str, Number length) throws ExpressionException { + int len = Caster.toIntValue(length); if (len < 1) throw new ExpressionException("Parameter 2 of function rJustify which is now [" + len + "] must be a positive integer"); else if ((len -= str.length()) <= 0) return str; else { diff --git a/core/src/main/java/lucee/runtime/functions/string/RemoveChars.java b/core/src/main/java/lucee/runtime/functions/string/RemoveChars.java index c9831cda46..0265e1f58c 100644 --- a/core/src/main/java/lucee/runtime/functions/string/RemoveChars.java +++ b/core/src/main/java/lucee/runtime/functions/string/RemoveChars.java @@ -29,9 +29,11 @@ import lucee.runtime.op.Caster; public final class RemoveChars extends BIF { - public static String call(PageContext pc, String str, double s, double l) throws ExpressionException { - int start = (int) s; - int length = (int) l; + private static final long serialVersionUID = 2682822041816864678L; + + public static String call(PageContext pc, String str, Number s, Number l) throws ExpressionException { + int start = Caster.toIntValue(s); + int length = Caster.toIntValue(l); int strLength = str.length(); // check param 2 diff --git a/core/src/main/java/lucee/runtime/functions/string/RepeatString.java b/core/src/main/java/lucee/runtime/functions/string/RepeatString.java index a449d2acff..1a4078d0a7 100644 --- a/core/src/main/java/lucee/runtime/functions/string/RepeatString.java +++ b/core/src/main/java/lucee/runtime/functions/string/RepeatString.java @@ -33,13 +33,14 @@ public final class RepeatString extends BIF { private static final long serialVersionUID = 6041471441971348584L; - public static String call(PageContext pc, String str, double count) throws ExpressionException { - if (count < 0) throw new ExpressionException("Parameter 2 of function repeatString which is now [" + Caster.toString(count) + "] must be a non-negative integer"); - return StringUtil.repeatString(str, (int) count); + public static String call(PageContext pc, String str, Number count) throws ExpressionException { + int cnt = Caster.toIntValue(count); + if (cnt < 0) throw new ExpressionException("Parameter 2 of function repeatString which is now [" + Caster.toString(cnt) + "] must be a non-negative integer"); + return StringUtil.repeatString(str, cnt); } - public static String _call(PageContext pc, String str, double count) throws ExpressionException { - int len = (int) count; + public static String _call(PageContext pc, String str, Number count) throws ExpressionException { + int len = Caster.toIntValue(count); if (len < 0) throw new ExpressionException("Parameter 2 of function repeatString which is now [" + len + "] must be a non-negative integer"); char[] chars = str.toCharArray(); StringBuilder cb = new StringBuilder(chars.length * len); @@ -48,8 +49,8 @@ public static String _call(PageContext pc, String str, double count) throws Expr return cb.toString(); } - public static StringBuilder call(StringBuilder sb, String str, double count) throws ExpressionException { - int len = (int) count; + public static StringBuilder call(StringBuilder sb, String str, Number count) throws ExpressionException { + int len = Caster.toIntValue(count); if (len < 0) throw new ExpressionException("Parameter 1 of function repeatString which is now [" + len + "] must be a non-negative integer"); for (int i = 0; i < len; i++) @@ -57,8 +58,8 @@ public static StringBuilder call(StringBuilder sb, String str, double count) thr return sb; } - public static StringBuilder call(StringBuilder sb, char c, double count) throws ExpressionException { - int len = (int) count; + public static StringBuilder call(StringBuilder sb, char c, Number count) throws ExpressionException { + int len = Caster.toIntValue(count); if (len < 0) throw new ExpressionException("Parameter 1 of function repeatString which is now [" + len + "] must be a non-negative integer"); for (int i = 0; i < len; i++) diff --git a/core/src/main/java/lucee/runtime/functions/string/Right.java b/core/src/main/java/lucee/runtime/functions/string/Right.java index 1a674877c1..ba471ddc5d 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Right.java +++ b/core/src/main/java/lucee/runtime/functions/string/Right.java @@ -32,8 +32,8 @@ public final class Right extends BIF { private static final long serialVersionUID = 2270997683293984478L; - public static String call(PageContext pc, String str, double number) throws ExpressionException { - int len = (int) number; + public static String call(PageContext pc, String str, Number number) throws ExpressionException { + int len = Caster.toIntValue(number); if (len == 0) throw new ExpressionException("parameter 2 of the function right can not be 0"); int l = str.length(); if (Math.abs(len) >= l) return str; diff --git a/core/src/main/java/lucee/runtime/functions/string/StringLen.java b/core/src/main/java/lucee/runtime/functions/string/StringLen.java index 6e8af59e5b..a2eae8024a 100644 --- a/core/src/main/java/lucee/runtime/functions/string/StringLen.java +++ b/core/src/main/java/lucee/runtime/functions/string/StringLen.java @@ -31,8 +31,8 @@ public final class StringLen extends BIF { private static final long serialVersionUID = -9040645233901974147L; - public static double call(PageContext pc, String string) { - return string.length(); + public static Number call(PageContext pc, String string) { + return Caster.toNumber(pc, string.length()); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/string/Val.java b/core/src/main/java/lucee/runtime/functions/string/Val.java index 7d3b15db85..f1764a62d7 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Val.java +++ b/core/src/main/java/lucee/runtime/functions/string/Val.java @@ -30,12 +30,12 @@ public final class Val implements Function { private static final long serialVersionUID = -4333040593277864043L; - public static double call(PageContext pc, String value) throws PageException { + public static Number call(PageContext pc, String value) throws PageException { if (value == null) return 0; value = value.trim(); int pos = getPos(value); - if (pos <= 0) return 0; - return Caster.toDoubleValue(value.substring(0, pos)); + if (pos <= 0) return Caster.toNumber(pc, 0); + return Caster.toNumber(pc, value.substring(0, pos)); } private static int getPos(String str) { diff --git a/core/src/main/java/lucee/runtime/functions/string/Wrap.java b/core/src/main/java/lucee/runtime/functions/string/Wrap.java index 4ba62f715d..40223f23df 100644 --- a/core/src/main/java/lucee/runtime/functions/string/Wrap.java +++ b/core/src/main/java/lucee/runtime/functions/string/Wrap.java @@ -32,16 +32,18 @@ public final class Wrap extends BIF { - public static String call(PageContext pc, String string, double limit) throws PageException { + private static final long serialVersionUID = -3791456443427693022L; + + public static String call(PageContext pc, String string, Number limit) throws PageException { return call(pc, string, limit, false); } - public static String call(PageContext pc, String string, double limit, boolean strip) throws PageException { + public static String call(PageContext pc, String string, Number limit, boolean strip) throws PageException { if (strip) { string = REReplace.call(pc, string, "[[:space:]]", " ", "all"); } - int _limit = (int) limit; - if (limit < 1) throw new FunctionException(pc, "Wrap", 2, "limit", "value mus be a positive number"); + int _limit = Caster.toIntValue(limit); + if (_limit < 1) throw new FunctionException(pc, "Wrap", 2, "limit", "value mus be a positive number"); return wrap(string, _limit); } diff --git a/core/src/main/java/lucee/runtime/functions/struct/StructCount.java b/core/src/main/java/lucee/runtime/functions/struct/StructCount.java index 56779bee72..5f7d0d7af8 100644 --- a/core/src/main/java/lucee/runtime/functions/struct/StructCount.java +++ b/core/src/main/java/lucee/runtime/functions/struct/StructCount.java @@ -32,8 +32,8 @@ public final class StructCount extends BIF { private static final long serialVersionUID = -2023978105880376970L; - public static double call(PageContext pc, Struct struct) { - return struct.size(); + public static Number call(PageContext pc, Struct struct) { + return Caster.toNumber(pc, struct.size()); } @Override diff --git a/core/src/main/java/lucee/runtime/functions/struct/StructEach.java b/core/src/main/java/lucee/runtime/functions/struct/StructEach.java index f843824039..ce897c5bb5 100644 --- a/core/src/main/java/lucee/runtime/functions/struct/StructEach.java +++ b/core/src/main/java/lucee/runtime/functions/struct/StructEach.java @@ -42,8 +42,8 @@ public static String call(PageContext pc, Struct sct, UDF udf, boolean parallel) return _call(pc, sct, udf, parallel, 20); } - public static String call(PageContext pc, Struct sct, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, sct, udf, parallel, (int) maxThreads); + public static String call(PageContext pc, Struct sct, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, sct, udf, parallel, Caster.toIntValue(maxThreads)); } private static String _call(PageContext pc, Struct sct, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/struct/StructEvery.java b/core/src/main/java/lucee/runtime/functions/struct/StructEvery.java index a7e53d0151..56d3d60c12 100644 --- a/core/src/main/java/lucee/runtime/functions/struct/StructEvery.java +++ b/core/src/main/java/lucee/runtime/functions/struct/StructEvery.java @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Struct sct, UDF udf, boolean parallel return _call(pc, sct, udf, parallel, 20); } - public static boolean call(PageContext pc, Struct sct, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, sct, udf, parallel, (int) maxThreads); + public static boolean call(PageContext pc, Struct sct, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, sct, udf, parallel, Caster.toIntValue(maxThreads)); } private static boolean _call(PageContext pc, Struct sct, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/struct/StructFilter.java b/core/src/main/java/lucee/runtime/functions/struct/StructFilter.java index a50a085442..bcad1bef25 100644 --- a/core/src/main/java/lucee/runtime/functions/struct/StructFilter.java +++ b/core/src/main/java/lucee/runtime/functions/struct/StructFilter.java @@ -42,8 +42,8 @@ public static Struct call(PageContext pc, Struct sct, UDF udf, boolean parallel) return _call(pc, sct, udf, parallel, 20); } - public static Struct call(PageContext pc, Struct sct, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, sct, udf, parallel, (int) maxThreads); + public static Struct call(PageContext pc, Struct sct, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, sct, udf, parallel, Caster.toIntValue(maxThreads)); } public static Struct _call(PageContext pc, Struct sct, UDF filter, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/struct/StructKeyTranslate.java b/core/src/main/java/lucee/runtime/functions/struct/StructKeyTranslate.java index 8c2a1a40c4..25b3f00e0b 100644 --- a/core/src/main/java/lucee/runtime/functions/struct/StructKeyTranslate.java +++ b/core/src/main/java/lucee/runtime/functions/struct/StructKeyTranslate.java @@ -38,16 +38,16 @@ public class StructKeyTranslate extends BIF { private static final long serialVersionUID = -7978129950865681102L; - public static double call(PageContext pc, Struct sct) throws PageException { + public static Number call(PageContext pc, Struct sct) throws PageException { return call(pc, sct, false, false); } - public static double call(PageContext pc, Struct sct, boolean deepTranslation) throws PageException { + public static Number call(PageContext pc, Struct sct, boolean deepTranslation) throws PageException { return call(pc, sct, deepTranslation, false); } - public static double call(PageContext pc, Struct sct, boolean deepTranslation, boolean leaveOriginalKey) throws PageException { - return translate(sct, deepTranslation, leaveOriginalKey); + public static Number call(PageContext pc, Struct sct, boolean deepTranslation, boolean leaveOriginalKey) throws PageException { + return Caster.toNumber(pc, translate(sct, deepTranslation, leaveOriginalKey)); } private static int translate(Collection coll, boolean deep, boolean leaveOrg) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/struct/StructMap.java b/core/src/main/java/lucee/runtime/functions/struct/StructMap.java index 6d53436d94..d61c634af3 100644 --- a/core/src/main/java/lucee/runtime/functions/struct/StructMap.java +++ b/core/src/main/java/lucee/runtime/functions/struct/StructMap.java @@ -40,8 +40,8 @@ public static Struct call(PageContext pc, Struct sct, UDF udf, boolean parallel) return _call(pc, sct, udf, parallel, 20); } - public static Struct call(PageContext pc, Struct sct, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, sct, udf, parallel, (int) maxThreads); + public static Struct call(PageContext pc, Struct sct, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, sct, udf, parallel, Caster.toIntValue(maxThreads)); } private static Struct _call(PageContext pc, Struct sct, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/struct/StructSome.java b/core/src/main/java/lucee/runtime/functions/struct/StructSome.java index 74fb360f73..d11714d536 100644 --- a/core/src/main/java/lucee/runtime/functions/struct/StructSome.java +++ b/core/src/main/java/lucee/runtime/functions/struct/StructSome.java @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Struct sct, UDF udf, boolean parallel return _call(pc, sct, udf, parallel, 20); } - public static boolean call(PageContext pc, Struct sct, UDF udf, boolean parallel, double maxThreads) throws PageException { - return _call(pc, sct, udf, parallel, (int) maxThreads); + public static boolean call(PageContext pc, Struct sct, UDF udf, boolean parallel, Number maxThreads) throws PageException { + return _call(pc, sct, udf, parallel, Caster.toIntValue(maxThreads)); } private static boolean _call(PageContext pc, Struct sct, UDF udf, boolean parallel, int maxThreads) throws PageException { diff --git a/core/src/main/java/lucee/runtime/functions/system/CallStackGet.java b/core/src/main/java/lucee/runtime/functions/system/CallStackGet.java index c0b702b6e2..b2ff4783db 100644 --- a/core/src/main/java/lucee/runtime/functions/system/CallStackGet.java +++ b/core/src/main/java/lucee/runtime/functions/system/CallStackGet.java @@ -62,15 +62,18 @@ public static Object call(PageContext pc, String type) throws PageException { return call(pc, type, 0.0, 0.0); } - public static Object call(PageContext pc, String type, double offset) throws PageException { + public static Object call(PageContext pc, String type, Number offset) throws PageException { return call(pc, type, offset, 0.0); } - public static Object call(PageContext pc, String type, double offset, double maxFrames) throws PageException { + public static Object call(PageContext pc, String type, Number noffset, Number nmaxFrames) throws PageException { Array arr = (Array) call(pc); + int offset = Caster.toIntValue(noffset); + int maxFrames = Caster.toIntValue(nmaxFrames); + if (offset > 0 || maxFrames > 0) { - int sliceFrom = (int) offset + 1; + int sliceFrom = offset + 1; int sliceTo = (maxFrames > 0) ? (int) (maxFrames + offset) : 0; arr = ArraySlice.get(arr, sliceFrom, sliceTo); } diff --git a/core/src/main/java/lucee/runtime/functions/system/GetCPUUsage.java b/core/src/main/java/lucee/runtime/functions/system/GetCPUUsage.java index bac33b8ec6..11b77a29d4 100644 --- a/core/src/main/java/lucee/runtime/functions/system/GetCPUUsage.java +++ b/core/src/main/java/lucee/runtime/functions/system/GetCPUUsage.java @@ -28,12 +28,12 @@ public class GetCPUUsage implements Function { private static final long serialVersionUID = 2264215038554428321L; - public static double call(PageContext pc) throws ApplicationException { + public static Number call(PageContext pc) throws ApplicationException { return call(pc, 1000); } - public static double call(PageContext pc, double time) throws ApplicationException { - return Caster.toDoubleValue(SystemUtil.getCpuUsage((long) time)); + public static Number call(PageContext pc, double time) throws ApplicationException { + return Caster.toNumber(pc, SystemUtil.getCpuUsage((long) time)); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/system/GetSystemFreeMemory.java b/core/src/main/java/lucee/runtime/functions/system/GetSystemFreeMemory.java index b4c63d92f4..f5bfa80e1b 100644 --- a/core/src/main/java/lucee/runtime/functions/system/GetSystemFreeMemory.java +++ b/core/src/main/java/lucee/runtime/functions/system/GetSystemFreeMemory.java @@ -28,8 +28,8 @@ public class GetSystemFreeMemory implements Function { private static final long serialVersionUID = -2808311251929634506L; - public static double call(PageContext pc) throws ApplicationException { - return Caster.toDoubleValue(SystemUtil.getFreeBytes()); + public static Number call(PageContext pc) throws ApplicationException { + return Caster.toNumber(pc, SystemUtil.getFreeBytes()); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/system/GetSystemTotalMemory.java b/core/src/main/java/lucee/runtime/functions/system/GetSystemTotalMemory.java index eb2d690f7f..dcaf6e5b7e 100644 --- a/core/src/main/java/lucee/runtime/functions/system/GetSystemTotalMemory.java +++ b/core/src/main/java/lucee/runtime/functions/system/GetSystemTotalMemory.java @@ -28,7 +28,7 @@ public class GetSystemTotalMemory implements Function { private static final long serialVersionUID = 6459096452887146460L; - public static double call(PageContext pc) throws ApplicationException { - return Caster.toDoubleValue(SystemUtil.getTotalBytes()); + public static Number call(PageContext pc) throws ApplicationException { + return Caster.toNumber(pc, SystemUtil.getTotalBytes()); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/functions/system/Sleep.java b/core/src/main/java/lucee/runtime/functions/system/Sleep.java index fa365c3ace..671ec22a53 100644 --- a/core/src/main/java/lucee/runtime/functions/system/Sleep.java +++ b/core/src/main/java/lucee/runtime/functions/system/Sleep.java @@ -25,16 +25,17 @@ public class Sleep { - public static String call(PageContext pc, double duration) throws PageException { - if (duration >= 0) { + public static String call(PageContext pc, Number nduration) throws PageException { + long dur = Caster.toLongValue(nduration); + if (dur >= 0L) { try { - Thread.sleep((long) duration); + Thread.sleep(dur); } catch (InterruptedException e) { throw Caster.toPageException(e); } } - else throw new FunctionException(pc, "sleep", 1, "duration", "attribute interval must be greater or equal to 0, now [" + (duration) + "]"); + else throw new FunctionException(pc, "sleep", 1, "duration", "attribute interval must be greater or equal to 0, now [" + (dur) + "]"); return null; } diff --git a/core/src/main/java/lucee/runtime/functions/thread/RunAsync.java b/core/src/main/java/lucee/runtime/functions/thread/RunAsync.java index a1e86b4368..6979066522 100644 --- a/core/src/main/java/lucee/runtime/functions/thread/RunAsync.java +++ b/core/src/main/java/lucee/runtime/functions/thread/RunAsync.java @@ -23,8 +23,8 @@ public Object invoke(PageContext pc, Object[] args) throws PageException { * @return * @throws PageException */ - public static Object call(PageContext pc, Object udf, double timeout) throws PageException { - return Future._then(pc, Caster.toFunction(udf), (long) timeout); + public static Object call(PageContext pc, Object udf, Number timeout) throws PageException { + return Future._then(pc, Caster.toFunction(udf), Caster.toLongValue(timeout)); } } diff --git a/core/src/main/java/lucee/runtime/functions/xml/XmlChildPos.java b/core/src/main/java/lucee/runtime/functions/xml/XmlChildPos.java index 9946485e6e..6c205ddaa4 100644 --- a/core/src/main/java/lucee/runtime/functions/xml/XmlChildPos.java +++ b/core/src/main/java/lucee/runtime/functions/xml/XmlChildPos.java @@ -23,14 +23,12 @@ import lucee.runtime.PageContext; import lucee.runtime.ext.function.Function; +import lucee.runtime.op.Caster; import lucee.runtime.text.xml.XMLNodeList; import lucee.runtime.text.xml.XMLUtil; -/** - * Implements the CFML Function xmlchildpos - */ public final class XmlChildPos implements Function { - public static double call(PageContext pc, Node node, String name, double index) { + public static Number call(PageContext pc, Node node, String name, double index) { XMLNodeList xmlNodeList = new XMLNodeList(node, false, Node.ELEMENT_NODE); int len = xmlNodeList.getLength(); // if(index<1)throw new FunctionException(pc,"XmlChildPos","second","index","attribute must be 1 or @@ -38,8 +36,8 @@ public static double call(PageContext pc, Node node, String name, double index) int count = 1; for (int i = 0; i < len; i++) { Node n = xmlNodeList.item(i); - if (XMLUtil.nameEqual(n, name, XMLUtil.isCaseSensitve(n)) && count++ == index) return i + 1; + if (XMLUtil.nameEqual(n, name, XMLUtil.isCaseSensitve(n)) && count++ == index) return Caster.toNumber(pc, i + 1); } - return -1; + return Caster.toNumber(pc, -1); } } \ No newline at end of file diff --git a/core/src/main/java/lucee/runtime/op/Caster.java b/core/src/main/java/lucee/runtime/op/Caster.java index 4bda54f7f4..4aba86f438 100755 --- a/core/src/main/java/lucee/runtime/op/Caster.java +++ b/core/src/main/java/lucee/runtime/op/Caster.java @@ -357,6 +357,24 @@ public static Number toNumber(boolean b) { } + public static Number toNumber(PageContext pc, long l) { + if (ThreadLocalPageContext.preciseMath(pc)) return BigDecimal.valueOf(l); + return Double.valueOf(l); + + } + + public static Number toNumber(long l) { + if (ThreadLocalPageContext.preciseMath(null)) return BigDecimal.valueOf(l); + return Double.valueOf(l); + + } + + public static Number toNumber(PageContext pc, double d) { + if (ThreadLocalPageContext.preciseMath(pc)) return BigDecimal.valueOf(d); + return Double.valueOf(d); + + } + public static Number toNumber(double d) { if (ThreadLocalPageContext.preciseMath(null)) return BigDecimal.valueOf(d); return Double.valueOf(d);