| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 { | 535 { |
| 536 (*depth)++; | 536 (*depth)++; |
| 537 if (*depth > maxExpressionDepth) | 537 if (*depth > maxExpressionDepth) |
| 538 return TooDeep; | 538 return TooDeep; |
| 539 if (index >= tokens->size()) | 539 if (index >= tokens->size()) |
| 540 return NoMoreTokens; | 540 return NoMoreTokens; |
| 541 return OK; | 541 return OK; |
| 542 } | 542 } |
| 543 | 543 |
| 544 class CSSCalcExpressionNodeParser { | 544 class CSSCalcExpressionNodeParser { |
| 545 DISALLOW_ALLOCATION(); // Is only ever stack allocated. | 545 STACK_ALLOCATED(); |
| 546 public: | 546 public: |
| 547 PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> parseCalc(CSSParserValueList*
tokens) | 547 PassRefPtrWillBeRawPtr<CSSCalcExpressionNode> parseCalc(CSSParserValueList*
tokens) |
| 548 { | 548 { |
| 549 unsigned index = 0; | 549 unsigned index = 0; |
| 550 Value result; | 550 Value result; |
| 551 bool ok = parseValueExpression(tokens, 0, &index, &result); | 551 bool ok = parseValueExpression(tokens, 0, &index, &result); |
| 552 ASSERT_WITH_SECURITY_IMPLICATION(index <= tokens->size()); | 552 ASSERT_WITH_SECURITY_IMPLICATION(index <= tokens->size()); |
| 553 if (!ok || index != tokens->size()) | 553 if (!ok || index != tokens->size()) |
| 554 return nullptr; | 554 return nullptr; |
| 555 return result.value; | 555 return result.value; |
| 556 } | 556 } |
| 557 | 557 |
| 558 private: | 558 private: |
| 559 struct Value { | 559 struct Value { |
| 560 DISALLOW_ALLOCATION(); // Is only ever stack allocated. | 560 STACK_ALLOCATED(); |
| 561 public: | 561 public: |
| 562 RefPtrWillBeRawPtr<CSSCalcExpressionNode> value; | 562 RefPtrWillBeMember<CSSCalcExpressionNode> value; |
| 563 }; | 563 }; |
| 564 | 564 |
| 565 char operatorValue(CSSParserValueList* tokens, unsigned index) | 565 char operatorValue(CSSParserValueList* tokens, unsigned index) |
| 566 { | 566 { |
| 567 if (index >= tokens->size()) | 567 if (index >= tokens->size()) |
| 568 return 0; | 568 return 0; |
| 569 CSSParserValue* value = tokens->valueAt(index); | 569 CSSParserValue* value = tokens->valueAt(index); |
| 570 if (value->unit != CSSParserValue::Operator) | 570 if (value->unit != CSSParserValue::Operator) |
| 571 return 0; | 571 return 0; |
| 572 | 572 |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 ASSERT_NOT_REACHED(); | 737 ASSERT_NOT_REACHED(); |
| 738 return nullptr; | 738 return nullptr; |
| 739 } | 739 } |
| 740 ASSERT_NOT_REACHED(); | 740 ASSERT_NOT_REACHED(); |
| 741 return nullptr; | 741 return nullptr; |
| 742 } | 742 } |
| 743 | 743 |
| 744 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(CSSParserString name,
CSSParserValueList* parserValueList, ValueRange range) | 744 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(CSSParserString name,
CSSParserValueList* parserValueList, ValueRange range) |
| 745 { | 745 { |
| 746 CSSCalcExpressionNodeParser parser; | 746 CSSCalcExpressionNodeParser parser; |
| 747 RefPtrWillBeRawPtr<CSSCalcExpressionNode> expression; | 747 RefPtrWillBeRawPtr<CSSCalcExpressionNode> expression = nullptr; |
| 748 | 748 |
| 749 if (equalIgnoringCase(name, "calc(") || equalIgnoringCase(name, "-webkit-cal
c(")) | 749 if (equalIgnoringCase(name, "calc(") || equalIgnoringCase(name, "-webkit-cal
c(")) |
| 750 expression = parser.parseCalc(parserValueList); | 750 expression = parser.parseCalc(parserValueList); |
| 751 // FIXME calc (http://webkit.org/b/16662) Add parsing for min and max here | 751 // FIXME calc (http://webkit.org/b/16662) Add parsing for min and max here |
| 752 | 752 |
| 753 return expression ? adoptRefWillBeRefCountedGarbageCollected(new CSSCalcValu
e(expression, range)) : nullptr; | 753 return expression ? adoptRefWillBeRefCountedGarbageCollected(new CSSCalcValu
e(expression, range)) : nullptr; |
| 754 } | 754 } |
| 755 | 755 |
| 756 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(PassRefPtrWillBeRawPtr
<CSSCalcExpressionNode> expression, ValueRange range) | 756 PassRefPtrWillBeRawPtr<CSSCalcValue> CSSCalcValue::create(PassRefPtrWillBeRawPtr
<CSSCalcExpressionNode> expression, ValueRange range) |
| 757 { | 757 { |
| 758 return adoptRefWillBeRefCountedGarbageCollected(new CSSCalcValue(expression,
range)); | 758 return adoptRefWillBeRefCountedGarbageCollected(new CSSCalcValue(expression,
range)); |
| 759 } | 759 } |
| 760 | 760 |
| 761 void CSSCalcValue::traceAfterDispatch(Visitor* visitor) | 761 void CSSCalcValue::traceAfterDispatch(Visitor* visitor) |
| 762 { | 762 { |
| 763 visitor->trace(m_expression); | 763 visitor->trace(m_expression); |
| 764 CSSValue::traceAfterDispatch(visitor); | 764 CSSValue::traceAfterDispatch(visitor); |
| 765 } | 765 } |
| 766 | 766 |
| 767 } // namespace WebCore | 767 } // namespace WebCore |
| OLD | NEW |