| 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;
|
| }
|
|
|
|
|