xref: /llvm-project/lldb/scripts/generate-sbapi-dwarf-enum.py (revision ac3321f104ae2a0639845f860b05c97568bb24e2)
1dcbf0fcdSJonas Devlieghere#!/usr/bin/env python3
2dcbf0fcdSJonas Devlieghere
3dcbf0fcdSJonas Devlieghereimport argparse
4dcbf0fcdSJonas Devlieghereimport re
5dbcfa295SNicklas Bomanimport os
6dcbf0fcdSJonas Devlieghere
7dcbf0fcdSJonas DevlieghereHEADER = """\
8dcbf0fcdSJonas Devlieghere//===-- SBLanguages.h -----------------------------------------*- C++ -*-===//
9dcbf0fcdSJonas Devlieghere//
10dcbf0fcdSJonas Devlieghere// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
11dcbf0fcdSJonas Devlieghere// See https://llvm.org/LICENSE.txt for license information.
12dcbf0fcdSJonas Devlieghere// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
13dcbf0fcdSJonas Devlieghere//
14dcbf0fcdSJonas Devlieghere//===----------------------------------------------------------------------===//
15dcbf0fcdSJonas Devlieghere
16dcbf0fcdSJonas Devlieghere#ifndef LLDB_API_SBLANGUAGE_H
17dcbf0fcdSJonas Devlieghere#define LLDB_API_SBLANGUAGE_H
183bde7983SAlex Langford
19*ac3321f1SChelsea Cassanova#include <cstdint>
20*ac3321f1SChelsea Cassanova
213bde7983SAlex Langfordnamespace lldb {
22dcbf0fcdSJonas Devlieghere/// Used by \\ref SBExpressionOptions.
23dcbf0fcdSJonas Devlieghere/// These enumerations use the same language enumerations as the DWARF
24dcbf0fcdSJonas Devlieghere/// specification for ease of use and consistency.
25dcbf0fcdSJonas Devlieghereenum SBSourceLanguageName : uint16_t {
26dcbf0fcdSJonas Devlieghere"""
27dcbf0fcdSJonas Devlieghere
28dcbf0fcdSJonas DevlieghereFOOTER = """\
29dcbf0fcdSJonas Devlieghere};
30dcbf0fcdSJonas Devlieghere
313bde7983SAlex Langford} // namespace lldb
323bde7983SAlex Langford
33dcbf0fcdSJonas Devlieghere#endif
34dcbf0fcdSJonas Devlieghere"""
35dcbf0fcdSJonas Devlieghere
36dcbf0fcdSJonas DevlieghereREGEX = re.compile(
37b8c301f6SAdrian Prantl    r'^ *HANDLE_DW_LNAME *\( *(?P<value>[^,]+), (?P<name>.*), "(?P<comment>[^"]+)",.*\)'
38dcbf0fcdSJonas Devlieghere)
39dcbf0fcdSJonas Devlieghere
40dcbf0fcdSJonas Devlieghere
41dcbf0fcdSJonas Devliegheredef emit_enum(input, output):
42dcbf0fcdSJonas Devlieghere    # Read the input and break it up by lines.
43dcbf0fcdSJonas Devlieghere    lines = []
44dcbf0fcdSJonas Devlieghere    with open(input, "r") as f:
45dcbf0fcdSJonas Devlieghere        lines = f.readlines()
46dcbf0fcdSJonas Devlieghere
47dbcfa295SNicklas Boman    # Create output folder if it does not exist
48dbcfa295SNicklas Boman    os.makedirs(os.path.dirname(output), exist_ok=True)
49dbcfa295SNicklas Boman
50dcbf0fcdSJonas Devlieghere    # Write the output.
51dcbf0fcdSJonas Devlieghere    with open(output, "w") as f:
52dcbf0fcdSJonas Devlieghere        # Emit the header.
53dcbf0fcdSJonas Devlieghere        f.write(HEADER)
54dcbf0fcdSJonas Devlieghere
55dcbf0fcdSJonas Devlieghere        # Emit the enum values.
56dcbf0fcdSJonas Devlieghere        for line in lines:
57dcbf0fcdSJonas Devlieghere            match = REGEX.match(line)
58dcbf0fcdSJonas Devlieghere            if not match:
59dcbf0fcdSJonas Devlieghere                continue
60dcbf0fcdSJonas Devlieghere            f.write(f"  /// {match.group('comment')}.\n")
61dcbf0fcdSJonas Devlieghere            f.write(f"  eLanguageName{match.group('name')} = {match.group('value')},\n")
62dcbf0fcdSJonas Devlieghere
63dcbf0fcdSJonas Devlieghere        # Emit the footer
64dcbf0fcdSJonas Devlieghere        f.write(FOOTER)
65dcbf0fcdSJonas Devlieghere
66dcbf0fcdSJonas Devlieghere
67dcbf0fcdSJonas Devliegheredef main():
68dcbf0fcdSJonas Devlieghere    parser = argparse.ArgumentParser()
69dcbf0fcdSJonas Devlieghere    parser.add_argument("--output", "-o")
70dcbf0fcdSJonas Devlieghere    parser.add_argument("input")
71dcbf0fcdSJonas Devlieghere    args = parser.parse_args()
72dcbf0fcdSJonas Devlieghere
73dcbf0fcdSJonas Devlieghere    emit_enum(args.input, args.output)
74dcbf0fcdSJonas Devlieghere
75dcbf0fcdSJonas Devlieghere
76dcbf0fcdSJonas Devlieghereif __name__ == "__main__":
77dcbf0fcdSJonas Devlieghere    main()
78