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):