| Index: test/cctest/test-api.cc
|
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
|
| index a51d3012a5a8f3c1929d122f9288bb95d2236e2c..0f33dedfcfa51bcc11f64a029cb1305e8a080967 100644
|
| --- a/test/cctest/test-api.cc
|
| +++ b/test/cctest/test-api.cc
|
| @@ -8063,12 +8063,8 @@ THREADED_TEST(ShadowObject) {
|
| Local<ObjectTemplate> proto = t->PrototypeTemplate();
|
| Local<ObjectTemplate> instance = t->InstanceTemplate();
|
|
|
| - // Only allow calls of f on instances of t.
|
| - Local<v8::Signature> signature = v8::Signature::New(t);
|
| proto->Set(v8_str("f"),
|
| - v8::FunctionTemplate::New(ShadowFunctionCallback,
|
| - Local<Value>(),
|
| - signature));
|
| + v8::FunctionTemplate::New(ShadowFunctionCallback, Local<Value>()));
|
| proto->Set(v8_str("x"), v8_num(12));
|
|
|
| instance->SetAccessor(v8_str("y"), ShadowYGetter, ShadowYSetter);
|
| @@ -9933,6 +9929,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate();
|
| templ->SetNamedPropertyHandler(InterceptorCallICFastApi,
|
| NULL, NULL, NULL, NULL,
|
| @@ -9963,6 +9960,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate();
|
| templ->SetNamedPropertyHandler(InterceptorCallICFastApi,
|
| NULL, NULL, NULL, NULL,
|
| @@ -9999,6 +9997,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate();
|
| templ->SetNamedPropertyHandler(InterceptorCallICFastApi,
|
| NULL, NULL, NULL, NULL,
|
| @@ -10035,6 +10034,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate();
|
| templ->SetNamedPropertyHandler(InterceptorCallICFastApi,
|
| NULL, NULL, NULL, NULL,
|
| @@ -10074,6 +10074,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate();
|
| templ->SetNamedPropertyHandler(InterceptorCallICFastApi,
|
| NULL, NULL, NULL, NULL,
|
| @@ -10136,6 +10137,7 @@ THREADED_TEST(CallICFastApi_SimpleSignature) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate());
|
| CHECK(!templ.IsEmpty());
|
| LocalContext context;
|
| @@ -10163,6 +10165,7 @@ THREADED_TEST(CallICFastApi_SimpleSignature_Miss1) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate());
|
| CHECK(!templ.IsEmpty());
|
| LocalContext context;
|
| @@ -10195,6 +10198,7 @@ THREADED_TEST(CallICFastApi_SimpleSignature_Miss2) {
|
| v8::Signature::New(fun_templ));
|
| v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate());
|
| CHECK(!templ.IsEmpty());
|
| LocalContext context;
|
| @@ -10221,6 +10225,42 @@ THREADED_TEST(CallICFastApi_SimpleSignature_Miss2) {
|
| CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value());
|
| }
|
|
|
| +THREADED_TEST(CallICFastApi_SimpleSignature_TypeError) {
|
| + v8::HandleScope scope;
|
| + v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
|
| + v8::Handle<v8::FunctionTemplate> method_templ =
|
| + v8::FunctionTemplate::New(FastApiCallback_SimpleSignature,
|
| + v8_str("method_data"),
|
| + v8::Signature::New(fun_templ));
|
| + v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
|
| + proto_templ->Set(v8_str("method"), method_templ);
|
| + fun_templ->SetHiddenPrototype(true);
|
| + v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate());
|
| + CHECK(!templ.IsEmpty());
|
| + LocalContext context;
|
| + v8::Handle<v8::Function> fun = fun_templ->GetFunction();
|
| + GenerateSomeGarbage();
|
| + context->Global()->Set(v8_str("o"), fun->NewInstance());
|
| + v8::TryCatch try_catch;
|
| + CompileRun(
|
| + "o.foo = 17;"
|
| + "var receiver = {};"
|
| + "receiver.__proto__ = o;"
|
| + "var result = 0;"
|
| + "var saved_result = 0;"
|
| + "for (var i = 0; i < 100; i++) {"
|
| + " result = receiver.method(41);"
|
| + " if (i == 50) {"
|
| + " saved_result = result;"
|
| + " receiver = Object.create(receiver);"
|
| + " }"
|
| + "}");
|
| + CHECK(try_catch.HasCaught());
|
| + CHECK_EQ(v8_str("TypeError: Illegal invocation"),
|
| + try_catch.Exception()->ToString());
|
| + CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value());
|
| +}
|
| +
|
|
|
| v8::Handle<Value> keyed_call_ic_function;
|
|
|
|
|