Ignore:
Timestamp:
Apr 20, 2010, 11:41:20 PM (15 years ago)
Author:
[email protected]
Message:

2010-04-20 Oliver Hunt <[email protected]>

Reviewed by Maciej Stachowiak.

[ES5] RegExp literals are constants that should be persistent across multiple function calls.
https://bugs.webkit.org/show_bug.cgi?id=37908

Dump the separate RegExp constant pool, and just use the standard JS constant pool
in codeblock. This allows us to drop op_new_regexp and all associated code as well.

  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::dump): (JSC::CodeBlock::shrinkToFit):
  • bytecode/CodeBlock.h:
  • bytecode/Opcode.h:
  • bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitLoad):
  • bytecompiler/BytecodeGenerator.h:
  • bytecompiler/NodesCodegen.cpp: (JSC::RegExpNode::emitBytecode):
  • interpreter/Interpreter.cpp: (JSC::Interpreter::privateExecute):
  • jit/JIT.cpp: (JSC::JIT::privateCompileMainPass):
  • jit/JIT.h:
  • jit/JITOpcodes.cpp:
  • jit/JITStubs.cpp:
  • jit/JITStubs.h: (JSC::):

2010-04-20 Oliver Hunt <[email protected]>

Reviewed by Maciej Stachowiak.

[ES5] RegExp literals are constants that should be persistent across multiple function calls.
https://bugs.webkit.org/show_bug.cgi?id=37908

Add tests to ensure correct persistence of RegExp literals, and correctly avoid
sharing "identical" regexps used in different places.

  • fast/js/regexp-literals-are-constants-expected.txt: Added.
  • fast/js/regexp-literals-are-constants.html: Added.
  • fast/js/script-tests/regexp-literals-are-constants.js: Added. (test1): (returnRegExpLiteral): (returnConditionalRegExpLiteral):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/bytecompiler/BytecodeGenerator.h

    r51735 r57955  
    265265        RegisterID* emitLoad(RegisterID* dst, double);
    266266        RegisterID* emitLoad(RegisterID* dst, const Identifier&);
     267        RegisterID* emitLoad(RegisterID* dst, RegExp* regExp);
    267268        RegisterID* emitLoad(RegisterID* dst, JSValue);
    268269
     
    277278        RegisterID* emitNewFunction(RegisterID* dst, FunctionBodyNode* body);
    278279        RegisterID* emitNewFunctionExpression(RegisterID* dst, FuncExprNode* func);
    279         RegisterID* emitNewRegExp(RegisterID* dst, RegExp* regExp);
    280280
    281281        RegisterID* emitMove(RegisterID* dst, RegisterID* src);
     
    447447        unsigned addConstant(const Identifier&);
    448448        RegisterID* addConstantValue(JSValue);
    449         unsigned addRegExp(RegExp*);
    450449
    451450        PassRefPtr<FunctionExecutable> makeFunction(ExecState* exec, FunctionBodyNode* body)
Note: See TracChangeset for help on using the changeset viewer.