1// Copyright 2014 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_BASE_COMPILER_SPECIFIC_H_ 6#define V8_BASE_COMPILER_SPECIFIC_H_ 7 8#include "include/v8config.h" 9 10// Annotate a variable indicating it's ok if the variable is not used. 11// (Typically used to silence a compiler warning when the assignment 12// is important for some other reason.) 13// Use like: 14// int x ALLOW_UNUSED = ...; 15#if V8_HAS_ATTRIBUTE_UNUSED 16#define ALLOW_UNUSED __attribute__((unused)) 17#else 18#define ALLOW_UNUSED 19#endif 20 21 22// Annotate a virtual method indicating it must be overriding a virtual 23// method in the parent class. 24// Use like: 25// virtual void bar() OVERRIDE; 26#if V8_HAS_CXX11_OVERRIDE 27#define OVERRIDE override 28#else 29#define OVERRIDE /* NOT SUPPORTED */ 30#endif 31 32 33// Annotate a virtual method indicating that subclasses must not override it, 34// or annotate a class to indicate that it cannot be subclassed. 35// Use like: 36// class B FINAL : public A {}; 37// virtual void bar() FINAL; 38#if V8_HAS_CXX11_FINAL 39#define FINAL final 40#elif V8_HAS___FINAL 41#define FINAL __final 42#elif V8_HAS_SEALED 43#define FINAL sealed 44#else 45#define FINAL /* NOT SUPPORTED */ 46#endif 47 48 49// Annotate a function indicating the caller must examine the return value. 50// Use like: 51// int foo() WARN_UNUSED_RESULT; 52#if V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT 53#define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 54#else 55#define WARN_UNUSED_RESULT /* NOT SUPPORTED */ 56#endif 57 58#endif // V8_BASE_COMPILER_SPECIFIC_H_ 59