add setaccessorproperty to object
R=svenpanne@chromium.org LOG=N BUG=v8:2964 Review URL: https://codereview.chromium.org/209853002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20178 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
15951521cc
commit
3ab0622b96
@ -2205,6 +2205,12 @@ class V8_EXPORT Object : public Value {
|
||||
PropertyAttribute attribute = None,
|
||||
AccessControl settings = DEFAULT);
|
||||
|
||||
void SetAccessorProperty(Local<String> name,
|
||||
Local<Function> getter,
|
||||
Handle<Function> setter = Handle<Function>(),
|
||||
PropertyAttribute attribute = None,
|
||||
AccessControl settings = DEFAULT);
|
||||
|
||||
/**
|
||||
* Functionality for private properties.
|
||||
* This is an experimental feature, use at your own risk.
|
||||
|
21
src/api.cc
21
src/api.cc
@ -3488,6 +3488,27 @@ bool Object::SetDeclaredAccessor(Local<String> name,
|
||||
}
|
||||
|
||||
|
||||
void Object::SetAccessorProperty(Local<String> name,
|
||||
Local<Function> getter,
|
||||
Handle<Function> setter,
|
||||
PropertyAttribute attribute,
|
||||
AccessControl settings) {
|
||||
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
||||
ON_BAILOUT(isolate, "v8::Object::SetAccessorProperty()", return);
|
||||
ENTER_V8(isolate);
|
||||
i::HandleScope scope(isolate);
|
||||
i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter);
|
||||
i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true);
|
||||
if (setter_i.is_null()) setter_i = isolate->factory()->null_value();
|
||||
i::JSObject::DefineAccessor(v8::Utils::OpenHandle(this),
|
||||
v8::Utils::OpenHandle(*name),
|
||||
getter_i,
|
||||
setter_i,
|
||||
static_cast<PropertyAttributes>(attribute),
|
||||
settings);
|
||||
}
|
||||
|
||||
|
||||
bool v8::Object::HasOwnProperty(Handle<String> key) {
|
||||
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
||||
ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()",
|
||||
|
@ -21962,25 +21962,6 @@ class ApiCallOptimizationChecker {
|
||||
info.GetReturnValue().Set(v8_str("returned"));
|
||||
}
|
||||
|
||||
// TODO(dcarney): move this to v8.h
|
||||
static void SetAccessorProperty(Local<Object> object,
|
||||
Local<String> name,
|
||||
Local<Function> getter,
|
||||
Local<Function> setter = Local<Function>()) {
|
||||
i::Isolate* isolate = CcTest::i_isolate();
|
||||
v8::AccessControl settings = v8::DEFAULT;
|
||||
v8::PropertyAttribute attribute = v8::None;
|
||||
i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter);
|
||||
i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true);
|
||||
if (setter_i.is_null()) setter_i = isolate->factory()->null_value();
|
||||
i::JSObject::DefineAccessor(v8::Utils::OpenHandle(*object),
|
||||
v8::Utils::OpenHandle(*name),
|
||||
getter_i,
|
||||
setter_i,
|
||||
static_cast<PropertyAttributes>(attribute),
|
||||
settings);
|
||||
}
|
||||
|
||||
public:
|
||||
enum SignatureType {
|
||||
kNoSignature,
|
||||
@ -22049,9 +22030,9 @@ class ApiCallOptimizationChecker {
|
||||
global_holder = Local<Object>::Cast(global_holder->GetPrototype());
|
||||
}
|
||||
global_holder->Set(v8_str("g_f"), function);
|
||||
SetAccessorProperty(global_holder, v8_str("g_acc"), function, function);
|
||||
global_holder->SetAccessorProperty(v8_str("g_acc"), function, function);
|
||||
function_holder->Set(v8_str("f"), function);
|
||||
SetAccessorProperty(function_holder, v8_str("acc"), function, function);
|
||||
function_holder->SetAccessorProperty(v8_str("acc"), function, function);
|
||||
// Initialize expected values.
|
||||
callee = function;
|
||||
count = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user