mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Optimization: Return only arrays from getCaptureTree
Creating objects and setting key-value pairs is more expensive than creating arrays with numeric indices. So this squeezes a bit more performance.
This commit is contained in:
@@ -52,31 +52,29 @@ public:
|
||||
int currentIndex = index++;
|
||||
int startPosition = [result locationAt:currentIndex];
|
||||
int endPosition = startPosition + [result lengthAt:currentIndex];
|
||||
|
||||
CefRefPtr<CefV8Value> childCaptures;
|
||||
|
||||
CefRefPtr<CefV8Value> tree = CefV8Value::CreateArray();
|
||||
int i = 0;
|
||||
tree->SetValue(i++, CefV8Value::CreateInt(currentIndex));
|
||||
tree->SetValue(i++, CefV8Value::CreateInt(startPosition));
|
||||
tree->SetValue(i++, CefV8Value::CreateInt(endPosition));
|
||||
|
||||
while (index < [result count] && [result locationAt:index] < endPosition) {
|
||||
if ([result lengthAt:index] == 0) {
|
||||
index++;
|
||||
}
|
||||
else {
|
||||
if (!childCaptures.get()) childCaptures = CefV8Value::CreateArray();
|
||||
childCaptures->SetValue(childCaptures->GetArrayLength(), BuildCaptureTree(result, index));
|
||||
} else {
|
||||
tree->SetValue(i++, BuildCaptureTree(result, index));
|
||||
}
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> tree = CefV8Value::CreateObject(NULL, NULL);
|
||||
|
||||
tree->SetValue("index", CefV8Value::CreateInt(currentIndex), V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
tree->SetValue("start", CefV8Value::CreateInt(startPosition), V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
tree->SetValue("end", CefV8Value::CreateInt(endPosition), V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
|
||||
if (currentIndex == 0) {
|
||||
tree->SetValue("text", CefV8Value::CreateString([[result stringAt:currentIndex] UTF8String]), V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
CefRefPtr<CefV8Value> tuple = CefV8Value::CreateArray();
|
||||
tuple->SetValue(0, CefV8Value::CreateString([[result stringAt:0] UTF8String]));
|
||||
tuple->SetValue(1, tree);
|
||||
return tuple;
|
||||
} else {
|
||||
return tree;
|
||||
}
|
||||
|
||||
if (childCaptures.get()) tree->SetValue("captures", childCaptures, V8_PROPERTY_ATTRIBUTE_NONE);
|
||||
return tree;
|
||||
}
|
||||
|
||||
CefRefPtr<CefV8Value> CaptureCount() {
|
||||
|
||||
Reference in New Issue
Block a user