Chromium Code Reviews| Index: src/api.cc |
| diff --git a/src/api.cc b/src/api.cc |
| index 74886f00859b8a467f213d217f658583bc8e6b42..c8cee32251a53e48c925b12f3bf23f1bd9eac74f 100644 |
| --- a/src/api.cc |
| +++ b/src/api.cc |
| @@ -1057,7 +1057,8 @@ static i::Handle<i::AccessorInfo> MakeAccessorInfo( |
| AccessorSetter setter, |
| v8::Handle<Value> data, |
| v8::AccessControl settings, |
| - v8::PropertyAttribute attributes) { |
| + v8::PropertyAttribute attributes, |
| + v8::Handle<FunctionTemplate> constructor) { |
| i::Handle<i::AccessorInfo> obj = FACTORY->NewAccessorInfo(); |
| ASSERT(getter != NULL); |
| SET_FIELD_WRAPPED(obj, set_getter, getter); |
| @@ -1069,6 +1070,9 @@ static i::Handle<i::AccessorInfo> MakeAccessorInfo( |
| if (settings & ALL_CAN_WRITE) obj->set_all_can_write(true); |
| if (settings & PROHIBITS_OVERWRITING) obj->set_prohibits_overwriting(true); |
| obj->set_property_attributes(static_cast<PropertyAttributes>(attributes)); |
| + if (!constructor.IsEmpty()) { |
|
Sven Panne
2012/06/04 07:50:32
Not exactly related to this CL, but we should real
Michael Starzinger
2012/06/04 09:11:15
Yes. However the IsEmpty method (on the external h
|
| + obj->set_compatible(*Utils::OpenHandle(*constructor)); |
| + } |
| return obj; |
| } |
| @@ -1079,7 +1083,8 @@ void FunctionTemplate::AddInstancePropertyAccessor( |
| AccessorSetter setter, |
| v8::Handle<Value> data, |
| v8::AccessControl settings, |
| - v8::PropertyAttribute attributes) { |
| + v8::PropertyAttribute attributes, |
| + v8::Handle<FunctionTemplate> constructor) { |
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| if (IsDeadCheck(isolate, |
| "v8::FunctionTemplate::AddInstancePropertyAccessor()")) { |
| @@ -1088,9 +1093,9 @@ void FunctionTemplate::AddInstancePropertyAccessor( |
| ENTER_V8(isolate); |
| i::HandleScope scope(isolate); |
| - i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(name, |
| - getter, setter, data, |
| - settings, attributes); |
| + i::Handle<i::AccessorInfo> obj = MakeAccessorInfo(name, getter, setter, data, |
| + settings, attributes, |
| + constructor); |
| i::Handle<i::Object> list(Utils::OpenHandle(this)->property_accessors()); |
| if (list->IsUndefined()) { |
| list = NeanderArray().value(); |
| @@ -1275,7 +1280,8 @@ void ObjectTemplate::SetAccessor(v8::Handle<String> name, |
| AccessorSetter setter, |
| v8::Handle<Value> data, |
| AccessControl settings, |
| - PropertyAttribute attribute) { |
| + PropertyAttribute attribute, |
| + v8::Handle<FunctionTemplate> construct) { |
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
| if (IsDeadCheck(isolate, "v8::ObjectTemplate::SetAccessor()")) return; |
| ENTER_V8(isolate); |
| @@ -1289,7 +1295,8 @@ void ObjectTemplate::SetAccessor(v8::Handle<String> name, |
| setter, |
| data, |
| settings, |
| - attribute); |
| + attribute, |
| + construct); |
| } |
| @@ -3079,9 +3086,10 @@ bool Object::SetAccessor(Handle<String> name, |
| ON_BAILOUT(isolate, "v8::Object::SetAccessor()", return false); |
| ENTER_V8(isolate); |
| i::HandleScope scope(isolate); |
| - i::Handle<i::AccessorInfo> info = MakeAccessorInfo(name, |
| - getter, setter, data, |
| - settings, attributes); |
| + v8::Handle<FunctionTemplate> constructor; |
| + i::Handle<i::AccessorInfo> info = MakeAccessorInfo(name, getter, setter, data, |
| + settings, attributes, |
| + constructor); |
| bool fast = Utils::OpenHandle(this)->HasFastProperties(); |
| i::Handle<i::Object> result = i::SetAccessor(Utils::OpenHandle(this), info); |
| if (result.is_null() || result->IsUndefined()) return false; |