haikuwebkit/LayoutTests/js/dom/line-column-numbers.html

238 lines
6.4 KiB
HTML
Raw Permalink Normal View History

Fix 30% JSBench regression (caused by adding column numbers to stack traces). https://bugs.webkit.org/show_bug.cgi?id=118481. Reviewed by Mark Hahnenberg and Geoffrey Garen. Source/JavaScriptCore: Previously, we already capture ExpressionRangeInfo that provides a divot for each bytecode that can potentially throw an exception (and therefore generate a stack trace). On first attempt to compute column numbers, we then do a walk of the source string to record all line start positions in a table associated with the SourceProvider. The column number can then be computed as divot - lineStartFor(bytecodeOffset). The computation of this lineStarts table is the source of the 30% JSBench performance regression. The new code now records lineStarts as the lexer and parser scans the source code. These lineStarts are then used to compute the column number for the given divot, and stored in the ExpressionRangeInfo. Similarly, we also capture the line number at the divot point and store that in the ExpressionRangeInfo. Hence, to look up line and column numbers, we now lookup the ExpressionRangeInfo for the bytecodeOffset, and then compute the line and column from the values stored in the expression info. The strategy: 1. We want to minimize perturbations to the lexer and parser. Specifically, the changes added should not change how it scans code, and generate bytecode. 2. We regard the divot as the source character position we are interested in. As such, we'll capture line and lineStart (for column) at the point when we capture the divot information. This ensures that the 3 values are consistent. How the change is done: 1. Change the lexer to track lineStarts. 2. Change the parser to capture line and lineStarts at the point of capturing divots. 3. Change the parser and associated code to plumb these values all the way to the point that the correspoinding ExpressionRangeInfo is emitted. 4. Propagate and record SourceCode firstLine and firstLineColumnOffset to the the necessary places so that we can add them as needed when reifying UnlinkedCodeBlocks into CodeBlocks. 5. Compress the line and column number values in the ExpressionRangeInfo. In practice, we seldom have both large line and column numbers. Hence, we can encode both in an uint32_t most of the time. For the times when we encounter both large line and column numbers, we have a fallback to store the "fat" position info. 6. Emit an ExpressionRangeInfo for UnaryOp nodes to get more line and column number coverage. 7. Change the interpreter to use the new way of computing line and column. 8. Delete old line and column computation code that is now unused. Misc details: - the old lexer was tracking both a startOffset and charPosition where charPosition equals startOffset - SourceCode.startOffset. We now use startOffset exclusively throughout the system for consistency. All offset values (including lineStart) are relative to the start of the SourceProvider string. These values will only be converted to be relative to the SourceCode.startOffset at the very last minute i.e. when the divot is stored into the ExpressionRangeInfo. This change to use the same offset system everywhere reduces confusion from having to convert back and forth between the 2 systems. It also enables a lot of assertions to be used. - Also fixed some bugs in the choice of divot positions to use. For example, both Eval and Function expressions previously used column numbers from the start of the expression but used the line number at the end of the expression. This is now fixed to use either the start or end positions as appropriate, but not a mix of line and columns from both. - Why use ints instead of unsigneds for offsets and lineStarts inside the lexer and parser? Some tests (e.g. fast/js/call-base-resolution.html and fast/js/eval-cross-window.html) has shown that lineStart offsets can be prior to the SourceCode.startOffset. Keeping the lexer offsets as ints simplifies computations and makes it easier to maintain the assertions that (startOffset >= lineStartOffset). However, column and line numbers are always unsigned when we publish them to the ExpressionRangeInfo. The ints are only used inside the lexer and parser ... well, and bytecode generator. - For all cases, lineStart is always captured where the divot is captured. However, some sputnik conformance tests have shown that we cannot honor line breaks for assignment statements like the following: eval("x\u000A*=\u000A-1;"); In this case, the lineStart is expected to be captured at the start of the assignment expression instead of at the divot point in the middle. The assignment expression is the only special case for this. This patch has been tested against the full layout tests both with release and debug builds with no regression. * API/JSContextRef.cpp: (JSContextCreateBacktrace): - Updated to use the new StackFrame::computeLineAndColumn(). * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): - Added m_firstLineColumnOffset initialization. - Plumbed the firstLineColumnOffset into the SourceCode. - Initialized column for op_debug using the new way. (JSC::CodeBlock::lineNumberForBytecodeOffset): - Changed to compute line number using the ExpressionRangeInfo. (JSC::CodeBlock::columnNumberForBytecodeOffset): Added - Changed to compute column number using the ExpressionRangeInfo. (JSC::CodeBlock::expressionRangeForBytecodeOffset): * bytecode/CodeBlock.h: (JSC::CodeBlock::firstLineColumnOffset): (JSC::GlobalCodeBlock::GlobalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::ProgramCodeBlock::ProgramCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::EvalCodeBlock::EvalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. But for EvalCodeBlocks, the firstLineColumnOffset is always 1 because we're starting with a new source string with no start offset. (JSC::FunctionCodeBlock::FunctionCodeBlock): - Plumbed firstLineColumnOffset through to the super class. * bytecode/ExpressionRangeInfo.h: - Added modes for encoding line and column into a single 30-bit unsigned. The encoding is in 1 of 3 modes: 1. FatLineMode: 22-bit line, 8-bit column 2. FatColumnMode: 8-bit line, 22-bit column 3. FatLineAndColumnMode: 32-bit line, 32-bit column (JSC::ExpressionRangeInfo::encodeFatLineMode): Added. - Encodes line and column into the 30-bit position using FatLine mode. (JSC::ExpressionRangeInfo::encodeFatColumnMode): Added. - Encodes line and column into the 30-bit position using FatColumn mode. (JSC::ExpressionRangeInfo::decodeFatLineMode): Added. - Decodes the FatLine mode 30-bit position into line and column. (JSC::ExpressionRangeInfo::decodeFatColumnMode): Added. - Decodes the FatColumn mode 30-bit position into line and column. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): - Plumbed startColumn through. (JSC::UnlinkedFunctionExecutable::link): - Plumbed startColumn through. (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): - Computes a line number using the new way. (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): - Added decoding of line and column. - Added handling of the case when we do not find a fitting expression range info for a specified bytecodeOffset. This only happens if the bytecodeOffset is below the first expression range info. In that case, we'll use the first expression range info entry. (JSC::UnlinkedCodeBlock::addExpressionInfo): - Added encoding of line and column. * bytecode/UnlinkedCodeBlock.h: - Added m_expressionInfoFatPositions in RareData. (JSC::UnlinkedFunctionExecutable::functionStartColumn): (JSC::UnlinkedCodeBlock::shrinkToFit): - Removed obsoleted m_lineInfo. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallEval): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallVarargs): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitConstruct): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitDebugHook): Plumbed lineStart through. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitNode): (JSC::BytecodeGenerator::emitNodeInConditionContext): - Removed obsoleted m_lineInfo. (JSC::BytecodeGenerator::emitExpressionInfo): - Plumbed line and lineStart through. - Compute the line and column to be added to the expression range info. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::ArrayNode::toArgumentList): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): - Plumbed line and lineStart through the above as needed. (JSC::UnaryOpNode::emitBytecode): - Added emission of an ExpressionRangeInfo for the UnaryOp node. (JSC::BinaryOpNode::emitStrcat): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): - Plumbed line and lineStart through the above as needed. (JSC::ConstStatementNode::emitBytecode): (JSC::EmptyStatementNode::emitBytecode): (JSC::DebuggerStatementNode::emitBytecode): (JSC::ExprStatementNode::emitBytecode): (JSC::VarStatementNode::emitBytecode): (JSC::IfElseNode::emitBytecode): (JSC::DoWhileNode::emitBytecode): (JSC::WhileNode::emitBytecode): (JSC::ForNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::ContinueNode::emitBytecode): (JSC::BreakNode::emitBytecode): (JSC::ReturnNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::SwitchNode::emitBytecode): (JSC::LabelNode::emitBytecode): (JSC::ThrowNode::emitBytecode): (JSC::TryNode::emitBytecode): (JSC::ProgramNode::emitBytecode): (JSC::EvalNode::emitBytecode): (JSC::FunctionBodyNode::emitBytecode): - Plumbed line and lineStart through the above as needed. * interpreter/Interpreter.cpp: (JSC::appendSourceToError): - Added line and column arguments for expressionRangeForBytecodeOffset(). (JSC::StackFrame::computeLineAndColumn): - Replaces StackFrame::line() and StackFrame::column(). (JSC::StackFrame::expressionInfo): - Added line and column arguments. (JSC::StackFrame::toString): - Changed to use the new StackFrame::computeLineAndColumn(). (JSC::Interpreter::getStackTrace): - Added the needed firstLineColumnOffset arg for the StackFrame. * interpreter/Interpreter.h: * parser/ASTBuilder.h: (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createFunctionExpr): (JSC::ASTBuilder::createFunctionBody): (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createFuncDeclStatement): (JSC::ASTBuilder::createBlockStatement): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createIfStatement): (JSC::ASTBuilder::createForLoop): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createVarStatement): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createTryStatement): (JSC::ASTBuilder::createSwitchStatement): (JSC::ASTBuilder::createWhileStatement): (JSC::ASTBuilder::createDoWhileStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::createDebugger): (JSC::ASTBuilder::createConstStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::unaryTokenStackLastLineStartPosition): Added. (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode):. - Plumbed line, lineStart, and startColumn through the above as needed. * parser/Lexer.cpp: (JSC::::currentSourcePtr): (JSC::::setCode): - Added tracking for sourceoffset and lineStart. (JSC::::internalShift): (JSC::::parseIdentifier): - Added tracking for lineStart. (JSC::::parseIdentifierSlowCase): (JSC::::parseString): - Added tracking for lineStart. (JSC::::parseStringSlowCase): (JSC::::lex): - Added tracking for sourceoffset. (JSC::::sourceCode): * parser/Lexer.h: (JSC::Lexer::currentOffset): (JSC::Lexer::currentLineStartOffset): (JSC::Lexer::setOffset): - Added tracking for lineStart. (JSC::Lexer::offsetFromSourcePtr): Added. conversion function. (JSC::Lexer::sourcePtrFromOffset): Added. conversion function. (JSC::Lexer::setOffsetFromSourcePtr): (JSC::::lexExpectIdentifier): - Added tracking for sourceoffset and lineStart. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Plumbed line and lineStart through the above as needed. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): Plumbed lineStart. (JSC::ScopeNode::ScopeNode): Plumbed lineStart. (JSC::ProgramNode::ProgramNode): Plumbed startColumn. (JSC::ProgramNode::create): Plumbed startColumn. (JSC::EvalNode::create): (JSC::FunctionBodyNode::FunctionBodyNode): Plumbed startColumn. (JSC::FunctionBodyNode::create): Plumbed startColumn. * parser/Nodes.h: (JSC::Node::startOffset): (JSC::Node::lineStartOffset): Added. (JSC::StatementNode::firstLine): (JSC::StatementNode::lastLine): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divotStartOffset): (JSC::ThrowableExpressionData::divotEndOffset): (JSC::ThrowableExpressionData::divotLine): (JSC::ThrowableExpressionData::divotLineStart): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStartOffset): (JSC::ThrowableSubExpressionData::subexpressionEndOffset): (JSC::ThrowableSubExpressionData::subexpressionLine): (JSC::ThrowableSubExpressionData::subexpressionLineStart): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStartOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEndOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLine): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLineStart): (JSC::ScopeNode::startStartOffset): (JSC::ScopeNode::startLineStartOffset): (JSC::ProgramNode::startColumn): (JSC::EvalNode::startColumn): (JSC::FunctionBodyNode::startColumn): - Plumbed line and lineStart through the above as needed. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseSourceElements): (JSC::::parseVarDeclarationList): (JSC::::parseConstDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): - Plumbed line and lineStart through the above as needed. (JSC::::parseFunctionBody): - Plumbed startColumn. (JSC::::parseFunctionInfo): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parseObjectLiteral): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Plumbed line, lineStart, startColumn through the above as needed. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::tokenStart): (JSC::Parser::tokenColumn): (JSC::Parser::tokenEnd): (JSC::Parser::tokenLineStart): (JSC::Parser::lastTokenLine): (JSC::Parser::lastTokenLineStart): (JSC::::parse): * parser/ParserTokens.h: (JSC::JSTokenLocation::JSTokenLocation): - Plumbed lineStart. (JSC::JSTokenLocation::lineStartPosition): (JSC::JSTokenLocation::startPosition): (JSC::JSTokenLocation::endPosition): * parser/SourceCode.h: (JSC::SourceCode::SourceCode): (JSC::SourceCode::startColumn): (JSC::makeSource): (JSC::SourceCode::subExpression): * parser/SourceProvider.cpp: delete old code. * parser/SourceProvider.h: delete old code. * parser/SourceProviderCacheItem.h: (JSC::SourceProviderCacheItem::closeBraceToken): (JSC::SourceProviderCacheItem::SourceProviderCacheItem): - Plumbed lineStart. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createFunctionExpr): (JSC::SyntaxChecker::createFunctionBody): (JSC::SyntaxChecker::createFuncDeclStatement): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::createGetterOrSetterProperty): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Made SyntaxChecker prototype changes to match ASTBuilder due to new args added for plumbing line, lineStart, and startColumn. * runtime/CodeCache.cpp: (JSC::CodeCache::generateBytecode): (JSC::CodeCache::getCodeBlock): - Plumbed startColumn. * runtime/Executable.cpp: (JSC::FunctionExecutable::FunctionExecutable): (JSC::ProgramExecutable::compileInternal): (JSC::FunctionExecutable::produceCodeBlockFor): (JSC::FunctionExecutable::fromGlobalCode): - Plumbed startColumn. * runtime/Executable.h: (JSC::ScriptExecutable::startColumn): (JSC::ScriptExecutable::recordParse): (JSC::FunctionExecutable::create): - Plumbed startColumn. Source/WebCore: Test: fast/js/line-column-numbers.html Updated the bindings to use StackFrame::computeLineAndColumn(). The old StackFrame::line() and StackFrame::column() has been removed. The new algorithm always computes the 2 values together anyway. Hence it is more efficient to return them as a pair instead of doing the same computation twice for each half of the result. * bindings/js/ScriptCallStackFactory.cpp: (WebCore::createScriptCallStack): (WebCore::createScriptCallStackFromException): * bindings/js/ScriptSourceCode.h: (WebCore::ScriptSourceCode::ScriptSourceCode): LayoutTests: The fix now computes line and column numbers more accurately. As a result, some of the test results need to be re-baselined. Among other fixes, one major source of difference is that the old code was incorrectly computing 0-based column numbers. This has now been fixed to be 1-based. Note: line numbers were always 1-based. Also added a new test: fast/js/line-column-numbers.html, which tests line and column numbers for source code in various configurations. * editing/execCommand/outdent-blockquote-test1-expected.txt: * editing/execCommand/outdent-blockquote-test2-expected.txt: * editing/execCommand/outdent-blockquote-test3-expected.txt: * editing/execCommand/outdent-blockquote-test4-expected.txt: * editing/pasteboard/copy-paste-float-expected.txt: * editing/pasteboard/paste-blockquote-before-blockquote-expected.txt: * editing/pasteboard/paste-double-nested-blockquote-before-blockquote-expected.txt: * fast/dom/Window/window-resize-contents-expected.txt: * fast/events/remove-target-with-shadow-in-drag-expected.txt: * fast/js/line-column-numbers-expected.txt: Added. * fast/js/line-column-numbers.html: Added. * fast/js/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): * fast/js/stack-trace-expected.txt: * inspector/console/console-url-line-column-expected.txt: Canonical link: https://commits.webkit.org/136467@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@152494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-09 16:15:12 +00:00
<html>
<head>
Get rid of the jsc-test-list by moving all not-jsc-capable tests into js/dom https://bugs.webkit.org/show_bug.cgi?id=121578 Rubber stamped by Geoffrey Garen. Tools: * Scripts/run-layout-jsc: LayoutTests: * fast/regex/cross-frame-callable-expected.txt: Removed. * fast/regex/cross-frame-callable.html: Removed. * fast/regex/dom: Added. * fast/regex/dom/cross-frame-callable-expected.txt: Added. * fast/regex/dom/cross-frame-callable.html: Added. * fast/regex/dom/lastIndex-expected.txt: Added. * fast/regex/dom/lastIndex.html: Added. * fast/regex/dom/non-pattern-characters-expected.txt: Added. * fast/regex/dom/non-pattern-characters.html: Added. * fast/regex/dom/script-tests: Added. * fast/regex/dom/script-tests/cross-frame-callable.js: Added. (doTest): * fast/regex/dom/script-tests/lastIndex.js: Added. * fast/regex/dom/script-tests/non-pattern-characters.js: Added. * fast/regex/dom/script-tests/unicodeCaseInsensitive.js: Added. (shouldBeTrue.ucs2CodePoint): * fast/regex/dom/syntax-errors-expected.txt: Added. * fast/regex/dom/syntax-errors.html: Added. * fast/regex/dom/unicodeCaseInsensitive-expected.txt: Added. * fast/regex/dom/unicodeCaseInsensitive.html: Added. * fast/regex/lastIndex-expected.txt: Removed. * fast/regex/lastIndex.html: Removed. * fast/regex/non-pattern-characters-expected.txt: Removed. * fast/regex/non-pattern-characters.html: Removed. * fast/regex/script-tests/cross-frame-callable.js: Removed. * fast/regex/script-tests/lastIndex.js: Removed. * fast/regex/script-tests/non-pattern-characters.js: Removed. * fast/regex/script-tests/unicodeCaseInsensitive.js: Removed. * fast/regex/syntax-errors-expected.txt: Removed. * fast/regex/syntax-errors.html: Removed. * fast/regex/unicodeCaseInsensitive-expected.txt: Removed. * fast/regex/unicodeCaseInsensitive.html: Removed. * js/JSON-parse-expected.txt: Removed. * js/JSON-parse.html: Removed. * js/JSON-stringify-expected.txt: Removed. * js/JSON-stringify.html: Removed. * js/Object-defineProperty-expected.txt: Removed. * js/Object-defineProperty.html: Removed. * js/Promise-already-fulfilled-expected.txt: Removed. * js/Promise-already-fulfilled.html: Removed. * js/Promise-already-rejected-expected.txt: Removed. * js/Promise-already-rejected.html: Removed. * js/Promise-already-resolved-expected.txt: Removed. * js/Promise-already-resolved.html: Removed. * js/Promise-catch-expected.txt: Removed. * js/Promise-catch-in-workers-expected.txt: Removed. * js/Promise-catch-in-workers.html: Removed. * js/Promise-catch.html: Removed. * js/Promise-chain-expected.txt: Removed. * js/Promise-chain.html: Removed. * js/Promise-exception-expected.txt: Removed. * js/Promise-exception.html: Removed. * js/Promise-expected.txt: Removed. * js/Promise-fulfill-expected.txt: Removed. * js/Promise-fulfill-in-workers-expected.txt: Removed. * js/Promise-fulfill-in-workers.html: Removed. * js/Promise-fulfill.html: Removed. * js/Promise-init-expected.txt: Removed. * js/Promise-init-in-workers-expected.txt: Removed. * js/Promise-init-in-workers.html: Removed. * js/Promise-init.html: Removed. * js/Promise-reject-expected.txt: Removed. * js/Promise-reject-in-workers-expected.txt: Removed. * js/Promise-reject-in-workers.html: Removed. * js/Promise-reject.html: Removed. * js/Promise-resolve-chain-expected.txt: Removed. * js/Promise-resolve-chain.html: Removed. * js/Promise-resolve-expected.txt: Removed. * js/Promise-resolve-in-workers-expected.txt: Removed. * js/Promise-resolve-in-workers.html: Removed. * js/Promise-resolve-with-then-exception-expected.txt: Removed. * js/Promise-resolve-with-then-exception.html: Removed. * js/Promise-resolve-with-then-fulfill-expected.txt: Removed. * js/Promise-resolve-with-then-fulfill.html: Removed. * js/Promise-resolve-with-then-reject-expected.txt: Removed. * js/Promise-resolve-with-then-reject.html: Removed. * js/Promise-resolve.html: Removed. * js/Promise-simple-expected.txt: Removed. * js/Promise-simple-fulfill-expected.txt: Removed. * js/Promise-simple-fulfill-inside-callback-expected.txt: Removed. * js/Promise-simple-fulfill-inside-callback.html: Removed. * js/Promise-simple-fulfill.html: Removed. * js/Promise-simple-in-workers-expected.txt: Removed. * js/Promise-simple-in-workers.html: Removed. * js/Promise-simple.html: Removed. * js/Promise-static-fulfill-expected.txt: Removed. * js/Promise-static-fulfill.html: Removed. * js/Promise-static-reject-expected.txt: Removed. * js/Promise-static-reject.html: Removed. * js/Promise-static-resolve-expected.txt: Removed. * js/Promise-static-resolve.html: Removed. * js/Promise-then-expected.txt: Removed. * js/Promise-then-in-workers-expected.txt: Removed. * js/Promise-then-in-workers.html: Removed. * js/Promise-then-without-callbacks-expected.txt: Removed. * js/Promise-then-without-callbacks-in-workers-expected.txt: Removed. * js/Promise-then-without-callbacks-in-workers.html: Removed. * js/Promise-then-without-callbacks.html: Removed. * js/Promise-then.html: Removed. * js/Promise-types-expected.txt: Removed. * js/Promise-types.html: Removed. * js/Promise.html: Removed. * js/activation-object-function-lifetime-expected.txt: Removed. * js/activation-object-function-lifetime.html: Removed. * js/activation-proto-expected.txt: Removed. * js/activation-proto.html: Removed. * js/add-to-primitive-expected.txt: Removed. * js/add-to-primitive.html: Removed. * js/array-float-delete-expected.txt: Removed. * js/array-float-delete.html: Removed. * js/array-foreach-expected.txt: Removed. * js/array-foreach.html: Removed. * js/array-indexof-expected.txt: Removed. * js/array-indexof.html: Removed. * js/array-join-bug-11524-expected.txt: Removed. * js/array-join-bug-11524.html: Removed. * js/array-map-expected.txt: Removed. * js/array-map.html: Removed. * js/array-prototype-properties-expected.txt: Removed. * js/array-prototype-properties.html: Removed. * js/array-some-expected.txt: Removed. * js/array-some.html: Removed. * js/array-sort-exception-expected.txt: Removed. * js/array-sort-exception.html: Removed. * js/array-tostring-ignore-separator-expected.txt: Removed. * js/array-tostring-ignore-separator.html: Removed. * js/array-with-double-assign-expected.txt: Removed. * js/array-with-double-assign.html: Removed. * js/array-with-double-push-expected.txt: Removed. * js/array-with-double-push.html: Removed. * js/assign-expected.txt: Removed. * js/assign.html: Removed. * js/basic-map-expected.txt: Removed. * js/basic-map.html: Removed. * js/basic-set-expected.txt: Removed. * js/basic-set.html: Removed. * js/basic-weakmap-expected.txt: Removed. * js/basic-weakmap.html: Removed. * js/bitwise-and-on-undefined-expected.txt: Removed. * js/bitwise-and-on-undefined.html: Removed. * js/bom-in-file-retains-correct-offset-expected.txt: Removed. * js/bom-in-file-retains-correct-offset.html: Removed. * js/branch-fold-correctness-expected.txt: Removed. * js/branch-fold-correctness.html: Removed. * js/cached-eval-gc-expected.txt: Removed. * js/cached-eval-gc.html: Removed. * js/call-base-resolution-expected.txt: Removed. * js/call-base-resolution.html: Removed. * js/callback-function-with-handle-event-expected.txt: Removed. * js/callback-function-with-handle-event.html: Removed. * js/codegen-temporaries-multiple-global-blocks-expected.txt: Removed. * js/codegen-temporaries-multiple-global-blocks.html: Removed. * js/concat-large-strings-crash-expected.txt: Removed. * js/concat-large-strings-crash.html: Removed. * js/concat-large-strings-crash2-expected.txt: Removed. * js/concat-large-strings-crash2.html: Removed. * js/console-non-string-values-expected.txt: Removed. * js/console-non-string-values.html: Removed. * js/const-expected.txt: Removed. * js/const.html: Removed. * js/construct-global-object-expected.txt: Removed. * js/construct-global-object.html: Removed. * js/constructor-attributes-expected.txt: Removed. * js/constructor-attributes.html: Removed. * js/constructor-expected.txt: Removed. * js/constructor-length.html: Removed. * js/constructor.html: Removed. * js/create-lots-of-workers-expected.txt: Removed. * js/create-lots-of-workers.html: Removed. * js/cross-frame-bad-time-expected.txt: Removed. * js/cross-frame-bad-time.html: Removed. * js/cross-frame-prototype-expected.txt: Removed. * js/cross-frame-prototype.html: Removed. * js/cross-frame-really-bad-time-expected.txt: Removed. * js/cross-frame-really-bad-time-with-__proto__-expected.txt: Removed. * js/cross-frame-really-bad-time-with-__proto__.html: Removed. * js/cross-frame-really-bad-time.html: Removed. * js/cross-global-object-inline-global-var-expected.txt: Removed. * js/cross-global-object-inline-global-var.html: Removed. * js/custom-constructors-expected.txt: Removed. * js/custom-constructors.html: Removed. * js/cyclic-proto-expected.txt: Removed. * js/cyclic-proto.html: Removed. * js/cyclic-ref-toString-expected.txt: Removed. * js/cyclic-ref-toString.html: Removed. * js/date-DST-time-cusps-expected.txt: Removed. * js/date-DST-time-cusps.html: Removed. * js/date-big-constructor-expected.txt: Removed. * js/date-big-constructor.html: Removed. * js/date-big-setdate-expected.txt: Removed. * js/date-big-setdate.html: Removed. * js/date-big-setmonth-expected.txt: Removed. * js/date-big-setmonth.html: Removed. * js/date-negative-setmonth-expected.txt: Removed. * js/date-negative-setmonth.html: Removed. * js/date-preserve-milliseconds-expected.txt: Removed. * js/date-preserve-milliseconds.html: Removed. * js/deep-recursion-test-expected.txt: Removed. * js/deep-recursion-test.html: Removed. * js/delete-function-parameter-expected.txt: Removed. * js/delete-function-parameter.html: Removed. * js/delete-multiple-global-blocks-expected.txt: Removed. * js/delete-multiple-global-blocks.html: Removed. * js/delete-syntax-expected.txt: Removed. * js/delete-syntax.html: Removed. * js/dfg-arguments-alias-activation-expected.txt: Removed. * js/dfg-arguments-alias-activation.html: Removed. * js/dfg-byte-array-put-expected.txt: Removed. * js/dfg-byte-array-put.html: Removed. * js/dfg-byteOffset-neuter-expected.txt: Removed. * js/dfg-byteOffset-neuter.html: Removed. * js/dfg-compare-final-object-to-final-object-or-other-expected.txt: Removed. * js/dfg-compare-final-object-to-final-object-or-other.html: Removed. * js/dfg-cross-global-object-inline-new-array-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-literal-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-literal-with-variables-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-literal-with-variables.html: Removed. * js/dfg-cross-global-object-inline-new-array-literal.html: Removed. * js/dfg-cross-global-object-inline-new-array-with-elements-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-with-elements.html: Removed. * js/dfg-cross-global-object-inline-new-array-with-size-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-with-size.html: Removed. * js/dfg-cross-global-object-inline-new-array.html: Removed. * js/dfg-cross-global-object-new-array-expected.txt: Removed. * js/dfg-cross-global-object-new-array.html: Removed. * js/dfg-custom-getter-expected.txt: Removed. * js/dfg-custom-getter-throw-expected.txt: Removed. * js/dfg-custom-getter-throw-inlined-expected.txt: Removed. * js/dfg-custom-getter-throw-inlined.html: Removed. * js/dfg-custom-getter-throw.html: Removed. * js/dfg-custom-getter.html: Removed. * js/dfg-ensure-array-storage-on-window-expected.txt: Removed. * js/dfg-ensure-array-storage-on-window.html: Removed. * js/dfg-ensure-non-array-array-storage-on-window-expected.txt: Removed. * js/dfg-ensure-non-array-array-storage-on-window.html: Removed. * js/dfg-inline-resolve-expected.txt: Removed. * js/dfg-inline-resolve.html: Removed. * js/dfg-inline-switch-imm-expected.txt: Removed. * js/dfg-inline-switch-imm.html: Removed. * js/dfg-int32-to-double-on-set-local-and-exit-expected.txt: Removed. * js/dfg-int32-to-double-on-set-local-and-exit.html: Removed. * js/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt: Removed. * js/dfg-int32-to-double-on-set-local-and-sometimes-exit.html: Removed. * js/dfg-logical-not-final-object-or-other-expected.txt: Removed. * js/dfg-logical-not-final-object-or-other.html: Removed. * js/dfg-make-rope-side-effects-expected.txt: Removed. * js/dfg-make-rope-side-effects.html: Removed. * js/dfg-negative-array-size-expected.txt: Removed. * js/dfg-negative-array-size.html: Removed. * js/dfg-patchable-get-by-id-after-watchpoint-expected.txt: Removed. * js/dfg-patchable-get-by-id-after-watchpoint.html: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-expected.txt: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.html: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.html: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other.html: Removed. * js/dfg-proto-stub-watchpoint-fire-expected.txt: Removed. * js/dfg-proto-stub-watchpoint-fire.html: Removed. * js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Removed. * js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Removed. * js/dfg-put-by-id-allocate-storage-expected.txt: Removed. * js/dfg-put-by-id-allocate-storage-polymorphic-expected.txt: Removed. * js/dfg-put-by-id-allocate-storage-polymorphic.html: Removed. * js/dfg-put-by-id-allocate-storage.html: Removed. * js/dfg-put-by-id-reallocate-storage-expected.txt: Removed. * js/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt: Removed. * js/dfg-put-by-id-reallocate-storage-polymorphic.html: Removed. * js/dfg-put-by-id-reallocate-storage.html: Removed. * js/dfg-put-by-val-setter-then-get-by-val-expected.txt: Removed. * js/dfg-put-by-val-setter-then-get-by-val.html: Removed. * js/dfg-put-to-readonly-property-expected.txt: Removed. * js/dfg-put-to-readonly-property.html: Removed. * js/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt: Removed. * js/dfg-rshift-by-zero-eliminate-valuetoint32.html: Removed. * js/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt: Removed. * js/dfg-store-unexpected-value-into-argument-and-osr-exit.html: Removed. * js/dfg-strcat-over-objects-then-exit-on-it-expected.txt: Removed. * js/dfg-strcat-over-objects-then-exit-on-it.html: Removed. * js/dfg-strict-mode-arguments-get-beyond-length-expected.txt: Removed. * js/dfg-strict-mode-arguments-get-beyond-length.html: Removed. * js/dfg-typed-array-neuter-expected.txt: Removed. * js/dfg-typed-array-neuter.html: Removed. * js/direct-entry-to-function-code-expected.txt: Removed. * js/direct-entry-to-function-code.html: Removed. * js/do-while-expression-value-expected.txt: Removed. * js/do-while-expression-value.html: Removed. * js/do-while-without-semicolon-expected.txt: Removed. * js/do-while-without-semicolon.html: Removed. * js/document-all-between-frames-expected.txt: Removed. * js/document-all-between-frames.html: Removed. * js/document-all-triggers-masquerades-watchpoint-expected.txt: Removed. * js/document-all-triggers-masquerades-watchpoint.html: Removed. * js/dom: Added. * js/dom-static-property-for-in-iteration-expected.txt: Removed. * js/dom-static-property-for-in-iteration.html: Removed. * js/dom/JSON-parse-expected.txt: Added. * js/dom/JSON-parse.html: Added. * js/dom/JSON-stringify-expected.txt: Added. * js/dom/JSON-stringify.html: Added. * js/dom/Object-defineProperty-expected.txt: Added. * js/dom/Object-defineProperty.html: Added. * js/dom/Promise-already-fulfilled-expected.txt: Added. * js/dom/Promise-already-fulfilled.html: Added. * js/dom/Promise-already-rejected-expected.txt: Added. * js/dom/Promise-already-rejected.html: Added. * js/dom/Promise-already-resolved-expected.txt: Added. * js/dom/Promise-already-resolved.html: Added. * js/dom/Promise-catch-expected.txt: Added. * js/dom/Promise-catch-in-workers-expected.txt: Added. * js/dom/Promise-catch-in-workers.html: Added. * js/dom/Promise-catch.html: Added. * js/dom/Promise-chain-expected.txt: Added. * js/dom/Promise-chain.html: Added. * js/dom/Promise-exception-expected.txt: Added. * js/dom/Promise-exception.html: Added. * js/dom/Promise-expected.txt: Added. * js/dom/Promise-fulfill-expected.txt: Added. * js/dom/Promise-fulfill-in-workers-expected.txt: Added. * js/dom/Promise-fulfill-in-workers.html: Added. * js/dom/Promise-fulfill.html: Added. * js/dom/Promise-init-expected.txt: Added. * js/dom/Promise-init-in-workers-expected.txt: Added. * js/dom/Promise-init-in-workers.html: Added. * js/dom/Promise-init.html: Added. * js/dom/Promise-reject-expected.txt: Added. * js/dom/Promise-reject-in-workers-expected.txt: Added. * js/dom/Promise-reject-in-workers.html: Added. * js/dom/Promise-reject.html: Added. * js/dom/Promise-resolve-chain-expected.txt: Added. * js/dom/Promise-resolve-chain.html: Added. * js/dom/Promise-resolve-expected.txt: Added. * js/dom/Promise-resolve-in-workers-expected.txt: Added. * js/dom/Promise-resolve-in-workers.html: Added. * js/dom/Promise-resolve-with-then-exception-expected.txt: Added. * js/dom/Promise-resolve-with-then-exception.html: Added. * js/dom/Promise-resolve-with-then-fulfill-expected.txt: Added. * js/dom/Promise-resolve-with-then-fulfill.html: Added. * js/dom/Promise-resolve-with-then-reject-expected.txt: Added. * js/dom/Promise-resolve-with-then-reject.html: Added. * js/dom/Promise-resolve.html: Added. * js/dom/Promise-simple-expected.txt: Added. * js/dom/Promise-simple-fulfill-expected.txt: Added. * js/dom/Promise-simple-fulfill-inside-callback-expected.txt: Added. * js/dom/Promise-simple-fulfill-inside-callback.html: Added. * js/dom/Promise-simple-fulfill.html: Added. * js/dom/Promise-simple-in-workers-expected.txt: Added. * js/dom/Promise-simple-in-workers.html: Added. * js/dom/Promise-simple.html: Added. * js/dom/Promise-static-fulfill-expected.txt: Added. * js/dom/Promise-static-fulfill.html: Added. * js/dom/Promise-static-reject-expected.txt: Added. * js/dom/Promise-static-reject.html: Added. * js/dom/Promise-static-resolve-expected.txt: Added. * js/dom/Promise-static-resolve.html: Added. * js/dom/Promise-then-expected.txt: Added. * js/dom/Promise-then-in-workers-expected.txt: Added. * js/dom/Promise-then-in-workers.html: Added. * js/dom/Promise-then-without-callbacks-expected.txt: Added. * js/dom/Promise-then-without-callbacks-in-workers-expected.txt: Added. * js/dom/Promise-then-without-callbacks-in-workers.html: Added. * js/dom/Promise-then-without-callbacks.html: Added. * js/dom/Promise-then.html: Added. * js/dom/Promise-types-expected.txt: Added. * js/dom/Promise-types.html: Added. * js/dom/Promise.html: Added. * js/dom/activation-object-function-lifetime-expected.txt: Added. * js/dom/activation-object-function-lifetime.html: Added. * js/dom/activation-proto-expected.txt: Added. * js/dom/activation-proto.html: Added. * js/dom/add-to-primitive-expected.txt: Added. * js/dom/add-to-primitive.html: Added. * js/dom/array-float-delete-expected.txt: Added. * js/dom/array-float-delete.html: Added. * js/dom/array-foreach-expected.txt: Added. * js/dom/array-foreach.html: Added. * js/dom/array-indexof-expected.txt: Added. * js/dom/array-indexof.html: Added. * js/dom/array-join-bug-11524-expected.txt: Added. * js/dom/array-join-bug-11524.html: Added. * js/dom/array-map-expected.txt: Added. * js/dom/array-map.html: Added. * js/dom/array-prototype-properties-expected.txt: Added. * js/dom/array-prototype-properties.html: Added. * js/dom/array-some-expected.txt: Added. * js/dom/array-some.html: Added. * js/dom/array-sort-exception-expected.txt: Added. * js/dom/array-sort-exception.html: Added. * js/dom/array-tostring-ignore-separator-expected.txt: Added. * js/dom/array-tostring-ignore-separator.html: Added. * js/dom/array-with-double-assign-expected.txt: Added. * js/dom/array-with-double-assign.html: Added. * js/dom/array-with-double-push-expected.txt: Added. * js/dom/array-with-double-push.html: Added. * js/dom/assign-expected.txt: Added. * js/dom/assign.html: Added. * js/dom/basic-map-expected.txt: Added. * js/dom/basic-map.html: Added. * js/dom/basic-set-expected.txt: Added. * js/dom/basic-set.html: Added. * js/dom/basic-weakmap-expected.txt: Added. * js/dom/basic-weakmap.html: Added. * js/dom/bitwise-and-on-undefined-expected.txt: Added. * js/dom/bitwise-and-on-undefined.html: Added. * js/dom/bom-in-file-retains-correct-offset-expected.txt: Added. * js/dom/bom-in-file-retains-correct-offset.html: Added. * js/dom/branch-fold-correctness-expected.txt: Added. * js/dom/branch-fold-correctness.html: Added. * js/dom/cached-eval-gc-expected.txt: Added. * js/dom/cached-eval-gc.html: Added. * js/dom/call-base-resolution-expected.txt: Added. * js/dom/call-base-resolution.html: Added. * js/dom/callback-function-with-handle-event-expected.txt: Added. * js/dom/callback-function-with-handle-event.html: Added. * js/dom/codegen-temporaries-multiple-global-blocks-expected.txt: Added. * js/dom/codegen-temporaries-multiple-global-blocks.html: Added. * js/dom/concat-large-strings-crash-expected.txt: Added. * js/dom/concat-large-strings-crash.html: Added. * js/dom/concat-large-strings-crash2-expected.txt: Added. * js/dom/concat-large-strings-crash2.html: Added. * js/dom/console-non-string-values-expected.txt: Added. * js/dom/console-non-string-values.html: Added. * js/dom/const-expected.txt: Added. * js/dom/const.html: Added. * js/dom/construct-global-object-expected.txt: Added. * js/dom/construct-global-object.html: Added. * js/dom/constructor-attributes-expected.txt: Added. * js/dom/constructor-attributes.html: Added. * js/dom/constructor-expected.txt: Added. * js/dom/constructor-length.html: Added. * js/dom/constructor.html: Added. * js/dom/create-lots-of-workers-expected.txt: Added. * js/dom/create-lots-of-workers.html: Added. * js/dom/cross-frame-bad-time-expected.txt: Added. * js/dom/cross-frame-bad-time.html: Added. * js/dom/cross-frame-prototype-expected.txt: Added. * js/dom/cross-frame-prototype.html: Added. * js/dom/cross-frame-really-bad-time-expected.txt: Added. * js/dom/cross-frame-really-bad-time-with-__proto__-expected.txt: Added. * js/dom/cross-frame-really-bad-time-with-__proto__.html: Added. * js/dom/cross-frame-really-bad-time.html: Added. * js/dom/cross-global-object-inline-global-var-expected.txt: Added. * js/dom/cross-global-object-inline-global-var.html: Added. * js/dom/custom-constructors-expected.txt: Added. * js/dom/custom-constructors.html: Added. * js/dom/cyclic-proto-expected.txt: Added. * js/dom/cyclic-proto.html: Added. * js/dom/cyclic-ref-toString-expected.txt: Added. * js/dom/cyclic-ref-toString.html: Added. * js/dom/date-DST-time-cusps-expected.txt: Added. * js/dom/date-DST-time-cusps.html: Added. * js/dom/date-big-constructor-expected.txt: Added. * js/dom/date-big-constructor.html: Added. * js/dom/date-big-setdate-expected.txt: Added. * js/dom/date-big-setdate.html: Added. * js/dom/date-big-setmonth-expected.txt: Added. * js/dom/date-big-setmonth.html: Added. * js/dom/date-negative-setmonth-expected.txt: Added. * js/dom/date-negative-setmonth.html: Added. * js/dom/date-preserve-milliseconds-expected.txt: Added. * js/dom/date-preserve-milliseconds.html: Added. * js/dom/deep-recursion-test-expected.txt: Added. * js/dom/deep-recursion-test.html: Added. * js/dom/delete-function-parameter-expected.txt: Added. * js/dom/delete-function-parameter.html: Added. * js/dom/delete-multiple-global-blocks-expected.txt: Added. * js/dom/delete-multiple-global-blocks.html: Added. * js/dom/delete-syntax-expected.txt: Added. * js/dom/delete-syntax.html: Added. * js/dom/dfg-arguments-alias-activation-expected.txt: Added. * js/dom/dfg-arguments-alias-activation.html: Added. * js/dom/dfg-byte-array-put-expected.txt: Added. * js/dom/dfg-byte-array-put.html: Added. * js/dom/dfg-byteOffset-neuter-expected.txt: Added. * js/dom/dfg-byteOffset-neuter.html: Added. * js/dom/dfg-compare-final-object-to-final-object-or-other-expected.txt: Added. * js/dom/dfg-compare-final-object-to-final-object-or-other.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal-with-variables-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal-with-variables.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-elements-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-elements.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-size-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-size.html: Added. * js/dom/dfg-cross-global-object-inline-new-array.html: Added. * js/dom/dfg-cross-global-object-new-array-expected.txt: Added. * js/dom/dfg-cross-global-object-new-array.html: Added. * js/dom/dfg-custom-getter-expected.txt: Added. * js/dom/dfg-custom-getter-throw-expected.txt: Added. * js/dom/dfg-custom-getter-throw-inlined-expected.txt: Added. * js/dom/dfg-custom-getter-throw-inlined.html: Added. * js/dom/dfg-custom-getter-throw.html: Added. * js/dom/dfg-custom-getter.html: Added. * js/dom/dfg-ensure-array-storage-on-window-expected.txt: Added. * js/dom/dfg-ensure-array-storage-on-window.html: Added. * js/dom/dfg-ensure-non-array-array-storage-on-window-expected.txt: Added. * js/dom/dfg-ensure-non-array-array-storage-on-window.html: Added. * js/dom/dfg-inline-resolve-expected.txt: Added. * js/dom/dfg-inline-resolve.html: Added. * js/dom/dfg-inline-switch-imm-expected.txt: Added. * js/dom/dfg-inline-switch-imm.html: Added. * js/dom/dfg-int32-to-double-on-set-local-and-exit-expected.txt: Added. * js/dom/dfg-int32-to-double-on-set-local-and-exit.html: Added. * js/dom/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt: Added. * js/dom/dfg-int32-to-double-on-set-local-and-sometimes-exit.html: Added. * js/dom/dfg-logical-not-final-object-or-other-expected.txt: Added. * js/dom/dfg-logical-not-final-object-or-other.html: Added. * js/dom/dfg-make-rope-side-effects-expected.txt: Added. * js/dom/dfg-make-rope-side-effects.html: Added. * js/dom/dfg-negative-array-size-expected.txt: Added. * js/dom/dfg-negative-array-size.html: Added. * js/dom/dfg-patchable-get-by-id-after-watchpoint-expected.txt: Added. * js/dom/dfg-patchable-get-by-id-after-watchpoint.html: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-expected.txt: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.html: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.html: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other.html: Added. * js/dom/dfg-proto-stub-watchpoint-fire-expected.txt: Added. * js/dom/dfg-proto-stub-watchpoint-fire.html: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Added. * js/dom/dfg-put-by-id-allocate-storage-expected.txt: Added. * js/dom/dfg-put-by-id-allocate-storage-polymorphic-expected.txt: Added. * js/dom/dfg-put-by-id-allocate-storage-polymorphic.html: Added. * js/dom/dfg-put-by-id-allocate-storage.html: Added. * js/dom/dfg-put-by-id-reallocate-storage-expected.txt: Added. * js/dom/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt: Added. * js/dom/dfg-put-by-id-reallocate-storage-polymorphic.html: Added. * js/dom/dfg-put-by-id-reallocate-storage.html: Added. * js/dom/dfg-put-by-val-setter-then-get-by-val-expected.txt: Added. * js/dom/dfg-put-by-val-setter-then-get-by-val.html: Added. * js/dom/dfg-put-to-readonly-property-expected.txt: Added. * js/dom/dfg-put-to-readonly-property.html: Added. * js/dom/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt: Added. * js/dom/dfg-rshift-by-zero-eliminate-valuetoint32.html: Added. * js/dom/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt: Added. * js/dom/dfg-store-unexpected-value-into-argument-and-osr-exit.html: Added. * js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt: Added. * js/dom/dfg-strcat-over-objects-then-exit-on-it.html: Added. * js/dom/dfg-strict-mode-arguments-get-beyond-length-expected.txt: Added. * js/dom/dfg-strict-mode-arguments-get-beyond-length.html: Added. * js/dom/dfg-typed-array-neuter-expected.txt: Added. * js/dom/dfg-typed-array-neuter.html: Added. * js/dom/direct-entry-to-function-code-expected.txt: Added. * js/dom/direct-entry-to-function-code.html: Added. * js/dom/do-while-expression-value-expected.txt: Added. * js/dom/do-while-expression-value.html: Added. * js/dom/do-while-without-semicolon-expected.txt: Added. * js/dom/do-while-without-semicolon.html: Added. * js/dom/document-all-between-frames-expected.txt: Added. * js/dom/document-all-between-frames.html: Added. * js/dom/document-all-triggers-masquerades-watchpoint-expected.txt: Added. * js/dom/document-all-triggers-masquerades-watchpoint.html: Added. * js/dom/dom-static-property-for-in-iteration-expected.txt: Added. * js/dom/dom-static-property-for-in-iteration.html: Added. * js/dom/dot-node-base-exception-expected.txt: Added. * js/dom/dot-node-base-exception.html: Added. * js/dom/encode-URI-test-expected.txt: Added. * js/dom/encode-URI-test.html: Added. * js/dom/end-in-string-escape-expected.txt: Added. * js/dom/end-in-string-escape.html: Added. * js/dom/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt: Added. * js/dom/enter-dictionary-indexing-mode-with-blank-indexing-type.html: Added. * js/dom/error-object-write-and-detele-for-stack-property-expected.txt: Added. * js/dom/error-object-write-and-detele-for-stack-property.html: Added. * js/dom/eval-cache-scoped-lookup-expected.txt: Added. * js/dom/eval-cache-scoped-lookup.html: Added. * js/dom/eval-contained-syntax-error-expected.txt: Added. * js/dom/eval-contained-syntax-error.html: Added. * js/dom/eval-cross-window-expected.txt: Added. * js/dom/eval-cross-window.html: Added. * js/dom/eval-keyword-vs-function-expected.txt: Added. * js/dom/eval-keyword-vs-function.html: Added. * js/dom/eval-overriding-expected.txt: Added. * js/dom/eval-overriding.html: Added. * js/dom/exception-codegen-crash-expected.txt: Added. * js/dom/exception-codegen-crash.html: Added. * js/dom/exception-line-number-expected.txt: Added. * js/dom/exception-line-number.html: Added. * js/dom/exception-linenums-in-html-1-expected.txt: Added. * js/dom/exception-linenums-in-html-1.html: Added. * js/dom/exception-linenums-in-html-2-expected.txt: Added. * js/dom/exception-linenums-in-html-2.html: Added. * js/dom/exception-linenums-in-html-3-expected.txt: Added. * js/dom/exception-linenums-in-html-3.html: Added. * js/dom/exception-registerfile-shrink-expected.txt: Added. * js/dom/exception-registerfile-shrink.html: Added. * js/dom/exception-sequencing-binops-expected.txt: Added. * js/dom/exception-sequencing-binops.html: Added. * js/dom/exception-sequencing-binops2-expected.txt: Added. * js/dom/exception-sequencing-binops2.html: Added. * js/dom/exception-sequencing-expected.txt: Added. * js/dom/exception-sequencing.html: Added. * js/dom/exception-thrown-from-equal-expected.txt: Added. * js/dom/exception-thrown-from-equal.html: Added. * js/dom/exception-thrown-from-eval-inside-closure-expected.txt: Added. * js/dom/exception-thrown-from-eval-inside-closure.html: Added. * js/dom/exception-thrown-from-function-with-lazy-activation-expected.txt: Added. * js/dom/exception-thrown-from-function-with-lazy-activation.html: Added. * js/dom/exception-thrown-from-new-expected.txt: Added. * js/dom/exception-thrown-from-new.html: Added. * js/dom/exceptions-thrown-in-callbacks-expected.txt: Added. * js/dom/exceptions-thrown-in-callbacks.html: Added. * js/dom/exec-state-marking-expected.txt: Added. * js/dom/exec-state-marking.html: Added. * js/dom/find-ignoring-case-regress-99753-expected.txt: Added. * js/dom/find-ignoring-case-regress-99753.html: Added. * js/dom/floating-point-truncate-rshift-expected.txt: Added. * js/dom/floating-point-truncate-rshift.html: Added. * js/dom/function-argument-evaluation-before-exception-expected.txt: Added. * js/dom/function-argument-evaluation-before-exception.html: Added. * js/dom/function-argument-evaluation-expected.txt: Added. * js/dom/function-argument-evaluation.html: Added. * js/dom/function-bind-expected.txt: Added. * js/dom/function-bind.html: Added. * js/dom/function-constructor-this-value-expected.txt: Added. * js/dom/function-constructor-this-value.html: Added. * js/dom/function-declarations-expected.txt: Added. * js/dom/function-declarations.html: Added. * js/dom/function-decompilation-operators-expected.txt: Added. * js/dom/function-decompilation-operators.html: Added. * js/dom/function-dot-arguments-and-caller-expected.txt: Added. * js/dom/function-dot-arguments-and-caller.html: Added. * js/dom/function-dot-arguments-identity-expected.txt: Added. * js/dom/function-dot-arguments-identity.html: Added. * js/dom/function-dot-arguments2-expected.txt: Added. * js/dom/function-dot-arguments2.html: Added. * js/dom/function-length-expected.txt: Added. * js/dom/function-length.html: Added. * js/dom/function-name-expected.txt: Added. * js/dom/function-name-is-in-scope-expected.txt: Added. * js/dom/function-name-is-in-scope.html: Added. * js/dom/function-name.html: Added. * js/dom/function-names-expected.txt: Added. * js/dom/function-names.html: Added. * js/dom/function-prototype-expected.txt: Added. * js/dom/function-prototype.html: Added. * js/dom/function-redefinition-expected.txt: Added. * js/dom/function-redefinition.html: Added. * js/dom/garbage-collect-after-string-appends-expected.txt: Added. * js/dom/get-by-pname-only-prototype-properties-expected.txt: Added. * js/dom/get-by-pname-only-prototype-properties.html: Added. * js/dom/getOwnPropertyDescriptor-expected.txt: Added. * js/dom/getOwnPropertyDescriptor.html: Added. * js/dom/global-constructors-attributes-dedicated-worker-expected.txt: Added. * js/dom/global-constructors-attributes-dedicated-worker.html: Added. * js/dom/global-constructors-attributes-expected.txt: Added. * js/dom/global-constructors-attributes-shared-worker-expected.txt: Added. * js/dom/global-constructors-attributes-shared-worker.html: Added. * js/dom/global-constructors-attributes.html: Added. * js/dom/global-constructors-deletable-expected.txt: Added. * js/dom/global-constructors-deletable.html: Added. * js/dom/global-function-resolve-expected.txt: Added. * js/dom/global-function-resolve.html: Added. * js/dom/global-recursion-on-full-stack-expected.txt: Added. * js/dom/global-recursion-on-full-stack.html: Added. * js/dom/global-var-limit-expected.txt: Added. * js/dom/global-var-limit.html: Added. * js/dom/immediate-constant-instead-of-cell-expected.txt: Added. * js/dom/immediate-constant-instead-of-cell.html: Added. * js/dom/implicit-call-with-global-reentry-expected.txt: Added. * js/dom/implicit-call-with-global-reentry.html: Added. * js/dom/implicit-global-to-global-reentry-expected.txt: Added. * js/dom/implicit-global-to-global-reentry.html: Added. * js/dom/imul-expected.txt: Added. * js/dom/imul.html: Added. * js/dom/inc-bracket-assign-subscript-expected.txt: Added. * js/dom/inc-bracket-assign-subscript.html: Added. * js/dom/inc-const-valueOf-expected.txt: Added. * js/dom/inc-const-valueOf.html: Added. * js/dom/indexed-setter-on-global-object-expected.txt: Added. * js/dom/indexed-setter-on-global-object.html: Added. * js/dom/inline-arguments-tear-off-expected.txt: Added. * js/dom/inline-arguments-tear-off.html: Added. * js/dom/instanceof-XMLHttpRequest-expected.txt: Added. * js/dom/instanceof-XMLHttpRequest.html: Added. * js/dom/invalid-syntax-for-function-expected.txt: Added. * js/dom/invalid-syntax-for-function.html: Added. * js/dom/jit-set-profiling-access-type-only-for-get-by-id-self-expected.txt: Added. * js/dom/jit-set-profiling-access-type-only-for-get-by-id-self.html: Added. * js/dom/js-constructors-use-correct-global-expected.txt: Added. * js/dom/js-constructors-use-correct-global.html: Added. * js/dom/js-correct-exception-handler-expected.txt: Added. * js/dom/js-correct-exception-handler.html: Added. * js/dom/lastModified-expected.txt: Added. * js/dom/lastModified.html: Added. * js/dom/lazy-create-arguments-from-get-by-val-expected.txt: Added. * js/dom/lazy-create-arguments-from-get-by-val.html: Added. * js/dom/lexical-lookup-in-function-constructor-expected.txt: Added. * js/dom/lexical-lookup-in-function-constructor.html: Added. * js/dom/line-column-numbers-expected.txt: Added. * js/dom/line-column-numbers.html: Added. * js/dom/method-check-expected.txt: Added. * js/dom/method-check.html: Added. * js/dom/missing-style-end-tag-js-expected.txt: Added. * js/dom/missing-style-end-tag-js.html: Added. * js/dom/missing-title-end-tag-js-expected.txt: Added. * js/dom/missing-title-end-tag-js.html: Added. * js/dom/native-error-prototype-expected.txt: Added. * js/dom/native-error-prototype.html: Added. * js/dom/navigator-language-expected.txt: Added. * js/dom/navigator-language.html: Added. * js/dom/navigator-plugins-crash-expected.txt: Added. * js/dom/navigator-plugins-crash.html: Added. * js/dom/negate-overflow-expected.txt: Added. * js/dom/negate-overflow.html: Added. * js/dom/neq-null-crash-expected.txt: Added. * js/dom/neq-null-crash.html: Added. * js/dom/nested-function-scope-expected.txt: Added. * js/dom/nested-function-scope.html: Added. * js/dom/nested-object-gc-expected.txt: Added. * js/dom/nested-object-gc.html: Added. * js/dom/non-object-proto-expected.txt: Added. * js/dom/non-object-proto.html: Added. * js/dom/normal-character-escapes-in-string-literals-expected.txt: Added. * js/dom/normal-character-escapes-in-string-literals.html: Added. * js/dom/not-a-constructor-to-string-expected.txt: Added. * js/dom/not-a-constructor-to-string.html: Added. * js/dom/not-a-function-to-string-expected.txt: Added. * js/dom/not-a-function-to-string.html: Added. * js/dom/null-char-in-string-expected.txt: Added. * js/dom/null-char-in-string.html: Added. * js/dom/number-tofixed-expected.txt: Added. * js/dom/number-tofixed.html: Added. * js/dom/number-toprecision-expected.txt: Added. * js/dom/number-toprecision.html: Added. * js/dom/object-extra-comma-expected.txt: Added. * js/dom/object-extra-comma.html: Added. * js/dom/object-prototype-constructor-expected.txt: Added. * js/dom/object-prototype-constructor.html: Added. * js/dom/object-prototype-properties-expected.txt: Added. * js/dom/object-prototype-properties.html: Added. * js/dom/object-prototype-toLocaleString-expected.txt: Added. * js/dom/object-prototype-toLocaleString.html: Added. * js/dom/parse-error-external-script-in-eval-expected.txt: Added. * js/dom/parse-error-external-script-in-eval.html: Added. * js/dom/parse-error-external-script-in-new-Function-expected.txt: Added. * js/dom/parse-error-external-script-in-new-Function.html: Added. * js/dom/post-inc-assign-overwrites-expected.txt: Added. * js/dom/post-inc-assign-overwrites.html: Added. * js/dom/post-message-numeric-property-expected.txt: Added. * js/dom/post-message-numeric-property.html: Added. * js/dom/postfix-syntax-expected.txt: Added. * js/dom/postfix-syntax.html: Added. * js/dom/prefix-syntax-expected.txt: Added. * js/dom/prefix-syntax.html: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Added. * js/dom/put-direct-index-beyond-vector-length-resize-expected.txt: Added. * js/dom/put-direct-index-beyond-vector-length-resize.html: Added. * js/dom/put-to-base-global-checked-expected.txt: Added. * js/dom/put-to-base-global-checked.html: Added. * js/dom/random-array-gc-stress-expected.txt: Added. * js/dom/random-array-gc-stress.html: Added. * js/dom/recursion-limit-equal-expected.txt: Added. * js/dom/recursion-limit-equal.html: Added. * js/dom/regexp-bol-expected.txt: Added. * js/dom/regexp-bol-with-multiline-expected.txt: Added. * js/dom/regexp-bol-with-multiline.html: Added. * js/dom/regexp-bol.html: Added. * js/dom/regexp-caching-expected.txt: Added. * js/dom/regexp-caching.html: Added. * js/dom/regexp-charclass-crash-expected.txt: Added. * js/dom/regexp-charclass-crash.html: Added. * js/dom/regexp-extended-characters-crash-expected.txt: Added. * js/dom/regexp-extended-characters-crash.html: Added. * js/dom/regexp-lastindex-expected.txt: Added. * js/dom/regexp-lastindex.html: Added. * js/dom/regexp-look-ahead-empty-expected.txt: Added. * js/dom/regexp-look-ahead-empty.html: Added. * js/dom/regexp-look-ahead-expected.txt: Added. * js/dom/regexp-look-ahead.html: Added. * js/dom/regexp-match-reify-before-putbyval-expected.txt: Added. * js/dom/regexp-match-reify-before-putbyval.html: Added. * js/dom/regexp-non-capturing-groups-expected.txt: Added. * js/dom/regexp-non-capturing-groups.html: Added. * js/dom/regexp-non-greedy-parentheses-expected.txt: Added. * js/dom/regexp-non-greedy-parentheses.html: Added. * js/dom/regexp-overflow-expected.txt: Added. * js/dom/regexp-overflow.html: Added. * js/dom/regexp-range-out-of-order-expected.txt: Added. * js/dom/regexp-range-out-of-order.html: Added. * js/dom/regexp-ranges-and-escaped-hyphens-expected.txt: Added. * js/dom/regexp-ranges-and-escaped-hyphens.html: Added. * js/dom/regexp-stack-overflow-expected.txt: Added. * js/dom/regexp-stack-overflow.html: Added. * js/dom/regexp-test-null-string-expected.txt: Added. * js/dom/regexp-test-null-string.html: Added. * js/dom/regexp-unicode-handling-expected.txt: Added. * js/dom/regexp-unicode-handling.html: Added. * js/dom/regexp-unicode-overflow-expected.txt: Added. * js/dom/regexp-unicode-overflow.html: Added. * js/dom/removing-Cf-characters-expected.txt: Added. * js/dom/removing-Cf-characters.html: Added. * js/dom/reserved-words-as-property-expected.txt: Added. * js/dom/reserved-words-as-property.html: Added. * js/dom/same-origin-subframe-about-blank-expected.txt: Added. * js/dom/same-origin-subframe-about-blank.html: Added. * js/dom/script-line-number-expected.txt: Added. * js/dom/script-line-number.html: Added. * js/dom/script-tests: Added. * js/dom/script-tests/Object-defineProperty.js: Added. (createUnconfigurableProperty): (getter): (getter1): (setter): (setter1): (get shouldBeTrue): (testObject.): (testObject.set get anObj): (testObject): * js/dom/script-tests/activation-proto.js: Added. * js/dom/script-tests/array-float-delete.js: Added. * js/dom/script-tests/array-join-bug-11524.js: Added. (customObject.valueOf): * js/dom/script-tests/array-prototype-properties.js: Added. * js/dom/script-tests/array-sort-exception.js: Copied from LayoutTests/js/script-tests/array-sort-exception.js. * js/dom/script-tests/array-tostring-ignore-separator.js: Added. * js/dom/script-tests/array-with-double-assign.js: Added. (foo): * js/dom/script-tests/array-with-double-push.js: Added. (foo): * js/dom/script-tests/assign.js: Added. * js/dom/script-tests/basic-map.js: Added. (set shouldBe): (set var): * js/dom/script-tests/basic-set.js: Added. (set new): (otherString.string_appeared_here.set add): (try.set forEach): (set forEach): (set gc): * js/dom/script-tests/basic-weakmap.js: Added. * js/dom/script-tests/cached-eval-gc.js: Added. (gc): (doTest): * js/dom/script-tests/constructor-attributes.js: Added. (canEnum): (checkConstructor): (declaredFunction): * js/dom/script-tests/constructor.js: Added. * js/dom/script-tests/cross-frame-bad-time.js: Added. (foo): * js/dom/script-tests/cross-frame-really-bad-time-with-__proto__.js: Added. (foo): (evil): (bar): (done): * js/dom/script-tests/cross-frame-really-bad-time.js: Added. (Cons): (foo): (evil): (bar): (done): * js/dom/script-tests/cross-global-object-inline-global-var.js: Added. (foo): (done): (doit): * js/dom/script-tests/custom-constructors.js: Added. * js/dom/script-tests/cyclic-proto.js: Added. * js/dom/script-tests/cyclic-ref-toString.js: Added. * js/dom/script-tests/date-DST-time-cusps.js: Added. * js/dom/script-tests/date-big-constructor.js: Added. * js/dom/script-tests/date-big-setdate.js: Added. * js/dom/script-tests/date-big-setmonth.js: Added. * js/dom/script-tests/date-negative-setmonth.js: Added. * js/dom/script-tests/date-preserve-milliseconds.js: Added. * js/dom/script-tests/delete-syntax.js: Added. * js/dom/script-tests/dfg-byte-array-put.js: Added. (doPut): (doGet): * js/dom/script-tests/dfg-byteOffset-neuter.js: Added. (foo): * js/dom/script-tests/dfg-compare-final-object-to-final-object-or-other.js: Added. (foo): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-literal-with-variables.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-literal.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-with-elements.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-with-size.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-new-array.js: Added. (foo): (runTest): (doit): * js/dom/script-tests/dfg-custom-getter-throw-inlined.js: Added. (foo): (baz): (bar): * js/dom/script-tests/dfg-custom-getter-throw.js: Added. (foo): (bar): * js/dom/script-tests/dfg-custom-getter.js: Added. (foo): * js/dom/script-tests/dfg-ensure-array-storage-on-window.js: Added. (foo): (while): * js/dom/script-tests/dfg-ensure-non-array-array-storage-on-window.js: Added. (foo): (bar): (.shouldBe): * js/dom/script-tests/dfg-inline-switch-imm.js: Added. (foo): (bar): * js/dom/script-tests/dfg-int32-to-double-on-set-local-and-exit.js: Added. (checkpoint): (func1): (func2): (func3): (test): * js/dom/script-tests/dfg-int32-to-double-on-set-local-and-sometimes-exit.js: Added. (checkpoint): (func1): (func2): (func3): (test): * js/dom/script-tests/dfg-logical-not-final-object-or-other.js: Added. (foo): * js/dom/script-tests/dfg-make-rope-side-effects.js: Added. (f): (k.valueOf): (k.toString): * js/dom/script-tests/dfg-negative-array-size.js: Added. (foo): * js/dom/script-tests/dfg-patchable-get-by-id-after-watchpoint.js: Added. (foo): (O): (O.prototype.f): (P1): (P2): * js/dom/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js: Added. (foo): * js/dom/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js: Added. (foo): * js/dom/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other.js: Added. (foo): * js/dom/script-tests/dfg-proto-stub-watchpoint-fire.js: Added. (A): (B): (foo): * js/dom/script-tests/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Added. (f): * js/dom/script-tests/dfg-put-by-id-allocate-storage-polymorphic.js: Added. (foo): * js/dom/script-tests/dfg-put-by-id-allocate-storage.js: Added. (foo): * js/dom/script-tests/dfg-put-by-id-reallocate-storage-polymorphic.js: Added. (foo): * js/dom/script-tests/dfg-put-by-id-reallocate-storage.js: Added. (foo): * js/dom/script-tests/dfg-put-by-val-setter-then-get-by-val.js: Added. (foo): (for): * js/dom/script-tests/dfg-put-to-readonly-property.js: Added. (foo): (bar): * js/dom/script-tests/dfg-rshift-by-zero-eliminate-valuetoint32.js: Added. (f): * js/dom/script-tests/dfg-store-unexpected-value-into-argument-and-osr-exit.js: Added. (foo): * js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js: Added. (foo): (bar): (x): * js/dom/script-tests/dfg-strict-mode-arguments-get-beyond-length.js: Added. (foo): (bar): * js/dom/script-tests/dfg-typed-array-neuter.js: Added. (foo): (bar): * js/dom/script-tests/document-all-triggers-masquerades-watchpoint.js: Added. (f): * js/dom/script-tests/dot-node-base-exception.js: Added. * js/dom/script-tests/end-in-string-escape.js: Added. * js/dom/script-tests/enter-dictionary-indexing-mode-with-blank-indexing-type.js: Added. * js/dom/script-tests/eval-cache-scoped-lookup.js: Added. (first): (a.string_appeared_here.second): (third): (fifth): (sixth): (seventh): (eighth): (nineth): (tenth): (eleventh): * js/dom/script-tests/eval-contained-syntax-error.js: Added. * js/dom/script-tests/exception-line-number.js: Added. (foo): (window.onerror): * js/dom/script-tests/exception-registerfile-shrink.js: Added. * js/dom/script-tests/exception-sequencing-binops.js: Copied from LayoutTests/js/exception-sequencing-binops.js. * js/dom/script-tests/function-bind.js: Added. (F): * js/dom/script-tests/function-name.js: Added. * js/dom/script-tests/function-names.js: Added. (checkConstructorName): * js/dom/script-tests/get-by-pname-only-prototype-properties.js: Added. (foo): * js/dom/script-tests/global-constructors-attributes.js: Added. (.self.postMessage): (.self.onconnect.self.postMessage): (.self.onconnect): (classNameForObject): (constructorPropertiesOnGlobalObject): * js/dom/script-tests/global-constructors-deletable.js: Added. * js/dom/script-tests/global-function-resolve.js: Added. * js/dom/script-tests/immediate-constant-instead-of-cell.js: Added. * js/dom/script-tests/implicit-call-with-global-reentry.js: Added. (testGlobalCode): (testObject.get getterTest): (testObject.set setterTest): (testObject.toString): (testObject.valueOf): (testObject.toStringTest): (testObject.valueOfTest): * js/dom/script-tests/imul.js: Added. (testIMul): * js/dom/script-tests/inc-bracket-assign-subscript.js: Added. (testPreIncBracketAccessWithAssignSubscript): (testPostIncBracketAccessWithAssignSubscript): * js/dom/script-tests/inc-const-valueOf.js: Added. (testPostIncConstVarWithIgnoredResult.const.a.valueOf): (testPostIncConstVarWithIgnoredResult): (testPreIncConstVarWithIgnoredResult.const.a.valueOf): (testPreIncConstVarWithIgnoredResult): (testPreIncConstVarWithAssign.const.a.valueOf): (testPreIncConstVarWithAssign): * js/dom/script-tests/indexed-setter-on-global-object.js: Added. * js/dom/script-tests/inline-arguments-tear-off.js: Added. (g): (f): (doStuff): * js/dom/script-tests/instanceof-XMLHttpRequest.js: Added. * js/dom/script-tests/jit-set-profiling-access-type-only-for-get-by-id-self.js: Added. (L_): (Q2): (f): * js/dom/script-tests/js-correct-exception-handler.js: Added. (throwEventually): (f.g): (f): (test): * js/dom/script-tests/lastModified.js: Added. * js/dom/script-tests/lazy-create-arguments-from-get-by-val.js: Added. (foo): * js/dom/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): (try.testObj19b.toString): (try.testObj19b.run): (try.test20b.f): (try.test20b): (try.toFuzz21b): (try.toFuzz22b): * js/dom/script-tests/method-check.js: Added. (func2): (func.String.prototype.a): (func.String.prototype.b): (func): (addOne): (addOneHundred): (totalizer.makeCall): * js/dom/script-tests/native-error-prototype.js: Added. * js/dom/script-tests/neq-null-crash.js: Added. (crush): * js/dom/script-tests/nested-object-gc.js: Added. * js/dom/script-tests/non-object-proto.js: Added. * js/dom/script-tests/normal-character-escapes-in-string-literals.js: Added. (test): (testOther): * js/dom/script-tests/null-char-in-string.js: Added. * js/dom/script-tests/number-tofixed.js: Added. * js/dom/script-tests/number-toprecision.js: Added. * js/dom/script-tests/object-extra-comma.js: Added. * js/dom/script-tests/object-prototype-constructor.js: Added. (Foo.Bar): (F): * js/dom/script-tests/object-prototype-properties.js: Added. * js/dom/script-tests/object-prototype-toLocaleString.js: Added. (o.toLocaleString): (String.prototype.toString): * js/dom/script-tests/post-inc-assign-overwrites.js: Added. (postIncDotAssignToBase): (postIncBracketAssignToBase): (postIncBracketAssignToSubscript): * js/dom/script-tests/post-message-numeric-property.js: Added. (window.onmessage): * js/dom/script-tests/postfix-syntax.js: Added. * js/dom/script-tests/prefix-syntax.js: Added. * js/dom/script-tests/prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Added. (f): * js/dom/script-tests/put-direct-index-beyond-vector-length-resize.js: Added. * js/dom/script-tests/put-to-base-global-checked.js: Added. (globalF): (warmup): (foo): * js/dom/script-tests/random-array-gc-stress.js: Added. (getRandomIndex): (test): * js/dom/script-tests/recursion-limit-equal.js: Added. (test): * js/dom/script-tests/regexp-bol-with-multiline.js: Added. * js/dom/script-tests/regexp-bol.js: Added. * js/dom/script-tests/regexp-extended-characters-crash.js: Added. * js/dom/script-tests/regexp-lastindex.js: Added. * js/dom/script-tests/regexp-look-ahead-empty.js: Added. * js/dom/script-tests/regexp-look-ahead.js: Added. * js/dom/script-tests/regexp-match-reify-before-putbyval.js: Added. * js/dom/script-tests/regexp-non-capturing-groups.js: Added. * js/dom/script-tests/regexp-non-greedy-parentheses.js: Added. * js/dom/script-tests/regexp-overflow.js: Added. * js/dom/script-tests/regexp-range-out-of-order.js: Added. * js/dom/script-tests/regexp-ranges-and-escaped-hyphens.js: Added. * js/dom/script-tests/regexp-stack-overflow.js: Added. * js/dom/script-tests/regexp-unicode-handling.js: Added. (Gn): * js/dom/script-tests/regexp-unicode-overflow.js: Added. (createRegExs): * js/dom/script-tests/removing-Cf-characters.js: Added. * js/dom/script-tests/reserved-words-as-property.js: Added. (testWordEvalAndFunction): (testWord): (testWordStrictAndNonStrict): * js/dom/script-tests/select-options-add.js: Added. * js/dom/script-tests/stack-at-creation-for-error-objects.js: Added. (checkStack): * js/dom/script-tests/stack-trace.js: Added. (printStack): (hostThrower): (callbacker): (outer): (inner): (evaler): (normalOuter): (normalInner): (scripterInner): (scripterOuter): (selfRecursive1): (selfRecursive2): (selfRecursive3): (throwError): (object.get getter1.o.valueOf): (object.get getter1): (object.get getter2): (object.get getter3.o2.valueOf): (object.get getter3): (object.nonInlineable.callCount): (object.nonInlineable): (object.inlineable): (yetAnotherInlinedCall): (makeInlinableCall): (.try.g): (h): (mapTest): (mapTestDriver): (dfgFunction): (try.f): (callNonCallable): (dfgTest): (inlineableThrow): (dfgThing.get willThrow): (dfgThing.get willThrowEventually): (dfgThing.willThrowFunc): (dfgThing.willThrowEventuallyFunc): (dfg1): (dfg2): (dfg3): (dfg4): (dfg5): (dfg6): (dfg7): (dfg8): (dfg9): (dfga): (dfgb): (dfgc): * js/dom/script-tests/strict-readonly-statics.js: Added. (testWindowUndefined): (testNumberMAX_VALUE): * js/dom/script-tests/string-match.js: Added. (testMatch): * js/dom/script-tests/string-prototype-properties.js: Added. (Number.prototype.toString): * js/dom/script-tests/string-replace-2.js: Added. (testReplace): (replacer): * js/dom/script-tests/string-replace-3.js: Added. * js/dom/script-tests/string-replacement-outofmemory.js: Added. (createStringWithRepeatedChar): * js/dom/script-tests/string-split-conformance.js: Added. * js/dom/script-tests/string-split-double-empty.js: Added. * js/dom/script-tests/string-split-ignore-case.js: Added. * js/dom/script-tests/switch-behaviour.js: Added. (characterSwitch): (sparseCharacterSwitch): * js/dom/script-tests/throw-exception-in-global-setter.js: Added. (callSetter): * js/dom/script-tests/toInt32UInt32.js: Added. * js/dom/script-tests/toString-exception.js: Added. * js/dom/script-tests/toString-overrides.js: Added. (Number.prototype.toString): (Number.prototype.toLocaleString): (RegExp.prototype.toString): (RegExp.prototype.toLocaleString): * js/dom/script-tests/toString-stack-overflow.js: Added. * js/dom/script-tests/transition-cache-dictionary-crash.js: Added. (f): * js/dom/script-tests/typed-array-access.js: Added. (bitsToString): (bitsToValue): (valueToBits): (roundTrip): * js/dom/script-tests/typed-array-set-different-types.js: Added. (MyRandom): (.reference): (.usingConstruct): * js/dom/script-tests/typeof-syntax.js: Added. * js/dom/script-tests/unshift-multi.js: Added. (unshift1): (unshift2): (unshift5): * js/dom/script-tests/vardecl-preserve-arguments.js: Added. (argumentsLength): (argumentsLengthInnerBlock): (argumentsLengthInnerBlock2): (argumentsLengthTryCatch): (argumentsLengthWith): (argumentsLengthOverride): (argumentsLengthOverrideInnerBlock): (argumentsLengthOverrideInnerBlock2): (argumentsLengthOverrideInnerBlock3): (argumentsTearOff1): (argumentsTearOff2): (argumentsTearOff3): * js/dom/script-tests/webcore-string-comparison.js: Added. * js/dom/script-tests/with-scope-gc.js: Added. (gc): * js/dom/select-options-add-expected.txt: Added. * js/dom/select-options-add.html: Added. * js/dom/select-options-remove-expected.txt: Added. * js/dom/select-options-remove-gc-expected.txt: Added. * js/dom/select-options-remove-gc.html: Added. * js/dom/select-options-remove.html: Added. * js/dom/stack-at-creation-for-error-objects-expected.txt: Added. * js/dom/stack-at-creation-for-error-objects.html: Added. * js/dom/stack-trace-expected.txt: Added. * js/dom/stack-trace.html: Added. * js/dom/strict-readonly-statics-expected.txt: Added. * js/dom/strict-readonly-statics.html: Added. * js/dom/string-anchor-expected.txt: Added. * js/dom/string-anchor.html: Added. * js/dom/string-concatenate-outofmemory-expected.txt: Added. * js/dom/string-fontcolor-expected.txt: Added. * js/dom/string-fontcolor.html: Added. * js/dom/string-fontsize-expected.txt: Added. * js/dom/string-fontsize.html: Added. * js/dom/string-link-expected.txt: Added. * js/dom/string-link.html: Added. * js/dom/string-match-expected.txt: Added. * js/dom/string-match.html: Added. * js/dom/string-prototype-properties-expected.txt: Added. * js/dom/string-prototype-properties.html: Added. * js/dom/string-replace-2-expected.txt: Added. * js/dom/string-replace-2.html: Added. * js/dom/string-replace-3-expected.txt: Added. * js/dom/string-replace-3.html: Added. * js/dom/string-replace-exception-crash-expected.txt: Added. * js/dom/string-replace-exception-crash.html: Added. * js/dom/string-replacement-outofmemory-expected.txt: Added. * js/dom/string-replacement-outofmemory.html: Added. * js/dom/string-split-conformance-expected.txt: Added. * js/dom/string-split-conformance.html: Added. * js/dom/string-split-double-empty-expected.txt: Added. * js/dom/string-split-double-empty.html: Added. * js/dom/string-split-ignore-case-expected.txt: Added. * js/dom/string-split-ignore-case.html: Added. * js/dom/switch-behaviour-expected.txt: Added. * js/dom/switch-behaviour.html: Added. * js/dom/text-field-resize-expected.txt: Added. * js/dom/text-field-resize.html: Added. * js/dom/throw-exception-in-global-setter-expected.txt: Added. * js/dom/throw-exception-in-global-setter.html: Added. * js/dom/throw-from-array-sort-expected.txt: Added. * js/dom/throw-from-array-sort.html: Added. * js/dom/toInt32UInt32-expected.txt: Added. * js/dom/toInt32UInt32.html: Added. * js/dom/toString-and-valueOf-override-expected.txt: Added. * js/dom/toString-and-valueOf-override.html: Added. * js/dom/toString-dontEnum-expected.txt: Added. * js/dom/toString-dontEnum.html: Added. * js/dom/toString-exception-expected.txt: Added. * js/dom/toString-exception.html: Added. * js/dom/toString-number-expected.txt: Added. * js/dom/toString-number.html: Added. * js/dom/toString-overrides-expected.txt: Added. * js/dom/toString-overrides.html: Added. * js/dom/toString-stack-overflow-expected.txt: Added. * js/dom/toString-stack-overflow.html: Added. * js/dom/toString-try-else-expected.txt: Added. * js/dom/toString-try-else.html: Added. * js/dom/transition-cache-dictionary-crash-expected.txt: Added. * js/dom/transition-cache-dictionary-crash.html: Added. * js/dom/trivial-functions-expected.txt: Added. * js/dom/trivial-functions.html: Added. * js/dom/try-catch-crash-expected.txt: Added. * js/dom/try-catch-crash.html: Added. * js/dom/typed-array-access-expected.txt: Added. * js/dom/typed-array-access.html: Added. * js/dom/typed-array-set-different-types-expected.txt: Added. * js/dom/typed-array-set-different-types.html: Added. * js/dom/typeof-syntax-expected.txt: Added. * js/dom/typeof-syntax.html: Added. * js/dom/uncaught-exception-line-number-expected.txt: Added. * js/dom/uncaught-exception-line-number.html: Added. * js/dom/unshift-multi-expected.txt: Added. * js/dom/unshift-multi.html: Added. * js/dom/var-declarations-expected.txt: Added. * js/dom/var-declarations-shadowing-expected.txt: Added. * js/dom/var-declarations-shadowing.html: Added. * js/dom/var-declarations.html: Added. * js/dom/vardecl-preserve-arguments-expected.txt: Added. * js/dom/vardecl-preserve-arguments.html: Added. * js/dom/vardecl-preserve-parameters-expected.txt: Added. * js/dom/vardecl-preserve-parameters.html: Added. * js/dom/vardecl-preserve-vardecl-expected.txt: Added. * js/dom/vardecl-preserve-vardecl.html: Added. * js/dom/webcore-string-comparison-expected.txt: Added. * js/dom/webcore-string-comparison.html: Added. * js/dom/webidl-type-mapping-expected.txt: Added. * js/dom/webidl-type-mapping.html: Added. * js/dom/while-expression-value-expected.txt: Added. * js/dom/while-expression-value.html: Added. * js/dom/window-location-href-file-urls-expected.txt: Added. * js/dom/window-location-href-file-urls.html: Added. * js/dom/with-scope-gc-expected.txt: Added. * js/dom/with-scope-gc.html: Added. * js/dot-node-base-exception-expected.txt: Removed. * js/dot-node-base-exception.html: Removed. * js/encode-URI-test-expected.txt: Removed. * js/encode-URI-test.html: Removed. * js/end-in-string-escape-expected.txt: Removed. * js/end-in-string-escape.html: Removed. * js/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt: Removed. * js/enter-dictionary-indexing-mode-with-blank-indexing-type.html: Removed. * js/error-object-write-and-detele-for-stack-property-expected.txt: Removed. * js/error-object-write-and-detele-for-stack-property.html: Removed. * js/eval-cache-scoped-lookup-expected.txt: Removed. * js/eval-cache-scoped-lookup.html: Removed. * js/eval-contained-syntax-error-expected.txt: Removed. * js/eval-contained-syntax-error.html: Removed. * js/eval-cross-window-expected.txt: Removed. * js/eval-cross-window.html: Removed. * js/eval-keyword-vs-function-expected.txt: Removed. * js/eval-keyword-vs-function.html: Removed. * js/eval-overriding-expected.txt: Removed. * js/eval-overriding.html: Removed. * js/exception-codegen-crash-expected.txt: Removed. * js/exception-codegen-crash.html: Removed. * js/exception-line-number-expected.txt: Removed. * js/exception-line-number.html: Removed. * js/exception-linenums-in-html-1-expected.txt: Removed. * js/exception-linenums-in-html-1.html: Removed. * js/exception-linenums-in-html-2-expected.txt: Removed. * js/exception-linenums-in-html-2.html: Removed. * js/exception-linenums-in-html-3-expected.txt: Removed. * js/exception-linenums-in-html-3.html: Removed. * js/exception-registerfile-shrink-expected.txt: Removed. * js/exception-registerfile-shrink.html: Removed. * js/exception-sequencing-binops-expected.txt: Removed. * js/exception-sequencing-binops.html: Removed. * js/exception-sequencing-binops.js: Removed. * js/exception-sequencing-binops2-expected.txt: Removed. * js/exception-sequencing-binops2.html: Removed. * js/exception-sequencing-expected.txt: Removed. * js/exception-sequencing.html: Removed. * js/exception-thrown-from-equal-expected.txt: Removed. * js/exception-thrown-from-equal.html: Removed. * js/exception-thrown-from-eval-inside-closure-expected.txt: Removed. * js/exception-thrown-from-eval-inside-closure.html: Removed. * js/exception-thrown-from-function-with-lazy-activation-expected.txt: Removed. * js/exception-thrown-from-function-with-lazy-activation.html: Removed. * js/exception-thrown-from-new-expected.txt: Removed. * js/exception-thrown-from-new.html: Removed. * js/exceptions-thrown-in-callbacks-expected.txt: Removed. * js/exceptions-thrown-in-callbacks.html: Removed. * js/exec-state-marking-expected.txt: Removed. * js/exec-state-marking.html: Removed. * js/find-ignoring-case-regress-99753-expected.txt: Removed. * js/find-ignoring-case-regress-99753.html: Removed. * js/floating-point-truncate-rshift-expected.txt: Removed. * js/floating-point-truncate-rshift.html: Removed. * js/function-argument-evaluation-before-exception-expected.txt: Removed. * js/function-argument-evaluation-before-exception.html: Removed. * js/function-argument-evaluation-expected.txt: Removed. * js/function-argument-evaluation.html: Removed. * js/function-bind-expected.txt: Removed. * js/function-bind.html: Removed. * js/function-constructor-this-value-expected.txt: Removed. * js/function-constructor-this-value.html: Removed. * js/function-declarations-expected.txt: Removed. * js/function-declarations.html: Removed. * js/function-decompilation-operators-expected.txt: Removed. * js/function-decompilation-operators.html: Removed. * js/function-dot-arguments-and-caller-expected.txt: Removed. * js/function-dot-arguments-and-caller.html: Removed. * js/function-dot-arguments-identity-expected.txt: Removed. * js/function-dot-arguments-identity.html: Removed. * js/function-dot-arguments2-expected.txt: Removed. * js/function-dot-arguments2.html: Removed. * js/function-length-expected.txt: Removed. * js/function-length.html: Removed. * js/function-name-expected.txt: Removed. * js/function-name-is-in-scope-expected.txt: Removed. * js/function-name-is-in-scope.html: Removed. * js/function-name.html: Removed. * js/function-names-expected.txt: Removed. * js/function-names.html: Removed. * js/function-prototype-expected.txt: Removed. * js/function-prototype.html: Removed. * js/function-redefinition-expected.txt: Removed. * js/function-redefinition.html: Removed. * js/garbage-collect-after-string-appends-expected.txt: Removed. * js/get-by-pname-only-prototype-properties-expected.txt: Removed. * js/get-by-pname-only-prototype-properties.html: Removed. * js/getOwnPropertyDescriptor-expected.txt: Removed. * js/getOwnPropertyDescriptor.html: Removed. * js/global-constructors-attributes-dedicated-worker-expected.txt: Removed. * js/global-constructors-attributes-dedicated-worker.html: Removed. * js/global-constructors-attributes-expected.txt: Removed. * js/global-constructors-attributes-shared-worker-expected.txt: Removed. * js/global-constructors-attributes-shared-worker.html: Removed. * js/global-constructors-attributes.html: Removed. * js/global-constructors-deletable-expected.txt: Removed. * js/global-constructors-deletable.html: Removed. * js/global-function-resolve-expected.txt: Removed. * js/global-function-resolve.html: Removed. * js/global-recursion-on-full-stack-expected.txt: Removed. * js/global-recursion-on-full-stack.html: Removed. * js/global-var-limit-expected.txt: Removed. * js/global-var-limit.html: Removed. * js/immediate-constant-instead-of-cell-expected.txt: Removed. * js/immediate-constant-instead-of-cell.html: Removed. * js/implicit-call-with-global-reentry-expected.txt: Removed. * js/implicit-call-with-global-reentry.html: Removed. * js/implicit-global-to-global-reentry-expected.txt: Removed. * js/implicit-global-to-global-reentry.html: Removed. * js/imul-expected.txt: Removed. * js/imul.html: Removed. * js/inc-bracket-assign-subscript-expected.txt: Removed. * js/inc-bracket-assign-subscript.html: Removed. * js/inc-const-valueOf-expected.txt: Removed. * js/inc-const-valueOf.html: Removed. * js/indexed-setter-on-global-object-expected.txt: Removed. * js/indexed-setter-on-global-object.html: Removed. * js/inline-arguments-tear-off-expected.txt: Removed. * js/inline-arguments-tear-off.html: Removed. * js/instanceof-XMLHttpRequest-expected.txt: Removed. * js/instanceof-XMLHttpRequest.html: Removed. * js/invalid-syntax-for-function-expected.txt: Removed. * js/invalid-syntax-for-function.html: Removed. * js/jit-set-profiling-access-type-only-for-get-by-id-self-expected.txt: Removed. * js/jit-set-profiling-access-type-only-for-get-by-id-self.html: Removed. * js/js-constructors-use-correct-global-expected.txt: Removed. * js/js-constructors-use-correct-global.html: Removed. * js/js-correct-exception-handler-expected.txt: Removed. * js/js-correct-exception-handler.html: Removed. * js/jsc-test-list: Removed. * js/lastModified-expected.txt: Removed. * js/lastModified.html: Removed. * js/lazy-create-arguments-from-get-by-val-expected.txt: Removed. * js/lazy-create-arguments-from-get-by-val.html: Removed. * js/lexical-lookup-in-function-constructor-expected.txt: Removed. * js/lexical-lookup-in-function-constructor.html: Removed. * js/line-column-numbers-expected.txt: Removed. * js/line-column-numbers.html: Removed. * js/method-check-expected.txt: Removed. * js/method-check.html: Removed. * js/missing-style-end-tag-js-expected.txt: Removed. * js/missing-style-end-tag-js.html: Removed. * js/missing-title-end-tag-js-expected.txt: Removed. * js/missing-title-end-tag-js.html: Removed. * js/native-error-prototype-expected.txt: Removed. * js/native-error-prototype.html: Removed. * js/navigator-language-expected.txt: Removed. * js/navigator-language.html: Removed. * js/navigator-plugins-crash-expected.txt: Removed. * js/navigator-plugins-crash.html: Removed. * js/negate-overflow-expected.txt: Removed. * js/negate-overflow.html: Removed. * js/neq-null-crash-expected.txt: Removed. * js/neq-null-crash.html: Removed. * js/nested-function-scope-expected.txt: Removed. * js/nested-function-scope.html: Removed. * js/nested-object-gc-expected.txt: Removed. * js/nested-object-gc.html: Removed. * js/non-object-proto-expected.txt: Removed. * js/non-object-proto.html: Removed. * js/normal-character-escapes-in-string-literals-expected.txt: Removed. * js/normal-character-escapes-in-string-literals.html: Removed. * js/not-a-constructor-to-string-expected.txt: Removed. * js/not-a-constructor-to-string.html: Removed. * js/not-a-function-to-string-expected.txt: Removed. * js/not-a-function-to-string.html: Removed. * js/null-char-in-string-expected.txt: Removed. * js/null-char-in-string.html: Removed. * js/number-tofixed-expected.txt: Removed. * js/number-tofixed.html: Removed. * js/number-toprecision-expected.txt: Removed. * js/number-toprecision.html: Removed. * js/object-extra-comma-expected.txt: Removed. * js/object-extra-comma.html: Removed. * js/object-prototype-constructor-expected.txt: Removed. * js/object-prototype-constructor.html: Removed. * js/object-prototype-properties-expected.txt: Removed. * js/object-prototype-properties.html: Removed. * js/object-prototype-toLocaleString-expected.txt: Removed. * js/object-prototype-toLocaleString.html: Removed. * js/parse-error-external-script-in-eval-expected.txt: Removed. * js/parse-error-external-script-in-eval.html: Removed. * js/parse-error-external-script-in-new-Function-expected.txt: Removed. * js/parse-error-external-script-in-new-Function.html: Removed. * js/post-inc-assign-overwrites-expected.txt: Removed. * js/post-inc-assign-overwrites.html: Removed. * js/post-message-numeric-property-expected.txt: Removed. * js/post-message-numeric-property.html: Removed. * js/postfix-syntax-expected.txt: Removed. * js/postfix-syntax.html: Removed. * js/prefix-syntax-expected.txt: Removed. * js/prefix-syntax.html: Removed. * js/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Removed. * js/prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Removed. * js/put-direct-index-beyond-vector-length-resize-expected.txt: Removed. * js/put-direct-index-beyond-vector-length-resize.html: Removed. * js/put-to-base-global-checked-expected.txt: Removed. * js/put-to-base-global-checked.html: Removed. * js/random-array-gc-stress-expected.txt: Removed. * js/random-array-gc-stress.html: Removed. * js/recursion-limit-equal-expected.txt: Removed. * js/recursion-limit-equal.html: Removed. * js/regexp-bol-expected.txt: Removed. * js/regexp-bol-with-multiline-expected.txt: Removed. * js/regexp-bol-with-multiline.html: Removed. * js/regexp-bol.html: Removed. * js/regexp-caching-expected.txt: Removed. * js/regexp-caching.html: Removed. * js/regexp-charclass-crash-expected.txt: Removed. * js/regexp-charclass-crash.html: Removed. * js/regexp-extended-characters-crash-expected.txt: Removed. * js/regexp-extended-characters-crash.html: Removed. * js/regexp-lastindex-expected.txt: Removed. * js/regexp-lastindex.html: Removed. * js/regexp-look-ahead-empty-expected.txt: Removed. * js/regexp-look-ahead-empty.html: Removed. * js/regexp-look-ahead-expected.txt: Removed. * js/regexp-look-ahead.html: Removed. * js/regexp-match-reify-before-putbyval-expected.txt: Removed. * js/regexp-match-reify-before-putbyval.html: Removed. * js/regexp-non-capturing-groups-expected.txt: Removed. * js/regexp-non-capturing-groups.html: Removed. * js/regexp-non-greedy-parentheses-expected.txt: Removed. * js/regexp-non-greedy-parentheses.html: Removed. * js/regexp-overflow-expected.txt: Removed. * js/regexp-overflow.html: Removed. * js/regexp-range-out-of-order-expected.txt: Removed. * js/regexp-range-out-of-order.html: Removed. * js/regexp-ranges-and-escaped-hyphens-expected.txt: Removed. * js/regexp-ranges-and-escaped-hyphens.html: Removed. * js/regexp-stack-overflow-expected.txt: Removed. * js/regexp-stack-overflow.html: Removed. * js/regexp-test-null-string-expected.txt: Removed. * js/regexp-test-null-string.html: Removed. * js/regexp-unicode-handling-expected.txt: Removed. * js/regexp-unicode-handling.html: Removed. * js/regexp-unicode-overflow-expected.txt: Removed. * js/regexp-unicode-overflow.html: Removed. * js/removing-Cf-characters-expected.txt: Removed. * js/removing-Cf-characters.html: Removed. * js/reserved-words-as-property-expected.txt: Removed. * js/reserved-words-as-property.html: Removed. * js/same-origin-subframe-about-blank-expected.txt: Removed. * js/same-origin-subframe-about-blank.html: Removed. * js/script-line-number-expected.txt: Removed. * js/script-line-number.html: Removed. * js/script-tests/Object-defineProperty.js: Removed. * js/script-tests/activation-proto.js: Removed. * js/script-tests/array-float-delete.js: Removed. * js/script-tests/array-join-bug-11524.js: Removed. * js/script-tests/array-prototype-properties.js: Removed. * js/script-tests/array-sort-exception.js: Removed. * js/script-tests/array-tostring-ignore-separator.js: Removed. * js/script-tests/array-with-double-assign.js: Removed. * js/script-tests/array-with-double-push.js: Removed. * js/script-tests/assign.js: Removed. * js/script-tests/basic-map.js: Removed. * js/script-tests/basic-set.js: Removed. * js/script-tests/basic-weakmap.js: Removed. * js/script-tests/cached-eval-gc.js: Removed. * js/script-tests/constructor-attributes.js: Removed. * js/script-tests/constructor.js: Removed. * js/script-tests/cross-frame-bad-time.js: Removed. * js/script-tests/cross-frame-really-bad-time-with-__proto__.js: Removed. * js/script-tests/cross-frame-really-bad-time.js: Removed. * js/script-tests/cross-global-object-inline-global-var.js: Removed. * js/script-tests/custom-constructors.js: Removed. * js/script-tests/cyclic-proto.js: Removed. * js/script-tests/cyclic-ref-toString.js: Removed. * js/script-tests/date-DST-time-cusps.js: Removed. * js/script-tests/date-big-constructor.js: Removed. * js/script-tests/date-big-setdate.js: Removed. * js/script-tests/date-big-setmonth.js: Removed. * js/script-tests/date-negative-setmonth.js: Removed. * js/script-tests/date-preserve-milliseconds.js: Removed. * js/script-tests/delete-syntax.js: Removed. * js/script-tests/dfg-byte-array-put.js: Removed. * js/script-tests/dfg-byteOffset-neuter.js: Removed. * js/script-tests/dfg-compare-final-object-to-final-object-or-other.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-literal-with-variables.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-literal.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-with-elements.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-with-size.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array.js: Removed. * js/script-tests/dfg-cross-global-object-new-array.js: Removed. * js/script-tests/dfg-custom-getter-throw-inlined.js: Removed. * js/script-tests/dfg-custom-getter-throw.js: Removed. * js/script-tests/dfg-custom-getter.js: Removed. * js/script-tests/dfg-ensure-array-storage-on-window.js: Removed. * js/script-tests/dfg-ensure-non-array-array-storage-on-window.js: Removed. * js/script-tests/dfg-inline-switch-imm.js: Removed. * js/script-tests/dfg-int32-to-double-on-set-local-and-exit.js: Removed. * js/script-tests/dfg-int32-to-double-on-set-local-and-sometimes-exit.js: Removed. * js/script-tests/dfg-logical-not-final-object-or-other.js: Removed. * js/script-tests/dfg-make-rope-side-effects.js: Removed. * js/script-tests/dfg-negative-array-size.js: Removed. * js/script-tests/dfg-patchable-get-by-id-after-watchpoint.js: Removed. * js/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js: Removed. * js/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js: Removed. * js/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other.js: Removed. * js/script-tests/dfg-proto-stub-watchpoint-fire.js: Removed. * js/script-tests/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Removed. * js/script-tests/dfg-put-by-id-allocate-storage-polymorphic.js: Removed. * js/script-tests/dfg-put-by-id-allocate-storage.js: Removed. * js/script-tests/dfg-put-by-id-reallocate-storage-polymorphic.js: Removed. * js/script-tests/dfg-put-by-id-reallocate-storage.js: Removed. * js/script-tests/dfg-put-by-val-setter-then-get-by-val.js: Removed. * js/script-tests/dfg-put-to-readonly-property.js: Removed. * js/script-tests/dfg-rshift-by-zero-eliminate-valuetoint32.js: Removed. * js/script-tests/dfg-store-unexpected-value-into-argument-and-osr-exit.js: Removed. * js/script-tests/dfg-strcat-over-objects-then-exit-on-it.js: Removed. * js/script-tests/dfg-strict-mode-arguments-get-beyond-length.js: Removed. * js/script-tests/dfg-typed-array-neuter.js: Removed. * js/script-tests/document-all-triggers-masquerades-watchpoint.js: Removed. * js/script-tests/dot-node-base-exception.js: Removed. * js/script-tests/end-in-string-escape.js: Removed. * js/script-tests/enter-dictionary-indexing-mode-with-blank-indexing-type.js: Removed. * js/script-tests/eval-cache-scoped-lookup.js: Removed. * js/script-tests/eval-contained-syntax-error.js: Removed. * js/script-tests/exception-line-number.js: Removed. * js/script-tests/exception-registerfile-shrink.js: Removed. * js/script-tests/function-bind.js: Removed. * js/script-tests/function-name.js: Removed. * js/script-tests/function-names.js: Removed. * js/script-tests/get-by-pname-only-prototype-properties.js: Removed. * js/script-tests/global-constructors-attributes.js: Removed. * js/script-tests/global-constructors-deletable.js: Removed. * js/script-tests/global-function-resolve.js: Removed. * js/script-tests/immediate-constant-instead-of-cell.js: Removed. * js/script-tests/implicit-call-with-global-reentry.js: Removed. * js/script-tests/imul.js: Removed. * js/script-tests/inc-bracket-assign-subscript.js: Removed. * js/script-tests/inc-const-valueOf.js: Removed. * js/script-tests/indexed-setter-on-global-object.js: Removed. * js/script-tests/inline-arguments-tear-off.js: Removed. * js/script-tests/instanceof-XMLHttpRequest.js: Removed. * js/script-tests/jit-set-profiling-access-type-only-for-get-by-id-self.js: Removed. * js/script-tests/js-correct-exception-handler.js: Removed. * js/script-tests/lastModified.js: Removed. * js/script-tests/lazy-create-arguments-from-get-by-val.js: Removed. * js/script-tests/line-column-numbers.js: Removed. * js/script-tests/method-check.js: Removed. * js/script-tests/native-error-prototype.js: Removed. * js/script-tests/neq-null-crash.js: Removed. * js/script-tests/nested-object-gc.js: Removed. * js/script-tests/non-object-proto.js: Removed. * js/script-tests/normal-character-escapes-in-string-literals.js: Removed. * js/script-tests/null-char-in-string.js: Removed. * js/script-tests/number-tofixed.js: Removed. * js/script-tests/number-toprecision.js: Removed. * js/script-tests/object-extra-comma.js: Removed. * js/script-tests/object-prototype-constructor.js: Removed. * js/script-tests/object-prototype-properties.js: Removed. * js/script-tests/object-prototype-toLocaleString.js: Removed. * js/script-tests/post-inc-assign-overwrites.js: Removed. * js/script-tests/post-message-numeric-property.js: Removed. * js/script-tests/postfix-syntax.js: Removed. * js/script-tests/prefix-syntax.js: Removed. * js/script-tests/prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Removed. * js/script-tests/put-direct-index-beyond-vector-length-resize.js: Removed. * js/script-tests/put-to-base-global-checked.js: Removed. * js/script-tests/random-array-gc-stress.js: Removed. * js/script-tests/recursion-limit-equal.js: Removed. * js/script-tests/regexp-bol-with-multiline.js: Removed. * js/script-tests/regexp-bol.js: Removed. * js/script-tests/regexp-extended-characters-crash.js: Removed. * js/script-tests/regexp-lastindex.js: Removed. * js/script-tests/regexp-look-ahead-empty.js: Removed. * js/script-tests/regexp-look-ahead.js: Removed. * js/script-tests/regexp-match-reify-before-putbyval.js: Removed. * js/script-tests/regexp-non-capturing-groups.js: Removed. * js/script-tests/regexp-non-greedy-parentheses.js: Removed. * js/script-tests/regexp-overflow.js: Removed. * js/script-tests/regexp-range-out-of-order.js: Removed. * js/script-tests/regexp-ranges-and-escaped-hyphens.js: Removed. * js/script-tests/regexp-stack-overflow.js: Removed. * js/script-tests/regexp-unicode-handling.js: Removed. * js/script-tests/regexp-unicode-overflow.js: Removed. * js/script-tests/removing-Cf-characters.js: Removed. * js/script-tests/reserved-words-as-property.js: Removed. * js/script-tests/select-options-add.js: Removed. * js/script-tests/stack-at-creation-for-error-objects.js: Removed. * js/script-tests/stack-trace.js: Removed. * js/script-tests/strict-readonly-statics.js: Removed. * js/script-tests/string-match.js: Removed. * js/script-tests/string-prototype-properties.js: Removed. * js/script-tests/string-replace-2.js: Removed. * js/script-tests/string-replace-3.js: Removed. * js/script-tests/string-replacement-outofmemory.js: Removed. * js/script-tests/string-split-conformance.js: Removed. * js/script-tests/string-split-double-empty.js: Removed. * js/script-tests/string-split-ignore-case.js: Removed. * js/script-tests/switch-behaviour.js: Removed. * js/script-tests/throw-exception-in-global-setter.js: Removed. * js/script-tests/toInt32UInt32.js: Removed. * js/script-tests/toString-exception.js: Removed. * js/script-tests/toString-overrides.js: Removed. * js/script-tests/toString-stack-overflow.js: Removed. * js/script-tests/transition-cache-dictionary-crash.js: Removed. * js/script-tests/typed-array-access.js: Removed. * js/script-tests/typed-array-set-different-types.js: Removed. * js/script-tests/typeof-syntax.js: Removed. * js/script-tests/unshift-multi.js: Removed. * js/script-tests/vardecl-preserve-arguments.js: Removed. * js/script-tests/webcore-string-comparison.js: Removed. * js/script-tests/with-scope-gc.js: Removed. * js/select-options-add-expected.txt: Removed. * js/select-options-add.html: Removed. * js/select-options-remove-expected.txt: Removed. * js/select-options-remove-gc-expected.txt: Removed. * js/select-options-remove-gc.html: Removed. * js/select-options-remove.html: Removed. * js/stack-at-creation-for-error-objects-expected.txt: Removed. * js/stack-at-creation-for-error-objects.html: Removed. * js/stack-trace-expected.txt: Removed. * js/stack-trace.html: Removed. * js/strict-readonly-statics-expected.txt: Removed. * js/strict-readonly-statics.html: Removed. * js/string-anchor-expected.txt: Removed. * js/string-anchor.html: Removed. * js/string-concatenate-outofmemory-expected.txt: Removed. * js/string-fontcolor-expected.txt: Removed. * js/string-fontcolor.html: Removed. * js/string-fontsize-expected.txt: Removed. * js/string-fontsize.html: Removed. * js/string-link-expected.txt: Removed. * js/string-link.html: Removed. * js/string-match-expected.txt: Removed. * js/string-match.html: Removed. * js/string-prototype-properties-expected.txt: Removed. * js/string-prototype-properties.html: Removed. * js/string-replace-2-expected.txt: Removed. * js/string-replace-2.html: Removed. * js/string-replace-3-expected.txt: Removed. * js/string-replace-3.html: Removed. * js/string-replace-exception-crash-expected.txt: Removed. * js/string-replace-exception-crash.html: Removed. * js/string-replacement-outofmemory-expected.txt: Removed. * js/string-replacement-outofmemory.html: Removed. * js/string-split-conformance-expected.txt: Removed. * js/string-split-conformance.html: Removed. * js/string-split-double-empty-expected.txt: Removed. * js/string-split-double-empty.html: Removed. * js/string-split-ignore-case-expected.txt: Removed. * js/string-split-ignore-case.html: Removed. * js/switch-behaviour-expected.txt: Removed. * js/switch-behaviour.html: Removed. * js/text-field-resize-expected.txt: Removed. * js/text-field-resize.html: Removed. * js/throw-exception-in-global-setter-expected.txt: Removed. * js/throw-exception-in-global-setter.html: Removed. * js/throw-from-array-sort-expected.txt: Removed. * js/throw-from-array-sort.html: Removed. * js/toInt32UInt32-expected.txt: Removed. * js/toInt32UInt32.html: Removed. * js/toString-and-valueOf-override-expected.txt: Removed. * js/toString-and-valueOf-override.html: Removed. * js/toString-dontEnum-expected.txt: Removed. * js/toString-dontEnum.html: Removed. * js/toString-exception-expected.txt: Removed. * js/toString-exception.html: Removed. * js/toString-number-expected.txt: Removed. * js/toString-number.html: Removed. * js/toString-overrides-expected.txt: Removed. * js/toString-overrides.html: Removed. * js/toString-stack-overflow-expected.txt: Removed. * js/toString-stack-overflow.html: Removed. * js/toString-try-else-expected.txt: Removed. * js/toString-try-else.html: Removed. * js/transition-cache-dictionary-crash-expected.txt: Removed. * js/transition-cache-dictionary-crash.html: Removed. * js/trivial-functions-expected.txt: Removed. * js/trivial-functions.html: Removed. * js/try-catch-crash-expected.txt: Removed. * js/try-catch-crash.html: Removed. * js/typed-array-access-expected.txt: Removed. * js/typed-array-access.html: Removed. * js/typed-array-set-different-types-expected.txt: Removed. * js/typed-array-set-different-types.html: Removed. * js/typeof-syntax-expected.txt: Removed. * js/typeof-syntax.html: Removed. * js/uncaught-exception-line-number-expected.txt: Removed. * js/uncaught-exception-line-number.html: Removed. * js/unshift-multi-expected.txt: Removed. * js/unshift-multi.html: Removed. * js/var-declarations-expected.txt: Removed. * js/var-declarations-shadowing-expected.txt: Removed. * js/var-declarations-shadowing.html: Removed. * js/var-declarations.html: Removed. * js/vardecl-preserve-arguments-expected.txt: Removed. * js/vardecl-preserve-arguments.html: Removed. * js/vardecl-preserve-parameters-expected.txt: Removed. * js/vardecl-preserve-parameters.html: Removed. * js/vardecl-preserve-vardecl-expected.txt: Removed. * js/vardecl-preserve-vardecl.html: Removed. * js/webcore-string-comparison-expected.txt: Removed. * js/webcore-string-comparison.html: Removed. * js/webidl-type-mapping-expected.txt: Removed. * js/webidl-type-mapping.html: Removed. * js/while-expression-value-expected.txt: Removed. * js/while-expression-value.html: Removed. * js/window-location-href-file-urls-expected.txt: Removed. * js/window-location-href-file-urls.html: Removed. * js/with-scope-gc-expected.txt: Removed. * js/with-scope-gc.html: Removed. * platform/gtk/TestExpectations: * platform/mac/TestExpectations: * platform/mac/js/constructor-length-expected.txt: Removed. * platform/mac/js/dom: Added. * platform/mac/js/dom/constructor-length-expected.txt: Copied from LayoutTests/platform/mac/js/constructor-length-expected.txt. * platform/qt/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/139581@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156066 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-09-18 22:26:09 +00:00
<script src="../../resources/js-test-pre.js"></script>
Fix 30% JSBench regression (caused by adding column numbers to stack traces). https://bugs.webkit.org/show_bug.cgi?id=118481. Reviewed by Mark Hahnenberg and Geoffrey Garen. Source/JavaScriptCore: Previously, we already capture ExpressionRangeInfo that provides a divot for each bytecode that can potentially throw an exception (and therefore generate a stack trace). On first attempt to compute column numbers, we then do a walk of the source string to record all line start positions in a table associated with the SourceProvider. The column number can then be computed as divot - lineStartFor(bytecodeOffset). The computation of this lineStarts table is the source of the 30% JSBench performance regression. The new code now records lineStarts as the lexer and parser scans the source code. These lineStarts are then used to compute the column number for the given divot, and stored in the ExpressionRangeInfo. Similarly, we also capture the line number at the divot point and store that in the ExpressionRangeInfo. Hence, to look up line and column numbers, we now lookup the ExpressionRangeInfo for the bytecodeOffset, and then compute the line and column from the values stored in the expression info. The strategy: 1. We want to minimize perturbations to the lexer and parser. Specifically, the changes added should not change how it scans code, and generate bytecode. 2. We regard the divot as the source character position we are interested in. As such, we'll capture line and lineStart (for column) at the point when we capture the divot information. This ensures that the 3 values are consistent. How the change is done: 1. Change the lexer to track lineStarts. 2. Change the parser to capture line and lineStarts at the point of capturing divots. 3. Change the parser and associated code to plumb these values all the way to the point that the correspoinding ExpressionRangeInfo is emitted. 4. Propagate and record SourceCode firstLine and firstLineColumnOffset to the the necessary places so that we can add them as needed when reifying UnlinkedCodeBlocks into CodeBlocks. 5. Compress the line and column number values in the ExpressionRangeInfo. In practice, we seldom have both large line and column numbers. Hence, we can encode both in an uint32_t most of the time. For the times when we encounter both large line and column numbers, we have a fallback to store the "fat" position info. 6. Emit an ExpressionRangeInfo for UnaryOp nodes to get more line and column number coverage. 7. Change the interpreter to use the new way of computing line and column. 8. Delete old line and column computation code that is now unused. Misc details: - the old lexer was tracking both a startOffset and charPosition where charPosition equals startOffset - SourceCode.startOffset. We now use startOffset exclusively throughout the system for consistency. All offset values (including lineStart) are relative to the start of the SourceProvider string. These values will only be converted to be relative to the SourceCode.startOffset at the very last minute i.e. when the divot is stored into the ExpressionRangeInfo. This change to use the same offset system everywhere reduces confusion from having to convert back and forth between the 2 systems. It also enables a lot of assertions to be used. - Also fixed some bugs in the choice of divot positions to use. For example, both Eval and Function expressions previously used column numbers from the start of the expression but used the line number at the end of the expression. This is now fixed to use either the start or end positions as appropriate, but not a mix of line and columns from both. - Why use ints instead of unsigneds for offsets and lineStarts inside the lexer and parser? Some tests (e.g. fast/js/call-base-resolution.html and fast/js/eval-cross-window.html) has shown that lineStart offsets can be prior to the SourceCode.startOffset. Keeping the lexer offsets as ints simplifies computations and makes it easier to maintain the assertions that (startOffset >= lineStartOffset). However, column and line numbers are always unsigned when we publish them to the ExpressionRangeInfo. The ints are only used inside the lexer and parser ... well, and bytecode generator. - For all cases, lineStart is always captured where the divot is captured. However, some sputnik conformance tests have shown that we cannot honor line breaks for assignment statements like the following: eval("x\u000A*=\u000A-1;"); In this case, the lineStart is expected to be captured at the start of the assignment expression instead of at the divot point in the middle. The assignment expression is the only special case for this. This patch has been tested against the full layout tests both with release and debug builds with no regression. * API/JSContextRef.cpp: (JSContextCreateBacktrace): - Updated to use the new StackFrame::computeLineAndColumn(). * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): - Added m_firstLineColumnOffset initialization. - Plumbed the firstLineColumnOffset into the SourceCode. - Initialized column for op_debug using the new way. (JSC::CodeBlock::lineNumberForBytecodeOffset): - Changed to compute line number using the ExpressionRangeInfo. (JSC::CodeBlock::columnNumberForBytecodeOffset): Added - Changed to compute column number using the ExpressionRangeInfo. (JSC::CodeBlock::expressionRangeForBytecodeOffset): * bytecode/CodeBlock.h: (JSC::CodeBlock::firstLineColumnOffset): (JSC::GlobalCodeBlock::GlobalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::ProgramCodeBlock::ProgramCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::EvalCodeBlock::EvalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. But for EvalCodeBlocks, the firstLineColumnOffset is always 1 because we're starting with a new source string with no start offset. (JSC::FunctionCodeBlock::FunctionCodeBlock): - Plumbed firstLineColumnOffset through to the super class. * bytecode/ExpressionRangeInfo.h: - Added modes for encoding line and column into a single 30-bit unsigned. The encoding is in 1 of 3 modes: 1. FatLineMode: 22-bit line, 8-bit column 2. FatColumnMode: 8-bit line, 22-bit column 3. FatLineAndColumnMode: 32-bit line, 32-bit column (JSC::ExpressionRangeInfo::encodeFatLineMode): Added. - Encodes line and column into the 30-bit position using FatLine mode. (JSC::ExpressionRangeInfo::encodeFatColumnMode): Added. - Encodes line and column into the 30-bit position using FatColumn mode. (JSC::ExpressionRangeInfo::decodeFatLineMode): Added. - Decodes the FatLine mode 30-bit position into line and column. (JSC::ExpressionRangeInfo::decodeFatColumnMode): Added. - Decodes the FatColumn mode 30-bit position into line and column. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): - Plumbed startColumn through. (JSC::UnlinkedFunctionExecutable::link): - Plumbed startColumn through. (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): - Computes a line number using the new way. (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): - Added decoding of line and column. - Added handling of the case when we do not find a fitting expression range info for a specified bytecodeOffset. This only happens if the bytecodeOffset is below the first expression range info. In that case, we'll use the first expression range info entry. (JSC::UnlinkedCodeBlock::addExpressionInfo): - Added encoding of line and column. * bytecode/UnlinkedCodeBlock.h: - Added m_expressionInfoFatPositions in RareData. (JSC::UnlinkedFunctionExecutable::functionStartColumn): (JSC::UnlinkedCodeBlock::shrinkToFit): - Removed obsoleted m_lineInfo. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallEval): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallVarargs): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitConstruct): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitDebugHook): Plumbed lineStart through. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitNode): (JSC::BytecodeGenerator::emitNodeInConditionContext): - Removed obsoleted m_lineInfo. (JSC::BytecodeGenerator::emitExpressionInfo): - Plumbed line and lineStart through. - Compute the line and column to be added to the expression range info. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::ArrayNode::toArgumentList): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): - Plumbed line and lineStart through the above as needed. (JSC::UnaryOpNode::emitBytecode): - Added emission of an ExpressionRangeInfo for the UnaryOp node. (JSC::BinaryOpNode::emitStrcat): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): - Plumbed line and lineStart through the above as needed. (JSC::ConstStatementNode::emitBytecode): (JSC::EmptyStatementNode::emitBytecode): (JSC::DebuggerStatementNode::emitBytecode): (JSC::ExprStatementNode::emitBytecode): (JSC::VarStatementNode::emitBytecode): (JSC::IfElseNode::emitBytecode): (JSC::DoWhileNode::emitBytecode): (JSC::WhileNode::emitBytecode): (JSC::ForNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::ContinueNode::emitBytecode): (JSC::BreakNode::emitBytecode): (JSC::ReturnNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::SwitchNode::emitBytecode): (JSC::LabelNode::emitBytecode): (JSC::ThrowNode::emitBytecode): (JSC::TryNode::emitBytecode): (JSC::ProgramNode::emitBytecode): (JSC::EvalNode::emitBytecode): (JSC::FunctionBodyNode::emitBytecode): - Plumbed line and lineStart through the above as needed. * interpreter/Interpreter.cpp: (JSC::appendSourceToError): - Added line and column arguments for expressionRangeForBytecodeOffset(). (JSC::StackFrame::computeLineAndColumn): - Replaces StackFrame::line() and StackFrame::column(). (JSC::StackFrame::expressionInfo): - Added line and column arguments. (JSC::StackFrame::toString): - Changed to use the new StackFrame::computeLineAndColumn(). (JSC::Interpreter::getStackTrace): - Added the needed firstLineColumnOffset arg for the StackFrame. * interpreter/Interpreter.h: * parser/ASTBuilder.h: (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createFunctionExpr): (JSC::ASTBuilder::createFunctionBody): (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createFuncDeclStatement): (JSC::ASTBuilder::createBlockStatement): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createIfStatement): (JSC::ASTBuilder::createForLoop): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createVarStatement): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createTryStatement): (JSC::ASTBuilder::createSwitchStatement): (JSC::ASTBuilder::createWhileStatement): (JSC::ASTBuilder::createDoWhileStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::createDebugger): (JSC::ASTBuilder::createConstStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::unaryTokenStackLastLineStartPosition): Added. (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode):. - Plumbed line, lineStart, and startColumn through the above as needed. * parser/Lexer.cpp: (JSC::::currentSourcePtr): (JSC::::setCode): - Added tracking for sourceoffset and lineStart. (JSC::::internalShift): (JSC::::parseIdentifier): - Added tracking for lineStart. (JSC::::parseIdentifierSlowCase): (JSC::::parseString): - Added tracking for lineStart. (JSC::::parseStringSlowCase): (JSC::::lex): - Added tracking for sourceoffset. (JSC::::sourceCode): * parser/Lexer.h: (JSC::Lexer::currentOffset): (JSC::Lexer::currentLineStartOffset): (JSC::Lexer::setOffset): - Added tracking for lineStart. (JSC::Lexer::offsetFromSourcePtr): Added. conversion function. (JSC::Lexer::sourcePtrFromOffset): Added. conversion function. (JSC::Lexer::setOffsetFromSourcePtr): (JSC::::lexExpectIdentifier): - Added tracking for sourceoffset and lineStart. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Plumbed line and lineStart through the above as needed. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): Plumbed lineStart. (JSC::ScopeNode::ScopeNode): Plumbed lineStart. (JSC::ProgramNode::ProgramNode): Plumbed startColumn. (JSC::ProgramNode::create): Plumbed startColumn. (JSC::EvalNode::create): (JSC::FunctionBodyNode::FunctionBodyNode): Plumbed startColumn. (JSC::FunctionBodyNode::create): Plumbed startColumn. * parser/Nodes.h: (JSC::Node::startOffset): (JSC::Node::lineStartOffset): Added. (JSC::StatementNode::firstLine): (JSC::StatementNode::lastLine): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divotStartOffset): (JSC::ThrowableExpressionData::divotEndOffset): (JSC::ThrowableExpressionData::divotLine): (JSC::ThrowableExpressionData::divotLineStart): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStartOffset): (JSC::ThrowableSubExpressionData::subexpressionEndOffset): (JSC::ThrowableSubExpressionData::subexpressionLine): (JSC::ThrowableSubExpressionData::subexpressionLineStart): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStartOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEndOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLine): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLineStart): (JSC::ScopeNode::startStartOffset): (JSC::ScopeNode::startLineStartOffset): (JSC::ProgramNode::startColumn): (JSC::EvalNode::startColumn): (JSC::FunctionBodyNode::startColumn): - Plumbed line and lineStart through the above as needed. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseSourceElements): (JSC::::parseVarDeclarationList): (JSC::::parseConstDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): - Plumbed line and lineStart through the above as needed. (JSC::::parseFunctionBody): - Plumbed startColumn. (JSC::::parseFunctionInfo): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parseObjectLiteral): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Plumbed line, lineStart, startColumn through the above as needed. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::tokenStart): (JSC::Parser::tokenColumn): (JSC::Parser::tokenEnd): (JSC::Parser::tokenLineStart): (JSC::Parser::lastTokenLine): (JSC::Parser::lastTokenLineStart): (JSC::::parse): * parser/ParserTokens.h: (JSC::JSTokenLocation::JSTokenLocation): - Plumbed lineStart. (JSC::JSTokenLocation::lineStartPosition): (JSC::JSTokenLocation::startPosition): (JSC::JSTokenLocation::endPosition): * parser/SourceCode.h: (JSC::SourceCode::SourceCode): (JSC::SourceCode::startColumn): (JSC::makeSource): (JSC::SourceCode::subExpression): * parser/SourceProvider.cpp: delete old code. * parser/SourceProvider.h: delete old code. * parser/SourceProviderCacheItem.h: (JSC::SourceProviderCacheItem::closeBraceToken): (JSC::SourceProviderCacheItem::SourceProviderCacheItem): - Plumbed lineStart. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createFunctionExpr): (JSC::SyntaxChecker::createFunctionBody): (JSC::SyntaxChecker::createFuncDeclStatement): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::createGetterOrSetterProperty): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Made SyntaxChecker prototype changes to match ASTBuilder due to new args added for plumbing line, lineStart, and startColumn. * runtime/CodeCache.cpp: (JSC::CodeCache::generateBytecode): (JSC::CodeCache::getCodeBlock): - Plumbed startColumn. * runtime/Executable.cpp: (JSC::FunctionExecutable::FunctionExecutable): (JSC::ProgramExecutable::compileInternal): (JSC::FunctionExecutable::produceCodeBlockFor): (JSC::FunctionExecutable::fromGlobalCode): - Plumbed startColumn. * runtime/Executable.h: (JSC::ScriptExecutable::startColumn): (JSC::ScriptExecutable::recordParse): (JSC::FunctionExecutable::create): - Plumbed startColumn. Source/WebCore: Test: fast/js/line-column-numbers.html Updated the bindings to use StackFrame::computeLineAndColumn(). The old StackFrame::line() and StackFrame::column() has been removed. The new algorithm always computes the 2 values together anyway. Hence it is more efficient to return them as a pair instead of doing the same computation twice for each half of the result. * bindings/js/ScriptCallStackFactory.cpp: (WebCore::createScriptCallStack): (WebCore::createScriptCallStackFromException): * bindings/js/ScriptSourceCode.h: (WebCore::ScriptSourceCode::ScriptSourceCode): LayoutTests: The fix now computes line and column numbers more accurately. As a result, some of the test results need to be re-baselined. Among other fixes, one major source of difference is that the old code was incorrectly computing 0-based column numbers. This has now been fixed to be 1-based. Note: line numbers were always 1-based. Also added a new test: fast/js/line-column-numbers.html, which tests line and column numbers for source code in various configurations. * editing/execCommand/outdent-blockquote-test1-expected.txt: * editing/execCommand/outdent-blockquote-test2-expected.txt: * editing/execCommand/outdent-blockquote-test3-expected.txt: * editing/execCommand/outdent-blockquote-test4-expected.txt: * editing/pasteboard/copy-paste-float-expected.txt: * editing/pasteboard/paste-blockquote-before-blockquote-expected.txt: * editing/pasteboard/paste-double-nested-blockquote-before-blockquote-expected.txt: * fast/dom/Window/window-resize-contents-expected.txt: * fast/events/remove-target-with-shadow-in-drag-expected.txt: * fast/js/line-column-numbers-expected.txt: Added. * fast/js/line-column-numbers.html: Added. * fast/js/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): * fast/js/stack-trace-expected.txt: * inspector/console/console-url-line-column-expected.txt: Canonical link: https://commits.webkit.org/136467@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@152494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-09 16:15:12 +00:00
</head>
Remove more references to the deleted js-test-style.css. https://bugs.webkit.org/show_bug.cgi?id=120899. Reviewed by Ryosuke Niwa. Tools: * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py: (translate_includes): LayoutTests: * fast/canvas/webgl/array-unit-tests.html: * fast/canvas/webgl/context-lost-restored.html: * fast/canvas/webgl/context-lost.html: * fast/canvas/webgl/typed-arrays-in-workers.html: * fast/css/aspect-ratio-parsing-tests.html: * fast/forms/fieldset/fieldset-disabled.html: * fast/js/apply-varargs.html: * fast/js/line-column-numbers.html: * fast/js/stack-at-creation-for-error-objects.html: * fast/js/stack-trace.html: * platform/iphone-simulator/accessibility/accessibility-aria-table-children.html: * platform/iphone-simulator/accessibility/accessibility-crash-in-axcontainer.html: * platform/iphone-simulator/accessibility/accessibility-hint.html: * platform/iphone-simulator/accessibility/aria-label-with-internal-text.html: * platform/iphone-simulator/accessibility/aria-pressed-state.html: * platform/iphone-simulator/accessibility/centerpoint.html: * platform/iphone-simulator/accessibility/file-upload-button.html: * platform/iphone-simulator/accessibility/focus-change-notifications.html: * platform/iphone-simulator/accessibility/header-elements.html: * platform/iphone-simulator/accessibility/identifier.html: * platform/iphone-simulator/accessibility/internal-link.html: * platform/iphone-simulator/accessibility/landmark-type.html: * platform/iphone-simulator/accessibility/link-with-images-text.html: * platform/iphone-simulator/accessibility/link-with-only-image.html: * platform/iphone-simulator/accessibility/math.html: * platform/iphone-simulator/accessibility/mixed-checkboxes.html: * platform/iphone-simulator/accessibility/password-value.html: * platform/iphone-simulator/accessibility/placeholder-value.html: * platform/iphone-simulator/accessibility/popup-button-value-label.html: * platform/iphone-simulator/accessibility/progressbar.html: * platform/iphone-simulator/accessibility/selected-buttons.html: * platform/iphone-simulator/accessibility/selected-text.html: * platform/iphone-simulator/accessibility/svg-path-crash.html: * platform/iphone-simulator/accessibility/tab-role.html: * platform/iphone-simulator/accessibility/table-cell-for-row-col.html: * platform/iphone-simulator/accessibility/table-cell-ranges.html: * platform/iphone-simulator/accessibility/tables-lists.html: * platform/iphone-simulator/accessibility/text-line-no-ignored-elements.html: * platform/iphone-simulator/accessibility/text-marker-list-item.html: * platform/iphone-simulator/accessibility/text-marker-validation.html: * platform/iphone-simulator/accessibility/text-role.html: * platform/iphone-simulator/accessibility/textfield-in-axvalue.html: * platform/iphone-simulator/accessibility/url-test.html: * platform/mac/accessibility/document-title-used-for-description.html: * platform/mac/accessibility/iframe-aria-hidden.html: * platform/mac/accessibility/scrollbars.html: * platform/mac/accessibility/search-with-frames.html: * platform/mac/accessibility/selected-tab-crash.html: * platform/mac/accessibility/submit-button-default-value.html: * platform/mac/accessibility/supports-focus-setting.html: * platform/mac/fast/forms/input-appearance-spinbutton-up.html: * platform/mac/fast/forms/input-appearance-spinbutton.html: * svg/dom/css-transforms.xhtml: * svg/dynamic-updates/SVG-dynamic-css-transform.html: * svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html: * webaudio/audiobuffersource-loop-comprehensive.html: * webaudio/audiobuffersource-start.html: * webaudio/audioparam-connect-audioratesignal.html: * webaudio/audioparam-summingjunction.html: * webaudio/biquad-allpass.html: * webaudio/biquad-bandpass.html: * webaudio/biquad-highpass.html: * webaudio/biquad-highshelf.html: * webaudio/biquad-lowpass.html: * webaudio/biquad-lowshelf.html: * webaudio/biquad-notch.html: * webaudio/biquad-peaking.html: * webaudio/convolution-mono-mono.html: * webaudio/convolver-setBuffer-null.html: * webaudio/distance-exponential.html: * webaudio/distance-inverse.html: * webaudio/distance-linear.html: * webaudio/javascriptaudionode-zero-input-channels.html: * webaudio/oscillator-basic.html: * webaudio/panner-equalpower-stereo.html: * webaudio/panner-equalpower.html: Canonical link: https://commits.webkit.org/138997@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-09-10 06:42:39 +00:00
Fix 30% JSBench regression (caused by adding column numbers to stack traces). https://bugs.webkit.org/show_bug.cgi?id=118481. Reviewed by Mark Hahnenberg and Geoffrey Garen. Source/JavaScriptCore: Previously, we already capture ExpressionRangeInfo that provides a divot for each bytecode that can potentially throw an exception (and therefore generate a stack trace). On first attempt to compute column numbers, we then do a walk of the source string to record all line start positions in a table associated with the SourceProvider. The column number can then be computed as divot - lineStartFor(bytecodeOffset). The computation of this lineStarts table is the source of the 30% JSBench performance regression. The new code now records lineStarts as the lexer and parser scans the source code. These lineStarts are then used to compute the column number for the given divot, and stored in the ExpressionRangeInfo. Similarly, we also capture the line number at the divot point and store that in the ExpressionRangeInfo. Hence, to look up line and column numbers, we now lookup the ExpressionRangeInfo for the bytecodeOffset, and then compute the line and column from the values stored in the expression info. The strategy: 1. We want to minimize perturbations to the lexer and parser. Specifically, the changes added should not change how it scans code, and generate bytecode. 2. We regard the divot as the source character position we are interested in. As such, we'll capture line and lineStart (for column) at the point when we capture the divot information. This ensures that the 3 values are consistent. How the change is done: 1. Change the lexer to track lineStarts. 2. Change the parser to capture line and lineStarts at the point of capturing divots. 3. Change the parser and associated code to plumb these values all the way to the point that the correspoinding ExpressionRangeInfo is emitted. 4. Propagate and record SourceCode firstLine and firstLineColumnOffset to the the necessary places so that we can add them as needed when reifying UnlinkedCodeBlocks into CodeBlocks. 5. Compress the line and column number values in the ExpressionRangeInfo. In practice, we seldom have both large line and column numbers. Hence, we can encode both in an uint32_t most of the time. For the times when we encounter both large line and column numbers, we have a fallback to store the "fat" position info. 6. Emit an ExpressionRangeInfo for UnaryOp nodes to get more line and column number coverage. 7. Change the interpreter to use the new way of computing line and column. 8. Delete old line and column computation code that is now unused. Misc details: - the old lexer was tracking both a startOffset and charPosition where charPosition equals startOffset - SourceCode.startOffset. We now use startOffset exclusively throughout the system for consistency. All offset values (including lineStart) are relative to the start of the SourceProvider string. These values will only be converted to be relative to the SourceCode.startOffset at the very last minute i.e. when the divot is stored into the ExpressionRangeInfo. This change to use the same offset system everywhere reduces confusion from having to convert back and forth between the 2 systems. It also enables a lot of assertions to be used. - Also fixed some bugs in the choice of divot positions to use. For example, both Eval and Function expressions previously used column numbers from the start of the expression but used the line number at the end of the expression. This is now fixed to use either the start or end positions as appropriate, but not a mix of line and columns from both. - Why use ints instead of unsigneds for offsets and lineStarts inside the lexer and parser? Some tests (e.g. fast/js/call-base-resolution.html and fast/js/eval-cross-window.html) has shown that lineStart offsets can be prior to the SourceCode.startOffset. Keeping the lexer offsets as ints simplifies computations and makes it easier to maintain the assertions that (startOffset >= lineStartOffset). However, column and line numbers are always unsigned when we publish them to the ExpressionRangeInfo. The ints are only used inside the lexer and parser ... well, and bytecode generator. - For all cases, lineStart is always captured where the divot is captured. However, some sputnik conformance tests have shown that we cannot honor line breaks for assignment statements like the following: eval("x\u000A*=\u000A-1;"); In this case, the lineStart is expected to be captured at the start of the assignment expression instead of at the divot point in the middle. The assignment expression is the only special case for this. This patch has been tested against the full layout tests both with release and debug builds with no regression. * API/JSContextRef.cpp: (JSContextCreateBacktrace): - Updated to use the new StackFrame::computeLineAndColumn(). * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): - Added m_firstLineColumnOffset initialization. - Plumbed the firstLineColumnOffset into the SourceCode. - Initialized column for op_debug using the new way. (JSC::CodeBlock::lineNumberForBytecodeOffset): - Changed to compute line number using the ExpressionRangeInfo. (JSC::CodeBlock::columnNumberForBytecodeOffset): Added - Changed to compute column number using the ExpressionRangeInfo. (JSC::CodeBlock::expressionRangeForBytecodeOffset): * bytecode/CodeBlock.h: (JSC::CodeBlock::firstLineColumnOffset): (JSC::GlobalCodeBlock::GlobalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::ProgramCodeBlock::ProgramCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::EvalCodeBlock::EvalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. But for EvalCodeBlocks, the firstLineColumnOffset is always 1 because we're starting with a new source string with no start offset. (JSC::FunctionCodeBlock::FunctionCodeBlock): - Plumbed firstLineColumnOffset through to the super class. * bytecode/ExpressionRangeInfo.h: - Added modes for encoding line and column into a single 30-bit unsigned. The encoding is in 1 of 3 modes: 1. FatLineMode: 22-bit line, 8-bit column 2. FatColumnMode: 8-bit line, 22-bit column 3. FatLineAndColumnMode: 32-bit line, 32-bit column (JSC::ExpressionRangeInfo::encodeFatLineMode): Added. - Encodes line and column into the 30-bit position using FatLine mode. (JSC::ExpressionRangeInfo::encodeFatColumnMode): Added. - Encodes line and column into the 30-bit position using FatColumn mode. (JSC::ExpressionRangeInfo::decodeFatLineMode): Added. - Decodes the FatLine mode 30-bit position into line and column. (JSC::ExpressionRangeInfo::decodeFatColumnMode): Added. - Decodes the FatColumn mode 30-bit position into line and column. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): - Plumbed startColumn through. (JSC::UnlinkedFunctionExecutable::link): - Plumbed startColumn through. (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): - Computes a line number using the new way. (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): - Added decoding of line and column. - Added handling of the case when we do not find a fitting expression range info for a specified bytecodeOffset. This only happens if the bytecodeOffset is below the first expression range info. In that case, we'll use the first expression range info entry. (JSC::UnlinkedCodeBlock::addExpressionInfo): - Added encoding of line and column. * bytecode/UnlinkedCodeBlock.h: - Added m_expressionInfoFatPositions in RareData. (JSC::UnlinkedFunctionExecutable::functionStartColumn): (JSC::UnlinkedCodeBlock::shrinkToFit): - Removed obsoleted m_lineInfo. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallEval): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallVarargs): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitConstruct): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitDebugHook): Plumbed lineStart through. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitNode): (JSC::BytecodeGenerator::emitNodeInConditionContext): - Removed obsoleted m_lineInfo. (JSC::BytecodeGenerator::emitExpressionInfo): - Plumbed line and lineStart through. - Compute the line and column to be added to the expression range info. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::ArrayNode::toArgumentList): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): - Plumbed line and lineStart through the above as needed. (JSC::UnaryOpNode::emitBytecode): - Added emission of an ExpressionRangeInfo for the UnaryOp node. (JSC::BinaryOpNode::emitStrcat): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): - Plumbed line and lineStart through the above as needed. (JSC::ConstStatementNode::emitBytecode): (JSC::EmptyStatementNode::emitBytecode): (JSC::DebuggerStatementNode::emitBytecode): (JSC::ExprStatementNode::emitBytecode): (JSC::VarStatementNode::emitBytecode): (JSC::IfElseNode::emitBytecode): (JSC::DoWhileNode::emitBytecode): (JSC::WhileNode::emitBytecode): (JSC::ForNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::ContinueNode::emitBytecode): (JSC::BreakNode::emitBytecode): (JSC::ReturnNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::SwitchNode::emitBytecode): (JSC::LabelNode::emitBytecode): (JSC::ThrowNode::emitBytecode): (JSC::TryNode::emitBytecode): (JSC::ProgramNode::emitBytecode): (JSC::EvalNode::emitBytecode): (JSC::FunctionBodyNode::emitBytecode): - Plumbed line and lineStart through the above as needed. * interpreter/Interpreter.cpp: (JSC::appendSourceToError): - Added line and column arguments for expressionRangeForBytecodeOffset(). (JSC::StackFrame::computeLineAndColumn): - Replaces StackFrame::line() and StackFrame::column(). (JSC::StackFrame::expressionInfo): - Added line and column arguments. (JSC::StackFrame::toString): - Changed to use the new StackFrame::computeLineAndColumn(). (JSC::Interpreter::getStackTrace): - Added the needed firstLineColumnOffset arg for the StackFrame. * interpreter/Interpreter.h: * parser/ASTBuilder.h: (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createFunctionExpr): (JSC::ASTBuilder::createFunctionBody): (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createFuncDeclStatement): (JSC::ASTBuilder::createBlockStatement): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createIfStatement): (JSC::ASTBuilder::createForLoop): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createVarStatement): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createTryStatement): (JSC::ASTBuilder::createSwitchStatement): (JSC::ASTBuilder::createWhileStatement): (JSC::ASTBuilder::createDoWhileStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::createDebugger): (JSC::ASTBuilder::createConstStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::unaryTokenStackLastLineStartPosition): Added. (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode):. - Plumbed line, lineStart, and startColumn through the above as needed. * parser/Lexer.cpp: (JSC::::currentSourcePtr): (JSC::::setCode): - Added tracking for sourceoffset and lineStart. (JSC::::internalShift): (JSC::::parseIdentifier): - Added tracking for lineStart. (JSC::::parseIdentifierSlowCase): (JSC::::parseString): - Added tracking for lineStart. (JSC::::parseStringSlowCase): (JSC::::lex): - Added tracking for sourceoffset. (JSC::::sourceCode): * parser/Lexer.h: (JSC::Lexer::currentOffset): (JSC::Lexer::currentLineStartOffset): (JSC::Lexer::setOffset): - Added tracking for lineStart. (JSC::Lexer::offsetFromSourcePtr): Added. conversion function. (JSC::Lexer::sourcePtrFromOffset): Added. conversion function. (JSC::Lexer::setOffsetFromSourcePtr): (JSC::::lexExpectIdentifier): - Added tracking for sourceoffset and lineStart. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Plumbed line and lineStart through the above as needed. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): Plumbed lineStart. (JSC::ScopeNode::ScopeNode): Plumbed lineStart. (JSC::ProgramNode::ProgramNode): Plumbed startColumn. (JSC::ProgramNode::create): Plumbed startColumn. (JSC::EvalNode::create): (JSC::FunctionBodyNode::FunctionBodyNode): Plumbed startColumn. (JSC::FunctionBodyNode::create): Plumbed startColumn. * parser/Nodes.h: (JSC::Node::startOffset): (JSC::Node::lineStartOffset): Added. (JSC::StatementNode::firstLine): (JSC::StatementNode::lastLine): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divotStartOffset): (JSC::ThrowableExpressionData::divotEndOffset): (JSC::ThrowableExpressionData::divotLine): (JSC::ThrowableExpressionData::divotLineStart): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStartOffset): (JSC::ThrowableSubExpressionData::subexpressionEndOffset): (JSC::ThrowableSubExpressionData::subexpressionLine): (JSC::ThrowableSubExpressionData::subexpressionLineStart): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStartOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEndOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLine): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLineStart): (JSC::ScopeNode::startStartOffset): (JSC::ScopeNode::startLineStartOffset): (JSC::ProgramNode::startColumn): (JSC::EvalNode::startColumn): (JSC::FunctionBodyNode::startColumn): - Plumbed line and lineStart through the above as needed. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseSourceElements): (JSC::::parseVarDeclarationList): (JSC::::parseConstDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): - Plumbed line and lineStart through the above as needed. (JSC::::parseFunctionBody): - Plumbed startColumn. (JSC::::parseFunctionInfo): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parseObjectLiteral): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Plumbed line, lineStart, startColumn through the above as needed. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::tokenStart): (JSC::Parser::tokenColumn): (JSC::Parser::tokenEnd): (JSC::Parser::tokenLineStart): (JSC::Parser::lastTokenLine): (JSC::Parser::lastTokenLineStart): (JSC::::parse): * parser/ParserTokens.h: (JSC::JSTokenLocation::JSTokenLocation): - Plumbed lineStart. (JSC::JSTokenLocation::lineStartPosition): (JSC::JSTokenLocation::startPosition): (JSC::JSTokenLocation::endPosition): * parser/SourceCode.h: (JSC::SourceCode::SourceCode): (JSC::SourceCode::startColumn): (JSC::makeSource): (JSC::SourceCode::subExpression): * parser/SourceProvider.cpp: delete old code. * parser/SourceProvider.h: delete old code. * parser/SourceProviderCacheItem.h: (JSC::SourceProviderCacheItem::closeBraceToken): (JSC::SourceProviderCacheItem::SourceProviderCacheItem): - Plumbed lineStart. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createFunctionExpr): (JSC::SyntaxChecker::createFunctionBody): (JSC::SyntaxChecker::createFuncDeclStatement): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::createGetterOrSetterProperty): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Made SyntaxChecker prototype changes to match ASTBuilder due to new args added for plumbing line, lineStart, and startColumn. * runtime/CodeCache.cpp: (JSC::CodeCache::generateBytecode): (JSC::CodeCache::getCodeBlock): - Plumbed startColumn. * runtime/Executable.cpp: (JSC::FunctionExecutable::FunctionExecutable): (JSC::ProgramExecutable::compileInternal): (JSC::FunctionExecutable::produceCodeBlockFor): (JSC::FunctionExecutable::fromGlobalCode): - Plumbed startColumn. * runtime/Executable.h: (JSC::ScriptExecutable::startColumn): (JSC::ScriptExecutable::recordParse): (JSC::FunctionExecutable::create): - Plumbed startColumn. Source/WebCore: Test: fast/js/line-column-numbers.html Updated the bindings to use StackFrame::computeLineAndColumn(). The old StackFrame::line() and StackFrame::column() has been removed. The new algorithm always computes the 2 values together anyway. Hence it is more efficient to return them as a pair instead of doing the same computation twice for each half of the result. * bindings/js/ScriptCallStackFactory.cpp: (WebCore::createScriptCallStack): (WebCore::createScriptCallStackFromException): * bindings/js/ScriptSourceCode.h: (WebCore::ScriptSourceCode::ScriptSourceCode): LayoutTests: The fix now computes line and column numbers more accurately. As a result, some of the test results need to be re-baselined. Among other fixes, one major source of difference is that the old code was incorrectly computing 0-based column numbers. This has now been fixed to be 1-based. Note: line numbers were always 1-based. Also added a new test: fast/js/line-column-numbers.html, which tests line and column numbers for source code in various configurations. * editing/execCommand/outdent-blockquote-test1-expected.txt: * editing/execCommand/outdent-blockquote-test2-expected.txt: * editing/execCommand/outdent-blockquote-test3-expected.txt: * editing/execCommand/outdent-blockquote-test4-expected.txt: * editing/pasteboard/copy-paste-float-expected.txt: * editing/pasteboard/paste-blockquote-before-blockquote-expected.txt: * editing/pasteboard/paste-double-nested-blockquote-before-blockquote-expected.txt: * fast/dom/Window/window-resize-contents-expected.txt: * fast/events/remove-target-with-shadow-in-drag-expected.txt: * fast/js/line-column-numbers-expected.txt: Added. * fast/js/line-column-numbers.html: Added. * fast/js/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): * fast/js/stack-trace-expected.txt: * inspector/console/console-url-line-column-expected.txt: Canonical link: https://commits.webkit.org/136467@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@152494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-09 16:15:12 +00:00
<body>
<p id="description"></p>
<p id="console"></p>
<script>
if (!this.alert) {
debug = print;
description = print;
}
description(
'This test checks line and column numbers in stack traces for correctness.'
);
testId = 0;
function printStack(stackTrace) {
debug("--> Case " + testId + " Stack Trace:")
stackTrace = stackTrace.split("\n");
var length = Math.min(stackTrace.length, 20);
Fix 30% JSBench regression (caused by adding column numbers to stack traces). https://bugs.webkit.org/show_bug.cgi?id=118481. Reviewed by Mark Hahnenberg and Geoffrey Garen. Source/JavaScriptCore: Previously, we already capture ExpressionRangeInfo that provides a divot for each bytecode that can potentially throw an exception (and therefore generate a stack trace). On first attempt to compute column numbers, we then do a walk of the source string to record all line start positions in a table associated with the SourceProvider. The column number can then be computed as divot - lineStartFor(bytecodeOffset). The computation of this lineStarts table is the source of the 30% JSBench performance regression. The new code now records lineStarts as the lexer and parser scans the source code. These lineStarts are then used to compute the column number for the given divot, and stored in the ExpressionRangeInfo. Similarly, we also capture the line number at the divot point and store that in the ExpressionRangeInfo. Hence, to look up line and column numbers, we now lookup the ExpressionRangeInfo for the bytecodeOffset, and then compute the line and column from the values stored in the expression info. The strategy: 1. We want to minimize perturbations to the lexer and parser. Specifically, the changes added should not change how it scans code, and generate bytecode. 2. We regard the divot as the source character position we are interested in. As such, we'll capture line and lineStart (for column) at the point when we capture the divot information. This ensures that the 3 values are consistent. How the change is done: 1. Change the lexer to track lineStarts. 2. Change the parser to capture line and lineStarts at the point of capturing divots. 3. Change the parser and associated code to plumb these values all the way to the point that the correspoinding ExpressionRangeInfo is emitted. 4. Propagate and record SourceCode firstLine and firstLineColumnOffset to the the necessary places so that we can add them as needed when reifying UnlinkedCodeBlocks into CodeBlocks. 5. Compress the line and column number values in the ExpressionRangeInfo. In practice, we seldom have both large line and column numbers. Hence, we can encode both in an uint32_t most of the time. For the times when we encounter both large line and column numbers, we have a fallback to store the "fat" position info. 6. Emit an ExpressionRangeInfo for UnaryOp nodes to get more line and column number coverage. 7. Change the interpreter to use the new way of computing line and column. 8. Delete old line and column computation code that is now unused. Misc details: - the old lexer was tracking both a startOffset and charPosition where charPosition equals startOffset - SourceCode.startOffset. We now use startOffset exclusively throughout the system for consistency. All offset values (including lineStart) are relative to the start of the SourceProvider string. These values will only be converted to be relative to the SourceCode.startOffset at the very last minute i.e. when the divot is stored into the ExpressionRangeInfo. This change to use the same offset system everywhere reduces confusion from having to convert back and forth between the 2 systems. It also enables a lot of assertions to be used. - Also fixed some bugs in the choice of divot positions to use. For example, both Eval and Function expressions previously used column numbers from the start of the expression but used the line number at the end of the expression. This is now fixed to use either the start or end positions as appropriate, but not a mix of line and columns from both. - Why use ints instead of unsigneds for offsets and lineStarts inside the lexer and parser? Some tests (e.g. fast/js/call-base-resolution.html and fast/js/eval-cross-window.html) has shown that lineStart offsets can be prior to the SourceCode.startOffset. Keeping the lexer offsets as ints simplifies computations and makes it easier to maintain the assertions that (startOffset >= lineStartOffset). However, column and line numbers are always unsigned when we publish them to the ExpressionRangeInfo. The ints are only used inside the lexer and parser ... well, and bytecode generator. - For all cases, lineStart is always captured where the divot is captured. However, some sputnik conformance tests have shown that we cannot honor line breaks for assignment statements like the following: eval("x\u000A*=\u000A-1;"); In this case, the lineStart is expected to be captured at the start of the assignment expression instead of at the divot point in the middle. The assignment expression is the only special case for this. This patch has been tested against the full layout tests both with release and debug builds with no regression. * API/JSContextRef.cpp: (JSContextCreateBacktrace): - Updated to use the new StackFrame::computeLineAndColumn(). * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): - Added m_firstLineColumnOffset initialization. - Plumbed the firstLineColumnOffset into the SourceCode. - Initialized column for op_debug using the new way. (JSC::CodeBlock::lineNumberForBytecodeOffset): - Changed to compute line number using the ExpressionRangeInfo. (JSC::CodeBlock::columnNumberForBytecodeOffset): Added - Changed to compute column number using the ExpressionRangeInfo. (JSC::CodeBlock::expressionRangeForBytecodeOffset): * bytecode/CodeBlock.h: (JSC::CodeBlock::firstLineColumnOffset): (JSC::GlobalCodeBlock::GlobalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::ProgramCodeBlock::ProgramCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::EvalCodeBlock::EvalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. But for EvalCodeBlocks, the firstLineColumnOffset is always 1 because we're starting with a new source string with no start offset. (JSC::FunctionCodeBlock::FunctionCodeBlock): - Plumbed firstLineColumnOffset through to the super class. * bytecode/ExpressionRangeInfo.h: - Added modes for encoding line and column into a single 30-bit unsigned. The encoding is in 1 of 3 modes: 1. FatLineMode: 22-bit line, 8-bit column 2. FatColumnMode: 8-bit line, 22-bit column 3. FatLineAndColumnMode: 32-bit line, 32-bit column (JSC::ExpressionRangeInfo::encodeFatLineMode): Added. - Encodes line and column into the 30-bit position using FatLine mode. (JSC::ExpressionRangeInfo::encodeFatColumnMode): Added. - Encodes line and column into the 30-bit position using FatColumn mode. (JSC::ExpressionRangeInfo::decodeFatLineMode): Added. - Decodes the FatLine mode 30-bit position into line and column. (JSC::ExpressionRangeInfo::decodeFatColumnMode): Added. - Decodes the FatColumn mode 30-bit position into line and column. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): - Plumbed startColumn through. (JSC::UnlinkedFunctionExecutable::link): - Plumbed startColumn through. (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): - Computes a line number using the new way. (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): - Added decoding of line and column. - Added handling of the case when we do not find a fitting expression range info for a specified bytecodeOffset. This only happens if the bytecodeOffset is below the first expression range info. In that case, we'll use the first expression range info entry. (JSC::UnlinkedCodeBlock::addExpressionInfo): - Added encoding of line and column. * bytecode/UnlinkedCodeBlock.h: - Added m_expressionInfoFatPositions in RareData. (JSC::UnlinkedFunctionExecutable::functionStartColumn): (JSC::UnlinkedCodeBlock::shrinkToFit): - Removed obsoleted m_lineInfo. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallEval): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallVarargs): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitConstruct): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitDebugHook): Plumbed lineStart through. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitNode): (JSC::BytecodeGenerator::emitNodeInConditionContext): - Removed obsoleted m_lineInfo. (JSC::BytecodeGenerator::emitExpressionInfo): - Plumbed line and lineStart through. - Compute the line and column to be added to the expression range info. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::ArrayNode::toArgumentList): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): - Plumbed line and lineStart through the above as needed. (JSC::UnaryOpNode::emitBytecode): - Added emission of an ExpressionRangeInfo for the UnaryOp node. (JSC::BinaryOpNode::emitStrcat): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): - Plumbed line and lineStart through the above as needed. (JSC::ConstStatementNode::emitBytecode): (JSC::EmptyStatementNode::emitBytecode): (JSC::DebuggerStatementNode::emitBytecode): (JSC::ExprStatementNode::emitBytecode): (JSC::VarStatementNode::emitBytecode): (JSC::IfElseNode::emitBytecode): (JSC::DoWhileNode::emitBytecode): (JSC::WhileNode::emitBytecode): (JSC::ForNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::ContinueNode::emitBytecode): (JSC::BreakNode::emitBytecode): (JSC::ReturnNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::SwitchNode::emitBytecode): (JSC::LabelNode::emitBytecode): (JSC::ThrowNode::emitBytecode): (JSC::TryNode::emitBytecode): (JSC::ProgramNode::emitBytecode): (JSC::EvalNode::emitBytecode): (JSC::FunctionBodyNode::emitBytecode): - Plumbed line and lineStart through the above as needed. * interpreter/Interpreter.cpp: (JSC::appendSourceToError): - Added line and column arguments for expressionRangeForBytecodeOffset(). (JSC::StackFrame::computeLineAndColumn): - Replaces StackFrame::line() and StackFrame::column(). (JSC::StackFrame::expressionInfo): - Added line and column arguments. (JSC::StackFrame::toString): - Changed to use the new StackFrame::computeLineAndColumn(). (JSC::Interpreter::getStackTrace): - Added the needed firstLineColumnOffset arg for the StackFrame. * interpreter/Interpreter.h: * parser/ASTBuilder.h: (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createFunctionExpr): (JSC::ASTBuilder::createFunctionBody): (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createFuncDeclStatement): (JSC::ASTBuilder::createBlockStatement): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createIfStatement): (JSC::ASTBuilder::createForLoop): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createVarStatement): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createTryStatement): (JSC::ASTBuilder::createSwitchStatement): (JSC::ASTBuilder::createWhileStatement): (JSC::ASTBuilder::createDoWhileStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::createDebugger): (JSC::ASTBuilder::createConstStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::unaryTokenStackLastLineStartPosition): Added. (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode):. - Plumbed line, lineStart, and startColumn through the above as needed. * parser/Lexer.cpp: (JSC::::currentSourcePtr): (JSC::::setCode): - Added tracking for sourceoffset and lineStart. (JSC::::internalShift): (JSC::::parseIdentifier): - Added tracking for lineStart. (JSC::::parseIdentifierSlowCase): (JSC::::parseString): - Added tracking for lineStart. (JSC::::parseStringSlowCase): (JSC::::lex): - Added tracking for sourceoffset. (JSC::::sourceCode): * parser/Lexer.h: (JSC::Lexer::currentOffset): (JSC::Lexer::currentLineStartOffset): (JSC::Lexer::setOffset): - Added tracking for lineStart. (JSC::Lexer::offsetFromSourcePtr): Added. conversion function. (JSC::Lexer::sourcePtrFromOffset): Added. conversion function. (JSC::Lexer::setOffsetFromSourcePtr): (JSC::::lexExpectIdentifier): - Added tracking for sourceoffset and lineStart. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Plumbed line and lineStart through the above as needed. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): Plumbed lineStart. (JSC::ScopeNode::ScopeNode): Plumbed lineStart. (JSC::ProgramNode::ProgramNode): Plumbed startColumn. (JSC::ProgramNode::create): Plumbed startColumn. (JSC::EvalNode::create): (JSC::FunctionBodyNode::FunctionBodyNode): Plumbed startColumn. (JSC::FunctionBodyNode::create): Plumbed startColumn. * parser/Nodes.h: (JSC::Node::startOffset): (JSC::Node::lineStartOffset): Added. (JSC::StatementNode::firstLine): (JSC::StatementNode::lastLine): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divotStartOffset): (JSC::ThrowableExpressionData::divotEndOffset): (JSC::ThrowableExpressionData::divotLine): (JSC::ThrowableExpressionData::divotLineStart): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStartOffset): (JSC::ThrowableSubExpressionData::subexpressionEndOffset): (JSC::ThrowableSubExpressionData::subexpressionLine): (JSC::ThrowableSubExpressionData::subexpressionLineStart): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStartOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEndOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLine): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLineStart): (JSC::ScopeNode::startStartOffset): (JSC::ScopeNode::startLineStartOffset): (JSC::ProgramNode::startColumn): (JSC::EvalNode::startColumn): (JSC::FunctionBodyNode::startColumn): - Plumbed line and lineStart through the above as needed. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseSourceElements): (JSC::::parseVarDeclarationList): (JSC::::parseConstDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): - Plumbed line and lineStart through the above as needed. (JSC::::parseFunctionBody): - Plumbed startColumn. (JSC::::parseFunctionInfo): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parseObjectLiteral): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Plumbed line, lineStart, startColumn through the above as needed. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::tokenStart): (JSC::Parser::tokenColumn): (JSC::Parser::tokenEnd): (JSC::Parser::tokenLineStart): (JSC::Parser::lastTokenLine): (JSC::Parser::lastTokenLineStart): (JSC::::parse): * parser/ParserTokens.h: (JSC::JSTokenLocation::JSTokenLocation): - Plumbed lineStart. (JSC::JSTokenLocation::lineStartPosition): (JSC::JSTokenLocation::startPosition): (JSC::JSTokenLocation::endPosition): * parser/SourceCode.h: (JSC::SourceCode::SourceCode): (JSC::SourceCode::startColumn): (JSC::makeSource): (JSC::SourceCode::subExpression): * parser/SourceProvider.cpp: delete old code. * parser/SourceProvider.h: delete old code. * parser/SourceProviderCacheItem.h: (JSC::SourceProviderCacheItem::closeBraceToken): (JSC::SourceProviderCacheItem::SourceProviderCacheItem): - Plumbed lineStart. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createFunctionExpr): (JSC::SyntaxChecker::createFunctionBody): (JSC::SyntaxChecker::createFuncDeclStatement): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::createGetterOrSetterProperty): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Made SyntaxChecker prototype changes to match ASTBuilder due to new args added for plumbing line, lineStart, and startColumn. * runtime/CodeCache.cpp: (JSC::CodeCache::generateBytecode): (JSC::CodeCache::getCodeBlock): - Plumbed startColumn. * runtime/Executable.cpp: (JSC::FunctionExecutable::FunctionExecutable): (JSC::ProgramExecutable::compileInternal): (JSC::FunctionExecutable::produceCodeBlockFor): (JSC::FunctionExecutable::fromGlobalCode): - Plumbed startColumn. * runtime/Executable.h: (JSC::ScriptExecutable::startColumn): (JSC::ScriptExecutable::recordParse): (JSC::FunctionExecutable::create): - Plumbed startColumn. Source/WebCore: Test: fast/js/line-column-numbers.html Updated the bindings to use StackFrame::computeLineAndColumn(). The old StackFrame::line() and StackFrame::column() has been removed. The new algorithm always computes the 2 values together anyway. Hence it is more efficient to return them as a pair instead of doing the same computation twice for each half of the result. * bindings/js/ScriptCallStackFactory.cpp: (WebCore::createScriptCallStack): (WebCore::createScriptCallStackFromException): * bindings/js/ScriptSourceCode.h: (WebCore::ScriptSourceCode::ScriptSourceCode): LayoutTests: The fix now computes line and column numbers more accurately. As a result, some of the test results need to be re-baselined. Among other fixes, one major source of difference is that the old code was incorrectly computing 0-based column numbers. This has now been fixed to be 1-based. Note: line numbers were always 1-based. Also added a new test: fast/js/line-column-numbers.html, which tests line and column numbers for source code in various configurations. * editing/execCommand/outdent-blockquote-test1-expected.txt: * editing/execCommand/outdent-blockquote-test2-expected.txt: * editing/execCommand/outdent-blockquote-test3-expected.txt: * editing/execCommand/outdent-blockquote-test4-expected.txt: * editing/pasteboard/copy-paste-float-expected.txt: * editing/pasteboard/paste-blockquote-before-blockquote-expected.txt: * editing/pasteboard/paste-double-nested-blockquote-before-blockquote-expected.txt: * fast/dom/Window/window-resize-contents-expected.txt: * fast/events/remove-target-with-shadow-in-drag-expected.txt: * fast/js/line-column-numbers-expected.txt: Added. * fast/js/line-column-numbers.html: Added. * fast/js/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): * fast/js/stack-trace-expected.txt: * inspector/console/console-url-line-column-expected.txt: Canonical link: https://commits.webkit.org/136467@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@152494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-09 16:15:12 +00:00
for (var i = 0; i < length; i++) {
var indexOfAt = stackTrace[i].indexOf('@')
var indexOfLastSlash = stackTrace[i].lastIndexOf('/');
if (indexOfLastSlash == -1)
indexOfLastSlash = indexOfAt
var functionName = stackTrace[i].substring(0, indexOfAt);
var fileName = stackTrace[i].substring(indexOfLastSlash + 1);
debug(" " + i + " " + functionName + " at " + fileName);
}
debug('');
}
</script>
<!-- Case 1: Throw and print stack: -->
<script>testId++;</script>
<script>try { throw new Error(); } catch (e) { printStack(e.stack); }</script>
<!-- Case 2: Same program as Case 1 but indented. -->
<script>testId++;</script>
<script>try { throw new Error(); } catch (e) { printStack(e.stack); }</script>
<!-- Case 3: Same program indented on the same line. -->
<script>testId++;</script>
<script>try { throw new Error(); } catch (e) { printStack(e.stack); }</script> <script>try { throw new Error(); } catch (e) { printStack(e.stack); }</script>
<!-- Case 4: Throw inside a Function. -->
<script>testId++;</script>
<script>
try {
function doThrow4() { throw new Error(); }
doThrow4();
} catch(e) {
printStack(e.stack);
}
</script>
<!-- Case 5: Function wrapping a Function. -->
<script>testId++;</script>
<script>
function doThrow5() { try { function innerFunc() { throw new Error(); } innerFunc(); } catch (e) { printStack(e.stack); }}; doThrow5();
</script>
<!-- Case 6: Same inner function body as Case 5. -->
<script>testId++;</script>
<script>
function doThrow6() { try { function innerFunc() { throw new Error(); } innerFunc(); } catch (e) { printStack(e.stack); }}; doThrow6();
</script>
<!-- Case 7: Case 1 redone with a Function Expression. -->
<script>testId++;</script>
<script>try { (function () { throw new Error(); })(); } catch (e) { printStack(e.stack); }</script>
<!-- Case 8: Case 2 redone with a Function Expression. -->
<script>testId++;</script>
<script>try { (function () { throw new Error(); })(); } catch (e) { printStack(e.stack); }</script>
<!-- Case 9: Case 3 redone with a Function Expression. -->
<script>testId++;</script>
<script>try { (function () { throw new Error(); })(); } catch (e) { printStack(e.stack); }</script> <script>try { (function () { throw new Error(); })(); } catch (e) { printStack(e.stack); }</script>
<!-- Case 10: Function Expression as multiple lines. -->
<script>testId++;</script>
<script>
try {
(function () {
throw new Error();
})();
} catch(e) {
printStack(e.stack);
}
</script>
<!-- Case 11: Case 4 redone with a Function wrapping Function Expression. -->
<script>testId++;</script>
<script>
try {
function doThrow11() {
(function () { throw new Error(); })();
}
doThrow11();
} catch(e) {
printStack(e.stack);
}
</script>
<!-- Case 12: A Function Expression wrapping a Function Expression. -->
<script>testId++;</script>
<script>
try { (function () {(function () { throw new Error(); })();})(); } catch (e) { printStack(e.stack); }
</script>
<!-- Case 13: Same function body as Case 12. -->
<script>testId++;</script>
<script>
try { (function () {(function () { throw new Error(); })();})(); } catch (e) { printStack(e.stack); }
</script>
<!-- Case 14: Function Expression in a Function Expression in a Function. -->
<script>testId++;</script>
<script>
try { function doThrow14() {(function () { (function () { throw new Error(); })();})();} doThrow14(); } catch (e) { printStack(e.stack); }
</script>
<!-- Case 15: Throw in an Eval. -->
<script>testId++;</script>
<script>
eval("try { throw new Error(); } catch(e) { printStack(e.stack); }");
</script>
<!-- Case 16: Multiple lines in an Eval. -->
<script>testId++;</script>
<script>
eval("\n" +
"try {\n" +
" function doThrow16() {throw new Error();}\n" +
" doThrow16();\n" +
"} catch(e) {\n" +
" printStack(e.stack);\n" +
"}\n" +
"");
</script>
<!-- Case 17: Function Expression in an Eval. -->
<script>testId++;</script>
<script>
eval("try { (function () { throw new Error();})(); } catch(e) { printStack(e.stack); }");
</script>
<!-- Case 18: Multiple lines with a Function Expression in an Eval. -->
<script>testId++;</script>
<script>
eval("\n" +
"try {\n" +
" (function () { throw new Error();})();\n" +
"} catch(e) {\n" +
" printStack(e.stack);\n" +
"}\n" +
"");
</script>
<!-- Case 19: Binary op with type coersion on strcat. -->
<script>testId++;</script>
<script>
try {
testObj19 = {
toString: function() {
var result = ("Hello " + "World") + this;
b = 5;
return result;
},
run: function() {
return testObj19.toString();
}
};
testObj19.run();
} catch(e) {
printStack(e.stack);
}
</script>
<!-- Case 20: BinaryOp with type coersion on comparison. -->
<script>testId++;</script>
<script>
try {
function test20() {
var f = function g() {
if (this != 10) f();
};
var a = f();
}
test20();
} catch(e) {
printStack(e.stack);
}
</script>
Fix problems with divot and lineStart mismatches. https://bugs.webkit.org/show_bug.cgi?id=118662. Reviewed by Oliver Hunt. Source/JavaScriptCore: r152494 added the recording of lineStart values for divot positions. This is needed for the computation of column numbers. Similarly, it also added the recording of line numbers for the divot positions. One problem with the approach taken was that the line and lineStart values were recorded independently, and hence were not always guaranteed to be sampled at the same place that the divot position is recorded. This resulted in potential mismatches that cause some assertions to fail. The solution is to introduce a JSTextPosition abstraction that records the divot position, line, and lineStart as a single quantity. Wherever we record the divot position as an unsigned int previously, we now record its JSTextPosition which captures all 3 values in one go. This ensures that the captured line and lineStart will always match the captured divot position. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): (JSC::BytecodeGenerator::emitCallEval): (JSC::BytecodeGenerator::emitCallVarargs): (JSC::BytecodeGenerator::emitConstruct): (JSC::BytecodeGenerator::emitDebugHook): - Use JSTextPosition instead of passing line and lineStart explicitly. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitExpressionInfo): - Use JSTextPosition instead of passing line and lineStart explicitly. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): (JSC::UnaryOpNode::emitBytecode): (JSC::BinaryOpNode::emitStrcat): (JSC::BinaryOpNode::emitBytecode): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::ThrowNode::emitBytecode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/ASTBuilder.h: - Replaced ASTBuilder::PositionInfo with JSTextPosition. (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Lexer.cpp: (JSC::::lex): - Added support for capturing the appropriate JSTextPositions instead of just the character offset. * parser/Lexer.h: (JSC::Lexer::currentPosition): (JSC::::lexExpectIdentifier): - Added support for capturing the appropriate JSTextPositions instead of just the character offset. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Nodes.h: (JSC::Node::lineNo): (JSC::Node::startOffset): (JSC::Node::lineStartOffset): (JSC::Node::position): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divot): (JSC::ThrowableExpressionData::divotStart): (JSC::ThrowableExpressionData::divotEnd): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStart): (JSC::ThrowableSubExpressionData::subexpressionEnd): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStart): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEnd): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseInner): - Use JSTextPosition instead of passing line and lineStart explicitly. (JSC::::didFinishParsing): - Remove setting of m_lastLine value. We always pass in the value from m_lastLine anyway. So, this assignment is effectively a nop. (JSC::::parseVarDeclaration): (JSC::::parseVarDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): (JSC::::parseTryStatement): (JSC::::parseBlockStatement): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseExpressionStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::getToken): (JSC::Parser::tokenStartPosition): (JSC::Parser::tokenEndPosition): (JSC::Parser::lastTokenEndPosition): (JSC::::parse): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/ParserTokens.h: (JSC::JSTextPosition::JSTextPosition): (JSC::JSTextPosition::operator+): (JSC::JSTextPosition::operator-): (JSC::JSTextPosition::operator int): - Added JSTextPosition. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Use JSTextPosition instead of passing line and lineStart explicitly. LayoutTests: Added regression test cases from https://bugs.webkit.org/show_bug.cgi?id=118662 and https://bugs.webkit.org/show_bug.cgi?id=118664. * fast/js/line-column-numbers-expected.txt: * fast/js/line-column-numbers.html: * fast/js/script-tests/line-column-numbers.js: (try.toFuzz1): (try.toFuzz2): Canonical link: https://commits.webkit.org/137242@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@153477 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-30 17:01:40 +00:00
<!-- Case 21: Regression test from https://bugs.webkit.org/show_bug.cgi?id=118662 -->
<script>testId++;</script>
<script>
try {
[JSC] Invalid AssignmentTargetType should be an early error. https://bugs.webkit.org/show_bug.cgi?id=197603 Reviewed by Keith Miller. JSTests: * test262/expectations.yaml: Update expectations to reflect new SyntaxErrors. (Ideally, these should all be viewed as passing in the near future.) * stress/async-await-basic.js: * stress/big-int-literals.js: Update tests to reflect new SyntaxErrors. * ChakraCore.yaml: * ChakraCore/test/EH/try6.baseline-jsc: * ChakraCore/test/Error/variousErrors3.baseline-jsc: Added. Update baselines to reflect new SyntaxErrors. Source/JavaScriptCore: Since ES6, expressions like 0++, ++0, 0 = 0, and 0 += 0 are all specified as early errors: https://tc39.github.io/ecma262/#sec-update-expressions-static-semantics-early-errors https://tc39.github.io/ecma262/#sec-assignment-operators-static-semantics-early-errors We currently throw late ReferenceErrors for these -- let's turn them into early SyntaxErrors. (This is based on the expectation that https://github.com/tc39/ecma262/pull/1527 will be accepted; if that doesn't come to pass, we can subsequently introduce early ReferenceError and revise these.) * bytecompiler/NodesCodegen.cpp: (JSC::PostfixNode::emitBytecode): Add an assert for "function call LHS" case. (JSC::PrefixNode::emitBytecode): Add an assert for "function call LHS" case. * parser/ASTBuilder.h: (JSC::ASTBuilder::isLocation): Added. (JSC::ASTBuilder::isAssignmentLocation): Fix misleading parameter name. (JSC::ASTBuilder::isFunctionCall): Added. (JSC::ASTBuilder::makeAssignNode): Add an assert for "function call LHS" case. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::isLocation): Added. (JSC::SyntaxChecker::isAssignmentLocation): Fix incorrect definition and align with ASTBuilder. (JSC::SyntaxChecker::isFunctionCall): Added. * parser/Nodes.h: (JSC::ExpressionNode::isFunctionCall const): Added. Ensure that the parser can check whether an expression node is a function call. * parser/Parser.cpp: (JSC::Parser<LexerType>::isSimpleAssignmentTarget): Added. (JSC::Parser<LexerType>::parseAssignmentExpression): (JSC::Parser<LexerType>::parseUnaryExpression): See below. * parser/Parser.h: Throw SyntaxError whenever an assignment or update expression's target is invalid. Unfortunately, it seems that web compatibility obliges us to exempt the "function call LHS" case in sloppy mode. (https://github.com/tc39/ecma262/issues/257#issuecomment-195106880) Additional cleanup items: - Make use of `semanticFailIfTrue` for `isMetaProperty` checks, as it's equivalent. - Rename `requiresLExpr` to `hasPrefixUpdateOp` since it's now confusing, and get rid of `modifiesExpr` since it refers to the exact same condition. - Stop setting `lastOperator` near the end -- one case was incorrect and regardless neither is used. LayoutTests: * fast/events/window-onerror4-expected.txt: * ietestcenter/Javascript/11.13.1-1-1-expected.txt: * ietestcenter/Javascript/11.13.1-1-2-expected.txt: * ietestcenter/Javascript/11.13.1-1-3-expected.txt: * ietestcenter/Javascript/11.13.1-1-4-expected.txt: * js/basic-strict-mode-expected.txt: * js/dom/assign-expected.txt: * js/dom/line-column-numbers-expected.txt: * js/dom/line-column-numbers.html: * js/dom/postfix-syntax-expected.txt: * js/dom/prefix-syntax-expected.txt: * js/dom/script-tests/line-column-numbers.js: * js/function-toString-parentheses-expected.txt: * js/parser-syntax-check-expected.txt: * js/parser-xml-close-comment-expected.txt: * js/script-tests/function-toString-parentheses.js: * js/script-tests/parser-syntax-check.js: Update tests & expectations to reflect new SyntaxErrors. * js/script-tests/toString-prefix-postfix-preserve-parens.js: * js/toString-prefix-postfix-preserve-parens-expected.txt: None of the prefix/postfix tests make sense here now that they're all SyntaxErrors; remove them and just leave the typeof tests. Canonical link: https://commits.webkit.org/212076@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245406 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-05-16 20:08:22 +00:00
eval(
"function toFuzz21() {\n" +
" if (PriorityQueue.prototype.doSort() instanceof (this ^= function () {})) return 2;\n" +
"}\n" +
"toFuzz21();"
);
Fix problems with divot and lineStart mismatches. https://bugs.webkit.org/show_bug.cgi?id=118662. Reviewed by Oliver Hunt. Source/JavaScriptCore: r152494 added the recording of lineStart values for divot positions. This is needed for the computation of column numbers. Similarly, it also added the recording of line numbers for the divot positions. One problem with the approach taken was that the line and lineStart values were recorded independently, and hence were not always guaranteed to be sampled at the same place that the divot position is recorded. This resulted in potential mismatches that cause some assertions to fail. The solution is to introduce a JSTextPosition abstraction that records the divot position, line, and lineStart as a single quantity. Wherever we record the divot position as an unsigned int previously, we now record its JSTextPosition which captures all 3 values in one go. This ensures that the captured line and lineStart will always match the captured divot position. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): (JSC::BytecodeGenerator::emitCallEval): (JSC::BytecodeGenerator::emitCallVarargs): (JSC::BytecodeGenerator::emitConstruct): (JSC::BytecodeGenerator::emitDebugHook): - Use JSTextPosition instead of passing line and lineStart explicitly. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitExpressionInfo): - Use JSTextPosition instead of passing line and lineStart explicitly. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): (JSC::UnaryOpNode::emitBytecode): (JSC::BinaryOpNode::emitStrcat): (JSC::BinaryOpNode::emitBytecode): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::ThrowNode::emitBytecode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/ASTBuilder.h: - Replaced ASTBuilder::PositionInfo with JSTextPosition. (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Lexer.cpp: (JSC::::lex): - Added support for capturing the appropriate JSTextPositions instead of just the character offset. * parser/Lexer.h: (JSC::Lexer::currentPosition): (JSC::::lexExpectIdentifier): - Added support for capturing the appropriate JSTextPositions instead of just the character offset. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Nodes.h: (JSC::Node::lineNo): (JSC::Node::startOffset): (JSC::Node::lineStartOffset): (JSC::Node::position): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divot): (JSC::ThrowableExpressionData::divotStart): (JSC::ThrowableExpressionData::divotEnd): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStart): (JSC::ThrowableSubExpressionData::subexpressionEnd): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStart): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEnd): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseInner): - Use JSTextPosition instead of passing line and lineStart explicitly. (JSC::::didFinishParsing): - Remove setting of m_lastLine value. We always pass in the value from m_lastLine anyway. So, this assignment is effectively a nop. (JSC::::parseVarDeclaration): (JSC::::parseVarDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): (JSC::::parseTryStatement): (JSC::::parseBlockStatement): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseExpressionStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::getToken): (JSC::Parser::tokenStartPosition): (JSC::Parser::tokenEndPosition): (JSC::Parser::lastTokenEndPosition): (JSC::::parse): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/ParserTokens.h: (JSC::JSTextPosition::JSTextPosition): (JSC::JSTextPosition::operator+): (JSC::JSTextPosition::operator-): (JSC::JSTextPosition::operator int): - Added JSTextPosition. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Use JSTextPosition instead of passing line and lineStart explicitly. LayoutTests: Added regression test cases from https://bugs.webkit.org/show_bug.cgi?id=118662 and https://bugs.webkit.org/show_bug.cgi?id=118664. * fast/js/line-column-numbers-expected.txt: * fast/js/line-column-numbers.html: * fast/js/script-tests/line-column-numbers.js: (try.toFuzz1): (try.toFuzz2): Canonical link: https://commits.webkit.org/137242@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@153477 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-30 17:01:40 +00:00
} catch(e) {
printStack(e.stack);
}
</script>
<!-- Case 22: Regression test from https://bugs.webkit.org/show_bug.cgi?id=118664 -->
<script>testId++;</script>
<script>
try {
function toFuzz22() {
var conf = new ConfigObject({})
for (conf in str1.localeCompare) {
Fix problems with divot and lineStart mismatches. https://bugs.webkit.org/show_bug.cgi?id=118662. Reviewed by Oliver Hunt. Source/JavaScriptCore: r152494 added the recording of lineStart values for divot positions. This is needed for the computation of column numbers. Similarly, it also added the recording of line numbers for the divot positions. One problem with the approach taken was that the line and lineStart values were recorded independently, and hence were not always guaranteed to be sampled at the same place that the divot position is recorded. This resulted in potential mismatches that cause some assertions to fail. The solution is to introduce a JSTextPosition abstraction that records the divot position, line, and lineStart as a single quantity. Wherever we record the divot position as an unsigned int previously, we now record its JSTextPosition which captures all 3 values in one go. This ensures that the captured line and lineStart will always match the captured divot position. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): (JSC::BytecodeGenerator::emitCallEval): (JSC::BytecodeGenerator::emitCallVarargs): (JSC::BytecodeGenerator::emitConstruct): (JSC::BytecodeGenerator::emitDebugHook): - Use JSTextPosition instead of passing line and lineStart explicitly. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitExpressionInfo): - Use JSTextPosition instead of passing line and lineStart explicitly. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): (JSC::UnaryOpNode::emitBytecode): (JSC::BinaryOpNode::emitStrcat): (JSC::BinaryOpNode::emitBytecode): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::ThrowNode::emitBytecode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/ASTBuilder.h: - Replaced ASTBuilder::PositionInfo with JSTextPosition. (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Lexer.cpp: (JSC::::lex): - Added support for capturing the appropriate JSTextPositions instead of just the character offset. * parser/Lexer.h: (JSC::Lexer::currentPosition): (JSC::::lexExpectIdentifier): - Added support for capturing the appropriate JSTextPositions instead of just the character offset. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Nodes.h: (JSC::Node::lineNo): (JSC::Node::startOffset): (JSC::Node::lineStartOffset): (JSC::Node::position): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divot): (JSC::ThrowableExpressionData::divotStart): (JSC::ThrowableExpressionData::divotEnd): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStart): (JSC::ThrowableSubExpressionData::subexpressionEnd): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStart): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEnd): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseInner): - Use JSTextPosition instead of passing line and lineStart explicitly. (JSC::::didFinishParsing): - Remove setting of m_lastLine value. We always pass in the value from m_lastLine anyway. So, this assignment is effectively a nop. (JSC::::parseVarDeclaration): (JSC::::parseVarDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): (JSC::::parseTryStatement): (JSC::::parseBlockStatement): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseExpressionStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::getToken): (JSC::Parser::tokenStartPosition): (JSC::Parser::tokenEndPosition): (JSC::Parser::lastTokenEndPosition): (JSC::::parse): - Use JSTextPosition instead of passing line and lineStart explicitly. * parser/ParserTokens.h: (JSC::JSTextPosition::JSTextPosition): (JSC::JSTextPosition::operator+): (JSC::JSTextPosition::operator-): (JSC::JSTextPosition::operator int): - Added JSTextPosition. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Use JSTextPosition instead of passing line and lineStart explicitly. LayoutTests: Added regression test cases from https://bugs.webkit.org/show_bug.cgi?id=118662 and https://bugs.webkit.org/show_bug.cgi?id=118664. * fast/js/line-column-numbers-expected.txt: * fast/js/line-column-numbers.html: * fast/js/script-tests/line-column-numbers.js: (try.toFuzz1): (try.toFuzz2): Canonical link: https://commits.webkit.org/137242@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@153477 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-30 17:01:40 +00:00
}
}
toFuzz22();
} catch(e) {
printStack(e.stack);
}
</script>
Fix 30% JSBench regression (caused by adding column numbers to stack traces). https://bugs.webkit.org/show_bug.cgi?id=118481. Reviewed by Mark Hahnenberg and Geoffrey Garen. Source/JavaScriptCore: Previously, we already capture ExpressionRangeInfo that provides a divot for each bytecode that can potentially throw an exception (and therefore generate a stack trace). On first attempt to compute column numbers, we then do a walk of the source string to record all line start positions in a table associated with the SourceProvider. The column number can then be computed as divot - lineStartFor(bytecodeOffset). The computation of this lineStarts table is the source of the 30% JSBench performance regression. The new code now records lineStarts as the lexer and parser scans the source code. These lineStarts are then used to compute the column number for the given divot, and stored in the ExpressionRangeInfo. Similarly, we also capture the line number at the divot point and store that in the ExpressionRangeInfo. Hence, to look up line and column numbers, we now lookup the ExpressionRangeInfo for the bytecodeOffset, and then compute the line and column from the values stored in the expression info. The strategy: 1. We want to minimize perturbations to the lexer and parser. Specifically, the changes added should not change how it scans code, and generate bytecode. 2. We regard the divot as the source character position we are interested in. As such, we'll capture line and lineStart (for column) at the point when we capture the divot information. This ensures that the 3 values are consistent. How the change is done: 1. Change the lexer to track lineStarts. 2. Change the parser to capture line and lineStarts at the point of capturing divots. 3. Change the parser and associated code to plumb these values all the way to the point that the correspoinding ExpressionRangeInfo is emitted. 4. Propagate and record SourceCode firstLine and firstLineColumnOffset to the the necessary places so that we can add them as needed when reifying UnlinkedCodeBlocks into CodeBlocks. 5. Compress the line and column number values in the ExpressionRangeInfo. In practice, we seldom have both large line and column numbers. Hence, we can encode both in an uint32_t most of the time. For the times when we encounter both large line and column numbers, we have a fallback to store the "fat" position info. 6. Emit an ExpressionRangeInfo for UnaryOp nodes to get more line and column number coverage. 7. Change the interpreter to use the new way of computing line and column. 8. Delete old line and column computation code that is now unused. Misc details: - the old lexer was tracking both a startOffset and charPosition where charPosition equals startOffset - SourceCode.startOffset. We now use startOffset exclusively throughout the system for consistency. All offset values (including lineStart) are relative to the start of the SourceProvider string. These values will only be converted to be relative to the SourceCode.startOffset at the very last minute i.e. when the divot is stored into the ExpressionRangeInfo. This change to use the same offset system everywhere reduces confusion from having to convert back and forth between the 2 systems. It also enables a lot of assertions to be used. - Also fixed some bugs in the choice of divot positions to use. For example, both Eval and Function expressions previously used column numbers from the start of the expression but used the line number at the end of the expression. This is now fixed to use either the start or end positions as appropriate, but not a mix of line and columns from both. - Why use ints instead of unsigneds for offsets and lineStarts inside the lexer and parser? Some tests (e.g. fast/js/call-base-resolution.html and fast/js/eval-cross-window.html) has shown that lineStart offsets can be prior to the SourceCode.startOffset. Keeping the lexer offsets as ints simplifies computations and makes it easier to maintain the assertions that (startOffset >= lineStartOffset). However, column and line numbers are always unsigned when we publish them to the ExpressionRangeInfo. The ints are only used inside the lexer and parser ... well, and bytecode generator. - For all cases, lineStart is always captured where the divot is captured. However, some sputnik conformance tests have shown that we cannot honor line breaks for assignment statements like the following: eval("x\u000A*=\u000A-1;"); In this case, the lineStart is expected to be captured at the start of the assignment expression instead of at the divot point in the middle. The assignment expression is the only special case for this. This patch has been tested against the full layout tests both with release and debug builds with no regression. * API/JSContextRef.cpp: (JSContextCreateBacktrace): - Updated to use the new StackFrame::computeLineAndColumn(). * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): - Added m_firstLineColumnOffset initialization. - Plumbed the firstLineColumnOffset into the SourceCode. - Initialized column for op_debug using the new way. (JSC::CodeBlock::lineNumberForBytecodeOffset): - Changed to compute line number using the ExpressionRangeInfo. (JSC::CodeBlock::columnNumberForBytecodeOffset): Added - Changed to compute column number using the ExpressionRangeInfo. (JSC::CodeBlock::expressionRangeForBytecodeOffset): * bytecode/CodeBlock.h: (JSC::CodeBlock::firstLineColumnOffset): (JSC::GlobalCodeBlock::GlobalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::ProgramCodeBlock::ProgramCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::EvalCodeBlock::EvalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. But for EvalCodeBlocks, the firstLineColumnOffset is always 1 because we're starting with a new source string with no start offset. (JSC::FunctionCodeBlock::FunctionCodeBlock): - Plumbed firstLineColumnOffset through to the super class. * bytecode/ExpressionRangeInfo.h: - Added modes for encoding line and column into a single 30-bit unsigned. The encoding is in 1 of 3 modes: 1. FatLineMode: 22-bit line, 8-bit column 2. FatColumnMode: 8-bit line, 22-bit column 3. FatLineAndColumnMode: 32-bit line, 32-bit column (JSC::ExpressionRangeInfo::encodeFatLineMode): Added. - Encodes line and column into the 30-bit position using FatLine mode. (JSC::ExpressionRangeInfo::encodeFatColumnMode): Added. - Encodes line and column into the 30-bit position using FatColumn mode. (JSC::ExpressionRangeInfo::decodeFatLineMode): Added. - Decodes the FatLine mode 30-bit position into line and column. (JSC::ExpressionRangeInfo::decodeFatColumnMode): Added. - Decodes the FatColumn mode 30-bit position into line and column. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): - Plumbed startColumn through. (JSC::UnlinkedFunctionExecutable::link): - Plumbed startColumn through. (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): - Computes a line number using the new way. (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): - Added decoding of line and column. - Added handling of the case when we do not find a fitting expression range info for a specified bytecodeOffset. This only happens if the bytecodeOffset is below the first expression range info. In that case, we'll use the first expression range info entry. (JSC::UnlinkedCodeBlock::addExpressionInfo): - Added encoding of line and column. * bytecode/UnlinkedCodeBlock.h: - Added m_expressionInfoFatPositions in RareData. (JSC::UnlinkedFunctionExecutable::functionStartColumn): (JSC::UnlinkedCodeBlock::shrinkToFit): - Removed obsoleted m_lineInfo. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallEval): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallVarargs): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitConstruct): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitDebugHook): Plumbed lineStart through. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitNode): (JSC::BytecodeGenerator::emitNodeInConditionContext): - Removed obsoleted m_lineInfo. (JSC::BytecodeGenerator::emitExpressionInfo): - Plumbed line and lineStart through. - Compute the line and column to be added to the expression range info. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::ArrayNode::toArgumentList): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): - Plumbed line and lineStart through the above as needed. (JSC::UnaryOpNode::emitBytecode): - Added emission of an ExpressionRangeInfo for the UnaryOp node. (JSC::BinaryOpNode::emitStrcat): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): - Plumbed line and lineStart through the above as needed. (JSC::ConstStatementNode::emitBytecode): (JSC::EmptyStatementNode::emitBytecode): (JSC::DebuggerStatementNode::emitBytecode): (JSC::ExprStatementNode::emitBytecode): (JSC::VarStatementNode::emitBytecode): (JSC::IfElseNode::emitBytecode): (JSC::DoWhileNode::emitBytecode): (JSC::WhileNode::emitBytecode): (JSC::ForNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::ContinueNode::emitBytecode): (JSC::BreakNode::emitBytecode): (JSC::ReturnNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::SwitchNode::emitBytecode): (JSC::LabelNode::emitBytecode): (JSC::ThrowNode::emitBytecode): (JSC::TryNode::emitBytecode): (JSC::ProgramNode::emitBytecode): (JSC::EvalNode::emitBytecode): (JSC::FunctionBodyNode::emitBytecode): - Plumbed line and lineStart through the above as needed. * interpreter/Interpreter.cpp: (JSC::appendSourceToError): - Added line and column arguments for expressionRangeForBytecodeOffset(). (JSC::StackFrame::computeLineAndColumn): - Replaces StackFrame::line() and StackFrame::column(). (JSC::StackFrame::expressionInfo): - Added line and column arguments. (JSC::StackFrame::toString): - Changed to use the new StackFrame::computeLineAndColumn(). (JSC::Interpreter::getStackTrace): - Added the needed firstLineColumnOffset arg for the StackFrame. * interpreter/Interpreter.h: * parser/ASTBuilder.h: (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createFunctionExpr): (JSC::ASTBuilder::createFunctionBody): (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createFuncDeclStatement): (JSC::ASTBuilder::createBlockStatement): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createIfStatement): (JSC::ASTBuilder::createForLoop): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createVarStatement): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createTryStatement): (JSC::ASTBuilder::createSwitchStatement): (JSC::ASTBuilder::createWhileStatement): (JSC::ASTBuilder::createDoWhileStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::createDebugger): (JSC::ASTBuilder::createConstStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::unaryTokenStackLastLineStartPosition): Added. (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode):. - Plumbed line, lineStart, and startColumn through the above as needed. * parser/Lexer.cpp: (JSC::::currentSourcePtr): (JSC::::setCode): - Added tracking for sourceoffset and lineStart. (JSC::::internalShift): (JSC::::parseIdentifier): - Added tracking for lineStart. (JSC::::parseIdentifierSlowCase): (JSC::::parseString): - Added tracking for lineStart. (JSC::::parseStringSlowCase): (JSC::::lex): - Added tracking for sourceoffset. (JSC::::sourceCode): * parser/Lexer.h: (JSC::Lexer::currentOffset): (JSC::Lexer::currentLineStartOffset): (JSC::Lexer::setOffset): - Added tracking for lineStart. (JSC::Lexer::offsetFromSourcePtr): Added. conversion function. (JSC::Lexer::sourcePtrFromOffset): Added. conversion function. (JSC::Lexer::setOffsetFromSourcePtr): (JSC::::lexExpectIdentifier): - Added tracking for sourceoffset and lineStart. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Plumbed line and lineStart through the above as needed. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): Plumbed lineStart. (JSC::ScopeNode::ScopeNode): Plumbed lineStart. (JSC::ProgramNode::ProgramNode): Plumbed startColumn. (JSC::ProgramNode::create): Plumbed startColumn. (JSC::EvalNode::create): (JSC::FunctionBodyNode::FunctionBodyNode): Plumbed startColumn. (JSC::FunctionBodyNode::create): Plumbed startColumn. * parser/Nodes.h: (JSC::Node::startOffset): (JSC::Node::lineStartOffset): Added. (JSC::StatementNode::firstLine): (JSC::StatementNode::lastLine): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divotStartOffset): (JSC::ThrowableExpressionData::divotEndOffset): (JSC::ThrowableExpressionData::divotLine): (JSC::ThrowableExpressionData::divotLineStart): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStartOffset): (JSC::ThrowableSubExpressionData::subexpressionEndOffset): (JSC::ThrowableSubExpressionData::subexpressionLine): (JSC::ThrowableSubExpressionData::subexpressionLineStart): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStartOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEndOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLine): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLineStart): (JSC::ScopeNode::startStartOffset): (JSC::ScopeNode::startLineStartOffset): (JSC::ProgramNode::startColumn): (JSC::EvalNode::startColumn): (JSC::FunctionBodyNode::startColumn): - Plumbed line and lineStart through the above as needed. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseSourceElements): (JSC::::parseVarDeclarationList): (JSC::::parseConstDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): - Plumbed line and lineStart through the above as needed. (JSC::::parseFunctionBody): - Plumbed startColumn. (JSC::::parseFunctionInfo): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parseObjectLiteral): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Plumbed line, lineStart, startColumn through the above as needed. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::tokenStart): (JSC::Parser::tokenColumn): (JSC::Parser::tokenEnd): (JSC::Parser::tokenLineStart): (JSC::Parser::lastTokenLine): (JSC::Parser::lastTokenLineStart): (JSC::::parse): * parser/ParserTokens.h: (JSC::JSTokenLocation::JSTokenLocation): - Plumbed lineStart. (JSC::JSTokenLocation::lineStartPosition): (JSC::JSTokenLocation::startPosition): (JSC::JSTokenLocation::endPosition): * parser/SourceCode.h: (JSC::SourceCode::SourceCode): (JSC::SourceCode::startColumn): (JSC::makeSource): (JSC::SourceCode::subExpression): * parser/SourceProvider.cpp: delete old code. * parser/SourceProvider.h: delete old code. * parser/SourceProviderCacheItem.h: (JSC::SourceProviderCacheItem::closeBraceToken): (JSC::SourceProviderCacheItem::SourceProviderCacheItem): - Plumbed lineStart. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createFunctionExpr): (JSC::SyntaxChecker::createFunctionBody): (JSC::SyntaxChecker::createFuncDeclStatement): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::createGetterOrSetterProperty): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Made SyntaxChecker prototype changes to match ASTBuilder due to new args added for plumbing line, lineStart, and startColumn. * runtime/CodeCache.cpp: (JSC::CodeCache::generateBytecode): (JSC::CodeCache::getCodeBlock): - Plumbed startColumn. * runtime/Executable.cpp: (JSC::FunctionExecutable::FunctionExecutable): (JSC::ProgramExecutable::compileInternal): (JSC::FunctionExecutable::produceCodeBlockFor): (JSC::FunctionExecutable::fromGlobalCode): - Plumbed startColumn. * runtime/Executable.h: (JSC::ScriptExecutable::startColumn): (JSC::ScriptExecutable::recordParse): (JSC::FunctionExecutable::create): - Plumbed startColumn. Source/WebCore: Test: fast/js/line-column-numbers.html Updated the bindings to use StackFrame::computeLineAndColumn(). The old StackFrame::line() and StackFrame::column() has been removed. The new algorithm always computes the 2 values together anyway. Hence it is more efficient to return them as a pair instead of doing the same computation twice for each half of the result. * bindings/js/ScriptCallStackFactory.cpp: (WebCore::createScriptCallStack): (WebCore::createScriptCallStackFromException): * bindings/js/ScriptSourceCode.h: (WebCore::ScriptSourceCode::ScriptSourceCode): LayoutTests: The fix now computes line and column numbers more accurately. As a result, some of the test results need to be re-baselined. Among other fixes, one major source of difference is that the old code was incorrectly computing 0-based column numbers. This has now been fixed to be 1-based. Note: line numbers were always 1-based. Also added a new test: fast/js/line-column-numbers.html, which tests line and column numbers for source code in various configurations. * editing/execCommand/outdent-blockquote-test1-expected.txt: * editing/execCommand/outdent-blockquote-test2-expected.txt: * editing/execCommand/outdent-blockquote-test3-expected.txt: * editing/execCommand/outdent-blockquote-test4-expected.txt: * editing/pasteboard/copy-paste-float-expected.txt: * editing/pasteboard/paste-blockquote-before-blockquote-expected.txt: * editing/pasteboard/paste-double-nested-blockquote-before-blockquote-expected.txt: * fast/dom/Window/window-resize-contents-expected.txt: * fast/events/remove-target-with-shadow-in-drag-expected.txt: * fast/js/line-column-numbers-expected.txt: Added. * fast/js/line-column-numbers.html: Added. * fast/js/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): * fast/js/stack-trace-expected.txt: * inspector/console/console-url-line-column-expected.txt: Canonical link: https://commits.webkit.org/136467@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@152494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-09 16:15:12 +00:00
<!-- Now do it all over with a loaded script file. -->
<script>testId = 0;</script>
<script src="script-tests/line-column-numbers.js"></script>
Get rid of the jsc-test-list by moving all not-jsc-capable tests into js/dom https://bugs.webkit.org/show_bug.cgi?id=121578 Rubber stamped by Geoffrey Garen. Tools: * Scripts/run-layout-jsc: LayoutTests: * fast/regex/cross-frame-callable-expected.txt: Removed. * fast/regex/cross-frame-callable.html: Removed. * fast/regex/dom: Added. * fast/regex/dom/cross-frame-callable-expected.txt: Added. * fast/regex/dom/cross-frame-callable.html: Added. * fast/regex/dom/lastIndex-expected.txt: Added. * fast/regex/dom/lastIndex.html: Added. * fast/regex/dom/non-pattern-characters-expected.txt: Added. * fast/regex/dom/non-pattern-characters.html: Added. * fast/regex/dom/script-tests: Added. * fast/regex/dom/script-tests/cross-frame-callable.js: Added. (doTest): * fast/regex/dom/script-tests/lastIndex.js: Added. * fast/regex/dom/script-tests/non-pattern-characters.js: Added. * fast/regex/dom/script-tests/unicodeCaseInsensitive.js: Added. (shouldBeTrue.ucs2CodePoint): * fast/regex/dom/syntax-errors-expected.txt: Added. * fast/regex/dom/syntax-errors.html: Added. * fast/regex/dom/unicodeCaseInsensitive-expected.txt: Added. * fast/regex/dom/unicodeCaseInsensitive.html: Added. * fast/regex/lastIndex-expected.txt: Removed. * fast/regex/lastIndex.html: Removed. * fast/regex/non-pattern-characters-expected.txt: Removed. * fast/regex/non-pattern-characters.html: Removed. * fast/regex/script-tests/cross-frame-callable.js: Removed. * fast/regex/script-tests/lastIndex.js: Removed. * fast/regex/script-tests/non-pattern-characters.js: Removed. * fast/regex/script-tests/unicodeCaseInsensitive.js: Removed. * fast/regex/syntax-errors-expected.txt: Removed. * fast/regex/syntax-errors.html: Removed. * fast/regex/unicodeCaseInsensitive-expected.txt: Removed. * fast/regex/unicodeCaseInsensitive.html: Removed. * js/JSON-parse-expected.txt: Removed. * js/JSON-parse.html: Removed. * js/JSON-stringify-expected.txt: Removed. * js/JSON-stringify.html: Removed. * js/Object-defineProperty-expected.txt: Removed. * js/Object-defineProperty.html: Removed. * js/Promise-already-fulfilled-expected.txt: Removed. * js/Promise-already-fulfilled.html: Removed. * js/Promise-already-rejected-expected.txt: Removed. * js/Promise-already-rejected.html: Removed. * js/Promise-already-resolved-expected.txt: Removed. * js/Promise-already-resolved.html: Removed. * js/Promise-catch-expected.txt: Removed. * js/Promise-catch-in-workers-expected.txt: Removed. * js/Promise-catch-in-workers.html: Removed. * js/Promise-catch.html: Removed. * js/Promise-chain-expected.txt: Removed. * js/Promise-chain.html: Removed. * js/Promise-exception-expected.txt: Removed. * js/Promise-exception.html: Removed. * js/Promise-expected.txt: Removed. * js/Promise-fulfill-expected.txt: Removed. * js/Promise-fulfill-in-workers-expected.txt: Removed. * js/Promise-fulfill-in-workers.html: Removed. * js/Promise-fulfill.html: Removed. * js/Promise-init-expected.txt: Removed. * js/Promise-init-in-workers-expected.txt: Removed. * js/Promise-init-in-workers.html: Removed. * js/Promise-init.html: Removed. * js/Promise-reject-expected.txt: Removed. * js/Promise-reject-in-workers-expected.txt: Removed. * js/Promise-reject-in-workers.html: Removed. * js/Promise-reject.html: Removed. * js/Promise-resolve-chain-expected.txt: Removed. * js/Promise-resolve-chain.html: Removed. * js/Promise-resolve-expected.txt: Removed. * js/Promise-resolve-in-workers-expected.txt: Removed. * js/Promise-resolve-in-workers.html: Removed. * js/Promise-resolve-with-then-exception-expected.txt: Removed. * js/Promise-resolve-with-then-exception.html: Removed. * js/Promise-resolve-with-then-fulfill-expected.txt: Removed. * js/Promise-resolve-with-then-fulfill.html: Removed. * js/Promise-resolve-with-then-reject-expected.txt: Removed. * js/Promise-resolve-with-then-reject.html: Removed. * js/Promise-resolve.html: Removed. * js/Promise-simple-expected.txt: Removed. * js/Promise-simple-fulfill-expected.txt: Removed. * js/Promise-simple-fulfill-inside-callback-expected.txt: Removed. * js/Promise-simple-fulfill-inside-callback.html: Removed. * js/Promise-simple-fulfill.html: Removed. * js/Promise-simple-in-workers-expected.txt: Removed. * js/Promise-simple-in-workers.html: Removed. * js/Promise-simple.html: Removed. * js/Promise-static-fulfill-expected.txt: Removed. * js/Promise-static-fulfill.html: Removed. * js/Promise-static-reject-expected.txt: Removed. * js/Promise-static-reject.html: Removed. * js/Promise-static-resolve-expected.txt: Removed. * js/Promise-static-resolve.html: Removed. * js/Promise-then-expected.txt: Removed. * js/Promise-then-in-workers-expected.txt: Removed. * js/Promise-then-in-workers.html: Removed. * js/Promise-then-without-callbacks-expected.txt: Removed. * js/Promise-then-without-callbacks-in-workers-expected.txt: Removed. * js/Promise-then-without-callbacks-in-workers.html: Removed. * js/Promise-then-without-callbacks.html: Removed. * js/Promise-then.html: Removed. * js/Promise-types-expected.txt: Removed. * js/Promise-types.html: Removed. * js/Promise.html: Removed. * js/activation-object-function-lifetime-expected.txt: Removed. * js/activation-object-function-lifetime.html: Removed. * js/activation-proto-expected.txt: Removed. * js/activation-proto.html: Removed. * js/add-to-primitive-expected.txt: Removed. * js/add-to-primitive.html: Removed. * js/array-float-delete-expected.txt: Removed. * js/array-float-delete.html: Removed. * js/array-foreach-expected.txt: Removed. * js/array-foreach.html: Removed. * js/array-indexof-expected.txt: Removed. * js/array-indexof.html: Removed. * js/array-join-bug-11524-expected.txt: Removed. * js/array-join-bug-11524.html: Removed. * js/array-map-expected.txt: Removed. * js/array-map.html: Removed. * js/array-prototype-properties-expected.txt: Removed. * js/array-prototype-properties.html: Removed. * js/array-some-expected.txt: Removed. * js/array-some.html: Removed. * js/array-sort-exception-expected.txt: Removed. * js/array-sort-exception.html: Removed. * js/array-tostring-ignore-separator-expected.txt: Removed. * js/array-tostring-ignore-separator.html: Removed. * js/array-with-double-assign-expected.txt: Removed. * js/array-with-double-assign.html: Removed. * js/array-with-double-push-expected.txt: Removed. * js/array-with-double-push.html: Removed. * js/assign-expected.txt: Removed. * js/assign.html: Removed. * js/basic-map-expected.txt: Removed. * js/basic-map.html: Removed. * js/basic-set-expected.txt: Removed. * js/basic-set.html: Removed. * js/basic-weakmap-expected.txt: Removed. * js/basic-weakmap.html: Removed. * js/bitwise-and-on-undefined-expected.txt: Removed. * js/bitwise-and-on-undefined.html: Removed. * js/bom-in-file-retains-correct-offset-expected.txt: Removed. * js/bom-in-file-retains-correct-offset.html: Removed. * js/branch-fold-correctness-expected.txt: Removed. * js/branch-fold-correctness.html: Removed. * js/cached-eval-gc-expected.txt: Removed. * js/cached-eval-gc.html: Removed. * js/call-base-resolution-expected.txt: Removed. * js/call-base-resolution.html: Removed. * js/callback-function-with-handle-event-expected.txt: Removed. * js/callback-function-with-handle-event.html: Removed. * js/codegen-temporaries-multiple-global-blocks-expected.txt: Removed. * js/codegen-temporaries-multiple-global-blocks.html: Removed. * js/concat-large-strings-crash-expected.txt: Removed. * js/concat-large-strings-crash.html: Removed. * js/concat-large-strings-crash2-expected.txt: Removed. * js/concat-large-strings-crash2.html: Removed. * js/console-non-string-values-expected.txt: Removed. * js/console-non-string-values.html: Removed. * js/const-expected.txt: Removed. * js/const.html: Removed. * js/construct-global-object-expected.txt: Removed. * js/construct-global-object.html: Removed. * js/constructor-attributes-expected.txt: Removed. * js/constructor-attributes.html: Removed. * js/constructor-expected.txt: Removed. * js/constructor-length.html: Removed. * js/constructor.html: Removed. * js/create-lots-of-workers-expected.txt: Removed. * js/create-lots-of-workers.html: Removed. * js/cross-frame-bad-time-expected.txt: Removed. * js/cross-frame-bad-time.html: Removed. * js/cross-frame-prototype-expected.txt: Removed. * js/cross-frame-prototype.html: Removed. * js/cross-frame-really-bad-time-expected.txt: Removed. * js/cross-frame-really-bad-time-with-__proto__-expected.txt: Removed. * js/cross-frame-really-bad-time-with-__proto__.html: Removed. * js/cross-frame-really-bad-time.html: Removed. * js/cross-global-object-inline-global-var-expected.txt: Removed. * js/cross-global-object-inline-global-var.html: Removed. * js/custom-constructors-expected.txt: Removed. * js/custom-constructors.html: Removed. * js/cyclic-proto-expected.txt: Removed. * js/cyclic-proto.html: Removed. * js/cyclic-ref-toString-expected.txt: Removed. * js/cyclic-ref-toString.html: Removed. * js/date-DST-time-cusps-expected.txt: Removed. * js/date-DST-time-cusps.html: Removed. * js/date-big-constructor-expected.txt: Removed. * js/date-big-constructor.html: Removed. * js/date-big-setdate-expected.txt: Removed. * js/date-big-setdate.html: Removed. * js/date-big-setmonth-expected.txt: Removed. * js/date-big-setmonth.html: Removed. * js/date-negative-setmonth-expected.txt: Removed. * js/date-negative-setmonth.html: Removed. * js/date-preserve-milliseconds-expected.txt: Removed. * js/date-preserve-milliseconds.html: Removed. * js/deep-recursion-test-expected.txt: Removed. * js/deep-recursion-test.html: Removed. * js/delete-function-parameter-expected.txt: Removed. * js/delete-function-parameter.html: Removed. * js/delete-multiple-global-blocks-expected.txt: Removed. * js/delete-multiple-global-blocks.html: Removed. * js/delete-syntax-expected.txt: Removed. * js/delete-syntax.html: Removed. * js/dfg-arguments-alias-activation-expected.txt: Removed. * js/dfg-arguments-alias-activation.html: Removed. * js/dfg-byte-array-put-expected.txt: Removed. * js/dfg-byte-array-put.html: Removed. * js/dfg-byteOffset-neuter-expected.txt: Removed. * js/dfg-byteOffset-neuter.html: Removed. * js/dfg-compare-final-object-to-final-object-or-other-expected.txt: Removed. * js/dfg-compare-final-object-to-final-object-or-other.html: Removed. * js/dfg-cross-global-object-inline-new-array-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-literal-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-literal-with-variables-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-literal-with-variables.html: Removed. * js/dfg-cross-global-object-inline-new-array-literal.html: Removed. * js/dfg-cross-global-object-inline-new-array-with-elements-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-with-elements.html: Removed. * js/dfg-cross-global-object-inline-new-array-with-size-expected.txt: Removed. * js/dfg-cross-global-object-inline-new-array-with-size.html: Removed. * js/dfg-cross-global-object-inline-new-array.html: Removed. * js/dfg-cross-global-object-new-array-expected.txt: Removed. * js/dfg-cross-global-object-new-array.html: Removed. * js/dfg-custom-getter-expected.txt: Removed. * js/dfg-custom-getter-throw-expected.txt: Removed. * js/dfg-custom-getter-throw-inlined-expected.txt: Removed. * js/dfg-custom-getter-throw-inlined.html: Removed. * js/dfg-custom-getter-throw.html: Removed. * js/dfg-custom-getter.html: Removed. * js/dfg-ensure-array-storage-on-window-expected.txt: Removed. * js/dfg-ensure-array-storage-on-window.html: Removed. * js/dfg-ensure-non-array-array-storage-on-window-expected.txt: Removed. * js/dfg-ensure-non-array-array-storage-on-window.html: Removed. * js/dfg-inline-resolve-expected.txt: Removed. * js/dfg-inline-resolve.html: Removed. * js/dfg-inline-switch-imm-expected.txt: Removed. * js/dfg-inline-switch-imm.html: Removed. * js/dfg-int32-to-double-on-set-local-and-exit-expected.txt: Removed. * js/dfg-int32-to-double-on-set-local-and-exit.html: Removed. * js/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt: Removed. * js/dfg-int32-to-double-on-set-local-and-sometimes-exit.html: Removed. * js/dfg-logical-not-final-object-or-other-expected.txt: Removed. * js/dfg-logical-not-final-object-or-other.html: Removed. * js/dfg-make-rope-side-effects-expected.txt: Removed. * js/dfg-make-rope-side-effects.html: Removed. * js/dfg-negative-array-size-expected.txt: Removed. * js/dfg-negative-array-size.html: Removed. * js/dfg-patchable-get-by-id-after-watchpoint-expected.txt: Removed. * js/dfg-patchable-get-by-id-after-watchpoint.html: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-expected.txt: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.html: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.html: Removed. * js/dfg-peephole-compare-final-object-to-final-object-or-other.html: Removed. * js/dfg-proto-stub-watchpoint-fire-expected.txt: Removed. * js/dfg-proto-stub-watchpoint-fire.html: Removed. * js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Removed. * js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Removed. * js/dfg-put-by-id-allocate-storage-expected.txt: Removed. * js/dfg-put-by-id-allocate-storage-polymorphic-expected.txt: Removed. * js/dfg-put-by-id-allocate-storage-polymorphic.html: Removed. * js/dfg-put-by-id-allocate-storage.html: Removed. * js/dfg-put-by-id-reallocate-storage-expected.txt: Removed. * js/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt: Removed. * js/dfg-put-by-id-reallocate-storage-polymorphic.html: Removed. * js/dfg-put-by-id-reallocate-storage.html: Removed. * js/dfg-put-by-val-setter-then-get-by-val-expected.txt: Removed. * js/dfg-put-by-val-setter-then-get-by-val.html: Removed. * js/dfg-put-to-readonly-property-expected.txt: Removed. * js/dfg-put-to-readonly-property.html: Removed. * js/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt: Removed. * js/dfg-rshift-by-zero-eliminate-valuetoint32.html: Removed. * js/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt: Removed. * js/dfg-store-unexpected-value-into-argument-and-osr-exit.html: Removed. * js/dfg-strcat-over-objects-then-exit-on-it-expected.txt: Removed. * js/dfg-strcat-over-objects-then-exit-on-it.html: Removed. * js/dfg-strict-mode-arguments-get-beyond-length-expected.txt: Removed. * js/dfg-strict-mode-arguments-get-beyond-length.html: Removed. * js/dfg-typed-array-neuter-expected.txt: Removed. * js/dfg-typed-array-neuter.html: Removed. * js/direct-entry-to-function-code-expected.txt: Removed. * js/direct-entry-to-function-code.html: Removed. * js/do-while-expression-value-expected.txt: Removed. * js/do-while-expression-value.html: Removed. * js/do-while-without-semicolon-expected.txt: Removed. * js/do-while-without-semicolon.html: Removed. * js/document-all-between-frames-expected.txt: Removed. * js/document-all-between-frames.html: Removed. * js/document-all-triggers-masquerades-watchpoint-expected.txt: Removed. * js/document-all-triggers-masquerades-watchpoint.html: Removed. * js/dom: Added. * js/dom-static-property-for-in-iteration-expected.txt: Removed. * js/dom-static-property-for-in-iteration.html: Removed. * js/dom/JSON-parse-expected.txt: Added. * js/dom/JSON-parse.html: Added. * js/dom/JSON-stringify-expected.txt: Added. * js/dom/JSON-stringify.html: Added. * js/dom/Object-defineProperty-expected.txt: Added. * js/dom/Object-defineProperty.html: Added. * js/dom/Promise-already-fulfilled-expected.txt: Added. * js/dom/Promise-already-fulfilled.html: Added. * js/dom/Promise-already-rejected-expected.txt: Added. * js/dom/Promise-already-rejected.html: Added. * js/dom/Promise-already-resolved-expected.txt: Added. * js/dom/Promise-already-resolved.html: Added. * js/dom/Promise-catch-expected.txt: Added. * js/dom/Promise-catch-in-workers-expected.txt: Added. * js/dom/Promise-catch-in-workers.html: Added. * js/dom/Promise-catch.html: Added. * js/dom/Promise-chain-expected.txt: Added. * js/dom/Promise-chain.html: Added. * js/dom/Promise-exception-expected.txt: Added. * js/dom/Promise-exception.html: Added. * js/dom/Promise-expected.txt: Added. * js/dom/Promise-fulfill-expected.txt: Added. * js/dom/Promise-fulfill-in-workers-expected.txt: Added. * js/dom/Promise-fulfill-in-workers.html: Added. * js/dom/Promise-fulfill.html: Added. * js/dom/Promise-init-expected.txt: Added. * js/dom/Promise-init-in-workers-expected.txt: Added. * js/dom/Promise-init-in-workers.html: Added. * js/dom/Promise-init.html: Added. * js/dom/Promise-reject-expected.txt: Added. * js/dom/Promise-reject-in-workers-expected.txt: Added. * js/dom/Promise-reject-in-workers.html: Added. * js/dom/Promise-reject.html: Added. * js/dom/Promise-resolve-chain-expected.txt: Added. * js/dom/Promise-resolve-chain.html: Added. * js/dom/Promise-resolve-expected.txt: Added. * js/dom/Promise-resolve-in-workers-expected.txt: Added. * js/dom/Promise-resolve-in-workers.html: Added. * js/dom/Promise-resolve-with-then-exception-expected.txt: Added. * js/dom/Promise-resolve-with-then-exception.html: Added. * js/dom/Promise-resolve-with-then-fulfill-expected.txt: Added. * js/dom/Promise-resolve-with-then-fulfill.html: Added. * js/dom/Promise-resolve-with-then-reject-expected.txt: Added. * js/dom/Promise-resolve-with-then-reject.html: Added. * js/dom/Promise-resolve.html: Added. * js/dom/Promise-simple-expected.txt: Added. * js/dom/Promise-simple-fulfill-expected.txt: Added. * js/dom/Promise-simple-fulfill-inside-callback-expected.txt: Added. * js/dom/Promise-simple-fulfill-inside-callback.html: Added. * js/dom/Promise-simple-fulfill.html: Added. * js/dom/Promise-simple-in-workers-expected.txt: Added. * js/dom/Promise-simple-in-workers.html: Added. * js/dom/Promise-simple.html: Added. * js/dom/Promise-static-fulfill-expected.txt: Added. * js/dom/Promise-static-fulfill.html: Added. * js/dom/Promise-static-reject-expected.txt: Added. * js/dom/Promise-static-reject.html: Added. * js/dom/Promise-static-resolve-expected.txt: Added. * js/dom/Promise-static-resolve.html: Added. * js/dom/Promise-then-expected.txt: Added. * js/dom/Promise-then-in-workers-expected.txt: Added. * js/dom/Promise-then-in-workers.html: Added. * js/dom/Promise-then-without-callbacks-expected.txt: Added. * js/dom/Promise-then-without-callbacks-in-workers-expected.txt: Added. * js/dom/Promise-then-without-callbacks-in-workers.html: Added. * js/dom/Promise-then-without-callbacks.html: Added. * js/dom/Promise-then.html: Added. * js/dom/Promise-types-expected.txt: Added. * js/dom/Promise-types.html: Added. * js/dom/Promise.html: Added. * js/dom/activation-object-function-lifetime-expected.txt: Added. * js/dom/activation-object-function-lifetime.html: Added. * js/dom/activation-proto-expected.txt: Added. * js/dom/activation-proto.html: Added. * js/dom/add-to-primitive-expected.txt: Added. * js/dom/add-to-primitive.html: Added. * js/dom/array-float-delete-expected.txt: Added. * js/dom/array-float-delete.html: Added. * js/dom/array-foreach-expected.txt: Added. * js/dom/array-foreach.html: Added. * js/dom/array-indexof-expected.txt: Added. * js/dom/array-indexof.html: Added. * js/dom/array-join-bug-11524-expected.txt: Added. * js/dom/array-join-bug-11524.html: Added. * js/dom/array-map-expected.txt: Added. * js/dom/array-map.html: Added. * js/dom/array-prototype-properties-expected.txt: Added. * js/dom/array-prototype-properties.html: Added. * js/dom/array-some-expected.txt: Added. * js/dom/array-some.html: Added. * js/dom/array-sort-exception-expected.txt: Added. * js/dom/array-sort-exception.html: Added. * js/dom/array-tostring-ignore-separator-expected.txt: Added. * js/dom/array-tostring-ignore-separator.html: Added. * js/dom/array-with-double-assign-expected.txt: Added. * js/dom/array-with-double-assign.html: Added. * js/dom/array-with-double-push-expected.txt: Added. * js/dom/array-with-double-push.html: Added. * js/dom/assign-expected.txt: Added. * js/dom/assign.html: Added. * js/dom/basic-map-expected.txt: Added. * js/dom/basic-map.html: Added. * js/dom/basic-set-expected.txt: Added. * js/dom/basic-set.html: Added. * js/dom/basic-weakmap-expected.txt: Added. * js/dom/basic-weakmap.html: Added. * js/dom/bitwise-and-on-undefined-expected.txt: Added. * js/dom/bitwise-and-on-undefined.html: Added. * js/dom/bom-in-file-retains-correct-offset-expected.txt: Added. * js/dom/bom-in-file-retains-correct-offset.html: Added. * js/dom/branch-fold-correctness-expected.txt: Added. * js/dom/branch-fold-correctness.html: Added. * js/dom/cached-eval-gc-expected.txt: Added. * js/dom/cached-eval-gc.html: Added. * js/dom/call-base-resolution-expected.txt: Added. * js/dom/call-base-resolution.html: Added. * js/dom/callback-function-with-handle-event-expected.txt: Added. * js/dom/callback-function-with-handle-event.html: Added. * js/dom/codegen-temporaries-multiple-global-blocks-expected.txt: Added. * js/dom/codegen-temporaries-multiple-global-blocks.html: Added. * js/dom/concat-large-strings-crash-expected.txt: Added. * js/dom/concat-large-strings-crash.html: Added. * js/dom/concat-large-strings-crash2-expected.txt: Added. * js/dom/concat-large-strings-crash2.html: Added. * js/dom/console-non-string-values-expected.txt: Added. * js/dom/console-non-string-values.html: Added. * js/dom/const-expected.txt: Added. * js/dom/const.html: Added. * js/dom/construct-global-object-expected.txt: Added. * js/dom/construct-global-object.html: Added. * js/dom/constructor-attributes-expected.txt: Added. * js/dom/constructor-attributes.html: Added. * js/dom/constructor-expected.txt: Added. * js/dom/constructor-length.html: Added. * js/dom/constructor.html: Added. * js/dom/create-lots-of-workers-expected.txt: Added. * js/dom/create-lots-of-workers.html: Added. * js/dom/cross-frame-bad-time-expected.txt: Added. * js/dom/cross-frame-bad-time.html: Added. * js/dom/cross-frame-prototype-expected.txt: Added. * js/dom/cross-frame-prototype.html: Added. * js/dom/cross-frame-really-bad-time-expected.txt: Added. * js/dom/cross-frame-really-bad-time-with-__proto__-expected.txt: Added. * js/dom/cross-frame-really-bad-time-with-__proto__.html: Added. * js/dom/cross-frame-really-bad-time.html: Added. * js/dom/cross-global-object-inline-global-var-expected.txt: Added. * js/dom/cross-global-object-inline-global-var.html: Added. * js/dom/custom-constructors-expected.txt: Added. * js/dom/custom-constructors.html: Added. * js/dom/cyclic-proto-expected.txt: Added. * js/dom/cyclic-proto.html: Added. * js/dom/cyclic-ref-toString-expected.txt: Added. * js/dom/cyclic-ref-toString.html: Added. * js/dom/date-DST-time-cusps-expected.txt: Added. * js/dom/date-DST-time-cusps.html: Added. * js/dom/date-big-constructor-expected.txt: Added. * js/dom/date-big-constructor.html: Added. * js/dom/date-big-setdate-expected.txt: Added. * js/dom/date-big-setdate.html: Added. * js/dom/date-big-setmonth-expected.txt: Added. * js/dom/date-big-setmonth.html: Added. * js/dom/date-negative-setmonth-expected.txt: Added. * js/dom/date-negative-setmonth.html: Added. * js/dom/date-preserve-milliseconds-expected.txt: Added. * js/dom/date-preserve-milliseconds.html: Added. * js/dom/deep-recursion-test-expected.txt: Added. * js/dom/deep-recursion-test.html: Added. * js/dom/delete-function-parameter-expected.txt: Added. * js/dom/delete-function-parameter.html: Added. * js/dom/delete-multiple-global-blocks-expected.txt: Added. * js/dom/delete-multiple-global-blocks.html: Added. * js/dom/delete-syntax-expected.txt: Added. * js/dom/delete-syntax.html: Added. * js/dom/dfg-arguments-alias-activation-expected.txt: Added. * js/dom/dfg-arguments-alias-activation.html: Added. * js/dom/dfg-byte-array-put-expected.txt: Added. * js/dom/dfg-byte-array-put.html: Added. * js/dom/dfg-byteOffset-neuter-expected.txt: Added. * js/dom/dfg-byteOffset-neuter.html: Added. * js/dom/dfg-compare-final-object-to-final-object-or-other-expected.txt: Added. * js/dom/dfg-compare-final-object-to-final-object-or-other.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal-with-variables-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal-with-variables.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-literal.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-elements-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-elements.html: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-size-expected.txt: Added. * js/dom/dfg-cross-global-object-inline-new-array-with-size.html: Added. * js/dom/dfg-cross-global-object-inline-new-array.html: Added. * js/dom/dfg-cross-global-object-new-array-expected.txt: Added. * js/dom/dfg-cross-global-object-new-array.html: Added. * js/dom/dfg-custom-getter-expected.txt: Added. * js/dom/dfg-custom-getter-throw-expected.txt: Added. * js/dom/dfg-custom-getter-throw-inlined-expected.txt: Added. * js/dom/dfg-custom-getter-throw-inlined.html: Added. * js/dom/dfg-custom-getter-throw.html: Added. * js/dom/dfg-custom-getter.html: Added. * js/dom/dfg-ensure-array-storage-on-window-expected.txt: Added. * js/dom/dfg-ensure-array-storage-on-window.html: Added. * js/dom/dfg-ensure-non-array-array-storage-on-window-expected.txt: Added. * js/dom/dfg-ensure-non-array-array-storage-on-window.html: Added. * js/dom/dfg-inline-resolve-expected.txt: Added. * js/dom/dfg-inline-resolve.html: Added. * js/dom/dfg-inline-switch-imm-expected.txt: Added. * js/dom/dfg-inline-switch-imm.html: Added. * js/dom/dfg-int32-to-double-on-set-local-and-exit-expected.txt: Added. * js/dom/dfg-int32-to-double-on-set-local-and-exit.html: Added. * js/dom/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt: Added. * js/dom/dfg-int32-to-double-on-set-local-and-sometimes-exit.html: Added. * js/dom/dfg-logical-not-final-object-or-other-expected.txt: Added. * js/dom/dfg-logical-not-final-object-or-other.html: Added. * js/dom/dfg-make-rope-side-effects-expected.txt: Added. * js/dom/dfg-make-rope-side-effects.html: Added. * js/dom/dfg-negative-array-size-expected.txt: Added. * js/dom/dfg-negative-array-size.html: Added. * js/dom/dfg-patchable-get-by-id-after-watchpoint-expected.txt: Added. * js/dom/dfg-patchable-get-by-id-after-watchpoint.html: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-expected.txt: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.html: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.html: Added. * js/dom/dfg-peephole-compare-final-object-to-final-object-or-other.html: Added. * js/dom/dfg-proto-stub-watchpoint-fire-expected.txt: Added. * js/dom/dfg-proto-stub-watchpoint-fire.html: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Added. * js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Added. * js/dom/dfg-put-by-id-allocate-storage-expected.txt: Added. * js/dom/dfg-put-by-id-allocate-storage-polymorphic-expected.txt: Added. * js/dom/dfg-put-by-id-allocate-storage-polymorphic.html: Added. * js/dom/dfg-put-by-id-allocate-storage.html: Added. * js/dom/dfg-put-by-id-reallocate-storage-expected.txt: Added. * js/dom/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt: Added. * js/dom/dfg-put-by-id-reallocate-storage-polymorphic.html: Added. * js/dom/dfg-put-by-id-reallocate-storage.html: Added. * js/dom/dfg-put-by-val-setter-then-get-by-val-expected.txt: Added. * js/dom/dfg-put-by-val-setter-then-get-by-val.html: Added. * js/dom/dfg-put-to-readonly-property-expected.txt: Added. * js/dom/dfg-put-to-readonly-property.html: Added. * js/dom/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt: Added. * js/dom/dfg-rshift-by-zero-eliminate-valuetoint32.html: Added. * js/dom/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt: Added. * js/dom/dfg-store-unexpected-value-into-argument-and-osr-exit.html: Added. * js/dom/dfg-strcat-over-objects-then-exit-on-it-expected.txt: Added. * js/dom/dfg-strcat-over-objects-then-exit-on-it.html: Added. * js/dom/dfg-strict-mode-arguments-get-beyond-length-expected.txt: Added. * js/dom/dfg-strict-mode-arguments-get-beyond-length.html: Added. * js/dom/dfg-typed-array-neuter-expected.txt: Added. * js/dom/dfg-typed-array-neuter.html: Added. * js/dom/direct-entry-to-function-code-expected.txt: Added. * js/dom/direct-entry-to-function-code.html: Added. * js/dom/do-while-expression-value-expected.txt: Added. * js/dom/do-while-expression-value.html: Added. * js/dom/do-while-without-semicolon-expected.txt: Added. * js/dom/do-while-without-semicolon.html: Added. * js/dom/document-all-between-frames-expected.txt: Added. * js/dom/document-all-between-frames.html: Added. * js/dom/document-all-triggers-masquerades-watchpoint-expected.txt: Added. * js/dom/document-all-triggers-masquerades-watchpoint.html: Added. * js/dom/dom-static-property-for-in-iteration-expected.txt: Added. * js/dom/dom-static-property-for-in-iteration.html: Added. * js/dom/dot-node-base-exception-expected.txt: Added. * js/dom/dot-node-base-exception.html: Added. * js/dom/encode-URI-test-expected.txt: Added. * js/dom/encode-URI-test.html: Added. * js/dom/end-in-string-escape-expected.txt: Added. * js/dom/end-in-string-escape.html: Added. * js/dom/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt: Added. * js/dom/enter-dictionary-indexing-mode-with-blank-indexing-type.html: Added. * js/dom/error-object-write-and-detele-for-stack-property-expected.txt: Added. * js/dom/error-object-write-and-detele-for-stack-property.html: Added. * js/dom/eval-cache-scoped-lookup-expected.txt: Added. * js/dom/eval-cache-scoped-lookup.html: Added. * js/dom/eval-contained-syntax-error-expected.txt: Added. * js/dom/eval-contained-syntax-error.html: Added. * js/dom/eval-cross-window-expected.txt: Added. * js/dom/eval-cross-window.html: Added. * js/dom/eval-keyword-vs-function-expected.txt: Added. * js/dom/eval-keyword-vs-function.html: Added. * js/dom/eval-overriding-expected.txt: Added. * js/dom/eval-overriding.html: Added. * js/dom/exception-codegen-crash-expected.txt: Added. * js/dom/exception-codegen-crash.html: Added. * js/dom/exception-line-number-expected.txt: Added. * js/dom/exception-line-number.html: Added. * js/dom/exception-linenums-in-html-1-expected.txt: Added. * js/dom/exception-linenums-in-html-1.html: Added. * js/dom/exception-linenums-in-html-2-expected.txt: Added. * js/dom/exception-linenums-in-html-2.html: Added. * js/dom/exception-linenums-in-html-3-expected.txt: Added. * js/dom/exception-linenums-in-html-3.html: Added. * js/dom/exception-registerfile-shrink-expected.txt: Added. * js/dom/exception-registerfile-shrink.html: Added. * js/dom/exception-sequencing-binops-expected.txt: Added. * js/dom/exception-sequencing-binops.html: Added. * js/dom/exception-sequencing-binops2-expected.txt: Added. * js/dom/exception-sequencing-binops2.html: Added. * js/dom/exception-sequencing-expected.txt: Added. * js/dom/exception-sequencing.html: Added. * js/dom/exception-thrown-from-equal-expected.txt: Added. * js/dom/exception-thrown-from-equal.html: Added. * js/dom/exception-thrown-from-eval-inside-closure-expected.txt: Added. * js/dom/exception-thrown-from-eval-inside-closure.html: Added. * js/dom/exception-thrown-from-function-with-lazy-activation-expected.txt: Added. * js/dom/exception-thrown-from-function-with-lazy-activation.html: Added. * js/dom/exception-thrown-from-new-expected.txt: Added. * js/dom/exception-thrown-from-new.html: Added. * js/dom/exceptions-thrown-in-callbacks-expected.txt: Added. * js/dom/exceptions-thrown-in-callbacks.html: Added. * js/dom/exec-state-marking-expected.txt: Added. * js/dom/exec-state-marking.html: Added. * js/dom/find-ignoring-case-regress-99753-expected.txt: Added. * js/dom/find-ignoring-case-regress-99753.html: Added. * js/dom/floating-point-truncate-rshift-expected.txt: Added. * js/dom/floating-point-truncate-rshift.html: Added. * js/dom/function-argument-evaluation-before-exception-expected.txt: Added. * js/dom/function-argument-evaluation-before-exception.html: Added. * js/dom/function-argument-evaluation-expected.txt: Added. * js/dom/function-argument-evaluation.html: Added. * js/dom/function-bind-expected.txt: Added. * js/dom/function-bind.html: Added. * js/dom/function-constructor-this-value-expected.txt: Added. * js/dom/function-constructor-this-value.html: Added. * js/dom/function-declarations-expected.txt: Added. * js/dom/function-declarations.html: Added. * js/dom/function-decompilation-operators-expected.txt: Added. * js/dom/function-decompilation-operators.html: Added. * js/dom/function-dot-arguments-and-caller-expected.txt: Added. * js/dom/function-dot-arguments-and-caller.html: Added. * js/dom/function-dot-arguments-identity-expected.txt: Added. * js/dom/function-dot-arguments-identity.html: Added. * js/dom/function-dot-arguments2-expected.txt: Added. * js/dom/function-dot-arguments2.html: Added. * js/dom/function-length-expected.txt: Added. * js/dom/function-length.html: Added. * js/dom/function-name-expected.txt: Added. * js/dom/function-name-is-in-scope-expected.txt: Added. * js/dom/function-name-is-in-scope.html: Added. * js/dom/function-name.html: Added. * js/dom/function-names-expected.txt: Added. * js/dom/function-names.html: Added. * js/dom/function-prototype-expected.txt: Added. * js/dom/function-prototype.html: Added. * js/dom/function-redefinition-expected.txt: Added. * js/dom/function-redefinition.html: Added. * js/dom/garbage-collect-after-string-appends-expected.txt: Added. * js/dom/get-by-pname-only-prototype-properties-expected.txt: Added. * js/dom/get-by-pname-only-prototype-properties.html: Added. * js/dom/getOwnPropertyDescriptor-expected.txt: Added. * js/dom/getOwnPropertyDescriptor.html: Added. * js/dom/global-constructors-attributes-dedicated-worker-expected.txt: Added. * js/dom/global-constructors-attributes-dedicated-worker.html: Added. * js/dom/global-constructors-attributes-expected.txt: Added. * js/dom/global-constructors-attributes-shared-worker-expected.txt: Added. * js/dom/global-constructors-attributes-shared-worker.html: Added. * js/dom/global-constructors-attributes.html: Added. * js/dom/global-constructors-deletable-expected.txt: Added. * js/dom/global-constructors-deletable.html: Added. * js/dom/global-function-resolve-expected.txt: Added. * js/dom/global-function-resolve.html: Added. * js/dom/global-recursion-on-full-stack-expected.txt: Added. * js/dom/global-recursion-on-full-stack.html: Added. * js/dom/global-var-limit-expected.txt: Added. * js/dom/global-var-limit.html: Added. * js/dom/immediate-constant-instead-of-cell-expected.txt: Added. * js/dom/immediate-constant-instead-of-cell.html: Added. * js/dom/implicit-call-with-global-reentry-expected.txt: Added. * js/dom/implicit-call-with-global-reentry.html: Added. * js/dom/implicit-global-to-global-reentry-expected.txt: Added. * js/dom/implicit-global-to-global-reentry.html: Added. * js/dom/imul-expected.txt: Added. * js/dom/imul.html: Added. * js/dom/inc-bracket-assign-subscript-expected.txt: Added. * js/dom/inc-bracket-assign-subscript.html: Added. * js/dom/inc-const-valueOf-expected.txt: Added. * js/dom/inc-const-valueOf.html: Added. * js/dom/indexed-setter-on-global-object-expected.txt: Added. * js/dom/indexed-setter-on-global-object.html: Added. * js/dom/inline-arguments-tear-off-expected.txt: Added. * js/dom/inline-arguments-tear-off.html: Added. * js/dom/instanceof-XMLHttpRequest-expected.txt: Added. * js/dom/instanceof-XMLHttpRequest.html: Added. * js/dom/invalid-syntax-for-function-expected.txt: Added. * js/dom/invalid-syntax-for-function.html: Added. * js/dom/jit-set-profiling-access-type-only-for-get-by-id-self-expected.txt: Added. * js/dom/jit-set-profiling-access-type-only-for-get-by-id-self.html: Added. * js/dom/js-constructors-use-correct-global-expected.txt: Added. * js/dom/js-constructors-use-correct-global.html: Added. * js/dom/js-correct-exception-handler-expected.txt: Added. * js/dom/js-correct-exception-handler.html: Added. * js/dom/lastModified-expected.txt: Added. * js/dom/lastModified.html: Added. * js/dom/lazy-create-arguments-from-get-by-val-expected.txt: Added. * js/dom/lazy-create-arguments-from-get-by-val.html: Added. * js/dom/lexical-lookup-in-function-constructor-expected.txt: Added. * js/dom/lexical-lookup-in-function-constructor.html: Added. * js/dom/line-column-numbers-expected.txt: Added. * js/dom/line-column-numbers.html: Added. * js/dom/method-check-expected.txt: Added. * js/dom/method-check.html: Added. * js/dom/missing-style-end-tag-js-expected.txt: Added. * js/dom/missing-style-end-tag-js.html: Added. * js/dom/missing-title-end-tag-js-expected.txt: Added. * js/dom/missing-title-end-tag-js.html: Added. * js/dom/native-error-prototype-expected.txt: Added. * js/dom/native-error-prototype.html: Added. * js/dom/navigator-language-expected.txt: Added. * js/dom/navigator-language.html: Added. * js/dom/navigator-plugins-crash-expected.txt: Added. * js/dom/navigator-plugins-crash.html: Added. * js/dom/negate-overflow-expected.txt: Added. * js/dom/negate-overflow.html: Added. * js/dom/neq-null-crash-expected.txt: Added. * js/dom/neq-null-crash.html: Added. * js/dom/nested-function-scope-expected.txt: Added. * js/dom/nested-function-scope.html: Added. * js/dom/nested-object-gc-expected.txt: Added. * js/dom/nested-object-gc.html: Added. * js/dom/non-object-proto-expected.txt: Added. * js/dom/non-object-proto.html: Added. * js/dom/normal-character-escapes-in-string-literals-expected.txt: Added. * js/dom/normal-character-escapes-in-string-literals.html: Added. * js/dom/not-a-constructor-to-string-expected.txt: Added. * js/dom/not-a-constructor-to-string.html: Added. * js/dom/not-a-function-to-string-expected.txt: Added. * js/dom/not-a-function-to-string.html: Added. * js/dom/null-char-in-string-expected.txt: Added. * js/dom/null-char-in-string.html: Added. * js/dom/number-tofixed-expected.txt: Added. * js/dom/number-tofixed.html: Added. * js/dom/number-toprecision-expected.txt: Added. * js/dom/number-toprecision.html: Added. * js/dom/object-extra-comma-expected.txt: Added. * js/dom/object-extra-comma.html: Added. * js/dom/object-prototype-constructor-expected.txt: Added. * js/dom/object-prototype-constructor.html: Added. * js/dom/object-prototype-properties-expected.txt: Added. * js/dom/object-prototype-properties.html: Added. * js/dom/object-prototype-toLocaleString-expected.txt: Added. * js/dom/object-prototype-toLocaleString.html: Added. * js/dom/parse-error-external-script-in-eval-expected.txt: Added. * js/dom/parse-error-external-script-in-eval.html: Added. * js/dom/parse-error-external-script-in-new-Function-expected.txt: Added. * js/dom/parse-error-external-script-in-new-Function.html: Added. * js/dom/post-inc-assign-overwrites-expected.txt: Added. * js/dom/post-inc-assign-overwrites.html: Added. * js/dom/post-message-numeric-property-expected.txt: Added. * js/dom/post-message-numeric-property.html: Added. * js/dom/postfix-syntax-expected.txt: Added. * js/dom/postfix-syntax.html: Added. * js/dom/prefix-syntax-expected.txt: Added. * js/dom/prefix-syntax.html: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Added. * js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Added. * js/dom/put-direct-index-beyond-vector-length-resize-expected.txt: Added. * js/dom/put-direct-index-beyond-vector-length-resize.html: Added. * js/dom/put-to-base-global-checked-expected.txt: Added. * js/dom/put-to-base-global-checked.html: Added. * js/dom/random-array-gc-stress-expected.txt: Added. * js/dom/random-array-gc-stress.html: Added. * js/dom/recursion-limit-equal-expected.txt: Added. * js/dom/recursion-limit-equal.html: Added. * js/dom/regexp-bol-expected.txt: Added. * js/dom/regexp-bol-with-multiline-expected.txt: Added. * js/dom/regexp-bol-with-multiline.html: Added. * js/dom/regexp-bol.html: Added. * js/dom/regexp-caching-expected.txt: Added. * js/dom/regexp-caching.html: Added. * js/dom/regexp-charclass-crash-expected.txt: Added. * js/dom/regexp-charclass-crash.html: Added. * js/dom/regexp-extended-characters-crash-expected.txt: Added. * js/dom/regexp-extended-characters-crash.html: Added. * js/dom/regexp-lastindex-expected.txt: Added. * js/dom/regexp-lastindex.html: Added. * js/dom/regexp-look-ahead-empty-expected.txt: Added. * js/dom/regexp-look-ahead-empty.html: Added. * js/dom/regexp-look-ahead-expected.txt: Added. * js/dom/regexp-look-ahead.html: Added. * js/dom/regexp-match-reify-before-putbyval-expected.txt: Added. * js/dom/regexp-match-reify-before-putbyval.html: Added. * js/dom/regexp-non-capturing-groups-expected.txt: Added. * js/dom/regexp-non-capturing-groups.html: Added. * js/dom/regexp-non-greedy-parentheses-expected.txt: Added. * js/dom/regexp-non-greedy-parentheses.html: Added. * js/dom/regexp-overflow-expected.txt: Added. * js/dom/regexp-overflow.html: Added. * js/dom/regexp-range-out-of-order-expected.txt: Added. * js/dom/regexp-range-out-of-order.html: Added. * js/dom/regexp-ranges-and-escaped-hyphens-expected.txt: Added. * js/dom/regexp-ranges-and-escaped-hyphens.html: Added. * js/dom/regexp-stack-overflow-expected.txt: Added. * js/dom/regexp-stack-overflow.html: Added. * js/dom/regexp-test-null-string-expected.txt: Added. * js/dom/regexp-test-null-string.html: Added. * js/dom/regexp-unicode-handling-expected.txt: Added. * js/dom/regexp-unicode-handling.html: Added. * js/dom/regexp-unicode-overflow-expected.txt: Added. * js/dom/regexp-unicode-overflow.html: Added. * js/dom/removing-Cf-characters-expected.txt: Added. * js/dom/removing-Cf-characters.html: Added. * js/dom/reserved-words-as-property-expected.txt: Added. * js/dom/reserved-words-as-property.html: Added. * js/dom/same-origin-subframe-about-blank-expected.txt: Added. * js/dom/same-origin-subframe-about-blank.html: Added. * js/dom/script-line-number-expected.txt: Added. * js/dom/script-line-number.html: Added. * js/dom/script-tests: Added. * js/dom/script-tests/Object-defineProperty.js: Added. (createUnconfigurableProperty): (getter): (getter1): (setter): (setter1): (get shouldBeTrue): (testObject.): (testObject.set get anObj): (testObject): * js/dom/script-tests/activation-proto.js: Added. * js/dom/script-tests/array-float-delete.js: Added. * js/dom/script-tests/array-join-bug-11524.js: Added. (customObject.valueOf): * js/dom/script-tests/array-prototype-properties.js: Added. * js/dom/script-tests/array-sort-exception.js: Copied from LayoutTests/js/script-tests/array-sort-exception.js. * js/dom/script-tests/array-tostring-ignore-separator.js: Added. * js/dom/script-tests/array-with-double-assign.js: Added. (foo): * js/dom/script-tests/array-with-double-push.js: Added. (foo): * js/dom/script-tests/assign.js: Added. * js/dom/script-tests/basic-map.js: Added. (set shouldBe): (set var): * js/dom/script-tests/basic-set.js: Added. (set new): (otherString.string_appeared_here.set add): (try.set forEach): (set forEach): (set gc): * js/dom/script-tests/basic-weakmap.js: Added. * js/dom/script-tests/cached-eval-gc.js: Added. (gc): (doTest): * js/dom/script-tests/constructor-attributes.js: Added. (canEnum): (checkConstructor): (declaredFunction): * js/dom/script-tests/constructor.js: Added. * js/dom/script-tests/cross-frame-bad-time.js: Added. (foo): * js/dom/script-tests/cross-frame-really-bad-time-with-__proto__.js: Added. (foo): (evil): (bar): (done): * js/dom/script-tests/cross-frame-really-bad-time.js: Added. (Cons): (foo): (evil): (bar): (done): * js/dom/script-tests/cross-global-object-inline-global-var.js: Added. (foo): (done): (doit): * js/dom/script-tests/custom-constructors.js: Added. * js/dom/script-tests/cyclic-proto.js: Added. * js/dom/script-tests/cyclic-ref-toString.js: Added. * js/dom/script-tests/date-DST-time-cusps.js: Added. * js/dom/script-tests/date-big-constructor.js: Added. * js/dom/script-tests/date-big-setdate.js: Added. * js/dom/script-tests/date-big-setmonth.js: Added. * js/dom/script-tests/date-negative-setmonth.js: Added. * js/dom/script-tests/date-preserve-milliseconds.js: Added. * js/dom/script-tests/delete-syntax.js: Added. * js/dom/script-tests/dfg-byte-array-put.js: Added. (doPut): (doGet): * js/dom/script-tests/dfg-byteOffset-neuter.js: Added. (foo): * js/dom/script-tests/dfg-compare-final-object-to-final-object-or-other.js: Added. (foo): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-literal-with-variables.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-literal.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-with-elements.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array-with-size.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-inline-new-array.js: Added. (foo): (done): (doit): * js/dom/script-tests/dfg-cross-global-object-new-array.js: Added. (foo): (runTest): (doit): * js/dom/script-tests/dfg-custom-getter-throw-inlined.js: Added. (foo): (baz): (bar): * js/dom/script-tests/dfg-custom-getter-throw.js: Added. (foo): (bar): * js/dom/script-tests/dfg-custom-getter.js: Added. (foo): * js/dom/script-tests/dfg-ensure-array-storage-on-window.js: Added. (foo): (while): * js/dom/script-tests/dfg-ensure-non-array-array-storage-on-window.js: Added. (foo): (bar): (.shouldBe): * js/dom/script-tests/dfg-inline-switch-imm.js: Added. (foo): (bar): * js/dom/script-tests/dfg-int32-to-double-on-set-local-and-exit.js: Added. (checkpoint): (func1): (func2): (func3): (test): * js/dom/script-tests/dfg-int32-to-double-on-set-local-and-sometimes-exit.js: Added. (checkpoint): (func1): (func2): (func3): (test): * js/dom/script-tests/dfg-logical-not-final-object-or-other.js: Added. (foo): * js/dom/script-tests/dfg-make-rope-side-effects.js: Added. (f): (k.valueOf): (k.toString): * js/dom/script-tests/dfg-negative-array-size.js: Added. (foo): * js/dom/script-tests/dfg-patchable-get-by-id-after-watchpoint.js: Added. (foo): (O): (O.prototype.f): (P1): (P2): * js/dom/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js: Added. (foo): * js/dom/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js: Added. (foo): * js/dom/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other.js: Added. (foo): * js/dom/script-tests/dfg-proto-stub-watchpoint-fire.js: Added. (A): (B): (foo): * js/dom/script-tests/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Added. (f): * js/dom/script-tests/dfg-put-by-id-allocate-storage-polymorphic.js: Added. (foo): * js/dom/script-tests/dfg-put-by-id-allocate-storage.js: Added. (foo): * js/dom/script-tests/dfg-put-by-id-reallocate-storage-polymorphic.js: Added. (foo): * js/dom/script-tests/dfg-put-by-id-reallocate-storage.js: Added. (foo): * js/dom/script-tests/dfg-put-by-val-setter-then-get-by-val.js: Added. (foo): (for): * js/dom/script-tests/dfg-put-to-readonly-property.js: Added. (foo): (bar): * js/dom/script-tests/dfg-rshift-by-zero-eliminate-valuetoint32.js: Added. (f): * js/dom/script-tests/dfg-store-unexpected-value-into-argument-and-osr-exit.js: Added. (foo): * js/dom/script-tests/dfg-strcat-over-objects-then-exit-on-it.js: Added. (foo): (bar): (x): * js/dom/script-tests/dfg-strict-mode-arguments-get-beyond-length.js: Added. (foo): (bar): * js/dom/script-tests/dfg-typed-array-neuter.js: Added. (foo): (bar): * js/dom/script-tests/document-all-triggers-masquerades-watchpoint.js: Added. (f): * js/dom/script-tests/dot-node-base-exception.js: Added. * js/dom/script-tests/end-in-string-escape.js: Added. * js/dom/script-tests/enter-dictionary-indexing-mode-with-blank-indexing-type.js: Added. * js/dom/script-tests/eval-cache-scoped-lookup.js: Added. (first): (a.string_appeared_here.second): (third): (fifth): (sixth): (seventh): (eighth): (nineth): (tenth): (eleventh): * js/dom/script-tests/eval-contained-syntax-error.js: Added. * js/dom/script-tests/exception-line-number.js: Added. (foo): (window.onerror): * js/dom/script-tests/exception-registerfile-shrink.js: Added. * js/dom/script-tests/exception-sequencing-binops.js: Copied from LayoutTests/js/exception-sequencing-binops.js. * js/dom/script-tests/function-bind.js: Added. (F): * js/dom/script-tests/function-name.js: Added. * js/dom/script-tests/function-names.js: Added. (checkConstructorName): * js/dom/script-tests/get-by-pname-only-prototype-properties.js: Added. (foo): * js/dom/script-tests/global-constructors-attributes.js: Added. (.self.postMessage): (.self.onconnect.self.postMessage): (.self.onconnect): (classNameForObject): (constructorPropertiesOnGlobalObject): * js/dom/script-tests/global-constructors-deletable.js: Added. * js/dom/script-tests/global-function-resolve.js: Added. * js/dom/script-tests/immediate-constant-instead-of-cell.js: Added. * js/dom/script-tests/implicit-call-with-global-reentry.js: Added. (testGlobalCode): (testObject.get getterTest): (testObject.set setterTest): (testObject.toString): (testObject.valueOf): (testObject.toStringTest): (testObject.valueOfTest): * js/dom/script-tests/imul.js: Added. (testIMul): * js/dom/script-tests/inc-bracket-assign-subscript.js: Added. (testPreIncBracketAccessWithAssignSubscript): (testPostIncBracketAccessWithAssignSubscript): * js/dom/script-tests/inc-const-valueOf.js: Added. (testPostIncConstVarWithIgnoredResult.const.a.valueOf): (testPostIncConstVarWithIgnoredResult): (testPreIncConstVarWithIgnoredResult.const.a.valueOf): (testPreIncConstVarWithIgnoredResult): (testPreIncConstVarWithAssign.const.a.valueOf): (testPreIncConstVarWithAssign): * js/dom/script-tests/indexed-setter-on-global-object.js: Added. * js/dom/script-tests/inline-arguments-tear-off.js: Added. (g): (f): (doStuff): * js/dom/script-tests/instanceof-XMLHttpRequest.js: Added. * js/dom/script-tests/jit-set-profiling-access-type-only-for-get-by-id-self.js: Added. (L_): (Q2): (f): * js/dom/script-tests/js-correct-exception-handler.js: Added. (throwEventually): (f.g): (f): (test): * js/dom/script-tests/lastModified.js: Added. * js/dom/script-tests/lazy-create-arguments-from-get-by-val.js: Added. (foo): * js/dom/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): (try.testObj19b.toString): (try.testObj19b.run): (try.test20b.f): (try.test20b): (try.toFuzz21b): (try.toFuzz22b): * js/dom/script-tests/method-check.js: Added. (func2): (func.String.prototype.a): (func.String.prototype.b): (func): (addOne): (addOneHundred): (totalizer.makeCall): * js/dom/script-tests/native-error-prototype.js: Added. * js/dom/script-tests/neq-null-crash.js: Added. (crush): * js/dom/script-tests/nested-object-gc.js: Added. * js/dom/script-tests/non-object-proto.js: Added. * js/dom/script-tests/normal-character-escapes-in-string-literals.js: Added. (test): (testOther): * js/dom/script-tests/null-char-in-string.js: Added. * js/dom/script-tests/number-tofixed.js: Added. * js/dom/script-tests/number-toprecision.js: Added. * js/dom/script-tests/object-extra-comma.js: Added. * js/dom/script-tests/object-prototype-constructor.js: Added. (Foo.Bar): (F): * js/dom/script-tests/object-prototype-properties.js: Added. * js/dom/script-tests/object-prototype-toLocaleString.js: Added. (o.toLocaleString): (String.prototype.toString): * js/dom/script-tests/post-inc-assign-overwrites.js: Added. (postIncDotAssignToBase): (postIncBracketAssignToBase): (postIncBracketAssignToSubscript): * js/dom/script-tests/post-message-numeric-property.js: Added. (window.onmessage): * js/dom/script-tests/postfix-syntax.js: Added. * js/dom/script-tests/prefix-syntax.js: Added. * js/dom/script-tests/prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Added. (f): * js/dom/script-tests/put-direct-index-beyond-vector-length-resize.js: Added. * js/dom/script-tests/put-to-base-global-checked.js: Added. (globalF): (warmup): (foo): * js/dom/script-tests/random-array-gc-stress.js: Added. (getRandomIndex): (test): * js/dom/script-tests/recursion-limit-equal.js: Added. (test): * js/dom/script-tests/regexp-bol-with-multiline.js: Added. * js/dom/script-tests/regexp-bol.js: Added. * js/dom/script-tests/regexp-extended-characters-crash.js: Added. * js/dom/script-tests/regexp-lastindex.js: Added. * js/dom/script-tests/regexp-look-ahead-empty.js: Added. * js/dom/script-tests/regexp-look-ahead.js: Added. * js/dom/script-tests/regexp-match-reify-before-putbyval.js: Added. * js/dom/script-tests/regexp-non-capturing-groups.js: Added. * js/dom/script-tests/regexp-non-greedy-parentheses.js: Added. * js/dom/script-tests/regexp-overflow.js: Added. * js/dom/script-tests/regexp-range-out-of-order.js: Added. * js/dom/script-tests/regexp-ranges-and-escaped-hyphens.js: Added. * js/dom/script-tests/regexp-stack-overflow.js: Added. * js/dom/script-tests/regexp-unicode-handling.js: Added. (Gn): * js/dom/script-tests/regexp-unicode-overflow.js: Added. (createRegExs): * js/dom/script-tests/removing-Cf-characters.js: Added. * js/dom/script-tests/reserved-words-as-property.js: Added. (testWordEvalAndFunction): (testWord): (testWordStrictAndNonStrict): * js/dom/script-tests/select-options-add.js: Added. * js/dom/script-tests/stack-at-creation-for-error-objects.js: Added. (checkStack): * js/dom/script-tests/stack-trace.js: Added. (printStack): (hostThrower): (callbacker): (outer): (inner): (evaler): (normalOuter): (normalInner): (scripterInner): (scripterOuter): (selfRecursive1): (selfRecursive2): (selfRecursive3): (throwError): (object.get getter1.o.valueOf): (object.get getter1): (object.get getter2): (object.get getter3.o2.valueOf): (object.get getter3): (object.nonInlineable.callCount): (object.nonInlineable): (object.inlineable): (yetAnotherInlinedCall): (makeInlinableCall): (.try.g): (h): (mapTest): (mapTestDriver): (dfgFunction): (try.f): (callNonCallable): (dfgTest): (inlineableThrow): (dfgThing.get willThrow): (dfgThing.get willThrowEventually): (dfgThing.willThrowFunc): (dfgThing.willThrowEventuallyFunc): (dfg1): (dfg2): (dfg3): (dfg4): (dfg5): (dfg6): (dfg7): (dfg8): (dfg9): (dfga): (dfgb): (dfgc): * js/dom/script-tests/strict-readonly-statics.js: Added. (testWindowUndefined): (testNumberMAX_VALUE): * js/dom/script-tests/string-match.js: Added. (testMatch): * js/dom/script-tests/string-prototype-properties.js: Added. (Number.prototype.toString): * js/dom/script-tests/string-replace-2.js: Added. (testReplace): (replacer): * js/dom/script-tests/string-replace-3.js: Added. * js/dom/script-tests/string-replacement-outofmemory.js: Added. (createStringWithRepeatedChar): * js/dom/script-tests/string-split-conformance.js: Added. * js/dom/script-tests/string-split-double-empty.js: Added. * js/dom/script-tests/string-split-ignore-case.js: Added. * js/dom/script-tests/switch-behaviour.js: Added. (characterSwitch): (sparseCharacterSwitch): * js/dom/script-tests/throw-exception-in-global-setter.js: Added. (callSetter): * js/dom/script-tests/toInt32UInt32.js: Added. * js/dom/script-tests/toString-exception.js: Added. * js/dom/script-tests/toString-overrides.js: Added. (Number.prototype.toString): (Number.prototype.toLocaleString): (RegExp.prototype.toString): (RegExp.prototype.toLocaleString): * js/dom/script-tests/toString-stack-overflow.js: Added. * js/dom/script-tests/transition-cache-dictionary-crash.js: Added. (f): * js/dom/script-tests/typed-array-access.js: Added. (bitsToString): (bitsToValue): (valueToBits): (roundTrip): * js/dom/script-tests/typed-array-set-different-types.js: Added. (MyRandom): (.reference): (.usingConstruct): * js/dom/script-tests/typeof-syntax.js: Added. * js/dom/script-tests/unshift-multi.js: Added. (unshift1): (unshift2): (unshift5): * js/dom/script-tests/vardecl-preserve-arguments.js: Added. (argumentsLength): (argumentsLengthInnerBlock): (argumentsLengthInnerBlock2): (argumentsLengthTryCatch): (argumentsLengthWith): (argumentsLengthOverride): (argumentsLengthOverrideInnerBlock): (argumentsLengthOverrideInnerBlock2): (argumentsLengthOverrideInnerBlock3): (argumentsTearOff1): (argumentsTearOff2): (argumentsTearOff3): * js/dom/script-tests/webcore-string-comparison.js: Added. * js/dom/script-tests/with-scope-gc.js: Added. (gc): * js/dom/select-options-add-expected.txt: Added. * js/dom/select-options-add.html: Added. * js/dom/select-options-remove-expected.txt: Added. * js/dom/select-options-remove-gc-expected.txt: Added. * js/dom/select-options-remove-gc.html: Added. * js/dom/select-options-remove.html: Added. * js/dom/stack-at-creation-for-error-objects-expected.txt: Added. * js/dom/stack-at-creation-for-error-objects.html: Added. * js/dom/stack-trace-expected.txt: Added. * js/dom/stack-trace.html: Added. * js/dom/strict-readonly-statics-expected.txt: Added. * js/dom/strict-readonly-statics.html: Added. * js/dom/string-anchor-expected.txt: Added. * js/dom/string-anchor.html: Added. * js/dom/string-concatenate-outofmemory-expected.txt: Added. * js/dom/string-fontcolor-expected.txt: Added. * js/dom/string-fontcolor.html: Added. * js/dom/string-fontsize-expected.txt: Added. * js/dom/string-fontsize.html: Added. * js/dom/string-link-expected.txt: Added. * js/dom/string-link.html: Added. * js/dom/string-match-expected.txt: Added. * js/dom/string-match.html: Added. * js/dom/string-prototype-properties-expected.txt: Added. * js/dom/string-prototype-properties.html: Added. * js/dom/string-replace-2-expected.txt: Added. * js/dom/string-replace-2.html: Added. * js/dom/string-replace-3-expected.txt: Added. * js/dom/string-replace-3.html: Added. * js/dom/string-replace-exception-crash-expected.txt: Added. * js/dom/string-replace-exception-crash.html: Added. * js/dom/string-replacement-outofmemory-expected.txt: Added. * js/dom/string-replacement-outofmemory.html: Added. * js/dom/string-split-conformance-expected.txt: Added. * js/dom/string-split-conformance.html: Added. * js/dom/string-split-double-empty-expected.txt: Added. * js/dom/string-split-double-empty.html: Added. * js/dom/string-split-ignore-case-expected.txt: Added. * js/dom/string-split-ignore-case.html: Added. * js/dom/switch-behaviour-expected.txt: Added. * js/dom/switch-behaviour.html: Added. * js/dom/text-field-resize-expected.txt: Added. * js/dom/text-field-resize.html: Added. * js/dom/throw-exception-in-global-setter-expected.txt: Added. * js/dom/throw-exception-in-global-setter.html: Added. * js/dom/throw-from-array-sort-expected.txt: Added. * js/dom/throw-from-array-sort.html: Added. * js/dom/toInt32UInt32-expected.txt: Added. * js/dom/toInt32UInt32.html: Added. * js/dom/toString-and-valueOf-override-expected.txt: Added. * js/dom/toString-and-valueOf-override.html: Added. * js/dom/toString-dontEnum-expected.txt: Added. * js/dom/toString-dontEnum.html: Added. * js/dom/toString-exception-expected.txt: Added. * js/dom/toString-exception.html: Added. * js/dom/toString-number-expected.txt: Added. * js/dom/toString-number.html: Added. * js/dom/toString-overrides-expected.txt: Added. * js/dom/toString-overrides.html: Added. * js/dom/toString-stack-overflow-expected.txt: Added. * js/dom/toString-stack-overflow.html: Added. * js/dom/toString-try-else-expected.txt: Added. * js/dom/toString-try-else.html: Added. * js/dom/transition-cache-dictionary-crash-expected.txt: Added. * js/dom/transition-cache-dictionary-crash.html: Added. * js/dom/trivial-functions-expected.txt: Added. * js/dom/trivial-functions.html: Added. * js/dom/try-catch-crash-expected.txt: Added. * js/dom/try-catch-crash.html: Added. * js/dom/typed-array-access-expected.txt: Added. * js/dom/typed-array-access.html: Added. * js/dom/typed-array-set-different-types-expected.txt: Added. * js/dom/typed-array-set-different-types.html: Added. * js/dom/typeof-syntax-expected.txt: Added. * js/dom/typeof-syntax.html: Added. * js/dom/uncaught-exception-line-number-expected.txt: Added. * js/dom/uncaught-exception-line-number.html: Added. * js/dom/unshift-multi-expected.txt: Added. * js/dom/unshift-multi.html: Added. * js/dom/var-declarations-expected.txt: Added. * js/dom/var-declarations-shadowing-expected.txt: Added. * js/dom/var-declarations-shadowing.html: Added. * js/dom/var-declarations.html: Added. * js/dom/vardecl-preserve-arguments-expected.txt: Added. * js/dom/vardecl-preserve-arguments.html: Added. * js/dom/vardecl-preserve-parameters-expected.txt: Added. * js/dom/vardecl-preserve-parameters.html: Added. * js/dom/vardecl-preserve-vardecl-expected.txt: Added. * js/dom/vardecl-preserve-vardecl.html: Added. * js/dom/webcore-string-comparison-expected.txt: Added. * js/dom/webcore-string-comparison.html: Added. * js/dom/webidl-type-mapping-expected.txt: Added. * js/dom/webidl-type-mapping.html: Added. * js/dom/while-expression-value-expected.txt: Added. * js/dom/while-expression-value.html: Added. * js/dom/window-location-href-file-urls-expected.txt: Added. * js/dom/window-location-href-file-urls.html: Added. * js/dom/with-scope-gc-expected.txt: Added. * js/dom/with-scope-gc.html: Added. * js/dot-node-base-exception-expected.txt: Removed. * js/dot-node-base-exception.html: Removed. * js/encode-URI-test-expected.txt: Removed. * js/encode-URI-test.html: Removed. * js/end-in-string-escape-expected.txt: Removed. * js/end-in-string-escape.html: Removed. * js/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt: Removed. * js/enter-dictionary-indexing-mode-with-blank-indexing-type.html: Removed. * js/error-object-write-and-detele-for-stack-property-expected.txt: Removed. * js/error-object-write-and-detele-for-stack-property.html: Removed. * js/eval-cache-scoped-lookup-expected.txt: Removed. * js/eval-cache-scoped-lookup.html: Removed. * js/eval-contained-syntax-error-expected.txt: Removed. * js/eval-contained-syntax-error.html: Removed. * js/eval-cross-window-expected.txt: Removed. * js/eval-cross-window.html: Removed. * js/eval-keyword-vs-function-expected.txt: Removed. * js/eval-keyword-vs-function.html: Removed. * js/eval-overriding-expected.txt: Removed. * js/eval-overriding.html: Removed. * js/exception-codegen-crash-expected.txt: Removed. * js/exception-codegen-crash.html: Removed. * js/exception-line-number-expected.txt: Removed. * js/exception-line-number.html: Removed. * js/exception-linenums-in-html-1-expected.txt: Removed. * js/exception-linenums-in-html-1.html: Removed. * js/exception-linenums-in-html-2-expected.txt: Removed. * js/exception-linenums-in-html-2.html: Removed. * js/exception-linenums-in-html-3-expected.txt: Removed. * js/exception-linenums-in-html-3.html: Removed. * js/exception-registerfile-shrink-expected.txt: Removed. * js/exception-registerfile-shrink.html: Removed. * js/exception-sequencing-binops-expected.txt: Removed. * js/exception-sequencing-binops.html: Removed. * js/exception-sequencing-binops.js: Removed. * js/exception-sequencing-binops2-expected.txt: Removed. * js/exception-sequencing-binops2.html: Removed. * js/exception-sequencing-expected.txt: Removed. * js/exception-sequencing.html: Removed. * js/exception-thrown-from-equal-expected.txt: Removed. * js/exception-thrown-from-equal.html: Removed. * js/exception-thrown-from-eval-inside-closure-expected.txt: Removed. * js/exception-thrown-from-eval-inside-closure.html: Removed. * js/exception-thrown-from-function-with-lazy-activation-expected.txt: Removed. * js/exception-thrown-from-function-with-lazy-activation.html: Removed. * js/exception-thrown-from-new-expected.txt: Removed. * js/exception-thrown-from-new.html: Removed. * js/exceptions-thrown-in-callbacks-expected.txt: Removed. * js/exceptions-thrown-in-callbacks.html: Removed. * js/exec-state-marking-expected.txt: Removed. * js/exec-state-marking.html: Removed. * js/find-ignoring-case-regress-99753-expected.txt: Removed. * js/find-ignoring-case-regress-99753.html: Removed. * js/floating-point-truncate-rshift-expected.txt: Removed. * js/floating-point-truncate-rshift.html: Removed. * js/function-argument-evaluation-before-exception-expected.txt: Removed. * js/function-argument-evaluation-before-exception.html: Removed. * js/function-argument-evaluation-expected.txt: Removed. * js/function-argument-evaluation.html: Removed. * js/function-bind-expected.txt: Removed. * js/function-bind.html: Removed. * js/function-constructor-this-value-expected.txt: Removed. * js/function-constructor-this-value.html: Removed. * js/function-declarations-expected.txt: Removed. * js/function-declarations.html: Removed. * js/function-decompilation-operators-expected.txt: Removed. * js/function-decompilation-operators.html: Removed. * js/function-dot-arguments-and-caller-expected.txt: Removed. * js/function-dot-arguments-and-caller.html: Removed. * js/function-dot-arguments-identity-expected.txt: Removed. * js/function-dot-arguments-identity.html: Removed. * js/function-dot-arguments2-expected.txt: Removed. * js/function-dot-arguments2.html: Removed. * js/function-length-expected.txt: Removed. * js/function-length.html: Removed. * js/function-name-expected.txt: Removed. * js/function-name-is-in-scope-expected.txt: Removed. * js/function-name-is-in-scope.html: Removed. * js/function-name.html: Removed. * js/function-names-expected.txt: Removed. * js/function-names.html: Removed. * js/function-prototype-expected.txt: Removed. * js/function-prototype.html: Removed. * js/function-redefinition-expected.txt: Removed. * js/function-redefinition.html: Removed. * js/garbage-collect-after-string-appends-expected.txt: Removed. * js/get-by-pname-only-prototype-properties-expected.txt: Removed. * js/get-by-pname-only-prototype-properties.html: Removed. * js/getOwnPropertyDescriptor-expected.txt: Removed. * js/getOwnPropertyDescriptor.html: Removed. * js/global-constructors-attributes-dedicated-worker-expected.txt: Removed. * js/global-constructors-attributes-dedicated-worker.html: Removed. * js/global-constructors-attributes-expected.txt: Removed. * js/global-constructors-attributes-shared-worker-expected.txt: Removed. * js/global-constructors-attributes-shared-worker.html: Removed. * js/global-constructors-attributes.html: Removed. * js/global-constructors-deletable-expected.txt: Removed. * js/global-constructors-deletable.html: Removed. * js/global-function-resolve-expected.txt: Removed. * js/global-function-resolve.html: Removed. * js/global-recursion-on-full-stack-expected.txt: Removed. * js/global-recursion-on-full-stack.html: Removed. * js/global-var-limit-expected.txt: Removed. * js/global-var-limit.html: Removed. * js/immediate-constant-instead-of-cell-expected.txt: Removed. * js/immediate-constant-instead-of-cell.html: Removed. * js/implicit-call-with-global-reentry-expected.txt: Removed. * js/implicit-call-with-global-reentry.html: Removed. * js/implicit-global-to-global-reentry-expected.txt: Removed. * js/implicit-global-to-global-reentry.html: Removed. * js/imul-expected.txt: Removed. * js/imul.html: Removed. * js/inc-bracket-assign-subscript-expected.txt: Removed. * js/inc-bracket-assign-subscript.html: Removed. * js/inc-const-valueOf-expected.txt: Removed. * js/inc-const-valueOf.html: Removed. * js/indexed-setter-on-global-object-expected.txt: Removed. * js/indexed-setter-on-global-object.html: Removed. * js/inline-arguments-tear-off-expected.txt: Removed. * js/inline-arguments-tear-off.html: Removed. * js/instanceof-XMLHttpRequest-expected.txt: Removed. * js/instanceof-XMLHttpRequest.html: Removed. * js/invalid-syntax-for-function-expected.txt: Removed. * js/invalid-syntax-for-function.html: Removed. * js/jit-set-profiling-access-type-only-for-get-by-id-self-expected.txt: Removed. * js/jit-set-profiling-access-type-only-for-get-by-id-self.html: Removed. * js/js-constructors-use-correct-global-expected.txt: Removed. * js/js-constructors-use-correct-global.html: Removed. * js/js-correct-exception-handler-expected.txt: Removed. * js/js-correct-exception-handler.html: Removed. * js/jsc-test-list: Removed. * js/lastModified-expected.txt: Removed. * js/lastModified.html: Removed. * js/lazy-create-arguments-from-get-by-val-expected.txt: Removed. * js/lazy-create-arguments-from-get-by-val.html: Removed. * js/lexical-lookup-in-function-constructor-expected.txt: Removed. * js/lexical-lookup-in-function-constructor.html: Removed. * js/line-column-numbers-expected.txt: Removed. * js/line-column-numbers.html: Removed. * js/method-check-expected.txt: Removed. * js/method-check.html: Removed. * js/missing-style-end-tag-js-expected.txt: Removed. * js/missing-style-end-tag-js.html: Removed. * js/missing-title-end-tag-js-expected.txt: Removed. * js/missing-title-end-tag-js.html: Removed. * js/native-error-prototype-expected.txt: Removed. * js/native-error-prototype.html: Removed. * js/navigator-language-expected.txt: Removed. * js/navigator-language.html: Removed. * js/navigator-plugins-crash-expected.txt: Removed. * js/navigator-plugins-crash.html: Removed. * js/negate-overflow-expected.txt: Removed. * js/negate-overflow.html: Removed. * js/neq-null-crash-expected.txt: Removed. * js/neq-null-crash.html: Removed. * js/nested-function-scope-expected.txt: Removed. * js/nested-function-scope.html: Removed. * js/nested-object-gc-expected.txt: Removed. * js/nested-object-gc.html: Removed. * js/non-object-proto-expected.txt: Removed. * js/non-object-proto.html: Removed. * js/normal-character-escapes-in-string-literals-expected.txt: Removed. * js/normal-character-escapes-in-string-literals.html: Removed. * js/not-a-constructor-to-string-expected.txt: Removed. * js/not-a-constructor-to-string.html: Removed. * js/not-a-function-to-string-expected.txt: Removed. * js/not-a-function-to-string.html: Removed. * js/null-char-in-string-expected.txt: Removed. * js/null-char-in-string.html: Removed. * js/number-tofixed-expected.txt: Removed. * js/number-tofixed.html: Removed. * js/number-toprecision-expected.txt: Removed. * js/number-toprecision.html: Removed. * js/object-extra-comma-expected.txt: Removed. * js/object-extra-comma.html: Removed. * js/object-prototype-constructor-expected.txt: Removed. * js/object-prototype-constructor.html: Removed. * js/object-prototype-properties-expected.txt: Removed. * js/object-prototype-properties.html: Removed. * js/object-prototype-toLocaleString-expected.txt: Removed. * js/object-prototype-toLocaleString.html: Removed. * js/parse-error-external-script-in-eval-expected.txt: Removed. * js/parse-error-external-script-in-eval.html: Removed. * js/parse-error-external-script-in-new-Function-expected.txt: Removed. * js/parse-error-external-script-in-new-Function.html: Removed. * js/post-inc-assign-overwrites-expected.txt: Removed. * js/post-inc-assign-overwrites.html: Removed. * js/post-message-numeric-property-expected.txt: Removed. * js/post-message-numeric-property.html: Removed. * js/postfix-syntax-expected.txt: Removed. * js/postfix-syntax.html: Removed. * js/prefix-syntax-expected.txt: Removed. * js/prefix-syntax.html: Removed. * js/prototype-chain-caching-with-impure-get-own-property-slot-traps-expected.txt: Removed. * js/prototype-chain-caching-with-impure-get-own-property-slot-traps.html: Removed. * js/put-direct-index-beyond-vector-length-resize-expected.txt: Removed. * js/put-direct-index-beyond-vector-length-resize.html: Removed. * js/put-to-base-global-checked-expected.txt: Removed. * js/put-to-base-global-checked.html: Removed. * js/random-array-gc-stress-expected.txt: Removed. * js/random-array-gc-stress.html: Removed. * js/recursion-limit-equal-expected.txt: Removed. * js/recursion-limit-equal.html: Removed. * js/regexp-bol-expected.txt: Removed. * js/regexp-bol-with-multiline-expected.txt: Removed. * js/regexp-bol-with-multiline.html: Removed. * js/regexp-bol.html: Removed. * js/regexp-caching-expected.txt: Removed. * js/regexp-caching.html: Removed. * js/regexp-charclass-crash-expected.txt: Removed. * js/regexp-charclass-crash.html: Removed. * js/regexp-extended-characters-crash-expected.txt: Removed. * js/regexp-extended-characters-crash.html: Removed. * js/regexp-lastindex-expected.txt: Removed. * js/regexp-lastindex.html: Removed. * js/regexp-look-ahead-empty-expected.txt: Removed. * js/regexp-look-ahead-empty.html: Removed. * js/regexp-look-ahead-expected.txt: Removed. * js/regexp-look-ahead.html: Removed. * js/regexp-match-reify-before-putbyval-expected.txt: Removed. * js/regexp-match-reify-before-putbyval.html: Removed. * js/regexp-non-capturing-groups-expected.txt: Removed. * js/regexp-non-capturing-groups.html: Removed. * js/regexp-non-greedy-parentheses-expected.txt: Removed. * js/regexp-non-greedy-parentheses.html: Removed. * js/regexp-overflow-expected.txt: Removed. * js/regexp-overflow.html: Removed. * js/regexp-range-out-of-order-expected.txt: Removed. * js/regexp-range-out-of-order.html: Removed. * js/regexp-ranges-and-escaped-hyphens-expected.txt: Removed. * js/regexp-ranges-and-escaped-hyphens.html: Removed. * js/regexp-stack-overflow-expected.txt: Removed. * js/regexp-stack-overflow.html: Removed. * js/regexp-test-null-string-expected.txt: Removed. * js/regexp-test-null-string.html: Removed. * js/regexp-unicode-handling-expected.txt: Removed. * js/regexp-unicode-handling.html: Removed. * js/regexp-unicode-overflow-expected.txt: Removed. * js/regexp-unicode-overflow.html: Removed. * js/removing-Cf-characters-expected.txt: Removed. * js/removing-Cf-characters.html: Removed. * js/reserved-words-as-property-expected.txt: Removed. * js/reserved-words-as-property.html: Removed. * js/same-origin-subframe-about-blank-expected.txt: Removed. * js/same-origin-subframe-about-blank.html: Removed. * js/script-line-number-expected.txt: Removed. * js/script-line-number.html: Removed. * js/script-tests/Object-defineProperty.js: Removed. * js/script-tests/activation-proto.js: Removed. * js/script-tests/array-float-delete.js: Removed. * js/script-tests/array-join-bug-11524.js: Removed. * js/script-tests/array-prototype-properties.js: Removed. * js/script-tests/array-sort-exception.js: Removed. * js/script-tests/array-tostring-ignore-separator.js: Removed. * js/script-tests/array-with-double-assign.js: Removed. * js/script-tests/array-with-double-push.js: Removed. * js/script-tests/assign.js: Removed. * js/script-tests/basic-map.js: Removed. * js/script-tests/basic-set.js: Removed. * js/script-tests/basic-weakmap.js: Removed. * js/script-tests/cached-eval-gc.js: Removed. * js/script-tests/constructor-attributes.js: Removed. * js/script-tests/constructor.js: Removed. * js/script-tests/cross-frame-bad-time.js: Removed. * js/script-tests/cross-frame-really-bad-time-with-__proto__.js: Removed. * js/script-tests/cross-frame-really-bad-time.js: Removed. * js/script-tests/cross-global-object-inline-global-var.js: Removed. * js/script-tests/custom-constructors.js: Removed. * js/script-tests/cyclic-proto.js: Removed. * js/script-tests/cyclic-ref-toString.js: Removed. * js/script-tests/date-DST-time-cusps.js: Removed. * js/script-tests/date-big-constructor.js: Removed. * js/script-tests/date-big-setdate.js: Removed. * js/script-tests/date-big-setmonth.js: Removed. * js/script-tests/date-negative-setmonth.js: Removed. * js/script-tests/date-preserve-milliseconds.js: Removed. * js/script-tests/delete-syntax.js: Removed. * js/script-tests/dfg-byte-array-put.js: Removed. * js/script-tests/dfg-byteOffset-neuter.js: Removed. * js/script-tests/dfg-compare-final-object-to-final-object-or-other.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-literal-with-variables.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-literal.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-with-elements.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array-with-size.js: Removed. * js/script-tests/dfg-cross-global-object-inline-new-array.js: Removed. * js/script-tests/dfg-cross-global-object-new-array.js: Removed. * js/script-tests/dfg-custom-getter-throw-inlined.js: Removed. * js/script-tests/dfg-custom-getter-throw.js: Removed. * js/script-tests/dfg-custom-getter.js: Removed. * js/script-tests/dfg-ensure-array-storage-on-window.js: Removed. * js/script-tests/dfg-ensure-non-array-array-storage-on-window.js: Removed. * js/script-tests/dfg-inline-switch-imm.js: Removed. * js/script-tests/dfg-int32-to-double-on-set-local-and-exit.js: Removed. * js/script-tests/dfg-int32-to-double-on-set-local-and-sometimes-exit.js: Removed. * js/script-tests/dfg-logical-not-final-object-or-other.js: Removed. * js/script-tests/dfg-make-rope-side-effects.js: Removed. * js/script-tests/dfg-negative-array-size.js: Removed. * js/script-tests/dfg-patchable-get-by-id-after-watchpoint.js: Removed. * js/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js: Removed. * js/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js: Removed. * js/script-tests/dfg-peephole-compare-final-object-to-final-object-or-other.js: Removed. * js/script-tests/dfg-proto-stub-watchpoint-fire.js: Removed. * js/script-tests/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Removed. * js/script-tests/dfg-put-by-id-allocate-storage-polymorphic.js: Removed. * js/script-tests/dfg-put-by-id-allocate-storage.js: Removed. * js/script-tests/dfg-put-by-id-reallocate-storage-polymorphic.js: Removed. * js/script-tests/dfg-put-by-id-reallocate-storage.js: Removed. * js/script-tests/dfg-put-by-val-setter-then-get-by-val.js: Removed. * js/script-tests/dfg-put-to-readonly-property.js: Removed. * js/script-tests/dfg-rshift-by-zero-eliminate-valuetoint32.js: Removed. * js/script-tests/dfg-store-unexpected-value-into-argument-and-osr-exit.js: Removed. * js/script-tests/dfg-strcat-over-objects-then-exit-on-it.js: Removed. * js/script-tests/dfg-strict-mode-arguments-get-beyond-length.js: Removed. * js/script-tests/dfg-typed-array-neuter.js: Removed. * js/script-tests/document-all-triggers-masquerades-watchpoint.js: Removed. * js/script-tests/dot-node-base-exception.js: Removed. * js/script-tests/end-in-string-escape.js: Removed. * js/script-tests/enter-dictionary-indexing-mode-with-blank-indexing-type.js: Removed. * js/script-tests/eval-cache-scoped-lookup.js: Removed. * js/script-tests/eval-contained-syntax-error.js: Removed. * js/script-tests/exception-line-number.js: Removed. * js/script-tests/exception-registerfile-shrink.js: Removed. * js/script-tests/function-bind.js: Removed. * js/script-tests/function-name.js: Removed. * js/script-tests/function-names.js: Removed. * js/script-tests/get-by-pname-only-prototype-properties.js: Removed. * js/script-tests/global-constructors-attributes.js: Removed. * js/script-tests/global-constructors-deletable.js: Removed. * js/script-tests/global-function-resolve.js: Removed. * js/script-tests/immediate-constant-instead-of-cell.js: Removed. * js/script-tests/implicit-call-with-global-reentry.js: Removed. * js/script-tests/imul.js: Removed. * js/script-tests/inc-bracket-assign-subscript.js: Removed. * js/script-tests/inc-const-valueOf.js: Removed. * js/script-tests/indexed-setter-on-global-object.js: Removed. * js/script-tests/inline-arguments-tear-off.js: Removed. * js/script-tests/instanceof-XMLHttpRequest.js: Removed. * js/script-tests/jit-set-profiling-access-type-only-for-get-by-id-self.js: Removed. * js/script-tests/js-correct-exception-handler.js: Removed. * js/script-tests/lastModified.js: Removed. * js/script-tests/lazy-create-arguments-from-get-by-val.js: Removed. * js/script-tests/line-column-numbers.js: Removed. * js/script-tests/method-check.js: Removed. * js/script-tests/native-error-prototype.js: Removed. * js/script-tests/neq-null-crash.js: Removed. * js/script-tests/nested-object-gc.js: Removed. * js/script-tests/non-object-proto.js: Removed. * js/script-tests/normal-character-escapes-in-string-literals.js: Removed. * js/script-tests/null-char-in-string.js: Removed. * js/script-tests/number-tofixed.js: Removed. * js/script-tests/number-toprecision.js: Removed. * js/script-tests/object-extra-comma.js: Removed. * js/script-tests/object-prototype-constructor.js: Removed. * js/script-tests/object-prototype-properties.js: Removed. * js/script-tests/object-prototype-toLocaleString.js: Removed. * js/script-tests/post-inc-assign-overwrites.js: Removed. * js/script-tests/post-message-numeric-property.js: Removed. * js/script-tests/postfix-syntax.js: Removed. * js/script-tests/prefix-syntax.js: Removed. * js/script-tests/prototype-chain-caching-with-impure-get-own-property-slot-traps.js: Removed. * js/script-tests/put-direct-index-beyond-vector-length-resize.js: Removed. * js/script-tests/put-to-base-global-checked.js: Removed. * js/script-tests/random-array-gc-stress.js: Removed. * js/script-tests/recursion-limit-equal.js: Removed. * js/script-tests/regexp-bol-with-multiline.js: Removed. * js/script-tests/regexp-bol.js: Removed. * js/script-tests/regexp-extended-characters-crash.js: Removed. * js/script-tests/regexp-lastindex.js: Removed. * js/script-tests/regexp-look-ahead-empty.js: Removed. * js/script-tests/regexp-look-ahead.js: Removed. * js/script-tests/regexp-match-reify-before-putbyval.js: Removed. * js/script-tests/regexp-non-capturing-groups.js: Removed. * js/script-tests/regexp-non-greedy-parentheses.js: Removed. * js/script-tests/regexp-overflow.js: Removed. * js/script-tests/regexp-range-out-of-order.js: Removed. * js/script-tests/regexp-ranges-and-escaped-hyphens.js: Removed. * js/script-tests/regexp-stack-overflow.js: Removed. * js/script-tests/regexp-unicode-handling.js: Removed. * js/script-tests/regexp-unicode-overflow.js: Removed. * js/script-tests/removing-Cf-characters.js: Removed. * js/script-tests/reserved-words-as-property.js: Removed. * js/script-tests/select-options-add.js: Removed. * js/script-tests/stack-at-creation-for-error-objects.js: Removed. * js/script-tests/stack-trace.js: Removed. * js/script-tests/strict-readonly-statics.js: Removed. * js/script-tests/string-match.js: Removed. * js/script-tests/string-prototype-properties.js: Removed. * js/script-tests/string-replace-2.js: Removed. * js/script-tests/string-replace-3.js: Removed. * js/script-tests/string-replacement-outofmemory.js: Removed. * js/script-tests/string-split-conformance.js: Removed. * js/script-tests/string-split-double-empty.js: Removed. * js/script-tests/string-split-ignore-case.js: Removed. * js/script-tests/switch-behaviour.js: Removed. * js/script-tests/throw-exception-in-global-setter.js: Removed. * js/script-tests/toInt32UInt32.js: Removed. * js/script-tests/toString-exception.js: Removed. * js/script-tests/toString-overrides.js: Removed. * js/script-tests/toString-stack-overflow.js: Removed. * js/script-tests/transition-cache-dictionary-crash.js: Removed. * js/script-tests/typed-array-access.js: Removed. * js/script-tests/typed-array-set-different-types.js: Removed. * js/script-tests/typeof-syntax.js: Removed. * js/script-tests/unshift-multi.js: Removed. * js/script-tests/vardecl-preserve-arguments.js: Removed. * js/script-tests/webcore-string-comparison.js: Removed. * js/script-tests/with-scope-gc.js: Removed. * js/select-options-add-expected.txt: Removed. * js/select-options-add.html: Removed. * js/select-options-remove-expected.txt: Removed. * js/select-options-remove-gc-expected.txt: Removed. * js/select-options-remove-gc.html: Removed. * js/select-options-remove.html: Removed. * js/stack-at-creation-for-error-objects-expected.txt: Removed. * js/stack-at-creation-for-error-objects.html: Removed. * js/stack-trace-expected.txt: Removed. * js/stack-trace.html: Removed. * js/strict-readonly-statics-expected.txt: Removed. * js/strict-readonly-statics.html: Removed. * js/string-anchor-expected.txt: Removed. * js/string-anchor.html: Removed. * js/string-concatenate-outofmemory-expected.txt: Removed. * js/string-fontcolor-expected.txt: Removed. * js/string-fontcolor.html: Removed. * js/string-fontsize-expected.txt: Removed. * js/string-fontsize.html: Removed. * js/string-link-expected.txt: Removed. * js/string-link.html: Removed. * js/string-match-expected.txt: Removed. * js/string-match.html: Removed. * js/string-prototype-properties-expected.txt: Removed. * js/string-prototype-properties.html: Removed. * js/string-replace-2-expected.txt: Removed. * js/string-replace-2.html: Removed. * js/string-replace-3-expected.txt: Removed. * js/string-replace-3.html: Removed. * js/string-replace-exception-crash-expected.txt: Removed. * js/string-replace-exception-crash.html: Removed. * js/string-replacement-outofmemory-expected.txt: Removed. * js/string-replacement-outofmemory.html: Removed. * js/string-split-conformance-expected.txt: Removed. * js/string-split-conformance.html: Removed. * js/string-split-double-empty-expected.txt: Removed. * js/string-split-double-empty.html: Removed. * js/string-split-ignore-case-expected.txt: Removed. * js/string-split-ignore-case.html: Removed. * js/switch-behaviour-expected.txt: Removed. * js/switch-behaviour.html: Removed. * js/text-field-resize-expected.txt: Removed. * js/text-field-resize.html: Removed. * js/throw-exception-in-global-setter-expected.txt: Removed. * js/throw-exception-in-global-setter.html: Removed. * js/throw-from-array-sort-expected.txt: Removed. * js/throw-from-array-sort.html: Removed. * js/toInt32UInt32-expected.txt: Removed. * js/toInt32UInt32.html: Removed. * js/toString-and-valueOf-override-expected.txt: Removed. * js/toString-and-valueOf-override.html: Removed. * js/toString-dontEnum-expected.txt: Removed. * js/toString-dontEnum.html: Removed. * js/toString-exception-expected.txt: Removed. * js/toString-exception.html: Removed. * js/toString-number-expected.txt: Removed. * js/toString-number.html: Removed. * js/toString-overrides-expected.txt: Removed. * js/toString-overrides.html: Removed. * js/toString-stack-overflow-expected.txt: Removed. * js/toString-stack-overflow.html: Removed. * js/toString-try-else-expected.txt: Removed. * js/toString-try-else.html: Removed. * js/transition-cache-dictionary-crash-expected.txt: Removed. * js/transition-cache-dictionary-crash.html: Removed. * js/trivial-functions-expected.txt: Removed. * js/trivial-functions.html: Removed. * js/try-catch-crash-expected.txt: Removed. * js/try-catch-crash.html: Removed. * js/typed-array-access-expected.txt: Removed. * js/typed-array-access.html: Removed. * js/typed-array-set-different-types-expected.txt: Removed. * js/typed-array-set-different-types.html: Removed. * js/typeof-syntax-expected.txt: Removed. * js/typeof-syntax.html: Removed. * js/uncaught-exception-line-number-expected.txt: Removed. * js/uncaught-exception-line-number.html: Removed. * js/unshift-multi-expected.txt: Removed. * js/unshift-multi.html: Removed. * js/var-declarations-expected.txt: Removed. * js/var-declarations-shadowing-expected.txt: Removed. * js/var-declarations-shadowing.html: Removed. * js/var-declarations.html: Removed. * js/vardecl-preserve-arguments-expected.txt: Removed. * js/vardecl-preserve-arguments.html: Removed. * js/vardecl-preserve-parameters-expected.txt: Removed. * js/vardecl-preserve-parameters.html: Removed. * js/vardecl-preserve-vardecl-expected.txt: Removed. * js/vardecl-preserve-vardecl.html: Removed. * js/webcore-string-comparison-expected.txt: Removed. * js/webcore-string-comparison.html: Removed. * js/webidl-type-mapping-expected.txt: Removed. * js/webidl-type-mapping.html: Removed. * js/while-expression-value-expected.txt: Removed. * js/while-expression-value.html: Removed. * js/window-location-href-file-urls-expected.txt: Removed. * js/window-location-href-file-urls.html: Removed. * js/with-scope-gc-expected.txt: Removed. * js/with-scope-gc.html: Removed. * platform/gtk/TestExpectations: * platform/mac/TestExpectations: * platform/mac/js/constructor-length-expected.txt: Removed. * platform/mac/js/dom: Added. * platform/mac/js/dom/constructor-length-expected.txt: Copied from LayoutTests/platform/mac/js/constructor-length-expected.txt. * platform/qt/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/139581@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156066 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-09-18 22:26:09 +00:00
<script src="../../resources/js-test-post.js"></script>
Fix 30% JSBench regression (caused by adding column numbers to stack traces). https://bugs.webkit.org/show_bug.cgi?id=118481. Reviewed by Mark Hahnenberg and Geoffrey Garen. Source/JavaScriptCore: Previously, we already capture ExpressionRangeInfo that provides a divot for each bytecode that can potentially throw an exception (and therefore generate a stack trace). On first attempt to compute column numbers, we then do a walk of the source string to record all line start positions in a table associated with the SourceProvider. The column number can then be computed as divot - lineStartFor(bytecodeOffset). The computation of this lineStarts table is the source of the 30% JSBench performance regression. The new code now records lineStarts as the lexer and parser scans the source code. These lineStarts are then used to compute the column number for the given divot, and stored in the ExpressionRangeInfo. Similarly, we also capture the line number at the divot point and store that in the ExpressionRangeInfo. Hence, to look up line and column numbers, we now lookup the ExpressionRangeInfo for the bytecodeOffset, and then compute the line and column from the values stored in the expression info. The strategy: 1. We want to minimize perturbations to the lexer and parser. Specifically, the changes added should not change how it scans code, and generate bytecode. 2. We regard the divot as the source character position we are interested in. As such, we'll capture line and lineStart (for column) at the point when we capture the divot information. This ensures that the 3 values are consistent. How the change is done: 1. Change the lexer to track lineStarts. 2. Change the parser to capture line and lineStarts at the point of capturing divots. 3. Change the parser and associated code to plumb these values all the way to the point that the correspoinding ExpressionRangeInfo is emitted. 4. Propagate and record SourceCode firstLine and firstLineColumnOffset to the the necessary places so that we can add them as needed when reifying UnlinkedCodeBlocks into CodeBlocks. 5. Compress the line and column number values in the ExpressionRangeInfo. In practice, we seldom have both large line and column numbers. Hence, we can encode both in an uint32_t most of the time. For the times when we encounter both large line and column numbers, we have a fallback to store the "fat" position info. 6. Emit an ExpressionRangeInfo for UnaryOp nodes to get more line and column number coverage. 7. Change the interpreter to use the new way of computing line and column. 8. Delete old line and column computation code that is now unused. Misc details: - the old lexer was tracking both a startOffset and charPosition where charPosition equals startOffset - SourceCode.startOffset. We now use startOffset exclusively throughout the system for consistency. All offset values (including lineStart) are relative to the start of the SourceProvider string. These values will only be converted to be relative to the SourceCode.startOffset at the very last minute i.e. when the divot is stored into the ExpressionRangeInfo. This change to use the same offset system everywhere reduces confusion from having to convert back and forth between the 2 systems. It also enables a lot of assertions to be used. - Also fixed some bugs in the choice of divot positions to use. For example, both Eval and Function expressions previously used column numbers from the start of the expression but used the line number at the end of the expression. This is now fixed to use either the start or end positions as appropriate, but not a mix of line and columns from both. - Why use ints instead of unsigneds for offsets and lineStarts inside the lexer and parser? Some tests (e.g. fast/js/call-base-resolution.html and fast/js/eval-cross-window.html) has shown that lineStart offsets can be prior to the SourceCode.startOffset. Keeping the lexer offsets as ints simplifies computations and makes it easier to maintain the assertions that (startOffset >= lineStartOffset). However, column and line numbers are always unsigned when we publish them to the ExpressionRangeInfo. The ints are only used inside the lexer and parser ... well, and bytecode generator. - For all cases, lineStart is always captured where the divot is captured. However, some sputnik conformance tests have shown that we cannot honor line breaks for assignment statements like the following: eval("x\u000A*=\u000A-1;"); In this case, the lineStart is expected to be captured at the start of the assignment expression instead of at the divot point in the middle. The assignment expression is the only special case for this. This patch has been tested against the full layout tests both with release and debug builds with no regression. * API/JSContextRef.cpp: (JSContextCreateBacktrace): - Updated to use the new StackFrame::computeLineAndColumn(). * bytecode/CodeBlock.cpp: (JSC::CodeBlock::CodeBlock): - Added m_firstLineColumnOffset initialization. - Plumbed the firstLineColumnOffset into the SourceCode. - Initialized column for op_debug using the new way. (JSC::CodeBlock::lineNumberForBytecodeOffset): - Changed to compute line number using the ExpressionRangeInfo. (JSC::CodeBlock::columnNumberForBytecodeOffset): Added - Changed to compute column number using the ExpressionRangeInfo. (JSC::CodeBlock::expressionRangeForBytecodeOffset): * bytecode/CodeBlock.h: (JSC::CodeBlock::firstLineColumnOffset): (JSC::GlobalCodeBlock::GlobalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::ProgramCodeBlock::ProgramCodeBlock): - Plumbed firstLineColumnOffset through to the super class. (JSC::EvalCodeBlock::EvalCodeBlock): - Plumbed firstLineColumnOffset through to the super class. But for EvalCodeBlocks, the firstLineColumnOffset is always 1 because we're starting with a new source string with no start offset. (JSC::FunctionCodeBlock::FunctionCodeBlock): - Plumbed firstLineColumnOffset through to the super class. * bytecode/ExpressionRangeInfo.h: - Added modes for encoding line and column into a single 30-bit unsigned. The encoding is in 1 of 3 modes: 1. FatLineMode: 22-bit line, 8-bit column 2. FatColumnMode: 8-bit line, 22-bit column 3. FatLineAndColumnMode: 32-bit line, 32-bit column (JSC::ExpressionRangeInfo::encodeFatLineMode): Added. - Encodes line and column into the 30-bit position using FatLine mode. (JSC::ExpressionRangeInfo::encodeFatColumnMode): Added. - Encodes line and column into the 30-bit position using FatColumn mode. (JSC::ExpressionRangeInfo::decodeFatLineMode): Added. - Decodes the FatLine mode 30-bit position into line and column. (JSC::ExpressionRangeInfo::decodeFatColumnMode): Added. - Decodes the FatColumn mode 30-bit position into line and column. * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable): - Plumbed startColumn through. (JSC::UnlinkedFunctionExecutable::link): - Plumbed startColumn through. (JSC::UnlinkedCodeBlock::lineNumberForBytecodeOffset): - Computes a line number using the new way. (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset): - Added decoding of line and column. - Added handling of the case when we do not find a fitting expression range info for a specified bytecodeOffset. This only happens if the bytecodeOffset is below the first expression range info. In that case, we'll use the first expression range info entry. (JSC::UnlinkedCodeBlock::addExpressionInfo): - Added encoding of line and column. * bytecode/UnlinkedCodeBlock.h: - Added m_expressionInfoFatPositions in RareData. (JSC::UnlinkedFunctionExecutable::functionStartColumn): (JSC::UnlinkedCodeBlock::shrinkToFit): - Removed obsoleted m_lineInfo. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallEval): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitCallVarargs): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitConstruct): Plumbed line and lineStart through. (JSC::BytecodeGenerator::emitDebugHook): Plumbed lineStart through. * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitNode): (JSC::BytecodeGenerator::emitNodeInConditionContext): - Removed obsoleted m_lineInfo. (JSC::BytecodeGenerator::emitExpressionInfo): - Plumbed line and lineStart through. - Compute the line and column to be added to the expression range info. * bytecompiler/NodesCodegen.cpp: (JSC::ThrowableExpressionData::emitThrowReferenceError): (JSC::ResolveNode::emitBytecode): (JSC::ArrayNode::toArgumentList): (JSC::BracketAccessorNode::emitBytecode): (JSC::DotAccessorNode::emitBytecode): (JSC::NewExprNode::emitBytecode): (JSC::EvalFunctionCallNode::emitBytecode): (JSC::FunctionCallValueNode::emitBytecode): (JSC::FunctionCallResolveNode::emitBytecode): (JSC::FunctionCallBracketNode::emitBytecode): (JSC::FunctionCallDotNode::emitBytecode): (JSC::CallFunctionCallDotNode::emitBytecode): (JSC::ApplyFunctionCallDotNode::emitBytecode): (JSC::PostfixNode::emitResolve): (JSC::PostfixNode::emitBracket): (JSC::PostfixNode::emitDot): (JSC::DeleteResolveNode::emitBytecode): (JSC::DeleteBracketNode::emitBytecode): (JSC::DeleteDotNode::emitBytecode): (JSC::PrefixNode::emitResolve): (JSC::PrefixNode::emitBracket): (JSC::PrefixNode::emitDot): - Plumbed line and lineStart through the above as needed. (JSC::UnaryOpNode::emitBytecode): - Added emission of an ExpressionRangeInfo for the UnaryOp node. (JSC::BinaryOpNode::emitStrcat): (JSC::ThrowableBinaryOpNode::emitBytecode): (JSC::InstanceOfNode::emitBytecode): (JSC::emitReadModifyAssignment): (JSC::ReadModifyResolveNode::emitBytecode): (JSC::AssignResolveNode::emitBytecode): (JSC::AssignDotNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::AssignBracketNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode): - Plumbed line and lineStart through the above as needed. (JSC::ConstStatementNode::emitBytecode): (JSC::EmptyStatementNode::emitBytecode): (JSC::DebuggerStatementNode::emitBytecode): (JSC::ExprStatementNode::emitBytecode): (JSC::VarStatementNode::emitBytecode): (JSC::IfElseNode::emitBytecode): (JSC::DoWhileNode::emitBytecode): (JSC::WhileNode::emitBytecode): (JSC::ForNode::emitBytecode): (JSC::ForInNode::emitBytecode): (JSC::ContinueNode::emitBytecode): (JSC::BreakNode::emitBytecode): (JSC::ReturnNode::emitBytecode): (JSC::WithNode::emitBytecode): (JSC::SwitchNode::emitBytecode): (JSC::LabelNode::emitBytecode): (JSC::ThrowNode::emitBytecode): (JSC::TryNode::emitBytecode): (JSC::ProgramNode::emitBytecode): (JSC::EvalNode::emitBytecode): (JSC::FunctionBodyNode::emitBytecode): - Plumbed line and lineStart through the above as needed. * interpreter/Interpreter.cpp: (JSC::appendSourceToError): - Added line and column arguments for expressionRangeForBytecodeOffset(). (JSC::StackFrame::computeLineAndColumn): - Replaces StackFrame::line() and StackFrame::column(). (JSC::StackFrame::expressionInfo): - Added line and column arguments. (JSC::StackFrame::toString): - Changed to use the new StackFrame::computeLineAndColumn(). (JSC::Interpreter::getStackTrace): - Added the needed firstLineColumnOffset arg for the StackFrame. * interpreter/Interpreter.h: * parser/ASTBuilder.h: (JSC::ASTBuilder::BinaryOpInfo::BinaryOpInfo): (JSC::ASTBuilder::AssignmentInfo::AssignmentInfo): (JSC::ASTBuilder::createResolve): (JSC::ASTBuilder::createBracketAccess): (JSC::ASTBuilder::createDotAccess): (JSC::ASTBuilder::createRegExp): (JSC::ASTBuilder::createNewExpr): (JSC::ASTBuilder::createAssignResolve): (JSC::ASTBuilder::createFunctionExpr): (JSC::ASTBuilder::createFunctionBody): (JSC::ASTBuilder::createGetterOrSetterProperty): (JSC::ASTBuilder::createFuncDeclStatement): (JSC::ASTBuilder::createBlockStatement): (JSC::ASTBuilder::createExprStatement): (JSC::ASTBuilder::createIfStatement): (JSC::ASTBuilder::createForLoop): (JSC::ASTBuilder::createForInLoop): (JSC::ASTBuilder::createVarStatement): (JSC::ASTBuilder::createReturnStatement): (JSC::ASTBuilder::createBreakStatement): (JSC::ASTBuilder::createContinueStatement): (JSC::ASTBuilder::createTryStatement): (JSC::ASTBuilder::createSwitchStatement): (JSC::ASTBuilder::createWhileStatement): (JSC::ASTBuilder::createDoWhileStatement): (JSC::ASTBuilder::createLabelStatement): (JSC::ASTBuilder::createWithStatement): (JSC::ASTBuilder::createThrowStatement): (JSC::ASTBuilder::createDebugger): (JSC::ASTBuilder::createConstStatement): (JSC::ASTBuilder::appendBinaryExpressionInfo): (JSC::ASTBuilder::appendUnaryToken): (JSC::ASTBuilder::unaryTokenStackLastStart): (JSC::ASTBuilder::unaryTokenStackLastLineStartPosition): Added. (JSC::ASTBuilder::assignmentStackAppend): (JSC::ASTBuilder::createAssignment): (JSC::ASTBuilder::setExceptionLocation): (JSC::ASTBuilder::makeDeleteNode): (JSC::ASTBuilder::makeFunctionCallNode): (JSC::ASTBuilder::makeBinaryNode): (JSC::ASTBuilder::makeAssignNode): (JSC::ASTBuilder::makePrefixNode): (JSC::ASTBuilder::makePostfixNode):. - Plumbed line, lineStart, and startColumn through the above as needed. * parser/Lexer.cpp: (JSC::::currentSourcePtr): (JSC::::setCode): - Added tracking for sourceoffset and lineStart. (JSC::::internalShift): (JSC::::parseIdentifier): - Added tracking for lineStart. (JSC::::parseIdentifierSlowCase): (JSC::::parseString): - Added tracking for lineStart. (JSC::::parseStringSlowCase): (JSC::::lex): - Added tracking for sourceoffset. (JSC::::sourceCode): * parser/Lexer.h: (JSC::Lexer::currentOffset): (JSC::Lexer::currentLineStartOffset): (JSC::Lexer::setOffset): - Added tracking for lineStart. (JSC::Lexer::offsetFromSourcePtr): Added. conversion function. (JSC::Lexer::sourcePtrFromOffset): Added. conversion function. (JSC::Lexer::setOffsetFromSourcePtr): (JSC::::lexExpectIdentifier): - Added tracking for sourceoffset and lineStart. * parser/NodeConstructors.h: (JSC::Node::Node): (JSC::ResolveNode::ResolveNode): (JSC::EvalFunctionCallNode::EvalFunctionCallNode): (JSC::FunctionCallValueNode::FunctionCallValueNode): (JSC::FunctionCallResolveNode::FunctionCallResolveNode): (JSC::FunctionCallBracketNode::FunctionCallBracketNode): (JSC::FunctionCallDotNode::FunctionCallDotNode): (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): (JSC::PostfixNode::PostfixNode): (JSC::DeleteResolveNode::DeleteResolveNode): (JSC::DeleteBracketNode::DeleteBracketNode): (JSC::DeleteDotNode::DeleteDotNode): (JSC::PrefixNode::PrefixNode): (JSC::ReadModifyResolveNode::ReadModifyResolveNode): (JSC::ReadModifyBracketNode::ReadModifyBracketNode): (JSC::AssignBracketNode::AssignBracketNode): (JSC::AssignDotNode::AssignDotNode): (JSC::ReadModifyDotNode::ReadModifyDotNode): (JSC::AssignErrorNode::AssignErrorNode): (JSC::WithNode::WithNode): (JSC::ForInNode::ForInNode): - Plumbed line and lineStart through the above as needed. * parser/Nodes.cpp: (JSC::StatementNode::setLoc): Plumbed lineStart. (JSC::ScopeNode::ScopeNode): Plumbed lineStart. (JSC::ProgramNode::ProgramNode): Plumbed startColumn. (JSC::ProgramNode::create): Plumbed startColumn. (JSC::EvalNode::create): (JSC::FunctionBodyNode::FunctionBodyNode): Plumbed startColumn. (JSC::FunctionBodyNode::create): Plumbed startColumn. * parser/Nodes.h: (JSC::Node::startOffset): (JSC::Node::lineStartOffset): Added. (JSC::StatementNode::firstLine): (JSC::StatementNode::lastLine): (JSC::ThrowableExpressionData::ThrowableExpressionData): (JSC::ThrowableExpressionData::setExceptionSourceCode): (JSC::ThrowableExpressionData::divotStartOffset): (JSC::ThrowableExpressionData::divotEndOffset): (JSC::ThrowableExpressionData::divotLine): (JSC::ThrowableExpressionData::divotLineStart): (JSC::ThrowableSubExpressionData::ThrowableSubExpressionData): (JSC::ThrowableSubExpressionData::setSubexpressionInfo): (JSC::ThrowableSubExpressionData::subexpressionDivot): (JSC::ThrowableSubExpressionData::subexpressionStartOffset): (JSC::ThrowableSubExpressionData::subexpressionEndOffset): (JSC::ThrowableSubExpressionData::subexpressionLine): (JSC::ThrowableSubExpressionData::subexpressionLineStart): (JSC::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): (JSC::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): (JSC::ThrowablePrefixedSubExpressionData::subexpressionDivot): (JSC::ThrowablePrefixedSubExpressionData::subexpressionStartOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionEndOffset): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLine): (JSC::ThrowablePrefixedSubExpressionData::subexpressionLineStart): (JSC::ScopeNode::startStartOffset): (JSC::ScopeNode::startLineStartOffset): (JSC::ProgramNode::startColumn): (JSC::EvalNode::startColumn): (JSC::FunctionBodyNode::startColumn): - Plumbed line and lineStart through the above as needed. * parser/Parser.cpp: (JSC::::Parser): (JSC::::parseSourceElements): (JSC::::parseVarDeclarationList): (JSC::::parseConstDeclarationList): (JSC::::parseForStatement): (JSC::::parseBreakStatement): (JSC::::parseContinueStatement): (JSC::::parseReturnStatement): (JSC::::parseThrowStatement): (JSC::::parseWithStatement): - Plumbed line and lineStart through the above as needed. (JSC::::parseFunctionBody): - Plumbed startColumn. (JSC::::parseFunctionInfo): (JSC::::parseFunctionDeclaration): (JSC::LabelInfo::LabelInfo): (JSC::::parseExpressionOrLabelStatement): (JSC::::parseAssignmentExpression): (JSC::::parseBinaryExpression): (JSC::::parseProperty): (JSC::::parseObjectLiteral): (JSC::::parsePrimaryExpression): (JSC::::parseMemberExpression): (JSC::::parseUnaryExpression): - Plumbed line, lineStart, startColumn through the above as needed. * parser/Parser.h: (JSC::Parser::next): (JSC::Parser::nextExpectIdentifier): (JSC::Parser::tokenStart): (JSC::Parser::tokenColumn): (JSC::Parser::tokenEnd): (JSC::Parser::tokenLineStart): (JSC::Parser::lastTokenLine): (JSC::Parser::lastTokenLineStart): (JSC::::parse): * parser/ParserTokens.h: (JSC::JSTokenLocation::JSTokenLocation): - Plumbed lineStart. (JSC::JSTokenLocation::lineStartPosition): (JSC::JSTokenLocation::startPosition): (JSC::JSTokenLocation::endPosition): * parser/SourceCode.h: (JSC::SourceCode::SourceCode): (JSC::SourceCode::startColumn): (JSC::makeSource): (JSC::SourceCode::subExpression): * parser/SourceProvider.cpp: delete old code. * parser/SourceProvider.h: delete old code. * parser/SourceProviderCacheItem.h: (JSC::SourceProviderCacheItem::closeBraceToken): (JSC::SourceProviderCacheItem::SourceProviderCacheItem): - Plumbed lineStart. * parser/SyntaxChecker.h: (JSC::SyntaxChecker::makeFunctionCallNode): (JSC::SyntaxChecker::makeAssignNode): (JSC::SyntaxChecker::makePrefixNode): (JSC::SyntaxChecker::makePostfixNode): (JSC::SyntaxChecker::makeDeleteNode): (JSC::SyntaxChecker::createResolve): (JSC::SyntaxChecker::createBracketAccess): (JSC::SyntaxChecker::createDotAccess): (JSC::SyntaxChecker::createRegExp): (JSC::SyntaxChecker::createNewExpr): (JSC::SyntaxChecker::createAssignResolve): (JSC::SyntaxChecker::createFunctionExpr): (JSC::SyntaxChecker::createFunctionBody): (JSC::SyntaxChecker::createFuncDeclStatement): (JSC::SyntaxChecker::createForInLoop): (JSC::SyntaxChecker::createReturnStatement): (JSC::SyntaxChecker::createBreakStatement): (JSC::SyntaxChecker::createContinueStatement): (JSC::SyntaxChecker::createWithStatement): (JSC::SyntaxChecker::createLabelStatement): (JSC::SyntaxChecker::createThrowStatement): (JSC::SyntaxChecker::createGetterOrSetterProperty): (JSC::SyntaxChecker::appendBinaryExpressionInfo): (JSC::SyntaxChecker::operatorStackPop): - Made SyntaxChecker prototype changes to match ASTBuilder due to new args added for plumbing line, lineStart, and startColumn. * runtime/CodeCache.cpp: (JSC::CodeCache::generateBytecode): (JSC::CodeCache::getCodeBlock): - Plumbed startColumn. * runtime/Executable.cpp: (JSC::FunctionExecutable::FunctionExecutable): (JSC::ProgramExecutable::compileInternal): (JSC::FunctionExecutable::produceCodeBlockFor): (JSC::FunctionExecutable::fromGlobalCode): - Plumbed startColumn. * runtime/Executable.h: (JSC::ScriptExecutable::startColumn): (JSC::ScriptExecutable::recordParse): (JSC::FunctionExecutable::create): - Plumbed startColumn. Source/WebCore: Test: fast/js/line-column-numbers.html Updated the bindings to use StackFrame::computeLineAndColumn(). The old StackFrame::line() and StackFrame::column() has been removed. The new algorithm always computes the 2 values together anyway. Hence it is more efficient to return them as a pair instead of doing the same computation twice for each half of the result. * bindings/js/ScriptCallStackFactory.cpp: (WebCore::createScriptCallStack): (WebCore::createScriptCallStackFromException): * bindings/js/ScriptSourceCode.h: (WebCore::ScriptSourceCode::ScriptSourceCode): LayoutTests: The fix now computes line and column numbers more accurately. As a result, some of the test results need to be re-baselined. Among other fixes, one major source of difference is that the old code was incorrectly computing 0-based column numbers. This has now been fixed to be 1-based. Note: line numbers were always 1-based. Also added a new test: fast/js/line-column-numbers.html, which tests line and column numbers for source code in various configurations. * editing/execCommand/outdent-blockquote-test1-expected.txt: * editing/execCommand/outdent-blockquote-test2-expected.txt: * editing/execCommand/outdent-blockquote-test3-expected.txt: * editing/execCommand/outdent-blockquote-test4-expected.txt: * editing/pasteboard/copy-paste-float-expected.txt: * editing/pasteboard/paste-blockquote-before-blockquote-expected.txt: * editing/pasteboard/paste-double-nested-blockquote-before-blockquote-expected.txt: * fast/dom/Window/window-resize-contents-expected.txt: * fast/events/remove-target-with-shadow-in-drag-expected.txt: * fast/js/line-column-numbers-expected.txt: Added. * fast/js/line-column-numbers.html: Added. * fast/js/script-tests/line-column-numbers.js: Added. (try.doThrow4b): (doThrow5b.try.innerFunc): (doThrow5b): (doThrow6b.try.innerFunc): (doThrow6b): (catch): (try.doThrow11b): (try.doThrow14b): * fast/js/stack-trace-expected.txt: * inspector/console/console-url-line-column-expected.txt: Canonical link: https://commits.webkit.org/136467@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@152494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-07-09 16:15:12 +00:00
</body>
</html>