diff options
Diffstat (limited to 'Source/JavaScriptCore/heap/GCAssertions.h')
-rw-r--r-- | Source/JavaScriptCore/heap/GCAssertions.h | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/Source/JavaScriptCore/heap/GCAssertions.h b/Source/JavaScriptCore/heap/GCAssertions.h index 7c7054deb..836244fe6 100644 --- a/Source/JavaScriptCore/heap/GCAssertions.h +++ b/Source/JavaScriptCore/heap/GCAssertions.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2012 Apple Inc. All rights reserved. + * Copyright (C) 2015 Igalia S.L. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -26,12 +27,13 @@ #ifndef GCAssertions_h #define GCAssertions_h +#include <type_traits> #include <wtf/Assertions.h> #if ENABLE(GC_VALIDATION) #define ASSERT_GC_OBJECT_LOOKS_VALID(cell) do { \ RELEASE_ASSERT(cell);\ - RELEASE_ASSERT(cell->unvalidatedStructure()->unvalidatedStructure() == cell->unvalidatedStructure()->unvalidatedStructure()->unvalidatedStructure()); \ + RELEASE_ASSERT(cell->structure()->structure() == cell->structure()->structure()->structure()); \ } while (0) #define ASSERT_GC_OBJECT_INHERITS(object, classInfo) do {\ @@ -39,15 +41,23 @@ RELEASE_ASSERT(object->inherits(classInfo)); \ } while (0) +// Used to avoid triggering -Wundefined-bool-conversion. +#define ASSERT_THIS_GC_OBJECT_LOOKS_VALID() do { \ + RELEASE_ASSERT(this->structure()->structure() == this->structure()->structure()->structure()); \ +} while (0) + +#define ASSERT_THIS_GC_OBJECT_INHERITS(classInfo) do {\ + ASSERT_THIS_GC_OBJECT_LOOKS_VALID(); \ + RELEASE_ASSERT(this->inherits(classInfo)); \ +} while (0) + #else #define ASSERT_GC_OBJECT_LOOKS_VALID(cell) do { (void)cell; } while (0) #define ASSERT_GC_OBJECT_INHERITS(object, classInfo) do { (void)object; (void)classInfo; } while (0) +#define ASSERT_THIS_GC_OBJECT_LOOKS_VALID() +#define ASSERT_THIS_GC_OBJECT_INHERITS(classInfo) do { (void)classInfo; } while (0) #endif -#if COMPILER_SUPPORTS(HAS_TRIVIAL_DESTRUCTOR) -#define ASSERT_HAS_TRIVIAL_DESTRUCTOR(klass) COMPILE_ASSERT(__has_trivial_destructor(klass), klass##_has_trivial_destructor_check) -#else -#define ASSERT_HAS_TRIVIAL_DESTRUCTOR(klass) -#endif +#define STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(klass) static_assert(std::is_trivially_destructible<klass>::value, #klass " must have a trivial destructor") #endif // GCAssertions_h |