Browse Source

Implementing Array.prototype.join

Sebastien Ros 12 years ago
parent
commit
08cb1e89d3
2 changed files with 11 additions and 8 deletions
  1. 7 4
      Jint/Native/Array/ArrayPrototype.cs
  2. 4 4
      Jint/Runtime/TypeConverter.cs

+ 7 - 4
Jint/Native/Array/ArrayPrototype.cs

@@ -132,15 +132,18 @@ namespace Jint.Native.Array
             var o = TypeConverter.ToObject(Engine, thisObj);
             var lenVal = o.Get("length");
             var len = TypeConverter.ToUint32(lenVal);
-            if (len == 0)
-            {
-                return "";
-            }
             if (separator == Undefined.Instance)
             {
                 separator = ",";
             }
             var sep = TypeConverter.ToString(separator);
+            
+            // as per the spec, this has to be called after ToString(separator)
+            if (len == 0)
+            {
+                return "";
+            }
+
             var element0 = o.Get("0");
             string r = element0 == Undefined.Instance || element0 == Null.Instance
                                   ? ""

+ 4 - 4
Jint/Runtime/TypeConverter.cs

@@ -223,16 +223,16 @@ namespace Jint.Runtime
         /// <returns></returns>
         public static uint ToUint32(object o)
         {
-            var n = ToNumber(o);
-            if (double.IsNaN(n) || double.IsInfinity(n) || n == 0)
+            var number = ToNumber(o);
+            if (double.IsNaN(number) || double.IsInfinity(number) || number == 0)
             {
                 return 0;
             }
 
-            return Convert.ToUInt32(n);
+            var posInt = (long) number;
+            return (uint)(posInt % 4294967296);
         }
 
-
         /// <summary>
         /// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
         /// </summary>