@@ -55,30 +55,35 @@ void finalize_bridge_data(napi_env env, void* data, void* hint) {
55
55
auto buffer = (uint8_t *)malloc (size);
56
56
fread (buffer, 1 , size, f);
57
57
fclose (f);
58
- return new MDMetadataReader (buffer, size );
58
+ return new MDMetadataReader (buffer);
59
59
}
60
60
61
- ObjCBridgeState::ObjCBridgeState (napi_env env, const char * metadata_path) {
61
+ ObjCBridgeState::ObjCBridgeState (napi_env env, const char * metadata_path,
62
+ const void * metadata_ptr) {
62
63
napi_set_instance_data (env, this , finalize_bridge_data, nil );
63
64
64
65
self_dl = dlopen (nullptr , RTLD_NOW);
65
66
66
- #ifdef EMBED_METADATA_SIZE
67
- if (metadata_path != nullptr ) {
68
- metadata = loadMetadataFromFile (metadata_path);
67
+ if (metadata_ptr) {
68
+ metadata = new MDMetadataReader ((void *)metadata_ptr);
69
69
} else {
70
- metadata = new MDMetadataReader ((void *)embedded_metadata, EMBED_METADATA_SIZE);
71
- }
70
+ #ifdef EMBED_METADATA_SIZE
71
+ if (metadata_path != nullptr ) {
72
+ metadata = loadMetadataFromFile (metadata_path);
73
+ } else {
74
+ metadata = new MDMetadataReader ((void *)embedded_metadata, EMBED_METADATA_SIZE);
75
+ }
72
76
#else
73
- unsigned long segmentSize = 0 ;
74
- auto segmentData = getsegmentdata ((const mach_header_64*)_dyld_get_image_header (0 ),
75
- " __objc_metadata" , &segmentSize);
76
- if (segmentData != nullptr ) {
77
- metadata = new MDMetadataReader (segmentData, segmentSize );
78
- } else {
79
- metadata = loadMetadataFromFile (metadata_path);
80
- }
77
+ unsigned long segmentSize = 0 ;
78
+ auto segmentData = getsegmentdata ((const mach_header_64*)_dyld_get_image_header (0 ),
79
+ " __objc_metadata" , &segmentSize);
80
+ if (segmentData != nullptr ) {
81
+ metadata = new MDMetadataReader (segmentData);
82
+ } else {
83
+ metadata = loadMetadataFromFile (metadata_path);
84
+ }
81
85
#endif
86
+ }
82
87
83
88
objc_autoreleasePool = objc_autoreleasePoolPush ();
84
89
}
@@ -143,7 +148,7 @@ void finalize_bridge_data(napi_env env, void* data, void* hint) {
143
148
metadata_path = (char *)malloc (len + 1 );
144
149
napi_get_value_string_utf8 (env, argv[0 ], (char *)metadata_path, len + 1 , &len);
145
150
}
146
- objc_bridge_init (env, metadata_path);
151
+ objc_bridge_init (env, metadata_path, nullptr );
147
152
return nullptr ;
148
153
}
149
154
@@ -153,10 +158,10 @@ void finalize_bridge_data(napi_env env, void* data, void* hint) {
153
158
return exports;
154
159
}
155
160
156
- NAPI_EXPORT void objc_bridge_init (void * _env, const char * metadata_path) {
161
+ NAPI_EXPORT void objc_bridge_init (void * _env, const char * metadata_path, const void * metadata_ptr ) {
157
162
napi_env env = (napi_env)_env;
158
163
159
- ObjCBridgeState* bridgeState = new ObjCBridgeState (env, metadata_path);
164
+ ObjCBridgeState* bridgeState = new ObjCBridgeState (env, metadata_path, metadata_ptr );
160
165
161
166
napi_value objc;
162
167
napi_create_object (env, &objc);
@@ -202,6 +207,8 @@ NAPI_EXPORT void objc_bridge_init(void* _env, const char* metadata_path) {
202
207
203
208
napi_define_properties (env, global, 3 , globalProperties);
204
209
210
+ setupObjCClassDecorator (env);
211
+
205
212
initProxyFactory (env, bridgeState);
206
213
initFastEnumeratorIteratorFactory (env, bridgeState);
207
214
0 commit comments