| Index: src/runtime/runtime-i18n.cc | 
| diff --git a/src/runtime/runtime-i18n.cc b/src/runtime/runtime-i18n.cc | 
| index ce2650727a24d48c12aa612ffdd9c7c5d09937cf..9aad33935b0436554a0bb91d3198c33c55eec20a 100644 | 
| --- a/src/runtime/runtime-i18n.cc | 
| +++ b/src/runtime/runtime-i18n.cc | 
| @@ -293,47 +293,18 @@ RUNTIME_FUNCTION(Runtime_IsInitializedIntlObjectOfType) { | 
| RUNTIME_FUNCTION(Runtime_MarkAsInitializedIntlObjectOfType) { | 
| HandleScope scope(isolate); | 
|  | 
| -  DCHECK_EQ(3, args.length()); | 
| +  DCHECK_EQ(2, args.length()); | 
|  | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, input, 0); | 
| CONVERT_ARG_HANDLE_CHECKED(String, type, 1); | 
| -  CONVERT_ARG_HANDLE_CHECKED(JSObject, impl, 2); | 
|  | 
| Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol(); | 
| JSObject::SetProperty(input, marker, type, STRICT).Assert(); | 
|  | 
| -  marker = isolate->factory()->intl_impl_object_symbol(); | 
| -  JSObject::SetProperty(input, marker, impl, STRICT).Assert(); | 
| - | 
| return isolate->heap()->undefined_value(); | 
| } | 
|  | 
|  | 
| -RUNTIME_FUNCTION(Runtime_GetImplFromInitializedIntlObject) { | 
| -  HandleScope scope(isolate); | 
| - | 
| -  DCHECK_EQ(1, args.length()); | 
| - | 
| -  CONVERT_ARG_HANDLE_CHECKED(JSObject, input, 0); | 
| - | 
| -  if (!input->IsJSObject()) { | 
| -    THROW_NEW_ERROR_RETURN_FAILURE( | 
| -        isolate, NewTypeError(MessageTemplate::kNotIntlObject, input)); | 
| -  } | 
| - | 
| -  Handle<JSObject> obj = Handle<JSObject>::cast(input); | 
| - | 
| -  Handle<Symbol> marker = isolate->factory()->intl_impl_object_symbol(); | 
| - | 
| -  Handle<Object> impl = JSReceiver::GetDataProperty(obj, marker); | 
| -  if (!impl->IsJSObject()) { | 
| -    THROW_NEW_ERROR_RETURN_FAILURE( | 
| -        isolate, NewTypeError(MessageTemplate::kNotIntlObject, obj)); | 
| -  } | 
| -  return *impl; | 
| -} | 
| - | 
| - | 
| RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) { | 
| HandleScope scope(isolate); | 
|  | 
| @@ -343,13 +314,12 @@ RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 
|  | 
| -  Handle<ObjectTemplateInfo> date_format_template = I18N::GetTemplate(isolate); | 
| +  Handle<JSFunction> constructor( | 
| +      isolate->native_context()->intl_date_time_format_function()); | 
|  | 
| -  // Create an empty object wrapper. | 
| Handle<JSObject> local_object; | 
| -  ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| -      isolate, local_object, | 
| -      ApiNatives::InstantiateObject(date_format_template)); | 
| +  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 
| +                                     JSObject::New(constructor, constructor)); | 
|  | 
| // Set date time formatter as internal field of the resulting JS object. | 
| icu::SimpleDateFormat* date_format = | 
| @@ -534,14 +504,12 @@ RUNTIME_FUNCTION(Runtime_CreateNumberFormat) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 
|  | 
| -  Handle<ObjectTemplateInfo> number_format_template = | 
| -      I18N::GetTemplate(isolate); | 
| +  Handle<JSFunction> constructor( | 
| +      isolate->native_context()->intl_number_format_function()); | 
|  | 
| -  // Create an empty object wrapper. | 
| Handle<JSObject> local_object; | 
| -  ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| -      isolate, local_object, | 
| -      ApiNatives::InstantiateObject(number_format_template)); | 
| +  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 
| +                                     JSObject::New(constructor, constructor)); | 
|  | 
| // Set number formatter as internal field of the resulting JS object. | 
| icu::DecimalFormat* number_format = | 
| @@ -593,12 +561,12 @@ RUNTIME_FUNCTION(Runtime_CreateCollator) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 
|  | 
| -  Handle<ObjectTemplateInfo> collator_template = I18N::GetTemplate(isolate); | 
| +  Handle<JSFunction> constructor( | 
| +      isolate->native_context()->intl_collator_function()); | 
|  | 
| -  // Create an empty object wrapper. | 
| Handle<JSObject> local_object; | 
| -  ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| -      isolate, local_object, ApiNatives::InstantiateObject(collator_template)); | 
| +  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 
| +                                     JSObject::New(constructor, constructor)); | 
|  | 
| // Set collator as internal field of the resulting JS object. | 
| icu::Collator* collator = | 
| @@ -719,17 +687,15 @@ RUNTIME_FUNCTION(Runtime_CreateBreakIterator) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 
|  | 
| -  Handle<ObjectTemplateInfo> break_iterator_template = | 
| -      I18N::GetTemplate2(isolate); | 
| +  Handle<JSFunction> constructor( | 
| +      isolate->native_context()->intl_v8_break_iterator_function()); | 
|  | 
| -  // Create an empty object wrapper. | 
| Handle<JSObject> local_object; | 
| -  ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| -      isolate, local_object, | 
| -      ApiNatives::InstantiateObject(break_iterator_template)); | 
| +  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 
| +                                     JSObject::New(constructor, constructor)); | 
|  | 
| // Set break iterator as internal field of the resulting JS object. | 
| -  icu::BreakIterator* break_iterator = BreakIterator::InitializeBreakIterator( | 
| +  icu::BreakIterator* break_iterator = V8BreakIterator::InitializeBreakIterator( | 
| isolate, locale, options, resolved); | 
|  | 
| if (!break_iterator) return isolate->ThrowIllegalOperation(); | 
| @@ -742,7 +708,7 @@ RUNTIME_FUNCTION(Runtime_CreateBreakIterator) { | 
| // in. | 
| Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 
| GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), | 
| -                          BreakIterator::DeleteBreakIterator, | 
| +                          V8BreakIterator::DeleteBreakIterator, | 
| WeakCallbackType::kInternalFields); | 
| return *local_object; | 
| } | 
| @@ -757,7 +723,7 @@ RUNTIME_FUNCTION(Runtime_BreakIteratorAdoptText) { | 
| CONVERT_ARG_HANDLE_CHECKED(String, text, 1); | 
|  | 
| icu::BreakIterator* break_iterator = | 
| -      BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| +      V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| CHECK_NOT_NULL(break_iterator); | 
|  | 
| icu::UnicodeString* u_text = reinterpret_cast<icu::UnicodeString*>( | 
| @@ -787,7 +753,7 @@ RUNTIME_FUNCTION(Runtime_BreakIteratorFirst) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 
|  | 
| icu::BreakIterator* break_iterator = | 
| -      BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| +      V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| CHECK_NOT_NULL(break_iterator); | 
|  | 
| return *isolate->factory()->NewNumberFromInt(break_iterator->first()); | 
| @@ -802,7 +768,7 @@ RUNTIME_FUNCTION(Runtime_BreakIteratorNext) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 
|  | 
| icu::BreakIterator* break_iterator = | 
| -      BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| +      V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| CHECK_NOT_NULL(break_iterator); | 
|  | 
| return *isolate->factory()->NewNumberFromInt(break_iterator->next()); | 
| @@ -817,7 +783,7 @@ RUNTIME_FUNCTION(Runtime_BreakIteratorCurrent) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 
|  | 
| icu::BreakIterator* break_iterator = | 
| -      BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| +      V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| CHECK_NOT_NULL(break_iterator); | 
|  | 
| return *isolate->factory()->NewNumberFromInt(break_iterator->current()); | 
| @@ -832,7 +798,7 @@ RUNTIME_FUNCTION(Runtime_BreakIteratorBreakType) { | 
| CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 
|  | 
| icu::BreakIterator* break_iterator = | 
| -      BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| +      V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 
| CHECK_NOT_NULL(break_iterator); | 
|  | 
| // TODO(cira): Remove cast once ICU fixes base BreakIterator class. | 
|  |