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

Unified Diff: test/cctest/test-api.cc

Issue 23699002: load ics for js api accessors (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/cctest/test-accessors.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index c0afb6d4d44ceca2fda95abe98e228160f45d708..e190b711b9b9eccbec3dcc7365263fd6b4b59e9e 100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -141,10 +141,13 @@ static void ExpectUndefined(const char* code) {
static int signature_callback_count;
+static Local<Value> signature_expected_receiver;
static void IncrementingSignatureCallback(
const v8::FunctionCallbackInfo<v8::Value>& args) {
ApiTestFuzzer::Fuzz();
signature_callback_count++;
+ CHECK_EQ(signature_expected_receiver, args.Holder());
+ CHECK_EQ(signature_expected_receiver, args.This());
v8::Handle<v8::Array> result = v8::Array::New(args.Length());
for (int i = 0; i < args.Length(); i++)
result->Set(v8::Integer::New(i), args[i]);
@@ -213,26 +216,50 @@ THREADED_TEST(ReceiverSignature) {
v8::FunctionTemplate::New(IncrementingSignatureCallback,
v8::Handle<Value>(),
sig));
+ fun->PrototypeTemplate()->SetAccessorProperty(
+ v8_str("n"),
+ v8::FunctionTemplate::New(IncrementingSignatureCallback,
+ v8::Handle<Value>(),
+ sig));
env->Global()->Set(v8_str("Fun"), fun->GetFunction());
+ Local<Value> fun_instance = fun->InstanceTemplate()->NewInstance();
+ env->Global()->Set(v8_str("fun_instance"), fun_instance);
signature_callback_count = 0;
+ int expected_count = 0;
+ signature_expected_receiver = fun_instance;
CompileRun(
- "var o = new Fun();"
- "o.m();");
- CHECK_EQ(1, signature_callback_count);
+ "var o = fun_instance;"
+ "var key_n = 'n';"
+ "for (var i = 0; i < 10; i++) o.m();"
+ "for (var i = 0; i < 10; i++) o.n;"
+ "for (var i = 0; i < 10; i++) o[key_n];");
+ expected_count += 30;
+ CHECK_EQ(expected_count, signature_callback_count);
v8::Handle<v8::FunctionTemplate> sub_fun = v8::FunctionTemplate::New();
sub_fun->Inherit(fun);
- env->Global()->Set(v8_str("SubFun"), sub_fun->GetFunction());
+ fun_instance = sub_fun->InstanceTemplate()->NewInstance();
+ env->Global()->Set(v8_str("fun_instance"), fun_instance);
+ signature_expected_receiver = fun_instance;
CompileRun(
- "var o = new SubFun();"
- "o.m();");
- CHECK_EQ(2, signature_callback_count);
-
+ "var o = fun_instance;"
+ "var key_n = 'n';"
+ "for (var i = 0; i < 10; i++) o.m();"
+ "for (var i = 0; i < 10; i++) o.n;"
+ "for (var i = 0; i < 10; i++) o[key_n];");
+ expected_count += 30;
+ CHECK_EQ(expected_count, signature_callback_count);
v8::TryCatch try_catch;
CompileRun(
"var o = { };"
"o.m = Fun.prototype.m;"
"o.m();");
- CHECK_EQ(2, signature_callback_count);
+ CHECK_EQ(expected_count, signature_callback_count);
+ CHECK(try_catch.HasCaught());
+ CompileRun(
+ "var o = { };"
+ "o.n = Fun.prototype.n;"
+ "o.n;");
+ CHECK_EQ(expected_count, signature_callback_count);
CHECK(try_catch.HasCaught());
try_catch.Reset();
v8::Handle<v8::FunctionTemplate> unrel_fun = v8::FunctionTemplate::New();
@@ -242,7 +269,14 @@ THREADED_TEST(ReceiverSignature) {
"var o = new UnrelFun();"
"o.m = Fun.prototype.m;"
"o.m();");
- CHECK_EQ(2, signature_callback_count);
+ CHECK_EQ(expected_count, signature_callback_count);
+ CHECK(try_catch.HasCaught());
+ try_catch.Reset();
+ CompileRun(
+ "var o = new UnrelFun();"
+ "o.n = Fun.prototype.n;"
+ "o.n;");
+ CHECK_EQ(expected_count, signature_callback_count);
CHECK(try_catch.HasCaught());
}
« no previous file with comments | « test/cctest/test-accessors.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698