From b8a0bba99d509e58333488e5ce8b3b53868f50b9 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 27 Mar 2024 21:51:49 +0000 Subject: [PATCH] mantis 9121: fix failed lsl string casts on lsl list sort --- .../Region/ScriptEngine/Shared/LSL_Types.cs | 22 +++++++++++++++---- .../ScriptEngine/YEngine/MMRDelegateCommon.cs | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 307117638b..4284c5304a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs @@ -1398,6 +1398,10 @@ namespace OpenSim.Region.ScriptEngine.Shared LSLString r = (LSLString)right; ret = string.CompareOrdinal(lsl.m_string, r.m_string); } + else if (left is string ssl) + { + ret = string.CompareOrdinal(ssl, right as string); + } else if (left is LSLFloat fl) { LSLFloat r = (LSLFloat)right; @@ -1418,10 +1422,7 @@ namespace OpenSim.Region.ScriptEngine.Shared return 0; } - if (ascending) - return ret; - - return -ret; + return ascending ? ret : -ret; } class HomogeneousComparer : IComparer @@ -1449,6 +1450,10 @@ namespace OpenSim.Region.ScriptEngine.Shared LSLString r = (LSLString)right; ret = string.CompareOrdinal(lsl.m_string, r.m_string); } + else if (left is string ssl) + { + ret = string.CompareOrdinal(ssl, right as string); + } else if (left is LSLFloat fl) { LSLFloat r = (LSLFloat)right; @@ -1491,6 +1496,10 @@ namespace OpenSim.Region.ScriptEngine.Shared LSLString r = (LSLString)right; return string.CompareOrdinal(lsl.m_string, r.m_string) > 0; } + else if (left is string ssl) + { + return string.CompareOrdinal(ssl, right as string) > 0; + } if (left is LSLFloat lf) { LSLFloat r = (LSLFloat)right; @@ -1524,6 +1533,11 @@ namespace OpenSim.Region.ScriptEngine.Shared LSLString r = (LSLString)right; return string.CompareOrdinal(lsl.m_string, r.m_string) < 0; } + else if (left is string ssl) + { + string sr = right as string; + return string.CompareOrdinal(ssl, sr) < 0; + } if (left is LSLFloat lf) { LSLFloat r = (LSLFloat)right; diff --git a/OpenSim/Region/ScriptEngine/YEngine/MMRDelegateCommon.cs b/OpenSim/Region/ScriptEngine/YEngine/MMRDelegateCommon.cs index 041d11ab92..bdbd259513 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/MMRDelegateCommon.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/MMRDelegateCommon.cs @@ -97,7 +97,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine { Name = "CustomDelegateAssembly" }; - AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assembly, AssemblyBuilderAccess.Run); + AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assembly, AssemblyBuilderAccess.RunAndCollect); delegateModuleBuilder = assemblyBuilder.DefineDynamicModule("CustomDelegateModule"); }