> On May 12, 2016, at 7:47 PM, Jordan Rose via swift-dev <swift-dev@swift.org> 
> wrote:
>> On May 12, 2016, at 18:56, Andrew Trick <atr...@apple.com 
>> <mailto:atr...@apple.com>> wrote:
>> 
>>> - What was the thought behind putting UnsafeBytePointer in PointerTypeKind? 
>>> OpaquePointer isn’t there, and I’m concerned about places that test if 
>>> something’s a pointer by checking that the pointee type is non-null (by far 
>>> the common pattern).
>> 
>> In general I wanted UnsafeBytePointer to stand-in for UnsafePointer<Void> 
>> throughout the type system and handle most of the same implicit conversions. 
>> Specifically, I wanted getAnyPointerElementType to do the same thing as 
>> UnsafePointer<Void> and return an empty tuple pointee type so that the 
>> calling code could be reused. Also, I thought that supporting 
>> PointerToPointerExpr was necessary.
>> 
>> The only extra burden of doing this that I could find was that 
>> getPointerPointeePropertyDecl may return null. The only code that calls this 
>> is emitStoreToForeignErrorSlot.
>> 
>> I'm very open to alternate implementations, especially once the proposal is 
>> accepted.
> 
> I’m sorry, I got ASTContext::getPointerPointeePropertyDecl and 
> TypeBase::getAnyPointerElementType mixed up. I’m still a little unsure that 
> this is the right way to go, and I wonder how many uses of 
> getAnyPointerElementType actually make sense for UnsafeBytePointer, but I see 
> now that it’s the most incremental way to make this change.
> 
> For fun I looked through the (relatively small) set of uses for 
> getAnyPointerElementType, and it looks like only the inout-to-pointer ones 
> are relevant for UnsafeBytePointer. (These are the ones in lib/Sema, plus 
> SILGen’s RValueEmitter::visitInOutToPointerExpr.) So it could be dropped as a 
> pointer type. But it doesn’t seem to be doing any harm.

One thing Andy and I discussed is whether we could support aliasing addressors. 
 The answer is yes, although it will important to force a copy in cases where a 
non-aliasing address is required, i.e. when passing the l-value as an inout 
argument or when implementing materializeForSet.  An aliasing addressor would 
naturally return an UnsafeBytePointer value (or better yet a typed version of 
it).

John.

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to