diff --git a/interop/src/cangjie/InteropTypes.cj b/interop/src/cangjie/InteropTypes.cj index 993c8346eca71158524b8321f11f2583ed68ddc4..38197fc41b63a705bafe7b40ad4ccfae8234e981 100644 --- a/interop/src/cangjie/InteropTypes.cj +++ b/interop/src/cangjie/InteropTypes.cj @@ -20,8 +20,10 @@ public type KPointer = UInt64 public type KFloat = Float32 public type pointer = KPointer public type KInt = Int32 +public type KLong = Int64 public type KStringPtr = String public type ArrayBuffer = ArrayList +public const nullptr: UInt64 = 0 @C public struct KInteropReturnBuffer { public var length: Int32 diff --git a/interop/src/cangjie/Finalizable.cj b/interop/src/cangjie/MaterializedBase.cj similarity index 83% rename from interop/src/cangjie/Finalizable.cj rename to interop/src/cangjie/MaterializedBase.cj index 5e26d0e8fc3a77cc0d4b3be04ecfdeb33a1de51b..362de947c7ac506d35fc45ec7348be4991bcf927 100644 --- a/interop/src/cangjie/Finalizable.cj +++ b/interop/src/cangjie/MaterializedBase.cj @@ -24,14 +24,11 @@ public open class Finalizable { } } -public abstract class MaterializedBase { - public var peer: Option = Option.None +public interface MaterializedBase { + public func getPeer(): ?Finalizable - public func getPeer(): ?Finalizable { - return this.peer - } - - public static func toPeerPtr(value: Object): KPointer { + public static func toPeerPtr(value: Any): KPointer + { let base: MaterializedBase = match (value as MaterializedBase) { case Some(x) => x case None => throw Exception("Value is not a MaterializedBase instance!") diff --git a/interop/src/cangjie/SerializerBase.cj b/interop/src/cangjie/SerializerBase.cj index 99df18ce96becca321931bc08668ce7c8c8e33ea..fdca1ae634db9a2391aaa688ab09504d45acb213 100644 --- a/interop/src/cangjie/SerializerBase.cj +++ b/interop/src/cangjie/SerializerBase.cj @@ -49,7 +49,7 @@ public enum RuntimeType { } } -public class PromiseAndResourceId { +public class PromiseAndResourceId { public var promise: Any public var resourceId: ResourceId init (promise: Any, resourceId: ResourceId) { @@ -137,21 +137,21 @@ public open class SerializerBase { this.writePointer(callSync) return resourceId } - public func holdAndWriteCallbackForPromiseVoid(): PromiseAndResourceId { + public func holdAndWriteCallbackForPromiseVoid(): PromiseAndResourceId { return holdAndWriteCallbackForPromiseVoid(0, 0, 0, 0) } - public func holdAndWriteCallbackForPromiseVoid(hold: KPointer, release: KPointer, call: KPointer, callSync: KPointer): PromiseAndResourceId { - let resourceId: ResourceId - resourceId = this.holdAndWriteCallback({ => }, hold, release, call, callSync) - return PromiseAndResourceId({ => }, resourceId) + public func holdAndWriteCallbackForPromiseVoid(hold: KPointer, release: KPointer, call: KPointer, callSync: KPointer): PromiseAndResourceId { + var resourceId: ResourceId = 0 + let promise = { => } + return PromiseAndResourceId(promise, resourceId) } - public func holdAndWriteCallbackForPromise(): PromiseAndResourceId { + public func holdAndWriteCallbackForPromise(): PromiseAndResourceId { return holdAndWriteCallbackForPromise(0, 0, 0) } - public func holdAndWriteCallbackForPromise(hold: KPointer, release: KPointer, call: KPointer): PromiseAndResourceId { - let resourceId: ResourceId - resourceId = this.holdAndWriteCallback({ => }, hold, release, call, 0) - return PromiseAndResourceId({ => }, resourceId) + public func holdAndWriteCallbackForPromise(hold: KPointer, release: KPointer, call: KPointer): PromiseAndResourceId { + var resourceId: ResourceId = 0 + let promise = { => } + return PromiseAndResourceId(promise, resourceId) } public func writeFunction(value: Any): Unit { // TODO