Skip to content

Commit ce873fe

Browse files
Merge pull request #7380 from adrian-prantl/cherry-pick-next
Cherry pick next
2 parents 025b799 + 6fc1e6a commit ce873fe

File tree

9 files changed

+111
-149
lines changed

9 files changed

+111
-149
lines changed

lldb/source/Core/ValueObjectDynamicValue.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@
2222
#include "lldb/Utility/Status.h"
2323
#include "lldb/lldb-types.h"
2424

25-
#ifdef LLDB_ENABLE_SWIFT
26-
#include "Plugins/TypeSystem/Swift/SwiftASTContext.h"
27-
#endif // LLDB_ENABLE_SWIFT
28-
2925
#include <cstring>
3026
#include <optional>
3127
namespace lldb_private {
@@ -456,7 +452,7 @@ bool ValueObjectDynamicValue::DynamicValueTypeInfoNeedsUpdate() {
456452

457453
if (!scratch_ctx || !cached_ctx)
458454
return true;
459-
return cached_ctx.GetSharedPointer().get() != scratch_ctx->get();
455+
return (void*)cached_ctx.GetSharedPointer().get() != (void*)scratch_ctx->get();
460456
#else // !LLDB_ENABLE_SWIFT
461457
return false;
462458
#endif // LLDB_ENABLE_SWIFT

lldb/source/Expression/Materializer.cpp

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@
2525
#include "lldb/Utility/RegisterValue.h"
2626
#include "lldb/lldb-forward.h"
2727

28-
#ifdef LLDB_ENABLE_SWIFT
29-
#include "Plugins/TypeSystem/Swift/SwiftASTContext.h"
30-
#include "Plugins/ExpressionParser/Swift/SwiftPersistentExpressionState.h"
31-
#endif //LLDB_ENABLE_SWIFT
32-
3328
#include <memory>
3429
#include <optional>
3530

@@ -663,12 +658,6 @@ class EntityVariableBase : public Materializer::Entity {
663658

664659
CompilerType valobj_type = valobj_sp->GetCompilerType();
665660

666-
#ifdef LLDB_ENABLE_SWIFT
667-
if (SwiftASTContext::IsGenericType(valobj_type)) {
668-
valobj_sp = valobj_sp->GetDynamicValue(lldb::eDynamicDontRunTarget);
669-
}
670-
#endif // LLDB_ENABLE_SWIFT
671-
672661
lldb_private::DataExtractor data;
673662

674663
Status extract_error;
@@ -1077,8 +1066,8 @@ class EntityResultVariable : public Materializer::Entity {
10771066
"system: %s", status.AsCString());
10781067
return;
10791068
}
1080-
persistent_state =
1081-
target_sp->GetSwiftPersistentExpressionState(*exe_scope);
1069+
persistent_state = target_sp->GetPersistentExpressionStateForLanguage(
1070+
lldb::eLanguageTypeSwift);
10821071
#endif // LLDB_ENABLE_SWIFT
10831072
} else {
10841073
auto type_system_or_err =

lldb/source/Expression/UserExpression.cpp

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,6 @@
4141
#include "lldb/Utility/State.h"
4242
#include "lldb/Utility/StreamString.h"
4343

44-
#ifdef LLDB_ENABLE_SWIFT
45-
#include "Plugins/TypeSystem/Swift/SwiftASTContext.h"
46-
#include "Plugins/ExpressionParser/Swift/SwiftPersistentExpressionState.h"
47-
#endif //LLDB_ENABLE_SWIFT
48-
4944
using namespace lldb_private;
5045

5146
char UserExpression::ID;
@@ -438,18 +433,9 @@ UserExpression::Execute(DiagnosticManager &diagnostic_manager,
438433
lldb::ExpressionResults expr_result = DoExecute(
439434
diagnostic_manager, exe_ctx, options, shared_ptr_to_me, result_var);
440435
Target *target = exe_ctx.GetTargetPtr();
441-
if (options.GetSuppressPersistentResult() && result_var && target) {
442-
#ifdef LLDB_ENABLE_SWIFT
443-
if (m_language == lldb::eLanguageTypeSwift) {
444-
if (auto *exe_scope = exe_ctx.GetBestExecutionContextScope())
445-
if (auto *persistent_state =
446-
target->GetSwiftPersistentExpressionState(*exe_scope))
447-
persistent_state->RemovePersistentVariable(result_var);
448-
} else
449-
#endif // LLDB_ENABLE_SWIFT
436+
if (options.GetSuppressPersistentResult() && result_var && target)
450437
if (auto *persistent_state =
451438
target->GetPersistentExpressionStateForLanguage(m_language))
452439
persistent_state->RemovePersistentVariable(result_var);
453-
}
454440
return expr_result;
455441
}

lldb/source/Plugins/LanguageRuntime/Swift/ReflectionContext.cpp

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "SwiftLanguageRuntimeImpl.h"
1414
#include "lldb/Utility/LLDBLog.h"
1515
#include "lldb/Utility/Log.h"
16+
#include "swift/Demangling/Demangle.h"
1617

1718
using namespace lldb;
1819
using namespace lldb_private;
@@ -26,12 +27,14 @@ template <typename ReflectionContext>
2627
class TargetReflectionContext
2728
: public SwiftLanguageRuntimeImpl::ReflectionContextInterface {
2829
ReflectionContext m_reflection_ctx;
30+
swift::reflection::TypeConverter m_type_converter;
2931

3032
public:
3133
TargetReflectionContext(
3234
std::shared_ptr<swift::reflection::MemoryReader> reader,
3335
SwiftMetadataCache *swift_metadata_cache)
34-
: m_reflection_ctx(reader, swift_metadata_cache) {}
36+
: m_reflection_ctx(reader, swift_metadata_cache),
37+
m_type_converter(m_reflection_ctx.getBuilder()) {}
3538

3639
llvm::Optional<uint32_t> AddImage(
3740
llvm::function_ref<std::pair<swift::remote::RemoteRef<void>, uint64_t>(
@@ -55,6 +58,39 @@ class TargetReflectionContext
5558
likely_module_names);
5659
}
5760

61+
const swift::reflection::TypeRef *
62+
GetTypeRefOrNull(StringRef mangled_type_name) override {
63+
swift::Demangle::Demangler dem;
64+
swift::Demangle::NodePointer node = dem.demangleSymbol(mangled_type_name);
65+
const swift::reflection::TypeRef *type_ref = GetTypeRefOrNull(dem, node);
66+
if (!type_ref)
67+
LLDB_LOG(GetLog(LLDBLog::Types), "Could not find typeref for type: {0}",
68+
mangled_type_name);
69+
return type_ref;
70+
}
71+
72+
virtual const swift::reflection::TypeRef *
73+
GetTypeRefOrNull(swift::Demangle::Demangler &dem,
74+
swift::Demangle::NodePointer node) override {
75+
auto type_ref_or_err =
76+
swift::Demangle::decodeMangledType(m_reflection_ctx.getBuilder(), node);
77+
if (type_ref_or_err.isError()) {
78+
LLDB_LOG(GetLog(LLDBLog::Types),
79+
"Could not find typeref: decode mangled type failed. Error: {0}",
80+
type_ref_or_err.getError()->copyErrorString());
81+
return nullptr;
82+
}
83+
return type_ref_or_err.getType();
84+
}
85+
86+
const swift::reflection::TypeInfo *
87+
GetClassInstanceTypeInfo(const swift::reflection::TypeRef *type_ref,
88+
swift::remote::TypeInfoProvider *provider) override {
89+
if (!type_ref)
90+
return nullptr;
91+
return m_type_converter.getClassInstanceTypeInfo(type_ref, 0, provider);
92+
}
93+
5894
const swift::reflection::TypeInfo *
5995
GetTypeInfo(const swift::reflection::TypeRef *type_ref,
6096
swift::remote::TypeInfoProvider *provider) override {
@@ -95,6 +131,11 @@ class TargetReflectionContext
95131
return m_reflection_ctx.getReader();
96132
}
97133

134+
const swift::reflection::TypeRef *
135+
LookupSuperclass(const swift::reflection::TypeRef *tr) override {
136+
return m_reflection_ctx.getBuilder().lookupSuperclass(tr);
137+
}
138+
98139
bool ForEachSuperClassType(
99140
swift::remote::TypeInfoProvider *tip, lldb::addr_t pointer,
100141
std::function<bool(SwiftLanguageRuntimeImpl::SuperClassType)> fn)
@@ -160,18 +201,20 @@ class TargetReflectionContext
160201
skip_artificial_subclasses);
161202
}
162203

163-
swift::reflection::TypeRefBuilder &GetBuilder() override {
164-
return m_reflection_ctx.getBuilder();
165-
}
166-
167204
llvm::Optional<bool> IsValueInlinedInExistentialContainer(
168205
swift::remote::RemoteAddress existential_address) override {
169206
return m_reflection_ctx.isValueInlinedInExistentialContainer(
170207
existential_address);
171208
}
172209

173-
swift::remote::RemoteAbsolutePointer
174-
StripSignedPointer(swift::remote::RemoteAbsolutePointer pointer) override {
210+
const swift::reflection::TypeRef *ApplySubstitutions(
211+
const swift::reflection::TypeRef *type_ref,
212+
swift::reflection::GenericArgumentMap substitutions) override{
213+
return type_ref->subst(m_reflection_ctx.getBuilder(), substitutions);
214+
}
215+
216+
swift::remote::RemoteAbsolutePointer StripSignedPointer(
217+
swift::remote::RemoteAbsolutePointer pointer) override {
175218
return m_reflection_ctx.stripSignedPointer(pointer);
176219
}
177220
};

0 commit comments

Comments
 (0)