| OLD | NEW | 
|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 namespace WTF { | 5 namespace WTF { | 
| 6 | 6 | 
| 7 template<typename To, typename From> | 7 template<typename To, typename From> | 
| 8 bool isInBounds(From value) { | 8 bool isInBounds(From value) { | 
| 9   return true; | 9   return true; | 
| 10 } | 10 } | 
| 11 | 11 | 
| 12 template<typename To, typename From> | 12 template<typename To, typename From> | 
| 13 To safeCast(From value) { | 13 To safeCast(From value) { | 
| 14   if (!isInBounds<To>(value)) | 14   if (!isInBounds<To>(value)) | 
| 15     return 0; | 15     return 0; | 
| 16   return static_cast<To>(value); | 16   return static_cast<To>(value); | 
| 17 } | 17 } | 
| 18 | 18 | 
| 19 template<typename T, typename OverflowHandler> | 19 template<typename T, typename OverflowHandler> | 
| 20 class Checked { | 20 class Checked { | 
| 21  public: | 21  public: | 
| 22   template<typename U, typename V> | 22   template<typename U, typename V> | 
| 23   Checked(const Checked<U, V>& rhs){ | 23   Checked(const Checked<U, V>& rhs){ | 
| 24     // This (incorrectly) doesn't get rewritten, since it's not instantiated. In |  | 
| 25     // this case, the AST representation contains a bunch of |  | 
| 26     // CXXDependentScopeMemberExpr nodes. |  | 
| 27     if (rhs.hasOverflowed()) | 24     if (rhs.hasOverflowed()) | 
| 28       this->overflowed(); | 25       this->overflowed(); | 
| 29     if (!isInBounds<T>(rhs.m_value)) | 26     if (!isInBounds<T>(rhs.m_value)) | 
| 30       this->overflowed(); | 27       this->overflowed(); | 
| 31     m_value = static_cast<T>(rhs.m_value); | 28     m_value = static_cast<T>(rhs.m_value); | 
| 32   } | 29   } | 
| 33 | 30 | 
| 34   bool hasOverflowed() const { return false; } | 31   bool hasOverflowed() const { return false; } | 
| 35   void overflowed() { } | 32   void overflowed() { } | 
| 36 | 33 | 
| 37  private: | 34  private: | 
| 38   T m_value; | 35   T m_value; | 
| 39 }; | 36 }; | 
| 40 | 37 | 
| 41 template<typename To, typename From> | 38 template<typename To, typename From> | 
| 42 To bitwise_cast(From from) { | 39 To bitwise_cast(From from) { | 
| 43   static_assert(sizeof(To) == sizeof(From)); | 40   static_assert(sizeof(To) == sizeof(From), "msg"); | 
| 44   return reinterpret_cast<To>(from); | 41   return reinterpret_cast<To>(from); | 
| 45 } | 42 } | 
| 46 | 43 | 
| 47 }  // namespace WTF | 44 }  // namespace WTF | 
| 48 | 45 | 
| 49 using WTF::bitwise_cast; | 46 using WTF::bitwise_cast; | 
| 50 using WTF::safeCast; | 47 using WTF::safeCast; | 
| OLD | NEW | 
|---|