Skip to content

Commit 3fe6360

Browse files
committed
Fix concurrency errors
1 parent 5293f88 commit 3fe6360

File tree

5 files changed

+31
-32
lines changed

5 files changed

+31
-32
lines changed

Sources/GateEngine/Scripting/Gravity/Gravity+Errors.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
import Gravity
99

10-
@MainActor
10+
@MainActor
11+
@preconcurrency
1112
internal func errorCallback(
1213
vm: OpaquePointer?,
1314
errorType: error_type_t,

Sources/GateEngine/Scripting/Gravity/Gravity+Files.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
import Foundation
99
import Gravity
1010

11-
@MainActor
11+
@MainActor
12+
@preconcurrency
1213
internal func filenameCallback(
1314
fileID: UInt32,
1415
xData: UnsafeMutableRawPointer?
@@ -21,6 +22,7 @@ internal func filenameCallback(
2122
}
2223

2324
@MainActor
25+
@preconcurrency
2426
internal func loadFileCallback(
2527
file: UnsafePointer<CChar>!,
2628
size: UnsafeMutablePointer<Int>!,

Sources/GateEngine/Scripting/Gravity/Gravity+Testing.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import Gravity
1010

1111
@MainActor
12+
@preconcurrency
1213
internal func unittestCallback(
1314
vm: OpaquePointer!,
1415
errorType: error_type_t,

Sources/GateEngine/Scripting/Gravity/Gravity.swift

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* http://stregasgate.com
66
*/
77

8-
import Gravity
8+
@preconcurrency import Gravity
99
import struct Foundation.URL
1010

1111
extension Gravity {
@@ -374,36 +374,9 @@ public class Gravity {
374374
}
375375
}
376376

377-
// This is only called for global closures. Instance methods use the seperate bridge delegate callback.
378-
@MainActor
379-
internal func gravityCFuncInternal(
380-
vm: OpaquePointer!,
381-
args: UnsafeMutablePointer<gravity_value_t>!,
382-
nargs: UInt16,
383-
rindex: UInt32
384-
) -> Bool {
385-
let functionName: String = {
386-
let gClosure = unsafeBitCast(
387-
args!.pointee.p,
388-
to: UnsafeMutablePointer<gravity_closure_t>.self
389-
)
390-
let cName = gClosure.pointee.f.pointee.identifier!
391-
return String(cString: cName)
392-
}()
393-
394-
let vmID = Int(bitPattern: vm)
395-
396-
guard let function = Gravity.storage[vmID]?.cInternalFunctionMap[functionName] else {
397-
fatalError()
398-
}
399-
var args = UnsafeBufferPointer(start: args, count: Int(nargs)).map({ GravityValue(gValue: $0) })
400-
args.removeFirst() // The first is always the closure being called
401-
let result = function(Gravity(vm: vm), args)
402-
return _gravityHandleCFuncReturn(vm: vm, returnValue: result, returnSlot: rindex)
403-
}
404-
405377
@MainActor
406378
@inline(__always)
379+
@preconcurrency
407380
internal func _gravityHandleCFuncReturn(
408381
vm: OpaquePointer,
409382
returnValue: GravityValue,
@@ -472,7 +445,28 @@ extension Gravity {
472445
@MainActor
473446
public func setFunc(_ key: String, to function: @escaping GravitySwiftFunctionReturns) {
474447
key.withCString { cKey in
475-
let gFunc = gravity_function_new_internal(vm, cKey, gravityCFuncInternal, 0)
448+
let exec: gravity_c_internal = { vm, args, nargs, rindex -> Bool in
449+
let functionName: String = {
450+
let gClosure = unsafeBitCast(
451+
args!.pointee.p,
452+
to: UnsafeMutablePointer<gravity_closure_t>.self
453+
)
454+
let cName = gClosure.pointee.f.pointee.identifier!
455+
return String(cString: cName)
456+
}()
457+
458+
let vmID = Int(bitPattern: vm)
459+
460+
guard let function = Gravity.storage[vmID]?.cInternalFunctionMap[functionName] else {
461+
fatalError()
462+
}
463+
var args = UnsafeBufferPointer(start: args, count: Int(nargs)).map({ GravityValue(gValue: $0) })
464+
args.removeFirst() // The first is always the closure being called
465+
let result = function(Gravity(vm: vm!), args)
466+
return _gravityHandleCFuncReturn(vm: vm!, returnValue: result, returnSlot: rindex)
467+
}
468+
469+
let gFunc = gravity_function_new_internal(vm, cKey, exec, 0)
476470
let gClosure = gravity_closure_new(vm, gFunc)
477471

478472
var gValue = gravity_value_t()

Sources/GateEngine/Scripting/Gravity/GravityClass.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ internal class GravityCFuncBridgedUserData {
134134
}
135135

136136
@MainActor
137+
@preconcurrency
137138
internal func gravityCFuncBridged(
138139
vm: OpaquePointer!,
139140
xdata: UnsafeMutableRawPointer?,

0 commit comments

Comments
 (0)