Browse Source

review fixes

* don't check IsArrayIndex
* initialize char and string array lookups in static constructor
Marko Lahma 7 years ago
parent
commit
a2f0f205f4
2 changed files with 22 additions and 16 deletions
  1. 3 9
      Jint/Native/Array/ArrayInstance.cs
  2. 19 7
      Jint/Runtime/TypeConverter.cs

+ 3 - 9
Jint/Native/Array/ArrayInstance.cs

@@ -120,13 +120,12 @@ namespace Jint.Native.Array
                     var keys = keyCache.Value;
                     keys.Clear();
                     keys.AddRange(_array.Keys);
-                    foreach (var key in keys)
+                    foreach (var keyIndex in keys)
                     {
-                        uint keyIndex;
                         // is it the index of the array
-                        if (IsArrayIndex(key, out keyIndex) && keyIndex >= newLen && keyIndex < oldLen)
+                        if (keyIndex >= newLen && keyIndex < oldLen)
                         {
-                            var deleteSucceeded = Delete(TypeConverter.ToString(key), false);
+                            var deleteSucceeded = Delete(TypeConverter.ToString(keyIndex), false);
                             if (!deleteSucceeded)
                             {
                                 newLenDesc.Value = new JsValue(keyIndex + 1);
@@ -286,11 +285,6 @@ namespace Jint.Native.Array
             base.RemoveOwnProperty(p);
         }
 
-        public static bool IsArrayIndex(JsValue p, out uint index)
-        {
-            return IsArrayIndex(TypeConverter.ToString(p), out index);
-        }
-
         private static bool IsArrayIndex(string p, out uint index)
         {
             index = ParseArrayIndex(p);

+ 19 - 7
Jint/Runtime/TypeConverter.cs

@@ -29,8 +29,20 @@ namespace Jint.Runtime
 
     public class TypeConverter
     {
-        private static readonly string[] intToString = new string[1024*10];
-        private static readonly string[] charToString = new string[1024];
+        private static readonly string[] intToString = new string[1024];
+        private static readonly string[] charToString = new string[256];
+
+        static TypeConverter()
+        {
+            for (var i = 0; i < intToString.Length; ++i)
+            {
+                intToString[i] = i.ToString();
+                if (i < charToString.Length)
+                {
+                    charToString[(char) i] = ((char) i).ToString();
+                }
+            }
+        }
 
         /// <summary>
         /// http://www.ecma-international.org/ecma-262/5.1/#sec-9.1
@@ -220,7 +232,7 @@ namespace Jint.Runtime
                 return number;
             }
 
-            return (long)number;
+            return (long) number;
         }
 
         /// <summary>
@@ -258,7 +270,7 @@ namespace Jint.Runtime
         internal static string ToString(long i)
         {
             return i >= 0 && i < intToString.Length
-                ? (intToString[i] = intToString[i] ?? i.ToString())
+                ? intToString[i]
                 : i.ToString();
         }
 
@@ -266,7 +278,7 @@ namespace Jint.Runtime
         internal static string ToString(int i)
         {
             return i >= 0 && i < intToString.Length
-                ? (intToString[i] = intToString[i] ?? i.ToString())
+                ? intToString[i]
                 : i.ToString();
         }
 
@@ -274,7 +286,7 @@ namespace Jint.Runtime
         internal static string ToString(uint i)
         {
             return i >= 0 && i < intToString.Length
-                ? (intToString[i] = intToString[i] ?? i.ToString())
+                ? intToString[i]
                 : i.ToString();
         }
 
@@ -282,7 +294,7 @@ namespace Jint.Runtime
         internal static string ToString(char c)
         {
             return c >= 0 && c < charToString.Length
-                ? (charToString[c] = charToString[c] ?? c.ToString())
+                ? charToString[c]
                 : c.ToString();
         }