Ignore:
Timestamp:
Nov 11, 2007, 8:27:33 PM (18 years ago)
Author:
[email protected]
Message:

Reviewed by Sam Weinig.


Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
15% of string-validate-input.js is spent compiling the same regular expression


Store a compiled representation of the regular expression in the AST.


Only a .2% SunSpider speedup overall, but a 10.6% speedup on
string-validate-input.js.

  • kjs/nodes.cpp: (KJS::RegExpNode::evaluate):
  • kjs/nodes.h: (KJS::RegExpNode::):
  • kjs/nodes2string.cpp: (KJS::RegExpNode::streamTo):
  • kjs/regexp.cpp: (KJS::RegExp::flags):
  • kjs/regexp.h: (KJS::RegExp::pattern):
  • kjs/regexp_object.cpp: (KJS::RegExpObjectImp::construct): (KJS::RegExpObjectImp::createRegExpImp):
  • kjs/regexp_object.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/regexp_object.cpp

    r27573 r27702  
    449449  UString pattern = arg0->isUndefined() ? UString("") : arg0->toString(exec);
    450450  UString flags = arg1->isUndefined() ? UString("") : arg1->toString(exec);
    451   RefPtr<RegExp> regExp = new RegExp(pattern, flags);
    452 
    453   return regExp->isValid()
    454     ? new RegExpImp(static_cast<RegExpPrototype*>(exec->lexicalInterpreter()->builtinRegExpPrototype()), regExp.release())
    455     : throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(regExp->errorMessage()));
     451 
     452  return createRegExpImp(exec, new RegExp(pattern, flags));
     453}
     454
     455JSObject* RegExpObjectImp::createRegExpImp(ExecState* exec, PassRefPtr<RegExp> regExp)
     456{
     457    return regExp->isValid()
     458        ? new RegExpImp(static_cast<RegExpPrototype*>(exec->lexicalInterpreter()->builtinRegExpPrototype()), regExp)
     459        : throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(regExp->errorMessage()));
    456460}
    457461
Note: See TracChangeset for help on using the changeset viewer.