| OLD | NEW | 
|      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 2503 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   2514   ASSERT(args.length() == 2); |   2514   ASSERT(args.length() == 2); | 
|   2515   CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |   2515   CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 
|   2516   CONVERT_SMI_ARG_CHECKED(properties, 1); |   2516   CONVERT_SMI_ARG_CHECKED(properties, 1); | 
|   2517   if (object->HasFastProperties() && !object->IsJSGlobalProxy()) { |   2517   if (object->HasFastProperties() && !object->IsJSGlobalProxy()) { | 
|   2518     JSObject::NormalizeProperties(object, KEEP_INOBJECT_PROPERTIES, properties); |   2518     JSObject::NormalizeProperties(object, KEEP_INOBJECT_PROPERTIES, properties); | 
|   2519   } |   2519   } | 
|   2520   return *object; |   2520   return *object; | 
|   2521 } |   2521 } | 
|   2522  |   2522  | 
|   2523  |   2523  | 
|   2524 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpExec) { |   2524 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpExecInternal) { | 
|   2525   HandleScope scope(isolate); |   2525   HandleScope scope(isolate); | 
|   2526   ASSERT(args.length() == 4); |   2526   ASSERT(args.length() == 4); | 
|   2527   CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); |   2527   CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); | 
|   2528   CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); |   2528   CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); | 
|   2529   // Due to the way the JS calls are constructed this must be less than the |   2529   // Due to the way the JS calls are constructed this must be less than the | 
|   2530   // length of a string, i.e. it is always a Smi.  We check anyway for security. |   2530   // length of a string, i.e. it is always a Smi.  We check anyway for security. | 
|   2531   CONVERT_SMI_ARG_CHECKED(index, 2); |   2531   CONVERT_SMI_ARG_CHECKED(index, 2); | 
|   2532   CONVERT_ARG_HANDLE_CHECKED(JSArray, last_match_info, 3); |   2532   CONVERT_ARG_HANDLE_CHECKED(JSArray, last_match_info, 3); | 
|   2533   RUNTIME_ASSERT(index >= 0); |   2533   RUNTIME_ASSERT(index >= 0); | 
|   2534   RUNTIME_ASSERT(index <= subject->length()); |   2534   RUNTIME_ASSERT(index <= subject->length()); | 
|   2535   isolate->counters()->regexp_entry_runtime()->Increment(); |   2535   isolate->counters()->regexp_entry_runtime()->Increment(); | 
|   2536   Handle<Object> result = RegExpImpl::Exec(regexp, |   2536   Handle<Object> result = RegExpImpl::Exec(regexp, | 
|   2537                                            subject, |   2537                                            subject, | 
|   2538                                            index, |   2538                                            index, | 
|   2539                                            last_match_info); |   2539                                            last_match_info); | 
|   2540   RETURN_IF_EMPTY_HANDLE(isolate, result); |   2540   RETURN_IF_EMPTY_HANDLE(isolate, result); | 
|   2541   return *result; |   2541   return *result; | 
|   2542 } |   2542 } | 
|   2543  |   2543  | 
|   2544  |   2544  | 
|   2545 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpConstructResult) { |   2545 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpConstructResultInternal) { | 
|   2546   SealHandleScope shs(isolate); |   2546   SealHandleScope shs(isolate); | 
|   2547   ASSERT(args.length() == 3); |   2547   ASSERT(args.length() == 3); | 
|   2548   CONVERT_SMI_ARG_CHECKED(elements_count, 0); |   2548   CONVERT_SMI_ARG_CHECKED(elements_count, 0); | 
|   2549   if (elements_count < 0 || |   2549   if (elements_count < 0 || | 
|   2550       elements_count > FixedArray::kMaxLength || |   2550       elements_count > FixedArray::kMaxLength || | 
|   2551       !Smi::IsValid(elements_count)) { |   2551       !Smi::IsValid(elements_count)) { | 
|   2552     return isolate->ThrowIllegalOperation(); |   2552     return isolate->ThrowIllegalOperation(); | 
|   2553   } |   2553   } | 
|   2554   Object* new_object; |   2554   Object* new_object; | 
|   2555   { MaybeObject* maybe_new_object = |   2555   { MaybeObject* maybe_new_object = | 
| (...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   3197 MUST_USE_RESULT static MaybeObject* CharFromCode(Isolate* isolate, |   3197 MUST_USE_RESULT static MaybeObject* CharFromCode(Isolate* isolate, | 
|   3198                                                  Object* char_code) { |   3198                                                  Object* char_code) { | 
|   3199   if (char_code->IsNumber()) { |   3199   if (char_code->IsNumber()) { | 
|   3200     return isolate->heap()->LookupSingleCharacterStringFromCode( |   3200     return isolate->heap()->LookupSingleCharacterStringFromCode( | 
|   3201         NumberToUint32(char_code) & 0xffff); |   3201         NumberToUint32(char_code) & 0xffff); | 
|   3202   } |   3202   } | 
|   3203   return isolate->heap()->empty_string(); |   3203   return isolate->heap()->empty_string(); | 
|   3204 } |   3204 } | 
|   3205  |   3205  | 
|   3206  |   3206  | 
|   3207 RUNTIME_FUNCTION(MaybeObject*, Runtime_StringCharCodeAt) { |   3207 RUNTIME_FUNCTION(MaybeObject*, Runtime_StringCharCodeAtInternal) { | 
|   3208   SealHandleScope shs(isolate); |   3208   SealHandleScope shs(isolate); | 
|   3209   ASSERT(args.length() == 2); |   3209   ASSERT(args.length() == 2); | 
|   3210  |   3210  | 
|   3211   CONVERT_ARG_CHECKED(String, subject, 0); |   3211   CONVERT_ARG_CHECKED(String, subject, 0); | 
|   3212   CONVERT_NUMBER_CHECKED(uint32_t, i, Uint32, args[1]); |   3212   CONVERT_NUMBER_CHECKED(uint32_t, i, Uint32, args[1]); | 
|   3213  |   3213  | 
|   3214   // Flatten the string.  If someone wants to get a char at an index |   3214   // Flatten the string.  If someone wants to get a char at an index | 
|   3215   // in a cons string, it is likely that more indices will be |   3215   // in a cons string, it is likely that more indices will be | 
|   3216   // accessed. |   3216   // accessed. | 
|   3217   Object* flat; |   3217   Object* flat; | 
| (...skipping 1246 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   4464   for (int i = 0; i < end; i++) { |   4464   for (int i = 0; i < end; i++) { | 
|   4465     uint16_t char1 = stream1.GetNext(); |   4465     uint16_t char1 = stream1.GetNext(); | 
|   4466     uint16_t char2 = stream2.GetNext(); |   4466     uint16_t char2 = stream2.GetNext(); | 
|   4467     if (char1 != char2) return Smi::FromInt(char1 - char2); |   4467     if (char1 != char2) return Smi::FromInt(char1 - char2); | 
|   4468   } |   4468   } | 
|   4469  |   4469  | 
|   4470   return Smi::FromInt(str1_length - str2_length); |   4470   return Smi::FromInt(str1_length - str2_length); | 
|   4471 } |   4471 } | 
|   4472  |   4472  | 
|   4473  |   4473  | 
|   4474 RUNTIME_FUNCTION(MaybeObject*, Runtime_SubString) { |   4474 RUNTIME_FUNCTION(MaybeObject*, Runtime_SubStringInternal) { | 
|   4475   HandleScope scope(isolate); |   4475   HandleScope scope(isolate); | 
|   4476   ASSERT(args.length() == 3); |   4476   ASSERT(args.length() == 3); | 
|   4477  |   4477  | 
|   4478   CONVERT_ARG_HANDLE_CHECKED(String, string, 0); |   4478   CONVERT_ARG_HANDLE_CHECKED(String, string, 0); | 
|   4479   int start, end; |   4479   int start, end; | 
|   4480   // We have a fast integer-only case here to avoid a conversion to double in |   4480   // We have a fast integer-only case here to avoid a conversion to double in | 
|   4481   // the common case where from and to are Smis. |   4481   // the common case where from and to are Smis. | 
|   4482   if (args[1]->IsSmi() && args[2]->IsSmi()) { |   4482   if (args[1]->IsSmi() && args[2]->IsSmi()) { | 
|   4483     CONVERT_SMI_ARG_CHECKED(from_number, 1); |   4483     CONVERT_SMI_ARG_CHECKED(from_number, 1); | 
|   4484     CONVERT_SMI_ARG_CHECKED(to_number, 2); |   4484     CONVERT_SMI_ARG_CHECKED(to_number, 2); | 
| (...skipping 2339 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   6824 } |   6824 } | 
|   6825  |   6825  | 
|   6826  |   6826  | 
|   6827 bool Runtime::IsUpperCaseChar(RuntimeState* runtime_state, uint16_t ch) { |   6827 bool Runtime::IsUpperCaseChar(RuntimeState* runtime_state, uint16_t ch) { | 
|   6828   unibrow::uchar chars[unibrow::ToUppercase::kMaxWidth]; |   6828   unibrow::uchar chars[unibrow::ToUppercase::kMaxWidth]; | 
|   6829   int char_length = runtime_state->to_upper_mapping()->get(ch, 0, chars); |   6829   int char_length = runtime_state->to_upper_mapping()->get(ch, 0, chars); | 
|   6830   return char_length == 0; |   6830   return char_length == 0; | 
|   6831 } |   6831 } | 
|   6832  |   6832  | 
|   6833  |   6833  | 
|   6834 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToString) { |   6834 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToStringInternal) { | 
|   6835   SealHandleScope shs(isolate); |   6835   SealHandleScope shs(isolate); | 
|   6836   ASSERT(args.length() == 1); |   6836   ASSERT(args.length() == 1); | 
|   6837  |   6837  | 
|   6838   Object* number = args[0]; |   6838   Object* number = args[0]; | 
|   6839   RUNTIME_ASSERT(number->IsNumber()); |   6839   RUNTIME_ASSERT(number->IsNumber()); | 
|   6840  |   6840  | 
|   6841   return isolate->heap()->NumberToString(number); |   6841   return isolate->heap()->NumberToString(number); | 
|   6842 } |   6842 } | 
|   6843  |   6843  | 
|   6844  |   6844  | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   7028 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberImul) { |   7028 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberImul) { | 
|   7029   SealHandleScope shs(isolate); |   7029   SealHandleScope shs(isolate); | 
|   7030   ASSERT(args.length() == 2); |   7030   ASSERT(args.length() == 2); | 
|   7031  |   7031  | 
|   7032   CONVERT_NUMBER_CHECKED(int32_t, x, Int32, args[0]); |   7032   CONVERT_NUMBER_CHECKED(int32_t, x, Int32, args[0]); | 
|   7033   CONVERT_NUMBER_CHECKED(int32_t, y, Int32, args[1]); |   7033   CONVERT_NUMBER_CHECKED(int32_t, y, Int32, args[1]); | 
|   7034   return isolate->heap()->NumberFromInt32(x * y); |   7034   return isolate->heap()->NumberFromInt32(x * y); | 
|   7035 } |   7035 } | 
|   7036  |   7036  | 
|   7037  |   7037  | 
|   7038 RUNTIME_FUNCTION(MaybeObject*, Runtime_StringAdd) { |   7038 RUNTIME_FUNCTION(MaybeObject*, Runtime_StringAddInternal) { | 
|   7039   HandleScope scope(isolate); |   7039   HandleScope scope(isolate); | 
|   7040   ASSERT(args.length() == 2); |   7040   ASSERT(args.length() == 2); | 
|   7041   CONVERT_ARG_HANDLE_CHECKED(String, str1, 0); |   7041   CONVERT_ARG_HANDLE_CHECKED(String, str1, 0); | 
|   7042   CONVERT_ARG_HANDLE_CHECKED(String, str2, 1); |   7042   CONVERT_ARG_HANDLE_CHECKED(String, str2, 1); | 
|   7043   isolate->counters()->string_add_runtime()->Increment(); |   7043   isolate->counters()->string_add_runtime()->Increment(); | 
|   7044   Handle<String> result = isolate->factory()->NewConsString(str1, str2); |   7044   Handle<String> result = isolate->factory()->NewConsString(str1, str2); | 
|   7045   RETURN_IF_EMPTY_HANDLE(isolate, result); |   7045   RETURN_IF_EMPTY_HANDLE(isolate, result); | 
|   7046   return *result; |   7046   return *result; | 
|   7047 } |   7047 } | 
|   7048  |   7048  | 
| (...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   7648     result = equal_prefix_result; |   7648     result = equal_prefix_result; | 
|   7649   } else { |   7649   } else { | 
|   7650     result = (r < 0) ? Smi::FromInt(LESS) : Smi::FromInt(GREATER); |   7650     result = (r < 0) ? Smi::FromInt(LESS) : Smi::FromInt(GREATER); | 
|   7651   } |   7651   } | 
|   7652   ASSERT(result == |   7652   ASSERT(result == | 
|   7653       StringCharacterStreamCompare(x->GetIsolate()->runtime_state(), x, y)); |   7653       StringCharacterStreamCompare(x->GetIsolate()->runtime_state(), x, y)); | 
|   7654   return result; |   7654   return result; | 
|   7655 } |   7655 } | 
|   7656  |   7656  | 
|   7657  |   7657  | 
|   7658 RUNTIME_FUNCTION(MaybeObject*, Runtime_StringCompare) { |   7658 RUNTIME_FUNCTION(MaybeObject*, Runtime_StringCompareInternal) { | 
|   7659   SealHandleScope shs(isolate); |   7659   SealHandleScope shs(isolate); | 
|   7660   ASSERT(args.length() == 2); |   7660   ASSERT(args.length() == 2); | 
|   7661  |   7661  | 
|   7662   CONVERT_ARG_CHECKED(String, x, 0); |   7662   CONVERT_ARG_CHECKED(String, x, 0); | 
|   7663   CONVERT_ARG_CHECKED(String, y, 1); |   7663   CONVERT_ARG_CHECKED(String, y, 1); | 
|   7664  |   7664  | 
|   7665   isolate->counters()->string_compare_runtime()->Increment(); |   7665   isolate->counters()->string_compare_runtime()->Increment(); | 
|   7666  |   7666  | 
|   7667   // A few fast case tests before we flatten. |   7667   // A few fast case tests before we flatten. | 
|   7668   if (x == y) return Smi::FromInt(EQUAL); |   7668   if (x == y) return Smi::FromInt(EQUAL); | 
| (...skipping 6810 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  14479   // This call must not cause lazy deopts, because it's called from deferred |  14479   // This call must not cause lazy deopts, because it's called from deferred | 
|  14480   // code where we can't handle lazy deopts for lack of a suitable bailout |  14480   // code where we can't handle lazy deopts for lack of a suitable bailout | 
|  14481   // ID. So we just try migration and signal failure if necessary, |  14481   // ID. So we just try migration and signal failure if necessary, | 
|  14482   // which will also trigger a deopt. |  14482   // which will also trigger a deopt. | 
|  14483   Handle<Object> result = JSObject::TryMigrateInstance(js_object); |  14483   Handle<Object> result = JSObject::TryMigrateInstance(js_object); | 
|  14484   if (result.is_null()) return Smi::FromInt(0); |  14484   if (result.is_null()) return Smi::FromInt(0); | 
|  14485   return *object; |  14485   return *object; | 
|  14486 } |  14486 } | 
|  14487  |  14487  | 
|  14488  |  14488  | 
|  14489 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFromCache) { |  14489 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFromCacheInternal) { | 
|  14490   SealHandleScope shs(isolate); |  14490   SealHandleScope shs(isolate); | 
|  14491   // This is only called from codegen, so checks might be more lax. |  14491   // This is only called from codegen, so checks might be more lax. | 
|  14492   CONVERT_ARG_CHECKED(JSFunctionResultCache, cache, 0); |  14492   CONVERT_ARG_CHECKED(JSFunctionResultCache, cache, 0); | 
|  14493   Object* key = args[1]; |  14493   Object* key = args[1]; | 
|  14494  |  14494  | 
|  14495   int finger_index = cache->finger_index(); |  14495   int finger_index = cache->finger_index(); | 
|  14496   Object* o = cache->get(finger_index); |  14496   Object* o = cache->get(finger_index); | 
|  14497   if (o == key) { |  14497   if (o == key) { | 
|  14498     // The fastest case: hit the same place again. |  14498     // The fastest case: hit the same place again. | 
|  14499     return cache->get(finger_index + 1); |  14499     return cache->get(finger_index + 1); | 
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  14637   inline_runtime_functions = true; |  14637   inline_runtime_functions = true; | 
|  14638   INLINE_FUNCTION_LIST(ADD_ENTRY) |  14638   INLINE_FUNCTION_LIST(ADD_ENTRY) | 
|  14639 #undef ADD_ENTRY |  14639 #undef ADD_ENTRY | 
|  14640   ASSERT_EQ(index, entry_count); |  14640   ASSERT_EQ(index, entry_count); | 
|  14641   Handle<JSArray> result = factory->NewJSArrayWithElements(elements); |  14641   Handle<JSArray> result = factory->NewJSArrayWithElements(elements); | 
|  14642   return *result; |  14642   return *result; | 
|  14643 } |  14643 } | 
|  14644 #endif |  14644 #endif | 
|  14645  |  14645  | 
|  14646  |  14646  | 
|  14647 RUNTIME_FUNCTION(MaybeObject*, Runtime_Log) { |  14647 RUNTIME_FUNCTION(MaybeObject*, Runtime_LogInternal) { | 
|  14648   HandleScope handle_scope(isolate); |  14648   HandleScope handle_scope(isolate); | 
|  14649   ASSERT(args.length() == 2); |  14649   ASSERT(args.length() == 2); | 
|  14650   CONVERT_ARG_HANDLE_CHECKED(String, format, 0); |  14650   CONVERT_ARG_HANDLE_CHECKED(String, format, 0); | 
|  14651   CONVERT_ARG_HANDLE_CHECKED(JSArray, elms, 1); |  14651   CONVERT_ARG_HANDLE_CHECKED(JSArray, elms, 1); | 
|  14652  |  14652  | 
|  14653   SmartArrayPointer<char> format_chars = format->ToCString(); |  14653   SmartArrayPointer<char> format_chars = format->ToCString(); | 
|  14654   isolate->logger()->LogRuntime( |  14654   isolate->logger()->LogRuntime( | 
|  14655       Vector<const char>(format_chars.get(), format->length()), elms); |  14655       Vector<const char>(format_chars.get(), format->length()), elms); | 
|  14656   return isolate->heap()->undefined_value(); |  14656   return isolate->heap()->undefined_value(); | 
|  14657 } |  14657 } | 
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  14986  |  14986  | 
|  14987 #define F(name, number_of_args, result_size)                             \ |  14987 #define F(name, number_of_args, result_size)                             \ | 
|  14988   { Runtime::k##name, Runtime::RUNTIME, #name,   \ |  14988   { Runtime::k##name, Runtime::RUNTIME, #name,   \ | 
|  14989     FUNCTION_ADDR(Runtime_##name), number_of_args, result_size }, |  14989     FUNCTION_ADDR(Runtime_##name), number_of_args, result_size }, | 
|  14990  |  14990  | 
|  14991  |  14991  | 
|  14992 #define I(name, number_of_args, result_size)                             \ |  14992 #define I(name, number_of_args, result_size)                             \ | 
|  14993   { Runtime::kInline##name, Runtime::INLINE,     \ |  14993   { Runtime::kInline##name, Runtime::INLINE,     \ | 
|  14994     "_" #name, NULL, number_of_args, result_size }, |  14994     "_" #name, NULL, number_of_args, result_size }, | 
|  14995  |  14995  | 
 |  14996  | 
 |  14997 #define IO(name, number_of_args, result_size) \ | 
 |  14998   { Runtime::kInlineOptimized##name, Runtime::INLINE_OPTIMIZED, \ | 
 |  14999     "_" #name, FUNCTION_ADDR(Runtime_##name), number_of_args, result_size }, | 
 |  15000  | 
 |  15001  | 
|  14996 static const Runtime::Function kIntrinsicFunctions[] = { |  15002 static const Runtime::Function kIntrinsicFunctions[] = { | 
|  14997   RUNTIME_FUNCTION_LIST(F) |  15003   RUNTIME_FUNCTION_LIST(F) | 
|  14998   INLINE_FUNCTION_LIST(I) |  15004   INLINE_FUNCTION_LIST(I) | 
 |  15005   INLINE_OPTIMIZED_FUNCTION_LIST(IO) | 
|  14999 }; |  15006 }; | 
|  15000  |  15007  | 
 |  15008 #undef IO | 
|  15001 #undef I |  15009 #undef I | 
|  15002 #undef F |  15010 #undef F | 
|  15003  |  15011  | 
|  15004  |  15012  | 
|  15005 MaybeObject* Runtime::InitializeIntrinsicFunctionNames(Heap* heap, |  15013 MaybeObject* Runtime::InitializeIntrinsicFunctionNames(Heap* heap, | 
|  15006                                                        Object* dictionary) { |  15014                                                        Object* dictionary) { | 
|  15007   ASSERT(dictionary != NULL); |  15015   ASSERT(dictionary != NULL); | 
|  15008   ASSERT(NameDictionary::cast(dictionary)->NumberOfElements() == 0); |  15016   ASSERT(NameDictionary::cast(dictionary)->NumberOfElements() == 0); | 
|  15009   for (int i = 0; i < kNumFunctions; ++i) { |  15017   for (int i = 0; i < kNumFunctions; ++i) { | 
|  15010     Object* name_string; |  15018     Object* name_string; | 
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  15060     // Handle last resort GC and make sure to allow future allocations |  15068     // Handle last resort GC and make sure to allow future allocations | 
|  15061     // to grow the heap without causing GCs (if possible). |  15069     // to grow the heap without causing GCs (if possible). | 
|  15062     isolate->counters()->gc_last_resort_from_js()->Increment(); |  15070     isolate->counters()->gc_last_resort_from_js()->Increment(); | 
|  15063     isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |  15071     isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 
|  15064                                        "Runtime::PerformGC"); |  15072                                        "Runtime::PerformGC"); | 
|  15065   } |  15073   } | 
|  15066 } |  15074 } | 
|  15067  |  15075  | 
|  15068  |  15076  | 
|  15069 } }  // namespace v8::internal |  15077 } }  // namespace v8::internal | 
| OLD | NEW |