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

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

Issue 2646363003: [turbofan] Add fast path for cached property names. (Closed)
Patch Set: Test from jochen. Created 3 years, 11 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/cctest.status ('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-accessors.cc
diff --git a/test/cctest/test-api-accessors.cc b/test/cctest/test-api-accessors.cc
index cc0c7efb5ff2985106e5f7462f8c4259a1825b06..921f54d466a53d610f28c9d27282dc2e3b970549 100644
--- a/test/cctest/test-api-accessors.cc
+++ b/test/cctest/test-api-accessors.cc
@@ -249,6 +249,89 @@ TEST(CachedAccessorCrankshaft) {
ExpectInt32("g()", 789);
}
+TEST(CachedAccessorOnGlobalObject) {
+ i::FLAG_allow_natives_syntax = true;
+ LocalContext env;
+ v8::Isolate* isolate = env->GetIsolate();
+ v8::HandleScope scope(isolate);
+
+ v8::Local<v8::FunctionTemplate> templ =
+ v8::FunctionTemplate::New(CcTest::isolate());
+ v8::Local<v8::ObjectTemplate> object_template = templ->InstanceTemplate();
+ v8::Local<v8::Private> priv =
+ v8::Private::ForApi(isolate, v8_str("Foo#draft"));
+
+ object_template->SetAccessorProperty(
+ v8_str("draft"),
+ v8::FunctionTemplate::NewWithCache(isolate, UnreachableCallback, priv,
+ v8::Local<v8::Value>()));
+
+ v8::Local<v8::Context> ctx =
+ v8::Context::New(CcTest::isolate(), nullptr, object_template);
+ v8::Local<v8::Object> obj = ctx->Global();
+
+ // Install the private property on the instance.
+ CHECK(obj->SetPrivate(isolate->GetCurrentContext(), priv,
+ v8::Undefined(isolate))
+ .FromJust());
+
+ {
+ v8::Context::Scope context_scope(ctx);
+
+ // Access surrogate accessor.
+ ExpectUndefined("draft");
+
+ // Set hidden property.
+ CHECK(obj->SetPrivate(env.local(), priv, v8::Integer::New(isolate, 123))
+ .FromJust());
+
+ // Test ICs.
+ CompileRun(
+ "function f() {"
+ " var x;"
+ " for (var i = 0; i < 100; i++) {"
+ " x = draft;"
+ " }"
+ " return x;"
+ "}");
+
+ ExpectInt32("f()", 123);
+
+ // Reset hidden property.
+ CHECK(obj->SetPrivate(env.local(), priv, v8::Integer::New(isolate, 456))
+ .FromJust());
+
+ // Test Crankshaft.
+ CompileRun("%OptimizeFunctionOnNextCall(f);");
+
+ ExpectInt32("f()", 456);
+
+ CHECK(obj->SetPrivate(env.local(), priv, v8::Integer::New(isolate, 456))
+ .FromJust());
+ // Test non-global ICs.
+ CompileRun(
+ "var x = this;"
+ "function g() {"
+ " var r = 0;"
+ " for (var i = 0; i < 100; i++) {"
+ " r = x.draft;"
+ " }"
+ " return r;"
+ "}");
+
+ ExpectInt32("g()", 456);
+
+ // Reset hidden property.
+ CHECK(obj->SetPrivate(env.local(), priv, v8::Integer::New(isolate, 789))
+ .FromJust());
+
+ // Test non-global access in Crankshaft.
+ CompileRun("%OptimizeFunctionOnNextCall(g);");
+
+ ExpectInt32("g()", 789);
+ }
+}
+
namespace {
static void Setter(v8::Local<v8::String> name, v8::Local<v8::Value> value,
« no previous file with comments | « test/cctest/cctest.status ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698