Reviewed by Geoff and Darin.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Feb 2006 07:54:55 +0000 (07:54 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Feb 2006 07:54:55 +0000 (07:54 +0000)
        Patch from Maks Orlovich, based on work by David Faure, hand-applied and
        significantly reworked by me.

        - Patch: give internal function names (KJS merge)
        http://bugzilla.opendarwin.org/show_bug.cgi?id=6279

        * tests/mozilla/expected.html: Updated for newly fixed test.

        * kjs/array_object.cpp:
        (ArrayProtoFunc::ArrayProtoFunc):
        * kjs/array_object.h:
        * kjs/bool_object.cpp:
        (BooleanPrototype::BooleanPrototype):
        (BooleanProtoFunc::BooleanProtoFunc):
        * kjs/bool_object.h:
        * kjs/date_object.cpp:
        (KJS::DateProtoFunc::DateProtoFunc):
        (KJS::DateObjectImp::DateObjectImp):
        (KJS::DateObjectFuncImp::DateObjectFuncImp):
        * kjs/error_object.cpp:
        (ErrorPrototype::ErrorPrototype):
        (ErrorProtoFunc::ErrorProtoFunc):
        * kjs/error_object.h:
        * kjs/function.cpp:
        (KJS::FunctionImp::FunctionImp):
        (KJS::GlobalFuncImp::GlobalFuncImp):
        * kjs/function.h:
        * kjs/function_object.cpp:
        (FunctionPrototype::FunctionPrototype):
        (FunctionProtoFunc::FunctionProtoFunc):
        (FunctionProtoFunc::callAsFunction):
        * kjs/function_object.h:
        * kjs/internal.cpp:
        (KJS::InterpreterImp::initGlobalObject):
        (KJS::InternalFunctionImp::InternalFunctionImp):
        * kjs/internal.h:
        (KJS::InternalFunctionImp::functionName):
        * kjs/lookup.h:
        (KJS::staticFunctionGetter):
        (KJS::HashEntryFunction::HashEntryFunction):
        (KJS::HashEntryFunction::implementsCall):
        (KJS::HashEntryFunction::toBoolean):
        (KJS::HashEntryFunction::implementsHasInstance):
        (KJS::HashEntryFunction::hasInstance):
        * kjs/math_object.cpp:
        (MathFuncImp::MathFuncImp):
        * kjs/math_object.h:
        * kjs/number_object.cpp:
        (NumberPrototype::NumberPrototype):
        (NumberProtoFunc::NumberProtoFunc):
        * kjs/number_object.h:
        * kjs/object.cpp:
        (KJS::JSObject::putDirectFunction):
        (KJS::Error::create):
        * kjs/object.h:
        * kjs/object_object.cpp:
        (ObjectPrototype::ObjectPrototype):
        (ObjectProtoFunc::ObjectProtoFunc):
        * kjs/object_object.h:
        * kjs/regexp_object.cpp:
        (RegExpPrototype::RegExpPrototype):
        (RegExpProtoFunc::RegExpProtoFunc):
        * kjs/regexp_object.h:
        * kjs/string_object.cpp:
        (StringProtoFunc::StringProtoFunc):
        (StringObjectImp::StringObjectImp):
        (StringObjectFuncImp::StringObjectFuncImp):
        * kjs/string_object.h:

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

28 files changed:
JavaScriptCore/ChangeLog
JavaScriptCore/kjs/array_object.cpp
JavaScriptCore/kjs/array_object.h
JavaScriptCore/kjs/bool_object.cpp
JavaScriptCore/kjs/bool_object.h
JavaScriptCore/kjs/date_object.cpp
JavaScriptCore/kjs/error_object.cpp
JavaScriptCore/kjs/error_object.h
JavaScriptCore/kjs/function.cpp
JavaScriptCore/kjs/function.h
JavaScriptCore/kjs/function_object.cpp
JavaScriptCore/kjs/function_object.h
JavaScriptCore/kjs/internal.cpp
JavaScriptCore/kjs/internal.h
JavaScriptCore/kjs/lookup.h
JavaScriptCore/kjs/math_object.cpp
JavaScriptCore/kjs/math_object.h
JavaScriptCore/kjs/number_object.cpp
JavaScriptCore/kjs/number_object.h
JavaScriptCore/kjs/object.cpp
JavaScriptCore/kjs/object.h
JavaScriptCore/kjs/object_object.cpp
JavaScriptCore/kjs/object_object.h
JavaScriptCore/kjs/regexp_object.cpp
JavaScriptCore/kjs/regexp_object.h
JavaScriptCore/kjs/string_object.cpp
JavaScriptCore/kjs/string_object.h
JavaScriptCore/tests/mozilla/expected.html

index e2d8c2c4dae622b79df7109cb9872686ef214538..8c9ed2bf4477b8ae903cc63e02d63113f3ec9648 100644 (file)
@@ -1,3 +1,76 @@
+2006-02-20  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff and Darin.
+        
+        Patch from Maks Orlovich, based on work by David Faure, hand-applied and 
+        significantly reworked by me.
+        
+        - Patch: give internal function names (KJS merge)
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=6279
+
+        * tests/mozilla/expected.html: Updated for newly fixed test.
+
+        * kjs/array_object.cpp:
+        (ArrayProtoFunc::ArrayProtoFunc):
+        * kjs/array_object.h:
+        * kjs/bool_object.cpp:
+        (BooleanPrototype::BooleanPrototype):
+        (BooleanProtoFunc::BooleanProtoFunc):
+        * kjs/bool_object.h:
+        * kjs/date_object.cpp:
+        (KJS::DateProtoFunc::DateProtoFunc):
+        (KJS::DateObjectImp::DateObjectImp):
+        (KJS::DateObjectFuncImp::DateObjectFuncImp):
+        * kjs/error_object.cpp:
+        (ErrorPrototype::ErrorPrototype):
+        (ErrorProtoFunc::ErrorProtoFunc):
+        * kjs/error_object.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::FunctionImp):
+        (KJS::GlobalFuncImp::GlobalFuncImp):
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        (FunctionPrototype::FunctionPrototype):
+        (FunctionProtoFunc::FunctionProtoFunc):
+        (FunctionProtoFunc::callAsFunction):
+        * kjs/function_object.h:
+        * kjs/internal.cpp:
+        (KJS::InterpreterImp::initGlobalObject):
+        (KJS::InternalFunctionImp::InternalFunctionImp):
+        * kjs/internal.h:
+        (KJS::InternalFunctionImp::functionName):
+        * kjs/lookup.h:
+        (KJS::staticFunctionGetter):
+        (KJS::HashEntryFunction::HashEntryFunction):
+        (KJS::HashEntryFunction::implementsCall):
+        (KJS::HashEntryFunction::toBoolean):
+        (KJS::HashEntryFunction::implementsHasInstance):
+        (KJS::HashEntryFunction::hasInstance):
+        * kjs/math_object.cpp:
+        (MathFuncImp::MathFuncImp):
+        * kjs/math_object.h:
+        * kjs/number_object.cpp:
+        (NumberPrototype::NumberPrototype):
+        (NumberProtoFunc::NumberProtoFunc):
+        * kjs/number_object.h:
+        * kjs/object.cpp:
+        (KJS::JSObject::putDirectFunction):
+        (KJS::Error::create):
+        * kjs/object.h:
+        * kjs/object_object.cpp:
+        (ObjectPrototype::ObjectPrototype):
+        (ObjectProtoFunc::ObjectProtoFunc):
+        * kjs/object_object.h:
+        * kjs/regexp_object.cpp:
+        (RegExpPrototype::RegExpPrototype):
+        (RegExpProtoFunc::RegExpProtoFunc):
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        (StringProtoFunc::StringProtoFunc):
+        (StringObjectImp::StringObjectImp):
+        (StringObjectFuncImp::StringObjectFuncImp):
+        * kjs/string_object.h:
+        
 2006-02-20  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Darin, with help from Eric, Maciej.
index fb5aaad72b5e584a47319e824d5977fd3db965bb..9d5db5cc2287c7a92c5ad0251499bced0dce1b1e 100644 (file)
@@ -433,10 +433,10 @@ bool ArrayPrototype::getOwnPropertySlot(ExecState *exec, const Identifier& prope
 
 // ------------------------------ ArrayProtoFunc ----------------------------
 
-ArrayProtoFunc::ArrayProtoFunc(ExecState *exec, int i, int len)
-  : InternalFunctionImp(
-    static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype())
-    ), id(i)
+ArrayProtoFunc::ArrayProtoFunc(ExecState *exec, int i, int len, const Identifier& name)
+  : InternalFunctionImp(static_cast<FunctionPrototype*>
+                        (exec->lexicalInterpreter()->builtinFunctionPrototype()), name)
+  , id(i)
 {
   put(exec,lengthPropertyName,jsNumber(len),DontDelete|ReadOnly|DontEnum);
 }
index 58deedc1ebf8dc471cf7d9245d587a215c68d8e3..34430b0fab2ba88397d5e4fd6d883da405100efe 100644 (file)
@@ -22,6 +22,7 @@
 #ifndef _ARRAY_OBJECT_H_
 #define _ARRAY_OBJECT_H_
 
+#include "array_instance.h"
 #include "internal.h"
 #include "function_object.h"
 
