// Copyright © 2018 650 Industries. All rights reserved.
#define UM_EXPORTED_METHODS_PREFIX __um_export__
#define UM_PROPSETTERS_PREFIX __um_set__
#define UM_DO_CONCAT(A, B) A ## B
#define UM_CONCAT(A, B) UM_DO_CONCAT(A, B)
#define UM_EXPORT_METHOD_AS(external_name, method) \
_UM_EXTERN_METHOD(external_name, method) \
- (void)method
#define _UM_EXTERN_METHOD(external_name, method) \
+ (const UMMethodInfo *)UM_CONCAT(UM_EXPORTED_METHODS_PREFIX, UM_CONCAT(external_name, UM_CONCAT(__LINE__, __COUNTER__))) { \
static UMMethodInfo config = {#external_name, #method}; \
return &config; \
}
#define UM_VIEW_PROPERTY(external_name, type, viewClass) \
- (void)UM_CONCAT(UM_PROPSETTERS_PREFIX, external_name):(type)value view:(viewClass *)view
#define _UM_DEFINE_CUSTOM_LOAD(_custom_load_code) \
extern void UMRegisterModule(Class); \
+ (void)load { \
UMRegisterModule(self); \
_custom_load_code \
}
#define UM_EXPORT_MODULE_WITH_CUSTOM_LOAD(external_name, _custom_load_code) \
_UM_DEFINE_CUSTOM_LOAD(_custom_load_code) \
+ (const NSString *)exportedModuleName { return @#external_name; }
#define UM_EXPORT_MODULE(external_name) \
UM_EXPORT_MODULE_WITH_CUSTOM_LOAD(external_name,)
#define UM_REGISTER_MODULE(_custom_load_code) \
_UM_DEFINE_CUSTOM_LOAD(_custom_load_code)
#define UM_REGISTER_SINGLETON_MODULE_WITH_CUSTOM_LOAD(singleton_name, _custom_load_code) \
extern void UMRegisterSingletonModule(Class); \
+ (const NSString *)name { \
return @#singleton_name; \
} \
\
+ (void)load { \
UMRegisterSingletonModule(self); \
_custom_load_code \
}
#define UM_REGISTER_SINGLETON_MODULE(singleton_name) \
UM_REGISTER_SINGLETON_MODULE_WITH_CUSTOM_LOAD(singleton_name,)
#define UM_WEAKIFY(var) \
__weak typeof(var) UMWeak_##var = var;
#define UM_STRONGIFY(var) \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wshadow\"") \
__strong typeof(var) var = UMWeak_##var; \
_Pragma("clang diagnostic pop")
#define UM_ENSURE_STRONGIFY(var) \
UM_STRONGIFY(var); \
if (var == nil) { return; }
// Converts nil -> [NSNull null]
#define UMNullIfNil(value) (value ?: [NSNull null])
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
typedef struct UMMethodInfo {
const char *const jsName;
const char *const objcName;
} UMMethodInfo;
typedef struct UMModuleInfo {
const char *const jsName;
const char *const internalName;
} UMModuleInfo;
typedef void (^UMDirectEventBlock)(NSDictionary *body);
typedef void (^UMPromiseResolveBlock)(id result);
typedef void (^UMPromiseRejectBlock)(NSString *code, NSString *message, NSError *error);
#pragma mark - Externs
// These should be defined by the concrete platform adapter
extern void UMLogInfo(NSString *format, ...);
extern void UMLogWarn(NSString *format, ...);
extern void UMLogError(NSString *format, ...);
extern void UMFatal(NSError *);
extern NSError * UMErrorWithMessage(NSString *);
extern UIApplication *UMSharedApplication(void);