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

Side by Side Diff: Source/core/css/CSSValue.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: Some small fixes to (hopefully) fix some broken tests Created 5 years, 6 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
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
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 { 60 {
61 uint32_t bitfields; 61 uint32_t bitfields;
62 }; 62 };
63 63
64 static_assert(sizeof(CSSValue) <= sizeof(SameSizeAsCSSValue), "CSSValue should s tay small"); 64 static_assert(sizeof(CSSValueObject) <= sizeof(SameSizeAsCSSValueObject), "CSSVa lCSSValueObjectue should stay small");
65 65
66 bool CSSValue::isImplicitInitialValue() const 66 bool CSSValueObject::isImplicitInitialValue() const
67 { 67 {
68 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit(); 68 return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit();
69 } 69 }
70 70
71 bool CSSValue::hasFailedOrCanceledSubresources() const 71 bool CSSValueObject::hasFailedOrCanceledSubresources() const
72 { 72 {
73 if (isValueList()) 73 if (isValueList())
74 return toCSSValueList(this)->hasFailedOrCanceledSubresources(); 74 return toCSSValueList(this)->hasFailedOrCanceledSubresources();
75 if (classType() == FontFaceSrcClass) 75 if (classType() == FontFaceSrcClass)
76 return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources(); 76 return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources();
77 if (classType() == ImageClass) 77 if (classType() == ImageClass)
78 return toCSSImageValue(this)->hasFailedOrCanceledSubresources(); 78 return toCSSImageValue(this)->hasFailedOrCanceledSubresources();
79 if (classType() == CrossfadeClass) 79 if (classType() == CrossfadeClass)
80 return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources(); 80 return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources();
81 if (classType() == ImageSetClass) 81 if (classType() == ImageSetClass)
82 return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources(); 82 return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources();
83 83
84 return false; 84 return false;
85 } 85 }
86 86
87 template<class ChildClassType> 87 template<class ChildClassType>
88 inline static bool compareCSSValues(const CSSValue& first, const CSSValue& secon d) 88 inline static bool compareCSSValues(const CSSValueObject& first, const CSSValueO bject& second)
89 { 89 {
90 return static_cast<const ChildClassType&>(first).equals(static_cast<const Ch ildClassType&>(second)); 90 return static_cast<const ChildClassType&>(first).equals(static_cast<const Ch ildClassType&>(second));
91 } 91 }
92 92
93 bool CSSValue::equals(const CSSValue& other) const 93 bool CSSValueObject::equals(const CSSValueObject& other) const
94 { 94 {
95 if (m_classType == other.m_classType) { 95 if (m_classType == other.m_classType) {
96 switch (m_classType) { 96 switch (m_classType) {
97 case BorderImageSliceClass: 97 case BorderImageSliceClass:
98 return compareCSSValues<CSSBorderImageSliceValue>(*this, other); 98 return compareCSSValues<CSSBorderImageSliceValue>(*this, other);
99 case CanvasClass: 99 case CanvasClass:
100 return compareCSSValues<CSSCanvasValue>(*this, other); 100 return compareCSSValues<CSSCanvasValue>(*this, other);
101 case CursorImageClass: 101 case CursorImageClass:
102 return compareCSSValues<CSSCursorImageValue>(*this, other); 102 return compareCSSValues<CSSCursorImageValue>(*this, other);
103 case FontFaceSrcClass: 103 case FontFaceSrcClass:
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 case CSSContentDistributionClass: 151 case CSSContentDistributionClass:
152 return compareCSSValues<CSSContentDistributionValue>(*this, other); 152 return compareCSSValues<CSSContentDistributionValue>(*this, other);
153 default: 153 default:
154 ASSERT_NOT_REACHED(); 154 ASSERT_NOT_REACHED();
155 return false; 155 return false;
156 } 156 }
157 } 157 }
158 return false; 158 return false;
159 } 159 }
160 160
161 String CSSValue::cssText() const 161 String CSSValueObject::cssText() const
162 { 162 {
163 switch (classType()) { 163 switch (classType()) {
164 case BorderImageSliceClass: 164 case BorderImageSliceClass:
165 return toCSSBorderImageSliceValue(this)->customCSSText(); 165 return toCSSBorderImageSliceValue(this)->customCSSText();
166 case CanvasClass: 166 case CanvasClass:
167 return toCSSCanvasValue(this)->customCSSText(); 167 return toCSSCanvasValue(this)->customCSSText();
168 case CursorImageClass: 168 case CursorImageClass:
169 return toCSSCursorImageValue(this)->customCSSText(); 169 return toCSSCursorImageValue(this)->customCSSText();
170 case FontFaceSrcClass: 170 case FontFaceSrcClass:
171 return toCSSFontFaceSrcValue(this)->customCSSText(); 171 return toCSSFontFaceSrcValue(this)->customCSSText();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 return toCSSImageSetValue(this)->customCSSText(); 215 return toCSSImageSetValue(this)->customCSSText();
216 case CSSSVGDocumentClass: 216 case CSSSVGDocumentClass:
217 return toCSSSVGDocumentValue(this)->customCSSText(); 217 return toCSSSVGDocumentValue(this)->customCSSText();
218 case CSSContentDistributionClass: 218 case CSSContentDistributionClass:
219 return toCSSContentDistributionValue(this)->customCSSText(); 219 return toCSSContentDistributionValue(this)->customCSSText();
220 } 220 }
221 ASSERT_NOT_REACHED(); 221 ASSERT_NOT_REACHED();
222 return String(); 222 return String();
223 } 223 }
224 224
225 void CSSValue::destroy() 225 void CSSValueObject::destroy()
226 { 226 {
227 switch (classType()) { 227 switch (classType()) {
228 case BorderImageSliceClass: 228 case BorderImageSliceClass:
229 delete toCSSBorderImageSliceValue(this); 229 delete toCSSBorderImageSliceValue(this);
230 return; 230 return;
231 case CanvasClass: 231 case CanvasClass:
232 delete toCSSCanvasValue(this); 232 delete toCSSCanvasValue(this);
233 return; 233 return;
234 case CursorImageClass: 234 case CursorImageClass:
235 delete toCSSCursorImageValue(this); 235 delete toCSSCursorImageValue(this);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 case CSSSVGDocumentClass: 306 case CSSSVGDocumentClass:
307 delete toCSSSVGDocumentValue(this); 307 delete toCSSSVGDocumentValue(this);
308 return; 308 return;
309 case CSSContentDistributionClass: 309 case CSSContentDistributionClass:
310 delete toCSSContentDistributionValue(this); 310 delete toCSSContentDistributionValue(this);
311 return; 311 return;
312 } 312 }
313 ASSERT_NOT_REACHED(); 313 ASSERT_NOT_REACHED();
314 } 314 }
315 315
316 void CSSValue::finalizeGarbageCollectedObject() 316 void CSSValueObject::finalizeGarbageCollectedObject()
317 { 317 {
318 switch (classType()) { 318 switch (classType()) {
319 case BorderImageSliceClass: 319 case BorderImageSliceClass:
320 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue(); 320 toCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue();
321 return; 321 return;
322 case CanvasClass: 322 case CanvasClass:
323 toCSSCanvasValue(this)->~CSSCanvasValue(); 323 toCSSCanvasValue(this)->~CSSCanvasValue();
324 return; 324 return;
325 case CursorImageClass: 325 case CursorImageClass:
326 toCSSCursorImageValue(this)->~CSSCursorImageValue(); 326 toCSSCursorImageValue(this)->~CSSCursorImageValue();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 case CSSSVGDocumentClass: 397 case CSSSVGDocumentClass:
398 toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue(); 398 toCSSSVGDocumentValue(this)->~CSSSVGDocumentValue();
399 return; 399 return;
400 case CSSContentDistributionClass: 400 case CSSContentDistributionClass:
401 toCSSContentDistributionValue(this)->~CSSContentDistributionValue(); 401 toCSSContentDistributionValue(this)->~CSSContentDistributionValue();
402 return; 402 return;
403 } 403 }
404 ASSERT_NOT_REACHED(); 404 ASSERT_NOT_REACHED();
405 } 405 }
406 406
407 DEFINE_TRACE(CSSValue) 407 DEFINE_TRACE(CSSValueObject)
408 { 408 {
409 switch (classType()) { 409 switch (classType()) {
410 case BorderImageSliceClass: 410 case BorderImageSliceClass:
411 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor); 411 toCSSBorderImageSliceValue(this)->traceAfterDispatch(visitor);
412 return; 412 return;
413 case CanvasClass: 413 case CanvasClass:
414 toCSSCanvasValue(this)->traceAfterDispatch(visitor); 414 toCSSCanvasValue(this)->traceAfterDispatch(visitor);
415 return; 415 return;
416 case CursorImageClass: 416 case CursorImageClass:
417 toCSSCursorImageValue(this)->traceAfterDispatch(visitor); 417 toCSSCursorImageValue(this)->traceAfterDispatch(visitor);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 case CSSSVGDocumentClass: 488 case CSSSVGDocumentClass:
489 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor); 489 toCSSSVGDocumentValue(this)->traceAfterDispatch(visitor);
490 return; 490 return;
491 case CSSContentDistributionClass: 491 case CSSContentDistributionClass:
492 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor); 492 toCSSContentDistributionValue(this)->traceAfterDispatch(visitor);
493 return; 493 return;
494 } 494 }
495 ASSERT_NOT_REACHED(); 495 ASSERT_NOT_REACHED();
496 } 496 }
497 497
498 DEFINE_TRACE(NullableCSSValue)
499 {
500 if (m_data)
501 visitor->trace(*m_data);
498 } 502 }
503
504 DEFINE_TRACE(CSSValue)
505 {
506 ASSERT(m_data);
507 visitor->trace(*m_data);
508 }
509
510 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698