mirror of
https://github.com/nlohmann/json.git
synced 2026-09-26 03:55:48 +00:00
* Make JSON_STRICT_NUL_HANDLING part of the ABI tag JSON_STRICT_NUL_HANDLING (#5534) changes the bodies of inline functions: the lexer's handling of '\0' and input_adapter() for char arrays. So translation units compiled with and without it define the same functions differently, an ODR violation - the case the ABI tag exists for, as with JSON_BRACE_INIT_COPY_SEMANTICS (_bics). It now appends _snul to the inline namespace. The macro is new in 3.13.0, so no existing namespace changes. Its default moves to abi_macros.hpp, and it is only #undef'd without JSON_TEST_KEEP_MACROS, as for the other ABI macros. The ABI config tests, the namespace docs, the macro's docs and the Natvis file cover the new tag. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Amalgamate Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me>
42 lines
1.4 KiB
Python
Executable File
42 lines
1.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import itertools
|
|
import jinja2
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
def semver(v):
|
|
if not re.fullmatch(r'\d+\.\d+\.\d+', v):
|
|
raise ValueError
|
|
return v
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--version', required=True, type=semver, help='Library version number')
|
|
parser.add_argument('output', help='Output directory for nlohmann_json.natvis')
|
|
args = parser.parse_args()
|
|
|
|
namespaces = ['nlohmann']
|
|
abi_prefix = 'json_abi'
|
|
abi_tags = ['_diag', '_ldvcmp', '_dp', '_bics', '_psp', '_snul']
|
|
version = '_v' + args.version.replace('.', '_')
|
|
inline_namespaces = []
|
|
|
|
# generate all combinations of inline namespace names
|
|
for n in range(0, len(abi_tags) + 1):
|
|
for tags in itertools.combinations(abi_tags, n):
|
|
ns = abi_prefix + ''.join(tags)
|
|
inline_namespaces += [ns, ns + version]
|
|
|
|
namespaces += [f'{namespaces[0]}::{ns}' for ns in inline_namespaces]
|
|
|
|
env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=sys.path[0]), autoescape=True, trim_blocks=True,
|
|
lstrip_blocks=True, keep_trailing_newline=True)
|
|
template = env.get_template('nlohmann_json.natvis.j2')
|
|
natvis = template.render(namespaces=namespaces)
|
|
|
|
with open(os.path.join(args.output, 'nlohmann_json.natvis'), 'w') as f:
|
|
f.write(natvis)
|