Просмотр исходного кода

Add `Check::Context::clang_sema()` method and use it (#6110)

This replaces `sem_ir().clang_ast_unit()->getSema()`.
Boaz Brickner 7 месяцев назад
Родитель
Сommit
a73e259620

+ 3 - 0
toolchain/check/context.h

@@ -286,6 +286,9 @@ class Context {
   auto ast_context() -> clang::ASTContext& {
     return sem_ir().clang_ast_unit()->getASTContext();
   }
+  auto clang_sema() -> clang::Sema& {
+    return sem_ir().clang_ast_unit()->getSema();
+  }
   auto clang_decls() -> SemIR::ClangDeclStore& {
     return sem_ir().clang_decls();
   }

+ 4 - 9
toolchain/check/cpp/import.cpp

@@ -506,9 +506,7 @@ static auto GetDeclContext(Context& context, SemIR::NameScopeId scope_id)
 static auto ClangLookup(Context& context, SemIR::NameScopeId scope_id,
                         clang::DeclarationName name)
     -> std::optional<clang::LookupResult> {
-  clang::ASTUnit* ast = context.sem_ir().clang_ast_unit();
-  CARBON_CHECK(ast);
-  clang::Sema& sema = ast->getSema();
+  clang::Sema& sema = context.clang_sema();
 
   // TODO: Map the LocId of the lookup to a clang SourceLocation and provide it
   // here so that clang's diagnostics can point into the carbon code that uses
@@ -533,7 +531,7 @@ static auto ClangConstructorLookup(Context& context,
     -> clang::DeclContextLookupResult {
   const SemIR::NameScope& scope = context.name_scopes().Get(scope_id);
 
-  clang::Sema& sema = context.sem_ir().clang_ast_unit()->getSema();
+  clang::Sema& sema = context.clang_sema();
   clang::Decl* decl =
       context.clang_decls().Get(scope.clang_decl_context_id()).decl;
   return sema.LookupConstructors(cast<clang::CXXRecordDecl>(decl));
@@ -578,11 +576,8 @@ static auto GetDeclarationName(Context& context, SemIR::NameId name_id)
     return std::nullopt;
   }
 
-  return clang::DeclarationName(context.sem_ir()
-                                    .clang_ast_unit()
-                                    ->getSema()
-                                    .getPreprocessor()
-                                    .getIdentifierInfo(*name));
+  return clang::DeclarationName(
+      context.clang_sema().getPreprocessor().getIdentifierInfo(*name));
 }
 
 // Looks up the given name in the Clang AST in a specific scope. Returns the

+ 1 - 1
toolchain/check/cpp/operators.cpp

@@ -174,7 +174,7 @@ auto LookupCppOperator(Context& context, SemIR::LocId loc_id, Operator op,
     return SemIR::ErrorInst::InstId;
   }
 
-  clang::Sema& sema = context.sem_ir().clang_ast_unit()->getSema();
+  clang::Sema& sema = context.clang_sema();
 
   clang::UnresolvedSet<4> functions;
   // TODO: Add location accordingly.

+ 1 - 3
toolchain/check/cpp/overload_resolution.cpp

@@ -102,9 +102,7 @@ auto PerformCppOverloadResolution(Context& context, SemIR::LocId loc_id,
   clang::OverloadCandidateSet candidate_set(
       loc, clang::OverloadCandidateSet::CandidateSetKind::CSK_Normal);
 
-  clang::ASTUnit* ast = context.sem_ir().clang_ast_unit();
-  CARBON_CHECK(ast);
-  clang::Sema& sema = ast->getSema();
+  clang::Sema& sema = context.clang_sema();
 
   AddOverloadCandidataes(sema, candidate_set, overload_set.candidate_functions,
                          self_expr, arg_exprs);

+ 1 - 1
toolchain/check/cpp/thunk.cpp

@@ -531,7 +531,7 @@ auto BuildCppThunk(Context& context, const SemIR::Function& callee_function)
       CreateThunkFunctionDecl(context, callee_info, thunk_param_types);
 
   // Build the thunk function body.
-  clang::Sema& sema = context.sem_ir().clang_ast_unit()->getSema();
+  clang::Sema& sema = context.clang_sema();
   clang::Sema::ContextRAII context_raii(sema, thunk_function_decl);
   sema.ActOnStartOfFunctionDef(nullptr, thunk_function_decl);
   clang::StmtResult body =

+ 1 - 3
toolchain/check/cpp/type_mapping.cpp

@@ -58,9 +58,7 @@ static auto FindIntLiteralBitWidth(Context& context, SemIR::InstId arg_id)
 static auto LookupCppType(
     Context& context, std::initializer_list<llvm::StringRef> name_components)
     -> clang::QualType {
-  clang::ASTUnit* ast = context.sem_ir().clang_ast_unit();
-  CARBON_CHECK(ast);
-  clang::Sema& sema = ast->getSema();
+  clang::Sema& sema = context.clang_sema();
 
   clang::Decl* decl = sema.getASTContext().getTranslationUnitDecl();
   for (auto name_component : name_components) {