Support ObjC blocks in the new MM

This commit is contained in:
Alexander Shabalin
2021-05-19 07:31:12 +00:00
committed by Space
parent 94076300ec
commit 3388ca2536
3 changed files with 10 additions and 7 deletions
@@ -4759,7 +4759,7 @@ Task frameworkTest(String name, Closure<FrameworkTest> configurator) {
if (isAppleTarget(project)) {
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 dir = "$testOutputFramework/testObjCExport"
final File lazyHeader = file("$dir/$target-lazy.h")
@@ -4808,7 +4808,7 @@ if (isAppleTarget(project)) {
}
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 frameworkArtifactName = 'Kt'
final String dir = "$testOutputFramework/testObjCExportNoGenerics"
@@ -4861,7 +4861,7 @@ if (isAppleTarget(project)) {
}
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 frameworkArtifactName = 'Kt'
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) {
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
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) {
RuntimeAssert(context != nullptr, "DeinitForeignRef must not be called for InitLocalForeignRef");
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
auto* node = FromForeignRefManager(context);
RuntimeAssert(object == **node, "Must correspond to the same object");
@@ -21,8 +21,4 @@ RUNTIME_NOTHROW void ReleaseHeapRefNoCollect(const ObjHeader* object) {
TODO();
}
ForeignRefContext InitLocalForeignRef(ObjHeader* object) {
TODO();
}
} // extern "C"