| OLD | NEW |
| 1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 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 6227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6238 } | 6238 } |
| 6239 | 6239 |
| 6240 | 6240 |
| 6241 THREADED_TEST(InterceptorLoadICWithCallbackOnHolder) { | 6241 THREADED_TEST(InterceptorLoadICWithCallbackOnHolder) { |
| 6242 v8::HandleScope scope; | 6242 v8::HandleScope scope; |
| 6243 v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(); | 6243 v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(); |
| 6244 templ->SetNamedPropertyHandler(InterceptorLoadXICGetter); | 6244 templ->SetNamedPropertyHandler(InterceptorLoadXICGetter); |
| 6245 templ->SetAccessor(v8_str("y"), Return239); | 6245 templ->SetAccessor(v8_str("y"), Return239); |
| 6246 LocalContext context; | 6246 LocalContext context; |
| 6247 context->Global()->Set(v8_str("o"), templ->NewInstance()); | 6247 context->Global()->Set(v8_str("o"), templ->NewInstance()); |
| 6248 |
| 6249 // Check the case when receiver and interceptor's holder |
| 6250 // are the same objects. |
| 6248 v8::Handle<Value> value = CompileRun( | 6251 v8::Handle<Value> value = CompileRun( |
| 6249 "var result = 0;" | 6252 "var result = 0;" |
| 6250 "for (var i = 0; i < 7; i++) {" | 6253 "for (var i = 0; i < 7; i++) {" |
| 6251 " result = o.y;" | 6254 " result = o.y;" |
| 6252 "}"); | 6255 "}"); |
| 6253 CHECK_EQ(239, value->Int32Value()); | 6256 CHECK_EQ(239, value->Int32Value()); |
| 6257 |
| 6258 // Check the case when interceptor's holder is in proto chain |
| 6259 // of receiver. |
| 6260 value = CompileRun( |
| 6261 "r = { __proto__: o };" |
| 6262 "var result = 0;" |
| 6263 "for (var i = 0; i < 7; i++) {" |
| 6264 " result = r.y;" |
| 6265 "}"); |
| 6266 CHECK_EQ(239, value->Int32Value()); |
| 6254 } | 6267 } |
| 6255 | 6268 |
| 6256 | 6269 |
| 6257 THREADED_TEST(InterceptorLoadICWithCallbackOnProto) { | 6270 THREADED_TEST(InterceptorLoadICWithCallbackOnProto) { |
| 6258 v8::HandleScope scope; | 6271 v8::HandleScope scope; |
| 6259 v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(); | 6272 v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(); |
| 6260 templ_o->SetNamedPropertyHandler(InterceptorLoadXICGetter); | 6273 templ_o->SetNamedPropertyHandler(InterceptorLoadXICGetter); |
| 6261 v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New(); | 6274 v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New(); |
| 6262 templ_p->SetAccessor(v8_str("y"), Return239); | 6275 templ_p->SetAccessor(v8_str("y"), Return239); |
| 6263 | 6276 |
| 6264 LocalContext context; | 6277 LocalContext context; |
| 6265 context->Global()->Set(v8_str("o"), templ_o->NewInstance()); | 6278 context->Global()->Set(v8_str("o"), templ_o->NewInstance()); |
| 6266 context->Global()->Set(v8_str("p"), templ_p->NewInstance()); | 6279 context->Global()->Set(v8_str("p"), templ_p->NewInstance()); |
| 6267 | 6280 |
| 6281 // Check the case when receiver and interceptor's holder |
| 6282 // are the same objects. |
| 6268 v8::Handle<Value> value = CompileRun( | 6283 v8::Handle<Value> value = CompileRun( |
| 6269 "o.__proto__ = p;" | 6284 "o.__proto__ = p;" |
| 6270 "var result = 0;" | 6285 "var result = 0;" |
| 6271 "for (var i = 0; i < 7; i++) {" | 6286 "for (var i = 0; i < 7; i++) {" |
| 6272 " result = o.x + o.y;" | 6287 " result = o.x + o.y;" |
| 6273 "}"); | 6288 "}"); |
| 6274 CHECK_EQ(239 + 42, value->Int32Value()); | 6289 CHECK_EQ(239 + 42, value->Int32Value()); |
| 6290 |
| 6291 // Check the case when interceptor's holder is in proto chain |
| 6292 // of receiver. |
| 6293 value = CompileRun( |
| 6294 "r = { __proto__: o };" |
| 6295 "var result = 0;" |
| 6296 "for (var i = 0; i < 7; i++) {" |
| 6297 " result = r.x + r.y;" |
| 6298 "}"); |
| 6299 CHECK_EQ(239 + 42, value->Int32Value()); |
| 6275 } | 6300 } |
| 6276 | 6301 |
| 6277 | 6302 |
| 6278 THREADED_TEST(InterceptorLoadICForCallbackWithOverride) { | 6303 THREADED_TEST(InterceptorLoadICForCallbackWithOverride) { |
| 6279 v8::HandleScope scope; | 6304 v8::HandleScope scope; |
| 6280 v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(); | 6305 v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(); |
| 6281 templ->SetNamedPropertyHandler(InterceptorLoadXICGetter); | 6306 templ->SetNamedPropertyHandler(InterceptorLoadXICGetter); |
| 6282 templ->SetAccessor(v8_str("y"), Return239); | 6307 templ->SetAccessor(v8_str("y"), Return239); |
| 6283 | 6308 |
| 6284 LocalContext context; | 6309 LocalContext context; |
| (...skipping 4297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10582 const char* code = | 10607 const char* code = |
| 10583 "(function() {" | 10608 "(function() {" |
| 10584 " for (var i = 0; i < 2*16; i++) {" | 10609 " for (var i = 0; i < 2*16; i++) {" |
| 10585 " %_GetFromCache(0, 'a' + i);" | 10610 " %_GetFromCache(0, 'a' + i);" |
| 10586 " };" | 10611 " };" |
| 10587 " return 'PASSED';" | 10612 " return 'PASSED';" |
| 10588 "})()"; | 10613 "})()"; |
| 10589 v8::internal::Heap::ClearJSFunctionResultCaches(); | 10614 v8::internal::Heap::ClearJSFunctionResultCaches(); |
| 10590 ExpectString(code, "PASSED"); | 10615 ExpectString(code, "PASSED"); |
| 10591 } | 10616 } |
| OLD | NEW |