SwiftCompilerSources: add some module-level APIs

* `Context.lookupFunction`
* `ModulePassContext.loadFunction`
* `ModulePassContext.createSpecializedFunctionDeclaration`
* `ModulePassContext.moveFunctionBody`
* `ModulePassContext.mangle(withDeadArguments:)`
This commit is contained in:
Erik Eckstein
2024-01-30 19:31:31 +01:00
parent fa0be3c10f
commit 250e2680aa
5 changed files with 119 additions and 0 deletions

View File

@@ -123,9 +123,47 @@ struct ModulePassContext : Context, CustomStringConvertible {
_bridged.endTransformFunction();
}
func loadFunction(function: Function, loadCalleesRecursively: Bool) -> Bool {
if function.isDefinition {
return true
}
_bridged.loadFunction(function.bridged, loadCalleesRecursively)
return function.isDefinition
}
func createSpecializedFunctionDeclaration(
name: String,
parameters: [ParameterInfo],
hasSelfParameter: Bool,
fromOriginal originalFunction: Function
) -> Function {
return name._withBridgedStringRef { nameRef in
let bridgedParamInfos = parameters.map { $0._bridged }
return bridgedParamInfos.withUnsafeBufferPointer { paramBuf in
_bridged.createSpecializedFunction(nameRef, paramBuf.baseAddress, paramBuf.count,
hasSelfParameter, originalFunction.bridged).function
}
}
}
func moveFunctionBody(from sourceFunc: Function, to destFunc: Function) {
precondition(!destFunc.isDefinition, "cannot move body to non-empty function")
_bridged.moveFunctionBody(sourceFunc.bridged, destFunc.bridged)
}
func mangleAsyncRemoved(from function: Function) -> String {
return String(taking: _bridged.mangleAsyncRemoved(function.bridged))
}
func mangle(withDeadArguments: [Int], from function: Function) -> String {
withDeadArguments.withUnsafeBufferPointer { bufPtr in
bufPtr.withMemoryRebound(to: Int.self) { valPtr in
String(taking: _bridged.mangleWithDeadArgs(valPtr.baseAddress,
withDeadArguments.count,
function.bridged))
}
}
}
}
extension GlobalVariable {