v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
safe_conversions_impl.h File Reference
#include <stddef.h>
#include <stdint.h>
#include <concepts>
#include <limits>
#include <type_traits>
#include <utility>
#include "src/base/numerics/integral_constant_like.h"
Include dependency graph for safe_conversions_impl.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  v8::base::internal::CheckOnFailure
 
class  v8::base::internal::RangeCheck
 
struct  v8::base::internal::NarrowingRange< Dst, Src, Bounds >
 
struct  v8::base::internal::DstRangeRelationToSrcRangeImpl< Dst, Src, Bounds, DstSign, SrcSign, DstRange >
 
struct  v8::base::internal::DstRangeRelationToSrcRangeImpl< Dst, Src, Bounds, IntegerRepresentation::kSigned, IntegerRepresentation::kSigned, NumericRangeRepresentation::kNotContained >
 
struct  v8::base::internal::DstRangeRelationToSrcRangeImpl< Dst, Src, Bounds, IntegerRepresentation::kUnsigned, IntegerRepresentation::kUnsigned, NumericRangeRepresentation::kNotContained >
 
struct  v8::base::internal::DstRangeRelationToSrcRangeImpl< Dst, Src, Bounds, IntegerRepresentation::kSigned, IntegerRepresentation::kUnsigned, NumericRangeRepresentation::kNotContained >
 
struct  v8::base::internal::DstRangeRelationToSrcRangeImpl< Dst, Src, Bounds, IntegerRepresentation::kUnsigned, IntegerRepresentation::kSigned, NumericRangeRepresentation::kNotContained >
 
struct  v8::base::internal::BigEnoughPromotionImpl< Lhs, Rhs, is_intmax_type, is_max_exponent >
 
struct  v8::base::internal::BigEnoughPromotionImpl< Lhs, Rhs, false, false >
 
struct  v8::base::internal::BigEnoughPromotionImpl< Lhs, Rhs, true, false >
 
struct  v8::base::internal::FastIntegerArithmeticPromotionImpl< Lhs, Rhs >
 
struct  v8::base::internal::FastIntegerArithmeticPromotionImpl< Lhs, Rhs >
 
struct  v8::base::internal::ArithmeticOrIntegralConstant< T >
 
struct  v8::base::internal::ArithmeticOrIntegralConstant< T >
 
struct  v8::base::internal::UnderlyingTypeImpl< T >
 
struct  v8::base::internal::UnderlyingTypeImpl< CheckedNumeric< T > >
 
struct  v8::base::internal::UnderlyingTypeImpl< ClampedNumeric< T > >
 
struct  v8::base::internal::UnderlyingTypeImpl< StrictNumeric< T > >
 
struct  v8::base::internal::IsLess< L, R >
 
struct  v8::base::internal::IsLessOrEqual< L, R >
 
struct  v8::base::internal::IsGreater< L, R >
 
struct  v8::base::internal::IsGreaterOrEqual< L, R >
 
struct  v8::base::internal::IsEqual< L, R >
 
struct  v8::base::internal::IsNotEqual< L, R >
 

Namespaces

namespace  v8
 
namespace  v8::base
 
namespace  v8::base::internal
 

Concepts

concept  v8::base::internal::IsCheckedNumeric
 
concept  v8::base::internal::IsClampedNumeric
 
concept  v8::base::internal::IsStrictNumeric
 
concept  v8::base::internal::IsNumeric
 
concept  v8::base::internal::IsCheckedOp
 
concept  v8::base::internal::IsClampedOp
 
concept  v8::base::internal::IsStrictOp
 

Macros

#define INTEGER_FOR_DIGITS_AND_SIGN(I)
 

Typedefs

template<size_t Size, bool IsSigned>
using v8::base::internal::IntegerForDigitsAndSign
 
template<typename Integer , bool IsSigned = std::is_signed_v<Integer>>
using v8::base::internal::TwiceWiderInteger
 
template<typename Lhs , typename Rhs >
using v8::base::internal::MaxExponentPromotion
 
template<typename Lhs , typename Rhs >
using v8::base::internal::LowestValuePromotion
 
template<typename Lhs , typename Rhs >
using v8::base::internal::BigEnoughPromotion = BigEnoughPromotionImpl<Lhs, Rhs>::type
 
template<typename Lhs , typename Rhs >
using v8::base::internal::FastIntegerArithmeticPromotion
 
template<typename T >
using v8::base::internal::ArithmeticOrUnderlyingEnum
 
template<typename T >
using v8::base::internal::UnderlyingType = UnderlyingTypeImpl<T>::type
 

Enumerations

enum class  v8::base::internal::IntegerRepresentation { v8::base::internal::kUnsigned , v8::base::internal::kSigned }
 
enum class  v8::base::internal::NumericRangeRepresentation { v8::base::internal::kNotContained , v8::base::internal::kContained }
 

