Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 9e389492eca14cf87aec73a292b6a4794bd21e3e..6669fa1d9b246633631dc8f48cc3faffd2a8ee8a 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -1188,7 +1188,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) { |
CONVERT_ARG_HANDLE_CHECKED(JSRegExp, re, 0); |
CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1); |
CONVERT_ARG_HANDLE_CHECKED(String, flags, 2); |
- Handle<Object> result = RegExpImpl::Compile(re, pattern, flags); |
+ ZoneScope zone_scope(isolate->runtime_zone(), DELETE_ON_EXIT); |
danno
2012/06/14 14:22:19
Why new new ZoneScope here?
sanjoy
2012/06/15 09:24:31
This runtime function is sometimes called without
|
+ Handle<Object> result = |
+ RegExpImpl::Compile(re, pattern, flags, isolate->runtime_zone()); |
if (result.is_null()) return Failure::Exception(); |
return *result; |
} |
@@ -1749,7 +1751,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpExec) { |
subject, |
index, |
last_match_info, |
- isolate->zone()); |
+ isolate->runtime_zone()); |
if (result.is_null()) return Failure::Exception(); |
return *result; |
} |
@@ -2989,8 +2991,8 @@ MUST_USE_RESULT static MaybeObject* StringReplaceAtomRegExpWithString( |
ASSERT(subject->IsFlat()); |
ASSERT(replacement->IsFlat()); |
- ZoneScope zone_space(isolate, DELETE_ON_EXIT); |
- ZoneList<int> indices(8, isolate->zone()); |
+ ZoneScope zone_space(isolate->runtime_zone(), DELETE_ON_EXIT); |
+ ZoneList<int> indices(8, isolate->runtime_zone()); |
ASSERT_EQ(JSRegExp::ATOM, pattern_regexp->TypeTag()); |
String* pattern = |
String::cast(pattern_regexp->DataAt(JSRegExp::kAtomPatternIndex)); |
@@ -3084,7 +3086,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString( |
subject_handle, |
0, |
last_match_info_handle, |
- isolate->zone()); |
+ zone); |
if (match.is_null()) { |
return Failure::Exception(); |
} |
@@ -3095,8 +3097,8 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString( |
int capture_count = regexp_handle->CaptureCount(); |
// CompiledReplacement uses zone allocation. |
- ZoneScope zonescope(isolate, DELETE_ON_EXIT); |
- CompiledReplacement compiled_replacement(isolate->zone()); |
+ ZoneScope zonescope(zone, DELETE_ON_EXIT); |
+ CompiledReplacement compiled_replacement(zone); |
compiled_replacement.Compile(replacement_handle, |
capture_count, |
length); |
@@ -3186,7 +3188,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithString( |
subject_handle, |
next, |
last_match_info_handle, |
- isolate->zone()); |
+ zone); |
if (match.is_null()) { |
return Failure::Exception(); |
} |
@@ -3243,7 +3245,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString( |
subject_handle, |
0, |
last_match_info_handle, |
- isolate->zone()); |
+ zone); |
if (match.is_null()) return Failure::Exception(); |
if (match->IsNull()) return *subject_handle; |
@@ -3318,7 +3320,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString( |
subject_handle, |
next, |
last_match_info_handle, |
- isolate->zone()); |
+ zone); |
if (match.is_null()) return Failure::Exception(); |
if (match->IsNull()) break; |
@@ -3394,7 +3396,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceRegExpWithString) { |
ASSERT(last_match_info->HasFastObjectElements()); |
- Zone* zone = isolate->zone(); |
+ Zone* zone = isolate->runtime_zone(); |
if (replacement->length() == 0) { |
if (subject->HasOnlyAsciiChars()) { |
return StringReplaceRegExpWithEmptyString<SeqAsciiString>( |
@@ -3733,8 +3735,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringMatch) { |
CONVERT_ARG_HANDLE_CHECKED(JSArray, regexp_info, 2); |
HandleScope handles; |
+ Zone* zone = isolate->runtime_zone(); |
Handle<Object> match = RegExpImpl::Exec(regexp, subject, 0, regexp_info, |
- isolate->zone()); |
+ zone); |
if (match.is_null()) { |
return Failure::Exception(); |
@@ -3744,8 +3747,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringMatch) { |
} |
int length = subject->length(); |
- Zone* zone = isolate->zone(); |
- ZoneScope zone_space(isolate, DELETE_ON_EXIT); |
+ ZoneScope zone_space(zone, DELETE_ON_EXIT); |
ZoneList<int> offsets(8, zone); |
int start; |
int end; |
@@ -3760,7 +3762,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringMatch) { |
offsets.Add(end, zone); |
if (start == end) if (++end > length) break; |
match = RegExpImpl::Exec(regexp, subject, end, regexp_info, |
- isolate->zone()); |
+ zone); |
if (match.is_null()) { |
return Failure::Exception(); |
} |
@@ -3855,11 +3857,12 @@ static int SearchRegExpNoCaptureMultiple( |
FixedArrayBuilder* builder) { |
ASSERT(subject->IsFlat()); |
ASSERT(regexp->CaptureCount() == 0); |
+ Zone* zone = isolate->runtime_zone(); |
int match_start = -1; |
int match_end = 0; |
int pos = 0; |
int registers_per_match = RegExpImpl::IrregexpPrepare(regexp, subject, |
- isolate->zone()); |
+ zone); |
if (registers_per_match < 0) return RegExpImpl::RE_EXCEPTION; |
int max_matches; |
@@ -3875,7 +3878,7 @@ static int SearchRegExpNoCaptureMultiple( |
subject, |
pos, |
register_vector, |
- isolate->zone()); |
+ zone); |
if (num_matches > 0) { |
for (int match_index = 0; match_index < num_matches; match_index++) { |
int32_t* current_match = ®ister_vector[match_index * 2]; |
@@ -3942,11 +3945,12 @@ static int SearchRegExpMultiple( |
Handle<String> subject, |
Handle<JSRegExp> regexp, |
Handle<JSArray> last_match_array, |
- FixedArrayBuilder* builder) { |
+ FixedArrayBuilder* builder, |
+ Zone* zone) { |
ASSERT(subject->IsFlat()); |
int registers_per_match = RegExpImpl::IrregexpPrepare(regexp, subject, |
- isolate->zone()); |
+ zone); |
if (registers_per_match < 0) return RegExpImpl::RE_EXCEPTION; |
int max_matches; |
@@ -3960,7 +3964,7 @@ static int SearchRegExpMultiple( |
subject, |
0, |
register_vector, |
- isolate->zone()); |
+ zone); |
int capture_count = regexp->CaptureCount(); |
int subject_length = subject->length(); |
@@ -4047,7 +4051,7 @@ static int SearchRegExpMultiple( |
subject, |
pos, |
register_vector, |
- isolate->zone()); |
+ zone); |
} while (num_matches > 0); |
if (num_matches != RegExpImpl::RE_EXCEPTION) { |
@@ -4128,7 +4132,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpExecMultiple) { |
subject, |
regexp, |
last_match_info, |
- &builder); |
+ &builder, |
+ isolate->runtime_zone()); |
} |
if (result == RegExpImpl::RE_SUCCESS) return *builder.ToJSArray(result_array); |
if (result == RegExpImpl::RE_FAILURE) return isolate->heap()->null_value(); |
@@ -6463,8 +6468,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringSplit) { |
static const int kMaxInitialListCapacity = 16; |
- Zone* zone = isolate->zone(); |
- ZoneScope scope(isolate, DELETE_ON_EXIT); |
+ Zone* zone = isolate->runtime_zone(); |
+ ZoneScope scope(zone, DELETE_ON_EXIT); |
// Find (up to limit) indices of separator and end-of-string in subject |
int initial_capacity = Min<uint32_t>(kMaxInitialListCapacity, limit); |
@@ -9313,7 +9318,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ParseJson) { |
ASSERT_EQ(1, args.length()); |
CONVERT_ARG_HANDLE_CHECKED(String, source, 0); |
- Zone* zone = isolate->zone(); |
+ Zone* zone = isolate->runtime_zone(); |
source = Handle<String>(source->TryFlattenGetString()); |
// Optimized fast case where we only have ASCII characters. |
Handle<Object> result; |
@@ -11144,6 +11149,8 @@ class ScopeIterator { |
context_(Context::cast(frame->context())), |
nested_scope_chain_(4) { |
+ Zone zone(isolate); |
danno
2012/06/14 14:22:19
Why put this here and not closer to the Compilatio
sanjoy
2012/06/15 09:24:31
Because below a Scope allocated inside a Zone is b
|
+ ZoneScope zone_scope(&zone, DELETE_ON_EXIT); |
// Catch the case when the debugger stops in an internal function. |
Handle<SharedFunctionInfo> shared_info(function_->shared()); |
Handle<ScopeInfo> scope_info(shared_info->scope_info()); |
@@ -11180,7 +11187,6 @@ class ScopeIterator { |
if (scope_info->Type() != EVAL_SCOPE) nested_scope_chain_.Add(scope_info); |
} else { |
// Reparse the code and analyze the scopes. |
- ZoneScope zone_scope(isolate, DELETE_ON_EXIT); |
Handle<Script> script(Script::cast(shared_info->script())); |
Scope* scope = NULL; |
@@ -11188,7 +11194,7 @@ class ScopeIterator { |
Handle<ScopeInfo> scope_info(shared_info->scope_info()); |
if (scope_info->Type() != FUNCTION_SCOPE) { |
// Global or eval code. |
- CompilationInfo info(script); |
+ CompilationInfo info(script, &zone); |
if (scope_info->Type() == GLOBAL_SCOPE) { |
info.MarkAsGlobal(); |
} else { |
@@ -11201,7 +11207,7 @@ class ScopeIterator { |
} |
} else { |
// Function code |
- CompilationInfo info(shared_info); |
+ CompilationInfo info(shared_info, &zone); |
if (ParserApi::Parse(&info, kNoParsingFlags) && Scope::Analyze(&info)) { |
scope = info.function()->scope(); |
} |
@@ -12776,7 +12782,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditCheckAndDropActivations) { |
CONVERT_BOOLEAN_ARG_CHECKED(do_drop, 1); |
return *LiveEdit::CheckAndDropActivations(shared_array, do_drop, |
- isolate->zone()); |
+ isolate->runtime_zone()); |
} |
// Compares 2 strings line-by-line, then token-wise and returns diff in form |