OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stdlib.h> | 5 #include <stdlib.h> |
6 #include <limits> | 6 #include <limits> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 } | 296 } |
297 } else { | 297 } else { |
298 // Non-uint32 number. | 298 // Non-uint32 number. |
299 ASSERT(key->IsNumber()); | 299 ASSERT(key->IsNumber()); |
300 double num = key->Number(); | 300 double num = key->Number(); |
301 char arr[100]; | 301 char arr[100]; |
302 Vector<char> buffer(arr, ARRAY_SIZE(arr)); | 302 Vector<char> buffer(arr, ARRAY_SIZE(arr)); |
303 const char* str = DoubleToCString(num, buffer); | 303 const char* str = DoubleToCString(num, buffer); |
304 Handle<String> name = isolate->factory()->NewStringFromAsciiChecked(str); | 304 Handle<String> name = isolate->factory()->NewStringFromAsciiChecked(str); |
305 maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( | 305 maybe_result = JSObject::SetOwnPropertyIgnoreAttributes( |
306 boilerplate, name, value, NONE, | 306 boilerplate, name, value, NONE, value_type, mode); |
307 value_type, mode); | |
308 } | 307 } |
309 // If setting the property on the boilerplate throws an | 308 // If setting the property on the boilerplate throws an |
310 // exception, the exception is converted to an empty handle in | 309 // exception, the exception is converted to an empty handle in |
311 // the handle based operations. In that case, we need to | 310 // the handle based operations. In that case, we need to |
312 // convert back to an exception. | 311 // convert back to an exception. |
313 RETURN_ON_EXCEPTION(isolate, maybe_result, Object); | 312 RETURN_ON_EXCEPTION(isolate, maybe_result, Object); |
314 } | 313 } |
315 | 314 |
316 // Transform to fast properties if necessary. For object literals with | 315 // Transform to fast properties if necessary. For object literals with |
317 // containing function literals we defer this operation until after all | 316 // containing function literals we defer this operation until after all |
(...skipping 2071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2389 | 2388 |
2390 // Lookup the property as own on the global object. If it isn't | 2389 // Lookup the property as own on the global object. If it isn't |
2391 // there, we add the property and take special precautions to always | 2390 // there, we add the property and take special precautions to always |
2392 // add it even in case of callbacks in the prototype chain (this rules | 2391 // add it even in case of callbacks in the prototype chain (this rules |
2393 // out using SetProperty). We use SetOwnPropertyIgnoreAttributes instead | 2392 // out using SetProperty). We use SetOwnPropertyIgnoreAttributes instead |
2394 LookupResult lookup(isolate); | 2393 LookupResult lookup(isolate); |
2395 global->LookupOwn(name, &lookup); | 2394 global->LookupOwn(name, &lookup); |
2396 if (!lookup.IsFound()) { | 2395 if (!lookup.IsFound()) { |
2397 HandleScope handle_scope(isolate); | 2396 HandleScope handle_scope(isolate); |
2398 Handle<GlobalObject> global(isolate->context()->global_object()); | 2397 Handle<GlobalObject> global(isolate->context()->global_object()); |
2399 RETURN_FAILURE_ON_EXCEPTION( | 2398 JSObject::AddProperty(global, name, value, attributes); |
2400 isolate, | |
2401 JSObject::SetOwnPropertyIgnoreAttributes(global, name, value, | |
2402 attributes)); | |
2403 return *value; | 2399 return *value; |
2404 } | 2400 } |
2405 | 2401 |
2406 if (!lookup.IsReadOnly()) { | 2402 if (!lookup.IsReadOnly()) { |
2407 // Restore global object from context (in case of GC) and continue | 2403 // Restore global object from context (in case of GC) and continue |
2408 // with setting the value. | 2404 // with setting the value. |
2409 HandleScope handle_scope(isolate); | 2405 HandleScope handle_scope(isolate); |
2410 Handle<GlobalObject> global(isolate->context()->global_object()); | 2406 Handle<GlobalObject> global(isolate->context()->global_object()); |
2411 | 2407 |
2412 // BUG 1213575: Handle the case where we have to set a read-only | 2408 // BUG 1213575: Handle the case where we have to set a read-only |
(...skipping 5704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8117 // is happy about the number of fields. | 8113 // is happy about the number of fields. |
8118 RUNTIME_ASSERT(bound_function->RemovePrototype()); | 8114 RUNTIME_ASSERT(bound_function->RemovePrototype()); |
8119 Handle<Map> bound_function_map( | 8115 Handle<Map> bound_function_map( |
8120 isolate->native_context()->bound_function_map()); | 8116 isolate->native_context()->bound_function_map()); |
8121 JSObject::MigrateToMap(bound_function, bound_function_map); | 8117 JSObject::MigrateToMap(bound_function, bound_function_map); |
8122 Handle<String> length_string = isolate->factory()->length_string(); | 8118 Handle<String> length_string = isolate->factory()->length_string(); |
8123 PropertyAttributes attr = | 8119 PropertyAttributes attr = |
8124 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY); | 8120 static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY); |
8125 RETURN_FAILURE_ON_EXCEPTION( | 8121 RETURN_FAILURE_ON_EXCEPTION( |
8126 isolate, | 8122 isolate, |
8127 JSObject::SetOwnPropertyIgnoreAttributes(bound_function, length_string, | 8123 JSObject::SetOwnPropertyIgnoreAttributes( |
8128 new_length, attr)); | 8124 bound_function, length_string, new_length, attr)); |
8129 return *bound_function; | 8125 return *bound_function; |
8130 } | 8126 } |
8131 | 8127 |
8132 | 8128 |
8133 RUNTIME_FUNCTION(Runtime_BoundFunctionGetBindings) { | 8129 RUNTIME_FUNCTION(Runtime_BoundFunctionGetBindings) { |
8134 HandleScope handles(isolate); | 8130 HandleScope handles(isolate); |
8135 ASSERT(args.length() == 1); | 8131 ASSERT(args.length() == 1); |
8136 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, callable, 0); | 8132 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, callable, 0); |
8137 if (callable->IsJSFunction()) { | 8133 if (callable->IsJSFunction()) { |
8138 Handle<JSFunction> function = Handle<JSFunction>::cast(callable); | 8134 Handle<JSFunction> function = Handle<JSFunction>::cast(callable); |
(...skipping 5654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13793 // de_DE -> de-DE | 13789 // de_DE -> de-DE |
13794 char base_locale[ULOC_FULLNAME_CAPACITY]; | 13790 char base_locale[ULOC_FULLNAME_CAPACITY]; |
13795 uloc_toLanguageTag( | 13791 uloc_toLanguageTag( |
13796 icu_base_locale, base_locale, ULOC_FULLNAME_CAPACITY, FALSE, &error); | 13792 icu_base_locale, base_locale, ULOC_FULLNAME_CAPACITY, FALSE, &error); |
13797 | 13793 |
13798 if (U_FAILURE(error)) { | 13794 if (U_FAILURE(error)) { |
13799 return isolate->Throw(*factory->illegal_argument_string()); | 13795 return isolate->Throw(*factory->illegal_argument_string()); |
13800 } | 13796 } |
13801 | 13797 |
13802 Handle<JSObject> result = factory->NewJSObject(isolate->object_function()); | 13798 Handle<JSObject> result = factory->NewJSObject(isolate->object_function()); |
13803 RETURN_FAILURE_ON_EXCEPTION(isolate, | 13799 Handle<String> value = factory->NewStringFromAsciiChecked(base_max_locale); |
13804 JSObject::SetOwnPropertyIgnoreAttributes( | 13800 JSObject::AddProperty(result, maximized, value, NONE); |
13805 result, | 13801 value = factory->NewStringFromAsciiChecked(base_locale); |
13806 maximized, | 13802 JSObject::AddProperty(result, base, value, NONE); |
13807 factory->NewStringFromAsciiChecked(base_max_locale), | |
13808 NONE)); | |
13809 RETURN_FAILURE_ON_EXCEPTION(isolate, | |
13810 JSObject::SetOwnPropertyIgnoreAttributes( | |
13811 result, | |
13812 base, | |
13813 factory->NewStringFromAsciiChecked(base_locale), | |
13814 NONE)); | |
13815 output->set(i, *result); | 13803 output->set(i, *result); |
13816 } | 13804 } |
13817 | 13805 |
13818 Handle<JSArray> result = factory->NewJSArrayWithElements(output); | 13806 Handle<JSArray> result = factory->NewJSArrayWithElements(output); |
13819 result->set_length(Smi::FromInt(length)); | 13807 result->set_length(Smi::FromInt(length)); |
13820 return *result; | 13808 return *result; |
13821 } | 13809 } |
13822 | 13810 |
13823 | 13811 |
13824 RUNTIME_FUNCTION(Runtime_IsInitializedIntlObject) { | 13812 RUNTIME_FUNCTION(Runtime_IsInitializedIntlObject) { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13921 Execution::InstantiateObject(date_format_template)); | 13909 Execution::InstantiateObject(date_format_template)); |
13922 | 13910 |
13923 // Set date time formatter as internal field of the resulting JS object. | 13911 // Set date time formatter as internal field of the resulting JS object. |
13924 icu::SimpleDateFormat* date_format = DateFormat::InitializeDateTimeFormat( | 13912 icu::SimpleDateFormat* date_format = DateFormat::InitializeDateTimeFormat( |
13925 isolate, locale, options, resolved); | 13913 isolate, locale, options, resolved); |
13926 | 13914 |
13927 if (!date_format) return isolate->ThrowIllegalOperation(); | 13915 if (!date_format) return isolate->ThrowIllegalOperation(); |
13928 | 13916 |
13929 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); | 13917 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); |
13930 | 13918 |
13931 RETURN_FAILURE_ON_EXCEPTION(isolate, | 13919 Factory* factory = isolate->factory(); |
13932 JSObject::SetOwnPropertyIgnoreAttributes( | 13920 Handle<String> key = factory->NewStringFromStaticAscii("dateFormat"); |
13933 local_object, | 13921 Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
13934 isolate->factory()->NewStringFromStaticAscii("dateFormat"), | 13922 JSObject::AddProperty(local_object, key, value, NONE); |
13935 isolate->factory()->NewStringFromStaticAscii("valid"), | |
13936 NONE)); | |
13937 | 13923 |
13938 // Make object handle weak so we can delete the data format once GC kicks in. | 13924 // Make object handle weak so we can delete the data format once GC kicks in. |
13939 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 13925 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
13940 GlobalHandles::MakeWeak(wrapper.location(), | 13926 GlobalHandles::MakeWeak(wrapper.location(), |
13941 reinterpret_cast<void*>(wrapper.location()), | 13927 reinterpret_cast<void*>(wrapper.location()), |
13942 DateFormat::DeleteDateFormat); | 13928 DateFormat::DeleteDateFormat); |
13943 return *local_object; | 13929 return *local_object; |
13944 } | 13930 } |
13945 | 13931 |
13946 | 13932 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14020 Execution::InstantiateObject(number_format_template)); | 14006 Execution::InstantiateObject(number_format_template)); |
14021 | 14007 |
14022 // Set number formatter as internal field of the resulting JS object. | 14008 // Set number formatter as internal field of the resulting JS object. |
14023 icu::DecimalFormat* number_format = NumberFormat::InitializeNumberFormat( | 14009 icu::DecimalFormat* number_format = NumberFormat::InitializeNumberFormat( |
14024 isolate, locale, options, resolved); | 14010 isolate, locale, options, resolved); |
14025 | 14011 |
14026 if (!number_format) return isolate->ThrowIllegalOperation(); | 14012 if (!number_format) return isolate->ThrowIllegalOperation(); |
14027 | 14013 |
14028 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); | 14014 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); |
14029 | 14015 |
14030 RETURN_FAILURE_ON_EXCEPTION(isolate, | 14016 Factory* factory = isolate->factory(); |
14031 JSObject::SetOwnPropertyIgnoreAttributes( | 14017 Handle<String> key = factory->NewStringFromStaticAscii("numberFormat"); |
14032 local_object, | 14018 Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
14033 isolate->factory()->NewStringFromStaticAscii("numberFormat"), | 14019 JSObject::AddProperty(local_object, key, value, NONE); |
14034 isolate->factory()->NewStringFromStaticAscii("valid"), | |
14035 NONE)); | |
14036 | 14020 |
14037 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 14021 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
14038 GlobalHandles::MakeWeak(wrapper.location(), | 14022 GlobalHandles::MakeWeak(wrapper.location(), |
14039 reinterpret_cast<void*>(wrapper.location()), | 14023 reinterpret_cast<void*>(wrapper.location()), |
14040 NumberFormat::DeleteNumberFormat); | 14024 NumberFormat::DeleteNumberFormat); |
14041 return *local_object; | 14025 return *local_object; |
14042 } | 14026 } |
14043 | 14027 |
14044 | 14028 |
14045 RUNTIME_FUNCTION(Runtime_InternalNumberFormat) { | 14029 RUNTIME_FUNCTION(Runtime_InternalNumberFormat) { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14128 isolate, local_object, Execution::InstantiateObject(collator_template)); | 14112 isolate, local_object, Execution::InstantiateObject(collator_template)); |
14129 | 14113 |
14130 // Set collator as internal field of the resulting JS object. | 14114 // Set collator as internal field of the resulting JS object. |
14131 icu::Collator* collator = Collator::InitializeCollator( | 14115 icu::Collator* collator = Collator::InitializeCollator( |
14132 isolate, locale, options, resolved); | 14116 isolate, locale, options, resolved); |
14133 | 14117 |
14134 if (!collator) return isolate->ThrowIllegalOperation(); | 14118 if (!collator) return isolate->ThrowIllegalOperation(); |
14135 | 14119 |
14136 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); | 14120 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); |
14137 | 14121 |
14138 RETURN_FAILURE_ON_EXCEPTION(isolate, | 14122 Factory* factory = isolate->factory(); |
14139 JSObject::SetOwnPropertyIgnoreAttributes( | 14123 Handle<String> key = factory->NewStringFromStaticAscii("collator"); |
14140 local_object, | 14124 Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
14141 isolate->factory()->NewStringFromStaticAscii("collator"), | 14125 JSObject::AddProperty(local_object, key, value, NONE); |
14142 isolate->factory()->NewStringFromStaticAscii("valid"), | |
14143 NONE)); | |
14144 | 14126 |
14145 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 14127 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
14146 GlobalHandles::MakeWeak(wrapper.location(), | 14128 GlobalHandles::MakeWeak(wrapper.location(), |
14147 reinterpret_cast<void*>(wrapper.location()), | 14129 reinterpret_cast<void*>(wrapper.location()), |
14148 Collator::DeleteCollator); | 14130 Collator::DeleteCollator); |
14149 return *local_object; | 14131 return *local_object; |
14150 } | 14132 } |
14151 | 14133 |
14152 | 14134 |
14153 RUNTIME_FUNCTION(Runtime_InternalCompare) { | 14135 RUNTIME_FUNCTION(Runtime_InternalCompare) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14234 // Set break iterator as internal field of the resulting JS object. | 14216 // Set break iterator as internal field of the resulting JS object. |
14235 icu::BreakIterator* break_iterator = BreakIterator::InitializeBreakIterator( | 14217 icu::BreakIterator* break_iterator = BreakIterator::InitializeBreakIterator( |
14236 isolate, locale, options, resolved); | 14218 isolate, locale, options, resolved); |
14237 | 14219 |
14238 if (!break_iterator) return isolate->ThrowIllegalOperation(); | 14220 if (!break_iterator) return isolate->ThrowIllegalOperation(); |
14239 | 14221 |
14240 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); | 14222 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); |
14241 // Make sure that the pointer to adopted text is NULL. | 14223 // Make sure that the pointer to adopted text is NULL. |
14242 local_object->SetInternalField(1, reinterpret_cast<Smi*>(NULL)); | 14224 local_object->SetInternalField(1, reinterpret_cast<Smi*>(NULL)); |
14243 | 14225 |
14244 RETURN_FAILURE_ON_EXCEPTION(isolate, | 14226 Factory* factory = isolate->factory(); |
14245 JSObject::SetOwnPropertyIgnoreAttributes( | 14227 Handle<String> key = factory->NewStringFromStaticAscii("breakIterator"); |
14246 local_object, | 14228 Handle<String> value = factory->NewStringFromStaticAscii("valid"); |
14247 isolate->factory()->NewStringFromStaticAscii("breakIterator"), | 14229 JSObject::AddProperty(local_object, key, value, NONE); |
14248 isolate->factory()->NewStringFromStaticAscii("valid"), | |
14249 NONE)); | |
14250 | 14230 |
14251 // Make object handle weak so we can delete the break iterator once GC kicks | 14231 // Make object handle weak so we can delete the break iterator once GC kicks |
14252 // in. | 14232 // in. |
14253 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 14233 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
14254 GlobalHandles::MakeWeak(wrapper.location(), | 14234 GlobalHandles::MakeWeak(wrapper.location(), |
14255 reinterpret_cast<void*>(wrapper.location()), | 14235 reinterpret_cast<void*>(wrapper.location()), |
14256 BreakIterator::DeleteBreakIterator); | 14236 BreakIterator::DeleteBreakIterator); |
14257 return *local_object; | 14237 return *local_object; |
14258 } | 14238 } |
14259 | 14239 |
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15090 } | 15070 } |
15091 return NULL; | 15071 return NULL; |
15092 } | 15072 } |
15093 | 15073 |
15094 | 15074 |
15095 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { | 15075 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { |
15096 return &(kIntrinsicFunctions[static_cast<int>(id)]); | 15076 return &(kIntrinsicFunctions[static_cast<int>(id)]); |
15097 } | 15077 } |
15098 | 15078 |
15099 } } // namespace v8::internal | 15079 } } // namespace v8::internal |
OLD | NEW |