mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-24 04:16:00 +08:00
Replaced RegExp method parser with recursive descent
Summary: public This diff replaces the RegEx module method parser with a handwritten recursive descent parser that's faster and easier to maintain. The new parser is ~8 times faster when tested on the UIManager.managerChildren() method, and uses ~1/10 as much RAM. The new parser also supports lightweight generics, and is more tolerant of white space. (This means that you now can – and should – use types like `NSArray<NSString *> *` for your exported properties and method arguments, instead of `NSStringArray`). Reviewed By: jspahrsummers Differential Revision: D2736636 fb-gh-sync-id: f6a11431935fa8acc8ac36f3471032ec9a1c8490
This commit is contained in:
committed by
facebook-github-bot-4
parent
ce7c0b735f
commit
88ac40666c
@@ -94,28 +94,13 @@ typedef NSURL RCTFileURL;
|
||||
size:(id)size weight:(id)weight style:(id)style
|
||||
scaleMultiplier:(CGFloat)scaleMultiplier;
|
||||
|
||||
typedef NSArray NSArrayArray;
|
||||
+ (NSArray<NSArray *> *)NSArrayArray:(id)json;
|
||||
|
||||
typedef NSArray NSStringArray;
|
||||
+ (NSArray<NSString *> *)NSStringArray:(id)json;
|
||||
|
||||
typedef NSArray NSStringArrayArray;
|
||||
+ (NSArray<NSArray<NSString *> *> *)NSStringArrayArray:(id)json;
|
||||
|
||||
typedef NSArray NSDictionaryArray;
|
||||
+ (NSArray<NSDictionary *> *)NSDictionaryArray:(id)json;
|
||||
|
||||
typedef NSArray NSURLArray;
|
||||
+ (NSArray<NSURL *> *)NSURLArray:(id)json;
|
||||
|
||||
typedef NSArray RCTFileURLArray;
|
||||
+ (NSArray<NSURL *> *)RCTFileURLArray:(id)json;
|
||||
|
||||
typedef NSArray NSNumberArray;
|
||||
+ (NSArray<RCTFileURL *> *)RCTFileURLArray:(id)json;
|
||||
+ (NSArray<NSNumber *> *)NSNumberArray:(id)json;
|
||||
|
||||
typedef NSArray UIColorArray;
|
||||
+ (NSArray<UIColor *> *)UIColorArray:(id)json;
|
||||
|
||||
typedef NSArray CGColorArray;
|
||||
@@ -145,6 +130,18 @@ typedef BOOL css_clip_t, css_backface_visibility_t;
|
||||
|
||||
@interface RCTConvert (Deprecated)
|
||||
|
||||
/**
|
||||
* Use lightweight generics syntax instead, e.g. NSArray<NSString *>
|
||||
*/
|
||||
typedef NSArray NSArrayArray __deprecated_msg("Use NSArray<NSArray *>");
|
||||
typedef NSArray NSStringArray __deprecated_msg("Use NSArray<NSString *>");
|
||||
typedef NSArray NSStringArrayArray __deprecated_msg("Use NSArray<NSArray<NSString *> *>");
|
||||
typedef NSArray NSDictionaryArray __deprecated_msg("Use NSArray<NSDictionary *>");
|
||||
typedef NSArray NSURLArray __deprecated_msg("Use NSArray<NSURL *>");
|
||||
typedef NSArray RCTFileURLArray __deprecated_msg("Use NSArray<RCTFileURL *>");
|
||||
typedef NSArray NSNumberArray __deprecated_msg("Use NSArray<NSNumber *>");
|
||||
typedef NSArray UIColorArray __deprecated_msg("Use NSArray<UIColor *>");
|
||||
|
||||
/**
|
||||
* Synchronous image loading is generally a bad idea for performance reasons.
|
||||
* If you need to pass image references, try to use `RCTImageSource` and then
|
||||
@@ -162,6 +159,11 @@ RCT_EXTERN NSNumber *RCTConvertEnumValue(const char *, NSDictionary *, NSNumber
|
||||
RCT_EXTERN NSNumber *RCTConvertMultiEnumValue(const char *, NSDictionary *, NSNumber *, id);
|
||||
RCT_EXTERN NSArray *RCTConvertArrayValue(SEL, id);
|
||||
|
||||
/**
|
||||
* Get the converter function for the specified type
|
||||
*/
|
||||
RCT_EXTERN SEL RCTConvertSelectorForType(NSString *type);
|
||||
|
||||
/**
|
||||
* This macro is used for logging conversion errors. This is just used to
|
||||
* avoid repeating the same boilerplate for every error message.
|
||||
@@ -238,7 +240,7 @@ RCT_CUSTOM_CONVERTER(type, type, [RCT_DEBUG ? [self NSNumber:json] : json getter
|
||||
* This macro is used for creating converter functions for typed arrays.
|
||||
*/
|
||||
#define RCT_ARRAY_CONVERTER(type) \
|
||||
+ (NSArray<type *> *)type##Array:(id)json \
|
||||
+ (NSArray<id> *)type##Array:(id)json \
|
||||
{ \
|
||||
return RCTConvertArrayValue(@selector(type:), json); \
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user