Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(753)

Side by Side Diff: test/cctest/test-api.cc

Issue 378583002: Revert "Treat ExecutableAccessorInfo as regular data properties." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects.cc ('k') | test/mjsunit/es7/object-observe.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1906 matching lines...) Expand 10 before | Expand all | Expand 10 after
1917 Handle<Object> self = Handle<Object>::Cast(info.This()); 1917 Handle<Object> self = Handle<Object>::Cast(info.This());
1918 self->SetHiddenValue(name, value); 1918 self->SetHiddenValue(name, value);
1919 info.GetReturnValue().Set(value); 1919 info.GetReturnValue().Set(value);
1920 } 1920 }
1921 } 1921 }
1922 1922
1923 void AddAccessor(Handle<FunctionTemplate> templ, 1923 void AddAccessor(Handle<FunctionTemplate> templ,
1924 Handle<String> name, 1924 Handle<String> name,
1925 v8::AccessorGetterCallback getter, 1925 v8::AccessorGetterCallback getter,
1926 v8::AccessorSetterCallback setter) { 1926 v8::AccessorSetterCallback setter) {
1927 templ->InstanceTemplate()->SetAccessor(name, getter, setter); 1927 templ->PrototypeTemplate()->SetAccessor(name, getter, setter);
1928 } 1928 }
1929 1929
1930 void AddInterceptor(Handle<FunctionTemplate> templ, 1930 void AddInterceptor(Handle<FunctionTemplate> templ,
1931 v8::NamedPropertyGetterCallback getter, 1931 v8::NamedPropertyGetterCallback getter,
1932 v8::NamedPropertySetterCallback setter) { 1932 v8::NamedPropertySetterCallback setter) {
1933 templ->InstanceTemplate()->SetNamedPropertyHandler(getter, setter); 1933 templ->InstanceTemplate()->SetNamedPropertyHandler(getter, setter);
1934 } 1934 }
1935 1935
1936 1936
1937 THREADED_TEST(EmptyInterceptorDoesNotShadowAccessors) { 1937 THREADED_TEST(EmptyInterceptorDoesNotShadowAccessors) {
1938 v8::HandleScope scope(CcTest::isolate()); 1938 v8::HandleScope scope(CcTest::isolate());
1939 Handle<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate()); 1939 Handle<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
1940 parent->SetHiddenPrototype(true);
1941 Handle<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate()); 1940 Handle<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
1942 child->Inherit(parent); 1941 child->Inherit(parent);
1943 AddAccessor(parent, v8_str("age"), 1942 AddAccessor(parent, v8_str("age"),
1944 SimpleAccessorGetter, SimpleAccessorSetter); 1943 SimpleAccessorGetter, SimpleAccessorSetter);
1945 AddInterceptor(child, EmptyInterceptorGetter, EmptyInterceptorSetter); 1944 AddInterceptor(child, EmptyInterceptorGetter, EmptyInterceptorSetter);
1946 LocalContext env; 1945 LocalContext env;
1947 env->Global()->Set(v8_str("Child"), child->GetFunction()); 1946 env->Global()->Set(v8_str("Child"), child->GetFunction());
1948 CompileRun("var child = new Child;" 1947 CompileRun("var child = new Child;"
1949 "child.age = 10;"); 1948 "child.age = 10;");
1950 ExpectBoolean("child.hasOwnProperty('age')", true); 1949 ExpectBoolean("child.hasOwnProperty('age')", false);
1951 ExpectInt32("child.age", 10); 1950 ExpectInt32("child.age", 10);
1952 ExpectInt32("child.accessor_age", 10); 1951 ExpectInt32("child.accessor_age", 10);
1953 } 1952 }
1954 1953
1955 1954
1956 THREADED_TEST(ExecutableAccessorIsPreservedOnAttributeChange) { 1955 THREADED_TEST(ExecutableAccessorIsPreservedOnAttributeChange) {
1957 v8::Isolate* isolate = CcTest::isolate(); 1956 v8::Isolate* isolate = CcTest::isolate();
1958 v8::HandleScope scope(isolate); 1957 v8::HandleScope scope(isolate);
1959 LocalContext env; 1958 LocalContext env;
1960 v8::Local<v8::Value> res = CompileRun("var a = []; a;"); 1959 v8::Local<v8::Value> res = CompileRun("var a = []; a;");
(...skipping 8018 matching lines...) Expand 10 before | Expand all | Expand 10 after
9979 9978
9980 THREADED_TEST(ShadowObject) { 9979 THREADED_TEST(ShadowObject) {
9981 shadow_y = shadow_y_setter_call_count = shadow_y_getter_call_count = 0; 9980 shadow_y = shadow_y_setter_call_count = shadow_y_getter_call_count = 0;
9982 v8::Isolate* isolate = CcTest::isolate(); 9981 v8::Isolate* isolate = CcTest::isolate();
9983 v8::HandleScope handle_scope(isolate); 9982 v8::HandleScope handle_scope(isolate);
9984 9983
9985 Local<ObjectTemplate> global_template = v8::ObjectTemplate::New(isolate); 9984 Local<ObjectTemplate> global_template = v8::ObjectTemplate::New(isolate);
9986 LocalContext context(NULL, global_template); 9985 LocalContext context(NULL, global_template);
9987 9986
9988 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate); 9987 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate);
9989 t->SetHiddenPrototype(true); 9988 t->InstanceTemplate()->SetNamedPropertyHandler(ShadowNamedGet);
9990 Local<v8::FunctionTemplate> pt = v8::FunctionTemplate::New(isolate); 9989 t->InstanceTemplate()->SetIndexedPropertyHandler(ShadowIndexedGet);
9991 t->Inherit(pt); 9990 Local<ObjectTemplate> proto = t->PrototypeTemplate();
9992 Local<ObjectTemplate> proto = pt->PrototypeTemplate();
9993 Local<ObjectTemplate> instance = t->InstanceTemplate(); 9991 Local<ObjectTemplate> instance = t->InstanceTemplate();
9994 instance->SetNamedPropertyHandler(ShadowNamedGet);
9995 instance->SetIndexedPropertyHandler(ShadowIndexedGet);
9996 9992
9997 proto->Set(v8_str("f"), 9993 proto->Set(v8_str("f"),
9998 v8::FunctionTemplate::New(isolate, 9994 v8::FunctionTemplate::New(isolate,
9999 ShadowFunctionCallback, 9995 ShadowFunctionCallback,
10000 Local<Value>())); 9996 Local<Value>()));
10001 proto->Set(v8_str("x"), v8_num(12)); 9997 proto->Set(v8_str("x"), v8_num(12));
10002 9998
10003 instance->SetAccessor(v8_str("y"), ShadowYGetter, ShadowYSetter); 9999 instance->SetAccessor(v8_str("y"), ShadowYGetter, ShadowYSetter);
10004 10000
10005 Local<Value> o = t->GetFunction()->NewInstance(); 10001 Local<Value> o = t->GetFunction()->NewInstance();
(...skipping 8526 matching lines...) Expand 10 before | Expand all | Expand 10 after
18532 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject()); 18528 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
18533 if (!name->Equals(v8_str("foo"))) return; 18529 if (!name->Equals(v8_str("foo"))) return;
18534 Local<Object>::Cast(info.This())->Set(v8_str("y"), v8_num(23)); 18530 Local<Object>::Cast(info.This())->Set(v8_str("y"), v8_num(23));
18535 info.GetReturnValue().Set(v8_num(23)); 18531 info.GetReturnValue().Set(v8_num(23));
18536 } 18532 }
18537 18533
18538 18534
18539 TEST(SetterOnConstructorPrototype) { 18535 TEST(SetterOnConstructorPrototype) {
18540 v8::Isolate* isolate = CcTest::isolate(); 18536 v8::Isolate* isolate = CcTest::isolate();
18541 v8::HandleScope scope(isolate); 18537 v8::HandleScope scope(isolate);
18542 Local<FunctionTemplate> templ = FunctionTemplate::New(isolate); 18538 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
18543 templ->SetHiddenPrototype(true); 18539 templ->SetAccessor(v8_str("x"), GetterWhichReturns42,
18544 templ->InstanceTemplate()->SetAccessor(v8_str("x"), GetterWhichReturns42, 18540 SetterWhichSetsYOnThisTo23);
18545 SetterWhichSetsYOnThisTo23);
18546 LocalContext context; 18541 LocalContext context;
18547 context->Global()->Set(v8_str("P"), templ->InstanceTemplate()->NewInstance()); 18542 context->Global()->Set(v8_str("P"), templ->NewInstance());
18548 CompileRun("function C1() {" 18543 CompileRun("function C1() {"
18549 " this.x = 23;" 18544 " this.x = 23;"
18550 "};" 18545 "};"
18551 "C1.prototype = P;" 18546 "C1.prototype = P;"
18552 "function C2() {" 18547 "function C2() {"
18553 " this.x = 23" 18548 " this.x = 23"
18554 "};" 18549 "};"
18555 "C2.prototype = { };" 18550 "C2.prototype = { };"
18556 "C2.prototype.__proto__ = P;"); 18551 "C2.prototype.__proto__ = P;");
18557 18552
18558 v8::Local<v8::Script> script; 18553 v8::Local<v8::Script> script;
18559 script = v8_compile("new C1();"); 18554 script = v8_compile("new C1();");
18560 for (int i = 0; i < 10; i++) { 18555 for (int i = 0; i < 10; i++) {
18561 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); 18556 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run());
18562 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); 18557 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value());
18563 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); 18558 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value());
18564 } 18559 }
18565 18560
18566 script = v8_compile("new C2();"); 18561 script = v8_compile("new C2();");
18567 for (int i = 0; i < 10; i++) { 18562 for (int i = 0; i < 10; i++) {
18568 v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run()); 18563 v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run());
18569 CHECK_EQ(23, c2->Get(v8_str("x"))->Int32Value()); 18564 CHECK_EQ(42, c2->Get(v8_str("x"))->Int32Value());
18565 CHECK_EQ(23, c2->Get(v8_str("y"))->Int32Value());
18570 } 18566 }
18571 } 18567 }
18572 18568
18573 18569
18574 static void NamedPropertyGetterWhichReturns42( 18570 static void NamedPropertyGetterWhichReturns42(
18575 Local<String> name, 18571 Local<String> name,
18576 const v8::PropertyCallbackInfo<v8::Value>& info) { 18572 const v8::PropertyCallbackInfo<v8::Value>& info) {
18577 info.GetReturnValue().Set(v8_num(42)); 18573 info.GetReturnValue().Set(v8_num(42));
18578 } 18574 }
18579 18575
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
18645 script = v8_compile("new C1();"); 18641 script = v8_compile("new C1();");
18646 // Allow enough iterations for the inobject slack tracking logic 18642 // Allow enough iterations for the inobject slack tracking logic
18647 // to finalize instance size and install the fast construct stub. 18643 // to finalize instance size and install the fast construct stub.
18648 for (int i = 0; i < 256; i++) { 18644 for (int i = 0; i < 256; i++) {
18649 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); 18645 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run());
18650 CHECK_EQ(23, c1->Get(v8_str("x"))->Int32Value()); 18646 CHECK_EQ(23, c1->Get(v8_str("x"))->Int32Value());
18651 CHECK_EQ(42, c1->Get(v8_str("y"))->Int32Value()); 18647 CHECK_EQ(42, c1->Get(v8_str("y"))->Int32Value());
18652 } 18648 }
18653 18649
18654 // Use an API object with accessors as prototype. 18650 // Use an API object with accessors as prototype.
18655 Local<FunctionTemplate> templ = FunctionTemplate::New(isolate); 18651 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
18656 templ->SetHiddenPrototype(true); 18652 templ->SetAccessor(v8_str("x"), GetterWhichReturns42,
18657 templ->InstanceTemplate()->SetAccessor(v8_str("x"), GetterWhichReturns42, 18653 SetterWhichSetsYOnThisTo23);
18658 SetterWhichSetsYOnThisTo23); 18654 context->Global()->Set(v8_str("P"), templ->NewInstance());
18659 context->Global()->Set(v8_str("P"), templ->InstanceTemplate()->NewInstance());
18660 18655
18661 // This compile will get the code from the compilation cache. 18656 // This compile will get the code from the compilation cache.
18662 CompileRun(source); 18657 CompileRun(source);
18663 18658
18664 script = v8_compile("new C1();"); 18659 script = v8_compile("new C1();");
18665 for (int i = 0; i < 10; i++) { 18660 for (int i = 0; i < 10; i++) {
18666 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); 18661 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run());
18667 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); 18662 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value());
18668 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); 18663 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value());
18669 } 18664 }
(...skipping 2394 matching lines...) Expand 10 before | Expand all | Expand 10 after
21064 static void InstanceCheckedSetter(Local<String> name, 21059 static void InstanceCheckedSetter(Local<String> name,
21065 Local<Value> value, 21060 Local<Value> value,
21066 const v8::PropertyCallbackInfo<void>& info) { 21061 const v8::PropertyCallbackInfo<void>& info) {
21067 CHECK_EQ(name, v8_str("foo")); 21062 CHECK_EQ(name, v8_str("foo"));
21068 CHECK_EQ(value, v8_num(23)); 21063 CHECK_EQ(value, v8_num(23));
21069 instance_checked_setter_count++; 21064 instance_checked_setter_count++;
21070 } 21065 }
21071 21066
21072 21067
21073 static void CheckInstanceCheckedResult(int getters, int setters, 21068 static void CheckInstanceCheckedResult(int getters, int setters,
21074 bool expects_callbacks, bool is_setter, 21069 bool expects_callbacks,
21075 TryCatch* try_catch) { 21070 TryCatch* try_catch) {
21076 if (expects_callbacks) { 21071 if (expects_callbacks) {
21077 CHECK(!try_catch->HasCaught()); 21072 CHECK(!try_catch->HasCaught());
21078 CHECK_EQ(getters, instance_checked_getter_count); 21073 CHECK_EQ(getters, instance_checked_getter_count);
21079 CHECK_EQ(setters, instance_checked_setter_count); 21074 CHECK_EQ(setters, instance_checked_setter_count);
21080 } else { 21075 } else {
21081 CHECK((is_setter && !try_catch->HasCaught()) || 21076 CHECK(try_catch->HasCaught());
21082 (!is_setter && try_catch->HasCaught()));
21083 CHECK_EQ(0, instance_checked_getter_count); 21077 CHECK_EQ(0, instance_checked_getter_count);
21084 CHECK_EQ(0, instance_checked_setter_count); 21078 CHECK_EQ(0, instance_checked_setter_count);
21085 } 21079 }
21086 try_catch->Reset(); 21080 try_catch->Reset();
21087 } 21081 }
21088 21082
21089 21083
21090 static void CheckInstanceCheckedAccessors(bool expects_callbacks) { 21084 static void CheckInstanceCheckedAccessors(bool expects_callbacks) {
21091 instance_checked_getter_count = 0; 21085 instance_checked_getter_count = 0;
21092 instance_checked_setter_count = 0; 21086 instance_checked_setter_count = 0;
21093 TryCatch try_catch; 21087 TryCatch try_catch;
21094 21088
21095 // Test path through generic runtime code. 21089 // Test path through generic runtime code.
21096 CompileRun("obj.foo"); 21090 CompileRun("obj.foo");
21097 CheckInstanceCheckedResult(1, 0, expects_callbacks, false, &try_catch); 21091 CheckInstanceCheckedResult(1, 0, expects_callbacks, &try_catch);
21098 CompileRun("obj.foo = 23"); 21092 CompileRun("obj.foo = 23");
21099 CheckInstanceCheckedResult(1, 1, expects_callbacks, true, &try_catch); 21093 CheckInstanceCheckedResult(1, 1, expects_callbacks, &try_catch);
21100 if (!expects_callbacks) CompileRun("delete obj.foo");
21101 21094
21102 // Test path through generated LoadIC and StoredIC. 21095 // Test path through generated LoadIC and StoredIC.
21103 CompileRun("function test_get(o) { o.foo; }" 21096 CompileRun("function test_get(o) { o.foo; }"
21104 "test_get(obj);"); 21097 "test_get(obj);");
21105 CheckInstanceCheckedResult(2, 1, expects_callbacks, false, &try_catch); 21098 CheckInstanceCheckedResult(2, 1, expects_callbacks, &try_catch);
21106 CompileRun("test_get(obj);"); 21099 CompileRun("test_get(obj);");
21107 CheckInstanceCheckedResult(3, 1, expects_callbacks, false, &try_catch); 21100 CheckInstanceCheckedResult(3, 1, expects_callbacks, &try_catch);
21108 CompileRun("test_get(obj);"); 21101 CompileRun("test_get(obj);");
21109 CheckInstanceCheckedResult(4, 1, expects_callbacks, false, &try_catch); 21102 CheckInstanceCheckedResult(4, 1, expects_callbacks, &try_catch);
21110 CompileRun("function test_set(o) { o.foo = 23; }" 21103 CompileRun("function test_set(o) { o.foo = 23; }"
21111 "test_set(obj);"); 21104 "test_set(obj);");
21112 CheckInstanceCheckedResult(4, 2, expects_callbacks, true, &try_catch); 21105 CheckInstanceCheckedResult(4, 2, expects_callbacks, &try_catch);
21113 if (!expects_callbacks) CompileRun("delete obj.foo");
21114 CompileRun("test_set(obj);"); 21106 CompileRun("test_set(obj);");
21115 CheckInstanceCheckedResult(4, 3, expects_callbacks, true, &try_catch); 21107 CheckInstanceCheckedResult(4, 3, expects_callbacks, &try_catch);
21116 if (!expects_callbacks) CompileRun("delete obj.foo");
21117 CompileRun("test_set(obj);"); 21108 CompileRun("test_set(obj);");
21118 CheckInstanceCheckedResult(4, 4, expects_callbacks, true, &try_catch); 21109 CheckInstanceCheckedResult(4, 4, expects_callbacks, &try_catch);
21119 if (!expects_callbacks) CompileRun("delete obj.foo");
21120 21110
21121 // Test path through optimized code. 21111 // Test path through optimized code.
21122 CompileRun("%OptimizeFunctionOnNextCall(test_get);" 21112 CompileRun("%OptimizeFunctionOnNextCall(test_get);"
21123 "test_get(obj);"); 21113 "test_get(obj);");
21124 CheckInstanceCheckedResult(5, 4, expects_callbacks, false, &try_catch); 21114 CheckInstanceCheckedResult(5, 4, expects_callbacks, &try_catch);
21125 CompileRun("%OptimizeFunctionOnNextCall(test_set);" 21115 CompileRun("%OptimizeFunctionOnNextCall(test_set);"
21126 "test_set(obj);"); 21116 "test_set(obj);");
21127 if (!expects_callbacks) CompileRun("delete obj.foo"); 21117 CheckInstanceCheckedResult(5, 5, expects_callbacks, &try_catch);
21128 CheckInstanceCheckedResult(5, 5, expects_callbacks, true, &try_catch);
21129 21118
21130 // Cleanup so that closures start out fresh in next check. 21119 // Cleanup so that closures start out fresh in next check.
21131 CompileRun("%DeoptimizeFunction(test_get);" 21120 CompileRun("%DeoptimizeFunction(test_get);"
21132 "%ClearFunctionTypeFeedback(test_get);" 21121 "%ClearFunctionTypeFeedback(test_get);"
21133 "%DeoptimizeFunction(test_set);" 21122 "%DeoptimizeFunction(test_set);"
21134 "%ClearFunctionTypeFeedback(test_set);"); 21123 "%ClearFunctionTypeFeedback(test_set);");
21135 } 21124 }
21136 21125
21137 21126
21138 THREADED_TEST(InstanceCheckOnInstanceAccessor) { 21127 THREADED_TEST(InstanceCheckOnInstanceAccessor) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
21190 CHECK(!templ->HasInstance(context->Global()->Get(v8_str("obj")))); 21179 CHECK(!templ->HasInstance(context->Global()->Get(v8_str("obj"))));
21191 CheckInstanceCheckedAccessors(false); 21180 CheckInstanceCheckedAccessors(false);
21192 } 21181 }
21193 21182
21194 21183
21195 THREADED_TEST(InstanceCheckOnPrototypeAccessor) { 21184 THREADED_TEST(InstanceCheckOnPrototypeAccessor) {
21196 v8::internal::FLAG_allow_natives_syntax = true; 21185 v8::internal::FLAG_allow_natives_syntax = true;
21197 LocalContext context; 21186 LocalContext context;
21198 v8::HandleScope scope(context->GetIsolate()); 21187 v8::HandleScope scope(context->GetIsolate());
21199 21188
21200 Local<FunctionTemplate> proto_templ =
21201 FunctionTemplate::New(context->GetIsolate());
21202 proto_templ->SetHiddenPrototype(true);
21203 Local<ObjectTemplate> proto = proto_templ->InstanceTemplate();
21204 proto->SetAccessor(
21205 v8_str("foo"), InstanceCheckedGetter, InstanceCheckedSetter,
21206 Handle<Value>(), v8::DEFAULT, v8::None,
21207 v8::AccessorSignature::New(context->GetIsolate(), proto_templ));
21208 Local<FunctionTemplate> templ = FunctionTemplate::New(context->GetIsolate()); 21189 Local<FunctionTemplate> templ = FunctionTemplate::New(context->GetIsolate());
21209 templ->Inherit(proto_templ); 21190 Local<ObjectTemplate> proto = templ->PrototypeTemplate();
21191 proto->SetAccessor(v8_str("foo"), InstanceCheckedGetter,
21192 InstanceCheckedSetter, Handle<Value>(), v8::DEFAULT,
21193 v8::None,
21194 v8::AccessorSignature::New(context->GetIsolate(), templ));
21210 context->Global()->Set(v8_str("f"), templ->GetFunction()); 21195 context->Global()->Set(v8_str("f"), templ->GetFunction());
21211 21196
21212 printf("Testing positive ...\n"); 21197 printf("Testing positive ...\n");
21213 CompileRun("var obj = new f();"); 21198 CompileRun("var obj = new f();");
21214 CHECK(templ->HasInstance(context->Global()->Get(v8_str("obj")))); 21199 CHECK(templ->HasInstance(context->Global()->Get(v8_str("obj"))));
21215 CheckInstanceCheckedAccessors(true); 21200 CheckInstanceCheckedAccessors(true);
21216 21201
21217 printf("Testing negative ...\n"); 21202 printf("Testing negative ...\n");
21218 CompileRun("var obj = {};" 21203 CompileRun("var obj = {};"
21219 "obj.__proto__ = new f();"); 21204 "obj.__proto__ = new f();");
(...skipping 1684 matching lines...) Expand 10 before | Expand all | Expand 10 after
22904 desc = x->GetOwnPropertyDescriptor(v8_str("p1")); 22889 desc = x->GetOwnPropertyDescriptor(v8_str("p1"));
22905 Local<Function> set = 22890 Local<Function> set =
22906 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("set"))); 22891 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("set")));
22907 Local<Function> get = 22892 Local<Function> get =
22908 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("get"))); 22893 Local<Function>::Cast(Local<Object>::Cast(desc)->Get(v8_str("get")));
22909 CHECK_EQ(v8_num(13), get->Call(x, 0, NULL)); 22894 CHECK_EQ(v8_num(13), get->Call(x, 0, NULL));
22910 Handle<Value> args[] = { v8_num(14) }; 22895 Handle<Value> args[] = { v8_num(14) };
22911 set->Call(x, 1, args); 22896 set->Call(x, 1, args);
22912 CHECK_EQ(v8_num(14), get->Call(x, 0, NULL)); 22897 CHECK_EQ(v8_num(14), get->Call(x, 0, NULL));
22913 } 22898 }
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | test/mjsunit/es7/object-observe.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698