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:
Nick Lockwood
2015-12-10 10:09:04 -08:00
committed by facebook-github-bot-4
parent ce7c0b735f
commit 88ac40666c
20 changed files with 413 additions and 170 deletions

View File

@@ -319,7 +319,7 @@ RCT_EXPORT_MODULE()
#pragma mark - Exported JS Functions
RCT_EXPORT_METHOD(multiGet:(NSStringArray *)keys
RCT_EXPORT_METHOD(multiGet:(NSArray<NSString *> *)keys
callback:(RCTResponseSenderBlock)callback)
{
NSDictionary *errorOut = [self _ensureSetup];
@@ -338,7 +338,7 @@ RCT_EXPORT_METHOD(multiGet:(NSStringArray *)keys
callback(@[RCTNullIfNil(errors), result]);
}
RCT_EXPORT_METHOD(multiSet:(NSStringArrayArray *)kvPairs
RCT_EXPORT_METHOD(multiSet:(NSArray<NSArray<NSString *> *> *)kvPairs
callback:(RCTResponseSenderBlock)callback)
{
NSDictionary *errorOut = [self _ensureSetup];
@@ -358,7 +358,7 @@ RCT_EXPORT_METHOD(multiSet:(NSStringArrayArray *)kvPairs
callback(@[RCTNullIfNil(errors)]);
}
RCT_EXPORT_METHOD(multiMerge:(NSStringArrayArray *)kvPairs
RCT_EXPORT_METHOD(multiMerge:(NSArray<NSArray<NSString *> *> *)kvPairs
callback:(RCTResponseSenderBlock)callback)
{
NSDictionary *errorOut = [self _ensureSetup];
@@ -394,7 +394,7 @@ RCT_EXPORT_METHOD(multiMerge:(NSStringArrayArray *)kvPairs
callback(@[RCTNullIfNil(errors)]);
}
RCT_EXPORT_METHOD(multiRemove:(NSStringArray *)keys
RCT_EXPORT_METHOD(multiRemove:(NSArray<NSString *> *)keys
callback:(RCTResponseSenderBlock)callback)
{
NSDictionary *errorOut = [self _ensureSetup];

View File

@@ -34,7 +34,7 @@ RCT_EXPORT_MODULE()
}
RCT_EXPORT_METHOD(reportSoftException:(NSString *)message
stack:(NSDictionaryArray *)stack
stack:(NSArray<NSDictionary *> *)stack
exceptionId:(nonnull NSNumber *)exceptionId)
{
[_bridge.redBox showErrorMessage:message withStack:stack];
@@ -45,7 +45,7 @@ RCT_EXPORT_METHOD(reportSoftException:(NSString *)message
}
RCT_EXPORT_METHOD(reportFatalException:(NSString *)message
stack:(NSDictionaryArray *)stack
stack:(NSArray<NSDictionary *> *)stack
exceptionId:(nonnull NSNumber *)exceptionId)
{
[_bridge.redBox showErrorMessage:message withStack:stack];
@@ -66,7 +66,7 @@ RCT_EXPORT_METHOD(reportFatalException:(NSString *)message
}
RCT_EXPORT_METHOD(updateExceptionMessage:(NSString *)message
stack:(NSDictionaryArray *)stack
stack:(NSArray<NSDictionary *> *)stack
exceptionId:(nonnull NSNumber *)exceptionId)
{
[_bridge.redBox updateErrorMessage:message withStack:stack];
@@ -78,7 +78,7 @@ RCT_EXPORT_METHOD(updateExceptionMessage:(NSString *)message
// Deprecated. Use reportFatalException directly instead.
RCT_EXPORT_METHOD(reportUnhandledException:(NSString *)message
stack:(NSDictionaryArray *)stack)
stack:(NSArray<NSDictionary *> *)stack)
{
[self reportFatalException:message stack:stack exceptionId:@-1];
}

View File

@@ -721,11 +721,11 @@ RCT_EXPORT_METHOD(replaceExistingNonRootView:(nonnull NSNumber *)reactTag
}
RCT_EXPORT_METHOD(manageChildren:(nonnull NSNumber *)containerReactTag
moveFromIndices:(NSNumberArray *)moveFromIndices
moveToIndices:(NSNumberArray *)moveToIndices
addChildReactTags:(NSNumberArray *)addChildReactTags
addAtIndices:(NSNumberArray *)addAtIndices
removeAtIndices:(NSNumberArray *)removeAtIndices)
moveFromIndices:(NSArray<NSNumber *> *)moveFromIndices
moveToIndices:(NSArray<NSNumber *> *)moveToIndices
addChildReactTags:(NSArray<NSNumber *> *)addChildReactTags
addAtIndices:(NSArray<NSNumber *> *)addAtIndices
removeAtIndices:(NSArray<NSNumber *> *)removeAtIndices)
{
[self _manageChildren:containerReactTag
moveFromIndices:moveFromIndices