Skip to content

Commit 7e06ee4

Browse files
committed
SwiftReflectionContext: Remove dependency on SwiftRemoteMirror header
Although mechanically it's not a circular dependency yet, conceptually it is. Use RemoteAddress instead of the raw addr_t typedef.
1 parent 205aaf7 commit 7e06ee4

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

include/swift/Reflection/ReflectionContext.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include "swift/Reflection/TypeLowering.h"
2525
#include "swift/Reflection/TypeRef.h"
2626
#include "swift/Reflection/TypeRefBuilder.h"
27-
#include "swift/SwiftRemoteMirror/MemoryReaderInterface.h"
2827

2928
#include <iostream>
3029
#include <vector>
@@ -121,10 +120,10 @@ class ReflectionContext
121120
}
122121

123122
bool
124-
projectExistential(addr_t ExistentialAddress,
123+
projectExistential(RemoteAddress ExistentialAddress,
125124
const TypeRef *ExistentialTR,
126125
const TypeRef **OutInstanceTR,
127-
addr_t *OutInstanceAddress) {
126+
RemoteAddress *OutInstanceAddress) {
128127
if (ExistentialTR == nullptr)
129128
return false;
130129

@@ -161,7 +160,8 @@ class ReflectionContext
161160
// auto PointerArray = reinterpret_cast<uintptr_t*>(ExistentialAddress);
162161
// uintptr_t MetadataAddress = PointerArray[Offset];
163162
auto MetadataAddressAddress
164-
= RemoteAddress(ExistentialAddress + ExistentialMetadataField->Offset);
163+
= RemoteAddress(ExistentialAddress.getAddressData() +
164+
ExistentialMetadataField->Offset);
165165

166166
StoredPointer MetadataAddress = 0;
167167
if (!getReader().readInteger(MetadataAddressAddress, &MetadataAddress))
@@ -186,11 +186,10 @@ class ReflectionContext
186186
// of the container has the address to that box.
187187
StoredPointer BoxAddress = 0;
188188

189-
if (!getReader().readInteger(RemoteAddress(ExistentialAddress),
190-
&BoxAddress))
189+
if (!getReader().readInteger(ExistentialAddress, &BoxAddress))
191190
return false;
192191

193-
*OutInstanceAddress = BoxAddress;
192+
*OutInstanceAddress = RemoteAddress(BoxAddress);
194193
}
195194
return true;
196195
}

stdlib/public/SwiftRemoteMirror/SwiftRemoteMirror.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,20 @@ int swift_reflection_projectExistential(SwiftReflectionContextRef ContextRef,
252252
addr_t *StartOfInstanceData) {
253253
auto Context = reinterpret_cast<NativeReflectionContext *>(ContextRef);
254254
auto ExistentialTR = reinterpret_cast<const TypeRef *>(ExistentialTypeRef);
255-
return Context->projectExistential(ExistentialAddress, ExistentialTR,
256-
reinterpret_cast<const TypeRef **>(InstanceTypeRef), StartOfInstanceData);
255+
auto RemoteExistentialAddress = RemoteAddress(ExistentialAddress);
256+
const TypeRef *InstanceTR = nullptr;
257+
RemoteAddress RemoteStartOfInstanceData(nullptr);
258+
auto Success = Context->projectExistential(RemoteExistentialAddress,
259+
ExistentialTR,
260+
&InstanceTR,
261+
&RemoteStartOfInstanceData);
262+
263+
if (Success) {
264+
*InstanceTypeRef = reinterpret_cast<swift_typeref_t>(InstanceTR);
265+
*StartOfInstanceData = RemoteStartOfInstanceData.getAddressData();
266+
}
267+
268+
return Success;
257269
}
258270

259271
void swift_reflection_dumpTypeRef(swift_typeref_t OpaqueTypeRef) {

0 commit comments

Comments
 (0)