Skip to content

Commit 289ae2a

Browse files
revert: \"fix: prevent crash during debug on fast view churn (like with HMR)\" - restore original revert
Agent-Logs-Url: https://github.com/NativeScript/ios/sessions/62444c68-20cd-4f29-98e1-008f34ee1416 Co-authored-by: NathanWalker <457187+NathanWalker@users.noreply.github.com>
1 parent 0fd0e84 commit 289ae2a

File tree

1 file changed

+3
-33
lines changed

1 file changed

+3
-33
lines changed

NativeScript/runtime/ArgConverter.mm

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include "Interop.h"
88
#include "Helpers.h"
99
#include "Runtime.h"
10-
#include "RuntimeConfig.h"
1110

1211
using namespace v8;
1312
using namespace std;
@@ -28,24 +27,7 @@
2827
bool callSuper = false;
2928
if (instanceMethod) {
3029
BaseDataWrapper* wrapper = tns::GetValue(isolate, receiver);
31-
32-
if (wrapper == nullptr) {
33-
// During fast view churn like HMR in development, JS objects can outlive their
34-
// native wrappers briefly. In Debug, throw a catchable JS error instead of crashing.
35-
// In Release, assert so crash reporting can capture unexpected cases.
36-
if (RuntimeConfig.IsDebug) {
37-
const char* selectorStr = meta ? meta->selectorAsString() : "<unknown>";
38-
const char* jsNameStr = meta ? meta->jsName() : "<unknown>";
39-
const char* classNameStr = klass ? class_getName(klass) : "<unknown>";
40-
std::string errMsg = std::string("Cannot call method '") + jsNameStr +
41-
"' on a disposed native object (class: " + classNameStr +
42-
", selector: " + selectorStr + "). This can happen during HMR or fast view churn.";
43-
isolate->ThrowException(Exception::Error(tns::ToV8String(isolate, errMsg)));
44-
return v8::Undefined(isolate);
45-
} else {
46-
tns::Assert(false, isolate);
47-
}
48-
}
30+
tns::Assert(wrapper != nullptr, isolate);
4931

5032
if (wrapper->Type() == WrapperType::ObjCAllocObject) {
5133
ObjCAllocDataWrapper* allocWrapper = static_cast<ObjCAllocDataWrapper*>(wrapper);
@@ -61,19 +43,7 @@
6143
// For extended classes we will call the base method
6244
callSuper = isMethodCallback && it != cache->ClassPrototypes.end();
6345
} else {
64-
if (RuntimeConfig.IsDebug) {
65-
const char* selectorStr = meta ? meta->selectorAsString() : "<unknown>";
66-
const char* jsNameStr = meta ? meta->jsName() : "<unknown>";
67-
const char* classNameStr = klass ? class_getName(klass) : "<unknown>";
68-
std::string errMsg = std::string("Unexpected receiver wrapper type ") +
69-
std::to_string((int)wrapper->Type()) + " for method '" + jsNameStr +
70-
"' (class: " + classNameStr + ", selector: " + selectorStr +
71-
"). This can happen during HMR or fast view churn.";
72-
isolate->ThrowException(Exception::Error(tns::ToV8String(isolate, errMsg)));
73-
return v8::Undefined(isolate);
74-
} else {
75-
tns::Assert(false, isolate);
76-
}
46+
tns::Assert(false, isolate);
7747
}
7848
}
7949

@@ -908,7 +878,7 @@
908878
Local<Object> thiz = args.This();
909879
Isolate* isolate = args.GetIsolate();
910880
BaseDataWrapper* wrapper = tns::GetValue(isolate, thiz);
911-
if (wrapper == nullptr || wrapper->Type() != WrapperType::ObjCObject) {
881+
if (wrapper == nullptr && wrapper->Type() != WrapperType::ObjCObject) {
912882
return;
913883
}
914884

0 commit comments

Comments
 (0)