Ignore:
Timestamp:
Jan 15, 2009, 10:52:13 PM (16 years ago)
Author:
[email protected]
Message:

2009-01-15 Gavin Barraclough <[email protected]>

Reviewed by Oliver Hunt.

Add support in ResultType to track that the results of bitops
are always of type int32_t.

  • parser/Nodes.cpp: (JSC::ReadModifyResolveNode::emitBytecode): (JSC::ReadModifyDotNode::emitBytecode): (JSC::ReadModifyBracketNode::emitBytecode):
  • parser/Nodes.h: (JSC::ExpressionNode::): (JSC::BooleanNode::): (JSC::NumberNode::): (JSC::StringNode::): (JSC::PrePostResolveNode::): (JSC::TypeOfResolveNode::): (JSC::TypeOfValueNode::): (JSC::UnaryPlusNode::): (JSC::NegateNode::): (JSC::BitwiseNotNode::): (JSC::LogicalNotNode::): (JSC::MultNode::): (JSC::DivNode::): (JSC::ModNode::): (JSC::SubNode::): (JSC::LeftShiftNode::): (JSC::RightShiftNode::): (JSC::UnsignedRightShiftNode::): (JSC::LessNode::): (JSC::GreaterNode::): (JSC::LessEqNode::): (JSC::GreaterEqNode::): (JSC::InstanceOfNode::): (JSC::EqualNode::): (JSC::NotEqualNode::): (JSC::StrictEqualNode::): (JSC::NotStrictEqualNode::): (JSC::BitAndNode::): (JSC::BitOrNode::): (JSC::BitXOrNode::): (JSC::LogicalOpNode::):
  • parser/ResultType.h: (JSC::ResultType::isInt32): (JSC::ResultType::isNotNumber): (JSC::ResultType::booleanType): (JSC::ResultType::numberType): (JSC::ResultType::numberTypeCanReuse): (JSC::ResultType::numberTypeCanReuseIsInt32): (JSC::ResultType::stringOrNumberTypeCanReuse): (JSC::ResultType::stringType): (JSC::ResultType::unknownType): (JSC::ResultType::forAdd): (JSC::ResultType::forBitOp): (JSC::OperandTypes::OperandTypes):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/Nodes.cpp

    r39910 r39961  
    13011301        if (generator.isLocalConstant(m_ident)) {
    13021302            RegisterID* src2 = generator.emitNode(m_right.get());
    1303             return emitReadModifyAssignment(generator, generator.finalDestination(dst), local, src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
     1303            return emitReadModifyAssignment(generator, generator.finalDestination(dst), local, src2, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
    13041304        }
    13051305       
     
    13081308            generator.emitMove(result.get(), local);
    13091309            RegisterID* src2 = generator.emitNode(m_right.get());
    1310             emitReadModifyAssignment(generator, result.get(), result.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
     1310            emitReadModifyAssignment(generator, result.get(), result.get(), src2, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
    13111311            generator.emitMove(local, result.get());
    13121312            return generator.moveToDestinationIfNeeded(dst, result.get());
     
    13141314       
    13151315        RegisterID* src2 = generator.emitNode(m_right.get());
    1316         RegisterID* result = emitReadModifyAssignment(generator, local, local, src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
     1316        RegisterID* result = emitReadModifyAssignment(generator, local, local, src2, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
    13171317        return generator.moveToDestinationIfNeeded(dst, result);
    13181318    }
     
    13241324        RefPtr<RegisterID> src1 = generator.emitGetScopedVar(generator.tempDestination(dst), depth, index, globalObject);
    13251325        RegisterID* src2 = generator.emitNode(m_right.get());
    1326         RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
     1326        RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
    13271327        generator.emitPutScopedVar(depth, index, result, globalObject);
    13281328        return result;
     
    13341334    RegisterID* src2 = generator.emitNode(m_right.get());
    13351335    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    1336     RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
     1336    RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
    13371337    return generator.emitPutById(base.get(), m_ident, result);
    13381338}
     
    14221422    RefPtr<RegisterID> value = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident);
    14231423    RegisterID* change = generator.emitNode(m_right.get());
    1424     RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
     1424    RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
    14251425
    14261426    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
     
    14941494    RefPtr<RegisterID> value = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property.get());
    14951495    RegisterID* change = generator.emitNode(m_right.get());
    1496     RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
     1496    RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()));
    14971497
    14981498    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
Note: See TracChangeset for help on using the changeset viewer.