You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.2 KiB
65 lines
2.2 KiB
from __future__ import annotations
|
|
|
|
import re
|
|
|
|
# https://en.cppreference.com/w/c/keyword
|
|
_keywords = [
|
|
'auto', 'break', 'case', 'char', 'const', 'continue', 'default', 'do', 'double',
|
|
'else', 'enum', 'extern', 'float', 'for', 'goto', 'if', 'inline', 'int', 'long',
|
|
'register', 'restrict', 'return', 'short', 'signed', 'sizeof', 'static', 'struct',
|
|
'switch', 'typedef', 'union', 'unsigned', 'void', 'volatile', 'while',
|
|
'_Alignas', '_Alignof', '_Atomic', '_Bool', '_Complex',
|
|
'_Decimal32', '_Decimal64', '_Decimal128',
|
|
'_Generic', '_Imaginary', '_Noreturn', '_Static_assert', '_Thread_local',
|
|
]
|
|
# These are only keyword'y when the corresponding headers are included.
|
|
# They are used as default value for c_extra_keywords.
|
|
_macroKeywords = [
|
|
'alignas', 'alignof', 'bool', 'complex', 'imaginary', 'noreturn', 'static_assert',
|
|
'thread_local',
|
|
]
|
|
|
|
# these are ordered by precedence
|
|
_expression_bin_ops = [
|
|
['||', 'or'],
|
|
['&&', 'and'],
|
|
['|', 'bitor'],
|
|
['^', 'xor'],
|
|
['&', 'bitand'],
|
|
['==', '!=', 'not_eq'],
|
|
['<=', '>=', '<', '>'],
|
|
['<<', '>>'],
|
|
['+', '-'],
|
|
['*', '/', '%'],
|
|
['.*', '->*'],
|
|
]
|
|
_expression_unary_ops = ["++", "--", "*", "&", "+", "-", "!", "not", "~", "compl"]
|
|
_expression_assignment_ops = ["=", "*=", "/=", "%=", "+=", "-=",
|
|
">>=", "<<=", "&=", "and_eq", "^=", "xor_eq", "|=", "or_eq"]
|
|
|
|
_max_id = 1
|
|
_id_prefix = [None, 'c.', 'Cv2.']
|
|
# Ids are used in lookup keys which are used across pickled files,
|
|
# so when _max_id changes, make sure to update the ENV_VERSION.
|
|
|
|
_string_re = re.compile(r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'"
|
|
r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.DOTALL)
|
|
|
|
# bool, complex, and imaginary are macro "keywords", so they are handled separately
|
|
_simple_type_specifiers_re = re.compile(r"""
|
|
\b(
|
|
void|_Bool
|
|
|signed|unsigned
|
|
|short|long
|
|
|char
|
|
|int
|
|
|__uint128|__int128
|
|
|__int(8|16|32|64|128) # extension
|
|
|float|double
|
|
|_Decimal(32|64|128)
|
|
|_Complex|_Imaginary
|
|
|__float80|_Float64x|__float128|_Float128|__ibm128 # extension
|
|
|__fp16 # extension
|
|
|_Sat|_Fract|fract|_Accum|accum # extension
|
|
)\b
|
|
""", re.VERBOSE)
|
|
|