Changeset 69977 in webkit
- Timestamp:
- Oct 18, 2010 11:32:39 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r69970 r69977 1 2010-10-18 Oliver Hunt <oliver@apple.com> 2 3 Reviewed by Darin Adler. 4 5 Strict mode: |this| should be undefined if it is not explicitly provided 6 https://bugs.webkit.org/show_bug.cgi?id=47833 7 8 To make strict mode behave correctly we want to pass undefined instead of null 9 as the default this value. This has no impact on behaviour outside of strict 10 mode as both values are replaced with the global object if necessary. 11 12 * bytecompiler/NodesCodegen.cpp: 13 (JSC::FunctionCallValueNode::emitBytecode): 14 (JSC::FunctionCallResolveNode::emitBytecode): 15 (JSC::CallFunctionCallDotNode::emitBytecode): 16 (JSC::ApplyFunctionCallDotNode::emitBytecode): 17 18 1 19 2010-10-18 Darin Adler <darin@apple.com> 2 20 -
trunk/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r69940 r69977 372 372 RefPtr<RegisterID> func = generator.emitNode(m_expr); 373 373 CallArguments callArguments(generator, m_args); 374 generator.emitLoad(callArguments.thisRegister(), js Null());374 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 375 375 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), callArguments, divot(), startOffset(), endOffset()); 376 376 } … … 382 382 if (RefPtr<RegisterID> local = generator.registerFor(m_ident)) { 383 383 CallArguments callArguments(generator, m_args); 384 generator.emitLoad(callArguments.thisRegister(), js Null());384 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 385 385 return generator.emitCall(generator.finalDestinationOrIgnored(dst, callArguments.thisRegister()), local.get(), callArguments, divot(), startOffset(), endOffset()); 386 386 } … … 393 393 RefPtr<RegisterID> func = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject); 394 394 CallArguments callArguments(generator, m_args); 395 generator.emitLoad(callArguments.thisRegister(), js Null());395 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 396 396 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), callArguments, divot(), startOffset(), endOffset()); 397 397 } … … 456 456 RefPtr<RegisterID> realFunction = generator.emitMove(generator.tempDestination(dst), base.get()); 457 457 CallArguments callArguments(generator, m_args); 458 generator.emitLoad(callArguments.thisRegister(), js Null());458 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 459 459 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), callArguments, divot(), startOffset(), endOffset()); 460 460 generator.emitJump(end.get()); … … 514 514 RefPtr<RegisterID> realFunction = generator.emitMove(generator.tempDestination(dst), base.get()); 515 515 CallArguments callArguments(generator, m_args); 516 generator.emitLoad(callArguments.thisRegister(), js Null());516 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 517 517 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), callArguments, divot(), startOffset(), endOffset()); 518 518 } -
trunk/LayoutTests/ChangeLog
r69975 r69977 1 2010-10-18 Oliver Hunt <oliver@apple.com> 2 3 Reviewed by Darin Adler. 4 5 Strict mode: |this| should be undefined if it is not explicitly provided 6 https://bugs.webkit.org/show_bug.cgi?id=47833 7 8 Add tests to ensure that |this| is undefined rather than null when it has 9 not been explicitly provided. 10 11 * fast/js/basic-strict-mode-expected.txt: 12 * fast/js/script-tests/basic-strict-mode.js: 13 1 14 2010-10-18 Robert Hogan <robert@webkit.org> 2 15 -
trunk/LayoutTests/fast/js/basic-strict-mode-expected.txt
r69965 r69977 22 22 PASS testThisBracketAccess.call(false, 'length') is undefined. 23 23 PASS testThisBracketAccess.call(1, 'length') is undefined. 24 PASS testGlobalAccess() is null 24 PASS testGlobalAccess() is undefined 25 PASS testThis.call() is undefined 26 PASS testThis.apply() is undefined 27 PASS testThis.call(undefined) is undefined 28 PASS testThis.apply(undefined) is undefined 25 29 PASS (function eval(){'use strict';}) threw exception SyntaxError: Parse error. 26 30 PASS (function (eval){'use strict';}) threw exception SyntaxError: Parse error. -
trunk/LayoutTests/fast/js/script-tests/basic-strict-mode.js
r69965 r69977 37 37 38 38 39 shouldBe("testGlobalAccess()", "null"); 39 shouldBe("testGlobalAccess()", "undefined"); 40 shouldBe("testThis.call()", "undefined"); 41 shouldBe("testThis.apply()", "undefined"); 42 shouldBe("testThis.call(undefined)", "undefined"); 43 shouldBe("testThis.apply(undefined)", "undefined"); 40 44 41 45 shouldThrow("(function eval(){'use strict';})");
Note: See TracChangeset
for help on using the changeset viewer.