Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 5b44374591cefb4a10a25e89b7c1e90d365d6817..81d069e763f07ac838d4cfc8fadb0ee97b7a3547 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -1188,7 +1188,8 @@ 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); |
+ Handle<Object> result = |
+ RegExpImpl::Compile(re, pattern, flags, isolate->runtime_zone()); |
if (result.is_null()) return Failure::Exception(); |
return *result; |
} |
@@ -2994,8 +2995,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)); |
@@ -3099,8 +3100,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); |
@@ -3395,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>( |
@@ -3744,8 +3745,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringMatch) { |
} |
int length = subject->length(); |
- Zone* zone = isolate->zone(); |
- ZoneScope zone_space(isolate, DELETE_ON_EXIT); |
+ Zone* zone = isolate->runtime_zone(); |
+ ZoneScope zone_space(zone, DELETE_ON_EXIT); |
ZoneList<int> offsets(8, zone); |
int start; |
int end; |
@@ -3939,7 +3940,8 @@ 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); |
@@ -4122,7 +4124,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(); |
@@ -6457,8 +6460,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); |
@@ -9310,7 +9313,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; |
@@ -11141,6 +11144,8 @@ class ScopeIterator { |
context_(Context::cast(frame->context())), |
nested_scope_chain_(4) { |
+ Zone zone(isolate); |
+ 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()); |
@@ -11177,7 +11182,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; |
@@ -11185,7 +11189,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 { |
@@ -11198,7 +11202,7 @@ class ScopeIterator { |
} |
} else { |
// Function code |
- CompilationInfo info(shared_info); |
+ CompilationInfo info(shared_info, &zone); |
danno
2012/06/19 15:24:57
Ass discussed, move zone and zonescope into Compil
|
if (ParserApi::Parse(&info, kNoParsingFlags) && Scope::Analyze(&info)) { |
scope = info.function()->scope(); |
} |
@@ -12773,7 +12777,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 |
@@ -12820,7 +12824,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditRestartFrame) { |
if (it.done()) return heap->undefined_value(); |
const char* error_message = |
- LiveEdit::RestartFrame(it.frame(), isolate->zone()); |
+ LiveEdit::RestartFrame(it.frame(), isolate->runtime_zone()); |
if (error_message) { |
return *(isolate->factory()->LookupAsciiSymbol(error_message)); |
} |