| Index: test/cctest/test-api.cc
|
| ===================================================================
|
| --- test/cctest/test-api.cc (revision 2106)
|
| +++ test/cctest/test-api.cc (working copy)
|
| @@ -4827,23 +4827,6 @@
|
| }
|
|
|
|
|
| -typedef v8::Handle<Value> (*NamedPropertyGetter)(Local<String> property,
|
| - const AccessorInfo& info);
|
| -
|
| -
|
| -static void CheckInterceptorLoadIC(NamedPropertyGetter getter,
|
| - const char* source,
|
| - int expected) {
|
| - v8::HandleScope scope;
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New();
|
| - templ->SetNamedPropertyHandler(getter);
|
| - LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(source);
|
| - CHECK_EQ(expected, value->Int32Value());
|
| -}
|
| -
|
| -
|
| static v8::Handle<Value> InterceptorLoadICGetter(Local<String> name,
|
| const AccessorInfo& info) {
|
| ApiTestFuzzer::Fuzz();
|
| @@ -4854,103 +4837,20 @@
|
|
|
| // This test should hit the load IC for the interceptor case.
|
| THREADED_TEST(InterceptorLoadIC) {
|
| - CheckInterceptorLoadIC(InterceptorLoadICGetter,
|
| + v8::HandleScope scope;
|
| + v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New();
|
| + templ->SetNamedPropertyHandler(InterceptorLoadICGetter);
|
| + LocalContext context;
|
| + context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| + v8::Handle<Value> value = CompileRun(
|
| "var result = 0;"
|
| "for (var i = 0; i < 1000; i++) {"
|
| " result = o.x;"
|
| - "}",
|
| - 42);
|
| + "}");
|
| + CHECK_EQ(42, value->Int32Value());
|
| }
|
|
|
|
|
| -// Below go several tests which verify that JITing for various
|
| -// configurations of interceptor and explicit fields works fine
|
| -// (those cases are special cased to get better performance).
|
| -
|
| -static v8::Handle<Value> InterceptorLoadXICGetter(Local<String> name,
|
| - const AccessorInfo& info) {
|
| - ApiTestFuzzer::Fuzz();
|
| - return v8_str("x")->Equals(name)
|
| - ? v8::Integer::New(42) : v8::Handle<v8::Value>();
|
| -}
|
| -
|
| -
|
| -THREADED_TEST(InterceptorLoadICWithFieldOnHolder) {
|
| - CheckInterceptorLoadIC(InterceptorLoadXICGetter,
|
| - "var result = 0;"
|
| - "o.y = 239;"
|
| - "for (var i = 0; i < 1000; i++) {"
|
| - " result = o.y;"
|
| - "}",
|
| - 239);
|
| -}
|
| -
|
| -
|
| -THREADED_TEST(InterceptorLoadICWithSubstitutedProto) {
|
| - CheckInterceptorLoadIC(InterceptorLoadXICGetter,
|
| - "var result = 0;"
|
| - "o.__proto__ = { 'y': 239 };"
|
| - "for (var i = 0; i < 1000; i++) {"
|
| - " result = o.y + o.x;"
|
| - "}",
|
| - 239 + 42);
|
| -}
|
| -
|
| -
|
| -THREADED_TEST(InterceptorLoadICWithPropertyOnProto) {
|
| - CheckInterceptorLoadIC(InterceptorLoadXICGetter,
|
| - "var result = 0;"
|
| - "o.__proto__.y = 239;"
|
| - "for (var i = 0; i < 1000; i++) {"
|
| - " result = o.y + o.x;"
|
| - "}",
|
| - 239 + 42);
|
| -}
|
| -
|
| -
|
| -THREADED_TEST(InterceptorLoadICUndefined) {
|
| - CheckInterceptorLoadIC(InterceptorLoadXICGetter,
|
| - "var result = 0;"
|
| - "for (var i = 0; i < 1000; i++) {"
|
| - " result = (o.y == undefined) ? 239 : 42;"
|
| - "}",
|
| - 239);
|
| -}
|
| -
|
| -
|
| -THREADED_TEST(InterceptorLoadICWithOverride) {
|
| - CheckInterceptorLoadIC(InterceptorLoadXICGetter,
|
| - "fst = new Object(); fst.__proto__ = o;"
|
| - "snd = new Object(); snd.__proto__ = fst;"
|
| - "var result1 = 0;"
|
| - "for (var i = 0; i < 1000; i++) {"
|
| - " result1 = snd.x;"
|
| - "}"
|
| - "fst.x = 239;"
|
| - "var result = 0;"
|
| - "for (var i = 0; i < 1000; i++) {"
|
| - " result = snd.x;"
|
| - "}"
|
| - "result + result1",
|
| - 239 + 42);
|
| -}
|
| -
|
| -
|
| -static v8::Handle<Value> InterceptorLoadICGetter0(Local<String> name,
|
| - const AccessorInfo& info) {
|
| - ApiTestFuzzer::Fuzz();
|
| - CHECK(v8_str("x")->Equals(name));
|
| - return v8::Integer::New(0);
|
| -}
|
| -
|
| -
|
| -THREADED_TEST(InterceptorReturningZero) {
|
| - CheckInterceptorLoadIC(InterceptorLoadICGetter0,
|
| - "o.x == undefined ? 1 : 0",
|
| - 0);
|
| -}
|
| -
|
| -
|
| static v8::Handle<Value> InterceptorStoreICSetter(
|
| Local<String> key, Local<Value> value, const AccessorInfo&) {
|
| CHECK(v8_str("x")->Equals(key));
|
|
|