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 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
814 CHECK((*o)->IsTheHole() || (*o)->IsUndefined()); | 814 CHECK((*o)->IsTheHole() || (*o)->IsUndefined()); |
815 } | 815 } |
816 | 816 |
817 static v8::Handle<Value> handle_call(const v8::Arguments& args) { | 817 static v8::Handle<Value> handle_call(const v8::Arguments& args) { |
818 ApiTestFuzzer::Fuzz(); | 818 ApiTestFuzzer::Fuzz(); |
819 CheckReturnValue(args); | 819 CheckReturnValue(args); |
820 args.GetReturnValue().Set(v8_str("bad value")); | 820 args.GetReturnValue().Set(v8_str("bad value")); |
821 return v8_num(102); | 821 return v8_num(102); |
822 } | 822 } |
823 | 823 |
| 824 static v8::Handle<Value> handle_call_2(const v8::Arguments& args) { |
| 825 return handle_call(args); |
| 826 } |
| 827 |
824 static v8::Handle<Value> handle_call_indirect(const v8::Arguments& args) { | 828 static v8::Handle<Value> handle_call_indirect(const v8::Arguments& args) { |
825 ApiTestFuzzer::Fuzz(); | 829 ApiTestFuzzer::Fuzz(); |
826 CheckReturnValue(args); | 830 CheckReturnValue(args); |
827 args.GetReturnValue().Set(v8_str("bad value")); | 831 args.GetReturnValue().Set(v8_str("bad value")); |
828 args.GetReturnValue().Set(v8_num(102)); | 832 args.GetReturnValue().Set(v8_num(102)); |
829 return v8::Handle<Value>(); | 833 return v8::Handle<Value>(); |
830 } | 834 } |
831 | 835 |
| 836 static v8::Handle<Value> handle_call_indirect_2(const v8::Arguments& args) { |
| 837 return handle_call_indirect(args); |
| 838 } |
| 839 |
832 static void handle_callback(const v8::FunctionCallbackInfo<Value>& info) { | 840 static void handle_callback(const v8::FunctionCallbackInfo<Value>& info) { |
833 ApiTestFuzzer::Fuzz(); | 841 ApiTestFuzzer::Fuzz(); |
834 CheckReturnValue(info); | 842 CheckReturnValue(info); |
835 info.GetReturnValue().Set(v8_str("bad value")); | 843 info.GetReturnValue().Set(v8_str("bad value")); |
836 info.GetReturnValue().Set(v8_num(102)); | 844 info.GetReturnValue().Set(v8_num(102)); |
837 } | 845 } |
838 | 846 |
| 847 static void handle_callback_2(const v8::FunctionCallbackInfo<Value>& info) { |
| 848 return handle_callback(info); |
| 849 } |
839 | 850 |
840 static v8::Handle<Value> construct_call(const v8::Arguments& args) { | 851 static v8::Handle<Value> construct_call(const v8::Arguments& args) { |
841 ApiTestFuzzer::Fuzz(); | 852 ApiTestFuzzer::Fuzz(); |
842 CheckReturnValue(args); | 853 CheckReturnValue(args); |
843 args.This()->Set(v8_str("x"), v8_num(1)); | 854 args.This()->Set(v8_str("x"), v8_num(1)); |
844 args.This()->Set(v8_str("y"), v8_num(2)); | 855 args.This()->Set(v8_str("y"), v8_num(2)); |
845 args.GetReturnValue().Set(v8_str("bad value")); | 856 args.GetReturnValue().Set(v8_str("bad value")); |
846 return args.This(); | 857 return args.This(); |
847 } | 858 } |
848 | 859 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 static void Return239Callback( | 899 static void Return239Callback( |
889 Local<String> name, const v8::PropertyCallbackInfo<Value>& info) { | 900 Local<String> name, const v8::PropertyCallbackInfo<Value>& info) { |
890 ApiTestFuzzer::Fuzz(); | 901 ApiTestFuzzer::Fuzz(); |
891 CheckReturnValue(info); | 902 CheckReturnValue(info); |
892 info.GetReturnValue().Set(v8_str("bad value")); | 903 info.GetReturnValue().Set(v8_str("bad value")); |
893 info.GetReturnValue().Set(v8_num(239)); | 904 info.GetReturnValue().Set(v8_num(239)); |
894 } | 905 } |
895 | 906 |
896 | 907 |
897 template<typename Handler> | 908 template<typename Handler> |
898 static void TestFunctionTemplateInitializer(Handler handler) { | 909 static void TestFunctionTemplateInitializer(Handler handler, |
| 910 Handler handler_2) { |
899 // Test constructor calls. | 911 // Test constructor calls. |
900 { | 912 { |
901 LocalContext env; | 913 LocalContext env; |
902 v8::HandleScope scope(env->GetIsolate()); | 914 v8::HandleScope scope(env->GetIsolate()); |
903 Local<v8::FunctionTemplate> fun_templ = | 915 Local<v8::FunctionTemplate> fun_templ = |
904 v8::FunctionTemplate::New(handler); | 916 v8::FunctionTemplate::New(handler); |
905 Local<Function> fun = fun_templ->GetFunction(); | 917 Local<Function> fun = fun_templ->GetFunction(); |
906 env->Global()->Set(v8_str("obj"), fun); | 918 env->Global()->Set(v8_str("obj"), fun); |
907 Local<Script> script = v8_compile("obj()"); | 919 Local<Script> script = v8_compile("obj()"); |
908 for (int i = 0; i < 30; i++) { | 920 for (int i = 0; i < 30; i++) { |
909 CHECK_EQ(102, script->Run()->Int32Value()); | 921 CHECK_EQ(102, script->Run()->Int32Value()); |
910 } | 922 } |
911 } | 923 } |
912 // Blow away handler database | |
913 i::Isolate* isolate = i::Isolate::Current(); | |
914 if (isolate->callback_table() != NULL) { | |
915 delete isolate->callback_table(); | |
916 isolate->set_callback_table(NULL); | |
917 } | |
918 // Use SetCallHandler to initialize a function template, should work like the | 924 // Use SetCallHandler to initialize a function template, should work like the |
919 // previous one. | 925 // previous one. |
920 { | 926 { |
921 LocalContext env; | 927 LocalContext env; |
922 v8::HandleScope scope(env->GetIsolate()); | 928 v8::HandleScope scope(env->GetIsolate()); |
923 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); | 929 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(); |
924 fun_templ->SetCallHandler(handler); | 930 fun_templ->SetCallHandler(handler); |
925 Local<Function> fun = fun_templ->GetFunction(); | 931 Local<Function> fun = fun_templ->GetFunction(); |
926 env->Global()->Set(v8_str("obj"), fun); | 932 env->Global()->Set(v8_str("obj"), fun); |
927 Local<Script> script = v8_compile("obj()"); | 933 Local<Script> script = v8_compile("obj()"); |
(...skipping 24 matching lines...) Expand all Loading... |
952 CHECK_EQ(1, script->Run()->Int32Value()); | 958 CHECK_EQ(1, script->Run()->Int32Value()); |
953 } | 959 } |
954 script = v8_compile("obj_instance.m"); | 960 script = v8_compile("obj_instance.m"); |
955 for (int i = 0; i < 30; i++) { | 961 for (int i = 0; i < 30; i++) { |
956 CHECK_EQ(239, script->Run()->Int32Value()); | 962 CHECK_EQ(239, script->Run()->Int32Value()); |
957 } | 963 } |
958 } | 964 } |
959 | 965 |
960 | 966 |
961 THREADED_TEST(FunctionTemplate) { | 967 THREADED_TEST(FunctionTemplate) { |
962 TestFunctionTemplateInitializer(handle_call); | 968 TestFunctionTemplateInitializer(handle_call, handle_call_2); |
963 TestFunctionTemplateInitializer(handle_call_indirect); | 969 TestFunctionTemplateInitializer(handle_call_indirect, handle_call_indirect_2); |
964 TestFunctionTemplateInitializer(handle_callback); | 970 TestFunctionTemplateInitializer(handle_callback, handle_callback_2); |
965 | 971 |
966 TestFunctionTemplateAccessor(construct_call, Return239); | 972 TestFunctionTemplateAccessor(construct_call, Return239); |
967 TestFunctionTemplateAccessor(construct_call_indirect, Return239Indirect); | 973 TestFunctionTemplateAccessor(construct_call_indirect, Return239Indirect); |
968 TestFunctionTemplateAccessor(construct_callback, Return239Callback); | 974 TestFunctionTemplateAccessor(construct_callback, Return239Callback); |
969 } | 975 } |
970 | 976 |
971 | 977 |
972 static v8::Handle<v8::Value> SimpleDirectCallback(const v8::Arguments& args) { | 978 static v8::Handle<v8::Value> SimpleDirectCallback(const v8::Arguments& args) { |
973 ApiTestFuzzer::Fuzz(); | 979 ApiTestFuzzer::Fuzz(); |
974 CheckReturnValue(args); | 980 CheckReturnValue(args); |
(...skipping 18333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19308 i::Semaphore* sem_; | 19314 i::Semaphore* sem_; |
19309 volatile int sem_value_; | 19315 volatile int sem_value_; |
19310 }; | 19316 }; |
19311 | 19317 |
19312 | 19318 |
19313 THREADED_TEST(SemaphoreInterruption) { | 19319 THREADED_TEST(SemaphoreInterruption) { |
19314 ThreadInterruptTest().RunTest(); | 19320 ThreadInterruptTest().RunTest(); |
19315 } | 19321 } |
19316 | 19322 |
19317 #endif // WIN32 | 19323 #endif // WIN32 |
OLD | NEW |