[webkit-changes] cvs commit: JavaScriptCore/tests/mozilla expected.html

Maciej mjs at opensource.apple.com
Sat Sep 24 15:34:17 PDT 2005


mjs         05/09/24 15:34:16

  Modified:    .        ChangeLog
               kjs      grammar.y nodes.cpp nodes.h nodes2string.cpp
                        reference.cpp reference.h
               tests/mozilla expected.html
  Log:
          Reviewed by Darin.
  
  	<rdar://problem/4260479> Finish deploying PropertySlot in the interpreter
  	http://bugzilla.opendarwin.org/show_bug.cgi?id=5112
  
  	Convert postfix, prefix, delete, prefix, and for..in expressions to use
  	PropertySlot-based lookup instead of evaluateReference.
  
  	3% speedup on JS iBench.
  
  	Fixed two of the JS tests:
          * tests/mozilla/expected.html:
  
          * kjs/grammar.y:
          * kjs/nodes.cpp:
          (PostfixResolveNode::evaluate):
          (PostfixBracketNode::evaluate):
          (PostfixDotNode::evaluate):
          (DeleteResolveNode::evaluate):
          (DeleteBracketNode::evaluate):
          (DeleteDotNode::evaluate):
          (DeleteValueNode::evaluate):
          (typeStringForValue):
          (TypeOfResolveNode::evaluate):
          (TypeOfValueNode::evaluate):
          (PrefixResolveNode::evaluate):
          (PrefixBracketNode::evaluate):
          (PrefixDotNode::evaluate):
          (ForInNode::execute):
          * kjs/nodes.h:
          (KJS::PostfixResolveNode::PostfixResolveNode):
          (KJS::PostfixBracketNode::PostfixBracketNode):
          (KJS::PostfixDotNode::PostfixDotNode):
          (KJS::DeleteResolveNode::DeleteResolveNode):
          (KJS::DeleteBracketNode::DeleteBracketNode):
          (KJS::DeleteDotNode::DeleteDotNode):
          (KJS::DeleteValueNode::DeleteValueNode):
          (KJS::TypeOfResolveNode::TypeOfResolveNode):
          (KJS::TypeOfValueNode::TypeOfValueNode):
          (KJS::PrefixResolveNode::PrefixResolveNode):
          (KJS::PrefixBracketNode::PrefixBracketNode):
          (KJS::PrefixDotNode::PrefixDotNode):
          * kjs/nodes2string.cpp:
          (PostfixResolveNode::streamTo):
          (PostfixBracketNode::streamTo):
          (PostfixDotNode::streamTo):
          (DeleteResolveNode::streamTo):
          (DeleteBracketNode::streamTo):
          (DeleteDotNode::streamTo):
          (DeleteValueNode::streamTo):
          (TypeOfValueNode::streamTo):
          (TypeOfResolveNode::streamTo):
          (PrefixResolveNode::streamTo):
          (PrefixBracketNode::streamTo):
          (PrefixDotNode::streamTo):
          * kjs/reference.cpp:
          (KJS::Reference::Reference):
          (KJS::Reference::getPropertyName):
          (KJS::Reference::getValue):
          (KJS::Reference::deleteValue):
          * kjs/reference.h:
  
  Revision  Changes    Path
  1.837     +64 -0     JavaScriptCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/ChangeLog,v
  retrieving revision 1.836
  retrieving revision 1.837
  diff -u -r1.836 -r1.837
  --- ChangeLog	24 Sep 2005 03:28:28 -0000	1.836
  +++ ChangeLog	24 Sep 2005 22:34:12 -0000	1.837
  @@ -1,3 +1,67 @@
  +2005-09-23  Maciej Stachowiak  <mjs at apple.com>
  +
  +        Reviewed by Darin.
  +
  +	<rdar://problem/4260479> Finish deploying PropertySlot in the interpreter
  +	http://bugzilla.opendarwin.org/show_bug.cgi?id=5112
  +	
  +	Convert postfix, prefix, delete, prefix, and for..in expressions to use
  +	PropertySlot-based lookup instead of evaluateReference.
  +
  +	3% speedup on JS iBench.
  +
  +	Fixed two of the JS tests:
  +        * tests/mozilla/expected.html:
  +
  +        * kjs/grammar.y:
  +        * kjs/nodes.cpp:
  +        (PostfixResolveNode::evaluate):
  +        (PostfixBracketNode::evaluate):
  +        (PostfixDotNode::evaluate):
  +        (DeleteResolveNode::evaluate):
  +        (DeleteBracketNode::evaluate):
  +        (DeleteDotNode::evaluate):
  +        (DeleteValueNode::evaluate):
  +        (typeStringForValue):
  +        (TypeOfResolveNode::evaluate):
  +        (TypeOfValueNode::evaluate):
  +        (PrefixResolveNode::evaluate):
  +        (PrefixBracketNode::evaluate):
  +        (PrefixDotNode::evaluate):
  +        (ForInNode::execute):
  +        * kjs/nodes.h:
  +        (KJS::PostfixResolveNode::PostfixResolveNode):
  +        (KJS::PostfixBracketNode::PostfixBracketNode):
  +        (KJS::PostfixDotNode::PostfixDotNode):
  +        (KJS::DeleteResolveNode::DeleteResolveNode):
  +        (KJS::DeleteBracketNode::DeleteBracketNode):
  +        (KJS::DeleteDotNode::DeleteDotNode):
  +        (KJS::DeleteValueNode::DeleteValueNode):
  +        (KJS::TypeOfResolveNode::TypeOfResolveNode):
  +        (KJS::TypeOfValueNode::TypeOfValueNode):
  +        (KJS::PrefixResolveNode::PrefixResolveNode):
  +        (KJS::PrefixBracketNode::PrefixBracketNode):
  +        (KJS::PrefixDotNode::PrefixDotNode):
  +        * kjs/nodes2string.cpp:
  +        (PostfixResolveNode::streamTo):
  +        (PostfixBracketNode::streamTo):
  +        (PostfixDotNode::streamTo):
  +        (DeleteResolveNode::streamTo):
  +        (DeleteBracketNode::streamTo):
  +        (DeleteDotNode::streamTo):
  +        (DeleteValueNode::streamTo):
  +        (TypeOfValueNode::streamTo):
  +        (TypeOfResolveNode::streamTo):
  +        (PrefixResolveNode::streamTo):
  +        (PrefixBracketNode::streamTo):
  +        (PrefixDotNode::streamTo):
  +        * kjs/reference.cpp:
  +        (KJS::Reference::Reference):
  +        (KJS::Reference::getPropertyName):
  +        (KJS::Reference::getValue):
  +        (KJS::Reference::deleteValue):
  +        * kjs/reference.h:
  +
   2005-09-23  Krzysztof Kowalczyk  <kkowalczyk at gmail.com>
   
           Reviewed and landed by Darin.
  
  
  
  1.30      +139 -38   JavaScriptCore/kjs/grammar.y
  
  Index: grammar.y
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/kjs/grammar.y,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- grammar.y	21 Sep 2005 05:53:05 -0000	1.29
  +++ grammar.y	24 Sep 2005 22:34:13 -0000	1.30
  @@ -49,7 +49,12 @@
   
   using namespace KJS;
   
  +static bool makeAssignNode(Node*& result, Node *loc, Operator op, Node *expr);
  +static bool makePrefixNode(Node*& result, Node *expr, Operator op);
  +static bool makePostfixNode(Node*& result, Node *expr, Operator op);
   static Node *makeFunctionCallNode(Node *func, ArgumentsNode *args);
  +static Node *makeTypeOfNode(Node *expr);
  +static Node *makeDeleteNode(Node *expr);
   
   %}
   
  @@ -165,7 +170,6 @@
   %type <elm>   ElementList
   %type <plist> PropertyNameAndValueList
   %type <pnode> PropertyName
  -%type <ident> ParenthesizedIdent
   
   %%
   
  @@ -184,17 +188,12 @@
                                        $$ = new RegExpNode(UString('=')+l->pattern,l->flags);}
   ;
   
  -ParenthesizedIdent:
  -    IDENT
  -  | '(' ParenthesizedIdent ')' { $$ = $2; }
  -;
  -
   PrimaryExpr:
       THIS                           { $$ = new ThisNode(); }
     | Literal
     | ArrayLiteral
  -  | ParenthesizedIdent             { $$ = new ResolveNode(*$1); }
  -  | '(' Expr ')'                   { $$ = new GroupNode($2); }
  +  | IDENT                          { $$ = new ResolveNode(*$1); }
  +  | '(' Expr ')'                   { if ($2->isResolveNode()) $$ = $2; else $$ = new GroupNode($2); }
     | '{' '}'                        { $$ = new ObjectLiteralNode(); }
     | '{' PropertyNameAndValueList '}'   { $$ = new ObjectLiteralNode($2); }
   ;
  @@ -270,19 +269,19 @@
   
   PostfixExpr:    /* TODO: no line terminator here */
       LeftHandSideExpr
  -  | LeftHandSideExpr PLUSPLUS      { $$ = new PostfixNode($1, OpPlusPlus); }
  -  | LeftHandSideExpr MINUSMINUS    { $$ = new PostfixNode($1, OpMinusMinus); }
  +  | LeftHandSideExpr PLUSPLUS      { if (!makePostfixNode($$, $1, OpPlusPlus)) YYABORT; }
  +  | LeftHandSideExpr MINUSMINUS    { if (!makePostfixNode($$, $1, OpMinusMinus)) YYABORT; }
   ;
   
   UnaryExpr:
       PostfixExpr
  -  | DELETE UnaryExpr               { $$ = new DeleteNode($2); }
  +  | DELETE UnaryExpr               { $$ = makeDeleteNode($2); }
     | VOID UnaryExpr                 { $$ = new VoidNode($2); }
  -  | TYPEOF UnaryExpr               { $$ = new TypeOfNode($2); }
  -  | PLUSPLUS UnaryExpr             { $$ = new PrefixNode(OpPlusPlus, $2); }
  -  | AUTOPLUSPLUS UnaryExpr         { $$ = new PrefixNode(OpPlusPlus, $2); }
  -  | MINUSMINUS UnaryExpr           { $$ = new PrefixNode(OpMinusMinus, $2); }
  -  | AUTOMINUSMINUS UnaryExpr       { $$ = new PrefixNode(OpMinusMinus, $2); }
  +  | TYPEOF UnaryExpr               { $$ = makeTypeOfNode($2); }
  +  | PLUSPLUS UnaryExpr             { if (!makePrefixNode($$, $2, OpPlusPlus)) YYABORT; }
  +  | AUTOPLUSPLUS UnaryExpr         { if (!makePrefixNode($$, $2, OpPlusPlus)) YYABORT; }
  +  | MINUSMINUS UnaryExpr           { if (!makePrefixNode($$, $2, OpMinusMinus)) YYABORT; }
  +  | AUTOMINUSMINUS UnaryExpr       { if (!makePrefixNode($$, $2, OpMinusMinus)) YYABORT; }
     | '+' UnaryExpr                  { $$ = new UnaryPlusNode($2); }
     | '-' UnaryExpr                  { $$ = new NegateNode($2); }
     | '~' UnaryExpr                  { $$ = new BitwiseNotNode($2); }
  @@ -369,26 +368,7 @@
   AssignmentExpr:
       ConditionalExpr
     | LeftHandSideExpr AssignmentOperator AssignmentExpr
  -                           { 
  -                               Node *n = $1;
  -                               bool paren = n->isGroupNode();
  -                               if (paren)
  -                                   n = static_cast<GroupNode *>(n)->nodeInsideAllParens();
  -
  -                               if (!n->isLocation())
  -                                   YYABORT; 
  -                               else if (n->isResolveNode()) {
  -                                   ResolveNode *resolve = static_cast<ResolveNode *>(n);
  -                                   $$ = new AssignResolveNode(resolve->identifier(), $2, $3);
  -                               } else if (n->isBracketAccessorNode()) {
  -                                   BracketAccessorNode *bracket = static_cast<BracketAccessorNode *>(n);
  -                                   $$ = new AssignBracketNode(bracket->base(), bracket->subscript(), $2, $3);
  -                               } else {
  -                                   assert(n->isDotAccessorNode());
  -                                   DotAccessorNode *dot = static_cast<DotAccessorNode *>(n);
  -                                   $$ = new AssignDotNode(dot->base(), dot->identifier(), $2, $3);
  -                               }
  -                           }
  +                           { if (!makeAssignNode($$, $1, $2, $3)) YYABORT; }
   ;
   
   AssignmentOperator:
  @@ -519,8 +499,18 @@
               Statement              { $$ = new ForNode($4,$6,$8,$10);
   	                             DBG($$, at 1, at 9); }
     | FOR '(' LeftHandSideExpr IN Expr ')'
  -            Statement              { $$ = new ForInNode($3, $5, $7);
  -	                             DBG($$, at 1, at 6); }
  +            Statement              { 
  +                                     Node *n = $3;
  +                                     bool paren = n->isGroupNode();
  +                                     if (paren)
  +                                         n = static_cast<GroupNode *>(n)->nodeInsideAllParens();
  +                                     
  +                                     if (!n->isLocation())
  +                                         YYABORT;
  +
  +                                     $$ = new ForInNode(n, $5, $7);
  +	                             DBG($$, at 1, at 6); 
  +                                   }
     | FOR '(' VAR IDENT IN Expr ')'
               Statement              { $$ = new ForInNode(*$4,0,$6,$8);
   	                             DBG($$, at 1, at 7); }
  @@ -685,6 +675,81 @@
   
   %%
   
  +static bool makeAssignNode(Node*& result, Node *loc, Operator op, Node *expr)
  +{ 
  +    Node *n = loc;
  +    bool paren = n->isGroupNode();
  +    if (paren)
  +        n = static_cast<GroupNode *>(n)->nodeInsideAllParens();
  +
  +    if (!n->isLocation())
  +        return false;
  +
  +    if (n->isResolveNode()) {
  +        ResolveNode *resolve = static_cast<ResolveNode *>(n);
  +        result = new AssignResolveNode(resolve->identifier(), op, expr);
  +    } else if (n->isBracketAccessorNode()) {
  +        BracketAccessorNode *bracket = static_cast<BracketAccessorNode *>(n);
  +        result = new AssignBracketNode(bracket->base(), bracket->subscript(), op, expr);
  +    } else {
  +        assert(n->isDotAccessorNode());
  +        DotAccessorNode *dot = static_cast<DotAccessorNode *>(n);
  +        result = new AssignDotNode(dot->base(), dot->identifier(), op, expr);
  +    }
  +
  +    return true;
  +}
  +
  +static bool makePrefixNode(Node*& result, Node *expr, Operator op)
  +{ 
  +    Node *n = expr;
  +    bool paren = n->isGroupNode();
  +    if (paren)
  +        n = static_cast<GroupNode *>(n)->nodeInsideAllParens();
  +
  +    if (!n->isLocation())
  +        return false;
  +    
  +    if (n->isResolveNode()) {
  +        ResolveNode *resolve = static_cast<ResolveNode *>(n);
  +        result = new PrefixResolveNode(resolve->identifier(), op);
  +    } else if (n->isBracketAccessorNode()) {
  +        BracketAccessorNode *bracket = static_cast<BracketAccessorNode *>(n);
  +        result = new PrefixBracketNode(bracket->base(), bracket->subscript(), op);
  +    } else {
  +        assert(n->isDotAccessorNode());
  +        DotAccessorNode *dot = static_cast<DotAccessorNode *>(n);
  +        result = new PrefixDotNode(dot->base(), dot->identifier(), op);
  +    }
  +
  +    return true;
  +}
  +
  +static bool makePostfixNode(Node*& result, Node *expr, Operator op)
  +{ 
  +    Node *n = expr;
  +    bool paren = n->isGroupNode();
  +    if (paren)
  +        n = static_cast<GroupNode *>(n)->nodeInsideAllParens();
  +
  +    if (!n->isLocation())
  +        return false;
  +    
  +    if (n->isResolveNode()) {
  +        ResolveNode *resolve = static_cast<ResolveNode *>(n);
  +        result = new PostfixResolveNode(resolve->identifier(), op);
  +    } else if (n->isBracketAccessorNode()) {
  +        BracketAccessorNode *bracket = static_cast<BracketAccessorNode *>(n);
  +        result = new PostfixBracketNode(bracket->base(), bracket->subscript(), op);
  +    } else {
  +        assert(n->isDotAccessorNode());
  +        DotAccessorNode *dot = static_cast<DotAccessorNode *>(n);
  +        result = new PostfixDotNode(dot->base(), dot->identifier(), op);
  +    }
  +
  +    return true;
  +}
  +
   static Node *makeFunctionCallNode(Node *func, ArgumentsNode *args)
   {
       Node *n = func;
  @@ -713,6 +778,42 @@
       }
   }
   
  +static Node *makeTypeOfNode(Node *expr)
  +{
  +    Node *n = expr;
  +    bool paren = n->isGroupNode();
  +    if (paren)
  +        n = static_cast<GroupNode *>(n)->nodeInsideAllParens();
  +
  +    if (n->isResolveNode()) {
  +        ResolveNode *resolve = static_cast<ResolveNode *>(n);
  +        return new TypeOfResolveNode(resolve->identifier());
  +    } else
  +        return new TypeOfValueNode(n);
  +}
  +
  +static Node *makeDeleteNode(Node *expr)
  +{
  +    Node *n = expr;
  +    bool paren = n->isGroupNode();
  +    if (paren)
  +        n = static_cast<GroupNode *>(n)->nodeInsideAllParens();
  +    
  +    if (!n->isLocation())
  +        return new DeleteValueNode(expr);
  +    else if (n->isResolveNode()) {
  +        ResolveNode *resolve = static_cast<ResolveNode *>(n);
  +        return new DeleteResolveNode(resolve->identifier());
  +    } else if (n->isBracketAccessorNode()) {
  +        BracketAccessorNode *bracket = static_cast<BracketAccessorNode *>(n);
  +        return new DeleteBracketNode(bracket->base(), bracket->subscript());
  +    } else {
  +        assert(n->isDotAccessorNode());
  +        DotAccessorNode *dot = static_cast<DotAccessorNode *>(n);
  +        return new DeleteDotNode(dot->base(), dot->identifier());
  +    }
  +}
  +
   int yyerror (const char * /* s */)  /* Called by yyparse on error */
   {
     // fprintf(stderr, "ERROR: %s at line %d\n",
  
  
  
  1.82      +325 -113  JavaScriptCore/kjs/nodes.cpp
  
  Index: nodes.cpp
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/kjs/nodes.cpp,v
  retrieving revision 1.81
  retrieving revision 1.82
  diff -u -r1.81 -r1.82
  --- nodes.cpp	9 Sep 2005 01:19:19 -0000	1.81
  +++ nodes.cpp	24 Sep 2005 22:34:13 -0000	1.82
  @@ -72,14 +72,6 @@
     if (Collector::outOfMemory()) \
       return Undefined(); // will be picked up by KJS_CHECKEXCEPTION
   
  -#define KJS_CHECKEXCEPTIONREFERENCE \
  -  if (exec->hadException()) { \
  -    setExceptionDetailsIfNeeded(exec); \
  -    return Reference::makeValueReference(Undefined()); \
  -  } \
  -  if (Collector::outOfMemory()) \
  -    return Reference::makeValueReference(Undefined()); // will be picked up by KJS_CHECKEXCEPTION
  -
   #define KJS_CHECKEXCEPTIONLIST \
     if (exec->hadException()) { \
       setExceptionDetailsIfNeeded(exec); \
  @@ -106,13 +98,6 @@
   {
   }
   
  -Reference Node::evaluateReference(ExecState *exec)
  -{
  -  ValueImp *v = evaluate(exec);
  -  KJS_CHECKEXCEPTIONREFERENCE
  -  return Reference::makeValueReference(v);
  -}
  -
   #ifdef KJS_DEBUG_MEM
   void Node::finalCheck()
   {
  @@ -306,27 +291,6 @@
     return undefinedVariableError(exec, ident);
   }
   
  -Reference ResolveNode::evaluateReference(ExecState *exec)
  -{
  -  const ScopeChain& chain = exec->context().imp()->scopeChain();
  -  ScopeChainIterator iter = chain.begin();
  -  ScopeChainIterator end = chain.end();
  -  
  -  // we must always have something in the scope chain
  -  assert(iter != end);
  -
  -  PropertySlot slot;
  -  do { 
  -    ObjectImp *o = *iter;
  -    if (o->getPropertySlot(exec, ident, slot))
  -      return Reference(o, ident);
  -    
  -    ++iter;
  -  } while (iter != end);
  -
  -  return Reference(ident);
  -}
  -
   // ------------------------------ GroupNode ------------------------------------
   
   // ECMA 11.1.6
  @@ -335,11 +299,6 @@
     return group->evaluate(exec);
   }
   
  -Reference GroupNode::evaluateReference(ExecState *exec)
  -{
  -  return group->evaluateReference(exec);
  -}
  -
   // ------------------------------ ElementNode ----------------------------------
   
   // ECMA 11.1.4
  @@ -442,19 +401,6 @@
     return o->get(exec, Identifier(v2->toString(exec)));
   }
   
  -Reference BracketAccessorNode::evaluateReference(ExecState *exec)
  -{
  -  ValueImp *v1 = expr1->evaluate(exec);
  -  KJS_CHECKEXCEPTIONREFERENCE
  -  ValueImp *v2 = expr2->evaluate(exec);
  -  KJS_CHECKEXCEPTIONREFERENCE
  -  ObjectImp *o = v1->toObject(exec);
  -  uint32_t i;
  -  if (v2->getUInt32(i))
  -    return Reference(o, i);
  -  return Reference(o, Identifier(v2->toString(exec)));
  -}
  -
   // ------------------------------ DotAccessorNode --------------------------------
   
   // ECMA 11.2.1b
  @@ -466,14 +412,6 @@
   
   }
   
  -Reference DotAccessorNode::evaluateReference(ExecState *exec)
  -{
  -  ValueImp *v = expr->evaluate(exec);
  -  KJS_CHECKEXCEPTIONREFERENCE
  -  ObjectImp *o = v->toObject(exec);
  -  return Reference(o, ident);
  -}
  -
   // ------------------------------ ArgumentListNode -----------------------------
   
   ValueImp *ArgumentListNode::evaluate(ExecState */*exec*/)
  @@ -701,32 +639,164 @@
     return func->call(exec, thisObj, argList);
   }
   
  -// ------------------------------ PostfixNode ----------------------------------
  -
   // ECMA 11.3
  -ValueImp *PostfixNode::evaluate(ExecState *exec)
  +
  +// ------------------------------ PostfixResolveNode ----------------------------------
  +
  +ValueImp *PostfixResolveNode::evaluate(ExecState *exec)
   {
  -  Reference ref = expr->evaluateReference(exec);
  +  const ScopeChain& chain = exec->context().imp()->scopeChain();
  +  ScopeChainIterator iter = chain.begin();
  +  ScopeChainIterator end = chain.end();
  +  
  +  // we must always have something in the scope chain
  +  assert(iter != end);
  +
  +  PropertySlot slot;
  +  ObjectImp *base;
  +  do { 
  +    base = *iter;
  +    if (base->getPropertySlot(exec, m_ident, slot)) {
  +        ValueImp *v = slot.getValue(exec, m_ident);
  +
  +        bool knownToBeInteger;
  +        double n = v->toNumber(exec, knownToBeInteger);
  +        
  +        double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
  +        base->put(exec, m_ident, jsNumber(newValue, knownToBeInteger));
  +        
  +        return jsNumber(n, knownToBeInteger);
  +    }
  +
  +    ++iter;
  +  } while (iter != end);
  +
  +  return undefinedVariableError(exec, m_ident);
  +}
  +
  +// ------------------------------ PostfixBracketNode ----------------------------------
  +
  +ValueImp *PostfixBracketNode::evaluate(ExecState *exec)
  +{
  +  ValueImp *baseValue = m_base->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +  ValueImp *subscript = m_subscript->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +
  +  ObjectImp *base = baseValue->toObject(exec);
  +
  +  uint32_t propertyIndex;
  +  if (subscript->getUInt32(propertyIndex)) {
  +    PropertySlot slot;
  +    ValueImp *v = base->getPropertySlot(exec, propertyIndex, slot) ? slot.getValue(exec, propertyIndex) : Undefined();
  +    KJS_CHECKEXCEPTIONVALUE
  +
  +    bool knownToBeInteger;
  +    double n = v->toNumber(exec, knownToBeInteger);
  +
  +    double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
  +    base->put(exec, propertyIndex, jsNumber(newValue, knownToBeInteger));
  +        
  +    return jsNumber(n, knownToBeInteger);
  +  }
  +
  +  Identifier propertyName(subscript->toString(exec));
  +  PropertySlot slot;
  +  ValueImp *v = base->getPropertySlot(exec, propertyName, slot) ? slot.getValue(exec, propertyName) : Undefined();
     KJS_CHECKEXCEPTIONVALUE
  -  ValueImp *v = ref.getValue(exec);
   
     bool knownToBeInteger;
     double n = v->toNumber(exec, knownToBeInteger);
  +  
  +  double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
  +  base->put(exec, propertyName, jsNumber(newValue, knownToBeInteger));
  +        
  +  return jsNumber(n, knownToBeInteger);
  +}
  +
  +// ------------------------------ PostfixDotNode ----------------------------------
   
  -  double newValue = (oper == OpPlusPlus) ? n + 1 : n - 1;
  -  ref.putValue(exec, jsNumber(newValue, knownToBeInteger));
  +ValueImp *PostfixDotNode::evaluate(ExecState *exec)
  +{
  +  ValueImp *baseValue = m_base->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +  ObjectImp *base = baseValue->toObject(exec);
   
  +  PropertySlot slot;
  +  ValueImp *v = base->getPropertySlot(exec, m_ident, slot) ? slot.getValue(exec, m_ident) : Undefined();
  +  KJS_CHECKEXCEPTIONVALUE
  +
  +  bool knownToBeInteger;
  +  double n = v->toNumber(exec, knownToBeInteger);
  +  
  +  double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
  +  base->put(exec, m_ident, jsNumber(newValue, knownToBeInteger));
  +        
     return jsNumber(n, knownToBeInteger);
   }
   
  -// ------------------------------ DeleteNode -----------------------------------
  -
   // ECMA 11.4.1
  -ValueImp *DeleteNode::evaluate(ExecState *exec)
  +
  +// ------------------------------ DeleteResolveNode -----------------------------------
  +ValueImp *DeleteResolveNode::evaluate(ExecState *exec)
   {
  -  Reference ref = expr->evaluateReference(exec);
  +  const ScopeChain& chain = exec->context().imp()->scopeChain();
  +  ScopeChainIterator iter = chain.begin();
  +  ScopeChainIterator end = chain.end();
  +  
  +  // we must always have something in the scope chain
  +  assert(iter != end);
  +
  +  PropertySlot slot;
  +  ObjectImp *base;
  +  do { 
  +    base = *iter;
  +    if (base->getPropertySlot(exec, m_ident, slot)) {
  +        return jsBoolean(base->deleteProperty(exec, m_ident));
  +    }
  +
  +    ++iter;
  +  } while (iter != end);
  +
  +  return jsBoolean(true);
  +}
  +
  +// ------------------------------ DeleteBracketNode -----------------------------------
  +ValueImp *DeleteBracketNode::evaluate(ExecState *exec)
  +{
  +  ValueImp *baseValue = m_base->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +  ValueImp *subscript = m_subscript->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +
  +  ObjectImp *base = baseValue->toObject(exec);
  +
  +  uint32_t propertyIndex;
  +  if (subscript->getUInt32(propertyIndex))
  +      return jsBoolean(base->deleteProperty(exec, propertyIndex));
  +
  +  Identifier propertyName(subscript->toString(exec));
  +  return jsBoolean(base->deleteProperty(exec, propertyName));
  +}
  +
  +// ------------------------------ DeleteDotNode -----------------------------------
  +ValueImp *DeleteDotNode::evaluate(ExecState *exec)
  +{
  +  ValueImp *baseValue = m_base->evaluate(exec);
  +  ObjectImp *base = baseValue->toObject(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +
  +  return jsBoolean(base->deleteProperty(exec, m_ident));
  +}
  +
  +// ------------------------------ DeleteValueNode -----------------------------------
  +ValueImp *DeleteValueNode::evaluate(ExecState *exec)
  +{
  +  m_expr->evaluate(exec);
     KJS_CHECKEXCEPTIONVALUE
  -  return jsBoolean(ref.deleteValue(exec));
  +
  +  // delete on a non-location expression ignores the value and returns true
  +  return jsBoolean(true);
   }
   
   // ------------------------------ VoidNode -------------------------------------
  @@ -740,62 +810,161 @@
     return Undefined();
   }
   
  -// ------------------------------ TypeOfNode -----------------------------------
  -
   // ECMA 11.4.3
  -ValueImp *TypeOfNode::evaluate(ExecState *exec)
  +
  +// ------------------------------ TypeOfValueNode -----------------------------------
  +
  +static ValueImp *typeStringForValue(ValueImp *v)
   {
  -  const char *s = 0L;
  -  Reference ref = expr->evaluateReference(exec);
  -  KJS_CHECKEXCEPTIONVALUE
  -  ValueImp *b = ref.baseIfMutable();
  -  if (b && b->isNull())
  -    return jsString("undefined");
  -  ValueImp *v = ref.getValue(exec);
  -  switch (v->type())
  -    {
  +    switch (v->type()) {
       case UndefinedType:
  -      s = "undefined";
  -      break;
  +        return jsString("undefined");
       case NullType:
  -      s = "object";
  -      break;
  +        return jsString("object");
       case BooleanType:
  -      s = "boolean";
  -      break;
  +        return jsString("boolean");
       case NumberType:
  -      s = "number";
  -      break;
  +        return jsString("number");
       case StringType:
  -      s = "string";
  -      break;
  +        return jsString("string");
       default:
  -      if (v->isObject() && static_cast<ObjectImp*>(v)->implementsCall())
  -	s = "function";
  -      else
  -	s = "object";
  -      break;
  +        if (v->isObject() && static_cast<ObjectImp*>(v)->implementsCall())
  +            return jsString("function");
  +        else
  +            return jsString("object");
  +    }
  +}
  +
  +ValueImp *TypeOfResolveNode::evaluate(ExecState *exec)
  +{
  +  const ScopeChain& chain = exec->context().imp()->scopeChain();
  +  ScopeChainIterator iter = chain.begin();
  +  ScopeChainIterator end = chain.end();
  +  
  +  // we must always have something in the scope chain
  +  assert(iter != end);
  +
  +  PropertySlot slot;
  +  ObjectImp *base;
  +  do { 
  +    base = *iter;
  +    if (base->getPropertySlot(exec, m_ident, slot)) {
  +        ValueImp *v = slot.getValue(exec, m_ident);
  +        return typeStringForValue(v);
       }
   
  -  return jsString(s);
  +    ++iter;
  +  } while (iter != end);
  +
  +  return jsString("undefined");
   }
   
  -// ------------------------------ PrefixNode -----------------------------------
  +// ------------------------------ TypeOfValueNode -----------------------------------
  +
  +ValueImp *TypeOfValueNode::evaluate(ExecState *exec)
  +{
  +  ValueImp *v = m_expr->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +
  +  return typeStringForValue(v);
  +}
   
   // ECMA 11.4.4 and 11.4.5
  -ValueImp *PrefixNode::evaluate(ExecState *exec)
  +
  +// ------------------------------ PrefixResolveNode ----------------------------------
  +
  +ValueImp *PrefixResolveNode::evaluate(ExecState *exec)
  +{
  +  const ScopeChain& chain = exec->context().imp()->scopeChain();
  +  ScopeChainIterator iter = chain.begin();
  +  ScopeChainIterator end = chain.end();
  +  
  +  // we must always have something in the scope chain
  +  assert(iter != end);
  +
  +  PropertySlot slot;
  +  ObjectImp *base;
  +  do { 
  +    base = *iter;
  +    if (base->getPropertySlot(exec, m_ident, slot)) {
  +        ValueImp *v = slot.getValue(exec, m_ident);
  +
  +        bool knownToBeInteger;
  +        double n = v->toNumber(exec, knownToBeInteger);
  +        
  +        double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
  +        ValueImp *n2 = jsNumber(newValue, knownToBeInteger);
  +        base->put(exec, m_ident, n2);
  +
  +        return n2;
  +    }
  +
  +    ++iter;
  +  } while (iter != end);
  +
  +  return undefinedVariableError(exec, m_ident);
  +}
  +
  +// ------------------------------ PrefixBracketNode ----------------------------------
  +
  +ValueImp *PrefixBracketNode::evaluate(ExecState *exec)
   {
  -  Reference ref = expr->evaluateReference(exec);
  +  ValueImp *baseValue = m_base->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +  ValueImp *subscript = m_subscript->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +
  +  ObjectImp *base = baseValue->toObject(exec);
  +
  +  uint32_t propertyIndex;
  +  if (subscript->getUInt32(propertyIndex)) {
  +    PropertySlot slot;
  +    ValueImp *v = base->getPropertySlot(exec, propertyIndex, slot) ? slot.getValue(exec, propertyIndex) : Undefined();
  +    KJS_CHECKEXCEPTIONVALUE
  +
  +    bool knownToBeInteger;
  +    double n = v->toNumber(exec, knownToBeInteger);
  +
  +    double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
  +    ValueImp *n2 = jsNumber(newValue, knownToBeInteger);
  +    base->put(exec, propertyIndex, n2);
  +
  +    return n2;
  +  }
  +
  +  Identifier propertyName(subscript->toString(exec));
  +  PropertySlot slot;
  +  ValueImp *v = base->getPropertySlot(exec, propertyName, slot) ? slot.getValue(exec, propertyName) : Undefined();
     KJS_CHECKEXCEPTIONVALUE
  -  ValueImp *v = ref.getValue(exec);
   
     bool knownToBeInteger;
     double n = v->toNumber(exec, knownToBeInteger);
  -
  -  double newValue = (oper == OpPlusPlus) ? n + 1 : n - 1;
  +  
  +  double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
     ValueImp *n2 = jsNumber(newValue, knownToBeInteger);
  +  base->put(exec, propertyName, n2);
  +
  +  return n2;
  +}
  +
  +// ------------------------------ PrefixDotNode ----------------------------------
  +
  +ValueImp *PrefixDotNode::evaluate(ExecState *exec)
  +{
  +  ValueImp *baseValue = m_base->evaluate(exec);
  +  KJS_CHECKEXCEPTIONVALUE
  +  ObjectImp *base = baseValue->toObject(exec);
  +
  +  PropertySlot slot;
  +  ValueImp *v = base->getPropertySlot(exec, m_ident, slot) ? slot.getValue(exec, m_ident) : Undefined();
  +  KJS_CHECKEXCEPTIONVALUE
   
  -  ref.putValue(exec, n2);
  +  bool knownToBeInteger;
  +  double n = v->toNumber(exec, knownToBeInteger);
  +  
  +  double newValue = (m_oper == OpPlusPlus) ? n + 1 : n - 1;
  +  ValueImp *n2 = jsNumber(newValue, knownToBeInteger);
  +  base->put(exec, m_ident, n2);
   
     return n2;
   }
  @@ -1622,7 +1791,7 @@
     Completion c;
     ReferenceList propList;
   
  -  if ( varDecl ) {
  +  if (varDecl) {
       varDecl->evaluate(exec);
       KJS_CHECKEXCEPTION
     }
  @@ -1645,14 +1814,57 @@
   
     while (propIt != propList.end()) {
       Identifier name = propIt->getPropertyName(exec);
  -    if (!v->hasProperty(exec,name)) {
  +    if (!v->hasProperty(exec, name)) {
         propIt++;
         continue;
       }
   
  -    Reference ref = lexpr->evaluateReference(exec);
  +    ValueImp *str = jsString(name.ustring());
  +
  +    if (lexpr->isResolveNode()) {
  +        const Identifier &ident = static_cast<ResolveNode *>(lexpr.get())->identifier();
  +
  +        const ScopeChain& chain = exec->context().imp()->scopeChain();
  +        ScopeChainIterator iter = chain.begin();
  +        ScopeChainIterator end = chain.end();
  +  
  +        // we must always have something in the scope chain
  +        assert(iter != end);
  +
  +        PropertySlot slot;
  +        ObjectImp *o;
  +        do { 
  +            o = *iter;
  +            if (o->getPropertySlot(exec, ident, slot))
  +                o->put(exec, ident, str);
  +            
  +            ++iter;
  +        } while (iter != end);
  +        
  +        if (iter == end)
  +            o->put(exec, ident, str);
  +    } else if (lexpr->isDotAccessorNode()) {
  +        const Identifier& ident = static_cast<DotAccessorNode *>(lexpr.get())->identifier();
  +        ValueImp *v = static_cast<DotAccessorNode *>(lexpr.get())->base()->evaluate(exec);
  +        KJS_CHECKEXCEPTION
  +        ObjectImp *o = v->toObject(exec);
  +
  +        o->put(exec, ident, str);
  +    } else {
  +        assert(lexpr->isBracketAccessorNode());
  +        ValueImp *v = static_cast<BracketAccessorNode *>(lexpr.get())->base()->evaluate(exec);
  +        KJS_CHECKEXCEPTION
  +        ValueImp *v2 = static_cast<BracketAccessorNode *>(lexpr.get())->subscript()->evaluate(exec);
  +        KJS_CHECKEXCEPTION
  +        ObjectImp *o = v->toObject(exec);
  +
  +        uint32_t i;
  +        if (v2->getUInt32(i))
  +            o->put(exec, i, str);
  +        o->put(exec, Identifier(v2->toString(exec)), str);
  +    }
  +
       KJS_CHECKEXCEPTION
  -    ref.putValue(exec, String(name.ustring()));
   
       exec->context().imp()->seenLabels()->pushIteration();
       c = statement->execute(exec);
  
  
  
  1.35      +96 -19    JavaScriptCore/kjs/nodes.h
  
  Index: nodes.h
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/kjs/nodes.h,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- nodes.h	21 Sep 2005 05:53:05 -0000	1.34
  +++ nodes.h	24 Sep 2005 22:34:13 -0000	1.35
  @@ -85,7 +85,6 @@
       KJS_FAST_ALLOCATED;
   
       virtual ValueImp *evaluate(ExecState *exec) = 0;
  -    virtual Reference evaluateReference(ExecState *exec);
       UString toString() const;
       virtual void streamTo(SourceStream &s) const = 0;
       virtual void processVarDecls(ExecState */*exec*/) {}
  @@ -199,7 +198,6 @@
     public:
       ResolveNode(const Identifier &s) : ident(s) { }
       ValueImp *evaluate(ExecState *exec);
  -    virtual Reference evaluateReference(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
   
       virtual bool isLocation() const { return true; }
  @@ -214,7 +212,6 @@
     public:
       GroupNode(Node *g) : group(g) { }
       virtual ValueImp *evaluate(ExecState *exec);
  -    virtual Reference evaluateReference(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
   
       virtual bool isGroupNode() const { return true; }
  @@ -302,7 +299,6 @@
     public:
       BracketAccessorNode(Node *e1, Node *e2) : expr1(e1), expr2(e2) {}
       ValueImp *evaluate(ExecState *exec);
  -    virtual Reference evaluateReference(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
   
       virtual bool isLocation() const { return true; }
  @@ -319,7 +315,6 @@
     public:
       DotAccessorNode(Node *e, const Identifier &s) : expr(e), ident(s) { }
       ValueImp *evaluate(ExecState *exec);
  -    virtual Reference evaluateReference(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
   
       virtual bool isLocation() const { return true; }
  @@ -424,23 +419,74 @@
       virtual void streamTo(SourceStream &s) const;
     };
   
  -  class PostfixNode : public Node {
  +  class PostfixResolveNode : public Node {
     public:
  -    PostfixNode(Node *e, Operator o) : expr(e), oper(o) {}
  +    PostfixResolveNode(const Identifier& i, Operator o) : m_ident(i), m_oper(o) {}
       ValueImp *evaluate(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
     private:
  -    KXMLCore::SharedPtr<Node> expr;
  -    Operator oper;
  +    Identifier m_ident;
  +    Operator m_oper;
     };
   
  -  class DeleteNode : public Node {
  +  class PostfixBracketNode : public Node {
     public:
  -    DeleteNode(Node *e) : expr(e) {}
  +    PostfixBracketNode(Node *b, Node *s, Operator o) : m_base(b), m_subscript(s), m_oper(o) {}
       ValueImp *evaluate(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
     private:
  -    KXMLCore::SharedPtr<Node> expr;
  +    KXMLCore::SharedPtr<Node> m_base;
  +    KXMLCore::SharedPtr<Node> m_subscript;
  +    Operator m_oper;
  +  };
  +
  +  class PostfixDotNode : public Node {
  +  public:
  +    PostfixDotNode(Node *b, const Identifier& i, Operator o) : m_base(b), m_ident(i), m_oper(o) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    KXMLCore::SharedPtr<Node> m_base;
  +    Identifier m_ident;
  +    Operator m_oper;
  +  };
  +
  +  class DeleteResolveNode : public Node {
  +  public:
  +    DeleteResolveNode(const Identifier& i) : m_ident(i) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    Identifier m_ident;
  +  };
  +
  +  class DeleteBracketNode : public Node {
  +  public:
  +    DeleteBracketNode(Node *base, Node *subscript) : m_base(base), m_subscript(subscript) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    KXMLCore::SharedPtr<Node> m_base;
  +    KXMLCore::SharedPtr<Node> m_subscript;
  +  };
  +
  +  class DeleteDotNode : public Node {
  +  public:
  +    DeleteDotNode(Node *base, const Identifier& i) : m_base(base), m_ident(i) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    KXMLCore::SharedPtr<Node> m_base;
  +    Identifier m_ident;
  +  };
  +
  +  class DeleteValueNode : public Node {
  +  public:
  +    DeleteValueNode(Node *e) : m_expr(e) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    KXMLCore::SharedPtr<Node> m_expr;
     };
   
     class VoidNode : public Node {
  @@ -452,23 +498,54 @@
       KXMLCore::SharedPtr<Node> expr;
     };
   
  -  class TypeOfNode : public Node {
  +  class TypeOfResolveNode : public Node {
     public:
  -    TypeOfNode(Node *e) : expr(e) {}
  +    TypeOfResolveNode(const Identifier& i) : m_ident(i) {}
       ValueImp *evaluate(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
     private:
  -    KXMLCore::SharedPtr<Node> expr;
  +    Identifier m_ident;
     };
   
  -  class PrefixNode : public Node {
  +  class TypeOfValueNode : public Node {
     public:
  -    PrefixNode(Operator o, Node *e) : oper(o), expr(e) {}
  +    TypeOfValueNode(Node *e) : m_expr(e) {}
       ValueImp *evaluate(ExecState *exec);
       virtual void streamTo(SourceStream &s) const;
     private:
  -    Operator oper;
  -    KXMLCore::SharedPtr<Node> expr;
  +    KXMLCore::SharedPtr<Node> m_expr;
  +  };
  +
  +  class PrefixResolveNode : public Node {
  +  public:
  +    PrefixResolveNode(const Identifier& i, Operator o) : m_ident(i), m_oper(o) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    Identifier m_ident;
  +    Operator m_oper;
  +  };
  +
  +  class PrefixBracketNode : public Node {
  +  public:
  +    PrefixBracketNode(Node *b, Node *s, Operator o) : m_base(b), m_subscript(s), m_oper(o) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    KXMLCore::SharedPtr<Node> m_base;
  +    KXMLCore::SharedPtr<Node> m_subscript;
  +    Operator m_oper;
  +  };
  +
  +  class PrefixDotNode : public Node {
  +  public:
  +    PrefixDotNode(Node *b, const Identifier& i, Operator o) : m_base(b), m_ident(i), m_oper(o) {}
  +    ValueImp *evaluate(ExecState *exec);
  +    virtual void streamTo(SourceStream &s) const;
  +  private:
  +    KXMLCore::SharedPtr<Node> m_base;
  +    Identifier m_ident;
  +    Operator m_oper;
     };
   
     class UnaryPlusNode : public Node {
  
  
  
  1.17      +69 -9     JavaScriptCore/kjs/nodes2string.cpp
  
  Index: nodes2string.cpp
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/kjs/nodes2string.cpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- nodes2string.cpp	30 Aug 2005 23:56:14 -0000	1.16
  +++ nodes2string.cpp	24 Sep 2005 22:34:14 -0000	1.17
  @@ -228,18 +228,51 @@
     s << "(" << base << "." << ident << ")" << args;
   }
   
  -void PostfixNode::streamTo(SourceStream &s) const
  +void PostfixResolveNode::streamTo(SourceStream &s) const
   {
  -  s << expr;
  -  if (oper == OpPlusPlus)
  +  s << m_ident;
  +  if (m_oper == OpPlusPlus)
  +    s << "++";
  +  else
  +    s << "--";
  +}
  +
  +void PostfixBracketNode::streamTo(SourceStream &s) const
  +{
  +  s << m_base << "[" << m_subscript << "]";
  +  if (m_oper == OpPlusPlus)
       s << "++";
     else
       s << "--";
   }
   
  -void DeleteNode::streamTo(SourceStream &s) const
  +void PostfixDotNode::streamTo(SourceStream &s) const
   {
  -  s << "delete " << expr;
  +  s << m_base << "." << m_ident;
  +  if (m_oper == OpPlusPlus)
  +    s << "++";
  +  else
  +    s << "--";
  +}
  +
  +void DeleteResolveNode::streamTo(SourceStream &s) const
  +{
  +  s << "delete " << m_ident;
  +}
  +
  +void DeleteBracketNode::streamTo(SourceStream &s) const
  +{
  +  s << "delete " << m_base << "[" << m_subscript << "]";
  +}
  +
  +void DeleteDotNode::streamTo(SourceStream &s) const
  +{
  +  s << "delete " << m_base << "." << m_ident;
  +}
  +
  +void DeleteValueNode::streamTo(SourceStream &s) const
  +{
  +  s << "delete " << m_expr;
   }
   
   void VoidNode::streamTo(SourceStream &s) const
  @@ -247,14 +280,41 @@
     s << "void " << expr;
   }
   
  -void TypeOfNode::streamTo(SourceStream &s) const
  +void TypeOfValueNode::streamTo(SourceStream &s) const
  +{
  +  s << "typeof " << m_expr;
  +}
  +
  +void TypeOfResolveNode::streamTo(SourceStream &s) const
  +{
  +  s << "typeof " << m_ident;
  +}
  +
  +void PrefixResolveNode::streamTo(SourceStream &s) const
  +{
  +  if (m_oper == OpPlusPlus)
  +    s << "++";
  +  else
  +    s << "--";
  +  s << m_ident;
  +}
  +
  +void PrefixBracketNode::streamTo(SourceStream &s) const
   {
  -  s << "typeof " << expr;
  +  if (m_oper == OpPlusPlus)
  +    s << "++";
  +  else
  +    s << "--";
  +  s << m_base << "[" << m_subscript << "]";
   }
   
  -void PrefixNode::streamTo(SourceStream &s) const
  +void PrefixDotNode::streamTo(SourceStream &s) const
   {
  -  s << expr << (oper == OpPlusPlus ? "++" : "--");
  +  if (m_oper == OpPlusPlus)
  +    s << "++";
  +  else
  +    s << "--";
  +  s << m_base << "." << m_ident;
   }
   
   void UnaryPlusNode::streamTo(SourceStream &s) const
  
  
  
  1.15      +0 -70     JavaScriptCore/kjs/reference.cpp
  
  Index: reference.cpp
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/kjs/reference.cpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- reference.cpp	16 Aug 2005 00:47:26 -0000	1.14
  +++ reference.cpp	24 Sep 2005 22:34:14 -0000	1.15
  @@ -29,7 +29,6 @@
   
   Reference::Reference(ObjectImp *b, const Identifier& p)
     : base(b),
  -    baseIsValue(false),
       propertyNameIsNumber(false),
       prop(p)
   {
  @@ -38,51 +37,12 @@
   Reference::Reference(ObjectImp *b, unsigned p)
     : base(b),
       propertyNameAsNumber(p),
  -    baseIsValue(false),
       propertyNameIsNumber(true)
   {
   }
   
  -Reference::Reference(const Identifier& p)
  -  : base(jsNull()),
  -    baseIsValue(false),
  -    propertyNameIsNumber(false),
  -    prop(p)
  -{
  -}
  -
  -Reference::Reference(unsigned p)
  -  : base(jsNull()),
  -    propertyNameAsNumber(p),
  -    baseIsValue(false),
  -    propertyNameIsNumber(true)
  -{
  -}
  -
  -Reference Reference::makeValueReference(ValueImp *v)
  -{
  -  Reference valueRef;
  -  valueRef.base = v;
  -  valueRef.baseIsValue = true;
  -  return valueRef;
  -}
  -
  -ValueImp *Reference::getBase(ExecState *exec) const
  -{
  -  if (baseIsValue)
  -    return throwError(exec, ReferenceError, "Invalid reference base");
  -  return base;
  -}
  -
   Identifier Reference::getPropertyName(ExecState *exec) const
   {
  -  if (baseIsValue) {
  -    // the spec wants a runtime error here. But getValue() and putValue()
  -    // will catch this case on their own earlier. When returning a Null
  -    // string we should be on the safe side.
  -    return Identifier();
  -  }
  -
     if (propertyNameIsNumber && prop.isNull())
       prop = Identifier::from(propertyNameAsNumber);
     return prop;
  @@ -90,9 +50,6 @@
   
   ValueImp *Reference::getValue(ExecState *exec) const 
   {
  -  if (baseIsValue)
  -    return base;
  -
     ValueImp *o = base;
     if (!o || !o->isObject()) {
       if (!o || o->isNull())
  @@ -105,35 +62,8 @@
     return static_cast<ObjectImp*>(o)->get(exec, prop);
   }
   
  -void Reference::putValue(ExecState *exec, ValueImp *w)
  -{
  -  if (baseIsValue) {
  -    throwError(exec, ReferenceError);
  -    return;
  -  }
  -
  -#ifdef KJS_VERBOSE
  -  printInfo(exec,(UString("setting property ")+getPropertyName(exec).ustring()).cstring().c_str(),w);
  -#endif
  -
  -  ValueImp *o = base;
  -  Type t = o ? o->type() : NullType;
  -
  -  if (t == NullType)
  -    o = exec->lexicalInterpreter()->globalObject();
  -
  -  if (propertyNameIsNumber)
  -    return static_cast<ObjectImp*>(o)->put(exec, propertyNameAsNumber, w);
  -  return static_cast<ObjectImp*>(o)->put(exec, prop, w);
  -}
  -
   bool Reference::deleteValue(ExecState *exec)
   {
  -  if (baseIsValue) {
  -    throwError(exec, ReferenceError);
  -    return false;
  -  }
  -
     ValueImp *o = base;
     Type t = o ? o->type() : NullType;
   
  
  
  
  1.14      +0 -15     JavaScriptCore/kjs/reference.h
  
  Index: reference.h
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/kjs/reference.h,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- reference.h	19 Sep 2005 06:57:28 -0000	1.13
  +++ reference.h	24 Sep 2005 22:34:14 -0000	1.14
  @@ -36,19 +36,8 @@
     public:
       Reference(ObjectImp *b, const Identifier& p);
       Reference(ObjectImp *b, unsigned p);
  -    Reference(const Identifier& p);
  -    Reference(unsigned p);
  -    static Reference makeValueReference(ValueImp *);
       
       /**
  -     * Performs the GetBase type conversion operation on this value (ECMA 8.7)
  -     *
  -     * Since references are supposed to have an Object or null as their base,
  -     * this method is guaranteed to return either Null() or an Object value.
  -     */
  -    ValueImp *getBase(ExecState *exec) const;
  -
  -    /**
        * Performs the GetPropertyName type conversion operation on this value
        * (ECMA 8.7)
        */
  @@ -64,11 +53,8 @@
        * Performs the PutValue type conversion operation on this value
        * (ECMA 8.7.1)
        */
  -    void putValue(ExecState *exec, ValueImp *);
       bool deleteValue(ExecState *exec);
   
  -    ValueImp *baseIfMutable() const { return baseIsValue ? 0 : base; }
  -
     protected:
       ValueImp *base;
   
  @@ -76,7 +62,6 @@
       Reference() { }
   
       unsigned propertyNameAsNumber;
  -    bool baseIsValue;
       bool propertyNameIsNumber;
       mutable Identifier prop;
     };
  
  
  
  1.44      +371 -250  JavaScriptCore/tests/mozilla/expected.html
  
  Index: expected.html
  ===================================================================
  RCS file: /cvs/root/JavaScriptCore/tests/mozilla/expected.html,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- expected.html	7 Sep 2005 22:08:55 -0000	1.43
  +++ expected.html	24 Sep 2005 22:34:15 -0000	1.44
  @@ -7,11 +7,11 @@
   <p class='results_summary'>
   Test List: All tests<br>
   Skip List: (none)<br>
  -1116 test(s) selected, 1111 test(s) completed, 96 failures reported (8.64% failed)<br>
  -Engine command line: /Volumes/Home/ggaren/symroots/Development/testkjs <br>
  -OS type: Darwin darin-adler-portable.apple.com 8.2.0 Darwin Kernel Version 8.2.0: Fri Jun 24 17:46:54 PDT 2005; root:xnu-792.2.4.obj~3/RELEASE_PPC Power Macintosh powerpc<br>
  -Testcase execution time: 5 minutes, 30 seconds.<br>
  -Tests completed on Wed Sep  7 14:49:22 2005.<br><br>
  +1116 test(s) selected, 1111 test(s) completed, 94 failures reported (8.46% failed)<br>
  +Engine command line: /Users/mjs/Work/symroots/Development/testkjs <br>
  +OS type: Darwin maciej-stachowiaks-powerbook-g4-17.local 8.3.0 Darwin Kernel Version 8.3.0: Fri Sep 16 11:56:43 PDT 2005; root:xnu-792.6.17.obj~1/RELEASE_PPC Power Macintosh powerpc<br>
  +Testcase execution time: 5 minutes, 56 seconds.<br>
  +Tests completed on Thu Sep 22 23:37:42 2005.<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>
  @@ -89,6 +89,7 @@
   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>
   </tt><br>
   <a name='failure8'></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>
  @@ -104,18 +105,19 @@
   --> (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 Sep 07 2005 14:48:42 GMT-0700).toLocaleTimeString() = 2:48:42 PM PDT FAILED! expected: 14:48:42<br>
  ---> (Wed Sep 07 2005 22:48:42 GMT-0700).toLocaleTimeString() = 10:48:42 PM PDT FAILED! expected: 22:48:42<br>
  +--> (Thu Sep 22 2005 23:37:00 GMT-0700).toLocaleTimeString() = 11:37:00 PM PDT FAILED! expected: 23:37:00<br>
  +--> (Fri Sep 23 2005 07:37:00 GMT-0700).toLocaleTimeString() = 7:37:00 AM PDT FAILED! expected: 07:37:00<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>
   </tt><br>
  -<a name='failure9'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/Function/regress-193555.js'>ecma_3/Function/regress-193555.js</a> failed</b> <br>
  +<a name='failure9'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/FunExpr/fe-001.js'>ecma_3/FunExpr/fe-001.js</a> failed</b> <br>
    [ <a href='#failure8'>Previous Failure</a> | <a href='#failure10'>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 65: ReferenceError: Can't find variable: g<br>
  +--> STATUS: Function Expression Statements basic test.<br>
  +Exception, line 35: ReferenceError: Can't find variable: f<br>
   </tt><br>
   <a name='failure10'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/Function/regress-58274.js'>ecma_3/Function/regress-58274.js</a> failed</b> <br>
    [ <a href='#failure9'>Previous Failure</a> | <a href='#failure11'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  @@ -125,13 +127,12 @@
   yylex: ERROR.<br>
   Exception, line 83: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure11'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/FunExpr/fe-001.js'>ecma_3/FunExpr/fe-001.js</a> failed</b> <br>
  +<a name='failure11'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/Function/regress-193555.js'>ecma_3/Function/regress-193555.js</a> failed</b> <br>
    [ <a href='#failure10'>Previous Failure</a> | <a href='#failure12'>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>
  ---> STATUS: Function Expression Statements basic test.<br>
  -Exception, line 35: ReferenceError: Can't find variable: f<br>
  +Exception, line 65: ReferenceError: Can't find variable: g<br>
   </tt><br>
   <a name='failure12'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/Object/class-002.js'>ecma_3/Object/class-002.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='#failure11'>Previous Failure</a> | <a href='#failure13'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  @@ -272,27 +273,6 @@
   --> FAILED!: [reported from test()] Expect: ["ab", , ]<br>
   --> FAILED!: [reported from test()] Actual: ["ab", "b"]<br>
   --> FAILED!: [reported from test()] <br>
  ---> FAILED!: [reported from test()] Section 402 of test -<br>
  ---> FAILED!: [reported from test()] regexp = /^([^,]{1,3},){3}d/i<br>
  ---> FAILED!: [reported from test()] string = 'aaa,b,c,d'<br>
  ---> FAILED!: [reported from test()] ERROR !!! regexp FAILED to match anything !!!<br>
  ---> FAILED!: [reported from test()] Expect: ["aaa,b,c,d", "c,"]<br>
  ---> FAILED!: [reported from test()] Actual: null<br>
  ---> FAILED!: [reported from test()] <br>
  ---> FAILED!: [reported from test()] Section 403 of test -<br>
  ---> FAILED!: [reported from test()] regexp = /^([^,]{1,3},){3,}d/<br>
  ---> FAILED!: [reported from test()] string = 'aaa,b,c,d'<br>
  ---> FAILED!: [reported from test()] ERROR !!! regexp FAILED to match anything !!!<br>
  ---> FAILED!: [reported from test()] Expect: ["aaa,b,c,d", "c,"]<br>
  ---> FAILED!: [reported from test()] Actual: null<br>
  ---> FAILED!: [reported from test()] <br>
  ---> FAILED!: [reported from test()] Section 404 of test -<br>
  ---> FAILED!: [reported from test()] regexp = /^([^,]{1,3},){0,3}d/<br>
  ---> FAILED!: [reported from test()] string = 'aaa,b,c,d'<br>
  ---> FAILED!: [reported from test()] ERROR !!! regexp FAILED to match anything !!!<br>
  ---> FAILED!: [reported from test()] Expect: ["aaa,b,c,d", "c,"]<br>
  ---> FAILED!: [reported from test()] Actual: null<br>
  ---> FAILED!: [reported from test()] <br>
   --> FAILED!: [reported from test()] Section 412 of test -<br>
   --> FAILED!: [reported from test()] regexp = /^(a(b)?)+$/<br>
   --> FAILED!: [reported from test()] string = 'aba'<br>
  @@ -327,8 +307,168 @@
   --> FAILED!: [reported from test()] Actual: null<br>
   --> FAILED!: [reported from test()] <br>
   </tt><br>
  -<a name='failure18'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-100199.js'>ecma_3/RegExp/regress-100199.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=100199' target='other_window'>Bug Number 100199</a><br>
  +<a name='failure18'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-72964.js'>ecma_3/RegExp/regress-72964.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=72964' target='other_window'>Bug Number 72964</a><br>
    [ <a href='#failure17'>Previous Failure</a> | <a href='#failure19'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt>--> STATUS: Testing regular expressions containing non-Latin1 characters<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()] ERROR !!! regexp FAILED to match anything !!!<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()] ERROR !!! regexp FAILED to match anything !!!<br>
  +--> FAILED!: [reported from test()] Expect: ["<br>
  +--> FAILED!: [reported from test()] Actual: null<br>
  +--> FAILED!: [reported from test()] <br>
  +</tt><br>
  +<a name='failure19'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-78156.js'>ecma_3/RegExp/regress-78156.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=78156' target='other_window'>Bug Number 78156</a><br>
  + [ <a href='#failure18'>Previous Failure</a> | <a href='#failure20'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt>--> STATUS: Testing regular expressions with  ^, $, and the m flag -<br>
  +Failure messages were:<br>
  +--> FAILED!: [reported from test()] Section 2 of test -<br>
  +--> FAILED!: [reported from test()] regexp = /\d$/gm<br>
  +--> FAILED!: [reported from test()] string = 'aaa\n789\r\nccc\r\n345'<br>
  +--> FAILED!: [reported from test()] ERROR !!! match arrays have different lengths:<br>
  +--> FAILED!: [reported from test()] Expect: ["9", "5"]<br>
  +--> FAILED!: [reported from test()] Actual: ["5"]<br>
  +--> FAILED!: [reported from test()] <br>
  +--> FAILED!: [reported from test()] Section 4 of test -<br>
  +--> FAILED!: [reported from test()] regexp = /\d$/gm<br>
  +--> FAILED!: [reported from test()] string = 'aaa\n789\r\nccc\r\nddd'<br>
  +--> FAILED!: [reported from test()] ERROR !!! regexp FAILED to match anything !!!<br>
  +--> FAILED!: [reported from test()] Expect: ["9"]<br>
  +--> FAILED!: [reported from test()] Actual: null<br>
  +--> FAILED!: [reported from test()] <br>
  +</tt><br>
  +<a name='failure20'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-85721.js'>ecma_3/RegExp/regress-85721.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=85721' target='other_window'>Bug Number 85721</a><br>
  + [ <a href='#failure19'>Previous Failure</a> | <a href='#failure21'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt>--> STATUS: Performance: execution of regular expression<br>
  +Failure messages were:<br>
  +--> FAILED!: Section 4 of test -<br>
  +--> FAILED!: regexp = /[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: "]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: "]*)*")[^()<>@,;:".\\\[\]€-ÿ<br>
  +--> FAILED!: -]*(?:(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)|"[^\\€-ÿ<br>
  +--> FAILED!: "]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: "]*)*")[^()<>@,;:".\\\[\]€-ÿ<br>
  +--> FAILED!: -]*)*<[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:@[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:.[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*)*(?:,[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*@[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:.[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*)*)*:[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*)?(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: "]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: "]*)*")[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*@[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:.[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*)*>|(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: "]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: "]*)*")[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*@[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:.[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*(?:[^( <>@,;:".\\\[\]<br>
  +--> FAILED!: \[\]]|\\[^€-ÿ])*\])[ 	]*(?:\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:(?:\\[^€-ÿ]|\([^\\€-ÿ<br>
  +--> FAILED!: ()]*(?:\\[^€-ÿ][^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\))[^\\€-ÿ<br>
  +--> FAILED!: ()]*)*\)[ 	]*)*)*)/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>
  +--> FAILED!: Actual: null<br>
  +--> FAILED!: <br>
  +</tt><br>
  +<a name='failure21'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-100199.js'>ecma_3/RegExp/regress-100199.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=100199' target='other_window'>Bug Number 100199</a><br>
  + [ <a href='#failure20'>Previous Failure</a> | <a href='#failure22'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt>--> STATUS: [], [^] are valid RegExp conditions. Should not cause errors -<br>
   Failure messages were:<br>
   --> FAILED!: [reported from test()] Section 19 of test -<br>
  @@ -430,8 +570,8 @@
   --> FAILED!: [reported from test()] Actual: null<br>
   --> FAILED!: [reported from test()] <br>
   </tt><br>
  -<a name='failure19'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-188206.js'>ecma_3/RegExp/regress-188206.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=188206' target='other_window'>Bug Number 188206</a><br>
  - [ <a href='#failure18'>Previous Failure</a> | <a href='#failure20'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure22'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-188206.js'>ecma_3/RegExp/regress-188206.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=188206' target='other_window'>Bug Number 188206</a><br>
  + [ <a href='#failure21'>Previous Failure</a> | <a href='#failure23'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt>--> STATUS: Invalid use of regexp quantifiers should generate SyntaxErrors<br>
   Failure messages were:<br>
   --> FAILED!: [reported from test()] Section 1 of test -<br>
  @@ -492,8 +632,8 @@
   --> FAILED!: [reported from test()] Expected value 'SyntaxError', Actual value 'Did not generate ANY error!!!'<br>
   --> FAILED!: [reported from test()] <br>
   </tt><br>
  -<a name='failure20'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-209919.js'>ecma_3/RegExp/regress-209919.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=209919' target='other_window'>Bug Number 209919</a><br>
  - [ <a href='#failure19'>Previous Failure</a> | <a href='#failure21'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure23'></a><dd><b>Testcase <a target='other_window' href='./ecma_3/RegExp/regress-209919.js'>ecma_3/RegExp/regress-209919.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=209919' target='other_window'>Bug Number 209919</a><br>
  + [ <a href='#failure22'>Previous Failure</a> | <a href='#failure24'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt>--> STATUS: Testing regexp submatches with quantifiers<br>
   Failure messages were:<br>
   --> FAILED!: [reported from test()] Section 1 of test -<br>
  @@ -731,47 +871,71 @@
   yylex: ERROR.<br>
   Exception, line 118: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure29'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/function-001-n.js'>js1_2/function/function-001-n.js</a> failed</b> <br>
  +<a name='failure29'></a><dd><b>Testcase <a target='other_window' href='./js1_2/Objects/toString-001.js'>js1_2/Objects/toString-001.js</a> failed</b> <br>
    [ <a href='#failure28'>Previous Failure</a> | <a href='#failure30'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  -<tt>Expected exit code 3, got 0<br>
  +<tt>Expected exit code 0, got 3<br>
   Testcase terminated with signal 0<br>
   Complete testcase output was:<br>
  ---> function-001.js functions not separated by semicolons are errors in version 120 and higher<br>
  ---> eval("function f(){}function g(){}") = undefined FAILED! expected: error<br>
  -OK.<br>
  +--> JS1_2 Object.toString()<br>
  +Exception, line 104: TypeError: Object /^\{(.*)\}$/ (result of expression ^\{(.*)\}$) does not allow calls.<br>
   </tt><br>
  -<a name='failure30'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/Function_object.js'>js1_2/function/Function_object.js</a> failed</b> <br>
  +<a name='failure30'></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='#failure29'>Previous Failure</a> | <a href='#failure31'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
  +--> aString.concat([])      = test string FAILED! expected: test string[]<br>
  +--> aString.concat([1,2,3]) = test string1,2,3 FAILED! expected: test string[1, 2, 3]<br>
  +--> 'abcde'.concat([])      = abcde FAILED! expected: abcde[]<br>
  +--> 'abcde'.concat([1,2,3]) = abcde1,2,3 FAILED! expected: abcde[1, 2, 3]<br>
  +</tt><br>
  +<a name='failure31'></a><dd><b>Testcase <a target='other_window' href='./js1_2/String/slice.js'>js1_2/String/slice.js</a> failed</b> <br>
  + [ <a href='#failure30'>Previous Failure</a> | <a href='#failure32'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt><br>
  +Failure messages were:<br>
  +--> exhaustive String.slice test 1 = false FAILED! expected: true<br>
  +--> exhaustive String.slice test 2 = false FAILED! expected: true<br>
  +</tt><br>
  +<a name='failure32'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/Function_object.js'>js1_2/function/Function_object.js</a> failed</b> <br>
  + [ <a href='#failure31'>Previous Failure</a> | <a href='#failure33'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt><br>
  +Failure messages were:<br>
   --> f.name = undefined FAILED! expected: a_test_function<br>
   --> f.arity = undefined FAILED! expected: 3<br>
   --> (new Function()).name = undefined FAILED! expected: anonymous<br>
   } FAILED! expected: <br>
   </tt><br>
  -<a name='failure31'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/Number.js'>js1_2/function/Number.js</a> failed</b> <br>
  - [ <a href='#failure30'>Previous Failure</a> | <a href='#failure32'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure33'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/Number.js'>js1_2/function/Number.js</a> failed</b> <br>
  + [ <a href='#failure32'>Previous Failure</a> | <a href='#failure34'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> Number([1,2,3])          = NaN FAILED! expected: 3<br>
   </tt><br>
  -<a name='failure32'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/regexparg-1.js'>js1_2/function/regexparg-1.js</a> failed</b> <br>
  - [ <a href='#failure31'>Previous Failure</a> | <a href='#failure33'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure34'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/String.js'>js1_2/function/String.js</a> failed</b> <br>
  + [ <a href='#failure33'>Previous Failure</a> | <a href='#failure35'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt><br>
  +Failure messages were:<br>
  +--> String({p:1})            = [object Object] FAILED! expected: {p:1}<br>
  +--> String([1,2,3])             = 1,2,3 FAILED! expected: [1, 2, 3]<br>
  +</tt><br>
  +<a name='failure35'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/function-001-n.js'>js1_2/function/function-001-n.js</a> failed</b> <br>
  + [ <a href='#failure34'>Previous Failure</a> | <a href='#failure36'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt>Expected exit code 3, got 0<br>
  +Testcase terminated with signal 0<br>
  +Complete testcase output was:<br>
  +--> function-001.js functions not separated by semicolons are errors in version 120 and higher<br>
  +--> eval("function f(){}function g(){}") = undefined FAILED! expected: error<br>
  +OK.<br>
  +</tt><br>
  +<a name='failure36'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/regexparg-1.js'>js1_2/function/regexparg-1.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>
   <tt>Expected exit code 0, got 3<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>
   </tt><br>
  -<a name='failure33'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/String.js'>js1_2/function/String.js</a> failed</b> <br>
  - [ <a href='#failure32'>Previous Failure</a> | <a href='#failure34'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  -<tt><br>
  -Failure messages were:<br>
  ---> String({p:1})            = [object Object] FAILED! expected: {p:1}<br>
  ---> String([1,2,3])             = 1,2,3 FAILED! expected: [1, 2, 3]<br>
  -</tt><br>
  -<a name='failure34'></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='#failure33'>Previous Failure</a> | <a href='#failure35'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure37'></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='#failure36'>Previous Failure</a> | <a href='#failure38'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   } FAILED! expected: <br>
  @@ -780,8 +944,8 @@
   } FAILED! expected: <br>
   } FAILED! expected: <br>
   </tt><br>
  -<a name='failure35'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/tostring-2.js'>js1_2/function/tostring-2.js</a> failed</b> <br>
  - [ <a href='#failure34'>Previous Failure</a> | <a href='#failure36'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure38'></a><dd><b>Testcase <a target='other_window' href='./js1_2/function/tostring-2.js'>js1_2/function/tostring-2.js</a> failed</b> <br>
  + [ <a href='#failure37'>Previous Failure</a> | <a href='#failure39'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   } FAILED! expected: <br>
  @@ -794,54 +958,25 @@
   } FAILED! expected: <br>
   } FAILED! expected: <br>
   </tt><br>
  -<a name='failure36'></a><dd><b>Testcase <a target='other_window' href='./js1_2/Objects/toString-001.js'>js1_2/Objects/toString-001.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>
  -<tt>Expected exit code 0, got 3<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>
  -</tt><br>
  -<a name='failure37'></a><dd><b>Testcase <a target='other_window' href='./js1_2/operator/equality.js'>js1_2/operator/equality.js</a> failed</b> <br>
  - [ <a href='#failure36'>Previous Failure</a> | <a href='#failure38'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure39'></a><dd><b>Testcase <a target='other_window' href='./js1_2/operator/equality.js'>js1_2/operator/equality.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>
   <tt><br>
   Failure messages were:<br>
   --> (new String('x') == 'x')                  = true FAILED! expected: false<br>
   --> ('x' == new String('x'))                  = true FAILED! expected: false<br>
   </tt><br>
  -<a name='failure38'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/beginLine.js'>js1_2/regexp/beginLine.js</a> failed</b> <br>
  - [ <a href='#failure37'>Previous Failure</a> | <a href='#failure39'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  -<tt><br>
  -Failure messages were:<br>
  -123xyz'.match(new RegExp('^\d+')) = null FAILED! expected: 123<br>
  -</tt><br>
  -<a name='failure39'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/compile.js'>js1_2/regexp/compile.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>
  -<tt>Expected exit code 0, got 3<br>
  -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.%s) is not object.<br>
  -</tt><br>
  -<a name='failure40'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/endLine.js'>js1_2/regexp/endLine.js</a> failed</b> <br>
  +<a name='failure40'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_input.js'>js1_2/regexp/RegExp_input.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>
   <tt><br>
   Failure messages were:<br>
  -xyz'.match(new RegExp('\d+$')) = null FAILED! expected: 890<br>
  -</tt><br>
  -<a name='failure41'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_input.js'>js1_2/regexp/RegExp_input.js</a> failed</b> <br>
  - [ <a href='#failure40'>Previous Failure</a> | <a href='#failure42'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  -<tt><br>
  -Failure messages were:<br>
   --> RegExp.input = 'abcd12357efg'; /\d+/.exec() = null FAILED! expected: 12357<br>
   --> RegExp.input = 'abcd12357efg'; /[h-z]+/.exec() = un FAILED! expected: null<br>
   --> RegExp.input = 'abcd12357efg'; /\d+/.test() = false FAILED! expected: true<br>
   --> RegExp.input = 'abcd12357efg'; /[h-z]+/.test() = true FAILED! expected: false<br>
   --> RegExp.input = 'abcd12357efg'; (new RegExp('[h-z]+')).test() = true FAILED! expected: false<br>
   </tt><br>
  -<a name='failure42'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_input_as_array.js'>js1_2/regexp/RegExp_input_as_array.js</a> failed</b> <br>
  - [ <a href='#failure41'>Previous Failure</a> | <a href='#failure43'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure41'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_input_as_array.js'>js1_2/regexp/RegExp_input_as_array.js</a> failed</b> <br>
  + [ <a href='#failure40'>Previous Failure</a> | <a href='#failure42'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> RegExp['$_'] = 'abcd12357efg'; /\d+/.exec() = null FAILED! expected: 12357<br>
  @@ -850,15 +985,15 @@
   --> RegExp['$_'] = 'abcd12357efg'; /[h-z]+/.test() = true FAILED! expected: false<br>
   --> RegExp['$_'] = 'abcd12357efg'; (new RegExp('[h-z]+')).test() = true FAILED! expected: false<br>
   </tt><br>
  -<a name='failure43'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastIndex.js'>js1_2/regexp/RegExp_lastIndex.js</a> failed</b> <br>
  - [ <a href='#failure42'>Previous Failure</a> | <a href='#failure44'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure42'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastIndex.js'>js1_2/regexp/RegExp_lastIndex.js</a> failed</b> <br>
  + [ <a href='#failure41'>Previous Failure</a> | <a href='#failure43'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> re=/x./g; re.lastIndex=4; re.exec('xyabcdxa') = xa FAILED! expected: ["xa"]<br>
   --> re.exec('xyabcdef') = xy FAILED! expected: ["xy"]<br>
   </tt><br>
  -<a name='failure44'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastMatch.js'>js1_2/regexp/RegExp_lastMatch.js</a> failed</b> <br>
  - [ <a href='#failure43'>Previous Failure</a> | <a href='#failure45'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure43'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastMatch.js'>js1_2/regexp/RegExp_lastMatch.js</a> failed</b> <br>
  + [ <a href='#failure42'>Previous Failure</a> | <a href='#failure44'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> 'foo'.match(/foo/); RegExp.lastMatch = undefined FAILED! expected: foo<br>
  @@ -868,8 +1003,8 @@
   --> 'abcdefg'.match(/^..(cd)[a-z]+/); RegExp.lastMatch = undefined FAILED! expected: abcdefg<br>
   --> 'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); RegExp.lastMatch = undefined FAILED! expected: abcdefgabcdefg<br>
   </tt><br>
  -<a name='failure45'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastMatch_as_array.js'>js1_2/regexp/RegExp_lastMatch_as_array.js</a> failed</b> <br>
  - [ <a href='#failure44'>Previous Failure</a> | <a href='#failure46'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure44'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastMatch_as_array.js'>js1_2/regexp/RegExp_lastMatch_as_array.js</a> failed</b> <br>
  + [ <a href='#failure43'>Previous Failure</a> | <a href='#failure45'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> 'foo'.match(/foo/); RegExp['$&'] = undefined FAILED! expected: foo<br>
  @@ -879,8 +1014,8 @@
   --> 'abcdefg'.match(/^..(cd)[a-z]+/); RegExp['$&'] = undefined FAILED! expected: abcdefg<br>
   --> 'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); RegExp['$&'] = undefined FAILED! expected: abcdefgabcdefg<br>
   </tt><br>
  -<a name='failure46'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastParen.js'>js1_2/regexp/RegExp_lastParen.js</a> failed</b> <br>
  - [ <a href='#failure45'>Previous Failure</a> | <a href='#failure47'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure45'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastParen.js'>js1_2/regexp/RegExp_lastParen.js</a> failed</b> <br>
  + [ <a href='#failure44'>Previous Failure</a> | <a href='#failure46'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> 'abcd'.match(/(abc)d/); RegExp.lastParen = undefined FAILED! expected: abc<br>
  @@ -893,8 +1028,8 @@
   --> 'abcdefg'.match(new RegExp('(^a)bc')); RegExp.lastParen = undefined FAILED! expected: a<br>
   --> 'abcdefg'.match(/bc/); RegExp.lastParen = undefined FAILED! expected: <br>
   </tt><br>
  -<a name='failure47'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastParen_as_array.js'>js1_2/regexp/RegExp_lastParen_as_array.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>
  +<a name='failure46'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_lastParen_as_array.js'>js1_2/regexp/RegExp_lastParen_as_array.js</a> failed</b> <br>
  + [ <a href='#failure45'>Previous Failure</a> | <a href='#failure47'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> 'abcd'.match(/(abc)d/); RegExp['$+'] = undefined FAILED! expected: abc<br>
  @@ -907,8 +1042,8 @@
   --> 'abcdefg'.match(new RegExp('(^a)bc')); RegExp['$+'] = undefined FAILED! expected: a<br>
   --> 'abcdefg'.match(/bc/); RegExp['$+'] = undefined FAILED! expected: <br>
   </tt><br>
  -<a name='failure48'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_leftContext.js'>js1_2/regexp/RegExp_leftContext.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>
  +<a name='failure47'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_leftContext.js'>js1_2/regexp/RegExp_leftContext.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>
   --> 'abc123xyz'.match(/123/); RegExp.leftContext = undefined FAILED! expected: abc<br>
  @@ -919,8 +1054,8 @@
   --> 'xxxx'.match(new RegExp('$')); RegExp.leftContext = undefined FAILED! expected: xxxx<br>
   --> 'test'.match(new RegExp('^')); RegExp.leftContext = undefined FAILED! expected: <br>
   </tt><br>
  -<a name='failure49'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_leftContext_as_array.js'>js1_2/regexp/RegExp_leftContext_as_array.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>
  +<a name='failure48'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_leftContext_as_array.js'>js1_2/regexp/RegExp_leftContext_as_array.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><br>
   Failure messages were:<br>
   --> 'abc123xyz'.match(/123/); RegExp['$`'] = undefined FAILED! expected: abc<br>
  @@ -931,8 +1066,8 @@
   --> 'xxxx'.match(new RegExp('$')); RegExp['$`'] = undefined FAILED! expected: xxxx<br>
   --> 'test'.match(new RegExp('^')); RegExp['$`'] = undefined FAILED! expected: <br>
   </tt><br>
  -<a name='failure50'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_multiline.js'>js1_2/regexp/RegExp_multiline.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>
  +<a name='failure49'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_multiline.js'>js1_2/regexp/RegExp_multiline.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><br>
   Failure messages were:<br>
   --> RegExp.multiline = undefined FAILED! expected: false<br>
  @@ -942,8 +1077,8 @@
   --> (multiline == true) 'a11\na22\na23\na24'.match(/a..$/g) = a24 FAILED! expected: a11,a22,a23,a24<br>
   --> (multiline == true) 'a11\na22\na23\na24'.match(new RegExp('a..$','g')) = a24 FAILED! expected: a11,a22,a23,a24<br>
   </tt><br>
  -<a name='failure51'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_multiline_as_array.js'>js1_2/regexp/RegExp_multiline_as_array.js</a> failed</b> <br>
  - [ <a href='#failure50'>Previous Failure</a> | <a href='#failure52'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure50'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_multiline_as_array.js'>js1_2/regexp/RegExp_multiline_as_array.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><br>
   Failure messages were:<br>
   --> RegExp['$*'] = undefined FAILED! expected: false<br>
  @@ -953,8 +1088,8 @@
   --> (['$*'] == true) 'a11\na22\na23\na24'.match(/a..$/g) = a24 FAILED! expected: a11,a22,a23,a24<br>
   --> (['$*'] == true) 'a11\na22\na23\na24'.match(new RegExp('a..$','g')) = a24 FAILED! expected: a11,a22,a23,a24<br>
   </tt><br>
  -<a name='failure52'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_rightContext.js'>js1_2/regexp/RegExp_rightContext.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>
  +<a name='failure51'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_rightContext.js'>js1_2/regexp/RegExp_rightContext.js</a> failed</b> <br>
  + [ <a href='#failure50'>Previous Failure</a> | <a href='#failure52'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> 'abc123xyz'.match(/123/); RegExp.rightContext = undefined FAILED! expected: xyz<br>
  @@ -965,8 +1100,8 @@
   --> 'xxxx'.match(new RegExp('$')); RegExp.rightContext = undefined FAILED! expected: <br>
   --> 'test'.match(new RegExp('^')); RegExp.rightContext = undefined FAILED! expected: test<br>
   </tt><br>
  -<a name='failure53'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_rightContext_as_array.js'>js1_2/regexp/RegExp_rightContext_as_array.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>
  +<a name='failure52'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/RegExp_rightContext_as_array.js'>js1_2/regexp/RegExp_rightContext_as_array.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><br>
   Failure messages were:<br>
   --> 'abc123xyz'.match(/123/); RegExp['$''] = undefined FAILED! expected: xyz<br>
  @@ -977,24 +1112,45 @@
   --> 'xxxx'.match(new RegExp('$')); RegExp['$''] = undefined FAILED! expected: <br>
   --> 'test'.match(new RegExp('^')); RegExp['$''] = undefined FAILED! expected: test<br>
   </tt><br>
  -<a name='failure54'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/regress-6359.js'>js1_2/regexp/regress-6359.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=http://bugzilla.mozilla.org/show_bug.cgi?id=6359' target='other_window'>Bug Number http://bugzilla.mozilla.org/show_bug.cgi?id=6359</a><br>
  +<a name='failure53'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/beginLine.js'>js1_2/regexp/beginLine.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><br>
  +Failure messages were:<br>
  +123xyz'.match(new RegExp('^\d+')) = null FAILED! expected: 123<br>
  +</tt><br>
  +<a name='failure54'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/compile.js'>js1_2/regexp/compile.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>
  +--> 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>
  +</tt><br>
  +<a name='failure55'></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='#failure54'>Previous Failure</a> | <a href='#failure56'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<tt><br>
  +Failure messages were:<br>
  +xyz'.match(new RegExp('\d+$')) = null FAILED! expected: 890<br>
  +</tt><br>
  +<a name='failure56'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/regress-6359.js'>js1_2/regexp/regress-6359.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=http://bugzilla.mozilla.org/show_bug.cgi?id=6359' target='other_window'>Bug Number http://bugzilla.mozilla.org/show_bug.cgi?id=6359</a><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>
   --> 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>
   </tt><br>
  -<a name='failure55'></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='#failure54'>Previous Failure</a> | <a href='#failure56'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure57'></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='#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>
   --> 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>
   </tt><br>
  -<a name='failure56'></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='#failure55'>Previous Failure</a> | <a href='#failure57'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure58'></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='#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>
  @@ -1002,14 +1158,14 @@
   --> 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>
   </tt><br>
  -<a name='failure57'></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='#failure56'>Previous Failure</a> | <a href='#failure58'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure59'></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='#failure58'>Previous Failure</a> | <a href='#failure60'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> 'ab a  b'.match(/a{2}/) = null FAILED! expected: a<br>
   </tt><br>
  -<a name='failure58'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/string_split.js'>js1_2/regexp/string_split.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>
  +<a name='failure60'></a><dd><b>Testcase <a target='other_window' href='./js1_2/regexp/string_split.js'>js1_2/regexp/string_split.js</a> failed</b> <br>
  + [ <a href='#failure59'>Previous Failure</a> | <a href='#failure61'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
   --> 'abc'.split(/[a-z]/) = ,,, FAILED! expected: ,,<br>
  @@ -1017,22 +1173,6 @@
   --> 'abc'.split(new RegExp('[a-z]')) = ,,, FAILED! expected: ,,<br>
   --> 'abc'.split(new RegExp('[a-z]')) = ,,, FAILED! expected: ,,<br>
   </tt><br>
  -<a name='failure59'></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='#failure58'>Previous Failure</a> | <a href='#failure60'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  -<tt><br>
  -Failure messages were:<br>
  ---> aString.concat([])      = test string FAILED! expected: test string[]<br>
  ---> aString.concat([1,2,3]) = test string1,2,3 FAILED! expected: test string[1, 2, 3]<br>
  ---> 'abcde'.concat([])      = abcde FAILED! expected: abcde[]<br>
  ---> 'abcde'.concat([1,2,3]) = abcde1,2,3 FAILED! expected: abcde[1, 2, 3]<br>
  -</tt><br>
  -<a name='failure60'></a><dd><b>Testcase <a target='other_window' href='./js1_2/String/slice.js'>js1_2/String/slice.js</a> failed</b> <br>
  - [ <a href='#failure59'>Previous Failure</a> | <a href='#failure61'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  -<tt><br>
  -Failure messages were:<br>
  ---> exhaustive String.slice test 1 = false FAILED! expected: true<br>
  ---> exhaustive String.slice test 2 = false FAILED! expected: true<br>
  -</tt><br>
   <a name='failure61'></a><dd><b>Testcase <a target='other_window' href='./js1_2/version120/boolean-001.js'>js1_2/version120/boolean-001.js</a> failed</b> <br>
    [ <a href='#failure60'>Previous Failure</a> | <a href='#failure62'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
  @@ -1047,7 +1187,7 @@
   --> Section 2 of test - got Error: Can't find variable: it FAILED! expected: a "read-only" error<br>
   --> Section 3 of test - got Error: Can't find variable: it FAILED! expected: a "read-only" error<br>
   </tt><br>
  -<a name='failure63'></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 name='failure63'></a><dd><b>Testcase <a target='other_window' href='./js1_3/Script/function-001-n.js'>js1_3/Script/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='#failure62'>Previous Failure</a> | <a href='#failure64'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt>Expected exit code 3, got 0<br>
   Testcase terminated with signal 0<br>
  @@ -1057,8 +1197,16 @@
   --> eval("function f(){}function g(){}") = undefined FAILED! expected: error<br>
   OK.<br>
   </tt><br>
  -<a name='failure64'></a><dd><b>Testcase <a target='other_window' href='./js1_3/Script/function-001-n.js'>js1_3/Script/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 name='failure64'></a><dd><b>Testcase <a target='other_window' href='./js1_3/Script/script-001.js'>js1_3/Script/script-001.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>
  +--> script-001 NativeScript<br>
  +Exception, line 134: ReferenceError: Can't find variable: Script<br>
  +</tt><br>
  +<a name='failure65'></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='#failure64'>Previous Failure</a> | <a href='#failure66'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt>Expected exit code 3, got 0<br>
   Testcase terminated with signal 0<br>
   Complete testcase output was:<br>
  @@ -1067,135 +1215,139 @@
   --> eval("function f(){}function g(){}") = undefined FAILED! expected: error<br>
   OK.<br>
   </tt><br>
  -<a name='failure65'></a><dd><b>Testcase <a target='other_window' href='./js1_3/Script/script-001.js'>js1_3/Script/script-001.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>
  -<tt>Expected exit code 0, got 3<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>
  -</tt><br>
  -<a name='failure66'></a><dd><b>Testcase <a target='other_window' href='./js1_4/Regress/function-002.js'>js1_4/Regress/function-002.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=330462' target='other_window'>Bug Number 330462</a><br>
  +<a name='failure66'></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 href='#failure65'>Previous Failure</a> | <a href='#failure67'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt><br>
   Failure messages were:<br>
  ---> f1.toString() == dec1 = false FAILED! expected: true<br>
  +--> StripSpaces(Array.prototype.concat.toString()).substring(0,17) = (InternalFunction FAILED! expected: functionconcat(){<br>
   </tt><br>
  -<a name='failure67'></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='failure67'></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='#failure66'>Previous Failure</a> | <a href='#failure68'>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: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure68'></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='failure68'></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='#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 42: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure69'></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='failure69'></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='#failure68'>Previous Failure</a> | <a href='#failure70'>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>
   </tt><br>
  -<a name='failure70'></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='failure70'></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='#failure69'>Previous Failure</a> | <a href='#failure71'>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: TypeError: Undefined value<br>
   </tt><br>
  -<a name='failure71'></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='failure71'></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='#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>
  -Exception, line 248: TypeError: Undefined value<br>
  +--> BUGNUMBER: 50447<br>
  +--> STATUS: Test (non-ECMA) Error object properties fileName, lineNumber<br>
  +Exception, line 66: TypeError: Undefined value<br>
   </tt><br>
  -<a name='failure72'></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='failure72'></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='#failure71'>Previous Failure</a> | <a href='#failure73'>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: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure73'></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='failure73'></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='#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 33: SyntaxError: Parse error<br>
  +Exception, line 29: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure74'></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='failure74'></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='#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 29: SyntaxError: Parse error<br>
  +Exception, line 48: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure75'></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='failure75'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-004.js'>js1_5/GetSet/getset-004.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>
   <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 48: TypeError: Value undefined (result of expression obj.__defineSetter__) is not object.<br>
   </tt><br>
  -<a name='failure76'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-004.js'>js1_5/GetSet/getset-004.js</a> failed</b> <br>
  +<a name='failure76'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-005.js'>js1_5/GetSet/getset-005.js</a> failed</b> <br>
    [ <a href='#failure75'>Previous Failure</a> | <a href='#failure77'>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: TypeError: Value undefined (result of expression obj.%s) is not object.<br>
  +Exception, line 57: TypeError: Value undefined (result of expression obj.__defineSetter__) is not object.<br>
   </tt><br>
  -<a name='failure77'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-005.js'>js1_5/GetSet/getset-005.js</a> failed</b> <br>
  +<a name='failure77'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-006.js'>js1_5/GetSet/getset-006.js</a> failed</b> <br>
    [ <a href='#failure76'>Previous Failure</a> | <a href='#failure78'>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: TypeError: Value undefined (result of expression obj.%s) is not object.<br>
  +Exception, line 62: TypeError: Value undefined (result of expression obj.__defineSetter__) is not object.<br>
   </tt><br>
  -<a name='failure78'></a><dd><b>Testcase <a target='other_window' href='./js1_5/GetSet/getset-006.js'>js1_5/GetSet/getset-006.js</a> failed</b> <br>
  +<a name='failure78'></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='#failure77'>Previous Failure</a> | <a href='#failure79'>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: TypeError: Value undefined (result of expression obj.%s) is not object.<br>
  +Exception, line 49: TypeError: Value undefined (result of expression obj.toSource) is not object.<br>
   </tt><br>
  -<a name='failure79'></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='failure79'></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='#failure78'>Previous Failure</a> | <a href='#failure80'>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.%s) is not object.<br>
  +Exception, line 49: ReferenceError: Can't find variable: uneval<br>
   </tt><br>
  -<a name='failure80'></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='failure80'></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='#failure79'>Previous Failure</a> | <a href='#failure81'>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: TypeError: Value undefined (result of expression obj1.toSource) is not object.<br>
   </tt><br>
  -<a name='failure81'></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='failure81'></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='#failure80'>Previous Failure</a> | <a href='#failure82'>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.%s) is not object.<br>
  +Exception, line 50: ReferenceError: Can't find variable: uneval<br>
   </tt><br>
  -<a name='failure82'></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='failure82'></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='#failure81'>Previous Failure</a> | <a href='#failure83'>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>
  +--> 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>
   </tt><br>
  -<a name='failure83'></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 name='failure83'></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='#failure82'>Previous Failure</a> | <a href='#failure84'>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>
  +--> FAILED!: [reported from test()] Type mismatch, expected type number, actual type boolean<br>
  +--> FAILED!: [reported from test()] Expected value '43', Actual value 'false'<br>
  +--> FAILED!: [reported from test()] <br>
  +</tt><br>
  +<a name='failure84'></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='#failure83'>Previous Failure</a> | <a href='#failure85'>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>
  @@ -1205,45 +1357,34 @@
   --> FAILED!: [reported from test()] Expected value '1', Actual value '2'<br>
   --> FAILED!: [reported from test()] <br>
   </tt><br>
  -<a name='failure84'></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='#failure83'>Previous Failure</a> | <a href='#failure85'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure85'></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='#failure84'>Previous Failure</a> | <a href='#failure86'>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>
   </tt><br>
  -<a name='failure85'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-114491.js'>js1_5/Regress/regress-114491.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=114491' target='other_window'>Bug Number 114491</a><br>
  - [ <a href='#failure84'>Previous Failure</a> | <a href='#failure86'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure86'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-114491.js'>js1_5/Regress/regress-114491.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=114491' target='other_window'>Bug Number 114491</a><br>
  + [ <a href='#failure85'>Previous Failure</a> | <a href='#failure87'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
   <tt>--> STATUS: Regression test for bug 114491<br>
   Failure messages were:<br>
   --> FAILED!: [reported from test()] Section 1 of test -<br>
   --> FAILED!: [reported from test()] Expected value 'Program execution fell into into catch-block', Actual value 'Program execution did NOT fall into catch-block'<br>
   --> FAILED!: [reported from test()] <br>
   </tt><br>
  -<a name='failure86'></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='#failure85'>Previous Failure</a> | <a href='#failure87'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure87'></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='#failure86'>Previous Failure</a> | <a href='#failure88'>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>
   </tt><br>
  -<a name='failure87'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-156354.js'>js1_5/Regress/regress-156354.js</a> failed</b> <br>
  - [ <a href='#failure86'>Previous Failure</a> | <a href='#failure88'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure88'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-156354.js'>js1_5/Regress/regress-156354.js</a> failed</b> <br>
  + [ <a href='#failure87'>Previous Failure</a> | <a href='#failure89'>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 56: TypeError: Value undefined (result of expression this.%s) is not object.<br>
  -</tt><br>
  -<a name='failure88'></a><dd><b>Testcase <a target='other_window' href='./js1_5/Regress/regress-168347.js'>js1_5/Regress/regress-168347.js</a> failed</b> <a href='http://bugzilla.mozilla.org/show_bug.cgi?id=168347' target='other_window'>Bug Number 168347</a><br>
  - [ <a href='#failure87'>Previous Failure</a> | <a href='#failure89'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  -<tt>--> STATUS: Testing F.toString()<br>
  -Failure messages were:<br>
  ---> FAILED!: [reported from test()] Section 2 of test -<br>
  ---> FAILED!: [reported from test()] Expected value '"i=i+1failedwith"+e+"i="+f.i);}try{++f.i;print("++isucceededi="+f.i);}catch(e){print("++ifailedwith"', Actual value '"i=i+1failedwith"+e+"i="+f.i);}try{f.i++;print("++isucceededi="+f.i);}catch(e){print("++ifailedwith"'<br>
  ---> FAILED!: [reported from test()] <br>
  ---> FAILED!: [reported from test()] Section 4 of test -<br>
  ---> FAILED!: [reported from test()] Expected value '{--f.i;print("--isucceededi="+f.i);}catch(e){print("--ifailedwith"+e+"i="+f.i);}try{f.i--;print("i--', Actual value '{f.i--;print("--isucceededi="+f.i);}catch(e){print("--ifailedwith"+e+"i="+f.i);}try{f.i--;print("i--'<br>
  ---> FAILED!: [reported from test()] <br>
  +Exception, line 56: TypeError: Value undefined (result of expression this.propertyIsEnumerable) is not object.<br>
   </tt><br>
   <a name='failure89'></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='#failure88'>Previous Failure</a> | <a href='#failure90'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  @@ -1311,26 +1452,8 @@
   yylex: ERROR.<br>
   Exception, line 3: SyntaxError: Parse error<br>
   </tt><br>
  -<a name='failure92'></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 name='failure92'></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='#failure91'>Previous Failure</a> | <a href='#failure93'>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.%s) is not object.<br>
  -</tt><br>
  -<a name='failure93'></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='#failure92'>Previous Failure</a> | <a href='#failure94'>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>
  ---> FAILED!: [reported from test()] Type mismatch, expected type number, actual type boolean<br>
  ---> FAILED!: [reported from test()] Expected value '43', Actual value 'false'<br>
  ---> FAILED!: [reported from test()] <br>
  -</tt><br>
  -<a name='failure94'></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='#failure93'>Previous Failure</a> | <a href='#failure95'>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>
  @@ -1345,15 +1468,15 @@
   --> FAILED!: [reported from test()] }', Actual value '0'<br>
   --> FAILED!: [reported from test()] <br>
   </tt><br>
  -<a name='failure95'></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='#failure94'>Previous Failure</a> | <a href='#failure96'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure93'></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='#failure92'>Previous Failure</a> | <a href='#failure94'>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>
   </tt><br>
  -<a name='failure96'></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='#failure95'>Previous Failure</a> | <a href='#failure97'>Next Failure</a> | <a href='#tippy_top'>Top of Page</a> ]<br>
  +<a name='failure94'></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='#failure93'>Previous Failure</a> | <a href='#failure95'>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>
  @@ -1370,9 +1493,9 @@
   <pre>
   <a name='retest_list'></a>
   <h2>Retest List</h2><br>
  -# Retest List, kjs, generated Wed Sep  7 14:49:22 2005.
  +# Retest List, kjs, generated Thu Sep 22 23:37:42 2005.
   # Original test base was: All tests.
  -# 1111 of 1116 test(s) were completed, 96 failures reported.
  +# 1111 of 1116 test(s) were completed, 94 failures reported.
   ecma/Date/15.9.5.28-1.js
   ecma/GlobalObject/15.1.2.2-2.js
   ecma/LexicalConventions/7.7.3-1.js
  @@ -1381,38 +1504,37 @@
   ecma_2/RegExp/regress-001.js
   ecma_2/RegExp/unicode-001.js
   ecma_3/Date/15.9.5.7.js
  -ecma_3/Function/regress-193555.js
  -ecma_3/Function/regress-58274.js
   ecma_3/FunExpr/fe-001.js
  +ecma_3/Function/regress-58274.js
  +ecma_3/Function/regress-193555.js
   ecma_3/Object/class-002.js
   ecma_3/RegExp/15.10.2-1.js
   ecma_3/RegExp/15.10.6.2-2.js
   ecma_3/RegExp/octal-002.js
   ecma_3/RegExp/perlstress-001.js
   ecma_3/RegExp/perlstress-002.js
  -ecma_3/RegExp/regress-100199.js
  -ecma_3/RegExp/regress-188206.js
  -ecma_3/RegExp/regress-209919.js
   ecma_3/RegExp/regress-72964.js
   ecma_3/RegExp/regress-78156.js
   ecma_3/RegExp/regress-85721.js
  +ecma_3/RegExp/regress-100199.js
  +ecma_3/RegExp/regress-188206.js
  +ecma_3/RegExp/regress-209919.js
   ecma_3/Statements/regress-194364.js
   ecma_3/Unicode/uc-001.js
   ecma_3/Unicode/uc-002.js
   ecma_3/Unicode/uc-003.js
   ecma_3/Unicode/uc-005.js
  -js1_2/function/function-001-n.js
  +js1_2/Objects/toString-001.js
  +js1_2/String/concat.js
  +js1_2/String/slice.js
   js1_2/function/Function_object.js
   js1_2/function/Number.js
  -js1_2/function/regexparg-1.js
   js1_2/function/String.js
  +js1_2/function/function-001-n.js
  +js1_2/function/regexparg-1.js
   js1_2/function/tostring-1.js
   js1_2/function/tostring-2.js
  -js1_2/Objects/toString-001.js
   js1_2/operator/equality.js
  -js1_2/regexp/beginLine.js
  -js1_2/regexp/compile.js
  -js1_2/regexp/endLine.js
   js1_2/regexp/RegExp_input.js
   js1_2/regexp/RegExp_input_as_array.js
   js1_2/regexp/RegExp_lastIndex.js
  @@ -1426,19 +1548,19 @@
   js1_2/regexp/RegExp_multiline_as_array.js
   js1_2/regexp/RegExp_rightContext.js
   js1_2/regexp/RegExp_rightContext_as_array.js
  +js1_2/regexp/beginLine.js
  +js1_2/regexp/compile.js
  +js1_2/regexp/endLine.js
   js1_2/regexp/regress-6359.js
   js1_2/regexp/regress-9141.js
   js1_2/regexp/simple_form.js
   js1_2/regexp/special_characters.js
   js1_2/regexp/string_split.js
  -js1_2/String/concat.js
  -js1_2/String/slice.js
   js1_2/version120/boolean-001.js
   js1_2/version120/regress-99663.js
  -js1_3/regress/function-001-n.js
   js1_3/Script/function-001-n.js
   js1_3/Script/script-001.js
  -js1_4/Regress/function-002.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
  @@ -1455,17 +1577,16 @@
   js1_5/Object/regress-90596-002.js
   js1_5/Object/regress-96284-001.js
   js1_5/Object/regress-96284-002.js
  +js1_5/Regress/regress-44009.js
  +js1_5/Regress/regress-68498-003.js
   js1_5/Regress/regress-103602.js
   js1_5/Regress/regress-104077.js
   js1_5/Regress/regress-114491.js
   js1_5/Regress/regress-127557.js
   js1_5/Regress/regress-156354.js
  -js1_5/Regress/regress-168347.js
   js1_5/Regress/regress-172699.js
   js1_5/Regress/regress-179524.js
   js1_5/Regress/regress-185165.js
  -js1_5/Regress/regress-44009.js
  -js1_5/Regress/regress-68498-003.js
   js1_5/Scope/regress-185485.js
   js1_5/Scope/regress-220584.js
   js1_5/Scope/scope-001.js
  \ No newline at end of file
  
  
  



More information about the webkit-changes mailing list