|
7 | 7 | #include "Interop.h" |
8 | 8 | #include "Helpers.h" |
9 | 9 | #include "Runtime.h" |
| 10 | +#include "RuntimeConfig.h" |
10 | 11 |
|
11 | 12 | using namespace v8; |
12 | 13 | using namespace std; |
|
32 | 33 | // During fast view churn like HMR in development, JS objects can outlive their |
33 | 34 | // native wrappers briefly. In Debug, avoid a crash and just skip the native call. |
34 | 35 | // In Release, assert so crash reporting can capture unexpected cases. |
35 | | - #ifdef DEBUG |
| 36 | + if (RuntimeConfig.IsDebug) { |
36 | 37 | const char* selectorStr = meta ? meta->selectorAsString() : "<unknown>"; |
37 | 38 | const char* jsNameStr = meta ? meta->jsName() : "<unknown>"; |
38 | 39 | const char* classNameStr = klass ? class_getName(klass) : "<unknown>"; |
39 | | - Log(@"ArgConverter::Invoke: skipping instance method on non-native receiver (class: %s, selector: %s, jsName: %s, args: %d). Normal during HMR.", |
| 40 | + Log(@"ArgConverter::Invoke: ignore method on non-native receiver (class: %s, selector: %s, jsName: %s, args: %d). Common during HMR.", |
40 | 41 | classNameStr, selectorStr, jsNameStr, (int)args.Length()); |
41 | 42 | return v8::Undefined(isolate); |
42 | | - #else |
| 43 | + } else { |
43 | 44 | tns::Assert(false, isolate); |
44 | | - #endif |
| 45 | + } |
45 | 46 | } |
46 | 47 |
|
47 | 48 | if (wrapper->Type() == WrapperType::ObjCAllocObject) { |
|
58 | 59 | // For extended classes we will call the base method |
59 | 60 | callSuper = isMethodCallback && it != cache->ClassPrototypes.end(); |
60 | 61 | } else { |
61 | | - tns::Assert(false, isolate); |
| 62 | + if (RuntimeConfig.IsDebug) { |
| 63 | + const char* selectorStr = meta ? meta->selectorAsString() : "<unknown>"; |
| 64 | + const char* jsNameStr = meta ? meta->jsName() : "<unknown>"; |
| 65 | + const char* classNameStr = klass ? class_getName(klass) : "<unknown>"; |
| 66 | + Log(@"ArgConverter::Invoke: unexpected receiver wrapper type %d (class: %s, selector: %s, jsName: %s). Skipping in DEBUG.", |
| 67 | + (int)wrapper->Type(), classNameStr, selectorStr, jsNameStr); |
| 68 | + return v8::Undefined(isolate); |
| 69 | + } else { |
| 70 | + tns::Assert(false, isolate); |
| 71 | + } |
62 | 72 | } |
63 | 73 | } |
64 | 74 |
|
|
0 commit comments