| Index: Source/core/css/CSSCalculationValue.cpp
|
| diff --git a/Source/core/css/CSSCalculationValue.cpp b/Source/core/css/CSSCalculationValue.cpp
|
| index c0b94ba16c4cf8cac84900fd6fad68009922b87d..58ce6d7cd01cd2567fd26ce8bb098adaf50edfce 100644
|
| --- a/Source/core/css/CSSCalculationValue.cpp
|
| +++ b/Source/core/css/CSSCalculationValue.cpp
|
| @@ -47,6 +47,8 @@ enum ParseState {
|
|
|
| namespace WebCore {
|
|
|
| +DEFINE_GC_INFO(CSSCalcExpressionNode);
|
| +
|
| static CalculationCategory unitCategory(CSSPrimitiveValue::UnitTypes type)
|
| {
|
| switch (type) {
|
| @@ -179,19 +181,19 @@ CSSCalcExpressionNode::~CSSCalcExpressionNode()
|
| }
|
|
|
| class CSSCalcPrimitiveValue FINAL : public CSSCalcExpressionNode {
|
| - WTF_MAKE_FAST_ALLOCATED;
|
| + WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
|
| public:
|
|
|
| - static PassRefPtr<CSSCalcPrimitiveValue> create(PassRefPtr<CSSPrimitiveValue> value, bool isInteger)
|
| + static PassRefPtrWillBeRawPtr<CSSCalcPrimitiveValue> create(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> value, bool isInteger)
|
| {
|
| - return adoptRef(new CSSCalcPrimitiveValue(value, isInteger));
|
| + return adoptRefWillBeNoop(new CSSCalcPrimitiveValue(value, isInteger));
|
| }
|
|
|
| - static PassRefPtr<CSSCalcPrimitiveValue> create(double value, CSSPrimitiveValue::UnitTypes type, bool isInteger)
|
| + static PassRefPtrWillBeRawPtr<CSSCalcPrimitiveValue> create(double value, CSSPrimitiveValue::UnitTypes type, bool isInteger)
|
| {
|
| if (std::isnan(value) || std::isinf(value))
|
| return 0;
|
| - return adoptRef(new CSSCalcPrimitiveValue(CSSPrimitiveValue::create(value, type).get(), isInteger));
|
| + return adoptRefWillBeNoop(new CSSCalcPrimitiveValue(CSSPrimitiveValue::create(value, type).get(), isInteger));
|
| }
|
|
|
| virtual bool isZero() const OVERRIDE
|
| @@ -263,14 +265,21 @@ public:
|
| return CSSPrimitiveValue::UnitTypes(m_value->primitiveType());
|
| }
|
|
|
| +
|
| + virtual void trace(Visitor* visitor)
|
| + {
|
| + visitor->trace(m_value);
|
| + CSSCalcExpressionNode::trace(visitor);
|
| + }
|
| +
|
| private:
|
| - explicit CSSCalcPrimitiveValue(PassRefPtr<CSSPrimitiveValue> value, bool isInteger)
|
| + CSSCalcPrimitiveValue(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> value, bool isInteger)
|
| : CSSCalcExpressionNode(unitCategory((CSSPrimitiveValue::UnitTypes)value->primitiveType()), isInteger)
|
| , m_value(value)
|
| {
|
| }
|
|
|
| - RefPtr<CSSPrimitiveValue> m_value;
|
| + RefPtrWillBeMember<CSSPrimitiveValue> m_value;
|
| };
|
|
|
| static const CalculationCategory addSubtractResult[CalcOther][CalcOther] = {
|
| @@ -317,9 +326,8 @@ static bool isIntegerResult(const CSSCalcExpressionNode* leftSide, const CSSCalc
|
| }
|
|
|
| class CSSCalcBinaryOperation FINAL : public CSSCalcExpressionNode {
|
| -
|
| public:
|
| - static PassRefPtr<CSSCalcExpressionNode> create(PassRefPtr<CSSCalcExpressionNode> leftSide, PassRefPtr<CSSCalcExpressionNode> rightSide, CalcOperator op)
|
| + static PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> create(PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> leftSide, PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> rightSide, CalcOperator op)
|
| {
|
| ASSERT(leftSide->category() != CalcOther && rightSide->category() != CalcOther);
|
|
|
| @@ -327,10 +335,10 @@ public:
|
| if (newCategory == CalcOther)
|
| return 0;
|
|
|
| - return adoptRef(new CSSCalcBinaryOperation(leftSide, rightSide, op, newCategory));
|
| + return adoptRefWillBeNoop(new CSSCalcBinaryOperation(leftSide, rightSide, op, newCategory));
|
| }
|
|
|
| - static PassRefPtr<CSSCalcExpressionNode> createSimplified(PassRefPtr<CSSCalcExpressionNode> leftSide, PassRefPtr<CSSCalcExpressionNode> rightSide, CalcOperator op)
|
| + static PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> createSimplified(PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> leftSide, PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> rightSide, CalcOperator op)
|
| {
|
| CalculationCategory leftCategory = leftSide->category();
|
| CalculationCategory rightCategory = rightSide->category();
|
| @@ -475,9 +483,15 @@ public:
|
| return CSSPrimitiveValue::CSS_UNKNOWN;
|
| }
|
|
|
| + virtual void trace(Visitor* visitor)
|
| + {
|
| + visitor->trace(m_leftSide);
|
| + visitor->trace(m_rightSide);
|
| + CSSCalcExpressionNode::trace(visitor);
|
| + }
|
|
|
| private:
|
| - CSSCalcBinaryOperation(PassRefPtr<CSSCalcExpressionNode> leftSide, PassRefPtr<CSSCalcExpressionNode> rightSide, CalcOperator op, CalculationCategory category)
|
| + CSSCalcBinaryOperation(PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> leftSide, PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> rightSide, CalcOperator op, CalculationCategory category)
|
| : CSSCalcExpressionNode(category, isIntegerResult(leftSide.get(), rightSide.get(), op))
|
| , m_leftSide(leftSide)
|
| , m_rightSide(rightSide)
|
| @@ -516,8 +530,8 @@ private:
|
| return 0;
|
| }
|
|
|
| - const RefPtr<CSSCalcExpressionNode> m_leftSide;
|
| - const RefPtr<CSSCalcExpressionNode> m_rightSide;
|
| + const RefPtrWillBeMember<CSSCalcExpressionNode> m_leftSide;
|
| + const RefPtrWillBeMember<CSSCalcExpressionNode> m_rightSide;
|
| const CalcOperator m_operator;
|
| };
|
|
|
| @@ -532,8 +546,9 @@ static ParseState checkDepthAndIndex(int* depth, unsigned index, CSSParserValueL
|
| }
|
|
|
| class CSSCalcExpressionNodeParser {
|
| + DISALLOW_ALLOCATION(); // Is only ever stack allocated.
|
| public:
|
| - PassRefPtr<CSSCalcExpressionNode> parseCalc(CSSParserValueList* tokens)
|
| + PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> parseCalc(CSSParserValueList* tokens)
|
| {
|
| unsigned index = 0;
|
| Value result;
|
| @@ -546,7 +561,9 @@ public:
|
|
|
| private:
|
| struct Value {
|
| - RefPtr<CSSCalcExpressionNode> value;
|
| + DISALLOW_ALLOCATION(); // Is only ever stack allocated.
|
| + public:
|
| + RefPtrWillBeRawPtr<CSSCalcExpressionNode> value;
|
| };
|
|
|
| char operatorValue(CSSParserValueList* tokens, unsigned index)
|
| @@ -655,17 +672,17 @@ private:
|
| }
|
| };
|
|
|
| -PassRefPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(PassRefPtr<CSSPrimitiveValue> value, bool isInteger)
|
| +PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> value, bool isInteger)
|
| {
|
| return CSSCalcPrimitiveValue::create(value, isInteger);
|
| }
|
|
|
| -PassRefPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(PassRefPtr<CSSCalcExpressionNode> leftSide, PassRefPtr<CSSCalcExpressionNode> rightSide, CalcOperator op)
|
| +PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> leftSide, PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> rightSide, CalcOperator op)
|
| {
|
| return CSSCalcBinaryOperation::create(leftSide, rightSide, op);
|
| }
|
|
|
| -PassRefPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(const CalcExpressionNode* node, float zoom)
|
| +PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(const CalcExpressionNode* node, float zoom)
|
| {
|
| switch (node->type()) {
|
| case CalcExpressionNodeNumber: {
|
| @@ -702,7 +719,7 @@ PassRefPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(const CalcE
|
| return 0;
|
| }
|
|
|
| -PassRefPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(const Length& length, float zoom)
|
| +PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(const Length& length, float zoom)
|
| {
|
| switch (length.type()) {
|
| case Percent:
|
| @@ -731,7 +748,7 @@ PassRefPtr<CSSCalcExpressionNode> CSSCalcValue::createExpressionNode(const Lengt
|
| PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(CSSParserString name, CSSParserValueList* parserValueList, ValueRange range)
|
| {
|
| CSSCalcExpressionNodeParser parser;
|
| - RefPtr<CSSCalcExpressionNode> expression;
|
| + RefPtrWillBeRawPtr<CSSCalcExpressionNode> expression;
|
|
|
| if (equalIgnoringCase(name, "calc(") || equalIgnoringCase(name, "-webkit-calc("))
|
| expression = parser.parseCalc(parserValueList);
|
| @@ -740,9 +757,15 @@ PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(CSSParserString name,
|
| return expression ? adoptRefCountedWillBeRefCountedGarbageCollected(new CSSCalcValue(expression, range)) : 0;
|
| }
|
|
|
| -PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(PassRefPtr<CSSCalcExpressionNode> expression, ValueRange range)
|
| +PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> expression, ValueRange range)
|
| {
|
| return adoptRefCountedWillBeRefCountedGarbageCollected(new CSSCalcValue(expression, range));
|
| }
|
|
|
| +void CSSCalcValue::traceAfterDispatch(Visitor* visitor)
|
| +{
|
| + visitor->trace(m_expression);
|
| + CSSValue::traceAfterDispatch(visitor);
|
| +}
|
| +
|
| } // namespace WebCore
|
|
|