@@ -38,7 +39,7 @@ namespace KJS {
 
   class ArrayProtoFunc : public InternalFunctionImp {
   public:
-    ArrayProtoFunc(ExecState *exec, int i, int len);
+    ArrayProtoFunc(ExecState *exec, int i, int len, const Identifier& name);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
index 813f5293987a57417b644e7cf25c004a88a3080e..94d4eb3aeba1e864311786e1419deebd621bf873 100644 (file)
@@ -46,24 +46,22 @@ BooleanInstance::BooleanInstance(JSObject *proto)
 
 // ECMA 15.6.4
 
-BooleanPrototype::BooleanPrototype(ExecState *exec,
-                                         ObjectPrototype *objectProto,
-                                         FunctionPrototype *funcProto)
+BooleanPrototype::BooleanPrototype(ExecState* exec, ObjectPrototype* objectProto, FunctionPrototype* funcProto)
   : BooleanInstance(objectProto)
 {
   // The constructor will be added later by InterpreterImp::InterpreterImp()
 
-  putDirect(toStringPropertyName, new BooleanProtoFunc(exec,funcProto,BooleanProtoFunc::ToString,0), DontEnum);
-  putDirect(valueOfPropertyName,  new BooleanProtoFunc(exec,funcProto,BooleanProtoFunc::ValueOf,0),  DontEnum);
+  putDirectFunction(new BooleanProtoFunc(exec, funcProto, BooleanProtoFunc::ToString, 0, toStringPropertyName), DontEnum);
+  putDirectFunction(new BooleanProtoFunc(exec, funcProto, BooleanProtoFunc::ValueOf, 0, valueOfPropertyName),  DontEnum);
   setInternalValue(jsBoolean(false));
 }
 
 
 // ------------------------------ BooleanProtoFunc --------------------------
 
-BooleanProtoFunc::BooleanProtoFunc(ExecState *exec,
-                                         FunctionPrototype *funcProto, int i, int len)
-  : InternalFunctionImp(funcProto), id(i)
+BooleanProtoFunc::BooleanProtoFunc(ExecState*, FunctionPrototype* funcProto, int i, int len, const Identifier& name)
+  : InternalFunctionImp(funcProto, name)
+  , id(i)
 {
   putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
index 065ce4e4b9cdd0aefd4029fa1c952fc242a0e81d..4a0c2800bdafc80641c87d03a58999ec0eb1b778 100644 (file)
@@ -56,8 +56,7 @@ namespace KJS {
    */
   class BooleanProtoFunc : public InternalFunctionImp {
   public:
-    BooleanProtoFunc(ExecState *exec,
-                        FunctionPrototype *funcProto, int i, int len);
+    BooleanProtoFunc(ExecState*, FunctionPrototype*, int i, int len, const Identifier&);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
index a183d1e319d6938fe86b77235d326cd82bc66429..51c1f5902ba0d1a8f808a6874580d568f58010a3 100644 (file)
@@ -83,7 +83,7 @@ namespace KJS {
  */
 class DateProtoFunc : public InternalFunctionImp {
 public:
-    DateProtoFunc(ExecState *, int i, int len);
+    DateProtoFunc(ExecState *, int i, int len, const Identifier& date);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *, JSObject *thisObj, const List &args);
@@ -110,7 +110,7 @@ private:
  */
 class DateObjectFuncImp : public InternalFunctionImp {
 public:
-    DateObjectFuncImp(ExecState *, FunctionPrototype *, int i, int len);
+    DateObjectFuncImp(ExecState *, FunctionPrototype *, int i, int len, const Identifier& );
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *, JSObject *thisObj, const List &args);
@@ -539,9 +539,10 @@ bool DatePrototype::getOwnPropertySlot(ExecState *exec, const Identifier& proper
 
 // ------------------------------ DateProtoFunc -----------------------------
 
-DateProtoFunc::DateProtoFunc(ExecState *exec, int i, int len)
-  : InternalFunctionImp(static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype())),
-    id(abs(i)), utc(i<0)
+DateProtoFunc::DateProtoFunc(ExecState *exec, int i, int len, const Identifier& name)
+  : InternalFunctionImp(static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype()), name)
+  , id(abs(i))
+  , utc(i < 0)
   // We use a negative ID to denote the "UTC" variant.
 {
     putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
@@ -719,9 +720,9 @@ DateObjectImp::DateObjectImp(ExecState *exec,
   putDirect(prototypePropertyName, dateProto, DontEnum|DontDelete|ReadOnly);
 
   static const Identifier parsePropertyName("parse");
-  putDirect(parsePropertyName, new DateObjectFuncImp(exec,funcProto,DateObjectFuncImp::Parse, 1), DontEnum);
+  putDirectFunction(new DateObjectFuncImp(exec, funcProto, DateObjectFuncImp::Parse, 1, parsePropertyName), DontEnum);
   static const Identifier UTCPropertyName("UTC");
-  putDirect(UTCPropertyName,   new DateObjectFuncImp(exec,funcProto,DateObjectFuncImp::UTC,   7),   DontEnum);
+  putDirectFunction(new DateObjectFuncImp(exec, funcProto, DateObjectFuncImp::UTC, 7, UTCPropertyName), DontEnum);
 
   // no. of arguments for constructor
   putDirect(lengthPropertyName, 7, ReadOnly|DontDelete|DontEnum);
@@ -810,8 +811,8 @@ JSValue *DateObjectImp::callAsFunction(ExecState * /*exec*/, JSObject * /*thisOb
 
 // ------------------------------ DateObjectFuncImp ----------------------------
 
-DateObjectFuncImp::DateObjectFuncImp(ExecState *exec, FunctionPrototype *funcProto, int i, int len)
-    : InternalFunctionImp(funcProto), id(i)
+DateObjectFuncImp::DateObjectFuncImp(ExecState *exec, FunctionPrototype *funcProto, int i, int len, const Identifier& name)
+    : InternalFunctionImp(funcProto, name), id(i)
 {
     putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
index 389a507ae3505788f4b355317e4e8a2a40e0f965..e08a4a5cfec06eeec6143840b21ab7b31f032689 100644 (file)
@@ -53,13 +53,13 @@ ErrorPrototype::ErrorPrototype(ExecState *exec,
 
   put(exec, namePropertyName,     jsString("Error"), DontEnum);
   put(exec, messagePropertyName,  jsString("Unknown error"), DontEnum);
-  putDirect(toStringPropertyName, new ErrorProtoFunc(exec,funcProto), DontEnum);
+  putDirectFunction(new ErrorProtoFunc(exec, funcProto, toStringPropertyName), DontEnum);
 }
 
 // ------------------------------ ErrorProtoFunc ----------------------------
 
-ErrorProtoFunc::ErrorProtoFunc(ExecState *exec, FunctionPrototype *funcProto)
-  : InternalFunctionImp(funcProto)
+ErrorProtoFunc::ErrorProtoFunc(ExecState*, FunctionPrototype* funcProto, const Identifier& name)
+  : InternalFunctionImp(funcProto, name)
 {
   putDirect(lengthPropertyName, jsNumber(0), DontDelete|ReadOnly|DontEnum);
 }
index cdb6b1842cd6d14f86cda33669783664627c5e71..273c68d825acdb44eb7fe6b28dab14f12c084d58 100644 (file)
@@ -44,7 +44,7 @@ namespace KJS {
 
   class ErrorProtoFunc : public InternalFunctionImp {
   public:
-    ErrorProtoFunc(ExecState *exec, FunctionPrototype *funcProto);
+    ErrorProtoFunc(ExecState*, FunctionPrototype*, const Identifier&);
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
   };
index 90edcb400eac7b35bcb6aa89f0c1e6ec59547d7f..d0a44d6996604f1acbab7a0cc0b4052d3124170a 100644 (file)
@@ -56,9 +56,9 @@ const ClassInfo FunctionImp::info = {"Function", &InternalFunctionImp::info, 0,
   };
 
 FunctionImp::FunctionImp(ExecState *exec, const Identifier &n)
-  : InternalFunctionImp(
-      static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype())
-      ), param(0L), ident(n)
+  : InternalFunctionImp(static_cast<FunctionPrototype*>
+                        (exec->lexicalInterpreter()->builtinFunctionPrototype()), n)
+  , param(0L)
 {
 }
 
@@ -557,8 +557,9 @@ void ActivationImp::createArgumentsObject(ExecState *exec) const
 // ------------------------------ GlobalFunc -----------------------------------
 
 
-GlobalFuncImp::GlobalFuncImp(ExecState *exec, FunctionPrototype *funcProto, int i, int len)
-  : InternalFunctionImp(funcProto), id(i)
+GlobalFuncImp::GlobalFuncImp(ExecState*, FunctionPrototype* funcProto, int i, int len, const Identifier& name)
+  : InternalFunctionImp(funcProto, name)
+  , id(i)
 {
   putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
index c57b1c8b8e4ac24ab8012eab2b6e881d13994ed0..5f844b304685e59f8758d2d8d7e6d3abebb3ccda 100644 (file)
@@ -24,7 +24,6 @@
 #ifndef KJS_FUNCTION_H
 #define KJS_FUNCTION_H
 
-#include "array_instance.h"
 #include "internal.h"
 #include <kxmlcore/OwnPtr.h>
 
@@ -56,13 +55,11 @@ namespace KJS {
     virtual CodeType codeType() const = 0;
 
     virtual Completion execute(ExecState *exec) = 0;
-    Identifier name() const { return ident; }
 
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
   protected:
     OwnPtr<Parameter> param;
-    Identifier ident;
 
   private:
     static JSValue *argumentsGetter(ExecState *, JSObject *, const Identifier &, const PropertySlot&);
@@ -98,7 +95,7 @@ namespace KJS {
     Identifier& operator[](int index);
     Identifier& operator[](const Identifier &indexIdentifier);
     bool isMapped(const Identifier &index) const;
-    void IndexToNameMap::unMap(const Identifier &index);
+    void unMap(const Identifier &index);
     
   private:
     IndexToNameMap(); // prevent construction w/o parameters
@@ -148,7 +145,7 @@ namespace KJS {
 
   class GlobalFuncImp : public InternalFunctionImp {
   public:
-    GlobalFuncImp(ExecState *exec, FunctionPrototype *funcProto, int i, int len);
+    GlobalFuncImp(ExecState*, FunctionPrototype*, int i, int len, const Identifier&);
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
     virtual CodeType codeType() const;
index efc43d11e49e5290e8070e9bcc7b047585e1280b..3a083802f3e2ee3979f3002dd58ca975fae64bfd 100644 (file)
@@ -40,12 +40,12 @@ using namespace KJS;
 
 FunctionPrototype::FunctionPrototype(ExecState *exec)
 {
-  putDirect(lengthPropertyName,   jsNumber(0),                                                       DontDelete|ReadOnly|DontEnum);
-  putDirect(toStringPropertyName, new FunctionProtoFunc(exec, this, FunctionProtoFunc::ToString, 0), DontEnum);
+  putDirect(lengthPropertyName, jsNumber(0), DontDelete|ReadOnly|DontEnum);
+  putDirectFunction(new FunctionProtoFunc(exec, this, FunctionProtoFunc::ToString, 0, toStringPropertyName), DontEnum);
   static const Identifier applyPropertyName("apply");
-  putDirect(applyPropertyName,    new FunctionProtoFunc(exec, this, FunctionProtoFunc::Apply,    2), DontEnum);
+  putDirectFunction(new FunctionProtoFunc(exec, this, FunctionProtoFunc::Apply, 2, applyPropertyName), DontEnum);
   static const Identifier callPropertyName("call");
-  putDirect(callPropertyName,     new FunctionProtoFunc(exec, this, FunctionProtoFunc::Call,     1), DontEnum);
+  putDirectFunction(new FunctionProtoFunc(exec, this, FunctionProtoFunc::Call, 1, callPropertyName), DontEnum);
 }
 
 FunctionPrototype::~FunctionPrototype()
@@ -65,9 +65,9 @@ JSValue *FunctionPrototype::callAsFunction(ExecState */*exec*/, JSObject */*this
 
 // ------------------------------ FunctionProtoFunc -------------------------
 
-FunctionProtoFunc::FunctionProtoFunc(ExecState *exec,
-                                         FunctionPrototype *funcProto, int i, int len)
-  : InternalFunctionImp(funcProto), id(i)
+FunctionProtoFunc::FunctionProtoFunc(ExecState*, FunctionPrototype* funcProto, int i, int len, const Identifier& name)
+  : InternalFunctionImp(funcProto, name)
+  , id(i)
 {
   putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
@@ -83,8 +83,7 @@ JSValue *FunctionProtoFunc::callAsFunction(ExecState *exec, JSObject *thisObj, c
   JSValue *result = NULL;
 
   switch (id) {
-  case ToString: {
-    // ### also make this work for internal functions
+  case ToString:
     if (!thisObj || !thisObj->inherits(&InternalFunctionImp::info)) {
 #ifndef NDEBUG
       fprintf(stderr,"attempted toString() call on null or non-function object\n");
@@ -92,17 +91,15 @@ JSValue *FunctionProtoFunc::callAsFunction(ExecState *exec, JSObject *thisObj, c
       return throwError(exec, TypeError);
     }
     if (thisObj->inherits(&DeclaredFunctionImp::info)) {
-       DeclaredFunctionImp *fi = static_cast<DeclaredFunctionImp*>
-                                 (thisObj);
-       return jsString("function " + fi->name().ustring() + "(" +
-         fi->parameterString() + ") " + fi->body->toString());
-    } else if (thisObj->inherits(&FunctionImp::info) &&
-        !static_cast<FunctionImp*>(thisObj)->name().isNull()) {
-      result = jsString("function " + static_cast<FunctionImp*>(thisObj)->name().ustring() + "()");
-    }
-    else {
-      result = jsString("(Internal Function)");
-    }
+        DeclaredFunctionImp *fi = static_cast<DeclaredFunctionImp*>(thisObj);
+        return jsString("function " + fi->functionName().ustring() + "(" +
+                        fi->parameterString() + ") " + fi->body->toString());
+     } else if (thisObj->inherits(&InternalFunctionImp::info) &&
+                !static_cast<InternalFunctionImp*>(thisObj)->functionName().isNull()) {
+       result = jsString("\nfunction " + static_cast<InternalFunctionImp*>(thisObj)->functionName().ustring() + "() {\n"
+                       "    [native code]\n}\n");
+    } else {
+      result = jsString("[function]");
     }
     break;
   case Apply: {
index e03f7a6b8f0be653790ad36ea24274db6e6f7c41..7c091c2ea49048dc3bdd636a8410161c10691412 100644 (file)
@@ -51,8 +51,7 @@ namespace KJS {
    */
   class FunctionProtoFunc : public InternalFunctionImp {
   public:
-    FunctionProtoFunc(ExecState *exec,
-                        FunctionPrototype *funcProto, int i, int len);
+    FunctionProtoFunc(ExecState*, FunctionPrototype*, int i, int len, const Identifier&);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
index 3dc5dc4eca610ceace3b1ec34317be8e452f5251..05dee3495053410913f44bd0d1d38679ac295af7 100644 (file)
@@ -454,7 +454,7 @@ void InterpreterImp::initGlobalObject()
   b_uriError = new NativeErrorImp(&globExec, funcProto, b_uriErrorPrototype);
 
   // ECMA 15.3.4.1
-  funcProto->put(&globExec, "constructor", b_Function, DontEnum);
+  funcProto->put(&globExec, constructorPropertyName, b_Function, DontEnum);
 
   global->put(&globExec, "Object", b_Object, DontEnum);
   global->put(&globExec, "Function", b_Function, DontEnum);
@@ -474,22 +474,22 @@ void InterpreterImp::initGlobalObject()
   global->put(&globExec, "TypeError",b_typeError, Internal);
   global->put(&globExec, "URIError",b_uriError, Internal);
 
-  // Set the "constructor" property of all builtin constructors
-  objProto->put(&globExec, "constructor", b_Object, DontEnum | DontDelete | ReadOnly);
-  funcProto->put(&globExec, "constructor", b_Function, DontEnum | DontDelete | ReadOnly);
-  arrayProto->put(&globExec, "constructor", b_Array, DontEnum | DontDelete | ReadOnly);
-  booleanProto->put(&globExec, "constructor", b_Boolean, DontEnum | DontDelete | ReadOnly);
-  stringProto->put(&globExec, "constructor", b_String, DontEnum | DontDelete | ReadOnly);
-  numberProto->put(&globExec, "constructor", b_Number, DontEnum | DontDelete | ReadOnly);
-  dateProto->put(&globExec, "constructor", b_Date, DontEnum | DontDelete | ReadOnly);
-  regexpProto->put(&globExec, "constructor", b_RegExp, DontEnum | DontDelete | ReadOnly);
-  errorProto->put(&globExec, "constructor", b_Error, DontEnum | DontDelete | ReadOnly);
-  b_evalErrorPrototype->put(&globExec, "constructor", b_evalError, DontEnum | DontDelete | ReadOnly);
-  b_rangeErrorPrototype->put(&globExec, "constructor", b_rangeError, DontEnum | DontDelete | ReadOnly);
-  b_referenceErrorPrototype->put(&globExec, "constructor", b_referenceError, DontEnum | DontDelete | ReadOnly);
-  b_syntaxErrorPrototype->put(&globExec, "constructor", b_syntaxError, DontEnum | DontDelete | ReadOnly);
-  b_typeErrorPrototype->put(&globExec, "constructor", b_typeError, DontEnum | DontDelete | ReadOnly);
-  b_uriErrorPrototype->put(&globExec, "constructor", b_uriError, DontEnum | DontDelete | ReadOnly);
+  // Set the constructorPropertyName property of all builtin constructors
+  objProto->put(&globExec, constructorPropertyName, b_Object, DontEnum | DontDelete | ReadOnly);
+  funcProto->put(&globExec, constructorPropertyName, b_Function, DontEnum | DontDelete | ReadOnly);
+  arrayProto->put(&globExec, constructorPropertyName, b_Array, DontEnum | DontDelete | ReadOnly);
+  booleanProto->put(&globExec, constructorPropertyName, b_Boolean, DontEnum | DontDelete | ReadOnly);
+  stringProto->put(&globExec, constructorPropertyName, b_String, DontEnum | DontDelete | ReadOnly);
+  numberProto->put(&globExec, constructorPropertyName, b_Number, DontEnum | DontDelete | ReadOnly);
+  dateProto->put(&globExec, constructorPropertyName, b_Date, DontEnum | DontDelete | ReadOnly);
+  regexpProto->put(&globExec, constructorPropertyName, b_RegExp, DontEnum | DontDelete | ReadOnly);
+  errorProto->put(&globExec, constructorPropertyName, b_Error, DontEnum | DontDelete | ReadOnly);
+  b_evalErrorPrototype->put(&globExec, constructorPropertyName, b_evalError, DontEnum | DontDelete | ReadOnly);
+  b_rangeErrorPrototype->put(&globExec, constructorPropertyName, b_rangeError, DontEnum | DontDelete | ReadOnly);
+  b_referenceErrorPrototype->put(&globExec, constructorPropertyName, b_referenceError, DontEnum | DontDelete | ReadOnly);
+  b_syntaxErrorPrototype->put(&globExec, constructorPropertyName, b_syntaxError, DontEnum | DontDelete | ReadOnly);
+  b_typeErrorPrototype->put(&globExec, constructorPropertyName, b_typeError, DontEnum | DontDelete | ReadOnly);
+  b_uriErrorPrototype->put(&globExec, constructorPropertyName, b_uriError, DontEnum | DontDelete | ReadOnly);
 
   // built-in values
   global->put(&globExec, "NaN",        jsNaN(), DontEnum|DontDelete);
@@ -497,19 +497,19 @@ void InterpreterImp::initGlobalObject()
   global->put(&globExec, "undefined",  jsUndefined(), DontEnum|DontDelete);
 
   // built-in functions
-  global->put(&globExec, "eval",       new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::Eval, 1), DontEnum);
-  global->put(&globExec, "parseInt",   new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::ParseInt, 2), DontEnum);
-  global->put(&globExec, "parseFloat", new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::ParseFloat, 1), DontEnum);
-  global->put(&globExec, "isNaN",      new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::IsNaN, 1), DontEnum);
-  global->put(&globExec, "isFinite",   new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::IsFinite, 1), DontEnum);
-  global->put(&globExec, "escape",     new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::Escape, 1), DontEnum);
-  global->put(&globExec, "unescape",   new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::UnEscape, 1), DontEnum);
-  global->put(&globExec, "decodeURI",  new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::DecodeURI, 1), DontEnum);
-  global->put(&globExec, "decodeURIComponent", new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::DecodeURIComponent, 1), DontEnum);
-  global->put(&globExec, "encodeURI",  new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::EncodeURI, 1), DontEnum);
-  global->put(&globExec, "encodeURIComponent", new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::EncodeURIComponent, 1), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::Eval, 1, "eval"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::ParseInt, 2, "parseInt"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::ParseFloat, 1, "parseFloat"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::IsNaN, 1, "isNaN"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::IsFinite, 1, "isFinite"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::Escape, 1, "escape"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::UnEscape, 1, "unescape"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::DecodeURI, 1, "decodeURI"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::DecodeURIComponent, 1, "decodeURIComponent"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::EncodeURI, 1, "encodeURI"), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::EncodeURIComponent, 1, "encodeURIComponent"), DontEnum);
 #ifndef NDEBUG
