| Index: src/api.cc | 
| diff --git a/src/api.cc b/src/api.cc | 
| index 7c409941facc20e15049712c940361f0c43613bd..0208066e2079c877e351057a3553a5dbb9c9c22b 100644 | 
| --- a/src/api.cc | 
| +++ b/src/api.cc | 
| @@ -766,39 +766,17 @@ static void InitializeTemplate(i::Handle<i::TemplateInfo> that, int type) { | 
| } | 
|  | 
|  | 
| -static void TemplateSet(i::Isolate* isolate, | 
| -                        v8::Template* templ, | 
| -                        int length, | 
| -                        v8::Handle<v8::Data>* data) { | 
| -  i::Handle<i::Object> list(Utils::OpenHandle(templ)->property_list(), isolate); | 
| -  if (list->IsUndefined()) { | 
| -    list = NeanderArray(isolate).value(); | 
| -    Utils::OpenHandle(templ)->set_property_list(*list); | 
| -  } | 
| -  NeanderArray array(list); | 
| -  array.add(isolate, isolate->factory()->NewNumberFromInt(length)); | 
| -  for (int i = 0; i < length; i++) { | 
| -    i::Handle<i::Object> value = data[i].IsEmpty() ? | 
| -        i::Handle<i::Object>(isolate->factory()->undefined_value()) : | 
| -        Utils::OpenHandle(*data[i]); | 
| -    array.add(isolate, value); | 
| -  } | 
| -} | 
| - | 
| - | 
| void Template::Set(v8::Handle<Name> name, | 
| v8::Handle<Data> value, | 
| v8::PropertyAttribute attribute) { | 
| -  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 
| +  auto templ = Utils::OpenHandle(this); | 
| +  i::Isolate* isolate = templ->GetIsolate(); | 
| ENTER_V8(isolate); | 
| i::HandleScope scope(isolate); | 
| -  const int kSize = 3; | 
| -  v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); | 
| -  v8::Handle<v8::Data> data[kSize] = { | 
| -    name, | 
| -    value, | 
| -    v8::Integer::New(v8_isolate, attribute)}; | 
| -  TemplateSet(isolate, this, kSize, data); | 
| +  // TODO(dcarney): split api to allow values of v8::Value or v8::TemplateInfo. | 
| +  i::ApiNatives::AddDataProperty(isolate, templ, Utils::OpenHandle(*name), | 
| +                                 Utils::OpenHandle(*value), | 
| +                                 static_cast<PropertyAttributes>(attribute)); | 
| } | 
|  | 
|  | 
| @@ -810,19 +788,16 @@ void Template::SetAccessorProperty( | 
| v8::AccessControl access_control) { | 
| // TODO(verwaest): Remove |access_control|. | 
| DCHECK_EQ(v8::DEFAULT, access_control); | 
| -  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 
| +  auto templ = Utils::OpenHandle(this); | 
| +  auto isolate = templ->GetIsolate(); | 
| ENTER_V8(isolate); | 
| DCHECK(!name.IsEmpty()); | 
| DCHECK(!getter.IsEmpty() || !setter.IsEmpty()); | 
| i::HandleScope scope(isolate); | 
| -  const int kSize = 5; | 
| -  v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); | 
| -  v8::Handle<v8::Data> data[kSize] = { | 
| -    name, | 
| -    getter, | 
| -    setter, | 
| -    v8::Integer::New(v8_isolate, attribute)}; | 
| -  TemplateSet(isolate, this, kSize, data); | 
| +  i::ApiNatives::AddAccessorProperty( | 
| +      isolate, templ, Utils::OpenHandle(*name), | 
| +      Utils::OpenHandle(*getter, true), Utils::OpenHandle(*setter, true), | 
| +      static_cast<PropertyAttributes>(attribute)); | 
| } | 
|  | 
|  | 
| @@ -1144,20 +1119,6 @@ static i::Handle<i::FunctionTemplateInfo> EnsureConstructor( | 
| } | 
|  | 
|  | 
| -static inline void AddPropertyToTemplate( | 
| -    i::Handle<i::TemplateInfo> info, | 
| -    i::Handle<i::AccessorInfo> obj) { | 
| -  i::Isolate* isolate = info->GetIsolate(); | 
| -  i::Handle<i::Object> list(info->property_accessors(), isolate); | 
| -  if (list->IsUndefined()) { | 
| -    list = NeanderArray(isolate).value(); | 
| -    info->set_property_accessors(*list); | 
| -  } | 
| -  NeanderArray array(list); | 
| -  array.add(isolate, obj); | 
| -} | 
| - | 
| - | 
| static inline i::Handle<i::TemplateInfo> GetTemplateInfo( | 
| i::Isolate* isolate, | 
| Template* template_obj) { | 
| @@ -1184,14 +1145,14 @@ static bool TemplateSetAccessor( | 
| AccessControl settings, | 
| PropertyAttribute attribute, | 
| v8::Local<AccessorSignature> signature) { | 
| -  i::Isolate* isolate = Utils::OpenHandle(template_obj)->GetIsolate(); | 
| +  auto isolate = Utils::OpenHandle(template_obj)->GetIsolate(); | 
| ENTER_V8(isolate); | 
| i::HandleScope scope(isolate); | 
| -  i::Handle<i::AccessorInfo> obj = MakeAccessorInfo( | 
| -      name, getter, setter, data, settings, attribute, signature); | 
| +  auto obj = MakeAccessorInfo(name, getter, setter, data, settings, attribute, | 
| +                              signature); | 
| if (obj.is_null()) return false; | 
| -  i::Handle<i::TemplateInfo> info = GetTemplateInfo(isolate, template_obj); | 
| -  AddPropertyToTemplate(info, obj); | 
| +  auto info = GetTemplateInfo(isolate, template_obj); | 
| +  i::ApiNatives::AddNativeDataProperty(isolate, info, obj); | 
| return true; | 
| } | 
|  | 
|  |