51 lines
1.9 KiB
PHP
51 lines
1.9 KiB
PHP
// Copyright 2019 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// The following macros are used to declare both the color id enumerations and
|
|
// the stringized names of the enumeration elements for use in dump_colors. To
|
|
// stringize the element names, define STRINGIZE_COLOR_IDS prior to including
|
|
// this file. This file is intended to be included just before and just after
|
|
// the enumeration or string array declarations.
|
|
|
|
#if !defined(COLOR_ID_MACROS_DEFINED)
|
|
#define COLOR_ID_MACROS_DEFINED
|
|
#if defined(STRINGIZE_COLOR_IDS)
|
|
// Convert first token to string, throw away the rest.
|
|
#define D1(enum_name) #enum_name
|
|
#define D2(enum_name, enum_value) #enum_name
|
|
#else // defined(STRINGIZE_COLOR_IDS)
|
|
// Declare enum with optional assigned value.
|
|
#define D1(enum_name) enum_name
|
|
#define D2(enum_name, enum_value) enum_name = enum_value
|
|
#endif // defined(STRINGIZE_COLOR_IDS)
|
|
// Select which token in the declaration is the assigned value.
|
|
// Use first and optional third token, ignore optional second.
|
|
#define E1(enum_name) D1(enum_name)
|
|
#define E2(enum_name, old_enum_name) D1(enum_name)
|
|
#define E3(enum_name, old_enum_name, enum_value) D2(enum_name, enum_value)
|
|
#define GET_E(_1, _2, _3, macro_name, ...) macro_name
|
|
#if defined(COMPILER_MSVC)
|
|
// Workaround for MSVC not properly expanding __VA_ARGS__.
|
|
#define EXPAND(x) x
|
|
#define E_CPONLY(...) EXPAND(E(__VA_ARGS__))
|
|
#define E(...) EXPAND(GET_E(__VA_ARGS__, E3, E2, E1)(__VA_ARGS__)),
|
|
#else // !defined(COMPILER_MSVC)
|
|
#define E_CPONLY(...) E(__VA_ARGS__)
|
|
#define E(...) GET_E(__VA_ARGS__, E3, E2, E1)(__VA_ARGS__),
|
|
#endif // !defined(COMPILER_MSVC)
|
|
#else // !defined(COLOR_ID_MACROS_DEFINED)
|
|
#undef D1
|
|
#undef D2
|
|
#undef E1
|
|
#undef E2
|
|
#undef E3
|
|
#if defined(COMPILER_MSVC)
|
|
#undef EXPAND
|
|
#endif
|
|
#undef E_CPONLY
|
|
#undef GET_E
|
|
#undef E
|
|
#undef COLOR_ID_MACROS_DEFINED
|
|
#endif // !defined(COLOR_ID_MACROS_DEFINED)
|