-  global->put(&globExec, "kjsprint",   new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::KJSPrint, 1), DontEnum);
+  global->putDirectFunction(new GlobalFuncImp(&globExec, funcProto, GlobalFuncImp::KJSPrint, 1, "kjsprint"), DontEnum);
 #endif
 
   // built-in objects
@@ -710,11 +710,17 @@ InternalFunctionImp::InternalFunctionImp()
 {
 }
 
-InternalFunctionImp::InternalFunctionImp(FunctionPrototype *funcProto)
+InternalFunctionImp::InternalFunctionImp(FunctionPrototypefuncProto)
   : JSObject(funcProto)
 {
 }
 
+InternalFunctionImp::InternalFunctionImp(FunctionPrototype* funcProto, const Identifier& name)
+  : JSObject(funcProto)
+  , m_name(name)
+{
+}
+
 bool InternalFunctionImp::implementsHasInstance() const
 {
   return true;
index 87bb0761c6a8bfe88b56ec809a6e1d3dc8e75840..78d2d0780dadce1142e50e3ca91ba527525886fe 100644 (file)
@@ -348,12 +348,16 @@ namespace KJS {
   class InternalFunctionImp : public JSObject {
   public:
     InternalFunctionImp();
-    InternalFunctionImp(FunctionPrototype *funcProto);
+    InternalFunctionImp(FunctionPrototype*);
+    InternalFunctionImp(FunctionPrototype*, const Identifier&);
     bool implementsHasInstance() const;
     bool hasInstance(ExecState *exec, JSValue *value);
 
     virtual const ClassInfo *classInfo() const { return &info; }
     static const ClassInfo info;
+    const Identifier& functionName() const { return m_name; }
+  private:
+    Identifier m_name;
   };
 
   // helper function for toInteger, toInt32, toUInt32 and toUInt16
index f861399ec43f5639834f8bae677adf19ad8bd788..c77fdd358bc454bdef3b7b707a08a6c613315170 100644 (file)
@@ -30,6 +30,8 @@
 
 namespace KJS {
 
+  class FunctionPrototype;
+
   /**
    * An entry in a hash table.
    */
@@ -130,7 +132,7 @@ namespace KJS {
         return cachedVal;
 
       const HashEntry *entry = slot.staticEntry();
-      JSValue *val = new FuncImp(exec, entry->value, entry->params);
+      JSValue *val = new FuncImp(exec, entry->value, entry->params, propertyName);
       thisObj->putDirect(propertyName, val, entry->attr);
       return val;
   }
@@ -247,7 +249,7 @@ namespace KJS {
     else
       thisObj->putValueProperty(exec, entry->value, value, attr);
   }
-  
+
 } // namespace
 
 /*
@@ -340,9 +342,11 @@ inline KJS::JSObject *cacheGlobalObject(KJS::ExecState *exec, const KJS::Identif
     }
 
 #define KJS_IMPLEMENT_PROTOFUNC(ClassFunc) \
-  class ClassFunc : public DOMFunction { \
+  class ClassFunc : public InternalFunctionImp { \
   public: \
-    ClassFunc(ExecState *exec, int i, int len) : id(i) \
+    ClassFunc(ExecState* exec, int i, int len, const Identifier& name) \
+      : InternalFunctionImp(static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype()), name) \
+      , id(i) \
     { \
        put(exec, lengthPropertyName, jsNumber(len), DontDelete|ReadOnly|DontEnum); \
     } \
index 8f92dab68ea2ee7041ba9e06a92f9c44c52cfc8e..87ec428a61b49ccd40b03908ad13eba4344d00ff 100644 (file)
@@ -153,10 +153,9 @@ JSValue *MathObjectImp::getValueProperty(ExecState *, int token) const
 
 static bool randomSeeded = false;
 
-MathFuncImp::MathFuncImp(ExecState *exec, int i, int l)
-  : InternalFunctionImp(
-    static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype())
-    ), id(i)
+MathFuncImp::MathFuncImp(ExecState* exec, int i, int l, const Identifier& name)
+  : InternalFunctionImp(static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype()), name)
+  , id(i)
 {
   putDirect(lengthPropertyName, l, DontDelete|ReadOnly|DontEnum);
 }
index a8a4addce414b5d0158ebd88df0cab1a6771f7f2..4de552957f374d93361c5bdc2e505cda8b71c31e 100644 (file)
@@ -42,7 +42,7 @@ namespace KJS {
 
   class MathFuncImp : public InternalFunctionImp {
   public:
-    MathFuncImp(ExecState *exec, int i, int l);
+    MathFuncImp(ExecState *exec, int i, int l, const Identifier&);
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
   private:
index 8157cd3dacaf90ede6c245aed707394fd8adb0f2..83744b57375d778983978f055f1e3e37ca7562e9 100644 (file)
@@ -60,20 +60,20 @@ NumberPrototype::NumberPrototype(ExecState *exec,
 
   // The constructor will be added later, after NumberObjectImp has been constructed
 
-  putDirect(toStringPropertyName,       new NumberProtoFunc(exec,funcProto,NumberProtoFunc::ToString,       1), DontEnum);
-  putDirect(toLocaleStringPropertyName, new NumberProtoFunc(exec,funcProto,NumberProtoFunc::ToLocaleString, 0), DontEnum);
-  putDirect(valueOfPropertyName,        new NumberProtoFunc(exec,funcProto,NumberProtoFunc::ValueOf,        0), DontEnum);
-  putDirect(toFixedPropertyName,        new NumberProtoFunc(exec,funcProto,NumberProtoFunc::ToFixed,        1), DontEnum);
-  putDirect(toExponentialPropertyName,  new NumberProtoFunc(exec,funcProto,NumberProtoFunc::ToExponential,  1), DontEnum);
-  putDirect(toPrecisionPropertyName,    new NumberProtoFunc(exec,funcProto,NumberProtoFunc::ToPrecision,    1), DontEnum);
+  putDirectFunction(new NumberProtoFunc(exec, funcProto, NumberProtoFunc::ToString,       1, toStringPropertyName), DontEnum);
+  putDirectFunction(new NumberProtoFunc(exec, funcProto, NumberProtoFunc::ToLocaleString, 0, toLocaleStringPropertyName), DontEnum);
+  putDirectFunction(new NumberProtoFunc(exec, funcProto, NumberProtoFunc::ValueOf,        0, valueOfPropertyName), DontEnum);
+  putDirectFunction(new NumberProtoFunc(exec, funcProto, NumberProtoFunc::ToFixed,        1, toFixedPropertyName), DontEnum);
+  putDirectFunction(new NumberProtoFunc(exec, funcProto, NumberProtoFunc::ToExponential,  1, toExponentialPropertyName), DontEnum);
+  putDirectFunction(new NumberProtoFunc(exec, funcProto, NumberProtoFunc::ToPrecision,    1, toPrecisionPropertyName), DontEnum);
 }
 
 
 // ------------------------------ NumberProtoFunc ---------------------------
 
-NumberProtoFunc::NumberProtoFunc(ExecState *exec,
-                                       FunctionPrototype *funcProto, int i, int len)
-  : InternalFunctionImp(funcProto), id(i)
+NumberProtoFunc::NumberProtoFunc(ExecState*, FunctionPrototype* funcProto, int i, int len, const Identifier& name)
+   : InternalFunctionImp(funcProto, name)
+   , id(i)
 {
   putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
index 84c6495302b86f226a1c8b9a08129f45d286721a..a19504d5961c4d5303be6f2cb29a09bec5277fd1 100644 (file)
@@ -56,8 +56,7 @@ namespace KJS {
    */
   class NumberProtoFunc : public InternalFunctionImp {
   public:
-    NumberProtoFunc(ExecState *exec, FunctionPrototype *funcProto,
-                       int i, int len);
+    NumberProtoFunc(ExecState*, FunctionPrototype*, int i, int len, const Identifier&);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
index 1d9bfa51ec9bf317bb6f3abb40cb410cec3d894a..a4ddbfcbd208edee3bc692ba936e6c9142d7815b 100644 (file)
@@ -541,6 +541,11 @@ void JSObject::putDirect(const Identifier &propertyName, int value, int attr)
     _prop.put(propertyName, jsNumber(value), attr);
 }
 
+void JSObject::putDirectFunction(InternalFunctionImp* func, int attr)
+{
+    putDirect(func->functionName(), func, attr); 
+}
+
 void JSObject::fillGetterPropertySlot(PropertySlot& slot, JSValue **location)
 {
     GetterSetterImp *gs = static_cast<GetterSetterImp *>(*location);
@@ -612,7 +617,7 @@ JSObject *Error::create(ExecState *exec, ErrorType errtype, const UString &messa
 
 /*
 #ifndef NDEBUG
-  const char *msg = err->get("message")->toString().value().ascii();
+  const char *msg = err->get(messagePropertyName)->toString().value().ascii();
   if (l >= 0)
       fprintf(stderr, "KJS: %s at line %d. %s\n", estr, l, msg);
   else
index 06768bdb4ecdfd400ac961fee8b59ca629669ee9..aa3a84b5f04a65b2588514e97ca6cf3479f851ba 100644 (file)
@@ -49,6 +49,7 @@ namespace KJS {
   class HashTable;
   class HashEntry;
   class ListImp;
+  class InternalFunctionImp;
 
   // ECMA 262-3 8.6.1
   // Property attributes
@@ -509,6 +510,9 @@ namespace KJS {
     void putDirect(const Identifier &propertyName, JSValue *value, int attr = 0);
     void putDirect(const Identifier &propertyName, int value, int attr = 0);
 
+    // convenience to add a function property under the function's own built-in name
+    void putDirectFunction(InternalFunctionImp*, int attr = 0);
+
     void fillGetterPropertySlot(PropertySlot& slot, JSValue **location);
 
     void defineGetter(ExecState *exec, const Identifier& propertyName, JSObject *getterFunc);
index a5bf2d4c38176380c113a9c294879ec316723333..7ff4bb1d4a4c44415922864315658d96bcd57c67 100644 (file)
@@ -34,30 +34,36 @@ using namespace KJS;
 
 // ------------------------------ ObjectPrototype --------------------------------
 
-ObjectPrototype::ObjectPrototype(ExecState *exec,
-                                       FunctionPrototype *funcProto)
+ObjectPrototype::ObjectPrototype(ExecState* exec, FunctionPrototype* funcProto)
   : JSObject() // [[Prototype]] is null
 {
-    putDirect(toStringPropertyName, new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::ToString,               0), DontEnum);
-    putDirect(toLocaleStringPropertyName, new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::ToLocaleString,   0), DontEnum);
-    putDirect(valueOfPropertyName, new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::ValueOf,                 0), DontEnum);
-    putDirect("hasOwnProperty", new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::HasOwnProperty,             1), DontEnum);
-    putDirect("propertyIsEnumerable", new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::PropertyIsEnumerable, 1), DontEnum);
-    putDirect("isPrototypeOf", new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::IsPrototypeOf,               1), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::ToString, 0, toStringPropertyName), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::ToLocaleString, 0, toLocaleStringPropertyName), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::ValueOf, 0, valueOfPropertyName), DontEnum);
+    static Identifier hasOwnPropertyPropertyName("hasOwnProperty");
+    static Identifier propertyIsEnumerablePropertyName("propertyIsEnumerable");
+    static Identifier isPrototypeOfPropertyName("isPrototypeOf");
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::HasOwnProperty, 1, hasOwnPropertyPropertyName), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::PropertyIsEnumerable, 1, propertyIsEnumerablePropertyName), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::IsPrototypeOf, 1, isPrototypeOfPropertyName), DontEnum);
+
     // Mozilla extensions
-    putDirect("__defineGetter__", new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::DefineGetter,             2), DontEnum);
-    putDirect("__defineSetter__", new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::DefineSetter,             2), DontEnum);
-    putDirect("__lookupGetter__", new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::LookupGetter,             1), DontEnum);
-    putDirect("__lookupSetter__", new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::LookupSetter,             1), DontEnum);
+    static const Identifier defineGetterPropertyName("__defineGetter__");
+    static const Identifier defineSetterPropertyName("__defineSetter__");
+    static const Identifier lookupGetterPropertyName("__lookupGetter__");
+    static const Identifier lookupSetterPropertyName("__lookupSetter__");
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::DefineGetter, 2, defineGetterPropertyName), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::DefineSetter, 2, defineSetterPropertyName), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::LookupGetter, 1, lookupGetterPropertyName), DontEnum);
+    putDirectFunction(new ObjectProtoFunc(exec, funcProto, ObjectProtoFunc::LookupSetter, 1, lookupSetterPropertyName), DontEnum);
 }
 
 
 // ------------------------------ ObjectProtoFunc --------------------------------
 
-ObjectProtoFunc::ObjectProtoFunc(ExecState *exec,
-                                       FunctionPrototype *funcProto,
-                                       int i, int len)
-  : InternalFunctionImp(funcProto), id(i)
+ObjectProtoFunc::ObjectProtoFunc(ExecState*, FunctionPrototype* funcProto, int i, int len, const Identifier& name)
+  : InternalFunctionImp(funcProto, name)
+  , id(i)
 {
   putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
index a093b4c5960790b76d06250e6922369b9bb8fd0d..f3b6efc8f63b6cba3e989275f14aeeda50e74220 100644 (file)
@@ -47,7 +47,7 @@ namespace KJS {
    */
   class ObjectProtoFunc : public InternalFunctionImp {
   public:
-    ObjectProtoFunc(ExecState *exec, FunctionPrototype *funcProto, int i, int len);
+    ObjectProtoFunc(ExecState* exec, FunctionPrototype* funcProto, int i, int len, const Identifier&);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *, JSObject *, const List &args);
index 284942ae41608550e1995a5d3d9d15156c1418d0..0be9a1190bb893bb288d58ff91d0f19bade7d9f2 100644 (file)
@@ -54,17 +54,16 @@ RegExpPrototype::RegExpPrototype(ExecState *exec,
   // The constructor will be added later in RegExpObject's constructor (?)
 
   static const Identifier execPropertyName("exec");
-  putDirect(execPropertyName,     new RegExpProtoFunc(exec,funcProto,RegExpProtoFunc::Exec,     0), DontEnum);
   static const Identifier testPropertyName("test");
-  putDirect(testPropertyName,     new RegExpProtoFunc(exec,funcProto,RegExpProtoFunc::Test,     0), DontEnum);
-  putDirect(toStringPropertyName, new RegExpProtoFunc(exec,funcProto,RegExpProtoFunc::ToString, 0), DontEnum);
+  putDirectFunction(new RegExpProtoFunc(exec, funcProto, RegExpProtoFunc::Exec, 0, execPropertyName), DontEnum);
+  putDirectFunction(new RegExpProtoFunc(exec, funcProto, RegExpProtoFunc::Test, 0, testPropertyName), DontEnum);
+  putDirectFunction(new RegExpProtoFunc(exec, funcProto, RegExpProtoFunc::ToString, 0, toStringPropertyName), DontEnum);
 }
 
 // ------------------------------ RegExpProtoFunc ---------------------------
 
-RegExpProtoFunc::RegExpProtoFunc(ExecState *exec,
-                                       FunctionPrototype *funcProto, int i, int len)
-  : InternalFunctionImp(funcProto), id(i)
+RegExpProtoFunc::RegExpProtoFunc(ExecState*, FunctionPrototype* funcProto, int i, int len, const Identifier& name)
+   : InternalFunctionImp(funcProto, name), id(i)
 {
   putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
index 92cc3290feda86854845545a83b61f2e142a4038..e388a6513c497cd3ce97e4e8a45be37fc057d108 100644 (file)
@@ -40,8 +40,7 @@ namespace KJS {
 
   class RegExpProtoFunc : public InternalFunctionImp {
   public:
-    RegExpProtoFunc(ExecState *exec,
-                       FunctionPrototype *funcProto, int i, int len);
+    RegExpProtoFunc(ExecState*, FunctionPrototype*, int i, int len, const Identifier&);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
index 05627b4c152272769f7829d2551e80e5c4080bc5..61e397affb0c0689d0083fdb2c55bc266a8620d1 100644 (file)
@@ -167,10 +167,9 @@ bool StringPrototype::getOwnPropertySlot(ExecState *exec, const Identifier& prop
 
 // ------------------------------ StringProtoFunc ---------------------------
 
-StringProtoFunc::StringProtoFunc(ExecState *exec, int i, int len)
-  : InternalFunctionImp(
-    static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype())
-    ), id(i)
+StringProtoFunc::StringProtoFunc(ExecState *exec, int i, int len, const Identifier& name)
+  : InternalFunctionImp(static_cast<FunctionPrototype*>(exec->lexicalInterpreter()->builtinFunctionPrototype()), name)
+  , id(i)
 {
   putDirect(lengthPropertyName, len, DontDelete|ReadOnly|DontEnum);
 }
@@ -699,7 +698,7 @@ StringObjectImp::StringObjectImp(ExecState *exec,
   // ECMA 15.5.3.1 String.prototype
   putDirect(prototypePropertyName, stringProto, DontEnum|DontDelete|ReadOnly);
 
-  putDirect(fromCharCodePropertyName, new StringObjectFuncImp(exec, funcProto), DontEnum);
+  putDirectFunction(new StringObjectFuncImp(exec, funcProto, fromCharCodePropertyName), DontEnum);
 
   // no. of arguments for constructor
   putDirect(lengthPropertyName, jsNumber(1), ReadOnly|DontDelete|DontEnum);
@@ -739,8 +738,8 @@ JSValue *StringObjectImp::callAsFunction(ExecState *exec, JSObject */*thisObj*/,
 // ------------------------------ StringObjectFuncImp --------------------------
 
 // ECMA 15.5.3.2 fromCharCode()
-StringObjectFuncImp::StringObjectFuncImp(ExecState *exec, FunctionPrototype *funcProto)
-  : InternalFunctionImp(funcProto)
+StringObjectFuncImp::StringObjectFuncImp(ExecState*, FunctionPrototype* funcProto, const Identifier& name)
+  : InternalFunctionImp(funcProto, name)
 {
   putDirect(lengthPropertyName, jsNumber(1), DontDelete|ReadOnly|DontEnum);
 }
index 4a0049aa07f0ea97f53427e77f11e11493f751d1..5ed8b3035de489bbbe4a4a469a445276f7599d5d 100644 (file)
@@ -67,7 +67,7 @@ namespace KJS {
    */
   class StringProtoFunc : public InternalFunctionImp {
   public:
-    StringProtoFunc(ExecState *exec, int i, int len);
+    StringProtoFunc(ExecState *exec, int i, int len, const Identifier&);
 
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
@@ -110,7 +110,7 @@ namespace KJS {
    */
   class StringObjectFuncImp : public InternalFunctionImp {
   public:
-    StringObjectFuncImp(ExecState *exec, FunctionPrototype *funcProto);
+    StringObjectFuncImp(ExecState*, FunctionPrototype*, const Identifier&);
     virtual bool implementsCall() const;
     virtual JSValue *callAsFunction(ExecState *exec, JSObject *thisObj, const List &args);
   };
index f89fa75c1c1ece8b3236b0d058edaf25b69079b0..1be66a022a03cc9c4349e15eff16f21ad84025f6 100644 (file)
@@ -7,11 +7,11 @@
 <p class='results_summary'>
 Test List: All tests<br>
 Skip List: (none)<br>
-1135 test(s) selected, 1127 test(s) completed, 76 failures reported (6.74% failed)<br>
-Engine command line: /Users/ggaren/symroots/Development/testkjs <br>
-OS type: Darwin geoffrey-garens-powerbook-g4-17.local 8.4.0 Darwin Kernel Version 8.4.0: Thu Dec  8 09:27:51 PST 2005; root:xnu-792.6.55.obj~1/RELEASE_PPC Power Macintosh powerpc<br>
-Testcase execution time: 5 minutes, 49 seconds.<br>
-Tests completed on Wed Jan  4 13:27:34 2006.<br><br>
+1135 test(s) selected, 1127 test(s) completed, 75 failures reported (6.65% failed)<br>
+Engine command line: /Users/mjs/Work/symroots/Release/testkjs <br>
+OS type: Darwin maciej-stachowiaks-powerbook-g4-17.local 8.3.0 Darwin Kernel Version 8.3.0: Mon Oct  3 20:04:04 PDT 2005; root:xnu-792.6.22.obj~2/RELEASE_PPC Power Macintosh powerpc<br>
+Testcase execution time: 2 minutes, 5 seconds.<br>
+Tests completed on Mon Feb 20 05:11:05 2006.<br><br>
 [ <a href='#fail_detail'>Failure Details</a> | <a href='#retest_list'>Retest List</a> | <a href='menu.html'>Test Selection Page</a> ]<br>
 <hr>
 <a name='fail_detail'></a>
@@ -44,10 +44,6 @@ Failure messages were:<br>
 --> parseFloat("1e2000") = NaN FAILED! expected: Infinity<br>
 --> -s2 == -Infinity || -s2 == -1.7976931348623157e+308  = false FAILED! expected: true<br>
 --> -s3 == -Infinity || -s3 == -1.7976931348623157e+308 = false FAILED! expected: true<br>
---> parseInt(s1,10) == 1.7976931348623157e+308 || parseInt(s1,10) == Infinity = false FAILED! expected: true<br>
---> parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 = false FAILED! expected: true<br>
---> parseInt(s1) == 1.7976931348623157e+308 || parseInt(s1) == Infinity = false FAILED! expected: true<br>
---> parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 = false FAILED! expected: true<br>
 --> 0x1000000000000081 = 1152921504606847000 FAILED! expected: 1152921504606847200<br>
 --> 0x1000000000000281 = 1152921504606847500 FAILED! expected: 1152921504606847700<br>
 --> parseInt("0000001000000001001000110100010101100111100010011010101111011",2) = 18054430506169720 FAILED! expected: 18054430506169724<br>
@@ -72,7 +68,7 @@ Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> RegExp/hex-001.js JS regexp anchoring on empty match bug<br>
 --> BUGNUMBER: http://bugzilla.mozilla.org/show_bug.cgi?id=2157<br>
-Exception, line 19: TypeError: Object /a||b/ (result of expression a||b) does not allow calls.<br>
+Exception, line 19: <br>
 </tt><br>
 <a name='failure6'></a><dd><b>Testcase <a target='other_window' href='./ecma_2/RegExp/unicode-001.js'>ecma_2/RegExp/unicode-001.js</a> failed</b> <br>
  [ <a href='#failure5'>Previous Failure</a> | <a href='#failure7'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -80,8 +76,7 @@ Exception, line 19: TypeError: Object /a||b/ (result of expression a||b) does no
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> RegExp/unicode-001.js new RegExp( pattern, flags )<br>
-KJS: pcre_compile() failed with 'PCRE does not support \L, \l, \N, \U, or \u'<br>
-Exception, line 34: TypeError: Null value<br>
+Exception, line 34: <br>
 </tt><br>
 <a name='failure7'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/Date/15.9.5.7.js'>ecma_3/Date/15.9.5.7.js</a> failed</b> <br>
  [ <a href='#failure6'>Previous Failure</a> | <a href='#failure8'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -96,8 +91,8 @@ Failure messages were:<br>
 --> (Mon Feb 28 2000 16:00:00 GMT-0800).toLocaleTimeString() = 4:00:00 PM PST FAILED! expected: 16:00:00<br>
 --> (Mon Feb 28 2000 15:59:59 GMT-0800).toLocaleTimeString() = 3:59:59 PM PST FAILED! expected: 15:59:59<br>
 --> (Tue Feb 29 2000 00:00:00 GMT-0800).toLocaleTimeString() = 12:00:00 AM PST FAILED! expected: 00:00:00<br>
---> (Wed Jan 04 2006 13:26:46 GMT-0800).toLocaleTimeString() = 1:26:46 PM PST FAILED! expected: 13:26:46<br>
---> (Wed Jan 04 2006 21:26:46 GMT-0800).toLocaleTimeString() = 9:26:46 PM PST FAILED! expected: 21:26:46<br>
+--> (Mon Feb 20 2006 05:10:39 GMT-0800).toLocaleTimeString() = 5:10:39 AM PST FAILED! expected: 05:10:39<br>
+--> (Mon Feb 20 2006 13:10:39 GMT-0800).toLocaleTimeString() = 1:10:39 PM PST FAILED! expected: 13:10:39<br>
 --> (Fri Dec 31 2004 16:00:00 GMT-0800).toLocaleTimeString() = 4:00:00 PM PST FAILED! expected: 16:00:00<br>
 --> (Fri Dec 31 2004 15:59:59 GMT-0800).toLocaleTimeString() = 3:59:59 PM PST FAILED! expected: 15:59:59<br>
 --> (Sat Jan 01 2005 00:00:00 GMT-0800).toLocaleTimeString() = 12:00:00 AM PST FAILED! expected: 00:00:00<br>
@@ -107,7 +102,7 @@ Failure messages were:<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 26: SyntaxError: Parse error<br>
+Exception, line 26: <br>
 </tt><br>
 <a name='failure9'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/15.10.2-1.js'>ecma_3/RegExp/15.10.2-1.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=(none)' target='other_window'>Bug Number (none)</a><br>
  [ <a href='#failure8'>Previous Failure</a> | <a href='#failure10'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -212,16 +207,16 @@ Failure messages were:<br>
 Failure messages were:<br>
 --> FAILED!: [reported from test()] Section 3 of test -<br>
 --> FAILED!: [reported from test()] regexp = /[\S]+/<br>
---> FAILED!: [reported from test()] string = '<br>
+--> FAILED!: [reported from test()] string = '一가七一'<br>
 --> FAILED!: [reported from test()] ERROR !!! regexp FAILED to match anything !!!<br>
---> FAILED!: [reported from test()] Expect: ["<br>
+--> FAILED!: [reported from test()] Expect: ["一가七一"]<br>
 --> FAILED!: [reported from test()] Actual: null<br>
 --> FAILED!: [reported from test()] <br>
 --> FAILED!: [reported from test()] Section 4 of test -<br>
 --> FAILED!: [reported from test()] regexp = /[\S]+/<br>
---> FAILED!: [reported from test()] string = '<br>
+--> FAILED!: [reported from test()] string = '一가 七一'<br>
 --> FAILED!: [reported from test()] ERROR !!! regexp FAILED to match anything !!!<br>
---> FAILED!: [reported from test()] Expect: ["<br>
+--> FAILED!: [reported from test()] Expect: ["一가"]<br>
 --> FAILED!: [reported from test()] Actual: null<br>
 --> FAILED!: [reported from test()] <br>
 </tt><br>
@@ -249,225 +244,117 @@ Failure messages were:<br>
 <tt>--> STATUS: Performance: execution of regular expression<br>
 Failure messages were:<br>
 --> FAILED!: Section 4 of test -<br>
---> FAILED!: regexp = /[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-"]*)*")[^()<>@,;:".\\\[\]\80-ÿ<br>
---> FAILED!: -\1f]*(?:(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)|"[^\\\80-ÿ<br>
---> FAILED!: 
-"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-"]*)*")[^()<>@,;:".\\\[\]\80-ÿ<br>
---> FAILED!: -\1f]*)*<[  ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:@[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*)*(?:,[     ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*@[  ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*)*)*:[      ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*)?(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-"]*)*")[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*@[  ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*)*>|(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-"]*)*")[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*@[  ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*(?:[^( <>@,;:".\\\[\]<br>
---> FAILED!: 
-\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
---> FAILED!: 
-()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\))[^\\\80-ÿ<br>
---> FAILED!: 
-()]*)*\)[      ]*)*)*)/g<br>
+--> FAILED!: regexp = /[       ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r"]*)*")[^()<>@,;:".\\\[\]\80-ÿ<br>
+--> FAILED!: -\1f]*(?:(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)|"[^\\\80-ÿ<br>
+--> FAILED!: \r"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r"]*)*")[^()<>@,;:".\\\[\]\80-ÿ<br>
+--> FAILED!: -\1f]*)*<[  ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:@[       ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*)*(?:,[     ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*@[  ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*)*)*:[      ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*)?(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r"]*)*")[         ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*@[  ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*)*>|(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r"]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r"]*)*")[         ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*@[  ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:.[       ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*(?:[^( <>@,;:".\\\[\]<br>
+--> FAILED!: \r\[\]]|\\[^\80-ÿ])*\])[   ]*(?:\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:(?:\\[^\80-ÿ]|\([^\\\80-ÿ<br>
+--> FAILED!: \r()]*(?:\\[^\80-ÿ][^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\))[^\\\80-ÿ<br>
+--> FAILED!: \r()]*)*\)[        ]*)*)*)/g<br>
 --> FAILED!: string = 'Jeffy<"That Tall Guy"@ora.com (this address is no longer acti\ve)>'<br>
 --> FAILED!: ERROR !!! regexp FAILED to match anything !!!<br>
 --> FAILED!: Expect: ["Jeffy<"That Tall Guy"@ora.com (this address is no longer active)>"]<br>
@@ -684,7 +571,7 @@ Failure messages were:<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 1: SyntaxError: Parse error<br>
+Exception, line 1: <br>
 </tt><br>
 <a name='failure20'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/Unicode/uc-002.js'>ecma_3/Unicode/uc-002.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=23613' target='other_window'>Bug Number 23613</a><br>
  [ <a href='#failure19'>Previous Failure</a> | <a href='#failure21'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -700,7 +587,7 @@ Failure messages were:<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> JS1_2 Object.toString()<br>
-Exception, line 104: TypeError: Object /^\{(.*)\}$/ (result of expression ^\{(.*)\}$) does not allow calls.<br>
+Exception, line 104: <br>
 </tt><br>
 <a name='failure22'></a><dd><b>Testcase <a target='other_window' href='./js1_2/String/concat.js'>js1_2/String/concat.js</a> failed</b> <br>
  [ <a href='#failure21'>Previous Failure</a> | <a href='#failure23'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -748,7 +635,7 @@ OK.<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> JS_1.2 The variable statment<br>
-Exception, line 81: TypeError: Object /abc/ (result of expression x) does not allow calls.<br>
+Exception, line 81: <br>
 </tt><br>
 <a name='failure28'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/tostring-1.js'>js1_2/function/tostring-1.js</a> failed</b> <br>
  [ <a href='#failure27'>Previous Failure</a> | <a href='#failure29'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -821,7 +708,7 @@ Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> Executing script: compile.js<br>
 --> As described in Netscape doc "Whats new in JavaScript 1.2" RegExp: compile<br>
-Exception, line 44: TypeError: Value undefined (result of expression regularExpression.compile) is not object.<br>
+Exception, line 44: <br>
 </tt><br>
 <a name='failure36'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/endLine.js'>js1_2/regexp/endLine.js</a> failed</b> <br>
  [ <a href='#failure35'>Previous Failure</a> | <a href='#failure37'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -835,7 +722,7 @@ xyz'.match(new RegExp('\d+$')) = null FAILED! expected: 890<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> BUGNUMBER: http://bugzilla.mozilla.org/show_bug.cgi?id=6359<br>
-Exception, line 57: TypeError: Object /(a*)b\1+/ (result of expression (a*)b\1+) does not allow calls.<br>
+Exception, line 57: <br>
 </tt><br>
 <a name='failure38'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/regress-9141.js'>js1_2/regexp/regress-9141.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=http://bugzilla.mozilla.org/show_bug.cgi?id=9141' target='other_window'>Bug Number http://bugzilla.mozilla.org/show_bug.cgi?id=9141</a><br>
  [ <a href='#failure37'>Previous Failure</a> | <a href='#failure39'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -843,7 +730,7 @@ Exception, line 57: TypeError: Object /(a*)b\1+/ (result of expression (a*)b\1+)
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> BUGNUMBER: http://bugzilla.mozilla.org/show_bug.cgi?id=9141<br>
-Exception, line 74: TypeError: Object /(?:xx|x)*/ (result of expression (?:xx|x)*) does not allow calls.<br>
+Exception, line 74: <br>
 </tt><br>
 <a name='failure39'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/simple_form.js'>js1_2/regexp/simple_form.js</a> failed</b> <br>
  [ <a href='#failure38'>Previous Failure</a> | <a href='#failure40'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -852,7 +739,7 @@ Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> Executing script: simple_form.js<br>
 --> As described in Netscape doc "Whats new in JavaScript 1.2" RegExp: simple form<br>
-Exception, line 44: TypeError: Object /[0-9]{3}/ (result of expression [0-9]{3}) does not allow calls.<br>
+Exception, line 44: <br>
 </tt><br>
 <a name='failure40'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/special_characters.js'>js1_2/regexp/special_characters.js</a> failed</b> <br>
  [ <a href='#failure39'>Previous Failure</a> | <a href='#failure41'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -899,7 +786,7 @@ OK.<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> script-001 NativeScript<br>
-Exception, line 134: ReferenceError: Can't find variable: Script<br>
+Exception, line 134: <br>
 </tt><br>
 <a name='failure46'></a><dd><b>Testcase <a target='other_window' href='./js1_3/regress/function-001-n.js'>js1_3/regress/function-001-n.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=10278' target='other_window'>Bug Number 10278</a><br>
  [ <a href='#failure45'>Previous Failure</a> | <a href='#failure47'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
@@ -911,109 +798,103 @@ Complete testcase output was:<br>
 --> eval("function f(){}function g(){}") = undefined FAILED! expected: error<br>
 OK.<br>
 </tt><br>
-<a name='failure47'></a><dd><b>Testcase <a target='other_window' href='./js1_4/Regress/function-003.js'>js1_4/Regress/function-003.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=310514' target='other_window'>Bug Number 310514</a><br>
+<a name='failure47'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/catchguard-001.js'>js1_5/Exceptions/catchguard-001.js</a> failed</b> <br>
  [ <a href='#failure46'>Previous Failure</a> | <a href='#failure48'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
-<tt><br>
-Failure messages were:<br>
---> StripSpaces(Array.prototype.concat.toString()).substring(0,17) = (InternalFunction FAILED! expected: functionconcat(){<br>
+<tt>Expected exit code 0, got 3<br>
+Testcase terminated with signal 0<br>
+Complete testcase output was:<br>
+Exception, line 42: <br>
 </tt><br>
-<a name='failure48'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/catchguard-001.js'>js1_5/Exceptions/catchguard-001.js</a> failed</b> <br>
+<a name='failure48'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/catchguard-002.js'>js1_5/Exceptions/catchguard-002.js</a> failed</b> <br>
  [ <a href='#failure47'>Previous Failure</a> | <a href='#failure49'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 42: SyntaxError: Parse error<br>
+Exception, line 42: <br>
 </tt><br>
-<a name='failure49'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/catchguard-002.js'>js1_5/Exceptions/catchguard-002.js</a> failed</b> <br>
+<a name='failure49'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/catchguard-003.js'>js1_5/Exceptions/catchguard-003.js</a> failed</b> <br>
  [ <a href='#failure48'>Previous Failure</a> | <a href='#failure50'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 42: SyntaxError: Parse error<br>
+Exception, line 42: <br>
 </tt><br>
-<a name='failure50'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/catchguard-003.js'>js1_5/Exceptions/catchguard-003.js</a> failed</b> <br>
+<a name='failure50'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/errstack-001.js'>js1_5/Exceptions/errstack-001.js</a> failed</b> <br>
  [ <a href='#failure49'>Previous Failure</a> | <a href='#failure51'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 42: SyntaxError: Parse error<br>
+Exception, line 248: <br>
 </tt><br>
-<a name='failure51'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/errstack-001.js'>js1_5/Exceptions/errstack-001.js</a> failed</b> <br>
+<a name='failure51'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/regress-50447.js'>js1_5/Exceptions/regress-50447.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=50447' target='other_window'>Bug Number 50447</a><br>
  [ <a href='#failure50'>Previous Failure</a> | <a href='#failure52'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 248: TypeError: Undefined value<br>
+--> BUGNUMBER: 50447<br>
+--> STATUS: Test (non-ECMA) Error object properties fileName, lineNumber<br>
+Exception, line 66: <br>
 </tt><br>
-<a name='failure52'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Exceptions/regress-50447.js'>js1_5/Exceptions/regress-50447.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=50447' target='other_window'>Bug Number 50447</a><br>
+<a name='failure52'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-001.js'>js1_5/GetSet/getset-001.js</a> failed</b> <br>
  [ <a href='#failure51'>Previous Failure</a> | <a href='#failure53'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
---> BUGNUMBER: 50447<br>
---> STATUS: Test (non-ECMA) Error object properties fileName, lineNumber<br>
-Exception, line 66: TypeError: Undefined value<br>
+Exception, line 33: <br>
 </tt><br>
-<a name='failure53'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-001.js'>js1_5/GetSet/getset-001.js</a> failed</b> <br>
+<a name='failure53'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-002.js'>js1_5/GetSet/getset-002.js</a> failed</b> <br>
  [ <a href='#failure52'>Previous Failure</a> | <a href='#failure54'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 33: SyntaxError: Parse error<br>
+Exception, line 29: <br>
 </tt><br>
-<a name='failure54'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-002.js'>js1_5/GetSet/getset-002.js</a> failed</b> <br>
+<a name='failure54'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-003.js'>js1_5/GetSet/getset-003.js</a> failed</b> <br>
  [ <a href='#failure53'>Previous Failure</a> | <a href='#failure55'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 29: SyntaxError: Parse error<br>
+Exception, line 48: <br>
 </tt><br>
-<a name='failure55'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-003.js'>js1_5/GetSet/getset-003.js</a> failed</b> <br>
+<a name='failure55'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-90596-001.js'>js1_5/Object/regress-90596-001.js</a> failed</b> <br>
  [ <a href='#failure54'>Previous Failure</a> | <a href='#failure56'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 48: SyntaxError: Parse error<br>
+Exception, line 49: <br>
 </tt><br>
-<a name='failure56'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-90596-001.js'>js1_5/Object/regress-90596-001.js</a> failed</b> <br>
+<a name='failure56'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-90596-002.js'>js1_5/Object/regress-90596-002.js</a> failed</b> <br>
  [ <a href='#failure55'>Previous Failure</a> | <a href='#failure57'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 49: TypeError: Value undefined (result of expression obj.toSource) is not object.<br>
+Exception, line 49: <br>
 </tt><br>
-<a name='failure57'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-90596-002.js'>js1_5/Object/regress-90596-002.js</a> failed</b> <br>
+<a name='failure57'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-96284-001.js'>js1_5/Object/regress-96284-001.js</a> failed</b> <br>
  [ <a href='#failure56'>Previous Failure</a> | <a href='#failure58'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 49: ReferenceError: Can't find variable: uneval<br>
+Exception, line 50: <br>
 </tt><br>
-<a name='failure58'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-96284-001.js'>js1_5/Object/regress-96284-001.js</a> failed</b> <br>
+<a name='failure58'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-96284-002.js'>js1_5/Object/regress-96284-002.js</a> failed</b> <br>
  [ <a href='#failure57'>Previous Failure</a> | <a href='#failure59'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 50: TypeError: Value undefined (result of expression obj1.toSource) is not object.<br>
+Exception, line 50: <br>
 </tt><br>
-<a name='failure59'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Object/regress-96284-002.js'>js1_5/Object/regress-96284-002.js</a> failed</b> <br>
+<a name='failure59'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-44009.js'>js1_5/Regress/regress-44009.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=44009' target='other_window'>Bug Number 44009</a><br>
  [ <a href='#failure58'>Previous Failure</a> | <a href='#failure60'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 50: ReferenceError: Can't find variable: uneval<br>
-</tt><br>
-<a name='failure60'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-44009.js'>js1_5/Regress/regress-44009.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=44009' target='other_window'>Bug Number 44009</a><br>
- [ <a href='#failure59'>Previous Failure</a> | <a href='#failure61'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
-<tt>Expected exit code 0, got 3<br>
-Testcase terminated with signal 0<br>
-Complete testcase output was:<br>
 --> BUGNUMBER: 44009<br>
 --> STATUS: Testing that we don't crash on obj.toSource()<br>
-Exception, line 61: TypeError: Value undefined (result of expression obj.toSource) is not object.<br>
+Exception, line 61: <br>
 </tt><br>
-<a name='failure61'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-68498-003.js'>js1_5/Regress/regress-68498-003.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=68498' target='other_window'>Bug Number 68498</a><br>
- [ <a href='#failure60'>Previous Failure</a> | <a href='#failure62'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure60'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-68498-003.js'>js1_5/Regress/regress-68498-003.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=68498' target='other_window'>Bug Number 68498</a><br>
+ [ <a href='#failure59'>Previous Failure</a> | <a href='#failure61'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>--> STATUS: Testing calling obj.eval(str)<br>
 Failure messages were:<br>
 --> FAILED!: [reported from test()] Testing calling obj.eval(str); currently at expect[1] within test -<br>
@@ -1021,8 +902,8 @@ Failure messages were:<br>
 --> FAILED!: [reported from test()] Expected value '43', Actual value 'false'<br>
 --> FAILED!: [reported from test()] <br>
 </tt><br>
-<a name='failure62'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-103602.js'>js1_5/Regress/regress-103602.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=103602' target='other_window'>Bug Number 103602</a><br>
- [ <a href='#failure61'>Previous Failure</a> | <a href='#failure63'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure61'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-103602.js'>js1_5/Regress/regress-103602.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=103602' target='other_window'>Bug Number 103602</a><br>
+ [ <a href='#failure60'>Previous Failure</a> | <a href='#failure62'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>--> STATUS: Reassignment to a const is NOT an error per ECMA<br>
 Failure messages were:<br>
 --> FAILED!: [reported from test()] Section 1 of test -<br>
@@ -1032,29 +913,29 @@ Failure messages were:<br>
 --> FAILED!: [reported from test()] Expected value '1', Actual value '2'<br>
 --> FAILED!: [reported from test()] <br>
 </tt><br>
-<a name='failure63'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-104077.js'>js1_5/Regress/regress-104077.js</a> failed</b> <br>
- [ <a href='#failure62'>Previous Failure</a> | <a href='#failure64'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure62'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-104077.js'>js1_5/Regress/regress-104077.js</a> failed</b> <br>
+ [ <a href='#failure61'>Previous Failure</a> | <a href='#failure63'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 351: SyntaxError: Parse error<br>
+Exception, line 351: <br>
 </tt><br>
-<a name='failure64'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-127557.js'>js1_5/Regress/regress-127557.js</a> failed</b> <br>
- [ <a href='#failure63'>Previous Failure</a> | <a href='#failure65'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure63'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-127557.js'>js1_5/Regress/regress-127557.js</a> failed</b> <br>
+ [ <a href='#failure62'>Previous Failure</a> | <a href='#failure64'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 76: ReferenceError: Can't find variable: clone<br>
+Exception, line 76: <br>
 </tt><br>
-<a name='failure65'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-172699.js'>js1_5/Regress/regress-172699.js</a> failed</b> <br>
- [ <a href='#failure64'>Previous Failure</a> | <a href='#failure66'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure64'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-172699.js'>js1_5/Regress/regress-172699.js</a> failed</b> <br>
+ [ <a href='#failure63'>Previous Failure</a> | <a href='#failure65'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 62: URIError: URI error<br>
+Exception, line 62: <br>
 </tt><br>
-<a name='failure66'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-179524.js'>js1_5/Regress/regress-179524.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=179524' target='other_window'>Bug Number 179524</a><br>
- [ <a href='#failure65'>Previous Failure</a> | <a href='#failure67'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure65'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-179524.js'>js1_5/Regress/regress-179524.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=179524' target='other_window'>Bug Number 179524</a><br>
+ [ <a href='#failure64'>Previous Failure</a> | <a href='#failure66'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>--> STATUS: Don't crash on extraneous arguments to str.match(), etc.<br>
 Failure messages were:<br>
 --> FAILED!: [reported from test()] Section 14 of test -<br>
@@ -1104,16 +985,16 @@ Failure messages were:<br>
 --> FAILED!: [reported from test()] Expected value 'SHOULD HAVE FALLEN INTO CATCH-BLOCK!', Actual value 'ABC Zbc'<br>
 --> FAILED!: [reported from test()] <br>
 </tt><br>
-<a name='failure67'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-185165.js'>js1_5/Regress/regress-185165.js</a> failed</b> <br>
- [ <a href='#failure66'>Previous Failure</a> | <a href='#failure68'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure66'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-185165.js'>js1_5/Regress/regress-185165.js</a> failed</b> <br>
+ [ <a href='#failure65'>Previous Failure</a> | <a href='#failure67'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 yylex: ERROR.<br>
-Exception, line 3: SyntaxError: Parse error<br>
+Exception, line 3: <br>
 </tt><br>
-<a name='failure68'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Scope/regress-185485.js'>js1_5/Scope/regress-185485.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=185485' target='other_window'>Bug Number 185485</a><br>
- [ <a href='#failure67'>Previous Failure</a> | <a href='#failure69'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure67'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Scope/regress-185485.js'>js1_5/Scope/regress-185485.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=185485' target='other_window'>Bug Number 185485</a><br>
+ [ <a href='#failure66'>Previous Failure</a> | <a href='#failure68'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>--> STATUS: Testing |with (x) {function f() {}}| when |x.f| already exists<br>
 Failure messages were:<br>
 --> FAILED!: [reported from test()] Section 2 of test -<br>
@@ -1128,15 +1009,15 @@ Failure messages were:<br>
 --> FAILED!: [reported from test()] }', Actual value '0'<br>
 --> FAILED!: [reported from test()] <br>
 </tt><br>
-<a name='failure69'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Scope/regress-220584.js'>js1_5/Scope/regress-220584.js</a> failed</b> <br>
- [ <a href='#failure68'>Previous Failure</a> | <a href='#failure70'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure68'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Scope/regress-220584.js'>js1_5/Scope/regress-220584.js</a> failed</b> <br>
+ [ <a href='#failure67'>Previous Failure</a> | <a href='#failure69'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 57: ReferenceError: Can't find variable: Script<br>
+Exception, line 57: <br>
 </tt><br>
-<a name='failure70'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Scope/scope-001.js'>js1_5/Scope/scope-001.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=53268' target='other_window'>Bug Number 53268</a><br>
- [ <a href='#failure69'>Previous Failure</a> | <a href='#failure71'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure69'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Scope/scope-001.js'>js1_5/Scope/scope-001.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=53268' target='other_window'>Bug Number 53268</a><br>
+ [ <a href='#failure68'>Previous Failure</a> | <a href='#failure70'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>--> STATUS: Testing scope after changing obj.__proto__<br>
 Failure messages were:<br>
 --> FAILED!: [reported from test()] Step 1:  setting obj.__proto__ = global object<br>
@@ -1147,8 +1028,8 @@ Failure messages were:<br>
 --> FAILED!: [reported from test()] Expected value 'undefined', Actual value '1'<br>
 --> FAILED!: [reported from test()] <br>
 </tt><br>
-<a name='failure71'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Array/regress-304828.js'>js1_6/Array/regress-304828.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=304828' target='other_window'>Bug Number 304828</a><br>
- [ <a href='#failure70'>Previous Failure</a> | <a href='#failure72'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure70'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Array/regress-304828.js'>js1_6/Array/regress-304828.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=304828' target='other_window'>Bug Number 304828</a><br>
+ [ <a href='#failure69'>Previous Failure</a> | <a href='#failure71'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>--> STATUS: Array Generic Methods<br>
 Failure messages were:<br>
 --> FAILED!: Array Generic Methods: lastIndexOf<br>
@@ -1156,17 +1037,17 @@ Failure messages were:<br>
 --> FAILED!: Expected value '4', Actual value 'TypeError: Undefined value'<br>
 --> FAILED!: <br>
 </tt><br>
-<a name='failure72'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Array/regress-310425-01.js'>js1_6/Array/regress-310425-01.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=310425' target='other_window'>Bug Number 310425</a><br>
- [ <a href='#failure71'>Previous Failure</a> | <a href='#failure73'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure71'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Array/regress-310425-01.js'>js1_6/Array/regress-310425-01.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=310425' target='other_window'>Bug Number 310425</a><br>
+ [ <a href='#failure70'>Previous Failure</a> | <a href='#failure72'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> BUGNUMBER: 310425<br>
 --> STATUS: Array.indexOf/lastIndexOf edge cases<br>
-Exception, line 48: TypeError: Value undefined (result of expression [].lastIndexOf) is not object.<br>
+Exception, line 48: <br>
 </tt><br>
-<a name='failure73'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Regress/regress-301574.js'>js1_6/Regress/regress-301574.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=301574' target='other_window'>Bug Number 301574</a><br>
- [ <a href='#failure72'>Previous Failure</a> | <a href='#failure74'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure72'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Regress/regress-301574.js'>js1_6/Regress/regress-301574.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=301574' target='other_window'>Bug Number 301574</a><br>
+ [ <a href='#failure71'>Previous Failure</a> | <a href='#failure73'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>--> STATUS: E4X should be enabled even when e4x=1 not specified<br>
 Failure messages were:<br>
 --> FAILED!: E4X should be enabled even when e4x=1 not specified: XML()<br>
@@ -1176,29 +1057,29 @@ Failure messages were:<br>
 --> FAILED!: Expected value 'No error', Actual value 'error: ReferenceError: Can't find variable: XML'<br>
 --> FAILED!: <br>
 </tt><br>
-<a name='failure74'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Regress/regress-309242.js'>js1_6/Regress/regress-309242.js</a> failed</b> <br>
- [ <a href='#failure73'>Previous Failure</a> | <a href='#failure75'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure73'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Regress/regress-309242.js'>js1_6/Regress/regress-309242.js</a> failed</b> <br>
+ [ <a href='#failure72'>Previous Failure</a> | <a href='#failure74'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 71: SyntaxError: Parse error<br>
+Exception, line 71: <br>
 </tt><br>
-<a name='failure75'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Regress/regress-314887.js'>js1_6/Regress/regress-314887.js</a> failed</b> <br>
- [ <a href='#failure74'>Previous Failure</a> | <a href='#failure76'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure74'></a><dd><b>Testcase <a target='other_window' href='./js1_6/Regress/regress-314887.js'>js1_6/Regress/regress-314887.js</a> failed</b> <br>
+ [ <a href='#failure73'>Previous Failure</a> | <a href='#failure75'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
-Exception, line 47: SyntaxError: Parse error<br>
+Exception, line 47: <br>
 </tt><br>
-<a name='failure76'></a><dd><b>Testcase <a target='other_window' href='./js1_6/String/regress-306591.js'>js1_6/String/regress-306591.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=306591' target='other_window'>Bug Number 306591</a><br>
- [ <a href='#failure75'>Previous Failure</a> | <a href='#failure77'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
+<a name='failure75'></a><dd><b>Testcase <a target='other_window' href='./js1_6/String/regress-306591.js'>js1_6/String/regress-306591.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=306591' target='other_window'>Bug Number 306591</a><br>
+ [ <a href='#failure74'>Previous Failure</a> | <a href='#failure76'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
 <tt>Expected exit code 0, got 3<br>
 Testcase terminated with signal 0<br>
 Complete testcase output was:<br>
 --> BUGNUMBER: 306591<br>
 --> STATUS: String static methods<br>
 --> STATUS: See https://bugzilla.mozilla.org/show_bug.cgi?id=304828<br>
-Exception, line 49: TypeError: Value undefined (result of expression String.split) is not object.<br>
+Exception, line 49: <br>
 </tt><br>
 </dl>
 [ <a href='#tippy_top'>Top of Page</a> | <a href='#fail_detail'>Top of Failures</a> ]<br>
@@ -1206,9 +1087,9 @@ Exception, line 49: TypeError: Value undefined (result of expression String.spli
 <pre>
 <a name='retest_list'></a>
 <h2>Retest List</h2><br>
-# Retest List, kjs, generated Wed Jan  4 13:27:34 2006.
+# Retest List, kjs, generated Mon Feb 20 05:11:05 2006.
 # Original test base was: All tests.
-# 1127 of 1135 test(s) were completed, 76 failures reported.
+# 1127 of 1135 test(s) were completed, 75 failures reported.
 ecma/GlobalObject/15.1.2.2-2.js
 ecma/LexicalConventions/7.7.3-1.js
 ecma/TypeConversion/9.3.1-3.js
@@ -1255,7 +1136,6 @@ js1_2/version120/regress-99663.js
 js1_3/Script/function-001-n.js
 js1_3/Script/script-001.js
 js1_3/regress/function-001-n.js
-js1_4/Regress/function-003.js
 js1_5/Exceptions/catchguard-001.js
 js1_5/Exceptions/catchguard-002.js
 js1_5/Exceptions/catchguard-003.js