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 |