projects
/
folly.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Futex::futexWait returns FutexResult
[folly.git]
/
folly
/
Preprocessor.h
diff --git
a/folly/Preprocessor.h
b/folly/Preprocessor.h
index 86b6a35f9b954376396b7cfb567bdb2aac079377..b94c082b6cc1af0a732ff58a5ba000fa26aebff7 100644
(file)
--- a/
folly/Preprocessor.h
+++ b/
folly/Preprocessor.h
@@
-1,5
+1,5
@@
/*
/*
- * Copyright 201
4
Facebook, Inc.
+ * Copyright 201
7
Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-16,19
+16,22
@@
// @author: Andrei Alexandrescu
// @author: Andrei Alexandrescu
-#ifndef FOLLY_PREPROCESSOR_
-#define FOLLY_PREPROCESSOR_
+#pragma once
/**
* Necessarily evil preprocessor-related amenities.
*/
/**
* Necessarily evil preprocessor-related amenities.
*/
+// MSVC's preprocessor is a pain, so we have to
+// forcefully expand the VA args in some places.
+#define FB_VA_GLUE(a, b) a b
+
/**
* FB_ONE_OR_NONE(hello, world) expands to hello and
* FB_ONE_OR_NONE(hello) expands to nothing. This macro is used to
* insert or eliminate text based on the presence of another argument.
*/
/**
* FB_ONE_OR_NONE(hello, world) expands to hello and
* FB_ONE_OR_NONE(hello) expands to nothing. This macro is used to
* insert or eliminate text based on the presence of another argument.
*/
-#define FB_ONE_OR_NONE(a, ...) FB_
THIRD(a, ## __VA_ARGS__, a
)
+#define FB_ONE_OR_NONE(a, ...) FB_
VA_GLUE(FB_THIRD, (a, ## __VA_ARGS__, a)
)
#define FB_THIRD(a, b, ...) __VA_ARGS__
/**
#define FB_THIRD(a, b, ...) __VA_ARGS__
/**
@@
-42,7
+45,14
@@
* number of arguments. If only one argument is given, it returns
* that.
*/
* number of arguments. If only one argument is given, it returns
* that.
*/
+#ifdef _MSC_VER
+// GCC refuses to expand this correctly if this macro itself was
+// called with FB_VA_GLUE :(
+#define FB_ARG_2_OR_1(...) \
+ FB_VA_GLUE(FB_ARG_2_OR_1_IMPL, (__VA_ARGS__, __VA_ARGS__))
+#else
#define FB_ARG_2_OR_1(...) FB_ARG_2_OR_1_IMPL(__VA_ARGS__, __VA_ARGS__)
#define FB_ARG_2_OR_1(...) FB_ARG_2_OR_1_IMPL(__VA_ARGS__, __VA_ARGS__)
+#endif
// Support macro for the above
#define FB_ARG_2_OR_1_IMPL(a, b, ...) b
// Support macro for the above
#define FB_ARG_2_OR_1_IMPL(a, b, ...) b
@@
-57,6
+67,16
@@
*/
#define FB_SINGLE_ARG(...) __VA_ARGS__
*/
#define FB_SINGLE_ARG(...) __VA_ARGS__
+/**
+ * Helper macro that just ignores its parameters.
+ */
+#define FOLLY_IGNORE(...)
+
+/**
+ * Helper macro that just ignores its parameters and inserts a semicolon.
+ */
+#define FOLLY_SEMICOLON(...) ;
+
/**
* FB_ANONYMOUS_VARIABLE(str) introduces an identifier starting with
* str and ending with a number that varies with the line.
/**
* FB_ANONYMOUS_VARIABLE(str) introduces an identifier starting with
* str and ending with a number that varies with the line.
@@
-72,9
+92,7
@@
#endif
/**
#endif
/**
- * Use FB_STRINGIZE(
name) when you'd want to do what #name
does inside
+ * Use FB_STRINGIZE(
x) when you'd want to do what #x
does inside
* another macro expansion.
*/
* another macro expansion.
*/
-#define FB_STRINGIZE(name) #name
-
-#endif // FOLLY_PREPROCESSOR_
+#define FB_STRINGIZE(x) #x