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 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1022 template<typename T> | 1022 template<typename T> |
1023 void FastReturnValueCallback(const v8::FunctionCallbackInfo<v8::Value>& info); | 1023 void FastReturnValueCallback(const v8::FunctionCallbackInfo<v8::Value>& info); |
1024 | 1024 |
1025 // constant return values | 1025 // constant return values |
1026 static const int32_t kFastReturnValueInt32 = 471; | 1026 static const int32_t kFastReturnValueInt32 = 471; |
1027 static const uint32_t kFastReturnValueUint32 = 571; | 1027 static const uint32_t kFastReturnValueUint32 = 571; |
1028 static const double kFastReturnValueDouble = 2.7; | 1028 static const double kFastReturnValueDouble = 2.7; |
1029 // variable return values | 1029 // variable return values |
1030 static bool fast_return_value_bool = false; | 1030 static bool fast_return_value_bool = false; |
1031 static bool fast_return_value_void_is_null = false; | 1031 static bool fast_return_value_void_is_null = false; |
| 1032 static bool fast_return_value_object_is_empty = false; |
1032 | 1033 |
1033 template<> | 1034 template<> |
1034 void FastReturnValueCallback<int32_t>( | 1035 void FastReturnValueCallback<int32_t>( |
1035 const v8::FunctionCallbackInfo<v8::Value>& info) { | 1036 const v8::FunctionCallbackInfo<v8::Value>& info) { |
1036 CheckReturnValue(info); | 1037 CheckReturnValue(info); |
1037 info.GetReturnValue().Set(kFastReturnValueInt32); | 1038 info.GetReturnValue().Set(kFastReturnValueInt32); |
1038 } | 1039 } |
1039 | 1040 |
1040 template<> | 1041 template<> |
1041 void FastReturnValueCallback<uint32_t>( | 1042 void FastReturnValueCallback<uint32_t>( |
(...skipping 23 matching lines...) Expand all Loading... |
1065 if (fast_return_value_void_is_null) { | 1066 if (fast_return_value_void_is_null) { |
1066 info.GetReturnValue().SetNull(); | 1067 info.GetReturnValue().SetNull(); |
1067 } else { | 1068 } else { |
1068 info.GetReturnValue().SetUndefined(); | 1069 info.GetReturnValue().SetUndefined(); |
1069 } | 1070 } |
1070 } | 1071 } |
1071 | 1072 |
1072 template<> | 1073 template<> |
1073 void FastReturnValueCallback<Object>( | 1074 void FastReturnValueCallback<Object>( |
1074 const v8::FunctionCallbackInfo<v8::Value>& info) { | 1075 const v8::FunctionCallbackInfo<v8::Value>& info) { |
1075 info.GetReturnValue().Set(Object::New()); | 1076 v8::Handle<v8::Object> object; |
| 1077 if (!fast_return_value_object_is_empty) object = Object::New(); |
| 1078 info.GetReturnValue().Set(object); |
1076 } | 1079 } |
1077 | 1080 |
1078 template<typename T> | 1081 template<typename T> |
1079 Handle<Value> TestFastReturnValues() { | 1082 Handle<Value> TestFastReturnValues() { |
1080 LocalContext env; | 1083 LocalContext env; |
1081 v8::HandleScope scope(env->GetIsolate()); | 1084 v8::HandleScope scope(env->GetIsolate()); |
1082 v8::Handle<v8::ObjectTemplate> object_template = v8::ObjectTemplate::New(); | 1085 v8::Handle<v8::ObjectTemplate> object_template = v8::ObjectTemplate::New(); |
1083 v8::FunctionCallback callback = &FastReturnValueCallback<T>; | 1086 v8::FunctionCallback callback = &FastReturnValueCallback<T>; |
1084 object_template->Set("callback", v8::FunctionTemplate::New(callback)); | 1087 object_template->Set("callback", v8::FunctionTemplate::New(callback)); |
1085 v8::Local<v8::Object> object = object_template->NewInstance(); | 1088 v8::Local<v8::Object> object = object_template->NewInstance(); |
(...skipping 26 matching lines...) Expand all Loading... |
1112 // check oddballs | 1115 // check oddballs |
1113 for (int i = 0; i < 2; i++) { | 1116 for (int i = 0; i < 2; i++) { |
1114 fast_return_value_void_is_null = i == 0; | 1117 fast_return_value_void_is_null = i == 0; |
1115 value = TestFastReturnValues<void>(); | 1118 value = TestFastReturnValues<void>(); |
1116 if (fast_return_value_void_is_null) { | 1119 if (fast_return_value_void_is_null) { |
1117 CHECK(value->IsNull()); | 1120 CHECK(value->IsNull()); |
1118 } else { | 1121 } else { |
1119 CHECK(value->IsUndefined()); | 1122 CHECK(value->IsUndefined()); |
1120 } | 1123 } |
1121 } | 1124 } |
| 1125 // check handles |
| 1126 fast_return_value_object_is_empty = false; |
1122 value = TestFastReturnValues<Object>(); | 1127 value = TestFastReturnValues<Object>(); |
1123 CHECK(value->IsObject()); | 1128 CHECK(value->IsObject()); |
| 1129 fast_return_value_object_is_empty = true; |
| 1130 value = TestFastReturnValues<Object>(); |
| 1131 CHECK(value->IsUndefined()); |
1124 } | 1132 } |
1125 | 1133 |
1126 | 1134 |
1127 THREADED_TEST(FunctionTemplateSetLength) { | 1135 THREADED_TEST(FunctionTemplateSetLength) { |
1128 LocalContext env; | 1136 LocalContext env; |
1129 v8::HandleScope scope(env->GetIsolate()); | 1137 v8::HandleScope scope(env->GetIsolate()); |
1130 { | 1138 { |
1131 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New( | 1139 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New( |
1132 handle_call, Handle<v8::Value>(), Handle<v8::Signature>(), 23); | 1140 handle_call, Handle<v8::Value>(), Handle<v8::Signature>(), 23); |
1133 Local<Function> fun = fun_templ->GetFunction(); | 1141 Local<Function> fun = fun_templ->GetFunction(); |
(...skipping 17941 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19075 i::Semaphore* sem_; | 19083 i::Semaphore* sem_; |
19076 volatile int sem_value_; | 19084 volatile int sem_value_; |
19077 }; | 19085 }; |
19078 | 19086 |
19079 | 19087 |
19080 THREADED_TEST(SemaphoreInterruption) { | 19088 THREADED_TEST(SemaphoreInterruption) { |
19081 ThreadInterruptTest().RunTest(); | 19089 ThreadInterruptTest().RunTest(); |
19082 } | 19090 } |
19083 | 19091 |
19084 #endif // WIN32 | 19092 #endif // WIN32 |
OLD | NEW |