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