Reviewed by John Sullivan.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 29 Jan 2006 07:42:32 +0000 (07:42 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 29 Jan 2006 07:42:32 +0000 (07:42 +0000)
        - http://bugzilla.opendarwin.org/show_bug.cgi?id=6895
          include exception names in JavaScript form of DOM exception

        * khtml/ecma/kjs_binding.cpp: (KJS::setDOMException): Include the name of the
        exception in the error message.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@12445 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/date_object.cpp

index 94cb2f4edc6a8106b81a5802ed76ead44636411a..f42499ded7670b4ca552aa79f1ecc616ef3c6129 100644 (file)
@@ -1,3 +1,13 @@
+2006-01-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by John Sullivan.
+
+        - http://bugzilla.opendarwin.org/show_bug.cgi?id=6895
+          include exception names in JavaScript form of DOM exception
+
+        * khtml/ecma/kjs_binding.cpp: (KJS::setDOMException): Include the name of the
+        exception in the error message.
+
 2006-01-28  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Darin.
         (KXMLCore::Vector::last): Convenience for stack-style use.
         (KXMLCore::Vector::removeLast): ditto
 
+2006-01-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by xxx
+
+        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=6870
+          REGRESSION: JavaScript Date constructor won't accept another Date object
+
+        Test: fast/js/date-constructor.html
+
+        * kjs/date_object.cpp: (KJS::DateObjectImp::construct):
+        Added a special case for constructing one date from another (to avoid losing
+        milliseconds, which are not in the text form, to match Firefox), and changed
+        the base code to convert to primitive before checking for string to match
+        the standard. Also corrected a couple silly things in the "construct from
+        current time" code path (removed a floor that does no good, and changed
+        the constant used to convert microseconds to milliseconds to be a 1000
+        rather than "msPerSecond").
+
 2006-01-28  Darin Adler  <darin@apple.com>
 
         * kjs/create_hash_table: Added missing license.
index b403787f2748899870ac8765bc34ea2752d9c8e7..2fce36314957a7cb4c192c9b89ed30b4a13ac876 100644 (file)
@@ -716,7 +716,7 @@ JSObject *DateObjectImp::construct(ExecState *exec, const List &args)
 #if !WIN32
     struct timeval tv;
     gettimeofday(&tv, 0);
-    double utc = floor(tv.tv_sec * msPerSecond + tv.tv_usec / msPerSecond);
+    double utc = floor(tv.tv_sec * msPerSecond + tv.tv_usec / 1000);
 #else
 #  if __BORLANDC__
     struct timeb timebuffer;
@@ -725,14 +725,19 @@ JSObject *DateObjectImp::construct(ExecState *exec, const List &args)
     struct _timeb timebuffer;
     _ftime(&timebuffer);
 #  endif
-    double utc = floor(timebuffer.time * msPerSecond + timebuffer.millitm);
+    double utc = timebuffer.time * msPerSecond + timebuffer.millitm;
 #endif
     value = utc;
   } else if (numArgs == 1) {
-      if (args[0]->isString())
-          value = parseDate(args[0]->toString(exec));
+    if (args[0]->isObject(&DateInstance::info))
+      value = static_cast<JSObject*>(args[0])->internalValue()->toNumber(exec);
+    else {
+      JSValue* primitive = args[0]->toPrimitive(exec);
+      if (primitive->isString())
+        value = parseDate(primitive->getString());
       else
-          value = args[0]->toPrimitive(exec)->toNumber(exec);
+        value = primitive->toNumber(exec);
+    }
   } else {
     if (isNaN(args[0]->toNumber(exec))
         || isNaN(args[1]->toNumber(exec))