Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: Source/core/css/CSSValueObject.cpp

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/css/CSSValueObject.h ('k') | Source/core/css/CSSValuePool.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Andreas Kling (kling@webkit.org) 2 * Copyright (C) 2011 Andreas Kling (kling@webkit.org)
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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * 12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 * 24 *
25 */ 25 */
26 26
27 #include "config.h" 27 #include "config.h"
28 #include "core/css/CSSValue.h" 28 #include "core/css/CSSValueObject.h"
29 29
30 #include "core/css/CSSBorderImageSliceValue.h" 30 #include "core/css/CSSBorderImageSliceValue.h"
31 #include "core/css/CSSCalculationValue.h" 31 #include "core/css/CSSCalculationValue.h"
32 #include "core/css/CSSCanvasValue.h" 32 #include "core/css/CSSCanvasValue.h"
33 #include "core/css/CSSContentDistributionValue.h" 33 #include "core/css/CSSContentDistributionValue.h"
34 #include "core/css/CSSCrossfadeValue.h" 34 #include "core/css/CSSCrossfadeValue.h"
35 #include "core/css/CSSCursorImageValue.h" 35 #include "core/css/CSSCursorImageValue.h"
36 #include "core/css/CSSFontFaceSrcValue.h" 36 #include "core/css/CSSFontFaceSrcValue.h"
37 #include "core/css/CSSFontFeatureValue.h" 37 #include "core/css/CSSFontFeatureValue.h"
38 #include "core/css/CSSFunctionValue.h" 38 #include "core/css/CSSFunctionValue.h"
(...skipping 10 matching lines...) Expand all
49 #include "core/css/CSSReflectValue.h" 49 #include "core/css/CSSReflectValue.h"
50 #include "core/css/CSSSVGDocumentValue.h" 50 #include "core/css/CSSSVGDocumentValue.h"
51 #include "core/css/CSSShadowValue.h" 51 #include "core/css/CSSShadowValue.h"
52 #include "core/css/CSSTimingFunctionValue.h" 52 #include "core/css/CSSTimingFunctionValue.h"
53 #include "core/css/CSSUnicodeRangeValue.h" 53 #include "core/css/CSSUnicodeRangeValue.h"
54 #include "core/css/CSSUnsetValue.h" 54 #include "core/css/CSSUnsetValue.h"
55 #include "core/css/CSSValueList.h" 55 #include "core/css/CSSValueList.h"
56 56
57 namespace blink { 57 namespace blink {
58 58
59 struct SameSizeAsCSSValue : public RefCountedWillBeGarbageCollectedFinalized<Sam eSizeAsCSSValue> 59 struct SameSizeAsCSSValueObject : public RefCountedWillBeGarbageCollectedFinaliz ed<SameSizeAsCSSValueObject> {
60 {
61 uint32_t bitfields; 60 uint32_t bitfields;
62 }; 61 };
63 62
64 static_assert(sizeof(CSSValue) <= sizeof(SameSizeAsCSSValue), "CSSValue should s tay small"); 63 static_assert(sizeof(CSSValueObject) <= sizeof(SameSizeAsCSSValueObject), "CSSVa lueObject should stay small");
65 64
66 bool CSSValue::isImplicitInitialValue() const 65 bool CSSValueObject::isImplicitInitialValue() const
67 { 66 {
68 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit(); 67 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit();
69 } 68 }
70 69
71 bool CSSValue::hasFailedOrCanceledSubresources() const 70 bool CSSValueObject::hasFailedOrCanceledSubresources() const
72 { 71 {
73 if (isValueList()) 72 if (isValueList())
74 return toCSSValueList(this)->hasFailedOrCanceledSubresources(); 73 return toCSSValueList(this)->hasFailedOrCanceledSubresources();
75 if (classType() == FontFaceSrcClass) 74 if (classType() == FontFaceSrcClass)
76 return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources(); 75 return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources();
77 if (classType() == ImageClass) 76 if (classType() == ImageClass)
78 return toCSSImageValue(this)->hasFailedOrCanceledSubresources(); 77 return toCSSImageValue(this)->hasFailedOrCanceledSubresources();
79 if (classType() == CrossfadeClass) 78 if (classType() == CrossfadeClass)
80 return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources(); 79 return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources();
81 if (classType() == ImageSetClass) 80 if (classType() == ImageSetClass)
82 return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources(); 81 return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources();
83 82
84 return false; 83 return false;
85 } 84 }
86 85
87 template<class ChildClassType> 86 template<class ChildClassType>
88 inline static bool compareCSSValues(const CSSValue& first, const CSSValue& secon d) 87 inline static bool compareCSSValues(const CSSValueObject& first, const CSSValueO bject& second)
89 { 88 {
90 return static_cast<const ChildClassType&>(first).equals(static_cast<const Ch ildClassType&>(second)); 89 return static_cast<const ChildClassType&>(first).equals(static_cast<const Ch ildClassType&>(second));
91 } 90 }
92 91
93 bool CSSValue::equals(const CSSValue& other) const 92 bool CSSValueObject::equals(const CSSValueObject& other) const
94 { 93 {
95 if (m_classType == other.m_classType) { 94 if (m_classType == other.m_classType) {
96 switch (m_classType) { 95 switch (m_classType) {
97 case BorderImageSliceClass: 96 case BorderImageSliceClass:
98 return compareCSSValues<CSSBorderImageSliceValue>(*this, other); 97 return compareCSSValues<CSSBorderImageSliceValue>(*this, other);
99 case CanvasClass: 98 case CanvasClass:
100 return compareCSSValues<CSSCanvasValue>(*this, other); 99 return compareCSSValues<CSSCanvasValue>(*this, other);
101 case CursorImageClass: 100 case CursorImageClass:
102 return compareCSSValues<CSSCursorImageValue>(*this, other); 101 return compareCSSValues<CSSCursorImageValue>(*this, other);
103 case FontFaceSrcClass: 102 case FontFaceSrcClass:
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 case CSSContentDistributionClass: 150 case CSSContentDistributionClass:
152 return compareCSSValues<CSSContentDistributionValue>(*this, other); 151 return compareCSSValues<CSSContentDistributionValue>(*this, other);
153 default: 152 default:
154 ASSERT_NOT_REACHED(); 153 ASSERT_NOT_REACHED();
155 return false; 154 return false;
156 } 155 }
157 } 156 }
158 return false; 157 return false;
159 } 158 }
160 159
161 String CSSValue::cssText() const 160 String CSSValueObject::cssText() const
162 { 161 {
163 switch (classType()) { 162 switch (classType()) {
164 case BorderImageSliceClass: 163 case BorderImageSliceClass:
165 return toCSSBorderImageSliceValue(this)->customCSSText(); 164 return toCSSBorderImageSliceValue(this)->customCSSText();
166 case CanvasClass: 165 case CanvasClass:
167 return toCSSCanvasValue(this)->customCSSText(); 166 return toCSSCanvasValue(this)->customCSSText();
168 case CursorImageClass: 167 case CursorImageClass:
169 return toCSSCursorImageValue(this)->customCSSText(); 168 return toCSSCursorImageValue(this)->customCSSText();
170 case FontFaceSrcClass: 169 case FontFaceSrcClass:
171 return toCSSFontFaceSrcValue(this)->customCSSText(); 170 return toCSSFontFaceSrcValue(this)->customCSSText();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 return toCSSImageSetValue(this)->customCSSText(); 214 return toCSSImageSetValue(this)->customCSSText();
216 case CSSSVGDocumentClass: 215 case CSSSVGDocumentClass:
217 return toCSSSVGDocumentValue(this)->customCSSText(); 216 return toCSSSVGDocumentValue(this)->customCSSText();
218 case CSSContentDistributionClass: 217 case CSSContentDistributionClass:
219 return toCSSContentDistributionValue(this)->customCSSText(); 218 return toCSSContentDistributionValue(this)->customCSSText();
220 } 219 }
221 ASSERT_NOT_REACHED(); 220 ASSERT_NOT_REACHED();
222 return String(); 221 return String();
223 } 222 }
224 223
225 void CSSValue::destroy() 224 void CSSValueObject::destroy()
226 { 225 {
227 switch (classType()) { 226 switch (classType()) {
228 case BorderImageSliceClass: 227 case BorderImageSliceClass:
229 delete toCSSBorderImageSliceValue(this); 228 delete toCSSBorderImageSliceValue(this);
230 return; 229 return;
231 case CanvasClass: 230 case CanvasClass:
232 delete toCSSCanvasValue(this); 231 delete toCSSCanvasValue(this);
233 return; 232 return;
234 case CursorImageClass: 233 case CursorImageClass:
235 delete toCSSCursorImageValue(this); 234 delete toCSSCursorImageValue(this);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 case CSSSVGDocumentClass: 305 case CSSSVGDocumentClass:
307 delete toCSSSVGDocumentValue(this); 306 delete toCSSSVGDocumentValue(this);
308 return; 307 return;
309 case CSSContentDistributionClass: 308 case CSSContentDistributionClass:
310 delete toCSSContentDistributionValue(this); 309 delete toCSSContentDistributionValue(this);
311 return; 310 return;
312 } 311 }
313 ASSERT_NOT_REACHED(); 312 ASSERT_NOT_REACHED();
314 } 313 }
315 314
316 void CSSValue::finalizeGarbageCollectedObject() 315 void CSSValueObject::finalizeGarbageCollectedObject()
317 { 316 {
318 switch (classType()) { 317 switch (classType()) {
319 case BorderImageSliceClass: 318 case BorderImageSliceClass:
320 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue(); 319 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue();
321 return; 320 return;
322 case CanvasClass: 321 case CanvasClass:
323 toCSSCanvasValue(this)->~CSSCanvasValue(); 322 toCSSCanvasValue(this)->~CSSCanvasValue();
324 return; 323 return;
325 case CursorImageClass: 324 case CursorImageClass:
326 toCSSCursorImageValue(this)->~CSSCursorImageValue(); 325 toCSSCursorImageValue(this)->~CSSCursorImageValue();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 case CSSSVGDocumentClass: 396 case CSSSVGDocumentClass:
398 toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue(); 397 toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue();
399 return; 398 return;
400 case CSSContentDistributionClass: 399 case CSSContentDistributionClass:
401 toCSSContentDistributionValue(this)->~CSSContentDistributionValue(); 400 toCSSContentDistributionValue(this)->~CSSContentDistributionValue();
402 return; 401 return;
403 } 402 }
404 ASSERT_NOT_REACHED(); 403 ASSERT_NOT_REACHED();
405 } 404 }
406 405
407 DEFINE_TRACE(CSSValue) 406 DEFINE_TRACE(CSSValueObject)
408 { 407 {
409 switch (classType()) { 408 switch (classType()) {
410 case BorderImageSliceClass: 409 case BorderImageSliceClass:
411 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor); 410 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor);
412 return; 411 return;
413 case CanvasClass: 412 case CanvasClass:
414 toCSSCanvasValue(this)->traceAfterDispatch(visitor); 413 toCSSCanvasValue(this)->traceAfterDispatch(visitor);
415 return; 414 return;
416 case CursorImageClass: 415 case CursorImageClass:
417 toCSSCursorImageValue(this)->traceAfterDispatch(visitor); 416 toCSSCursorImageValue(this)->traceAfterDispatch(visitor);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor); 488 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor);
490 return; 489 return;
491 case CSSContentDistributionClass: 490 case CSSContentDistributionClass:
492 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor); 491 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor);
493 return; 492 return;
494 } 493 }
495 ASSERT_NOT_REACHED(); 494 ASSERT_NOT_REACHED();
496 } 495 }
497 496
498 } 497 }
OLDNEW
« no previous file with comments | « Source/core/css/CSSValueObject.h ('k') | Source/core/css/CSSValuePool.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698