Functions

template<typename T >
requires (std::is_arithmetic_v<T>)
constexpr bool v8::base::internal::IsValueNegative (T value)
 
template<typename T >
requires std::is_integral_v<T>
constexpr auto v8::base::internal::ConditionalNegate (T x, bool is_negative)
 
template<typename T >
requires std::is_integral_v<T>
constexpr auto v8::base::internal::SafeUnsignedAbs (T value)
 
template<typename Dst , template< typename > class Bounds = std::numeric_limits, typename Src >
requires (std::is_arithmetic_v<Src> && std::is_arithmetic_v<Dst> && Bounds<Dst>::lowest() < Bounds<Dst>::max())
constexpr RangeCheck v8::base::internal::DstRangeRelationToSrcRange (Src value)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (int8_t)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (uint8_t)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (int16_t)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (uint16_t)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (int32_t)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (uint32_t)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (int64_t)
 
 v8::base::internal::INTEGER_FOR_DIGITS_AND_SIGN (uint64_t)
 
template<typename Src , typename Dst = std::make_signed_t<UnderlyingType<Src>>>
requires std::integral<Dst>
constexpr auto v8::base::internal::as_signed (Src value)
 
template<typename Src , typename Dst = std::make_unsigned_t<UnderlyingType<Src>>>
requires std::integral<Dst>
constexpr auto v8::base::internal::as_unsigned (Src value)
 
template<template< typename, typename > typename C, typename L , typename R >
requires std::is_arithmetic_v<L> && std::is_arithmetic_v<R>
constexpr bool v8::base::internal::SafeCompare (L lhs, R rhs)
 
template<typename Dst , typename Src = Dst>
constexpr Dst v8::base::internal::CommonMaxOrMin (bool is_min)
 

Variables

template<typename NumericType >
constexpr int v8::base::internal::kMaxExponent
 
template<typename NumericType >
constexpr int v8::base::internal::kIntegerBitsPlusSign
 
constexpr bool v8::base::internal::kEnableAsmCode = false
 
template<typename Dst , typename Src , IntegerRepresentation DstSign = std::is_signed_v<Dst> ? IntegerRepresentation::kSigned : IntegerRepresentation::kUnsigned, IntegerRepresentation SrcSign = std::is_signed_v<Src> ? IntegerRepresentation::kSigned : IntegerRepresentation::kUnsigned>
constexpr auto v8::base::internal::kStaticDstRangeRelationToSrcRange
 
template<typename Dst , typename Src >
constexpr bool v8::base::internal::kIsTypeInRangeForNumericType
 
template<typename Lhs , typename Rhs >
constexpr bool v8::base::internal::kIsBigEnoughPromotionContained
 
template<typename T , typename Lhs , typename Rhs = Lhs>
constexpr bool v8::base::internal::kIsIntegerArithmeticSafe
 
template<typename Lhs , typename Rhs >
constexpr bool v8::base::internal::kIsFastIntegerArithmeticPromotionContained
 
template<typename T >
constexpr bool v8::base::internal::kIsCheckedNumeric = false
 
template<typename T >
constexpr bool v8::base::internal::kIsCheckedNumeric< CheckedNumeric< T > > = true
 
template<typename T >
constexpr bool v8::base::internal::kIsClampedNumeric = false
 
template<typename T >
constexpr bool v8::base::internal::kIsClampedNumeric< ClampedNumeric< T > > = true
 
template<typename T >
constexpr bool v8::base::internal::kIsStrictNumeric = false
 
template<typename T >
constexpr bool v8::base::internal::kIsStrictNumeric< StrictNumeric< T > > = true
 
template<typename T >
constexpr bool v8::base::internal::kIsNumeric = std::is_arithmetic_v<UnderlyingType<T>>
 
template<typename T >
constexpr bool v8::base::internal::kIsNumeric< T > = true
 
template<typename Dst , typename Src >
constexpr bool v8::base::internal::kIsMaxInRangeForNumericType
 
template<typename Dst , typename Src >
constexpr bool v8::base::internal::kIsMinInRangeForNumericType
 
template<typename Dst , typename Src >
constexpr Dst v8::base::internal::kCommonMax
 
template<typename Dst , typename Src >
constexpr Dst v8::base::internal::kCommonMin
 

Macro Definition Documentation

◆ INTEGER_FOR_DIGITS_AND_SIGN

#define INTEGER_FOR_DIGITS_AND_SIGN ( I)
Value:
template <> \
struct IntegerForDigitsAndSignImpl<kIntegerBitsPlusSign<I>, \
std::is_signed_v<I>> { \
using type = I; \
}
STL namespace.
#define I(name, number_of_args, result_size)
Definition runtime.cc:36

Definition at line 337 of file safe_conversions_impl.h.