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 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1067 LocalContext env; | 1067 LocalContext env; |
1068 v8::HandleScope scope(env->GetIsolate()); | 1068 v8::HandleScope scope(env->GetIsolate()); |
1069 v8::Handle<v8::ObjectTemplate> object_template = v8::ObjectTemplate::New(); | 1069 v8::Handle<v8::ObjectTemplate> object_template = v8::ObjectTemplate::New(); |
1070 v8::FunctionCallback callback = &FastReturnValueCallback<T>; | 1070 v8::FunctionCallback callback = &FastReturnValueCallback<T>; |
1071 object_template->Set("callback", v8::FunctionTemplate::New(callback)); | 1071 object_template->Set("callback", v8::FunctionTemplate::New(callback)); |
1072 v8::Local<v8::Object> object = object_template->NewInstance(); | 1072 v8::Local<v8::Object> object = object_template->NewInstance(); |
1073 (*env)->Global()->Set(v8_str("callback_object"), object); | 1073 (*env)->Global()->Set(v8_str("callback_object"), object); |
1074 return scope.Close(CompileRun("callback_object.callback()")); | 1074 return scope.Close(CompileRun("callback_object.callback()")); |
1075 } | 1075 } |
1076 | 1076 |
1077 THREADED_TEST(FastReturnValues) { | 1077 THREADED_PROFILED_TEST(FastReturnValues) { |
1078 LocalContext env; | 1078 LocalContext env; |
1079 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 1079 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
1080 v8::Handle<v8::Value> value; | 1080 v8::Handle<v8::Value> value; |
1081 // check int32_t and uint32_t | 1081 // check int32_t and uint32_t |
1082 int32_t int_values[] = { | 1082 int32_t int_values[] = { |
1083 0, 234, -723, | 1083 0, 234, -723, |
1084 i::Smi::kMinValue, i::Smi::kMaxValue | 1084 i::Smi::kMinValue, i::Smi::kMaxValue |
1085 }; | 1085 }; |
1086 for (size_t i = 0; i < ARRAY_SIZE(int_values); i++) { | 1086 for (size_t i = 0; i < ARRAY_SIZE(int_values); i++) { |
1087 for (int modifier = -1; modifier <= 1; modifier++) { | 1087 for (int modifier = -1; modifier <= 1; modifier++) { |
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2095 | 2095 |
2096 | 2096 |
2097 void CheckThisNamedPropertyEnumerator( | 2097 void CheckThisNamedPropertyEnumerator( |
2098 const v8::PropertyCallbackInfo<v8::Array>& info) { | 2098 const v8::PropertyCallbackInfo<v8::Array>& info) { |
2099 CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyEnumerator)); | 2099 CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyEnumerator)); |
2100 ApiTestFuzzer::Fuzz(); | 2100 ApiTestFuzzer::Fuzz(); |
2101 CHECK(info.This()->Equals(bottom)); | 2101 CHECK(info.This()->Equals(bottom)); |
2102 } | 2102 } |
2103 | 2103 |
2104 | 2104 |
2105 THREADED_TEST(PropertyHandlerInPrototype) { | 2105 THREADED_PROFILED_TEST(PropertyHandlerInPrototype) { |
2106 LocalContext env; | 2106 LocalContext env; |
2107 v8::HandleScope scope(env->GetIsolate()); | 2107 v8::HandleScope scope(env->GetIsolate()); |
2108 | 2108 |
2109 // Set up a prototype chain with three interceptors. | 2109 // Set up a prototype chain with three interceptors. |
2110 v8::Handle<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(); | 2110 v8::Handle<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(); |
2111 templ->InstanceTemplate()->SetIndexedPropertyHandler( | 2111 templ->InstanceTemplate()->SetIndexedPropertyHandler( |
2112 CheckThisIndexedPropertyHandler, | 2112 CheckThisIndexedPropertyHandler, |
2113 CheckThisIndexedPropertySetter, | 2113 CheckThisIndexedPropertySetter, |
2114 CheckThisIndexedPropertyQuery, | 2114 CheckThisIndexedPropertyQuery, |
2115 CheckThisIndexedPropertyDeleter, | 2115 CheckThisIndexedPropertyDeleter, |
(...skipping 8634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10750 v8::Handle<v8::Value> result = CompileRun( | 10750 v8::Handle<v8::Value> result = CompileRun( |
10751 "function f() {" | 10751 "function f() {" |
10752 " for (var i = 0; i < 30; i++) o1.p1;" | 10752 " for (var i = 0; i < 30; i++) o1.p1;" |
10753 " return o1.p1" | 10753 " return o1.p1" |
10754 "}" | 10754 "}" |
10755 "f();"); | 10755 "f();"); |
10756 CHECK_EQ(v8_str("Direct Getter Result"), result); | 10756 CHECK_EQ(v8_str("Direct Getter Result"), result); |
10757 CHECK_EQ(31, p_getter_count); | 10757 CHECK_EQ(31, p_getter_count); |
10758 } | 10758 } |
10759 | 10759 |
10760 THREADED_TEST(LoadICFastApi_DirectCall_GCMoveStub) { | 10760 THREADED_PROFILED_TEST(LoadICFastApi_DirectCall_GCMoveStub) { |
10761 LoadICFastApi_DirectCall_GCMoveStub(DirectGetterCallback); | 10761 LoadICFastApi_DirectCall_GCMoveStub(DirectGetterCallback); |
10762 } | 10762 } |
10763 | 10763 |
10764 | 10764 |
10765 void ThrowingDirectGetterCallback( | 10765 void ThrowingDirectGetterCallback( |
10766 Local<String> name, | 10766 Local<String> name, |
10767 const v8::PropertyCallbackInfo<v8::Value>& info) { | 10767 const v8::PropertyCallbackInfo<v8::Value>& info) { |
10768 v8::ThrowException(v8_str("g")); | 10768 v8::ThrowException(v8_str("g")); |
10769 } | 10769 } |
10770 | 10770 |
10771 | 10771 |
10772 THREADED_TEST(LoadICFastApi_DirectCall_Throw) { | 10772 THREADED_TEST(LoadICFastApi_DirectCall_Throw) { |
10773 LocalContext context; | 10773 LocalContext context; |
10774 v8::HandleScope scope(context->GetIsolate()); | 10774 v8::HandleScope scope(context->GetIsolate()); |
10775 v8::Handle<v8::ObjectTemplate> obj = v8::ObjectTemplate::New(); | 10775 v8::Handle<v8::ObjectTemplate> obj = v8::ObjectTemplate::New(); |
10776 obj->SetAccessor(v8_str("p1"), ThrowingDirectGetterCallback); | 10776 obj->SetAccessor(v8_str("p1"), ThrowingDirectGetterCallback); |
10777 context->Global()->Set(v8_str("o1"), obj->NewInstance()); | 10777 context->Global()->Set(v8_str("o1"), obj->NewInstance()); |
10778 v8::Handle<Value> result = CompileRun( | 10778 v8::Handle<Value> result = CompileRun( |
10779 "var result = '';" | 10779 "var result = '';" |
10780 "for (var i = 0; i < 5; i++) {" | 10780 "for (var i = 0; i < 5; i++) {" |
10781 " try { o1.p1; } catch (e) { result += e; }" | 10781 " try { o1.p1; } catch (e) { result += e; }" |
10782 "}" | 10782 "}" |
10783 "result;"); | 10783 "result;"); |
10784 CHECK_EQ(v8_str("ggggg"), result); | 10784 CHECK_EQ(v8_str("ggggg"), result); |
10785 } | 10785 } |
10786 | 10786 |
10787 | 10787 |
10788 THREADED_TEST(InterceptorCallICFastApi_TrivialSignature) { | 10788 THREADED_PROFILED_TEST(InterceptorCallICFastApi_TrivialSignature) { |
10789 int interceptor_call_count = 0; | 10789 int interceptor_call_count = 0; |
10790 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 10790 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
10791 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10791 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10792 v8::Handle<v8::FunctionTemplate> method_templ = | 10792 v8::Handle<v8::FunctionTemplate> method_templ = |
10793 v8::FunctionTemplate::New(FastApiCallback_TrivialSignature, | 10793 v8::FunctionTemplate::New(FastApiCallback_TrivialSignature, |
10794 v8_str("method_data"), | 10794 v8_str("method_data"), |
10795 v8::Handle<v8::Signature>()); | 10795 v8::Handle<v8::Signature>()); |
10796 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10796 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10797 proto_templ->Set(v8_str("method"), method_templ); | 10797 proto_templ->Set(v8_str("method"), method_templ); |
10798 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); | 10798 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); |
10799 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, | 10799 templ->SetNamedPropertyHandler(InterceptorCallICFastApi, |
10800 NULL, NULL, NULL, NULL, | 10800 NULL, NULL, NULL, NULL, |
10801 v8::External::New(&interceptor_call_count)); | 10801 v8::External::New(&interceptor_call_count)); |
10802 LocalContext context; | 10802 LocalContext context; |
10803 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 10803 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
10804 GenerateSomeGarbage(); | 10804 GenerateSomeGarbage(); |
10805 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 10805 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
10806 CompileRun( | 10806 CompileRun( |
10807 "var result = 0;" | 10807 "var result = 0;" |
10808 "for (var i = 0; i < 100; i++) {" | 10808 "for (var i = 0; i < 100; i++) {" |
10809 " result = o.method(41);" | 10809 " result = o.method(41);" |
10810 "}"); | 10810 "}"); |
10811 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); | 10811 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); |
10812 CHECK_EQ(100, interceptor_call_count); | 10812 CHECK_EQ(100, interceptor_call_count); |
10813 } | 10813 } |
10814 | 10814 |
10815 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature) { | 10815 THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature) { |
10816 int interceptor_call_count = 0; | 10816 int interceptor_call_count = 0; |
10817 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 10817 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
10818 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10818 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10819 v8::Handle<v8::FunctionTemplate> method_templ = | 10819 v8::Handle<v8::FunctionTemplate> method_templ = |
10820 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10820 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10821 v8_str("method_data"), | 10821 v8_str("method_data"), |
10822 v8::Signature::New(fun_templ)); | 10822 v8::Signature::New(fun_templ)); |
10823 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10823 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10824 proto_templ->Set(v8_str("method"), method_templ); | 10824 proto_templ->Set(v8_str("method"), method_templ); |
10825 fun_templ->SetHiddenPrototype(true); | 10825 fun_templ->SetHiddenPrototype(true); |
(...skipping 10 matching lines...) Expand all Loading... |
10836 "var receiver = {};" | 10836 "var receiver = {};" |
10837 "receiver.__proto__ = o;" | 10837 "receiver.__proto__ = o;" |
10838 "var result = 0;" | 10838 "var result = 0;" |
10839 "for (var i = 0; i < 100; i++) {" | 10839 "for (var i = 0; i < 100; i++) {" |
10840 " result = receiver.method(41);" | 10840 " result = receiver.method(41);" |
10841 "}"); | 10841 "}"); |
10842 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); | 10842 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); |
10843 CHECK_EQ(100, interceptor_call_count); | 10843 CHECK_EQ(100, interceptor_call_count); |
10844 } | 10844 } |
10845 | 10845 |
10846 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) { | 10846 THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) { |
10847 int interceptor_call_count = 0; | 10847 int interceptor_call_count = 0; |
10848 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 10848 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
10849 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10849 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10850 v8::Handle<v8::FunctionTemplate> method_templ = | 10850 v8::Handle<v8::FunctionTemplate> method_templ = |
10851 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10851 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10852 v8_str("method_data"), | 10852 v8_str("method_data"), |
10853 v8::Signature::New(fun_templ)); | 10853 v8::Signature::New(fun_templ)); |
10854 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10854 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10855 proto_templ->Set(v8_str("method"), method_templ); | 10855 proto_templ->Set(v8_str("method"), method_templ); |
10856 fun_templ->SetHiddenPrototype(true); | 10856 fun_templ->SetHiddenPrototype(true); |
(...skipping 16 matching lines...) Expand all Loading... |
10873 " if (i == 50) {" | 10873 " if (i == 50) {" |
10874 " saved_result = result;" | 10874 " saved_result = result;" |
10875 " receiver = {method: function(x) { return x - 1 }};" | 10875 " receiver = {method: function(x) { return x - 1 }};" |
10876 " }" | 10876 " }" |
10877 "}"); | 10877 "}"); |
10878 CHECK_EQ(40, context->Global()->Get(v8_str("result"))->Int32Value()); | 10878 CHECK_EQ(40, context->Global()->Get(v8_str("result"))->Int32Value()); |
10879 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); | 10879 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
10880 CHECK_GE(interceptor_call_count, 50); | 10880 CHECK_GE(interceptor_call_count, 50); |
10881 } | 10881 } |
10882 | 10882 |
10883 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) { | 10883 THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) { |
10884 int interceptor_call_count = 0; | 10884 int interceptor_call_count = 0; |
10885 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 10885 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
10886 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10886 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10887 v8::Handle<v8::FunctionTemplate> method_templ = | 10887 v8::Handle<v8::FunctionTemplate> method_templ = |
10888 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10888 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10889 v8_str("method_data"), | 10889 v8_str("method_data"), |
10890 v8::Signature::New(fun_templ)); | 10890 v8::Signature::New(fun_templ)); |
10891 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10891 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10892 proto_templ->Set(v8_str("method"), method_templ); | 10892 proto_templ->Set(v8_str("method"), method_templ); |
10893 fun_templ->SetHiddenPrototype(true); | 10893 fun_templ->SetHiddenPrototype(true); |
(...skipping 16 matching lines...) Expand all Loading... |
10910 " if (i == 50) {" | 10910 " if (i == 50) {" |
10911 " saved_result = result;" | 10911 " saved_result = result;" |
10912 " o.method = function(x) { return x - 1 };" | 10912 " o.method = function(x) { return x - 1 };" |
10913 " }" | 10913 " }" |
10914 "}"); | 10914 "}"); |
10915 CHECK_EQ(40, context->Global()->Get(v8_str("result"))->Int32Value()); | 10915 CHECK_EQ(40, context->Global()->Get(v8_str("result"))->Int32Value()); |
10916 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); | 10916 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
10917 CHECK_GE(interceptor_call_count, 50); | 10917 CHECK_GE(interceptor_call_count, 50); |
10918 } | 10918 } |
10919 | 10919 |
10920 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) { | 10920 THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) { |
10921 int interceptor_call_count = 0; | 10921 int interceptor_call_count = 0; |
10922 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 10922 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
10923 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10923 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10924 v8::Handle<v8::FunctionTemplate> method_templ = | 10924 v8::Handle<v8::FunctionTemplate> method_templ = |
10925 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10925 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10926 v8_str("method_data"), | 10926 v8_str("method_data"), |
10927 v8::Signature::New(fun_templ)); | 10927 v8::Signature::New(fun_templ)); |
10928 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10928 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10929 proto_templ->Set(v8_str("method"), method_templ); | 10929 proto_templ->Set(v8_str("method"), method_templ); |
10930 fun_templ->SetHiddenPrototype(true); | 10930 fun_templ->SetHiddenPrototype(true); |
(...skipping 19 matching lines...) Expand all Loading... |
10950 " receiver = 333;" | 10950 " receiver = 333;" |
10951 " }" | 10951 " }" |
10952 "}"); | 10952 "}"); |
10953 CHECK(try_catch.HasCaught()); | 10953 CHECK(try_catch.HasCaught()); |
10954 CHECK_EQ(v8_str("TypeError: Object 333 has no method 'method'"), | 10954 CHECK_EQ(v8_str("TypeError: Object 333 has no method 'method'"), |
10955 try_catch.Exception()->ToString()); | 10955 try_catch.Exception()->ToString()); |
10956 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); | 10956 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
10957 CHECK_GE(interceptor_call_count, 50); | 10957 CHECK_GE(interceptor_call_count, 50); |
10958 } | 10958 } |
10959 | 10959 |
10960 THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) { | 10960 THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) { |
10961 int interceptor_call_count = 0; | 10961 int interceptor_call_count = 0; |
10962 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 10962 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
10963 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 10963 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
10964 v8::Handle<v8::FunctionTemplate> method_templ = | 10964 v8::Handle<v8::FunctionTemplate> method_templ = |
10965 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 10965 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
10966 v8_str("method_data"), | 10966 v8_str("method_data"), |
10967 v8::Signature::New(fun_templ)); | 10967 v8::Signature::New(fun_templ)); |
10968 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 10968 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
10969 proto_templ->Set(v8_str("method"), method_templ); | 10969 proto_templ->Set(v8_str("method"), method_templ); |
10970 fun_templ->SetHiddenPrototype(true); | 10970 fun_templ->SetHiddenPrototype(true); |
(...skipping 19 matching lines...) Expand all Loading... |
10990 " receiver = {method: receiver.method};" | 10990 " receiver = {method: receiver.method};" |
10991 " }" | 10991 " }" |
10992 "}"); | 10992 "}"); |
10993 CHECK(try_catch.HasCaught()); | 10993 CHECK(try_catch.HasCaught()); |
10994 CHECK_EQ(v8_str("TypeError: Illegal invocation"), | 10994 CHECK_EQ(v8_str("TypeError: Illegal invocation"), |
10995 try_catch.Exception()->ToString()); | 10995 try_catch.Exception()->ToString()); |
10996 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); | 10996 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
10997 CHECK_GE(interceptor_call_count, 50); | 10997 CHECK_GE(interceptor_call_count, 50); |
10998 } | 10998 } |
10999 | 10999 |
11000 THREADED_TEST(CallICFastApi_TrivialSignature) { | 11000 THREADED_PROFILED_TEST(CallICFastApi_TrivialSignature) { |
11001 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 11001 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
11002 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 11002 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
11003 v8::Handle<v8::FunctionTemplate> method_templ = | 11003 v8::Handle<v8::FunctionTemplate> method_templ = |
11004 v8::FunctionTemplate::New(FastApiCallback_TrivialSignature, | 11004 v8::FunctionTemplate::New(FastApiCallback_TrivialSignature, |
11005 v8_str("method_data"), | 11005 v8_str("method_data"), |
11006 v8::Handle<v8::Signature>()); | 11006 v8::Handle<v8::Signature>()); |
11007 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 11007 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
11008 proto_templ->Set(v8_str("method"), method_templ); | 11008 proto_templ->Set(v8_str("method"), method_templ); |
11009 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 11009 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
11010 USE(templ); | 11010 USE(templ); |
11011 LocalContext context; | 11011 LocalContext context; |
11012 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 11012 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
11013 GenerateSomeGarbage(); | 11013 GenerateSomeGarbage(); |
11014 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 11014 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
11015 CompileRun( | 11015 CompileRun( |
11016 "var result = 0;" | 11016 "var result = 0;" |
11017 "for (var i = 0; i < 100; i++) {" | 11017 "for (var i = 0; i < 100; i++) {" |
11018 " result = o.method(41);" | 11018 " result = o.method(41);" |
11019 "}"); | 11019 "}"); |
11020 | 11020 |
11021 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); | 11021 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); |
11022 } | 11022 } |
11023 | 11023 |
11024 THREADED_TEST(CallICFastApi_SimpleSignature) { | 11024 THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature) { |
11025 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 11025 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
11026 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 11026 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
11027 v8::Handle<v8::FunctionTemplate> method_templ = | 11027 v8::Handle<v8::FunctionTemplate> method_templ = |
11028 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 11028 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
11029 v8_str("method_data"), | 11029 v8_str("method_data"), |
11030 v8::Signature::New(fun_templ)); | 11030 v8::Signature::New(fun_templ)); |
11031 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 11031 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
11032 proto_templ->Set(v8_str("method"), method_templ); | 11032 proto_templ->Set(v8_str("method"), method_templ); |
11033 fun_templ->SetHiddenPrototype(true); | 11033 fun_templ->SetHiddenPrototype(true); |
11034 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 11034 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
11035 CHECK(!templ.IsEmpty()); | 11035 CHECK(!templ.IsEmpty()); |
11036 LocalContext context; | 11036 LocalContext context; |
11037 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); | 11037 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); |
11038 GenerateSomeGarbage(); | 11038 GenerateSomeGarbage(); |
11039 context->Global()->Set(v8_str("o"), fun->NewInstance()); | 11039 context->Global()->Set(v8_str("o"), fun->NewInstance()); |
11040 CompileRun( | 11040 CompileRun( |
11041 "o.foo = 17;" | 11041 "o.foo = 17;" |
11042 "var receiver = {};" | 11042 "var receiver = {};" |
11043 "receiver.__proto__ = o;" | 11043 "receiver.__proto__ = o;" |
11044 "var result = 0;" | 11044 "var result = 0;" |
11045 "for (var i = 0; i < 100; i++) {" | 11045 "for (var i = 0; i < 100; i++) {" |
11046 " result = receiver.method(41);" | 11046 " result = receiver.method(41);" |
11047 "}"); | 11047 "}"); |
11048 | 11048 |
11049 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); | 11049 CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value()); |
11050 } | 11050 } |
11051 | 11051 |
11052 THREADED_TEST(CallICFastApi_SimpleSignature_Miss1) { | 11052 THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature_Miss1) { |
11053 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 11053 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
11054 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 11054 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
11055 v8::Handle<v8::FunctionTemplate> method_templ = | 11055 v8::Handle<v8::FunctionTemplate> method_templ = |
11056 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 11056 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
11057 v8_str("method_data"), | 11057 v8_str("method_data"), |
11058 v8::Signature::New(fun_templ)); | 11058 v8::Signature::New(fun_templ)); |
11059 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 11059 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
11060 proto_templ->Set(v8_str("method"), method_templ); | 11060 proto_templ->Set(v8_str("method"), method_templ); |
11061 fun_templ->SetHiddenPrototype(true); | 11061 fun_templ->SetHiddenPrototype(true); |
11062 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 11062 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
(...skipping 12 matching lines...) Expand all Loading... |
11075 " result = receiver.method(41);" | 11075 " result = receiver.method(41);" |
11076 " if (i == 50) {" | 11076 " if (i == 50) {" |
11077 " saved_result = result;" | 11077 " saved_result = result;" |
11078 " receiver = {method: function(x) { return x - 1 }};" | 11078 " receiver = {method: function(x) { return x - 1 }};" |
11079 " }" | 11079 " }" |
11080 "}"); | 11080 "}"); |
11081 CHECK_EQ(40, context->Global()->Get(v8_str("result"))->Int32Value()); | 11081 CHECK_EQ(40, context->Global()->Get(v8_str("result"))->Int32Value()); |
11082 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); | 11082 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
11083 } | 11083 } |
11084 | 11084 |
11085 THREADED_TEST(CallICFastApi_SimpleSignature_Miss2) { | 11085 THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature_Miss2) { |
11086 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 11086 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
11087 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 11087 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
11088 v8::Handle<v8::FunctionTemplate> method_templ = | 11088 v8::Handle<v8::FunctionTemplate> method_templ = |
11089 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 11089 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
11090 v8_str("method_data"), | 11090 v8_str("method_data"), |
11091 v8::Signature::New(fun_templ)); | 11091 v8::Signature::New(fun_templ)); |
11092 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 11092 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
11093 proto_templ->Set(v8_str("method"), method_templ); | 11093 proto_templ->Set(v8_str("method"), method_templ); |
11094 fun_templ->SetHiddenPrototype(true); | 11094 fun_templ->SetHiddenPrototype(true); |
11095 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 11095 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
(...skipping 15 matching lines...) Expand all Loading... |
11111 " saved_result = result;" | 11111 " saved_result = result;" |
11112 " receiver = 333;" | 11112 " receiver = 333;" |
11113 " }" | 11113 " }" |
11114 "}"); | 11114 "}"); |
11115 CHECK(try_catch.HasCaught()); | 11115 CHECK(try_catch.HasCaught()); |
11116 CHECK_EQ(v8_str("TypeError: Object 333 has no method 'method'"), | 11116 CHECK_EQ(v8_str("TypeError: Object 333 has no method 'method'"), |
11117 try_catch.Exception()->ToString()); | 11117 try_catch.Exception()->ToString()); |
11118 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); | 11118 CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value()); |
11119 } | 11119 } |
11120 | 11120 |
11121 THREADED_TEST(CallICFastApi_SimpleSignature_TypeError) { | 11121 THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature_TypeError) { |
11122 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 11122 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
11123 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 11123 v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
11124 v8::Handle<v8::FunctionTemplate> method_templ = | 11124 v8::Handle<v8::FunctionTemplate> method_templ = |
11125 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, | 11125 v8::FunctionTemplate::New(FastApiCallback_SimpleSignature, |
11126 v8_str("method_data"), | 11126 v8_str("method_data"), |
11127 v8::Signature::New(fun_templ)); | 11127 v8::Signature::New(fun_templ)); |
11128 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); | 11128 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); |
11129 proto_templ->Set(v8_str("method"), method_templ); | 11129 proto_templ->Set(v8_str("method"), method_templ); |
11130 fun_templ->SetHiddenPrototype(true); | 11130 fun_templ->SetHiddenPrototype(true); |
11131 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); | 11131 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); |
(...skipping 8205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19337 i::Semaphore* sem_; | 19337 i::Semaphore* sem_; |
19338 volatile int sem_value_; | 19338 volatile int sem_value_; |
19339 }; | 19339 }; |
19340 | 19340 |
19341 | 19341 |
19342 THREADED_TEST(SemaphoreInterruption) { | 19342 THREADED_TEST(SemaphoreInterruption) { |
19343 ThreadInterruptTest().RunTest(); | 19343 ThreadInterruptTest().RunTest(); |
19344 } | 19344 } |
19345 | 19345 |
19346 #endif // WIN32 | 19346 #endif // WIN32 |
OLD | NEW |