Remove erroneous reference to the base `Symbol` when mapping Rust types (#1439)

`.addReference(this)` adds a reference to the `Symbol` on which
`.mapRustType` was called. This is correct only when `f` is a function
that _wraps_ its input `RustType`; for example, when `f` wraps it in a
`Box` or constructs a `Vec`. However, the code is incorrect for an
arbitrary `f`; for example, when `f` _swaps_ the type.
This commit is contained in:
david-perez 2022-07-07 20:23:08 +02:00 committed by GitHub
parent db43d7a22e
commit 1338063cdb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 2 deletions

View File

@ -101,11 +101,15 @@ fun Symbol.makeOptional(): Symbol {
} }
} }
/** Map the RustType of a symbol with [f] */ /**
* Map the [RustType] of a symbol with [f].
*
* WARNING: This function does not set any `SymbolReference`s on the returned symbol. You will have to add those
* yourself if your logic relies on them.
**/
fun Symbol.mapRustType(f: (RustType) -> RustType): Symbol { fun Symbol.mapRustType(f: (RustType) -> RustType): Symbol {
val newType = f(this.rustType()) val newType = f(this.rustType())
return Symbol.builder().rustType(newType) return Symbol.builder().rustType(newType)
.addReference(this)
.name(newType.name) .name(newType.name)
.build() .build()
} }