OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 8045 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8056 | 8056 |
8057 Local<ObjectTemplate> global_template = v8::ObjectTemplate::New(); | 8057 Local<ObjectTemplate> global_template = v8::ObjectTemplate::New(); |
8058 LocalContext context(NULL, global_template); | 8058 LocalContext context(NULL, global_template); |
8059 | 8059 |
8060 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(); | 8060 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(); |
8061 t->InstanceTemplate()->SetNamedPropertyHandler(ShadowNamedGet); | 8061 t->InstanceTemplate()->SetNamedPropertyHandler(ShadowNamedGet); |
8062 t->InstanceTemplate()->SetIndexedPropertyHandler(ShadowIndexedGet); | 8062 t->InstanceTemplate()->SetIndexedPropertyHandler(ShadowIndexedGet); |
8063 Local<ObjectTemplate> proto = t->PrototypeTemplate(); | 8063 Local<ObjectTemplate> proto = t->PrototypeTemplate(); |
8064 Local<ObjectTemplate> instance = t->InstanceTemplate(); | 8064 Local<ObjectTemplate> instance = t->InstanceTemplate(); |
8065 | 8065 |
8066 // Only allow calls of f on instances of t. | |
8067 Local<v8::Signature> signature = v8::Signature::New(t); | |
8068 proto->Set(v8_str("f"), | 8066 proto->Set(v8_str("f"), |
8069 v8::FunctionTemplate::New(ShadowFunctionCallback, | 8067 v8::FunctionTemplate::New(ShadowFunctionCallback, Local<Value>())); |
8070 Local<Value>(), | |
8071 signature)); | |
8072 proto->Set(v8_str("x"), v8_num(12)); | 8068 proto->Set(v8_str("x"), v8_num(12)); |
8073 | 8069 |
8074 instance->SetAccessor(v8_str("y"), ShadowYGetter, ShadowYSetter); | 8070 instance->SetAccessor(v8_str("y"), ShadowYGetter, ShadowYSetter); |
8075 | 8071 |
8076 Local<Value> o = t->GetFunction()->NewInstance(); | 8072 Local<Value> o = t->GetFunction()->NewInstance(); |
8077 context->Global()->Set(v8_str("__proto__"), o); | 8073 context->Global()->Set(v8_str("__proto__"), o); |
8078 | 8074 |
8079 Local<Value> value = | 8075 Local<Value> value = |
8080 Script::Compile(v8_str("this.propertyIsEnumerable(0)"))->Run(); | 8076 Script::Compile(v8_str("this.propertyIsEnumerable(0)"))->Run(); |
8081 CHECK(value->IsBoolean()); | 8077 CHECK(value->IsBoolean()); |
(...skipping 1844 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9926 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature) { | 9922 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature) { |
9927 int interceptor_call_count = 0; | 9923 int interceptor_call_count = 0; |
9928 v8::HandleScope scope; | 9924 v8::HandleScope scope; |
9929 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 9925 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
9930 v8::Handle<v8::FunctionTemplate> method_templ = | 9926 v8::Handle<v8::FunctionTemplate> method_templ = |
9931 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 9927 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
9932 v8_str("method_data"), | 9928 v8_str("method_data"), |
9933 v8::Signature::New(fun_templ)); | 9929 v8::Signature::New(fun_templ)); |
9934 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 9930 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
9935 proto_templ->Set(v8_str("method"), method_templ); | 9931 proto_templ->Set(v8_str("method"), method_templ); |
| 9932 fun_templ->SetHiddenPrototype(true); |
9936 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); | 9933 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); |
9937 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, | 9934 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, |
9938 NULL, NULL, NULL, NULL, | 9935 NULL, NULL, NULL, NULL, |
9939 v8::External::Wrap(&interceptor_call_count)); | 9936 v8::External::Wrap(&interceptor_call_count)); |
9940 LocalContext context; | 9937 LocalContext context; |
9941 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 9938 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
9942 GenerateSomeGarbage(); | 9939 GenerateSomeGarbage(); |
9943 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 9940 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
9944 CompileRun( | 9941 CompileRun( |
9945 "o.foo = 17;" | 9942 "o.foo = 17;" |
(...skipping 10 matching lines...) Expand all Loading... |
9956 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) { | 9953 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) { |
9957 int interceptor_call_count = 0; | 9954 int interceptor_call_count = 0; |
9958 v8::HandleScope scope; | 9955 v8::HandleScope scope; |
9959 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 9956 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
9960 v8::Handle<v8::FunctionTemplate> method_templ = | 9957 v8::Handle<v8::FunctionTemplate> method_templ = |
9961 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 9958 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
9962 v8_str("method_data"), | 9959 v8_str("method_data"), |
9963 v8::Signature::New(fun_templ)); | 9960 v8::Signature::New(fun_templ)); |
9964 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 9961 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
9965 proto_templ->Set(v8_str("method"), method_templ); | 9962 proto_templ->Set(v8_str("method"), method_templ); |
| 9963 fun_templ->SetHiddenPrototype(true); |
9966 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); | 9964 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); |
9967 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, | 9965 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, |
9968 NULL, NULL, NULL, NULL, | 9966 NULL, NULL, NULL, NULL, |
9969 v8::External::Wrap(&interceptor_call_count)); | 9967 v8::External::Wrap(&interceptor_call_count)); |
9970 LocalContext context; | 9968 LocalContext context; |
9971 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 9969 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
9972 GenerateSomeGarbage(); | 9970 GenerateSomeGarbage(); |
9973 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 9971 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
9974 CompileRun( | 9972 CompileRun( |
9975 "o.foo = 17;" | 9973 "o.foo = 17;" |
(...skipping 16 matching lines...) Expand all Loading... |
9992 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) { | 9990 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) { |
9993 int interceptor_call_count = 0; | 9991 int interceptor_call_count = 0; |
9994 v8::HandleScope scope; | 9992 v8::HandleScope scope; |
9995 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 9993 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
9996 v8::Handle<v8::FunctionTemplate> method_templ = | 9994 v8::Handle<v8::FunctionTemplate> method_templ = |
9997 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 9995 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
9998 v8_str("method_data"), | 9996 v8_str("method_data"), |
9999 v8::Signature::New(fun_templ)); | 9997 v8::Signature::New(fun_templ)); |
10000 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 9998 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10001 proto_templ->Set(v8_str("method"), method_templ); | 9999 proto_templ->Set(v8_str("method"), method_templ); |
| 10000 fun_templ->SetHiddenPrototype(true); |
10002 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); | 10001 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); |
10003 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, | 10002 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, |
10004 NULL, NULL, NULL, NULL, | 10003 NULL, NULL, NULL, NULL, |
10005 v8::External::Wrap(&interceptor_call_count)); | 10004 v8::External::Wrap(&interceptor_call_count)); |
10006 LocalContext context; | 10005 LocalContext context; |
10007 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 10006 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
10008 GenerateSomeGarbage(); | 10007 GenerateSomeGarbage(); |
10009 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 10008 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
10010 CompileRun( | 10009 CompileRun( |
10011 "o.foo = 17;" | 10010 "o.foo = 17;" |
(...skipping 16 matching lines...) Expand all Loading... |
10028 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) { | 10027 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) { |
10029 int interceptor_call_count = 0; | 10028 int interceptor_call_count = 0; |
10030 v8::HandleScope scope; | 10029 v8::HandleScope scope; |
10031 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10030 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10032 v8::Handle<v8::FunctionTemplate> method_templ = | 10031 v8::Handle<v8::FunctionTemplate> method_templ = |
10033 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10032 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10034 v8_str("method_data"), | 10033 v8_str("method_data"), |
10035 v8::Signature::New(fun_templ)); | 10034 v8::Signature::New(fun_templ)); |
10036 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10035 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10037 proto_templ->Set(v8_str("method"), method_templ); | 10036 proto_templ->Set(v8_str("method"), method_templ); |
| 10037 fun_templ->SetHiddenPrototype(true); |
10038 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); | 10038 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); |
10039 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, | 10039 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, |
10040 NULL, NULL, NULL, NULL, | 10040 NULL, NULL, NULL, NULL, |
10041 v8::External::Wrap(&interceptor_call_count)); | 10041 v8::External::Wrap(&interceptor_call_count)); |
10042 LocalContext context; | 10042 LocalContext context; |
10043 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 10043 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
10044 GenerateSomeGarbage(); | 10044 GenerateSomeGarbage(); |
10045 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 10045 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
10046 v8::TryCatch try_catch; | 10046 v8::TryCatch try_catch; |
10047 CompileRun( | 10047 CompileRun( |
(...skipping 19 matching lines...) Expand all Loading... |
10067 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) { | 10067 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) { |
10068 int interceptor_call_count = 0; | 10068 int interceptor_call_count = 0; |
10069 v8::HandleScope scope; | 10069 v8::HandleScope scope; |
10070 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10070 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10071 v8::Handle<v8::FunctionTemplate> method_templ = | 10071 v8::Handle<v8::FunctionTemplate> method_templ = |
10072 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10072 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10073 v8_str("method_data"), | 10073 v8_str("method_data"), |
10074 v8::Signature::New(fun_templ)); | 10074 v8::Signature::New(fun_templ)); |
10075 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10075 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10076 proto_templ->Set(v8_str("method"), method_templ); | 10076 proto_templ->Set(v8_str("method"), method_templ); |
| 10077 fun_templ->SetHiddenPrototype(true); |
10077 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); | 10078 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); |
10078 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, | 10079 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, |
10079 NULL, NULL, NULL, NULL, | 10080 NULL, NULL, NULL, NULL, |
10080 v8::External::Wrap(&interceptor_call_count)); | 10081 v8::External::Wrap(&interceptor_call_count)); |
10081 LocalContext context; | 10082 LocalContext context; |
10082 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 10083 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
10083 GenerateSomeGarbage(); | 10084 GenerateSomeGarbage(); |
10084 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 10085 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
10085 v8::TryCatch try_catch; | 10086 v8::TryCatch try_catch; |
10086 CompileRun( | 10087 CompileRun( |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10129 | 10130 |
10130 THREADED_TEST(CallICFastApi_SimpleSignature) { | 10131 THREADED_TEST(CallICFastApi_SimpleSignature) { |
10131 v8::HandleScope scope; | 10132 v8::HandleScope scope; |
10132 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10133 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10133 v8::Handle<v8::FunctionTemplate> method_templ = | 10134 v8::Handle<v8::FunctionTemplate> method_templ = |
10134 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10135 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10135 v8_str("method_data"), | 10136 v8_str("method_data"), |
10136 v8::Signature::New(fun_templ)); | 10137 v8::Signature::New(fun_templ)); |
10137 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10138 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10138 proto_templ->Set(v8_str("method"), method_templ); | 10139 proto_templ->Set(v8_str("method"), method_templ); |
| 10140 fun_templ->SetHiddenPrototype(true); |
10139 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 10141 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
10140 CHECK(!templ.IsEmpty()); | 10142 CHECK(!templ.IsEmpty()); |
10141 LocalContext context; | 10143 LocalContext context; |
10142 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 10144 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
10143 GenerateSomeGarbage(); | 10145 GenerateSomeGarbage(); |
10144 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 10146 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
10145 CompileRun( | 10147 CompileRun( |
10146 "o.foo = 17;" | 10148 "o.foo = 17;" |
10147 "var receiver = {};" | 10149 "var receiver = {};" |
10148 "receiver.__proto__ = o;" | 10150 "receiver.__proto__ = o;" |
10149 "var result = 0;" | 10151 "var result = 0;" |
10150 "for (var i = 0; i < 100; i++) {" | 10152 "for (var i = 0; i < 100; i++) {" |
10151 " result = receiver.method(41);" | 10153 " result = receiver.method(41);" |
10152 "}"); | 10154 "}"); |
10153 | 10155 |
10154 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); | 10156 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); |
10155 } | 10157 } |
10156 | 10158 |
10157 THREADED_TEST(CallICFastApi_SimpleSignature_Miss1) { | 10159 THREADED_TEST(CallICFastApi_SimpleSignature_Miss1) { |
10158 v8::HandleScope scope; | 10160 v8::HandleScope scope; |
10159 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10161 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10160 v8::Handle<v8::FunctionTemplate> method_templ = | 10162 v8::Handle<v8::FunctionTemplate> method_templ = |
10161 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10163 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10162 v8_str("method_data"), | 10164 v8_str("method_data"), |
10163 v8::Signature::New(fun_templ)); | 10165 v8::Signature::New(fun_templ)); |
10164 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10166 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10165 proto_templ->Set(v8_str("method"), method_templ); | 10167 proto_templ->Set(v8_str("method"), method_templ); |
| 10168 fun_templ->SetHiddenPrototype(true); |
10166 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 10169 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
10167 CHECK(!templ.IsEmpty()); | 10170 CHECK(!templ.IsEmpty()); |
10168 LocalContext context; | 10171 LocalContext context; |
10169 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 10172 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
10170 GenerateSomeGarbage(); | 10173 GenerateSomeGarbage(); |
10171 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 10174 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
10172 CompileRun( | 10175 CompileRun( |
10173 "o.foo = 17;" | 10176 "o.foo = 17;" |
10174 "var receiver = {};" | 10177 "var receiver = {};" |
10175 "receiver.__proto__ = o;" | 10178 "receiver.__proto__ = o;" |
(...skipping 12 matching lines...) Expand all Loading... |
10188 | 10191 |
10189 THREADED_TEST(CallICFastApi_SimpleSignature_Miss2) { | 10192 THREADED_TEST(CallICFastApi_SimpleSignature_Miss2) { |
10190 v8::HandleScope scope; | 10193 v8::HandleScope scope; |
10191 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10194 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10192 v8::Handle<v8::FunctionTemplate> method_templ = | 10195 v8::Handle<v8::FunctionTemplate> method_templ = |
10193 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10196 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10194 v8_str("method_data"), | 10197 v8_str("method_data"), |
10195 v8::Signature::New(fun_templ)); | 10198 v8::Signature::New(fun_templ)); |
10196 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10199 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10197 proto_templ->Set(v8_str("method"), method_templ); | 10200 proto_templ->Set(v8_str("method"), method_templ); |
| 10201 fun_templ->SetHiddenPrototype(true); |
10198 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 10202 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
10199 CHECK(!templ.IsEmpty()); | 10203 CHECK(!templ.IsEmpty()); |
10200 LocalContext context; | 10204 LocalContext context; |
10201 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 10205 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
10202 GenerateSomeGarbage(); | 10206 GenerateSomeGarbage(); |
10203 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 10207 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
10204 v8::TryCatch try_catch; | 10208 v8::TryCatch try_catch; |
10205 CompileRun( | 10209 CompileRun( |
10206 "o.foo = 17;" | 10210 "o.foo = 17;" |
10207 "var receiver = {};" | 10211 "var receiver = {};" |
10208 "receiver.__proto__ = o;" | 10212 "receiver.__proto__ = o;" |
10209 "var result = 0;" | 10213 "var result = 0;" |
10210 "var saved_result = 0;" | 10214 "var saved_result = 0;" |
10211 "for (var i = 0; i < 100; i++) {" | 10215 "for (var i = 0; i < 100; i++) {" |
10212 " result = receiver.method(41);" | 10216 " result = receiver.method(41);" |
10213 " if (i == 50) {" | 10217 " if (i == 50) {" |
10214 " saved_result = result;" | 10218 " saved_result = result;" |
10215 " receiver = 333;" | 10219 " receiver = 333;" |
10216 " }" | 10220 " }" |
10217 "}"); | 10221 "}"); |
10218 CHECK(try_catch.HasCaught()); | 10222 CHECK(try_catch.HasCaught()); |
10219 CHECK_EQ(v8_str("TypeError: Object 333 has no method 'method'"), | 10223 CHECK_EQ(v8_str("TypeError: Object 333 has no method 'method'"), |
10220 try_catch.Exception()->ToString()); | 10224 try_catch.Exception()->ToString()); |
10221 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); | 10225 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
10222 } | 10226 } |
10223 | 10227 |
| 10228 THREADED_TEST(CallICFastApi_SimpleSignature_TypeError) { |
| 10229 v8::HandleScope scope; |
| 10230 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
| 10231 v8::Handle<v8::FunctionTemplate> method_templ = |
| 10232 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
| 10233 v8_str("method_data"), |
| 10234 v8::Signature::New(fun_templ)); |
| 10235 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
| 10236 proto_templ->Set(v8_str("method"), method_templ); |
| 10237 fun_templ->SetHiddenPrototype(true); |
| 10238 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
| 10239 CHECK(!templ.IsEmpty()); |
| 10240 LocalContext context; |
| 10241 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
| 10242 GenerateSomeGarbage(); |
| 10243 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
| 10244 v8::TryCatch try_catch; |
| 10245 CompileRun( |
| 10246 "o.foo = 17;" |
| 10247 "var receiver = {};" |
| 10248 "receiver.__proto__ = o;" |
| 10249 "var result = 0;" |
| 10250 "var saved_result = 0;" |
| 10251 "for (var i = 0; i < 100; i++) {" |
| 10252 " result = receiver.method(41);" |
| 10253 " if (i == 50) {" |
| 10254 " saved_result = result;" |
| 10255 " receiver = Object.create(receiver);" |
| 10256 " }" |
| 10257 "}"); |
| 10258 CHECK(try_catch.HasCaught()); |
| 10259 CHECK_EQ(v8_str("TypeError: Illegal invocation"), |
| 10260 try_catch.Exception()->ToString()); |
| 10261 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
| 10262 } |
| 10263 |
10224 | 10264 |
10225 v8::Handle<Value> keyed_call_ic_function; | 10265 v8::Handle<Value> keyed_call_ic_function; |
10226 | 10266 |
10227 static v8::Handle<Value> InterceptorKeyedCallICGetter( | 10267 static v8::Handle<Value> InterceptorKeyedCallICGetter( |
10228 Local<String> name, const AccessorInfo& info) { | 10268 Local<String> name, const AccessorInfo& info) { |
10229 ApiTestFuzzer::Fuzz(); | 10269 ApiTestFuzzer::Fuzz(); |
10230 if (v8_str("x")->Equals(name)) { | 10270 if (v8_str("x")->Equals(name)) { |
10231 return keyed_call_ic_function; | 10271 return keyed_call_ic_function; |
10232 } | 10272 } |
10233 return v8::Handle<Value>(); | 10273 return v8::Handle<Value>(); |
(...skipping 7758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17992 | 18032 |
17993 i::Semaphore* sem_; | 18033 i::Semaphore* sem_; |
17994 volatile int sem_value_; | 18034 volatile int sem_value_; |
17995 }; | 18035 }; |
17996 | 18036 |
17997 | 18037 |
17998 THREADED_TEST(SemaphoreInterruption) { | 18038 THREADED_TEST(SemaphoreInterruption) { |
17999 ThreadInterruptTest().RunTest(); | 18039 ThreadInterruptTest().RunTest(); |
18000 } | 18040 } |
18001 #endif // WIN32 | 18041 #endif // WIN32 |
OLD | NEW |