| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 6a7c40a06c96cc3246fde4c52f4cf94657e836da..1a0d1f899f202ccbc97b7c28b54b5a26e66d3a31 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -925,6 +925,11 @@ Local<AccessorSignature> AccessorSignature::New(
|
| }
|
|
|
|
|
| +void Accessor::setOptimizeLevel(AccessorOptimizeLevel jit) {
|
| + Utils::OpenHandle(this)->set_can_fast_call(jit != kOptimizeNone);
|
| +}
|
| +
|
| +
|
| template<typename Operation>
|
| static Local<Operation> NewDescriptor(
|
| Isolate* isolate,
|
| @@ -1293,7 +1298,7 @@ static inline i::Handle<i::TemplateInfo> GetTemplateInfo(
|
|
|
|
|
| template<typename Getter, typename Setter, typename Data, typename Template>
|
| -static bool TemplateSetAccessor(
|
| +static inline Local<Accessor> TemplateSetAccessorEx(
|
| Template* template_obj,
|
| v8::Local<Name> name,
|
| Getter getter,
|
| @@ -1307,10 +1312,26 @@ static bool TemplateSetAccessor(
|
| i::HandleScope scope(isolate);
|
| i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(
|
| name, getter, setter, data, settings, attribute, signature);
|
| - if (obj.is_null()) return false;
|
| + if (obj.is_null()) return Local<Accessor>();
|
| + obj->set_can_fast_call(false);
|
| i::Handle<i::TemplateInfo> info = GetTemplateInfo(isolate, template_obj);
|
| AddPropertyToTemplate(info, obj);
|
| - return true;
|
| + return Utils::ToLocal(scope.CloseAndEscape(obj));
|
| +}
|
| +
|
| +template<typename Getter, typename Setter, typename Data, typename Template>
|
| +static bool TemplateSetAccessor(
|
| + Template* template_obj,
|
| + v8::Local<Name> name,
|
| + Getter getter,
|
| + Setter setter,
|
| + Data data,
|
| + AccessControl settings,
|
| + PropertyAttribute attribute,
|
| + v8::Local<AccessorSignature> signature) {
|
| + return (!(TemplateSetAccessorEx(
|
| + template_obj, name, getter, setter,
|
| + data, settings, attribute, signature).IsEmpty()));
|
| }
|
|
|
|
|
| @@ -1361,6 +1382,16 @@ void ObjectTemplate::SetAccessor(v8::Handle<String> name,
|
| this, name, getter, setter, data, settings, attribute, signature);
|
| }
|
|
|
| +Local<Accessor> ObjectTemplate::SetAccessorEx(v8::Handle<String> name,
|
| + AccessorGetterCallback getter,
|
| + AccessorSetterCallback setter,
|
| + v8::Handle<Value> data,
|
| + AccessControl settings,
|
| + PropertyAttribute attribute,
|
| + v8::Handle<AccessorSignature> signature) {
|
| + return TemplateSetAccessorEx(
|
| + this, name, getter, setter, data, settings, attribute, signature);
|
| +}
|
|
|
| void ObjectTemplate::SetAccessor(v8::Handle<Name> name,
|
| AccessorNameGetterCallback getter,
|
|
|