@@ -55,30 +55,35 @@ void finalize_bridge_data(napi_env env, void* data, void* hint) {
5555 auto buffer = (uint8_t *)malloc (size);
5656 fread (buffer, 1 , size, f);
5757 fclose (f);
58- return new MDMetadataReader (buffer, size );
58+ return new MDMetadataReader (buffer);
5959}
6060
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) {
6263 napi_set_instance_data (env, this , finalize_bridge_data, nil );
6364
6465 self_dl = dlopen (nullptr , RTLD_NOW);
6566
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);
6969 } 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+ }
7276#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+ }
8185#endif
86+ }
8287
8388 objc_autoreleasePool = objc_autoreleasePoolPush ();
8489}
@@ -143,7 +148,7 @@ void finalize_bridge_data(napi_env env, void* data, void* hint) {
143148 metadata_path = (char *)malloc (len + 1 );
144149 napi_get_value_string_utf8 (env, argv[0 ], (char *)metadata_path, len + 1 , &len);
145150 }
146- objc_bridge_init (env, metadata_path);
151+ objc_bridge_init (env, metadata_path, nullptr );
147152 return nullptr ;
148153}
149154
@@ -153,10 +158,10 @@ void finalize_bridge_data(napi_env env, void* data, void* hint) {
153158 return exports;
154159}
155160
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 ) {
157162 napi_env env = (napi_env)_env;
158163
159- ObjCBridgeState* bridgeState = new ObjCBridgeState (env, metadata_path);
164+ ObjCBridgeState* bridgeState = new ObjCBridgeState (env, metadata_path, metadata_ptr );
160165
161166 napi_value objc;
162167 napi_create_object (env, &objc);
@@ -202,6 +207,8 @@ NAPI_EXPORT void objc_bridge_init(void* _env, const char* metadata_path) {
202207
203208 napi_define_properties (env, global, 3 , globalProperties);
204209
210+ setupObjCClassDecorator (env);
211+
205212 initProxyFactory (env, bridgeState);
206213 initFastEnumeratorIteratorFactory (env, bridgeState);
207214
0 commit comments