Create a new HandleScope for each JSON-parsed object to avoid excessive growth
Review URL: https://chromiumcodereview.appspot.com/12880019 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14069 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
2541f2507f
commit
a79d622720
@ -291,6 +291,7 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonValue() {
|
||||
// Parse a JSON object. Position must be right at '{'.
|
||||
template <bool seq_ascii>
|
||||
Handle<Object> JsonParser<seq_ascii>::ParseJsonObject() {
|
||||
HandleScope scope(isolate());
|
||||
Handle<JSObject> json_object =
|
||||
factory()->NewJSObject(object_constructor(), pretenure_);
|
||||
ASSERT_EQ(c0_, '{');
|
||||
@ -358,12 +359,13 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonObject() {
|
||||
}
|
||||
}
|
||||
AdvanceSkipWhitespace();
|
||||
return json_object;
|
||||
return scope.CloseAndEscape(json_object);
|
||||
}
|
||||
|
||||
// Parse a JSON array. Position must be right at '['.
|
||||
template <bool seq_ascii>
|
||||
Handle<Object> JsonParser<seq_ascii>::ParseJsonArray() {
|
||||
HandleScope scope(isolate());
|
||||
ZoneScope zone_scope(zone(), DELETE_ON_EXIT);
|
||||
ZoneList<Handle<Object> > elements(4, zone());
|
||||
ASSERT_EQ(c0_, '[');
|
||||
@ -386,8 +388,9 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonArray() {
|
||||
for (int i = 0, n = elements.length(); i < n; i++) {
|
||||
fast_elements->set(i, *elements[i]);
|
||||
}
|
||||
return factory()->NewJSArrayWithElements(
|
||||
Handle<Object> json_array = factory()->NewJSArrayWithElements(
|
||||
fast_elements, FAST_ELEMENTS, pretenure_);
|
||||
return scope.CloseAndEscape(json_array);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user