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

Side by Side Diff: Source/core/css/CSSPrimitiveValue.h

Issue 1265903002: CSSValue Immediates: Remove redundant isTaggedPtr() checks (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@tagged_ptrs_base
Patch Set: 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 | « no previous file | Source/core/css/CSSPrimitiveValue.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 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 }; 174 };
175 static UnitCategory unitCategory(UnitType); 175 static UnitCategory unitCategory(UnitType);
176 static float clampToCSSLengthRange(double); 176 static float clampToCSSLengthRange(double);
177 177
178 static void initUnitTable(); 178 static void initUnitTable();
179 179
180 static UnitType fromName(const String& unit); 180 static UnitType fromName(const String& unit);
181 181
182 bool isAngle() const 182 bool isAngle() const
183 { 183 {
184 return type() == CSS_DEG 184 UnitType unitType = type();
185 || type() == CSS_RAD 185 return unitType == CSS_DEG
186 || type() == CSS_GRAD 186 || unitType == CSS_RAD
187 || type() == CSS_TURN; 187 || unitType == CSS_GRAD
188 || unitType == CSS_TURN;
188 } 189 }
189 bool isAttr() const { return type() == CSS_ATTR; } 190 bool isAttr() const { return type() == CSS_ATTR; }
190 bool isCounter() const { return type() == CSS_COUNTER; } 191 bool isCounter() const { return type() == CSS_COUNTER; }
191 bool isCustomIdent() const { return type() == CSS_CUSTOM_IDENT; } 192 bool isCustomIdent() const { return type() == CSS_CUSTOM_IDENT; }
192 bool isFontRelativeLength() const 193 bool isFontRelativeLength() const
193 { 194 {
194 return type() == CSS_EMS 195 UnitType unitType = type();
195 || type() == CSS_EXS 196 return unitType == CSS_EMS
196 || type() == CSS_REMS 197 || unitType == CSS_EXS
197 || type() == CSS_CHS; 198 || unitType == CSS_REMS
199 || unitType == CSS_CHS;
198 } 200 }
199 bool isViewportPercentageLength() const { return isViewportPercentageLength( type()); } 201 bool isViewportPercentageLength() const { return isViewportPercentageLength( type()); }
200 static bool isViewportPercentageLength(UnitType type) { return type >= CSS_V W && type <= CSS_VMAX; } 202 static bool isViewportPercentageLength(UnitType type) { return type >= CSS_V W && type <= CSS_VMAX; }
201 static bool isLength(UnitType type) 203 static bool isLength(UnitType type)
202 { 204 {
203 return (type >= CSS_EMS && type <= CSS_PC) || type == CSS_REMS || type = = CSS_CHS || isViewportPercentageLength(type); 205 return (type >= CSS_EMS && type <= CSS_PC) || type == CSS_REMS || type = = CSS_CHS || isViewportPercentageLength(type);
204 } 206 }
205 bool isLength() const { return isLength(primitiveType()); } 207 bool isLength() const { return isLength(primitiveType()); }
206 bool isNumber() const { return primitiveType() == CSS_NUMBER || primitiveTyp e() == CSS_INTEGER; } 208 bool isNumber() const { return primitiveType() == CSS_NUMBER || primitiveTyp e() == CSS_INTEGER; }
207 bool isPercentage() const { return primitiveType() == CSS_PERCENTAGE; } 209 bool isPercentage() const { return primitiveType() == CSS_PERCENTAGE; }
208 bool isPx() const { return primitiveType() == CSS_PX; } 210 bool isPx() const { return primitiveType() == CSS_PX; }
209 bool isRect() const { return type() == CSS_RECT; } 211 bool isRect() const { return type() == CSS_RECT; }
210 bool isRGBColor() const { return type() == CSS_RGBCOLOR; } 212 bool isRGBColor() const { return type() == CSS_RGBCOLOR; }
211 bool isShape() const { return type() == CSS_SHAPE; } 213 bool isShape() const { return type() == CSS_SHAPE; }
212 bool isString() const { return type() == CSS_STRING; } 214 bool isString() const { return type() == CSS_STRING; }
213 bool isTime() const { return type() == CSS_S || type() == CSS_MS; } 215 bool isTime() const { UnitType unitType = type(); return unitType == CSS_S | | unitType == CSS_MS; }
214 bool isURI() const { return type() == CSS_URI; } 216 bool isURI() const { return type() == CSS_URI; }
215 bool isCalculated() const { return type() == CSS_CALC; } 217 bool isCalculated() const { return type() == CSS_CALC; }
216 bool isCalculatedPercentageWithNumber() const { return primitiveType() == CS S_CALC_PERCENTAGE_WITH_NUMBER; } 218 bool isCalculatedPercentageWithNumber() const { return primitiveType() == CS S_CALC_PERCENTAGE_WITH_NUMBER; }
217 bool isCalculatedPercentageWithLength() const { return primitiveType() == CS S_CALC_PERCENTAGE_WITH_LENGTH; } 219 bool isCalculatedPercentageWithLength() const { return primitiveType() == CS S_CALC_PERCENTAGE_WITH_LENGTH; }
218 static bool isDotsPerInch(UnitType type) { return type == CSS_DPI; } 220 static bool isDotsPerInch(UnitType type) { return type == CSS_DPI; }
219 static bool isDotsPerPixel(UnitType type) { return type == CSS_DPPX; } 221 static bool isDotsPerPixel(UnitType type) { return type == CSS_DPPX; }
220 static bool isDotsPerCentimeter(UnitType type) { return type == CSS_DPCM; } 222 static bool isDotsPerCentimeter(UnitType type) { return type == CSS_DPCM; }
221 static bool isResolution(UnitType type) { return type >= CSS_DPPX && type <= CSS_DPCM; } 223 static bool isResolution(UnitType type) { return type >= CSS_DPPX && type <= CSS_DPCM; }
222 bool isFlex() const { return primitiveType() == CSS_FR; } 224 bool isFlex() const { return primitiveType() == CSS_FR; }
223 bool isValueID() const { return type() == CSS_VALUE_ID; } 225 bool isValueID() const { return type() == CSS_VALUE_ID; }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 double computeSeconds(); 318 double computeSeconds();
317 319
318 // Computes a length in pixels, resolving relative lengths 320 // Computes a length in pixels, resolving relative lengths
319 template<typename T> T computeLength(const CSSToLengthConversionData&); 321 template<typename T> T computeLength(const CSSToLengthConversionData&);
320 322
321 // Converts to a Length (Fixed, Percent or Calculated) 323 // Converts to a Length (Fixed, Percent or Calculated)
322 Length convertToLength(const CSSToLengthConversionData&); 324 Length convertToLength(const CSSToLengthConversionData&);
323 325
324 double getDoubleValue() const 326 double getDoubleValue() const
325 { 327 {
326 if (type() == CSS_CALC) 328 if (isTaggedPtr())
329 return numTaggedValue();
330 if (m_primitiveUnitType == CSS_CALC)
327 return getCalcDoubleValue(); 331 return getCalcDoubleValue();
328 return value().num; 332 return m_value.num;
329 } 333 }
330 334
331 double getCalcDoubleValue() const; 335 double getCalcDoubleValue() const;
332 336
333 float getFloatValue() const { return getValue<float>(); } 337 float getFloatValue() const { return getValue<float>(); }
334 int getIntValue() const { return getValue<int>(); } 338 int getIntValue() const { return getValue<int>(); }
335 template<typename T> inline T getValue() const { return clampTo<T>(getDouble Value()); } 339 template<typename T> inline T getValue() const { return clampTo<T>(getDouble Value()); }
336 340
337 String getStringValue() const; 341 String getStringValue() const;
338 342
339 Counter* getCounterValue() const { return type() != CSS_COUNTER ? 0 : value( ).counter; } 343 Counter* getCounterValue() const { return type() != CSS_COUNTER ? 0 : m_valu e.counter; }
340 344
341 Rect* getRectValue() const { return type() != CSS_RECT ? 0 : value().rect; } 345 Rect* getRectValue() const { return type() != CSS_RECT ? 0 : m_value.rect; }
342 346
343 Quad* getQuadValue() const { return type() != CSS_QUAD ? 0 : value().quad; } 347 Quad* getQuadValue() const { return type() != CSS_QUAD ? 0 : m_value.quad; }
344 348
345 RGBA32 getRGBA32Value() const { return type() != CSS_RGBCOLOR ? 0 : value(). rgbcolor; } 349 RGBA32 getRGBA32Value() const
350 {
351 if (isTaggedPtr())
352 return taggedType() != CSS_RGBCOLOR ? 0 : rgbcolorTaggedValue();
353 return m_primitiveUnitType != CSS_RGBCOLOR ? 0 : m_value.rgbcolor;
354 }
346 355
347 Pair* getPairValue() const { return type() != CSS_PAIR ? 0 : value().pair; } 356 Pair* getPairValue() const { return type() != CSS_PAIR ? 0 : m_value.pair; }
348 357
349 CSSBasicShape* getShapeValue() const { return type() != CSS_SHAPE ? 0 : valu e().shape; } 358 CSSBasicShape* getShapeValue() const { return type() != CSS_SHAPE ? 0 : m_va lue.shape; }
350 359
351 CSSCalcValue* cssCalcValue() const { return type() != CSS_CALC ? 0 : value() .calc; } 360 CSSCalcValue* cssCalcValue() const { return type() != CSS_CALC ? 0 : m_value .calc; }
352 361
353 CSSPropertyID getPropertyID() const { return type() == CSS_PROPERTY_ID ? val ue().propertyID : CSSPropertyInvalid; } 362 CSSPropertyID getPropertyID() const
354 CSSValueID getValueID() const { return type() == CSS_VALUE_ID ? value().valu eID : CSSValueInvalid; } 363 {
364 if (isTaggedPtr())
365 return taggedType() == CSS_PROPERTY_ID ? propertyIDTaggedValue() : C SSPropertyInvalid;
366 return m_primitiveUnitType == CSS_PROPERTY_ID ? m_value.propertyID : CSS PropertyInvalid;
367 }
368
369 CSSValueID getValueID() const
370 {
371 if (isTaggedPtr())
372 return taggedType() == CSS_VALUE_ID ? valueIDTaggedValue() : CSSValu eInvalid;
373 return m_primitiveUnitType == CSS_VALUE_ID ? m_value.valueID : CSSValueI nvalid;
374 }
355 375
356 template<typename T> inline operator T() const; // Defined in CSSPrimitiveVa lueMappings.h 376 template<typename T> inline operator T() const; // Defined in CSSPrimitiveVa lueMappings.h
357 377
358 static const char* unitTypeToString(UnitType); 378 static const char* unitTypeToString(UnitType);
359 String customCSSText() const; 379 String customCSSText() const;
360 380
361 inline bool isQuirkValue() const 381 inline bool isQuirkValue() const
362 { 382 {
363 if (isTaggedPtr()) 383 if (isTaggedPtr())
364 return false; 384 return false;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 return reinterpret_cast<CSSTaggedPtrValue&&>(nonConstThis); 471 return reinterpret_cast<CSSTaggedPtrValue&&>(nonConstThis);
452 } 472 }
453 473
454 inline UnitType type() const 474 inline UnitType type() const
455 { 475 {
456 if (!isTaggedPtr()) 476 if (!isTaggedPtr())
457 return static_cast<UnitType>(m_primitiveUnitType); 477 return static_cast<UnitType>(m_primitiveUnitType);
458 return static_cast<UnitType>(toTaggedPtr().type); 478 return static_cast<UnitType>(toTaggedPtr().type);
459 } 479 }
460 480
461 inline CSSPrimitiveValueData value() const 481 inline double taggedType() const
462 { 482 {
463 if (!isTaggedPtr()) 483 ASSERT(isTaggedPtr());
464 return m_value; 484 return static_cast<UnitType>(toTaggedPtr().type);
485 }
465 486
466 CSSPrimitiveValueData data; 487 inline CSSPropertyID propertyIDValue() const
467 switch (type()) { 488 {
468 case CSSPrimitiveValue::CSS_PROPERTY_ID: 489 if (isTaggedPtr())
469 data.propertyID = static_cast<CSSPropertyID>(toTaggedPtr().value); 490 return propertyIDTaggedValue();
470 break; 491 return m_value.propertyID;
471 case CSSPrimitiveValue::CSS_VALUE_ID: 492 }
472 data.valueID = static_cast<CSSValueID>(toTaggedPtr().value); 493
473 break; 494 inline CSSValueID valueIDValue() const
474 case CSSPrimitiveValue::CSS_RGBCOLOR: { 495 {
475 uintptr_t valueRawVar = toTaggedPtr().value; 496 if (isTaggedPtr())
476 packedColor color = *reinterpret_cast<packedColor*>(&valueRawVar); 497 return valueIDTaggedValue();
477 unsigned alpha; 498 return m_value.valueID;
499 }
500
501
502 inline double numValue() const
503 {
504 if (isTaggedPtr())
505 return numTaggedValue();
506 return m_value.num;
507 }
508
509
510 inline RGBA32 rgbcolorValue() const
511 {
512 if (isTaggedPtr())
513 return rgbcolorTaggedValue();
514 return m_value.rgbcolor;
515 }
516
517 inline CSSPropertyID propertyIDTaggedValue() const
518 {
519 ASSERT(isTaggedPtr());
520 return static_cast<CSSPropertyID>(toTaggedPtr().value);
521 }
522
523 inline CSSValueID valueIDTaggedValue() const
524 {
525 ASSERT(isTaggedPtr());
526 return static_cast<CSSValueID>(toTaggedPtr().value);
527 }
528
529 inline double numTaggedValue() const
530 {
531 ASSERT(isTaggedPtr());
532 uint64_t shiftedValue = toTaggedPtr().value;
533 shiftedValue = shiftedValue << doubleShiftAmount;
534 return *reinterpret_cast<double*>(&shiftedValue);
535 }
536
537 inline RGBA32 rgbcolorTaggedValue() const
538 {
539 ASSERT(isTaggedPtr());
540 uintptr_t valueRawVar = toTaggedPtr().value;
541 packedColor color = *reinterpret_cast<packedColor*>(&valueRawVar);
542 unsigned alpha;
478 #if CPU(32BIT) 543 #if CPU(32BIT)
479 alpha = color.alpha == 1 ? 255 : 0; 544 alpha = color.alpha == 1 ? 255 : 0;
480 #elif CPU(64BIT) 545 #elif CPU(64BIT)
481 alpha = color.alpha; 546 alpha = color.alpha;
482 #endif 547 #endif
483 data.rgbcolor = makeRGBA(color.red, color.green, color.blue, alpha); 548 return makeRGBA(color.red, color.green, color.blue, alpha);
484 break;
485 }
486 default:
487 uint64_t shiftedValue = toTaggedPtr().value;
488 shiftedValue = shiftedValue << doubleShiftAmount;
489 data.num = *reinterpret_cast<double*>(&shiftedValue);
490 break;
491 }
492 return data;
493 } 549 }
494 550
551
495 CSSPrimitiveValueData m_value; 552 CSSPrimitiveValueData m_value;
496 }; 553 };
497 554
498 typedef CSSPrimitiveValue::CSSLengthArray CSSLengthArray; 555 typedef CSSPrimitiveValue::CSSLengthArray CSSLengthArray;
499 typedef CSSPrimitiveValue::CSSLengthTypeArray CSSLengthTypeArray; 556 typedef CSSPrimitiveValue::CSSLengthTypeArray CSSLengthTypeArray;
500 557
501 DEFINE_CSS_VALUE_TYPE_CASTS(CSSPrimitiveValue, isPrimitiveValue()); 558 DEFINE_CSS_VALUE_TYPE_CASTS(CSSPrimitiveValue, isPrimitiveValue());
502 559
503 } // namespace blink 560 } // namespace blink
504 561
505 namespace WTF { 562 namespace WTF {
506 563
507 #if !ENABLE(OILPAN) 564 #if !ENABLE(OILPAN)
508 // Must be defined *after* CSSPrimitiveValue to compile with the correct adopted () method. 565 // Must be defined *after* CSSPrimitiveValue to compile with the correct adopted () method.
509 template<> inline PassRefPtr<blink::CSSPrimitiveValue> adoptRef<blink::CSSPrimit iveValue>(blink::CSSPrimitiveValue* p) 566 template<> inline PassRefPtr<blink::CSSPrimitiveValue> adoptRef<blink::CSSPrimit iveValue>(blink::CSSPrimitiveValue* p)
510 { 567 {
511 // Immediates (non-pointers) end in a 1. 568 // Immediates (non-pointers) end in a 1.
512 if (!(reinterpret_cast<uintptr_t>(p) & 1)) 569 if (!(reinterpret_cast<uintptr_t>(p) & 1))
513 adopted(p); 570 adopted(p);
514 return PassRefPtr<blink::CSSPrimitiveValue>(p, PassRefPtr<blink::CSSPrimitiv eValue>::AdoptRef); 571 return PassRefPtr<blink::CSSPrimitiveValue>(p, PassRefPtr<blink::CSSPrimitiv eValue>::AdoptRef);
515 } 572 }
516 #endif 573 #endif
517 574
518 } // namespace WTF 575 } // namespace WTF
519 576
520 #endif // CSSPrimitiveValue_h 577 #endif // CSSPrimitiveValue_h
OLDNEW
« no previous file with comments | « no previous file | Source/core/css/CSSPrimitiveValue.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698