Changeset 127647 in webkit
- Timestamp:
- Sep 5, 2012 2:44:43 PM (12 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r127643 r127647 1 2012-09-05 Geoffrey Garen <ggaren@apple.com> 2 3 Throw exceptions when assigning to const in strict mode 4 https://bugs.webkit.org/show_bug.cgi?id=95894 5 6 Reviewed by Oliver Hunt. 7 8 Currently, this never happens; but it will start happening once the 9 callee is a local const register. In this patch, there's no change in 10 behavior. 11 12 * bytecompiler/BytecodeGenerator.cpp: 13 (JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded): Helper function 14 for doing the throwing. 15 * bytecompiler/BytecodeGenerator.h: 16 17 * bytecompiler/NodesCodegen.cpp: 18 (JSC::PostfixResolveNode::emitBytecode): 19 (JSC::PrefixResolveNode::emitBytecode): 20 (JSC::ReadModifyResolveNode::emitBytecode): 21 (JSC::AssignResolveNode::emitBytecode): Call the helper function. 22 1 23 2012-09-05 Geoffrey Garen <ggaren@apple.com> 2 24 -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r127393 r127647 2595 2595 } 2596 2596 2597 void BytecodeGenerator::emitReadOnlyExceptionIfNeeded() 2598 { 2599 if (!isStrictMode()) 2600 return; 2601 2602 RefPtr<RegisterID> error = emitLoad(newTemporary(), createTypeError(scope()->globalObject()->globalExec(), StrictModeReadonlyPropertyWriteError)); 2603 emitThrow(error.get()); 2604 } 2605 2597 2606 } // namespace JSC -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r127393 r127647 508 508 RegisterID* emitNextPropertyName(RegisterID* dst, RegisterID* base, RegisterID* i, RegisterID* size, RegisterID* iter, Label* target); 509 509 510 void emitReadOnlyExceptionIfNeeded(); 511 510 512 // Start a try block. 'start' must have been emitted. 511 513 TryData* pushTry(Label* start); -
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r127544 r127647 610 610 611 611 if (RegisterID* local = resolveResult.local()) { 612 if (resolveResult.isReadOnly()) 612 if (resolveResult.isReadOnly()) { 613 generator.emitReadOnlyExceptionIfNeeded(); 613 614 return generator.emitToJSNumber(generator.finalDestination(dst), local); 615 } 614 616 if (dst == generator.ignoredResult()) 615 617 return emitPreIncOrDec(generator, local, m_operator); … … 793 795 if (RegisterID* local = resolveResult.local()) { 794 796 if (resolveResult.isReadOnly()) { 797 generator.emitReadOnlyExceptionIfNeeded(); 795 798 if (dst == generator.ignoredResult()) 796 799 return generator.emitToJSNumber(generator.newTemporary(), local); … … 1211 1214 1212 1215 if (RegisterID *local = resolveResult.local()) { 1213 if (resolveResult.isReadOnly()) 1216 if (resolveResult.isReadOnly()) { 1217 generator.emitReadOnlyExceptionIfNeeded(); 1214 1218 return emitReadModifyAssignment(generator, generator.finalDestination(dst), local, m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1219 } 1215 1220 1216 1221 if (generator.leftHandSideNeedsCopy(m_rightHasAssignments, m_right->isPure(generator))) { … … 1247 1252 1248 1253 if (RegisterID *local = resolveResult.local()) { 1249 if (resolveResult.isReadOnly()) 1254 if (resolveResult.isReadOnly()) { 1255 generator.emitReadOnlyExceptionIfNeeded(); 1250 1256 return generator.emitNode(dst, m_right); 1257 } 1251 1258 RegisterID* result = generator.emitNode(local, m_right); 1252 1259 return generator.moveToDestinationIfNeeded(dst, result);
Note: See TracChangeset
for help on using the changeset viewer.