Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Side by Side Diff: test/cctest/test-api.cc

Issue 240113010: Tighten OpenHandle's extra checks. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebase Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/runtime.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1899 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 CHECK_EQ(v8_str("data"), info.Data()); 1910 CHECK_EQ(v8_str("data"), info.Data());
1911 echo_named_call_count++; 1911 echo_named_call_count++;
1912 info.GetReturnValue().Set(name); 1912 info.GetReturnValue().Set(name);
1913 } 1913 }
1914 1914
1915 1915
1916 // Helper functions for Interceptor/Accessor interaction tests 1916 // Helper functions for Interceptor/Accessor interaction tests
1917 1917
1918 void SimpleAccessorGetter(Local<String> name, 1918 void SimpleAccessorGetter(Local<String> name,
1919 const v8::PropertyCallbackInfo<v8::Value>& info) { 1919 const v8::PropertyCallbackInfo<v8::Value>& info) {
1920 Handle<Object> self = info.This(); 1920 Handle<Object> self = Handle<Object>::Cast(info.This());
1921 info.GetReturnValue().Set( 1921 info.GetReturnValue().Set(
1922 self->Get(String::Concat(v8_str("accessor_"), name))); 1922 self->Get(String::Concat(v8_str("accessor_"), name)));
1923 } 1923 }
1924 1924
1925 void SimpleAccessorSetter(Local<String> name, Local<Value> value, 1925 void SimpleAccessorSetter(Local<String> name, Local<Value> value,
1926 const v8::PropertyCallbackInfo<void>& info) { 1926 const v8::PropertyCallbackInfo<void>& info) {
1927 Handle<Object> self = info.This(); 1927 Handle<Object> self = Handle<Object>::Cast(info.This());
1928 self->Set(String::Concat(v8_str("accessor_"), name), value); 1928 self->Set(String::Concat(v8_str("accessor_"), name), value);
1929 } 1929 }
1930 1930
1931 void EmptyInterceptorGetter(Local<String> name, 1931 void EmptyInterceptorGetter(Local<String> name,
1932 const v8::PropertyCallbackInfo<v8::Value>& info) { 1932 const v8::PropertyCallbackInfo<v8::Value>& info) {
1933 } 1933 }
1934 1934
1935 void EmptyInterceptorSetter(Local<String> name, 1935 void EmptyInterceptorSetter(Local<String> name,
1936 Local<Value> value, 1936 Local<Value> value,
1937 const v8::PropertyCallbackInfo<v8::Value>& info) { 1937 const v8::PropertyCallbackInfo<v8::Value>& info) {
1938 } 1938 }
1939 1939
1940 void InterceptorGetter(Local<String> name, 1940 void InterceptorGetter(Local<String> name,
1941 const v8::PropertyCallbackInfo<v8::Value>& info) { 1941 const v8::PropertyCallbackInfo<v8::Value>& info) {
1942 // Intercept names that start with 'interceptor_'. 1942 // Intercept names that start with 'interceptor_'.
1943 String::Utf8Value utf8(name); 1943 String::Utf8Value utf8(name);
1944 char* name_str = *utf8; 1944 char* name_str = *utf8;
1945 char prefix[] = "interceptor_"; 1945 char prefix[] = "interceptor_";
1946 int i; 1946 int i;
1947 for (i = 0; name_str[i] && prefix[i]; ++i) { 1947 for (i = 0; name_str[i] && prefix[i]; ++i) {
1948 if (name_str[i] != prefix[i]) return; 1948 if (name_str[i] != prefix[i]) return;
1949 } 1949 }
1950 Handle<Object> self = info.This(); 1950 Handle<Object> self = Handle<Object>::Cast(info.This());
1951 info.GetReturnValue().Set(self->GetHiddenValue(v8_str(name_str + i))); 1951 info.GetReturnValue().Set(self->GetHiddenValue(v8_str(name_str + i)));
1952 } 1952 }
1953 1953
1954 void InterceptorSetter(Local<String> name, 1954 void InterceptorSetter(Local<String> name,
1955 Local<Value> value, 1955 Local<Value> value,
1956 const v8::PropertyCallbackInfo<v8::Value>& info) { 1956 const v8::PropertyCallbackInfo<v8::Value>& info) {
1957 // Intercept accesses that set certain integer values, for which the name does 1957 // Intercept accesses that set certain integer values, for which the name does
1958 // not start with 'accessor_'. 1958 // not start with 'accessor_'.
1959 String::Utf8Value utf8(name); 1959 String::Utf8Value utf8(name);
1960 char* name_str = *utf8; 1960 char* name_str = *utf8;
1961 char prefix[] = "accessor_"; 1961 char prefix[] = "accessor_";
1962 int i; 1962 int i;
1963 for (i = 0; name_str[i] && prefix[i]; ++i) { 1963 for (i = 0; name_str[i] && prefix[i]; ++i) {
1964 if (name_str[i] != prefix[i]) break; 1964 if (name_str[i] != prefix[i]) break;
1965 } 1965 }
1966 if (!prefix[i]) return; 1966 if (!prefix[i]) return;
1967 1967
1968 if (value->IsInt32() && value->Int32Value() < 10000) { 1968 if (value->IsInt32() && value->Int32Value() < 10000) {
1969 Handle<Object> self = info.This(); 1969 Handle<Object> self = Handle<Object>::Cast(info.This());
1970 self->SetHiddenValue(name, value); 1970 self->SetHiddenValue(name, value);
1971 info.GetReturnValue().Set(value); 1971 info.GetReturnValue().Set(value);
1972 } 1972 }
1973 } 1973 }
1974 1974
1975 void AddAccessor(Handle<FunctionTemplate> templ, 1975 void AddAccessor(Handle<FunctionTemplate> templ,
1976 Handle<String> name, 1976 Handle<String> name,
1977 v8::AccessorGetterCallback getter, 1977 v8::AccessorGetterCallback getter,
1978 v8::AccessorSetterCallback setter) { 1978 v8::AccessorSetterCallback setter) {
1979 templ->PrototypeTemplate()->SetAccessor(name, getter, setter); 1979 templ->PrototypeTemplate()->SetAccessor(name, getter, setter);
(...skipping 6218 matching lines...) Expand 10 before | Expand all | Expand 10 after
8198 static void YGetter(Local<String> name, 8198 static void YGetter(Local<String> name,
8199 const v8::PropertyCallbackInfo<v8::Value>& info) { 8199 const v8::PropertyCallbackInfo<v8::Value>& info) {
8200 ApiTestFuzzer::Fuzz(); 8200 ApiTestFuzzer::Fuzz();
8201 info.GetReturnValue().Set(v8_num(10)); 8201 info.GetReturnValue().Set(v8_num(10));
8202 } 8202 }
8203 8203
8204 8204
8205 static void YSetter(Local<String> name, 8205 static void YSetter(Local<String> name,
8206 Local<Value> value, 8206 Local<Value> value,
8207 const v8::PropertyCallbackInfo<void>& info) { 8207 const v8::PropertyCallbackInfo<void>& info) {
8208 if (info.This()->Has(name)) { 8208 Local<Object> this_obj = Local<Object>::Cast(info.This());
8209 info.This()->Delete(name); 8209 if (this_obj->Has(name)) this_obj->Delete(name);
8210 } 8210 this_obj->Set(name, value);
8211 info.This()->Set(name, value);
8212 } 8211 }
8213 8212
8214 8213
8215 THREADED_TEST(DeleteAccessor) { 8214 THREADED_TEST(DeleteAccessor) {
8216 v8::Isolate* isolate = CcTest::isolate(); 8215 v8::Isolate* isolate = CcTest::isolate();
8217 v8::HandleScope scope(isolate); 8216 v8::HandleScope scope(isolate);
8218 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 8217 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
8219 obj->SetAccessor(v8_str("y"), YGetter, YSetter); 8218 obj->SetAccessor(v8_str("y"), YGetter, YSetter);
8220 LocalContext context; 8219 LocalContext context;
8221 v8::Handle<v8::Object> holder = obj->NewInstance(); 8220 v8::Handle<v8::Object> holder = obj->NewInstance();
(...skipping 3229 matching lines...) Expand 10 before | Expand all | Expand 10 after
11451 " result += o.y;" 11450 " result += o.y;"
11452 "}" 11451 "}"
11453 "result;", 11452 "result;",
11454 42 * 10); 11453 42 * 10);
11455 } 11454 }
11456 11455
11457 11456
11458 static void SetOnThis(Local<String> name, 11457 static void SetOnThis(Local<String> name,
11459 Local<Value> value, 11458 Local<Value> value,
11460 const v8::PropertyCallbackInfo<void>& info) { 11459 const v8::PropertyCallbackInfo<void>& info) {
11461 info.This()->ForceSet(name, value); 11460 Local<Object>::Cast(info.This())->ForceSet(name, value);
11462 } 11461 }
11463 11462
11464 11463
11465 THREADED_TEST(InterceptorLoadICWithCallbackOnHolder) { 11464 THREADED_TEST(InterceptorLoadICWithCallbackOnHolder) {
11466 v8::Isolate* isolate = CcTest::isolate(); 11465 v8::Isolate* isolate = CcTest::isolate();
11467 v8::HandleScope scope(isolate); 11466 v8::HandleScope scope(isolate);
11468 v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate); 11467 v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
11469 templ->SetNamedPropertyHandler(InterceptorLoadXICGetter); 11468 templ->SetNamedPropertyHandler(InterceptorLoadXICGetter);
11470 templ->SetAccessor(v8_str("y"), Return239Callback); 11469 templ->SetAccessor(v8_str("y"), Return239Callback);
11471 LocalContext context; 11470 LocalContext context;
(...skipping 7066 matching lines...) Expand 10 before | Expand all | Expand 10 after
18538 info.GetReturnValue().Set(v8_num(42)); 18537 info.GetReturnValue().Set(v8_num(42));
18539 } 18538 }
18540 18539
18541 18540
18542 static void SetterWhichSetsYOnThisTo23( 18541 static void SetterWhichSetsYOnThisTo23(
18543 Local<String> name, 18542 Local<String> name,
18544 Local<Value> value, 18543 Local<Value> value,
18545 const v8::PropertyCallbackInfo<void>& info) { 18544 const v8::PropertyCallbackInfo<void>& info) {
18546 CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject()); 18545 CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
18547 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject()); 18546 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
18548 info.This()->Set(v8_str("y"), v8_num(23)); 18547 Local<Object>::Cast(info.This())->Set(v8_str("y"), v8_num(23));
18549 } 18548 }
18550 18549
18551 18550
18552 void FooGetInterceptor(Local<String> name, 18551 void FooGetInterceptor(Local<String> name,
18553 const v8::PropertyCallbackInfo<v8::Value>& info) { 18552 const v8::PropertyCallbackInfo<v8::Value>& info) {
18554 CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject()); 18553 CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
18555 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject()); 18554 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
18556 if (!name->Equals(v8_str("foo"))) return; 18555 if (!name->Equals(v8_str("foo"))) return;
18557 info.GetReturnValue().Set(v8_num(42)); 18556 info.GetReturnValue().Set(v8_num(42));
18558 } 18557 }
18559 18558
18560 18559
18561 void FooSetInterceptor(Local<String> name, 18560 void FooSetInterceptor(Local<String> name,
18562 Local<Value> value, 18561 Local<Value> value,
18563 const v8::PropertyCallbackInfo<v8::Value>& info) { 18562 const v8::PropertyCallbackInfo<v8::Value>& info) {
18564 CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject()); 18563 CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
18565 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject()); 18564 CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
18566 if (!name->Equals(v8_str("foo"))) return; 18565 if (!name->Equals(v8_str("foo"))) return;
18567 info.This()->Set(v8_str("y"), v8_num(23)); 18566 Local<Object>::Cast(info.This())->Set(v8_str("y"), v8_num(23));
18568 info.GetReturnValue().Set(v8_num(23)); 18567 info.GetReturnValue().Set(v8_num(23));
18569 } 18568 }
18570 18569
18571 18570
18572 TEST(SetterOnConstructorPrototype) { 18571 TEST(SetterOnConstructorPrototype) {
18573 v8::Isolate* isolate = CcTest::isolate(); 18572 v8::Isolate* isolate = CcTest::isolate();
18574 v8::HandleScope scope(isolate); 18573 v8::HandleScope scope(isolate);
18575 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 18574 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
18576 templ->SetAccessor(v8_str("x"), 18575 templ->SetAccessor(v8_str("x"),
18577 GetterWhichReturns42, 18576 GetterWhichReturns42,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
18610 const v8::PropertyCallbackInfo<v8::Value>& info) { 18609 const v8::PropertyCallbackInfo<v8::Value>& info) {
18611 info.GetReturnValue().Set(v8_num(42)); 18610 info.GetReturnValue().Set(v8_num(42));
18612 } 18611 }
18613 18612
18614 18613
18615 static void NamedPropertySetterWhichSetsYOnThisTo23( 18614 static void NamedPropertySetterWhichSetsYOnThisTo23(
18616 Local<String> name, 18615 Local<String> name,
18617 Local<Value> value, 18616 Local<Value> value,
18618 const v8::PropertyCallbackInfo<v8::Value>& info) { 18617 const v8::PropertyCallbackInfo<v8::Value>& info) {
18619 if (name->Equals(v8_str("x"))) { 18618 if (name->Equals(v8_str("x"))) {
18620 info.This()->Set(v8_str("y"), v8_num(23)); 18619 Local<Object>::Cast(info.This())->Set(v8_str("y"), v8_num(23));
18621 } 18620 }
18622 } 18621 }
18623 18622
18624 18623
18625 THREADED_TEST(InterceptorOnConstructorPrototype) { 18624 THREADED_TEST(InterceptorOnConstructorPrototype) {
18626 v8::Isolate* isolate = CcTest::isolate(); 18625 v8::Isolate* isolate = CcTest::isolate();
18627 v8::HandleScope scope(isolate); 18626 v8::HandleScope scope(isolate);
18628 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 18627 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
18629 templ->SetNamedPropertyHandler(NamedPropertyGetterWhichReturns42, 18628 templ->SetNamedPropertyHandler(NamedPropertyGetterWhichReturns42,
18630 NamedPropertySetterWhichSetsYOnThisTo23); 18629 NamedPropertySetterWhichSetsYOnThisTo23);
(...skipping 3861 matching lines...) Expand 10 before | Expand all | Expand 10 after
22492 v8::internal::FLAG_stack_size = 150; 22491 v8::internal::FLAG_stack_size = 150;
22493 LocalContext current; 22492 LocalContext current;
22494 v8::Isolate* isolate = current->GetIsolate(); 22493 v8::Isolate* isolate = current->GetIsolate();
22495 v8::HandleScope scope(isolate); 22494 v8::HandleScope scope(isolate);
22496 V8::SetCaptureStackTraceForUncaughtExceptions( 22495 V8::SetCaptureStackTraceForUncaughtExceptions(
22497 true, 10, v8::StackTrace::kDetailed); 22496 true, 10, v8::StackTrace::kDetailed);
22498 v8::TryCatch try_catch; 22497 v8::TryCatch try_catch;
22499 CompileRun("(function f(x) { f(x+1); })(0)"); 22498 CompileRun("(function f(x) { f(x+1); })(0)");
22500 CHECK(try_catch.HasCaught()); 22499 CHECK(try_catch.HasCaught());
22501 } 22500 }
OLDNEW
« no previous file with comments | « src/runtime.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698