diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp --- a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -8,6 +8,7 @@ #include "Cocoa.h" #include "NSString.h" +#include "ObjCConstants.h" #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h" #include "Plugins/TypeSystem/Clang/TypeSystemClang.h" @@ -30,37 +31,6 @@ #include "llvm/ADT/APInt.h" #include "llvm/ADT/bit.h" -// Objective-C Type Encoding -#define _C_ID '@' -#define _C_CLASS '#' -#define _C_SEL ':' -#define _C_CHR 'c' -#define _C_UCHR 'C' -#define _C_SHT 's' -#define _C_USHT 'S' -#define _C_INT 'i' -#define _C_UINT 'I' -#define _C_LNG 'l' -#define _C_ULNG 'L' -#define _C_LNG_LNG 'q' -#define _C_ULNG_LNG 'Q' -#define _C_FLT 'f' -#define _C_DBL 'd' -#define _C_BFLD 'b' -#define _C_BOOL 'B' -#define _C_VOID 'v' -#define _C_UNDEF '?' -#define _C_PTR '^' -#define _C_CHARPTR '*' -#define _C_ATOM '%' -#define _C_ARY_B '[' -#define _C_ARY_E ']' -#define _C_UNION_B '(' -#define _C_UNION_E ')' -#define _C_STRUCT_B '{' -#define _C_STRUCT_E '}' -#define _C_VECTOR '!' -#define _C_CONST 'r' using namespace lldb; using namespace lldb_private; diff --git a/lldb/source/Plugins/Language/ObjC/ObjCConstants.h b/lldb/source/Plugins/Language/ObjC/ObjCConstants.h new file mode 100644 --- /dev/null +++ b/lldb/source/Plugins/Language/ObjC/ObjCConstants.h @@ -0,0 +1,44 @@ +//===-- ObjCConstants.h------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_OBJCCONSTANTS_H +#define LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_OBJCCONSTANTS_H + +// Objective-C Type Encoding +#define _C_ID '@' +#define _C_CLASS '#' +#define _C_SEL ':' +#define _C_CHR 'c' +#define _C_UCHR 'C' +#define _C_SHT 's' +#define _C_USHT 'S' +#define _C_INT 'i' +#define _C_UINT 'I' +#define _C_LNG 'l' +#define _C_ULNG 'L' +#define _C_LNG_LNG 'q' +#define _C_ULNG_LNG 'Q' +#define _C_FLT 'f' +#define _C_DBL 'd' +#define _C_BFLD 'b' +#define _C_BOOL 'B' +#define _C_VOID 'v' +#define _C_UNDEF '?' +#define _C_PTR '^' +#define _C_CHARPTR '*' +#define _C_ATOM '%' +#define _C_ARY_B '[' +#define _C_ARY_E ']' +#define _C_UNION_B '(' +#define _C_UNION_E ')' +#define _C_STRUCT_B '{' +#define _C_STRUCT_E '}' +#define _C_VECTOR '!' +#define _C_CONST 'r' + +#endif // LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_OBJCCONSTANTS_H diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h @@ -9,11 +9,11 @@ #ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_APPLEOBJCRUNTIME_APPLEOBJCTYPEENCODINGPARSER_H #define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_APPLEOBJCRUNTIME_APPLEOBJCTYPEENCODINGPARSER_H -#include "clang/AST/ASTContext.h" - +#include "Plugins/Language/ObjC/ObjCConstants.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" #include "lldb/lldb-private.h" -#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" +#include "clang/AST/ASTContext.h" namespace lldb_private { class StringLexer; diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp @@ -78,13 +78,13 @@ clang::QualType AppleObjCTypeEncodingParser::BuildStruct( TypeSystemClang &ast_ctx, StringLexer &type, bool for_expression) { - return BuildAggregate(ast_ctx, type, for_expression, '{', '}', + return BuildAggregate(ast_ctx, type, for_expression, _C_STRUCT_B, _C_STRUCT_E, clang::TTK_Struct); } clang::QualType AppleObjCTypeEncodingParser::BuildUnion( TypeSystemClang &ast_ctx, StringLexer &type, bool for_expression) { - return BuildAggregate(ast_ctx, type, for_expression, '(', ')', + return BuildAggregate(ast_ctx, type, for_expression, _C_UNION_B, _C_UNION_E, clang::TTK_Union); } @@ -148,11 +148,11 @@ clang::QualType AppleObjCTypeEncodingParser::BuildArray( TypeSystemClang &ast_ctx, StringLexer &type, bool for_expression) { - if (!type.NextIf('[')) + if (!type.NextIf(_C_ARY_B)) return clang::QualType(); uint32_t size = ReadNumber(type); clang::QualType element_type(BuildType(ast_ctx, type, for_expression)); - if (!type.NextIf(']')) + if (!type.NextIf(_C_ARY_E)) return clang::QualType(); CompilerType array_type(ast_ctx.CreateArrayType( CompilerType(&ast_ctx, element_type.getAsOpaquePtr()), size, false)); @@ -166,7 +166,7 @@ // dynamic typing will resolve things for us anyway clang::QualType AppleObjCTypeEncodingParser::BuildObjCObjectPointerType( TypeSystemClang &clang_ast_ctx, StringLexer &type, bool for_expression) { - if (!type.NextIf('@')) + if (!type.NextIf(_C_ID)) return clang::QualType(); clang::ASTContext &ast_ctx = clang_ast_ctx.getASTContext(); @@ -203,9 +203,9 @@ 2); // undo our consumption of the string and of the quotes name.clear(); break; - case '}': - case ')': - case ']': + case _C_STRUCT_E: + case _C_UNION_E: + case _C_ARY_E: case '"': // the quoted string is a class name – see the rule break; @@ -260,13 +260,13 @@ switch (type.Peek()) { default: break; - case '{': + case _C_STRUCT_B: return BuildStruct(clang_ast_ctx, type, for_expression); - case '[': + case _C_ARY_B: return BuildArray(clang_ast_ctx, type, for_expression); - case '(': + case _C_UNION_B: return BuildUnion(clang_ast_ctx, type, for_expression); - case '@': + case _C_ID: return BuildObjCObjectPointerType(clang_ast_ctx, type, for_expression); } @@ -274,46 +274,46 @@ default: type.PutBack(1); return clang::QualType(); - case 'c': + case _C_CHR: return ast_ctx.CharTy; - case 'i': + case _C_INT: return ast_ctx.IntTy; - case 's': + case _C_SHT: return ast_ctx.ShortTy; - case 'l': + case _C_LNG: return ast_ctx.getIntTypeForBitwidth(32, true); // this used to be done like this: // return clang_ast_ctx->GetIntTypeFromBitSize(32, true).GetQualType(); // which uses one of the constants if one is available, but we don't think // all this work is necessary. - case 'q': + case _C_LNG_LNG: return ast_ctx.LongLongTy; - case 'C': + case _C_UCHR: return ast_ctx.UnsignedCharTy; - case 'I': + case _C_UINT: return ast_ctx.UnsignedIntTy; - case 'S': + case _C_USHT: return ast_ctx.UnsignedShortTy; - case 'L': + case _C_ULNG: return ast_ctx.getIntTypeForBitwidth(32, false); - // see note for 'l' - case 'Q': + // see note for _C_LNG + case _C_ULNG_LNG: return ast_ctx.UnsignedLongLongTy; - case 'f': + case _C_FLT: return ast_ctx.FloatTy; - case 'd': + case _C_DBL: return ast_ctx.DoubleTy; - case 'B': + case _C_BOOL: return ast_ctx.BoolTy; - case 'v': + case _C_VOID: return ast_ctx.VoidTy; - case '*': + case _C_CHARPTR: return ast_ctx.getPointerType(ast_ctx.CharTy); - case '#': + case _C_CLASS: return ast_ctx.getObjCClassType(); - case ':': + case _C_SEL: return ast_ctx.getObjCSelType(); - case 'b': { + case _C_BFLD: { uint32_t size = ReadNumber(type); if (bitfield_bit_size) { *bitfield_bit_size = size; @@ -321,7 +321,7 @@ } else return clang::QualType(); } - case 'r': { + case _C_CONST: { clang::QualType target_type = BuildType(clang_ast_ctx, type, for_expression); if (target_type.isNull()) @@ -331,8 +331,8 @@ else return ast_ctx.getConstType(target_type); } - case '^': { - if (!for_expression && type.NextIf('?')) { + case _C_PTR: { + if (!for_expression && type.NextIf(_C_UNDEF)) { // if we are not supporting the concept of unknownAny, but what is being // created here is an unknownAny*, then we can just get away with a void* // this is theoretically wrong (in the same sense as 'theoretically @@ -350,7 +350,7 @@ return ast_ctx.getPointerType(target_type); } } - case '?': + case _C_UNDEF: return for_expression ? ast_ctx.UnknownAnyTy : clang::QualType(); } }