From bf90a8d1c52253dcc35137b12d59e1ef503067fe Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 15 Mar 2023 09:06:59 +0000 Subject: [PATCH] reduce potencial useless string casts from list items --- .../Shared/Api/Implementation/LSL_Api.cs | 26 +++++------ .../Shared/Api/Implementation/LS_Api.cs | 2 +- .../Shared/Api/Implementation/OSSL_Api.cs | 12 +++--- .../Region/ScriptEngine/Shared/LSL_Types.cs | 43 +++++++++++++++++++ 4 files changed, 63 insertions(+), 20 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 7f32a682c7..2e27573eb2 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -7179,7 +7179,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api case ScriptBaseClass.PSYS_SRC_TEXTURE: try { - prules.Texture = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, rules.GetLSLStringItem(i + 1)); + prules.Texture = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, rules.GetStrictStringItem(i + 1)); } catch(InvalidCastException) { @@ -9716,14 +9716,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api LSL_Vector primTextColor; LSL_Float primTextAlpha; - object o = rules.Data[idx]; - if (o is LSL_Types.LSLString || o is LSL_Types.key) - primText = rules.GetLSLStringItem(idx++); - else + try { - //throw new InvalidCastException(string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); - return new LSL_List(); + primText = rules.GetStrictStringItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); + return new LSL_List(); } try { @@ -9753,7 +9753,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return new LSL_List(); try { - string primName = rules.GetLSLStringItem(idx++); + string primName = rules.GetStrictStringItem(idx++); part.Name = primName; } catch(InvalidCastException) @@ -9767,7 +9767,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return new LSL_List(); try { - string primDesc = rules.GetLSLStringItem(idx++); + string primDesc = rules.GetStrictStringItem(idx++); part.Description = primDesc; } catch(InvalidCastException) @@ -11666,11 +11666,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api break; case ScriptBaseClass.PRIM_MEDIA_CURRENT_URL: - me.CurrentURL = rules.GetLSLStringItem(i++); + me.CurrentURL = rules.GetStringItem(i++); break; case ScriptBaseClass.PRIM_MEDIA_HOME_URL: - me.HomeURL = rules.GetLSLStringItem(i++); + me.HomeURL = rules.GetStringItem(i++); break; case ScriptBaseClass.PRIM_MEDIA_AUTO_LOOP: @@ -11706,7 +11706,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api break; case ScriptBaseClass.PRIM_MEDIA_WHITELIST: - string[] rawWhiteListUrls = rules.GetLSLStringItem(i++).ToString().Split(new char[] { ',' }); + string[] rawWhiteListUrls = rules.GetStringItem(i++).Split(new char[] { ',' }); List whiteListUrls = new(); Array.ForEach( rawWhiteListUrls, delegate(string rawUrl) { whiteListUrls.Add(rawUrl.Trim()); }); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs index a3f198e239..709126892d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs @@ -559,7 +559,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api idx++; try { - wl.normalMapTexture = new UUID(rules.GetLSLStringItem(idx).m_string); + wl.normalMapTexture = new UUID(rules.GetStrictStringItem(idx)); } catch (ArgumentException) { diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index c44badd28f..a6e7af6d5b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -1355,10 +1355,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { return ""; } - drawList += "FillPolygon " + x.GetLSLStringItem(0) + "," + y.GetLSLStringItem(0); + drawList += "FillPolygon " + x.GetStringItem(0) + "," + y.GetStringItem(0); for (int i = 1; i < x.Length; i++) { - drawList += "," + x.GetLSLStringItem(i) + "," + y.GetLSLStringItem(i); + drawList += "," + x.GetStringItem(i) + "," + y.GetStringItem(i); } drawList += "; "; return drawList; @@ -1372,10 +1372,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { return ""; } - drawList += "Polygon " + x.GetLSLStringItem(0) + "," + y.GetLSLStringItem(0); + drawList += "Polygon " + x.GetStringItem(0) + "," + y.GetStringItem(0); for (int i = 1; i < x.Length; i++) { - drawList += "," + x.GetLSLStringItem(i) + "," + y.GetLSLStringItem(i); + drawList += "," + x.GetStringItem(i) + "," + y.GetStringItem(i); } drawList += "; "; return drawList; @@ -1767,7 +1767,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api for (int idx = 0; idx < rules.Length;) { int code = rules.GetLSLIntegerItem(idx++); - string arg = rules.GetLSLStringItem(idx++); + string arg = rules.GetStringItem(idx++); switch (code) { case ScriptBaseClass.PARCEL_DETAILS_NAME: @@ -2163,7 +2163,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api StringBuilder notecardData = new(); for (int i = 0; i < contents.Length; i++) - notecardData.Append((string)(contents.GetLSLStringItem(i) + "\n")); + notecardData.Append(contents.GetStringItem(i) + "\n"); SaveNotecard(notecardName, "Script generated notecard", notecardData.ToString(), false); } diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 3049028e05..bf7c3cc76d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs @@ -918,6 +918,49 @@ namespace OpenSim.Region.ScriptEngine.Shared return new LSL_Types.LSLString(o.ToString()); } + public string GetStringItem(int itemIndex) + { + object o = Data[itemIndex]; + if (o is LSL_Types.key) + return ((LSL_Types.key)o).value; + return o.ToString(); + } + + public LSL_Types.LSLString GetStrictLSLStringItem(int itemIndex) + { + object o = Data[itemIndex]; + if (o is LSL_Types.LSLString) + return ((LSL_Types.LSLString)o); + if (o is string) + return new LSL_Types.LSLString((string)o); + if (o is LSL_Types.key) + return ((LSL_Types.key)o).value; + + throw new InvalidCastException(string.Format( + "{0} expected but {1} given", + typeof(LSL_Types.LSLString).Name, + o != null ? + o.GetType().Name : "null")); + } + + public string GetStrictStringItem(int itemIndex) + { + object o = Data[itemIndex]; + if (o is LSL_Types.LSLString) + return ((LSL_Types.LSLString)o).m_string; + if (o is string) + return (string)o; + if (o is LSL_Types.key) + return ((LSL_Types.key)o).value; + + throw new InvalidCastException(string.Format( + "{0} expected but {1} given", + typeof(LSL_Types.LSLString).Name, + o != null ? + o.GetType().Name : "null")); + } + + public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex) { object o = Data[itemIndex];