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