| # Copyright 2019 Google LLC |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Reserved words for Emboss. |
| # |
| # In the interest of avoiding problems during codegen, Emboss disallows fields, |
| # types, and enum values that would collide with reserved words from a number |
| # of languages. This (mostly) avoids cases where the back-end code generator |
| # would want to emit a field accessor with the same name as a keyword. (Proto, |
| # for example, handles this case by appending "_" to the field name if it |
| # collides with a keyword; however, this is not documented, and Proto still |
| # breaks if you happen to have fields named "struct" and "struct_" in the same |
| # message.) |
| # |
| # Emboss reserves words from many languages, on the off chance that they will |
| # someday have code generators, but there is an emphasis on systems languages |
| # (such as C), hardware definition languages (such as Verilog), and languages |
| # which can easily be used for handling binary data (such as Erlang). |
| # |
| # Non-blank/comment lines in this file take one of two forms: |
| # |
| # -- Source |
| # word |
| # |
| # e.g.: |
| # |
| # -- C |
| # int |
| # long |
| # _Bool # C99 |
| # |
| # -- Verilog |
| # always |
| # case |
| # |
| # A word may appear in multiple language sections. The first language name for |
| # a word will be used in error messages when names matching that word are |
| # found. |
| |
| # TODO(bolms): There still needs to be a way to override field names in |
| # generated code. This list is *not* a complete list of every possible |
| # reserved word -- such a list is impossible, given that language designers |
| # continue to add new keywords to existing languages, new languages pop up, |
| # standards such as POSIX reserve huge swathes of namespace for future |
| # expansion (i.e., anything starting with E[A-Z0-9]), and different C and C++ |
| # code bases may have custom preprocessor macros that collide with *anything*. |
| |
| -- C |
| asm |
| auto |
| break |
| case |
| char |
| const |
| continue |
| default |
| do |
| double |
| else |
| extern |
| float |
| for |
| fortran |
| goto |
| if |
| inline # C99 |
| int |
| long |
| register |
| restrict # C99 |
| return |
| short |
| signed |
| sizeof |
| static |
| switch |
| typedef |
| unsigned |
| void |
| volatile |
| while |
| _Alignas # C11 |
| _Alignof # C11 |
| _Atomic # C11 |
| _Bool # C99 |
| _Complex # C99 |
| _Generic # C11 |
| _Imaginary # C99 |
| _Noreturn # C11 |
| _Pragma # C99 |
| _Static_assert # C11 |
| _Thread_local # C11 |
| |
| # The following are *macros* defined in the C standard library. For the most |
| # part, I do not think banning these will inconvenience many people. |
| |
| # <assert.h> |
| NDEBUG |
| static_assert |
| assert |
| |
| # <complex.h> |
| __STDC_NO_COMPLEX__ |
| complex |
| _Complex_I |
| imaginary |
| _Imaginary_I |
| I |
| CMPLX |
| CMPLXF |
| CMPLXL |
| |
| # <errno.h> |
| errno |
| EDOM |
| EILSEQ |
| ERANGE |
| |
| # <fenv.h> |
| FE_DIVBYZERO |
| FE_INEXACT |
| FE_INVALID |
| FE_OVERFLOW |
| FE_UNDERFLOW |
| FE_ALL_EXCEPT |
| FE_DOWNWARD |
| FE_TONEAREST |
| FE_TOWARDZERO |
| FE_UPWARD |
| FE_DFL_ENV |
| |
| # <float.h> |
| FLT_ROUNDS |
| FLT_EVAL_METHOD |
| FLT_HAS_SUBNORM |
| DBL_HAS_SUBNORM |
| LDBL_HAS_SUBNORM |
| FLT_RADIX |
| FLT_MANT_DIG |
| DBL_MANT_DIG |
| LDBL_MANT_DIG |
| FLT_DECIMAL_DIG |
| DBL_DECIMAL_DIG |
| LDBL_DECIMAL_DIG |
| DECIMAL_DIG |
| FLT_DIG |
| DBL_DIG |
| LDBL_DIG |
| FLT_MIN_EXP |
| DBL_MIN_EXP |
| LDBL_MIN_EXP |
| FLT_MIN_10_EXP |
| DBL_MIN_10_EXP |
| LDBL_MIN_10_EXP |
| FLT_MAX_EXP |
| DBL_MAX_EXP |
| LDBL_MAX_EXP |
| FLT_MAX_10_EXP |
| DBL_MAX_10_EXP |
| LDBL_MAX_10_EXP |
| FLT_MAX |
| DBL_MAX |
| LDBL_MAX |
| FLT_EPSILON |
| DBL_EPSILON |
| LDBL_EPSILON |
| FLT_MIN |
| DBL_MIN |
| LDBL_MIN |
| FLT_TRUE_MIN |
| DBL_TRUE_MIN |
| LDBL_TRUE_MIN |
| |
| # <iso646.h> |
| # These are not frequently used in real C code, but then, it is hard to think |
| # of a good reason to use these as field names. |
| and |
| and_eq |
| bitand |
| bitor |
| compl |
| not |
| not_eq |
| or |
| or_eq |
| xor |
| xor_eq |
| |
| # <limits.h> |
| CHAR_BIT |
| SCHAR_MIN |
| SCHAR_MAX |
| UCHAR_MAX |
| CHAR_MIN |
| CHAR_MAX |
| MB_LEN_MAX |
| SHRT_MIN |
| SHRT_MAX |
| USHRT_MAX |
| INT_MIN |
| INT_MAX |
| UINT_MAX |
| LONG_MIN |
| LONG_MAX |
| ULONG_MAX |
| LLONG_MIN |
| LLONG_MAX |
| ULLONG_MAX |
| |
| # <locale.h> |
| NULL |
| LC_ALL |
| LC_COLLATE |
| LC_CTYPE |
| LC_MONETARY |
| LC_NUMERIC |
| LC_TIME |
| |
| # <math.h> |
| HUGE_VAL |
| HUGE_VALF |
| HUGE_VALL |
| INFINITY |
| NAN |
| FP_INFINITE |
| FP_NAN |
| FP_NORMAL |
| FP_SUBNORMAL |
| FP_ZERO |
| FP_FAST_FMA |
| FP_FAST_FMAF |
| FP_FAST_FMAL |
| FP_ILOGB0 |
| FP_ILOGBNAN |
| MATH_ERRNO |
| MATH_ERREXCEPT |
| math_errhandling |
| fpclassify |
| isfinite |
| isinf |
| isnan |
| isnormal |
| signbit |
| isgreater |
| isgreaterequal |
| isless |
| islessequal |
| islessgreater |
| isunordered |
| |
| # <setjmp.h> |
| setjmp |
| # Oddly, setjmp is a macro, but longjmp is not. |
| |
| # <signal.h> |
| SIG_DFL |
| SIG_ERR |
| SIG_IGN |
| SIGABRT |
| SIGFPE |
| SIGILL |
| SIGINT |
| SIGSEGV |
| SIGTERM |
| |
| # <stdalign.h> |
| alignas |
| __alignas_is_defined |
| |
| # <stdarg.h> |
| va_arg |
| va_copy |
| va_end |
| va_start |
| |
| # <stdatomic.h> |
| __STDC_NO_ATOMICS__ |
| ATOMIC_BOOL_LOCK_FREE |
| ATOMIC_CHAR_LOCK_FREE |
| ATOMIC_CHAR16_T_LOCK_FREE |
| ATOMIC_CHAR32_T_LOCK_FREE |
| ATOMIC_WCHAR_T_LOCK_FREE |
| ATOMIC_SHORT_LOCK_FREE |
| ATOMIC_INT_LOCK_FREE |
| ATOMIC_LONG_LOCK_FREE |
| ATOMIC_LLONG_LOCK_FREE |
| ATOMIC_POINTER_LOCK_FREE |
| ATOMIC_FLAG_INIT |
| ATOMIC_VAR_INIT |
| # Many of the following are listed by the standard as "generic functions" |
| # instead of explicitly calling them out as macros. |
| atomic_init |
| kill_dependency |
| atomic_is_lock_free |
| atomic_store |
| atomic_store_explicit |
| atomic_load |
| atomic_load_explicit |
| atomic_exchange |
| atomic_exchange_explicit |
| atomic_compare_exchange_strong |
| atomic_compare_exchange_strong_explicit |
| atomic_compare_exchange_weak |
| atomic_compare_exchange_weak_explicit |
| atomic_fetch_add |
| atomic_fetch_sub |
| atomic_fetch_or |
| atomic_fetch_xor |
| atomic_fetch_and |
| atomic_fetch_add_explicit |
| atomic_fetch_sub_explicit |
| atomic_fetch_or_explicit |
| atomic_fetch_xor_explicit |
| atomic_fetch_and_explicit |
| |
| # <stdbool.h> |
| bool |
| __bool_true_false_are_defined |
| |
| # <stddef.h> |
| NULL |
| offsetof |
| |
| # <stdint.h> |
| INT16_C |
| INT16_MAX |
| INT16_MIN |
| INT32_C |
| INT32_MAX |
| INT32_MIN |
| INT64_C |
| INT64_MAX |
| INT64_MIN |
| INT8_C |
| INT8_MAX |
| INT8_MIN |
| INT_FAST16_MAX |
| INT_FAST16_MIN |
| INT_FAST32_MAX |
| INT_FAST32_MIN |
| INT_FAST64_MAX |
| INT_FAST64_MIN |
| INT_FAST8_MAX |
| INT_FAST8_MIN |
| INT_LEAST16_MAX |
| INT_LEAST16_MIN |
| INT_LEAST32_MAX |
| INT_LEAST32_MIN |
| INT_LEAST64_MAX |
| INT_LEAST64_MIN |
| INT_LEAST8_MAX |
| INT_LEAST8_MIN |
| INTMAX_C |
| INTMAX_MAX |
| INTMAX_MIN |
| INTPTR_MAX |
| INTPTR_MIN |
| PTRDIFF_MAX |
| PTRDIFF_MIN |
| SIG_ATOMIC_MAX |
| SIG_ATOMIC_MIN |
| SIZE_MAX |
| UINT16_C |
| UINT16_MAX |
| UINT32_C |
| UINT32_MAX |
| UINT64_C |
| UINT64_MAX |
| UINT8_C |
| UINT8_MAX |
| UINT_FAST16_MAX |
| UINT_FAST32_MAX |
| UINT_FAST64_MAX |
| UINT_FAST8_MAX |
| UINT_LEAST16_MAX |
| UINT_LEAST32_MAX |
| UINT_LEAST64_MAX |
| UINT_LEAST8_MAX |
| UINTMAX_C |
| UINTMAX_MAX |
| UINTPTR_MAX |
| WCHAR_MAX |
| WCHAR_MIN |
| WINT_MAX |
| WINT_MIN |
| |
| # <stdio.h> |
| NULL |
| _IOFBF |
| _IOLBF |
| _IONBF |
| BUFSIZ |
| EOF |
| FOPEN_MAX |
| FILENAME_MAX |
| L_tmpnam |
| SEEK_CUR |
| SEEK_END |
| SEEK_SET |
| TMP_MAX |
| stderr |
| stdin |
| stdout |
| L_tmpnam_s |
| TMP_MAX_S |
| |
| # <stdlib.h> |
| NULL |
| EXIT_FAILURE |
| EXIT_SUCCESS |
| RAND_MAX |
| MB_CUR_MAX |
| |
| # <stdnoreturn.h> |
| noreturn |
| |
| # <string.h> |
| NULL |
| |
| # <tgmath.h> |
| acos |
| asin |
| atan |
| acosh |
| asinh |
| atanh |
| cos |
| sin |
| tan |
| cosh |
| sinh |
| tanh |
| exp |
| log |
| pow |
| sqrt |
| fabs |
| atan2 |
| cbrt |
| ceil |
| copysign |
| erf |
| erfc |
| exp2 |
| expm1 |
| fdim |
| floor |
| fma |
| fmax |
| fmin |
| fmod |
| frexp |
| hypot |
| ilogb |
| ldexp |
| lgamma |
| llrint |
| llround |
| log10 |
| log1p |
| log2 |
| logb |
| lrint |
| lround |
| nearbyint |
| nextafter |
| nexttoward |
| remainder |
| remquo |
| rint |
| round |
| scalbn |
| scalbln |
| tgamma |
| trunc |
| carg |
| cimag |
| conj |
| cproj |
| creal |
| |
| # <threads.h> |
| __STD_C_NO_THREADS__ |
| thread_local |
| ONCE_FLAG_INIT |
| TSS_DTOR_ITERATIONS |
| |
| # <time.h> |
| NULL |
| CLOCKS_PER_SEC |
| TIME_UTC |
| |
| # <uchar.h> has no macros. |
| |
| # <wchar.h> |
| NULL |
| WCHAR_MAX |
| WCHAR_MIN |
| WEOF |
| |
| # <wctype.h> |
| WEOF |
| |
| |
| -- C++ |
| alignas # C++11 |
| alignof # C++11 |
| and |
| and_eq |
| asm |
| auto |
| bitand |
| bitor |
| bool |
| break |
| case |
| catch |
| char |
| char16_t # C++11 |
| char32_t # C++11 |
| class |
| compl |
| concept # concepts TS |
| const |
| constexpr # C++11 |
| const_cast |
| continue |
| decltype # C++11 |
| default |
| delete |
| do |
| double |
| dynamic_cast |
| else |
| enum |
| explicit |
| export |
| extern |
| false |
| float |
| for |
| friend |
| goto |
| if |
| inline |
| int |
| long |
| mutable |
| namespace |
| new |
| noexcept # C++11 |
| not |
| not_eq |
| nullptr # C++11 |
| operator |
| or |
| or_eq |
| private |
| protected |
| public |
| register |
| reinterpret_cast |
| requires # concepts TS |
| return |
| short |
| signed |
| sizeof |
| static |
| static_assert # C++11 |
| static_cast |
| struct |
| switch |
| template |
| this |
| thread_local # C++11 |
| throw |
| true |
| try |
| typedef |
| typeid |
| typename |
| union |
| unsigned |
| using |
| virtual |
| void |
| volatile |
| wchar_t |
| while |
| xor |
| xor_eq |
| |
| |
| -- System V libc |
| # <math.h> |
| DOMAIN |
| SING |
| OVERFLOW |
| UNDERFLOW |
| TLOSS |
| PLOSS |
| |
| |
| -- BSD libc |
| # <math.h> |
| MAXFLOAT |
| M_E |
| M_LOG2E |
| M_LOG10E |
| M_LN2 |
| M_LN10 |
| M_PI |
| M_PI_2 |
| M_PI_4 |
| M_1_PI |
| M_2_PI |
| M_2_SQRTPI |
| M_SQRT2 |
| M_SQRT1_2 |
| M_TWOPI |
| M_3PI_4 |
| M_SQRTPI |
| M_LN2LO |
| M_LN2HI |
| M_SQRT3 |
| M_IVLN10 |
| M_LOG2_E |
| M_INVLN2 |
| |
| |
| -- Verilog |
| # Verilog and System Verilog allow any keyword to be used as an identifier as |
| # long as it is prefixed with '\' and followed by whitespace; e.g., \if . |
| |
| |
| -- VHDL |
| # VHDL allows any keyword to be used as an identifier by surrounding it with |
| # '\' characters; e.g. \if\. |
| |
| |
| -- Go |
| break |
| case |
| chan |
| const |
| continue |
| default |
| defer |
| else |
| fallthrough |
| for |
| func |
| go |
| goto |
| if |
| import |
| interface |
| map |
| package |
| range |
| return |
| select |
| switch |
| type |
| var |
| |
| |
| -- Python 2 |
| # Python 2-only keywords. |
| exec |
| print |
| |
| |
| -- Python |
| # Keywords in both Python 2 and 3. |
| and |
| as |
| assert |
| break |
| class |
| continue |
| def |
| del |
| elif |
| else |
| except |
| finally |
| for |
| from |
| global |
| if |
| import |
| in |
| is |
| lambda |
| not |
| or |
| pass |
| raise |
| return |
| try |
| while |
| with |
| yield |
| |
| |
| -- Python 3 |
| # Python 3-only keywords. |
| False |
| None |
| nonlocal |
| print |
| True |
| |
| |
| -- Java |
| abstract |
| assert |
| boolean |
| break |
| byte |
| case |
| catch |
| char |
| class |
| const |
| continue |
| default |
| do |
| double |
| else |
| extends |
| final |
| finally |
| float |
| for |
| goto |
| if |
| implements |
| import |
| instanceof |
| int |
| interface |
| long |
| native |
| new |
| package |
| private |
| protected |
| public |
| return |
| short |
| static |
| strictfp |
| super |
| switch |
| synchronized |
| this |
| throw |
| throws |
| transient |
| try |
| void |
| volatile |
| while |
| |
| |
| -- Protocol Buffers |
| # The protobuf compiler does not reserve *any* words. The following is a |
| # perfectly valid .proto file: |
| # |
| # message message { |
| # optional optional optional = 1; |
| # }; |
| # |
| # message optional { |
| # optional message message = 1; |
| # }; |
| # |
| # Unsurprisingly, the same appears to be true of Cap'n'Proto. |
| |
| |
| -- Dart |
| assert |
| break |
| case |
| catch |
| class |
| const |
| continue |
| default |
| do |
| else |
| enum |
| extends |
| false |
| final |
| finally |
| for |
| if |
| in |
| is |
| new |
| null |
| rethrow |
| return |
| super |
| switch |
| this |
| throw |
| true |
| try |
| var |
| void |
| while |
| with |
| |
| |
| -- Objective C |
| auto |
| break |
| case |
| CGFloat |
| char |
| const |
| continue |
| default |
| do |
| double |
| else |
| enum |
| extern |
| float |
| for |
| goto |
| if |
| implementation |
| int |
| interface |
| long |
| nonatomic |
| NSInteger |
| NSNumber |
| NSObject |
| _Packed |
| property |
| protocol |
| readonly |
| readwrite |
| register |
| retain |
| return |
| short |
| signed |
| sizeof |
| static |
| strong |
| struct |
| switch |
| typedef |
| union |
| unsafe_unretained |
| unsigned |
| void |
| volatile |
| weak |
| while |
| |
| |
| -- Swift |
| # Swift allows any name to be used as an identifier if it is enclosed in |
| # backticks (e.g., `if`). |
| |
| |
| -- Erlang |
| after |
| and |
| andalso |
| band |
| begin |
| bnot |
| bor |
| bsl |
| bsr |
| bxor |
| case |
| catch |
| cond |
| div |
| end |
| fun |
| if |
| let |
| not |
| of |
| or |
| orelse |
| receive |
| rem |
| try |
| when |
| xor |
| |
| |
| -- Rust |
| abstract |
| alignof |
| as |
| become |
| box |
| break |
| const |
| continue |
| crate |
| do |
| else |
| extern |
| final |
| fn |
| for |
| if |
| impl |
| in |
| let |
| loop |
| macro |
| match |
| mod |
| move |
| mut |
| offsetof |
| override |
| priv |
| proc |
| pub |
| pure |
| ref |
| return |
| self |
| Self |
| sizeof |
| static |
| super |
| trait |
| type |
| typeof |
| unsafe |
| unsized |
| use |
| virtual |
| where |
| while |
| yield |
| |
| |
| -- C# |
| # C# allows any name to be used as an identifier if it is prefixed with '@'; |
| # e.g., @if. |
| |
| |
| -- MATLAB |
| break |
| case |
| catch |
| classdef |
| continue |
| else |
| elseif |
| end |
| for |
| function |
| global |
| if |
| otherwise |
| parfor |
| persistent |
| return |
| spmd |
| switch |
| try |
| while |