Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(405)

Side by Side Diff: src/runtime.cc

Issue 10534139: One Zone per CompilationInfo. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebase on current master. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/rewriter.cc ('k') | src/scopes.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 return isolate->heap()->ToBoolean(obj->map()->is_extensible()); 1181 return isolate->heap()->ToBoolean(obj->map()->is_extensible());
1182 } 1182 }
1183 1183
1184 1184
1185 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) { 1185 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) {
1186 HandleScope scope(isolate); 1186 HandleScope scope(isolate);
1187 ASSERT(args.length() == 3); 1187 ASSERT(args.length() == 3);
1188 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, re, 0); 1188 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, re, 0);
1189 CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1); 1189 CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1);
1190 CONVERT_ARG_HANDLE_CHECKED(String, flags, 2); 1190 CONVERT_ARG_HANDLE_CHECKED(String, flags, 2);
1191 Handle<Object> result = RegExpImpl::Compile(re, pattern, flags); 1191 Handle<Object> result =
1192 RegExpImpl::Compile(re, pattern, flags, isolate->runtime_zone());
1192 if (result.is_null()) return Failure::Exception(); 1193 if (result.is_null()) return Failure::Exception();
1193 return *result; 1194 return *result;
1194 } 1195 }
1195 1196
1196 1197
1197 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateApiFunction) { 1198 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateApiFunction) {
1198 HandleScope scope(isolate); 1199 HandleScope scope(isolate);
1199 ASSERT(args.length() == 1); 1200 ASSERT(args.length() == 1);
1200 CONVERT_ARG_HANDLE_CHECKED(FunctionTemplateInfo, data, 0); 1201 CONVERT_ARG_HANDLE_CHECKED(FunctionTemplateInfo, data, 0);
1201 return *isolate->factory()->CreateApiFunction(data); 1202 return *isolate->factory()->CreateApiFunction(data);
(...skipping 1785 matching lines...) Expand 10 before | Expand all | Expand 10 after
2987 MUST_USE_RESULT static MaybeObject* StringReplaceAtomRegExpWithString( 2988 MUST_USE_RESULT static MaybeObject* StringReplaceAtomRegExpWithString(
2988 Isolate* isolate, 2989 Isolate* isolate,
2989 Handle<String> subject, 2990 Handle<String> subject,
2990 Handle<JSRegExp> pattern_regexp, 2991 Handle<JSRegExp> pattern_regexp,
2991 Handle<String> replacement, 2992 Handle<String> replacement,
2992 Handle<JSArray> last_match_info, 2993 Handle<JSArray> last_match_info,
2993 Zone* zone) { 2994 Zone* zone) {
2994 ASSERT(subject->IsFlat()); 2995 ASSERT(subject->IsFlat());
2995 ASSERT(replacement->IsFlat()); 2996 ASSERT(replacement->IsFlat());
2996 2997
2997 ZoneScope zone_space(isolate, DELETE_ON_EXIT); 2998 ZoneScope zone_space(isolate->runtime_zone(), DELETE_ON_EXIT);
2998 ZoneList<int> indices(8, isolate->zone()); 2999 ZoneList<int> indices(8, isolate->runtime_zone());
2999 ASSERT_EQ(JSRegExp::ATOM, pattern_regexp->TypeTag()); 3000 ASSERT_EQ(JSRegExp::ATOM, pattern_regexp->TypeTag());
3000 String* pattern = 3001 String* pattern =
3001 String::cast(pattern_regexp->DataAt(JSRegExp::kAtomPatternIndex)); 3002 String::cast(pattern_regexp->DataAt(JSRegExp::kAtomPatternIndex));
3002 int subject_len = subject->length(); 3003 int subject_len = subject->length();
3003 int pattern_len = pattern->length(); 3004 int pattern_len = pattern->length();
3004 int replacement_len = replacement->length(); 3005 int replacement_len = replacement->length();
3005 3006
3006 FindStringIndicesDispatch(isolate, *subject, pattern, &indices, 0xffffffff, 3007 FindStringIndicesDispatch(isolate, *subject, pattern, &indices, 0xffffffff,
3007 zone); 3008 zone);
3008 3009
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
3092 if (match.is_null()) { 3093 if (match.is_null()) {
3093 return Failure::Exception(); 3094 return Failure::Exception();
3094 } 3095 }
3095 if (match->IsNull()) { 3096 if (match->IsNull()) {
3096 return *subject_handle; 3097 return *subject_handle;
3097 } 3098 }
3098 3099
3099 int capture_count = regexp_handle->CaptureCount(); 3100 int capture_count = regexp_handle->CaptureCount();
3100 3101
3101 // CompiledReplacement uses zone allocation. 3102 // CompiledReplacement uses zone allocation.
3102 ZoneScope zonescope(isolate, DELETE_ON_EXIT); 3103 ZoneScope zonescope(zone, DELETE_ON_EXIT);
3103 CompiledReplacement compiled_replacement(isolate->zone()); 3104 CompiledReplacement compiled_replacement(zone);
3104 compiled_replacement.Compile(replacement_handle, 3105 compiled_replacement.Compile(replacement_handle,
3105 capture_count, 3106 capture_count,
3106 length); 3107 length);
3107 3108
3108 bool is_global = regexp_handle->GetFlags().is_global(); 3109 bool is_global = regexp_handle->GetFlags().is_global();
3109 3110
3110 // Shortcut for simple non-regexp global replacements 3111 // Shortcut for simple non-regexp global replacements
3111 if (is_global && 3112 if (is_global &&
3112 regexp_handle->TypeTag() == JSRegExp::ATOM && 3113 regexp_handle->TypeTag() == JSRegExp::ATOM &&
3113 compiled_replacement.simple_hint()) { 3114 compiled_replacement.simple_hint()) {
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
3388 } 3389 }
3389 } 3390 }
3390 replacement = String::cast(flat_replacement); 3391 replacement = String::cast(flat_replacement);
3391 } 3392 }
3392 3393
3393 CONVERT_ARG_CHECKED(JSRegExp, regexp, 1); 3394 CONVERT_ARG_CHECKED(JSRegExp, regexp, 1);
3394 CONVERT_ARG_CHECKED(JSArray, last_match_info, 3); 3395 CONVERT_ARG_CHECKED(JSArray, last_match_info, 3);
3395 3396
3396 ASSERT(last_match_info->HasFastObjectElements()); 3397 ASSERT(last_match_info->HasFastObjectElements());
3397 3398
3398 Zone* zone = isolate->zone(); 3399 Zone* zone = isolate->runtime_zone();
3399 if (replacement->length() == 0) { 3400 if (replacement->length() == 0) {
3400 if (subject->HasOnlyAsciiChars()) { 3401 if (subject->HasOnlyAsciiChars()) {
3401 return StringReplaceRegExpWithEmptyString<SeqAsciiString>( 3402 return StringReplaceRegExpWithEmptyString<SeqAsciiString>(
3402 isolate, subject, regexp, last_match_info, zone); 3403 isolate, subject, regexp, last_match_info, zone);
3403 } else { 3404 } else {
3404 return StringReplaceRegExpWithEmptyString<SeqTwoByteString>( 3405 return StringReplaceRegExpWithEmptyString<SeqTwoByteString>(
3405 isolate, subject, regexp, last_match_info, zone); 3406 isolate, subject, regexp, last_match_info, zone);
3406 } 3407 }
3407 } 3408 }
3408 3409
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
3737 Handle<Object> match = RegExpImpl::Exec(regexp, subject, 0, regexp_info); 3738 Handle<Object> match = RegExpImpl::Exec(regexp, subject, 0, regexp_info);
3738 3739
3739 if (match.is_null()) { 3740 if (match.is_null()) {
3740 return Failure::Exception(); 3741 return Failure::Exception();
3741 } 3742 }
3742 if (match->IsNull()) { 3743 if (match->IsNull()) {
3743 return isolate->heap()->null_value(); 3744 return isolate->heap()->null_value();
3744 } 3745 }
3745 int length = subject->length(); 3746 int length = subject->length();
3746 3747
3747 Zone* zone = isolate->zone(); 3748 Zone* zone = isolate->runtime_zone();
3748 ZoneScope zone_space(isolate, DELETE_ON_EXIT); 3749 ZoneScope zone_space(zone, DELETE_ON_EXIT);
3749 ZoneList<int> offsets(8, zone); 3750 ZoneList<int> offsets(8, zone);
3750 int start; 3751 int start;
3751 int end; 3752 int end;
3752 do { 3753 do {
3753 { 3754 {
3754 AssertNoAllocation no_alloc; 3755 AssertNoAllocation no_alloc;
3755 FixedArray* elements = FixedArray::cast(regexp_info->elements()); 3756 FixedArray* elements = FixedArray::cast(regexp_info->elements());
3756 start = Smi::cast(elements->get(RegExpImpl::kFirstCapture))->value(); 3757 start = Smi::cast(elements->get(RegExpImpl::kFirstCapture))->value();
3757 end = Smi::cast(elements->get(RegExpImpl::kFirstCapture + 1))->value(); 3758 end = Smi::cast(elements->get(RegExpImpl::kFirstCapture + 1))->value();
3758 } 3759 }
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
3932 } 3933 }
3933 3934
3934 3935
3935 // Only called from Runtime_RegExpExecMultiple so it doesn't need to maintain 3936 // Only called from Runtime_RegExpExecMultiple so it doesn't need to maintain
3936 // separate last match info. See comment on that function. 3937 // separate last match info. See comment on that function.
3937 static int SearchRegExpMultiple( 3938 static int SearchRegExpMultiple(
3938 Isolate* isolate, 3939 Isolate* isolate,
3939 Handle<String> subject, 3940 Handle<String> subject,
3940 Handle<JSRegExp> regexp, 3941 Handle<JSRegExp> regexp,
3941 Handle<JSArray> last_match_array, 3942 Handle<JSArray> last_match_array,
3942 FixedArrayBuilder* builder) { 3943 FixedArrayBuilder* builder,
3944 Zone* zone) {
3943 3945
3944 ASSERT(subject->IsFlat()); 3946 ASSERT(subject->IsFlat());
3945 int registers_per_match = RegExpImpl::IrregexpPrepare(regexp, subject); 3947 int registers_per_match = RegExpImpl::IrregexpPrepare(regexp, subject);
3946 if (registers_per_match < 0) return RegExpImpl::RE_EXCEPTION; 3948 if (registers_per_match < 0) return RegExpImpl::RE_EXCEPTION;
3947 3949
3948 int max_matches; 3950 int max_matches;
3949 int num_registers = RegExpImpl::GlobalOffsetsVectorSize(regexp, 3951 int num_registers = RegExpImpl::GlobalOffsetsVectorSize(regexp,
3950 registers_per_match, 3952 registers_per_match,
3951 &max_matches); 3953 &max_matches);
3952 OffsetsVector registers(num_registers, isolate); 3954 OffsetsVector registers(num_registers, isolate);
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
4115 result = SearchRegExpNoCaptureMultiple(isolate, 4117 result = SearchRegExpNoCaptureMultiple(isolate,
4116 subject, 4118 subject,
4117 regexp, 4119 regexp,
4118 last_match_info, 4120 last_match_info,
4119 &builder); 4121 &builder);
4120 } else { 4122 } else {
4121 result = SearchRegExpMultiple(isolate, 4123 result = SearchRegExpMultiple(isolate,
4122 subject, 4124 subject,
4123 regexp, 4125 regexp,
4124 last_match_info, 4126 last_match_info,
4125 &builder); 4127 &builder,
4128 isolate->runtime_zone());
4126 } 4129 }
4127 if (result == RegExpImpl::RE_SUCCESS) return *builder.ToJSArray(result_array); 4130 if (result == RegExpImpl::RE_SUCCESS) return *builder.ToJSArray(result_array);
4128 if (result == RegExpImpl::RE_FAILURE) return isolate->heap()->null_value(); 4131 if (result == RegExpImpl::RE_FAILURE) return isolate->heap()->null_value();
4129 ASSERT_EQ(result, RegExpImpl::RE_EXCEPTION); 4132 ASSERT_EQ(result, RegExpImpl::RE_EXCEPTION);
4130 return Failure::Exception(); 4133 return Failure::Exception();
4131 } 4134 }
4132 4135
4133 4136
4134 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToRadixString) { 4137 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToRadixString) {
4135 NoHandleAllocation ha; 4138 NoHandleAllocation ha;
(...skipping 2314 matching lines...) Expand 10 before | Expand all | Expand 10 after
6450 } 6453 }
6451 6454
6452 // The limit can be very large (0xffffffffu), but since the pattern 6455 // The limit can be very large (0xffffffffu), but since the pattern
6453 // isn't empty, we can never create more parts than ~half the length 6456 // isn't empty, we can never create more parts than ~half the length
6454 // of the subject. 6457 // of the subject.
6455 6458
6456 if (!subject->IsFlat()) FlattenString(subject); 6459 if (!subject->IsFlat()) FlattenString(subject);
6457 6460
6458 static const int kMaxInitialListCapacity = 16; 6461 static const int kMaxInitialListCapacity = 16;
6459 6462
6460 Zone* zone = isolate->zone(); 6463 Zone* zone = isolate->runtime_zone();
6461 ZoneScope scope(isolate, DELETE_ON_EXIT); 6464 ZoneScope scope(zone, DELETE_ON_EXIT);
6462 6465
6463 // Find (up to limit) indices of separator and end-of-string in subject 6466 // Find (up to limit) indices of separator and end-of-string in subject
6464 int initial_capacity = Min<uint32_t>(kMaxInitialListCapacity, limit); 6467 int initial_capacity = Min<uint32_t>(kMaxInitialListCapacity, limit);
6465 ZoneList<int> indices(initial_capacity, zone); 6468 ZoneList<int> indices(initial_capacity, zone);
6466 if (!pattern->IsFlat()) FlattenString(pattern); 6469 if (!pattern->IsFlat()) FlattenString(pattern);
6467 6470
6468 FindStringIndicesDispatch(isolate, *subject, *pattern, &indices, limit, zone); 6471 FindStringIndicesDispatch(isolate, *subject, *pattern, &indices, limit, zone);
6469 6472
6470 if (static_cast<uint32_t>(indices.length()) < limit) { 6473 if (static_cast<uint32_t>(indices.length()) < limit) {
6471 indices.Add(subject_length, zone); 6474 indices.Add(subject_length, zone);
(...skipping 2831 matching lines...) Expand 10 before | Expand all | Expand 10 after
9303 if (!global->IsJSGlobalObject()) return isolate->heap()->null_value(); 9306 if (!global->IsJSGlobalObject()) return isolate->heap()->null_value();
9304 return JSGlobalObject::cast(global)->global_receiver(); 9307 return JSGlobalObject::cast(global)->global_receiver();
9305 } 9308 }
9306 9309
9307 9310
9308 RUNTIME_FUNCTION(MaybeObject*, Runtime_ParseJson) { 9311 RUNTIME_FUNCTION(MaybeObject*, Runtime_ParseJson) {
9309 HandleScope scope(isolate); 9312 HandleScope scope(isolate);
9310 ASSERT_EQ(1, args.length()); 9313 ASSERT_EQ(1, args.length());
9311 CONVERT_ARG_HANDLE_CHECKED(String, source, 0); 9314 CONVERT_ARG_HANDLE_CHECKED(String, source, 0);
9312 9315
9313 Zone* zone = isolate->zone(); 9316 Zone* zone = isolate->runtime_zone();
9314 source = Handle<String>(source->TryFlattenGetString()); 9317 source = Handle<String>(source->TryFlattenGetString());
9315 // Optimized fast case where we only have ASCII characters. 9318 // Optimized fast case where we only have ASCII characters.
9316 Handle<Object> result; 9319 Handle<Object> result;
9317 if (source->IsSeqAsciiString()) { 9320 if (source->IsSeqAsciiString()) {
9318 result = JsonParser<true>::Parse(source, zone); 9321 result = JsonParser<true>::Parse(source, zone);
9319 } else { 9322 } else {
9320 result = JsonParser<false>::Parse(source, zone); 9323 result = JsonParser<false>::Parse(source, zone);
9321 } 9324 }
9322 if (result.is_null()) { 9325 if (result.is_null()) {
9323 // Syntax error or stack overflow in scanner. 9326 // Syntax error or stack overflow in scanner.
(...skipping 1810 matching lines...) Expand 10 before | Expand all | Expand 10 after
11134 ScopeIterator(Isolate* isolate, 11137 ScopeIterator(Isolate* isolate,
11135 JavaScriptFrame* frame, 11138 JavaScriptFrame* frame,
11136 int inlined_jsframe_index) 11139 int inlined_jsframe_index)
11137 : isolate_(isolate), 11140 : isolate_(isolate),
11138 frame_(frame), 11141 frame_(frame),
11139 inlined_jsframe_index_(inlined_jsframe_index), 11142 inlined_jsframe_index_(inlined_jsframe_index),
11140 function_(JSFunction::cast(frame->function())), 11143 function_(JSFunction::cast(frame->function())),
11141 context_(Context::cast(frame->context())), 11144 context_(Context::cast(frame->context())),
11142 nested_scope_chain_(4) { 11145 nested_scope_chain_(4) {
11143 11146
11147 Zone zone(isolate);
11148 ZoneScope zone_scope(&zone, DELETE_ON_EXIT);
11144 // Catch the case when the debugger stops in an internal function. 11149 // Catch the case when the debugger stops in an internal function.
11145 Handle<SharedFunctionInfo> shared_info(function_->shared()); 11150 Handle<SharedFunctionInfo> shared_info(function_->shared());
11146 Handle<ScopeInfo> scope_info(shared_info->scope_info()); 11151 Handle<ScopeInfo> scope_info(shared_info->scope_info());
11147 if (shared_info->script() == isolate->heap()->undefined_value()) { 11152 if (shared_info->script() == isolate->heap()->undefined_value()) {
11148 while (context_->closure() == *function_) { 11153 while (context_->closure() == *function_) {
11149 context_ = Handle<Context>(context_->previous(), isolate_); 11154 context_ = Handle<Context>(context_->previous(), isolate_);
11150 } 11155 }
11151 return; 11156 return;
11152 } 11157 }
11153 11158
(...skipping 16 matching lines...) Expand all
11170 if (scope_info->HasContext()) { 11175 if (scope_info->HasContext()) {
11171 context_ = Handle<Context>(context_->declaration_context(), isolate_); 11176 context_ = Handle<Context>(context_->declaration_context(), isolate_);
11172 } else { 11177 } else {
11173 while (context_->closure() == *function_) { 11178 while (context_->closure() == *function_) {
11174 context_ = Handle<Context>(context_->previous(), isolate_); 11179 context_ = Handle<Context>(context_->previous(), isolate_);
11175 } 11180 }
11176 } 11181 }
11177 if (scope_info->Type() != EVAL_SCOPE) nested_scope_chain_.Add(scope_info); 11182 if (scope_info->Type() != EVAL_SCOPE) nested_scope_chain_.Add(scope_info);
11178 } else { 11183 } else {
11179 // Reparse the code and analyze the scopes. 11184 // Reparse the code and analyze the scopes.
11180 ZoneScope zone_scope(isolate, DELETE_ON_EXIT);
11181 Handle<Script> script(Script::cast(shared_info->script())); 11185 Handle<Script> script(Script::cast(shared_info->script()));
11182 Scope* scope = NULL; 11186 Scope* scope = NULL;
11183 11187
11184 // Check whether we are in global, eval or function code. 11188 // Check whether we are in global, eval or function code.
11185 Handle<ScopeInfo> scope_info(shared_info->scope_info()); 11189 Handle<ScopeInfo> scope_info(shared_info->scope_info());
11186 if (scope_info->Type() != FUNCTION_SCOPE) { 11190 if (scope_info->Type() != FUNCTION_SCOPE) {
11187 // Global or eval code. 11191 // Global or eval code.
11188 CompilationInfo info(script); 11192 CompilationInfo info(script, &zone);
11189 if (scope_info->Type() == GLOBAL_SCOPE) { 11193 if (scope_info->Type() == GLOBAL_SCOPE) {
11190 info.MarkAsGlobal(); 11194 info.MarkAsGlobal();
11191 } else { 11195 } else {
11192 ASSERT(scope_info->Type() == EVAL_SCOPE); 11196 ASSERT(scope_info->Type() == EVAL_SCOPE);
11193 info.MarkAsEval(); 11197 info.MarkAsEval();
11194 info.SetCallingContext(Handle<Context>(function_->context())); 11198 info.SetCallingContext(Handle<Context>(function_->context()));
11195 } 11199 }
11196 if (ParserApi::Parse(&info, kNoParsingFlags) && Scope::Analyze(&info)) { 11200 if (ParserApi::Parse(&info, kNoParsingFlags) && Scope::Analyze(&info)) {
11197 scope = info.function()->scope(); 11201 scope = info.function()->scope();
11198 } 11202 }
11199 } else { 11203 } else {
11200 // Function code 11204 // Function code
11201 CompilationInfo info(shared_info); 11205 CompilationInfo info(shared_info, &zone);
danno 2012/06/19 15:24:57 Ass discussed, move zone and zonescope into Compil
11202 if (ParserApi::Parse(&info, kNoParsingFlags) && Scope::Analyze(&info)) { 11206 if (ParserApi::Parse(&info, kNoParsingFlags) && Scope::Analyze(&info)) {
11203 scope = info.function()->scope(); 11207 scope = info.function()->scope();
11204 } 11208 }
11205 } 11209 }
11206 11210
11207 // Retrieve the scope chain for the current position. 11211 // Retrieve the scope chain for the current position.
11208 if (scope != NULL) { 11212 if (scope != NULL) {
11209 int source_position = shared_info->code()->SourcePosition(frame_->pc()); 11213 int source_position = shared_info->code()->SourcePosition(frame_->pc());
11210 scope->GetNestedScopeChain(&nested_scope_chain_, source_position); 11214 scope->GetNestedScopeChain(&nested_scope_chain_, source_position);
11211 } else { 11215 } else {
(...skipping 1554 matching lines...) Expand 10 before | Expand all | Expand 10 after
12766 // checks that none of them have activations on stacks (of any thread). 12770 // checks that none of them have activations on stacks (of any thread).
12767 // Returns array of the same length with corresponding results of 12771 // Returns array of the same length with corresponding results of
12768 // LiveEdit::FunctionPatchabilityStatus type. 12772 // LiveEdit::FunctionPatchabilityStatus type.
12769 RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditCheckAndDropActivations) { 12773 RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditCheckAndDropActivations) {
12770 ASSERT(args.length() == 2); 12774 ASSERT(args.length() == 2);
12771 HandleScope scope(isolate); 12775 HandleScope scope(isolate);
12772 CONVERT_ARG_HANDLE_CHECKED(JSArray, shared_array, 0); 12776 CONVERT_ARG_HANDLE_CHECKED(JSArray, shared_array, 0);
12773 CONVERT_BOOLEAN_ARG_CHECKED(do_drop, 1); 12777 CONVERT_BOOLEAN_ARG_CHECKED(do_drop, 1);
12774 12778
12775 return *LiveEdit::CheckAndDropActivations(shared_array, do_drop, 12779 return *LiveEdit::CheckAndDropActivations(shared_array, do_drop,
12776 isolate->zone()); 12780 isolate->runtime_zone());
12777 } 12781 }
12778 12782
12779 // Compares 2 strings line-by-line, then token-wise and returns diff in form 12783 // Compares 2 strings line-by-line, then token-wise and returns diff in form
12780 // of JSArray of triplets (pos1, pos1_end, pos2_end) describing list 12784 // of JSArray of triplets (pos1, pos1_end, pos2_end) describing list
12781 // of diff chunks. 12785 // of diff chunks.
12782 RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditCompareStrings) { 12786 RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditCompareStrings) {
12783 ASSERT(args.length() == 2); 12787 ASSERT(args.length() == 2);
12784 HandleScope scope(isolate); 12788 HandleScope scope(isolate);
12785 CONVERT_ARG_HANDLE_CHECKED(String, s1, 0); 12789 CONVERT_ARG_HANDLE_CHECKED(String, s1, 0);
12786 CONVERT_ARG_HANDLE_CHECKED(String, s2, 1); 12790 CONVERT_ARG_HANDLE_CHECKED(String, s2, 1);
(...skipping 26 matching lines...) Expand all
12813 12817
12814 int count = 0; 12818 int count = 0;
12815 JavaScriptFrameIterator it(isolate, id); 12819 JavaScriptFrameIterator it(isolate, id);
12816 for (; !it.done(); it.Advance()) { 12820 for (; !it.done(); it.Advance()) {
12817 if (index < count + it.frame()->GetInlineCount()) break; 12821 if (index < count + it.frame()->GetInlineCount()) break;
12818 count += it.frame()->GetInlineCount(); 12822 count += it.frame()->GetInlineCount();
12819 } 12823 }
12820 if (it.done()) return heap->undefined_value(); 12824 if (it.done()) return heap->undefined_value();
12821 12825
12822 const char* error_message = 12826 const char* error_message =
12823 LiveEdit::RestartFrame(it.frame(), isolate->zone()); 12827 LiveEdit::RestartFrame(it.frame(), isolate->runtime_zone());
12824 if (error_message) { 12828 if (error_message) {
12825 return *(isolate->factory()->LookupAsciiSymbol(error_message)); 12829 return *(isolate->factory()->LookupAsciiSymbol(error_message));
12826 } 12830 }
12827 return heap->true_value(); 12831 return heap->true_value();
12828 } 12832 }
12829 12833
12830 12834
12831 // A testing entry. Returns statement position which is the closest to 12835 // A testing entry. Returns statement position which is the closest to
12832 // source_position. 12836 // source_position.
12833 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFunctionCodePositionFromSource) { 12837 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFunctionCodePositionFromSource) {
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after
13631 // Handle last resort GC and make sure to allow future allocations 13635 // Handle last resort GC and make sure to allow future allocations
13632 // to grow the heap without causing GCs (if possible). 13636 // to grow the heap without causing GCs (if possible).
13633 isolate->counters()->gc_last_resort_from_js()->Increment(); 13637 isolate->counters()->gc_last_resort_from_js()->Increment();
13634 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, 13638 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags,
13635 "Runtime::PerformGC"); 13639 "Runtime::PerformGC");
13636 } 13640 }
13637 } 13641 }
13638 13642
13639 13643
13640 } } // namespace v8::internal 13644 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/rewriter.cc ('k') | src/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698