Ignore:
Timestamp:
Sep 5, 2012, 2:44:43 PM (13 years ago)
Author:
[email protected]
Message:

Throw exceptions when assigning to const in strict mode
https://bugs.webkit.org/show_bug.cgi?id=95894

Reviewed by Oliver Hunt.

Currently, this never happens; but it will start happening once the
callee is a local const register. In this patch, there's no change in
behavior.

  • bytecompiler/BytecodeGenerator.cpp:

(JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded): Helper function
for doing the throwing.

  • bytecompiler/BytecodeGenerator.h:
  • bytecompiler/NodesCodegen.cpp:

(JSC::PostfixResolveNode::emitBytecode):
(JSC::PrefixResolveNode::emitBytecode):
(JSC::ReadModifyResolveNode::emitBytecode):
(JSC::AssignResolveNode::emitBytecode): Call the helper function.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r127544 r127647  
    610610
    611611    if (RegisterID* local = resolveResult.local()) {
    612         if (resolveResult.isReadOnly())
     612        if (resolveResult.isReadOnly()) {
     613            generator.emitReadOnlyExceptionIfNeeded();
    613614            return generator.emitToJSNumber(generator.finalDestination(dst), local);
     615        }
    614616        if (dst == generator.ignoredResult())
    615617            return emitPreIncOrDec(generator, local, m_operator);
     
    793795    if (RegisterID* local = resolveResult.local()) {
    794796        if (resolveResult.isReadOnly()) {
     797            generator.emitReadOnlyExceptionIfNeeded();
    795798            if (dst == generator.ignoredResult())
    796799                return generator.emitToJSNumber(generator.newTemporary(), local);
     
    12111214
    12121215    if (RegisterID *local = resolveResult.local()) {
    1213         if (resolveResult.isReadOnly())
     1216        if (resolveResult.isReadOnly()) {
     1217            generator.emitReadOnlyExceptionIfNeeded();
    12141218            return emitReadModifyAssignment(generator, generator.finalDestination(dst), local, m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
     1219        }
    12151220       
    12161221        if (generator.leftHandSideNeedsCopy(m_rightHasAssignments, m_right->isPure(generator))) {
     
    12471252
    12481253    if (RegisterID *local = resolveResult.local()) {
    1249         if (resolveResult.isReadOnly())
     1254        if (resolveResult.isReadOnly()) {
     1255            generator.emitReadOnlyExceptionIfNeeded();
    12501256            return generator.emitNode(dst, m_right);
     1257        }
    12511258        RegisterID* result = generator.emitNode(local, m_right);
    12521259        return generator.moveToDestinationIfNeeded(dst, result);
Note: See TracChangeset for help on using the changeset viewer.