Support ObjC blocks in the new MM
This commit is contained in:
committed by
Space
parent
94076300ec
commit
3388ca2536
@@ -4759,7 +4759,7 @@ Task frameworkTest(String name, Closure<FrameworkTest> configurator) {
|
|||||||
|
|
||||||
if (isAppleTarget(project)) {
|
if (isAppleTarget(project)) {
|
||||||
frameworkTest('testObjCExport') {
|
frameworkTest('testObjCExport') {
|
||||||
enabled = !isExperimentalMM // Experimental MM doesn't support ObjC blocks and thread state switching for ObjC interop yet.
|
enabled = !isExperimentalMM // Experimental MM does not support Obj-C weaks and thread state switching for ObjC interop yet.
|
||||||
final String frameworkName = 'Kt'
|
final String frameworkName = 'Kt'
|
||||||
final String dir = "$testOutputFramework/testObjCExport"
|
final String dir = "$testOutputFramework/testObjCExport"
|
||||||
final File lazyHeader = file("$dir/$target-lazy.h")
|
final File lazyHeader = file("$dir/$target-lazy.h")
|
||||||
@@ -4808,7 +4808,7 @@ if (isAppleTarget(project)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
frameworkTest('testObjCExportNoGenerics') {
|
frameworkTest('testObjCExportNoGenerics') {
|
||||||
enabled = !isExperimentalMM // Experimental MM doesn't support ObjC blocks and thread state switching for ObjC interop yet.
|
enabled = !isExperimentalMM // Experimental MM does not support Obj-C weaks and thread state switching for ObjC interop yet.
|
||||||
final String frameworkName = 'KtNoGenerics'
|
final String frameworkName = 'KtNoGenerics'
|
||||||
final String frameworkArtifactName = 'Kt'
|
final String frameworkArtifactName = 'Kt'
|
||||||
final String dir = "$testOutputFramework/testObjCExportNoGenerics"
|
final String dir = "$testOutputFramework/testObjCExportNoGenerics"
|
||||||
@@ -4861,7 +4861,7 @@ if (isAppleTarget(project)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
frameworkTest('testObjCExportStatic') {
|
frameworkTest('testObjCExportStatic') {
|
||||||
enabled = !isExperimentalMM // Experimental MM doesn't support ObjC blocks and thread state switching for ObjC interop yet.
|
enabled = !isExperimentalMM // Experimental MM does not support Obj-C weaks and thread state switching for ObjC interop yet.
|
||||||
final String frameworkName = 'KtStatic'
|
final String frameworkName = 'KtStatic'
|
||||||
final String frameworkArtifactName = 'Kt'
|
final String frameworkArtifactName = 'Kt'
|
||||||
final String libraryName = frameworkName + "Library"
|
final String libraryName = frameworkName + "Library"
|
||||||
|
|||||||
@@ -444,6 +444,12 @@ extern "C" void EnsureNeverFrozen(ObjHeader* obj) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" ForeignRefContext InitLocalForeignRef(ObjHeader* object) {
|
||||||
|
// TODO: Remove when legacy MM is gone.
|
||||||
|
// Nothing to do.
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" ForeignRefContext InitForeignRef(ObjHeader* object) {
|
extern "C" ForeignRefContext InitForeignRef(ObjHeader* object) {
|
||||||
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
|
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
|
||||||
auto* node = mm::StableRefRegistry::Instance().RegisterStableRef(threadData, object);
|
auto* node = mm::StableRefRegistry::Instance().RegisterStableRef(threadData, object);
|
||||||
@@ -451,6 +457,7 @@ extern "C" ForeignRefContext InitForeignRef(ObjHeader* object) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void DeinitForeignRef(ObjHeader* object, ForeignRefContext context) {
|
extern "C" void DeinitForeignRef(ObjHeader* object, ForeignRefContext context) {
|
||||||
|
RuntimeAssert(context != nullptr, "DeinitForeignRef must not be called for InitLocalForeignRef");
|
||||||
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
|
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
|
||||||
auto* node = FromForeignRefManager(context);
|
auto* node = FromForeignRefManager(context);
|
||||||
RuntimeAssert(object == **node, "Must correspond to the same object");
|
RuntimeAssert(object == **node, "Must correspond to the same object");
|
||||||
|
|||||||
@@ -21,8 +21,4 @@ RUNTIME_NOTHROW void ReleaseHeapRefNoCollect(const ObjHeader* object) {
|
|||||||
TODO();
|
TODO();
|
||||||
}
|
}
|
||||||
|
|
||||||
ForeignRefContext InitLocalForeignRef(ObjHeader* object) {
|
|
||||||
TODO();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
|||||||
Reference in New Issue
Block a user