| 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 1893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1904 VALUE_INDEX, | 1904 VALUE_INDEX, |
| 1905 GETTER_INDEX, | 1905 GETTER_INDEX, |
| 1906 SETTER_INDEX, | 1906 SETTER_INDEX, |
| 1907 WRITABLE_INDEX, | 1907 WRITABLE_INDEX, |
| 1908 ENUMERABLE_INDEX, | 1908 ENUMERABLE_INDEX, |
| 1909 CONFIGURABLE_INDEX, | 1909 CONFIGURABLE_INDEX, |
| 1910 DESCRIPTOR_SIZE | 1910 DESCRIPTOR_SIZE |
| 1911 }; | 1911 }; |
| 1912 | 1912 |
| 1913 | 1913 |
| 1914 MUST_USE_RESULT static MaybeHandle<Object> GetOwnProperty( | 1914 MUST_USE_RESULT static MaybeHandle<Object> GetOwnProperty(Isolate* isolate, |
| 1915 Isolate* isolate, | 1915 Handle<JSObject> obj, |
| 1916 Handle<JSObject> obj, | 1916 Handle<Name> name) { |
| 1917 Handle<Name> name) { | |
| 1918 Heap* heap = isolate->heap(); | 1917 Heap* heap = isolate->heap(); |
| 1919 Factory* factory = isolate->factory(); | 1918 Factory* factory = isolate->factory(); |
| 1920 // Due to some WebKit tests, we want to make sure that we do not log | 1919 // Due to some WebKit tests, we want to make sure that we do not log |
| 1921 // more than one access failure here. | 1920 // more than one access failure here. |
| 1922 AccessCheckResult access_check_result = | 1921 AccessCheckResult access_check_result = |
| 1923 CheckPropertyAccess(obj, name, v8::ACCESS_HAS); | 1922 CheckPropertyAccess(obj, name, v8::ACCESS_HAS); |
| 1924 RETURN_HANDLE_IF_SCHEDULED_EXCEPTION(isolate, Object); | 1923 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
| 1925 switch (access_check_result) { | 1924 switch (access_check_result) { |
| 1926 case ACCESS_FORBIDDEN: return factory->false_value(); | 1925 case ACCESS_FORBIDDEN: return factory->false_value(); |
| 1927 case ACCESS_ALLOWED: break; | 1926 case ACCESS_ALLOWED: break; |
| 1928 case ACCESS_ABSENT: return factory->undefined_value(); | 1927 case ACCESS_ABSENT: return factory->undefined_value(); |
| 1929 } | 1928 } |
| 1930 | 1929 |
| 1931 PropertyAttributes attrs = JSReceiver::GetLocalPropertyAttribute(obj, name); | 1930 PropertyAttributes attrs = JSReceiver::GetLocalPropertyAttribute(obj, name); |
| 1932 if (attrs == ABSENT) { | 1931 if (attrs == ABSENT) { |
| 1933 RETURN_HANDLE_IF_SCHEDULED_EXCEPTION(isolate, Object); | 1932 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
| 1934 return factory->undefined_value(); | 1933 return factory->undefined_value(); |
| 1935 } | 1934 } |
| 1936 ASSERT(!isolate->has_scheduled_exception()); | 1935 ASSERT(!isolate->has_scheduled_exception()); |
| 1937 Handle<AccessorPair> accessors; | 1936 Handle<AccessorPair> accessors; |
| 1938 bool has_accessors = | 1937 bool has_accessors = |
| 1939 JSObject::GetLocalPropertyAccessorPair(obj, name).ToHandle(&accessors); | 1938 JSObject::GetLocalPropertyAccessorPair(obj, name).ToHandle(&accessors); |
| 1940 Handle<FixedArray> elms = isolate->factory()->NewFixedArray(DESCRIPTOR_SIZE); | 1939 Handle<FixedArray> elms = isolate->factory()->NewFixedArray(DESCRIPTOR_SIZE); |
| 1941 elms->set(ENUMERABLE_INDEX, heap->ToBoolean((attrs & DONT_ENUM) == 0)); | 1940 elms->set(ENUMERABLE_INDEX, heap->ToBoolean((attrs & DONT_ENUM) == 0)); |
| 1942 elms->set(CONFIGURABLE_INDEX, heap->ToBoolean((attrs & DONT_DELETE) == 0)); | 1941 elms->set(CONFIGURABLE_INDEX, heap->ToBoolean((attrs & DONT_DELETE) == 0)); |
| 1943 elms->set(IS_ACCESSOR_INDEX, heap->ToBoolean(has_accessors)); | 1942 elms->set(IS_ACCESSOR_INDEX, heap->ToBoolean(has_accessors)); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2047 } | 2046 } |
| 2048 | 2047 |
| 2049 | 2048 |
| 2050 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetTemplateField) { | 2049 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetTemplateField) { |
| 2051 SealHandleScope shs(isolate); | 2050 SealHandleScope shs(isolate); |
| 2052 ASSERT(args.length() == 2); | 2051 ASSERT(args.length() == 2); |
| 2053 CONVERT_ARG_CHECKED(HeapObject, templ, 0); | 2052 CONVERT_ARG_CHECKED(HeapObject, templ, 0); |
| 2054 CONVERT_SMI_ARG_CHECKED(index, 1) | 2053 CONVERT_SMI_ARG_CHECKED(index, 1) |
| 2055 int offset = index * kPointerSize + HeapObject::kHeaderSize; | 2054 int offset = index * kPointerSize + HeapObject::kHeaderSize; |
| 2056 InstanceType type = templ->map()->instance_type(); | 2055 InstanceType type = templ->map()->instance_type(); |
| 2057 RUNTIME_ASSERT(type == FUNCTION_TEMPLATE_INFO_TYPE || | 2056 RUNTIME_ASSERT(type == FUNCTION_TEMPLATE_INFO_TYPE || |
| 2058 type == OBJECT_TEMPLATE_INFO_TYPE); | 2057 type == OBJECT_TEMPLATE_INFO_TYPE); |
| 2059 RUNTIME_ASSERT(offset > 0); | 2058 RUNTIME_ASSERT(offset > 0); |
| 2060 if (type == FUNCTION_TEMPLATE_INFO_TYPE) { | 2059 if (type == FUNCTION_TEMPLATE_INFO_TYPE) { |
| 2061 RUNTIME_ASSERT(offset < FunctionTemplateInfo::kSize); | 2060 RUNTIME_ASSERT(offset < FunctionTemplateInfo::kSize); |
| 2062 } else { | 2061 } else { |
| 2063 RUNTIME_ASSERT(offset < ObjectTemplateInfo::kSize); | 2062 RUNTIME_ASSERT(offset < ObjectTemplateInfo::kSize); |
| 2064 } | 2063 } |
| 2065 return *HeapObject::RawField(templ, offset); | 2064 return *HeapObject::RawField(templ, offset); |
| 2066 } | 2065 } |
| 2067 | 2066 |
| 2068 | 2067 |
| (...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2733 return *holder; | 2732 return *holder; |
| 2734 } | 2733 } |
| 2735 | 2734 |
| 2736 | 2735 |
| 2737 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsSloppyModeFunction) { | 2736 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsSloppyModeFunction) { |
| 2738 SealHandleScope shs(isolate); | 2737 SealHandleScope shs(isolate); |
| 2739 ASSERT(args.length() == 1); | 2738 ASSERT(args.length() == 1); |
| 2740 CONVERT_ARG_CHECKED(JSReceiver, callable, 0); | 2739 CONVERT_ARG_CHECKED(JSReceiver, callable, 0); |
| 2741 if (!callable->IsJSFunction()) { | 2740 if (!callable->IsJSFunction()) { |
| 2742 HandleScope scope(isolate); | 2741 HandleScope scope(isolate); |
| 2743 bool threw = false; | 2742 Handle<Object> delegate; |
| 2744 Handle<Object> delegate = Execution::TryGetFunctionDelegate( | 2743 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 2745 isolate, Handle<JSReceiver>(callable), &threw); | 2744 isolate, delegate, |
| 2746 if (threw) return Failure::Exception(); | 2745 Execution::TryGetFunctionDelegate( |
| 2746 isolate, Handle<JSReceiver>(callable))); |
| 2747 callable = JSFunction::cast(*delegate); | 2747 callable = JSFunction::cast(*delegate); |
| 2748 } | 2748 } |
| 2749 JSFunction* function = JSFunction::cast(callable); | 2749 JSFunction* function = JSFunction::cast(callable); |
| 2750 SharedFunctionInfo* shared = function->shared(); | 2750 SharedFunctionInfo* shared = function->shared(); |
| 2751 return isolate->heap()->ToBoolean(shared->strict_mode() == SLOPPY); | 2751 return isolate->heap()->ToBoolean(shared->strict_mode() == SLOPPY); |
| 2752 } | 2752 } |
| 2753 | 2753 |
| 2754 | 2754 |
| 2755 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetDefaultReceiver) { | 2755 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetDefaultReceiver) { |
| 2756 SealHandleScope shs(isolate); | 2756 SealHandleScope shs(isolate); |
| 2757 ASSERT(args.length() == 1); | 2757 ASSERT(args.length() == 1); |
| 2758 CONVERT_ARG_CHECKED(JSReceiver, callable, 0); | 2758 CONVERT_ARG_CHECKED(JSReceiver, callable, 0); |
| 2759 | 2759 |
| 2760 if (!callable->IsJSFunction()) { | 2760 if (!callable->IsJSFunction()) { |
| 2761 HandleScope scope(isolate); | 2761 HandleScope scope(isolate); |
| 2762 bool threw = false; | 2762 Handle<Object> delegate; |
| 2763 Handle<Object> delegate = Execution::TryGetFunctionDelegate( | 2763 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 2764 isolate, Handle<JSReceiver>(callable), &threw); | 2764 isolate, delegate, |
| 2765 if (threw) return Failure::Exception(); | 2765 Execution::TryGetFunctionDelegate( |
| 2766 isolate, Handle<JSReceiver>(callable))); |
| 2766 callable = JSFunction::cast(*delegate); | 2767 callable = JSFunction::cast(*delegate); |
| 2767 } | 2768 } |
| 2768 JSFunction* function = JSFunction::cast(callable); | 2769 JSFunction* function = JSFunction::cast(callable); |
| 2769 | 2770 |
| 2770 SharedFunctionInfo* shared = function->shared(); | 2771 SharedFunctionInfo* shared = function->shared(); |
| 2771 if (shared->native() || shared->strict_mode() == STRICT) { | 2772 if (shared->native() || shared->strict_mode() == STRICT) { |
| 2772 return isolate->heap()->undefined_value(); | 2773 return isolate->heap()->undefined_value(); |
| 2773 } | 2774 } |
| 2774 // Returns undefined for strict or native functions, or | 2775 // Returns undefined for strict or native functions, or |
| 2775 // the associated global receiver for "normal" functions. | 2776 // the associated global receiver for "normal" functions. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2790 | 2791 |
| 2791 // Get the RegExp function from the context in the literals array. | 2792 // Get the RegExp function from the context in the literals array. |
| 2792 // This is the RegExp function from the context in which the | 2793 // This is the RegExp function from the context in which the |
| 2793 // function was created. We do not use the RegExp function from the | 2794 // function was created. We do not use the RegExp function from the |
| 2794 // current native context because this might be the RegExp function | 2795 // current native context because this might be the RegExp function |
| 2795 // from another context which we should not have access to. | 2796 // from another context which we should not have access to. |
| 2796 Handle<JSFunction> constructor = | 2797 Handle<JSFunction> constructor = |
| 2797 Handle<JSFunction>( | 2798 Handle<JSFunction>( |
| 2798 JSFunction::NativeContextFromLiterals(*literals)->regexp_function()); | 2799 JSFunction::NativeContextFromLiterals(*literals)->regexp_function()); |
| 2799 // Compute the regular expression literal. | 2800 // Compute the regular expression literal. |
| 2800 bool has_pending_exception; | 2801 Handle<Object> regexp; |
| 2801 Handle<Object> regexp = | 2802 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 2802 RegExpImpl::CreateRegExpLiteral(constructor, pattern, flags, | 2803 isolate, regexp, |
| 2803 &has_pending_exception); | 2804 RegExpImpl::CreateRegExpLiteral(constructor, pattern, flags)); |
| 2804 if (has_pending_exception) { | |
| 2805 ASSERT(isolate->has_pending_exception()); | |
| 2806 return Failure::Exception(); | |
| 2807 } | |
| 2808 literals->set(index, *regexp); | 2805 literals->set(index, *regexp); |
| 2809 return *regexp; | 2806 return *regexp; |
| 2810 } | 2807 } |
| 2811 | 2808 |
| 2812 | 2809 |
| 2813 RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetName) { | 2810 RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetName) { |
| 2814 SealHandleScope shs(isolate); | 2811 SealHandleScope shs(isolate); |
| 2815 ASSERT(args.length() == 1); | 2812 ASSERT(args.length() == 1); |
| 2816 | 2813 |
| 2817 CONVERT_ARG_CHECKED(JSFunction, f, 0); | 2814 CONVERT_ARG_CHECKED(JSFunction, f, 0); |
| (...skipping 2090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4908 Handle<Object> result; | 4905 Handle<Object> result; |
| 4909 if (object->IsString() || object->IsNumber() || object->IsBoolean()) { | 4906 if (object->IsString() || object->IsNumber() || object->IsBoolean()) { |
| 4910 Handle<Object> proto(object->GetPrototype(isolate), isolate); | 4907 Handle<Object> proto(object->GetPrototype(isolate), isolate); |
| 4911 return Object::GetElement(isolate, proto, index); | 4908 return Object::GetElement(isolate, proto, index); |
| 4912 } else { | 4909 } else { |
| 4913 return Object::GetElement(isolate, object, index); | 4910 return Object::GetElement(isolate, object, index); |
| 4914 } | 4911 } |
| 4915 } | 4912 } |
| 4916 | 4913 |
| 4917 | 4914 |
| 4918 static Handle<Name> ToName(Isolate* isolate, Handle<Object> key) { | 4915 MUST_USE_RESULT |
| 4916 static MaybeHandle<Name> ToName(Isolate* isolate, Handle<Object> key) { |
| 4919 if (key->IsName()) { | 4917 if (key->IsName()) { |
| 4920 return Handle<Name>::cast(key); | 4918 return Handle<Name>::cast(key); |
| 4921 } else { | 4919 } else { |
| 4922 bool has_pending_exception = false; | 4920 Handle<Object> converted; |
| 4923 Handle<Object> converted = | 4921 ASSIGN_RETURN_ON_EXCEPTION( |
| 4924 Execution::ToString(isolate, key, &has_pending_exception); | 4922 isolate, converted, Execution::ToString(isolate, key), Name); |
| 4925 if (has_pending_exception) return Handle<Name>(); | |
| 4926 return Handle<Name>::cast(converted); | 4923 return Handle<Name>::cast(converted); |
| 4927 } | 4924 } |
| 4928 } | 4925 } |
| 4929 | 4926 |
| 4930 | 4927 |
| 4931 MaybeHandle<Object> Runtime::HasObjectProperty(Isolate* isolate, | 4928 MaybeHandle<Object> Runtime::HasObjectProperty(Isolate* isolate, |
| 4932 Handle<JSReceiver> object, | 4929 Handle<JSReceiver> object, |
| 4933 Handle<Object> key) { | 4930 Handle<Object> key) { |
| 4934 // Check if the given key is an array index. | 4931 // Check if the given key is an array index. |
| 4935 uint32_t index; | 4932 uint32_t index; |
| 4936 if (key->ToArrayIndex(&index)) { | 4933 if (key->ToArrayIndex(&index)) { |
| 4937 return isolate->factory()->ToBoolean(JSReceiver::HasElement(object, index)); | 4934 return isolate->factory()->ToBoolean(JSReceiver::HasElement(object, index)); |
| 4938 } | 4935 } |
| 4939 | 4936 |
| 4940 // Convert the key to a name - possibly by calling back into JavaScript. | 4937 // Convert the key to a name - possibly by calling back into JavaScript. |
| 4941 Handle<Name> name = ToName(isolate, key); | 4938 Handle<Name> name; |
| 4942 RETURN_IF_EMPTY_HANDLE_VALUE(isolate, name, MaybeHandle<Object>()); | 4939 ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object); |
| 4943 | 4940 |
| 4944 return isolate->factory()->ToBoolean(JSReceiver::HasProperty(object, name)); | 4941 return isolate->factory()->ToBoolean(JSReceiver::HasProperty(object, name)); |
| 4945 } | 4942 } |
| 4946 | 4943 |
| 4947 | 4944 |
| 4948 MaybeHandle<Object> Runtime::GetObjectProperty(Isolate* isolate, | 4945 MaybeHandle<Object> Runtime::GetObjectProperty(Isolate* isolate, |
| 4949 Handle<Object> object, | 4946 Handle<Object> object, |
| 4950 Handle<Object> key) { | 4947 Handle<Object> key) { |
| 4951 if (object->IsUndefined() || object->IsNull()) { | 4948 if (object->IsUndefined() || object->IsNull()) { |
| 4952 Handle<Object> args[2] = { key, object }; | 4949 Handle<Object> args[2] = { key, object }; |
| 4953 isolate->Throw(*isolate->factory()->NewTypeError("non_object_property_load", | 4950 return isolate->Throw<Object>( |
| 4954 HandleVector(args, 2))); | 4951 isolate->factory()->NewTypeError("non_object_property_load", |
| 4955 return Handle<Object>(); | 4952 HandleVector(args, 2))); |
| 4956 } | 4953 } |
| 4957 | 4954 |
| 4958 // Check if the given key is an array index. | 4955 // Check if the given key is an array index. |
| 4959 uint32_t index; | 4956 uint32_t index; |
| 4960 if (key->ToArrayIndex(&index)) { | 4957 if (key->ToArrayIndex(&index)) { |
| 4961 return GetElementOrCharAt(isolate, object, index); | 4958 return GetElementOrCharAt(isolate, object, index); |
| 4962 } | 4959 } |
| 4963 | 4960 |
| 4964 // Convert the key to a name - possibly by calling back into JavaScript. | 4961 // Convert the key to a name - possibly by calling back into JavaScript. |
| 4965 Handle<Name> name = ToName(isolate, key); | 4962 Handle<Name> name; |
| 4966 RETURN_IF_EMPTY_HANDLE_VALUE(isolate, name, Handle<Object>()); | 4963 ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object); |
| 4967 | 4964 |
| 4968 // Check if the name is trivially convertible to an index and get | 4965 // Check if the name is trivially convertible to an index and get |
| 4969 // the element if so. | 4966 // the element if so. |
| 4970 if (name->AsArrayIndex(&index)) { | 4967 if (name->AsArrayIndex(&index)) { |
| 4971 return GetElementOrCharAt(isolate, object, index); | 4968 return GetElementOrCharAt(isolate, object, index); |
| 4972 } else { | 4969 } else { |
| 4973 return Object::GetProperty(object, name); | 4970 return Object::GetProperty(object, name); |
| 4974 } | 4971 } |
| 4975 } | 4972 } |
| 4976 | 4973 |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5248 if (object->IsUndefined() || object->IsNull()) { | 5245 if (object->IsUndefined() || object->IsNull()) { |
| 5249 Handle<Object> args[2] = { key, object }; | 5246 Handle<Object> args[2] = { key, object }; |
| 5250 Handle<Object> error = | 5247 Handle<Object> error = |
| 5251 isolate->factory()->NewTypeError("non_object_property_store", | 5248 isolate->factory()->NewTypeError("non_object_property_store", |
| 5252 HandleVector(args, 2)); | 5249 HandleVector(args, 2)); |
| 5253 isolate->Throw(*error); | 5250 isolate->Throw(*error); |
| 5254 return Handle<Object>(); | 5251 return Handle<Object>(); |
| 5255 } | 5252 } |
| 5256 | 5253 |
| 5257 if (object->IsJSProxy()) { | 5254 if (object->IsJSProxy()) { |
| 5258 bool has_pending_exception = false; | 5255 Handle<Object> name_object; |
| 5259 Handle<Object> name_object = key->IsSymbol() | 5256 if (key->IsSymbol()) { |
| 5260 ? key : Execution::ToString(isolate, key, &has_pending_exception); | 5257 name_object = key; |
| 5261 if (has_pending_exception) return MaybeHandle<Object>(); // exception | 5258 } else { |
| 5259 ASSIGN_RETURN_ON_EXCEPTION( |
| 5260 isolate, name_object, Execution::ToString(isolate, key), Object); |
| 5261 } |
| 5262 Handle<Name> name = Handle<Name>::cast(name_object); | 5262 Handle<Name> name = Handle<Name>::cast(name_object); |
| 5263 return JSReceiver::SetProperty(Handle<JSProxy>::cast(object), name, value, | 5263 return JSReceiver::SetProperty(Handle<JSProxy>::cast(object), name, value, |
| 5264 attr, | 5264 attr, |
| 5265 strict_mode); | 5265 strict_mode); |
| 5266 } | 5266 } |
| 5267 | 5267 |
| 5268 // If the object isn't a JavaScript object, we ignore the store. | 5268 // If the object isn't a JavaScript object, we ignore the store. |
| 5269 if (!object->IsJSObject()) return value; | 5269 if (!object->IsJSObject()) return value; |
| 5270 | 5270 |
| 5271 Handle<JSObject> js_object = Handle<JSObject>::cast(object); | 5271 Handle<JSObject> js_object = Handle<JSObject>::cast(object); |
| 5272 | 5272 |
| 5273 // Check if the given key is an array index. | 5273 // Check if the given key is an array index. |
| 5274 uint32_t index; | 5274 uint32_t index; |
| 5275 if (key->ToArrayIndex(&index)) { | 5275 if (key->ToArrayIndex(&index)) { |
| 5276 // In Firefox/SpiderMonkey, Safari and Opera you can access the characters | 5276 // In Firefox/SpiderMonkey, Safari and Opera you can access the characters |
| 5277 // of a string using [] notation. We need to support this too in | 5277 // of a string using [] notation. We need to support this too in |
| 5278 // JavaScript. | 5278 // JavaScript. |
| 5279 // In the case of a String object we just need to redirect the assignment to | 5279 // In the case of a String object we just need to redirect the assignment to |
| 5280 // the underlying string if the index is in range. Since the underlying | 5280 // the underlying string if the index is in range. Since the underlying |
| 5281 // string does nothing with the assignment then we can ignore such | 5281 // string does nothing with the assignment then we can ignore such |
| 5282 // assignments. | 5282 // assignments. |
| 5283 if (js_object->IsStringObjectWithCharacterAt(index)) { | 5283 if (js_object->IsStringObjectWithCharacterAt(index)) { |
| 5284 return value; | 5284 return value; |
| 5285 } | 5285 } |
| 5286 | 5286 |
| 5287 JSObject::ValidateElements(js_object); | 5287 JSObject::ValidateElements(js_object); |
| 5288 if (js_object->HasExternalArrayElements() || | 5288 if (js_object->HasExternalArrayElements() || |
| 5289 js_object->HasFixedTypedArrayElements()) { | 5289 js_object->HasFixedTypedArrayElements()) { |
| 5290 if (!value->IsNumber() && !value->IsUndefined()) { | 5290 if (!value->IsNumber() && !value->IsUndefined()) { |
| 5291 bool has_exception; | 5291 ASSIGN_RETURN_ON_EXCEPTION( |
| 5292 Handle<Object> number = | 5292 isolate, value, Execution::ToNumber(isolate, value), Object); |
| 5293 Execution::ToNumber(isolate, value, &has_exception); | |
| 5294 if (has_exception) return MaybeHandle<Object>(); // exception | |
| 5295 value = number; | |
| 5296 } | 5293 } |
| 5297 } | 5294 } |
| 5298 | 5295 |
| 5299 MaybeHandle<Object> result = JSObject::SetElement( | 5296 MaybeHandle<Object> result = JSObject::SetElement( |
| 5300 js_object, index, value, attr, strict_mode, true, set_mode); | 5297 js_object, index, value, attr, strict_mode, true, set_mode); |
| 5301 JSObject::ValidateElements(js_object); | 5298 JSObject::ValidateElements(js_object); |
| 5302 | 5299 |
| 5303 return result.is_null() ? result : value; | 5300 return result.is_null() ? result : value; |
| 5304 } | 5301 } |
| 5305 | 5302 |
| 5306 if (key->IsName()) { | 5303 if (key->IsName()) { |
| 5307 Handle<Name> name = Handle<Name>::cast(key); | 5304 Handle<Name> name = Handle<Name>::cast(key); |
| 5308 if (name->AsArrayIndex(&index)) { | 5305 if (name->AsArrayIndex(&index)) { |
| 5309 if (js_object->HasExternalArrayElements()) { | 5306 if (js_object->HasExternalArrayElements()) { |
| 5310 if (!value->IsNumber() && !value->IsUndefined()) { | 5307 if (!value->IsNumber() && !value->IsUndefined()) { |
| 5311 bool has_exception; | 5308 ASSIGN_RETURN_ON_EXCEPTION( |
| 5312 Handle<Object> number = | 5309 isolate, value, Execution::ToNumber(isolate, value), Object); |
| 5313 Execution::ToNumber(isolate, value, &has_exception); | |
| 5314 if (has_exception) return MaybeHandle<Object>(); // exception | |
| 5315 value = number; | |
| 5316 } | 5310 } |
| 5317 } | 5311 } |
| 5318 return JSObject::SetElement(js_object, index, value, attr, | 5312 return JSObject::SetElement(js_object, index, value, attr, |
| 5319 strict_mode, true, set_mode); | 5313 strict_mode, true, set_mode); |
| 5320 } else { | 5314 } else { |
| 5321 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); | 5315 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); |
| 5322 return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); | 5316 return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); |
| 5323 } | 5317 } |
| 5324 } | 5318 } |
| 5325 | 5319 |
| 5326 // Call-back into JavaScript to convert the key to a string. | 5320 // Call-back into JavaScript to convert the key to a string. |
| 5327 bool has_pending_exception = false; | 5321 Handle<Object> converted; |
| 5328 Handle<Object> converted = | 5322 ASSIGN_RETURN_ON_EXCEPTION( |
| 5329 Execution::ToString(isolate, key, &has_pending_exception); | 5323 isolate, converted, Execution::ToString(isolate, key), Object); |
| 5330 if (has_pending_exception) return MaybeHandle<Object>(); // exception | |
| 5331 Handle<String> name = Handle<String>::cast(converted); | 5324 Handle<String> name = Handle<String>::cast(converted); |
| 5332 | 5325 |
| 5333 if (name->AsArrayIndex(&index)) { | 5326 if (name->AsArrayIndex(&index)) { |
| 5334 return JSObject::SetElement(js_object, index, value, attr, | 5327 return JSObject::SetElement(js_object, index, value, attr, |
| 5335 strict_mode, true, set_mode); | 5328 strict_mode, true, set_mode); |
| 5336 } else { | 5329 } else { |
| 5337 return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); | 5330 return JSReceiver::SetProperty(js_object, name, value, attr, strict_mode); |
| 5338 } | 5331 } |
| 5339 } | 5332 } |
| 5340 | 5333 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 5368 return JSObject::SetElement(js_object, index, value, attr, | 5361 return JSObject::SetElement(js_object, index, value, attr, |
| 5369 SLOPPY, false, DEFINE_PROPERTY); | 5362 SLOPPY, false, DEFINE_PROPERTY); |
| 5370 } else { | 5363 } else { |
| 5371 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); | 5364 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); |
| 5372 return JSObject::SetLocalPropertyIgnoreAttributes( | 5365 return JSObject::SetLocalPropertyIgnoreAttributes( |
| 5373 js_object, name, value, attr); | 5366 js_object, name, value, attr); |
| 5374 } | 5367 } |
| 5375 } | 5368 } |
| 5376 | 5369 |
| 5377 // Call-back into JavaScript to convert the key to a string. | 5370 // Call-back into JavaScript to convert the key to a string. |
| 5378 bool has_pending_exception = false; | 5371 Handle<Object> converted; |
| 5379 Handle<Object> converted = | 5372 ASSIGN_RETURN_ON_EXCEPTION( |
| 5380 Execution::ToString(isolate, key, &has_pending_exception); | 5373 isolate, converted, Execution::ToString(isolate, key), Object); |
| 5381 if (has_pending_exception) return MaybeHandle<Object>(); // exception | |
| 5382 Handle<String> name = Handle<String>::cast(converted); | 5374 Handle<String> name = Handle<String>::cast(converted); |
| 5383 | 5375 |
| 5384 if (name->AsArrayIndex(&index)) { | 5376 if (name->AsArrayIndex(&index)) { |
| 5385 return JSObject::SetElement(js_object, index, value, attr, | 5377 return JSObject::SetElement(js_object, index, value, attr, |
| 5386 SLOPPY, false, DEFINE_PROPERTY); | 5378 SLOPPY, false, DEFINE_PROPERTY); |
| 5387 } else { | 5379 } else { |
| 5388 return JSObject::SetLocalPropertyIgnoreAttributes(js_object, name, value, | 5380 return JSObject::SetLocalPropertyIgnoreAttributes(js_object, name, value, |
| 5389 attr); | 5381 attr); |
| 5390 } | 5382 } |
| 5391 } | 5383 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 5409 } | 5401 } |
| 5410 | 5402 |
| 5411 return JSReceiver::DeleteElement(receiver, index, mode); | 5403 return JSReceiver::DeleteElement(receiver, index, mode); |
| 5412 } | 5404 } |
| 5413 | 5405 |
| 5414 Handle<Name> name; | 5406 Handle<Name> name; |
| 5415 if (key->IsName()) { | 5407 if (key->IsName()) { |
| 5416 name = Handle<Name>::cast(key); | 5408 name = Handle<Name>::cast(key); |
| 5417 } else { | 5409 } else { |
| 5418 // Call-back into JavaScript to convert the key to a string. | 5410 // Call-back into JavaScript to convert the key to a string. |
| 5419 bool has_pending_exception = false; | 5411 Handle<Object> converted; |
| 5420 Handle<Object> converted = Execution::ToString( | 5412 ASSIGN_RETURN_ON_EXCEPTION( |
| 5421 isolate, key, &has_pending_exception); | 5413 isolate, converted, Execution::ToString(isolate, key), Object); |
| 5422 if (has_pending_exception) return MaybeHandle<Object>(); | |
| 5423 name = Handle<String>::cast(converted); | 5414 name = Handle<String>::cast(converted); |
| 5424 } | 5415 } |
| 5425 | 5416 |
| 5426 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); | 5417 if (name->IsString()) name = String::Flatten(Handle<String>::cast(name)); |
| 5427 return JSReceiver::DeleteProperty(receiver, name, mode); | 5418 return JSReceiver::DeleteProperty(receiver, name, mode); |
| 5428 } | 5419 } |
| 5429 | 5420 |
| 5430 | 5421 |
| 5431 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetHiddenProperty) { | 5422 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetHiddenProperty) { |
| 5432 HandleScope scope(isolate); | 5423 HandleScope scope(isolate); |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5751 ASSERT(!isolate->has_scheduled_exception()); | 5742 ASSERT(!isolate->has_scheduled_exception()); |
| 5752 return isolate->heap()->true_value(); | 5743 return isolate->heap()->true_value(); |
| 5753 } | 5744 } |
| 5754 | 5745 |
| 5755 | 5746 |
| 5756 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPropertyNames) { | 5747 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPropertyNames) { |
| 5757 HandleScope scope(isolate); | 5748 HandleScope scope(isolate); |
| 5758 ASSERT(args.length() == 1); | 5749 ASSERT(args.length() == 1); |
| 5759 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); | 5750 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); |
| 5760 Handle<JSArray> result; | 5751 Handle<JSArray> result; |
| 5761 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, GetKeysFor(object)); | 5752 |
| 5762 return *result; | 5753 isolate->counters()->for_in()->Increment(); |
| 5754 Handle<FixedArray> elements; |
| 5755 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 5756 isolate, elements, GetKeysInFixedArrayFor(object, INCLUDE_PROTOS)); |
| 5757 return *isolate->factory()->NewJSArrayWithElements(elements); |
| 5763 } | 5758 } |
| 5764 | 5759 |
| 5765 | 5760 |
| 5766 // Returns either a FixedArray as Runtime_GetPropertyNames, | 5761 // Returns either a FixedArray as Runtime_GetPropertyNames, |
| 5767 // or, if the given object has an enum cache that contains | 5762 // or, if the given object has an enum cache that contains |
| 5768 // all enumerable properties of the object and its prototypes | 5763 // all enumerable properties of the object and its prototypes |
| 5769 // have none, the map of the object. This is used to speed up | 5764 // have none, the map of the object. This is used to speed up |
| 5770 // the check for deletions during a for-in. | 5765 // the check for deletions during a for-in. |
| 5771 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPropertyNamesFast) { | 5766 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPropertyNamesFast) { |
| 5772 SealHandleScope shs(isolate); | 5767 SealHandleScope shs(isolate); |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6057 HandleScope scope(isolate); | 6052 HandleScope scope(isolate); |
| 6058 if (args[0]->IsSymbol()) { | 6053 if (args[0]->IsSymbol()) { |
| 6059 // Lookup in the initial Object.prototype object. | 6054 // Lookup in the initial Object.prototype object. |
| 6060 Handle<Object> result = Object::GetProperty( | 6055 Handle<Object> result = Object::GetProperty( |
| 6061 isolate->initial_object_prototype(), args.at<Symbol>(0)); | 6056 isolate->initial_object_prototype(), args.at<Symbol>(0)); |
| 6062 RETURN_IF_EMPTY_HANDLE(isolate, result); | 6057 RETURN_IF_EMPTY_HANDLE(isolate, result); |
| 6063 return *result; | 6058 return *result; |
| 6064 } | 6059 } |
| 6065 | 6060 |
| 6066 // Convert the key to a string. | 6061 // Convert the key to a string. |
| 6067 bool exception = false; | 6062 Handle<Object> converted; |
| 6068 Handle<Object> converted = | 6063 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 6069 Execution::ToString(isolate, args.at<Object>(0), &exception); | 6064 isolate, converted, Execution::ToString(isolate, args.at<Object>(0))); |
| 6070 if (exception) return Failure::Exception(); | |
| 6071 Handle<String> key = Handle<String>::cast(converted); | 6065 Handle<String> key = Handle<String>::cast(converted); |
| 6072 | 6066 |
| 6073 // Try to convert the string key into an array index. | 6067 // Try to convert the string key into an array index. |
| 6074 if (key->AsArrayIndex(&index)) { | 6068 if (key->AsArrayIndex(&index)) { |
| 6075 if (index < n) { | 6069 if (index < n) { |
| 6076 return frame->GetParameter(index); | 6070 return frame->GetParameter(index); |
| 6077 } else { | 6071 } else { |
| 6078 Handle<Object> initial_prototype(isolate->initial_object_prototype()); | 6072 Handle<Object> initial_prototype(isolate->initial_object_prototype()); |
| 6079 Handle<Object> result; | 6073 Handle<Object> result; |
| 6080 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 6074 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| (...skipping 2192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8273 | 8267 |
| 8274 int total_argc = 0; | 8268 int total_argc = 0; |
| 8275 SmartArrayPointer<Handle<Object> > param_data = | 8269 SmartArrayPointer<Handle<Object> > param_data = |
| 8276 GetCallerArguments(isolate, bound_argc, &total_argc); | 8270 GetCallerArguments(isolate, bound_argc, &total_argc); |
| 8277 for (int i = 0; i < bound_argc; i++) { | 8271 for (int i = 0; i < bound_argc; i++) { |
| 8278 param_data[i] = Handle<Object>(bound_args->get( | 8272 param_data[i] = Handle<Object>(bound_args->get( |
| 8279 JSFunction::kBoundArgumentsStartIndex + i), isolate); | 8273 JSFunction::kBoundArgumentsStartIndex + i), isolate); |
| 8280 } | 8274 } |
| 8281 | 8275 |
| 8282 if (!bound_function->IsJSFunction()) { | 8276 if (!bound_function->IsJSFunction()) { |
| 8283 bool exception_thrown; | 8277 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 8284 bound_function = Execution::TryGetConstructorDelegate(isolate, | 8278 isolate, bound_function, |
| 8285 bound_function, | 8279 Execution::TryGetConstructorDelegate(isolate, bound_function)); |
| 8286 &exception_thrown); | |
| 8287 if (exception_thrown) return Failure::Exception(); | |
| 8288 } | 8280 } |
| 8289 ASSERT(bound_function->IsJSFunction()); | 8281 ASSERT(bound_function->IsJSFunction()); |
| 8290 | 8282 |
| 8291 bool exception = false; | 8283 Handle<Object> result; |
| 8292 Handle<Object> result = | 8284 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 8285 isolate, result, |
| 8293 Execution::New(Handle<JSFunction>::cast(bound_function), | 8286 Execution::New(Handle<JSFunction>::cast(bound_function), |
| 8294 total_argc, param_data.get(), &exception); | 8287 total_argc, param_data.get())); |
| 8295 if (exception) { | |
| 8296 return Failure::Exception(); | |
| 8297 } | |
| 8298 ASSERT(!result.is_null()); | |
| 8299 return *result; | 8288 return *result; |
| 8300 } | 8289 } |
| 8301 | 8290 |
| 8302 | 8291 |
| 8303 static MaybeObject* Runtime_NewObjectHelper(Isolate* isolate, | 8292 static MaybeObject* Runtime_NewObjectHelper(Isolate* isolate, |
| 8304 Handle<Object> constructor, | 8293 Handle<Object> constructor, |
| 8305 Handle<AllocationSite> site) { | 8294 Handle<AllocationSite> site) { |
| 8306 // If the constructor isn't a proper function we throw a type error. | 8295 // If the constructor isn't a proper function we throw a type error. |
| 8307 if (!constructor->IsJSFunction()) { | 8296 if (!constructor->IsJSFunction()) { |
| 8308 Vector< Handle<Object> > arguments = HandleVector(&constructor, 1); | 8297 Vector< Handle<Object> > arguments = HandleVector(&constructor, 1); |
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8898 argv_large_buffer = SmartArrayPointer<Handle<Object> >(argv); | 8887 argv_large_buffer = SmartArrayPointer<Handle<Object> >(argv); |
| 8899 } | 8888 } |
| 8900 | 8889 |
| 8901 for (int i = 0; i < argc; ++i) { | 8890 for (int i = 0; i < argc; ++i) { |
| 8902 MaybeObject* maybe = args[1 + i]; | 8891 MaybeObject* maybe = args[1 + i]; |
| 8903 Object* object; | 8892 Object* object; |
| 8904 if (!maybe->To<Object>(&object)) return maybe; | 8893 if (!maybe->To<Object>(&object)) return maybe; |
| 8905 argv[i] = Handle<Object>(object, isolate); | 8894 argv[i] = Handle<Object>(object, isolate); |
| 8906 } | 8895 } |
| 8907 | 8896 |
| 8908 bool threw; | |
| 8909 Handle<JSReceiver> hfun(fun); | 8897 Handle<JSReceiver> hfun(fun); |
| 8910 Handle<Object> hreceiver(receiver, isolate); | 8898 Handle<Object> hreceiver(receiver, isolate); |
| 8911 Handle<Object> result = Execution::Call( | 8899 Handle<Object> result; |
| 8912 isolate, hfun, hreceiver, argc, argv, &threw, true); | 8900 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 8913 | 8901 isolate, result, |
| 8914 if (threw) return Failure::Exception(); | 8902 Execution::Call(isolate, hfun, hreceiver, argc, argv, true)); |
| 8915 return *result; | 8903 return *result; |
| 8916 } | 8904 } |
| 8917 | 8905 |
| 8918 | 8906 |
| 8919 RUNTIME_FUNCTION(MaybeObject*, Runtime_Apply) { | 8907 RUNTIME_FUNCTION(MaybeObject*, Runtime_Apply) { |
| 8920 HandleScope scope(isolate); | 8908 HandleScope scope(isolate); |
| 8921 ASSERT(args.length() == 5); | 8909 ASSERT(args.length() == 5); |
| 8922 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, fun, 0); | 8910 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, fun, 0); |
| 8923 Handle<Object> receiver = args.at<Object>(1); | 8911 Handle<Object> receiver = args.at<Object>(1); |
| 8924 CONVERT_ARG_HANDLE_CHECKED(JSObject, arguments, 2); | 8912 CONVERT_ARG_HANDLE_CHECKED(JSObject, arguments, 2); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 8937 if (argv == NULL) return isolate->StackOverflow(); | 8925 if (argv == NULL) return isolate->StackOverflow(); |
| 8938 argv_large_buffer = SmartArrayPointer<Handle<Object> >(argv); | 8926 argv_large_buffer = SmartArrayPointer<Handle<Object> >(argv); |
| 8939 } | 8927 } |
| 8940 | 8928 |
| 8941 for (int i = 0; i < argc; ++i) { | 8929 for (int i = 0; i < argc; ++i) { |
| 8942 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 8930 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 8943 isolate, argv[i], | 8931 isolate, argv[i], |
| 8944 Object::GetElement(isolate, arguments, offset + i)); | 8932 Object::GetElement(isolate, arguments, offset + i)); |
| 8945 } | 8933 } |
| 8946 | 8934 |
| 8947 bool threw; | 8935 Handle<Object> result; |
| 8948 Handle<Object> result = Execution::Call( | 8936 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 8949 isolate, fun, receiver, argc, argv, &threw, true); | 8937 isolate, result, |
| 8950 | 8938 Execution::Call(isolate, fun, receiver, argc, argv, true)); |
| 8951 if (threw) return Failure::Exception(); | |
| 8952 return *result; | 8939 return *result; |
| 8953 } | 8940 } |
| 8954 | 8941 |
| 8955 | 8942 |
| 8956 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFunctionDelegate) { | 8943 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFunctionDelegate) { |
| 8957 HandleScope scope(isolate); | 8944 HandleScope scope(isolate); |
| 8958 ASSERT(args.length() == 1); | 8945 ASSERT(args.length() == 1); |
| 8959 RUNTIME_ASSERT(!args[0]->IsJSFunction()); | 8946 RUNTIME_ASSERT(!args[0]->IsJSFunction()); |
| 8960 return *Execution::GetFunctionDelegate(isolate, args.at<Object>(0)); | 8947 return *Execution::GetFunctionDelegate(isolate, args.at<Object>(0)); |
| 8961 } | 8948 } |
| (...skipping 3921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12883 } | 12870 } |
| 12884 | 12871 |
| 12885 Handle<JSFunction> eval_fun = | 12872 Handle<JSFunction> eval_fun = |
| 12886 Compiler::GetFunctionFromEval(source, | 12873 Compiler::GetFunctionFromEval(source, |
| 12887 context, | 12874 context, |
| 12888 SLOPPY, | 12875 SLOPPY, |
| 12889 NO_PARSE_RESTRICTION, | 12876 NO_PARSE_RESTRICTION, |
| 12890 RelocInfo::kNoPosition); | 12877 RelocInfo::kNoPosition); |
| 12891 RETURN_IF_EMPTY_HANDLE(isolate, eval_fun); | 12878 RETURN_IF_EMPTY_HANDLE(isolate, eval_fun); |
| 12892 | 12879 |
| 12893 bool pending_exception; | 12880 Handle<Object> result; |
| 12894 Handle<Object> result = Execution::Call( | 12881 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 12895 isolate, eval_fun, receiver, 0, NULL, &pending_exception); | 12882 isolate, result, |
| 12896 | 12883 Execution::Call(isolate, eval_fun, receiver, 0, NULL)); |
| 12897 if (pending_exception) return Failure::Exception(); | |
| 12898 | 12884 |
| 12899 // Skip the global proxy as it has no properties and always delegates to the | 12885 // Skip the global proxy as it has no properties and always delegates to the |
| 12900 // real global object. | 12886 // real global object. |
| 12901 if (result->IsJSGlobalProxy()) { | 12887 if (result->IsJSGlobalProxy()) { |
| 12902 result = Handle<JSObject>(JSObject::cast(result->GetPrototype(isolate))); | 12888 result = Handle<JSObject>(JSObject::cast(result->GetPrototype(isolate))); |
| 12903 } | 12889 } |
| 12904 | 12890 |
| 12905 // Clear the oneshot breakpoints so that the debugger does not step further. | 12891 // Clear the oneshot breakpoints so that the debugger does not step further. |
| 12906 isolate->debug()->ClearStepping(); | 12892 isolate->debug()->ClearStepping(); |
| 12907 return *result; | 12893 return *result; |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13647 | 13633 |
| 13648 // Calls specified function with or without entering the debugger. | 13634 // Calls specified function with or without entering the debugger. |
| 13649 // This is used in unit tests to run code as if debugger is entered or simply | 13635 // This is used in unit tests to run code as if debugger is entered or simply |
| 13650 // to have a stack with C++ frame in the middle. | 13636 // to have a stack with C++ frame in the middle. |
| 13651 RUNTIME_FUNCTION(MaybeObject*, Runtime_ExecuteInDebugContext) { | 13637 RUNTIME_FUNCTION(MaybeObject*, Runtime_ExecuteInDebugContext) { |
| 13652 HandleScope scope(isolate); | 13638 HandleScope scope(isolate); |
| 13653 ASSERT(args.length() == 2); | 13639 ASSERT(args.length() == 2); |
| 13654 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | 13640 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
| 13655 CONVERT_BOOLEAN_ARG_CHECKED(without_debugger, 1); | 13641 CONVERT_BOOLEAN_ARG_CHECKED(without_debugger, 1); |
| 13656 | 13642 |
| 13643 MaybeHandle<Object> maybe_result; |
| 13644 if (without_debugger) { |
| 13645 maybe_result = Execution::Call(isolate, |
| 13646 function, |
| 13647 isolate->global_object(), |
| 13648 0, |
| 13649 NULL); |
| 13650 } else { |
| 13651 EnterDebugger enter_debugger(isolate); |
| 13652 maybe_result = Execution::Call(isolate, |
| 13653 function, |
| 13654 isolate->global_object(), |
| 13655 0, |
| 13656 NULL); |
| 13657 } |
| 13657 Handle<Object> result; | 13658 Handle<Object> result; |
| 13658 bool pending_exception; | 13659 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, maybe_result); |
| 13659 { | 13660 return *result; |
| 13660 if (without_debugger) { | |
| 13661 result = Execution::Call(isolate, | |
| 13662 function, | |
| 13663 isolate->global_object(), | |
| 13664 0, | |
| 13665 NULL, | |
| 13666 &pending_exception); | |
| 13667 } else { | |
| 13668 EnterDebugger enter_debugger(isolate); | |
| 13669 result = Execution::Call(isolate, | |
| 13670 function, | |
| 13671 isolate->global_object(), | |
| 13672 0, | |
| 13673 NULL, | |
| 13674 &pending_exception); | |
| 13675 } | |
| 13676 } | |
| 13677 if (!pending_exception) { | |
| 13678 return *result; | |
| 13679 } else { | |
| 13680 return Failure::Exception(); | |
| 13681 } | |
| 13682 } | 13661 } |
| 13683 | 13662 |
| 13684 | 13663 |
| 13685 // Sets a v8 flag. | 13664 // Sets a v8 flag. |
| 13686 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetFlags) { | 13665 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetFlags) { |
| 13687 SealHandleScope shs(isolate); | 13666 SealHandleScope shs(isolate); |
| 13688 CONVERT_ARG_CHECKED(String, arg, 0); | 13667 CONVERT_ARG_CHECKED(String, arg, 0); |
| 13689 SmartArrayPointer<char> flags = | 13668 SmartArrayPointer<char> flags = |
| 13690 arg->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); | 13669 arg->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); |
| 13691 FlagList::SetFlagsFromString(flags.get(), StrLength(flags.get())); | 13670 FlagList::SetFlagsFromString(flags.get(), StrLength(flags.get())); |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13996 ASSERT(args.length() == 3); | 13975 ASSERT(args.length() == 3); |
| 13997 | 13976 |
| 13998 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 13977 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
| 13999 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 13978 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 14000 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 13979 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 14001 | 13980 |
| 14002 Handle<ObjectTemplateInfo> date_format_template = | 13981 Handle<ObjectTemplateInfo> date_format_template = |
| 14003 I18N::GetTemplate(isolate); | 13982 I18N::GetTemplate(isolate); |
| 14004 | 13983 |
| 14005 // Create an empty object wrapper. | 13984 // Create an empty object wrapper. |
| 14006 bool has_pending_exception = false; | 13985 Handle<JSObject> local_object; |
| 14007 Handle<JSObject> local_object = Execution::InstantiateObject( | 13986 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14008 date_format_template, &has_pending_exception); | 13987 isolate, local_object, |
| 14009 if (has_pending_exception) { | 13988 Execution::InstantiateObject(date_format_template)); |
| 14010 ASSERT(isolate->has_pending_exception()); | |
| 14011 return Failure::Exception(); | |
| 14012 } | |
| 14013 | 13989 |
| 14014 // Set date time formatter as internal field of the resulting JS object. | 13990 // Set date time formatter as internal field of the resulting JS object. |
| 14015 icu::SimpleDateFormat* date_format = DateFormat::InitializeDateTimeFormat( | 13991 icu::SimpleDateFormat* date_format = DateFormat::InitializeDateTimeFormat( |
| 14016 isolate, locale, options, resolved); | 13992 isolate, locale, options, resolved); |
| 14017 | 13993 |
| 14018 if (!date_format) return isolate->ThrowIllegalOperation(); | 13994 if (!date_format) return isolate->ThrowIllegalOperation(); |
| 14019 | 13995 |
| 14020 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); | 13996 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); |
| 14021 | 13997 |
| 14022 RETURN_IF_EMPTY_HANDLE(isolate, | 13998 RETURN_IF_EMPTY_HANDLE(isolate, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 14036 | 14012 |
| 14037 | 14013 |
| 14038 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalDateFormat) { | 14014 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalDateFormat) { |
| 14039 HandleScope scope(isolate); | 14015 HandleScope scope(isolate); |
| 14040 | 14016 |
| 14041 ASSERT(args.length() == 2); | 14017 ASSERT(args.length() == 2); |
| 14042 | 14018 |
| 14043 CONVERT_ARG_HANDLE_CHECKED(JSObject, date_format_holder, 0); | 14019 CONVERT_ARG_HANDLE_CHECKED(JSObject, date_format_holder, 0); |
| 14044 CONVERT_ARG_HANDLE_CHECKED(JSDate, date, 1); | 14020 CONVERT_ARG_HANDLE_CHECKED(JSDate, date, 1); |
| 14045 | 14021 |
| 14046 bool has_pending_exception = false; | 14022 Handle<Object> value; |
| 14047 Handle<Object> value = | 14023 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14048 Execution::ToNumber(isolate, date, &has_pending_exception); | 14024 isolate, value, Execution::ToNumber(isolate, date)); |
| 14049 if (has_pending_exception) { | |
| 14050 ASSERT(isolate->has_pending_exception()); | |
| 14051 return Failure::Exception(); | |
| 14052 } | |
| 14053 | 14025 |
| 14054 icu::SimpleDateFormat* date_format = | 14026 icu::SimpleDateFormat* date_format = |
| 14055 DateFormat::UnpackDateFormat(isolate, date_format_holder); | 14027 DateFormat::UnpackDateFormat(isolate, date_format_holder); |
| 14056 if (!date_format) return isolate->ThrowIllegalOperation(); | 14028 if (!date_format) return isolate->ThrowIllegalOperation(); |
| 14057 | 14029 |
| 14058 icu::UnicodeString result; | 14030 icu::UnicodeString result; |
| 14059 date_format->format(value->Number(), result); | 14031 date_format->format(value->Number(), result); |
| 14060 | 14032 |
| 14061 return *isolate->factory()->NewStringFromTwoByte( | 14033 return *isolate->factory()->NewStringFromTwoByte( |
| 14062 Vector<const uint16_t>( | 14034 Vector<const uint16_t>( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 14076 v8::String::Utf8Value utf8_date(v8::Utils::ToLocal(date_string)); | 14048 v8::String::Utf8Value utf8_date(v8::Utils::ToLocal(date_string)); |
| 14077 icu::UnicodeString u_date(icu::UnicodeString::fromUTF8(*utf8_date)); | 14049 icu::UnicodeString u_date(icu::UnicodeString::fromUTF8(*utf8_date)); |
| 14078 icu::SimpleDateFormat* date_format = | 14050 icu::SimpleDateFormat* date_format = |
| 14079 DateFormat::UnpackDateFormat(isolate, date_format_holder); | 14051 DateFormat::UnpackDateFormat(isolate, date_format_holder); |
| 14080 if (!date_format) return isolate->ThrowIllegalOperation(); | 14052 if (!date_format) return isolate->ThrowIllegalOperation(); |
| 14081 | 14053 |
| 14082 UErrorCode status = U_ZERO_ERROR; | 14054 UErrorCode status = U_ZERO_ERROR; |
| 14083 UDate date = date_format->parse(u_date, status); | 14055 UDate date = date_format->parse(u_date, status); |
| 14084 if (U_FAILURE(status)) return isolate->heap()->undefined_value(); | 14056 if (U_FAILURE(status)) return isolate->heap()->undefined_value(); |
| 14085 | 14057 |
| 14086 bool has_pending_exception = false; | 14058 Handle<Object> result; |
| 14087 Handle<JSDate> result = Handle<JSDate>::cast( | 14059 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14088 Execution::NewDate( | 14060 isolate, result, |
| 14089 isolate, static_cast<double>(date), &has_pending_exception)); | 14061 Execution::NewDate(isolate, static_cast<double>(date))); |
| 14090 if (has_pending_exception) { | 14062 ASSERT(result->IsJSDate()); |
| 14091 ASSERT(isolate->has_pending_exception()); | |
| 14092 return Failure::Exception(); | |
| 14093 } | |
| 14094 return *result; | 14063 return *result; |
| 14095 } | 14064 } |
| 14096 | 14065 |
| 14097 | 14066 |
| 14098 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateNumberFormat) { | 14067 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateNumberFormat) { |
| 14099 HandleScope scope(isolate); | 14068 HandleScope scope(isolate); |
| 14100 | 14069 |
| 14101 ASSERT(args.length() == 3); | 14070 ASSERT(args.length() == 3); |
| 14102 | 14071 |
| 14103 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 14072 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
| 14104 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 14073 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 14105 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 14074 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 14106 | 14075 |
| 14107 Handle<ObjectTemplateInfo> number_format_template = | 14076 Handle<ObjectTemplateInfo> number_format_template = |
| 14108 I18N::GetTemplate(isolate); | 14077 I18N::GetTemplate(isolate); |
| 14109 | 14078 |
| 14110 // Create an empty object wrapper. | 14079 // Create an empty object wrapper. |
| 14111 bool has_pending_exception = false; | 14080 Handle<JSObject> local_object; |
| 14112 Handle<JSObject> local_object = Execution::InstantiateObject( | 14081 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14113 number_format_template, &has_pending_exception); | 14082 isolate, local_object, |
| 14114 if (has_pending_exception) { | 14083 Execution::InstantiateObject(number_format_template)); |
| 14115 ASSERT(isolate->has_pending_exception()); | |
| 14116 return Failure::Exception(); | |
| 14117 } | |
| 14118 | 14084 |
| 14119 // Set number formatter as internal field of the resulting JS object. | 14085 // Set number formatter as internal field of the resulting JS object. |
| 14120 icu::DecimalFormat* number_format = NumberFormat::InitializeNumberFormat( | 14086 icu::DecimalFormat* number_format = NumberFormat::InitializeNumberFormat( |
| 14121 isolate, locale, options, resolved); | 14087 isolate, locale, options, resolved); |
| 14122 | 14088 |
| 14123 if (!number_format) return isolate->ThrowIllegalOperation(); | 14089 if (!number_format) return isolate->ThrowIllegalOperation(); |
| 14124 | 14090 |
| 14125 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); | 14091 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); |
| 14126 | 14092 |
| 14127 RETURN_IF_EMPTY_HANDLE(isolate, | 14093 RETURN_IF_EMPTY_HANDLE(isolate, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 14140 | 14106 |
| 14141 | 14107 |
| 14142 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalNumberFormat) { | 14108 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalNumberFormat) { |
| 14143 HandleScope scope(isolate); | 14109 HandleScope scope(isolate); |
| 14144 | 14110 |
| 14145 ASSERT(args.length() == 2); | 14111 ASSERT(args.length() == 2); |
| 14146 | 14112 |
| 14147 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0); | 14113 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0); |
| 14148 CONVERT_ARG_HANDLE_CHECKED(Object, number, 1); | 14114 CONVERT_ARG_HANDLE_CHECKED(Object, number, 1); |
| 14149 | 14115 |
| 14150 bool has_pending_exception = false; | 14116 Handle<Object> value; |
| 14151 Handle<Object> value = Execution::ToNumber( | 14117 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14152 isolate, number, &has_pending_exception); | 14118 isolate, value, Execution::ToNumber(isolate, number)); |
| 14153 if (has_pending_exception) { | |
| 14154 ASSERT(isolate->has_pending_exception()); | |
| 14155 return Failure::Exception(); | |
| 14156 } | |
| 14157 | 14119 |
| 14158 icu::DecimalFormat* number_format = | 14120 icu::DecimalFormat* number_format = |
| 14159 NumberFormat::UnpackNumberFormat(isolate, number_format_holder); | 14121 NumberFormat::UnpackNumberFormat(isolate, number_format_holder); |
| 14160 if (!number_format) return isolate->ThrowIllegalOperation(); | 14122 if (!number_format) return isolate->ThrowIllegalOperation(); |
| 14161 | 14123 |
| 14162 icu::UnicodeString result; | 14124 icu::UnicodeString result; |
| 14163 number_format->format(value->Number(), result); | 14125 number_format->format(value->Number(), result); |
| 14164 | 14126 |
| 14165 return *isolate->factory()->NewStringFromTwoByte( | 14127 return *isolate->factory()->NewStringFromTwoByte( |
| 14166 Vector<const uint16_t>( | 14128 Vector<const uint16_t>( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14213 | 14175 |
| 14214 ASSERT(args.length() == 3); | 14176 ASSERT(args.length() == 3); |
| 14215 | 14177 |
| 14216 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 14178 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
| 14217 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 14179 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 14218 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 14180 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 14219 | 14181 |
| 14220 Handle<ObjectTemplateInfo> collator_template = I18N::GetTemplate(isolate); | 14182 Handle<ObjectTemplateInfo> collator_template = I18N::GetTemplate(isolate); |
| 14221 | 14183 |
| 14222 // Create an empty object wrapper. | 14184 // Create an empty object wrapper. |
| 14223 bool has_pending_exception = false; | 14185 Handle<JSObject> local_object; |
| 14224 Handle<JSObject> local_object = Execution::InstantiateObject( | 14186 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14225 collator_template, &has_pending_exception); | 14187 isolate, local_object, Execution::InstantiateObject(collator_template)); |
| 14226 if (has_pending_exception) { | |
| 14227 ASSERT(isolate->has_pending_exception()); | |
| 14228 return Failure::Exception(); | |
| 14229 } | |
| 14230 | 14188 |
| 14231 // Set collator as internal field of the resulting JS object. | 14189 // Set collator as internal field of the resulting JS object. |
| 14232 icu::Collator* collator = Collator::InitializeCollator( | 14190 icu::Collator* collator = Collator::InitializeCollator( |
| 14233 isolate, locale, options, resolved); | 14191 isolate, locale, options, resolved); |
| 14234 | 14192 |
| 14235 if (!collator) return isolate->ThrowIllegalOperation(); | 14193 if (!collator) return isolate->ThrowIllegalOperation(); |
| 14236 | 14194 |
| 14237 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); | 14195 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); |
| 14238 | 14196 |
| 14239 RETURN_IF_EMPTY_HANDLE(isolate, | 14197 RETURN_IF_EMPTY_HANDLE(isolate, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14314 ASSERT(args.length() == 3); | 14272 ASSERT(args.length() == 3); |
| 14315 | 14273 |
| 14316 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 14274 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
| 14317 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 14275 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 14318 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 14276 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 14319 | 14277 |
| 14320 Handle<ObjectTemplateInfo> break_iterator_template = | 14278 Handle<ObjectTemplateInfo> break_iterator_template = |
| 14321 I18N::GetTemplate2(isolate); | 14279 I18N::GetTemplate2(isolate); |
| 14322 | 14280 |
| 14323 // Create an empty object wrapper. | 14281 // Create an empty object wrapper. |
| 14324 bool has_pending_exception = false; | 14282 Handle<JSObject> local_object; |
| 14325 Handle<JSObject> local_object = Execution::InstantiateObject( | 14283 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14326 break_iterator_template, &has_pending_exception); | 14284 isolate, local_object, |
| 14327 if (has_pending_exception) { | 14285 Execution::InstantiateObject(break_iterator_template)); |
| 14328 ASSERT(isolate->has_pending_exception()); | |
| 14329 return Failure::Exception(); | |
| 14330 } | |
| 14331 | 14286 |
| 14332 // Set break iterator as internal field of the resulting JS object. | 14287 // Set break iterator as internal field of the resulting JS object. |
| 14333 icu::BreakIterator* break_iterator = BreakIterator::InitializeBreakIterator( | 14288 icu::BreakIterator* break_iterator = BreakIterator::InitializeBreakIterator( |
| 14334 isolate, locale, options, resolved); | 14289 isolate, locale, options, resolved); |
| 14335 | 14290 |
| 14336 if (!break_iterator) return isolate->ThrowIllegalOperation(); | 14291 if (!break_iterator) return isolate->ThrowIllegalOperation(); |
| 14337 | 14292 |
| 14338 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); | 14293 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); |
| 14339 // Make sure that the pointer to adopted text is NULL. | 14294 // Make sure that the pointer to adopted text is NULL. |
| 14340 local_object->SetInternalField(1, reinterpret_cast<Smi*>(NULL)); | 14295 local_object->SetInternalField(1, reinterpret_cast<Smi*>(NULL)); |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14671 Handle<Object> key_handle(key, isolate); | 14626 Handle<Object> key_handle(key, isolate); |
| 14672 Handle<Object> value; | 14627 Handle<Object> value; |
| 14673 { | 14628 { |
| 14674 Handle<JSFunction> factory(JSFunction::cast( | 14629 Handle<JSFunction> factory(JSFunction::cast( |
| 14675 cache_handle->get(JSFunctionResultCache::kFactoryIndex))); | 14630 cache_handle->get(JSFunctionResultCache::kFactoryIndex))); |
| 14676 // TODO(antonm): consider passing a receiver when constructing a cache. | 14631 // TODO(antonm): consider passing a receiver when constructing a cache. |
| 14677 Handle<Object> receiver(isolate->native_context()->global_object(), | 14632 Handle<Object> receiver(isolate->native_context()->global_object(), |
| 14678 isolate); | 14633 isolate); |
| 14679 // This handle is nor shared, nor used later, so it's safe. | 14634 // This handle is nor shared, nor used later, so it's safe. |
| 14680 Handle<Object> argv[] = { key_handle }; | 14635 Handle<Object> argv[] = { key_handle }; |
| 14681 bool pending_exception; | 14636 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 14682 value = Execution::Call(isolate, | 14637 isolate, value, |
| 14683 factory, | 14638 Execution::Call(isolate, factory, receiver, ARRAY_SIZE(argv), argv)); |
| 14684 receiver, | |
| 14685 ARRAY_SIZE(argv), | |
| 14686 argv, | |
| 14687 &pending_exception); | |
| 14688 if (pending_exception) return Failure::Exception(); | |
| 14689 } | 14639 } |
| 14690 | 14640 |
| 14691 #ifdef VERIFY_HEAP | 14641 #ifdef VERIFY_HEAP |
| 14692 if (FLAG_verify_heap) { | 14642 if (FLAG_verify_heap) { |
| 14693 cache_handle->JSFunctionResultCacheVerify(); | 14643 cache_handle->JSFunctionResultCacheVerify(); |
| 14694 } | 14644 } |
| 14695 #endif | 14645 #endif |
| 14696 | 14646 |
| 14697 // Function invocation may have cleared the cache. Reread all the data. | 14647 // Function invocation may have cleared the cache. Reread all the data. |
| 14698 finger_index = cache_handle->finger_index(); | 14648 finger_index = cache_handle->finger_index(); |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14910 CONVERT_BOOLEAN_ARG_CHECKED(new_state, 0); | 14860 CONVERT_BOOLEAN_ARG_CHECKED(new_state, 0); |
| 14911 bool old_state = isolate->microtask_pending(); | 14861 bool old_state = isolate->microtask_pending(); |
| 14912 isolate->set_microtask_pending(new_state); | 14862 isolate->set_microtask_pending(new_state); |
| 14913 return isolate->heap()->ToBoolean(old_state); | 14863 return isolate->heap()->ToBoolean(old_state); |
| 14914 } | 14864 } |
| 14915 | 14865 |
| 14916 | 14866 |
| 14917 RUNTIME_FUNCTION(MaybeObject*, Runtime_RunMicrotasks) { | 14867 RUNTIME_FUNCTION(MaybeObject*, Runtime_RunMicrotasks) { |
| 14918 HandleScope scope(isolate); | 14868 HandleScope scope(isolate); |
| 14919 ASSERT(args.length() == 0); | 14869 ASSERT(args.length() == 0); |
| 14920 if (isolate->microtask_pending()) | 14870 if (isolate->microtask_pending()) Execution::RunMicrotasks(isolate); |
| 14921 Execution::RunMicrotasks(isolate); | |
| 14922 return isolate->heap()->undefined_value(); | 14871 return isolate->heap()->undefined_value(); |
| 14923 } | 14872 } |
| 14924 | 14873 |
| 14925 | 14874 |
| 14926 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetMicrotaskState) { | 14875 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetMicrotaskState) { |
| 14927 SealHandleScope shs(isolate); | 14876 SealHandleScope shs(isolate); |
| 14928 ASSERT(args.length() == 0); | 14877 ASSERT(args.length() == 0); |
| 14929 return isolate->heap()->microtask_state(); | 14878 return isolate->heap()->microtask_state(); |
| 14930 } | 14879 } |
| 14931 | 14880 |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15238 } | 15187 } |
| 15239 } | 15188 } |
| 15240 | 15189 |
| 15241 | 15190 |
| 15242 void Runtime::OutOfMemory() { | 15191 void Runtime::OutOfMemory() { |
| 15243 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); | 15192 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); |
| 15244 UNREACHABLE(); | 15193 UNREACHABLE(); |
| 15245 } | 15194 } |
| 15246 | 15195 |
| 15247 } } // namespace v8::internal | 15196 } } // namespace v8::internal |
| OLD | NEW |