From 249a5934f96b530bbcb671355248884db6b36659 Mon Sep 17 00:00:00 2001 From: ridglef <126202739+ridglef@users.noreply.github.com> Date: Wed, 22 Nov 2023 18:08:33 -0500 Subject: [PATCH 1/2] xor and euler --- .../java/org/meteordev/starscript/StandardLib.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/org/meteordev/starscript/StandardLib.java b/src/main/java/org/meteordev/starscript/StandardLib.java index 1e5af49..6a48b89 100644 --- a/src/main/java/org/meteordev/starscript/StandardLib.java +++ b/src/main/java/org/meteordev/starscript/StandardLib.java @@ -17,6 +17,7 @@ public class StandardLib { public static void init(Starscript ss) { // Variables ss.set("PI", Math.PI); + ss.set("EULER", Math.E); ss.set("time", () -> Value.string(timeFormat.format(new Date()))); ss.set("date", () -> Value.string(dateFormat.format(new Date()))); @@ -27,6 +28,7 @@ public static void init(Starscript ss) { ss.set("ceil", StandardLib::ceil); ss.set("abs", StandardLib::abs); ss.set("random", StandardLib::random); + ss.set("xor", StandardLib::xor); // Strings ss.set("string", StandardLib::string); @@ -106,6 +108,18 @@ else if (argCount == 2) { return Value.null_(); } + public static Value xor(Starscript ss, int argCount) { + if (argCount != 2) ss.error("xor() requires 2 argument, got %d.", argCount); + + double a = ss.popNumber("Second argument to xor() needs to be a number."); + double b = ss.popNumber("First argument to xor() needs to be a number."); + + long longBits1 = Double.doubleToLongBits(a); + long longBits2 = Double.doubleToLongBits(b); + + return Value.number(Double.longBitsToDouble(longBits1 ^ longBits2)); + } + // Strings private static Value string(Starscript ss, int argCount) { From b459a50e319e99f71fcd18b77ab11212ecad845c Mon Sep 17 00:00:00 2001 From: ridglef <126202739+ridglef@users.noreply.github.com> Date: Wed, 22 Nov 2023 18:40:16 -0500 Subject: [PATCH 2/2] fix xor --- .../java/org/meteordev/starscript/StandardLib.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/meteordev/starscript/StandardLib.java b/src/main/java/org/meteordev/starscript/StandardLib.java index 6a48b89..d461e37 100644 --- a/src/main/java/org/meteordev/starscript/StandardLib.java +++ b/src/main/java/org/meteordev/starscript/StandardLib.java @@ -114,10 +114,14 @@ public static Value xor(Starscript ss, int argCount) { double a = ss.popNumber("Second argument to xor() needs to be a number."); double b = ss.popNumber("First argument to xor() needs to be a number."); - long longBits1 = Double.doubleToLongBits(a); - long longBits2 = Double.doubleToLongBits(b); + long long1 = (long) a; + long long2 = (long) b; - return Value.number(Double.longBitsToDouble(longBits1 ^ longBits2)); + if (a != long1 || b != long2) { + ss.error("Xor expects only non-decimal values"); + } + + return Value.number(long1 ^ long2); } // Strings