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

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

Issue 1154423004: Update all callsites of the TryCatch ctor to pass an Isolate (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 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
« no previous file with comments | « test/cctest/test-accessors.cc ('k') | test/cctest/test-debug.cc » ('j') | 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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 v8::Isolate* isolate) { 183 v8::Isolate* isolate) {
184 i::ScopedVector<char> source(200); 184 i::ScopedVector<char> source(200);
185 i::SNPrintF(source, 185 i::SNPrintF(source,
186 "for (var i = 0; i < 10; i++) {" 186 "for (var i = 0; i < 10; i++) {"
187 " %s" 187 " %s"
188 "}", 188 "}",
189 loop_js); 189 loop_js);
190 signature_callback_count = 0; 190 signature_callback_count = 0;
191 signature_expected_receiver = receiver; 191 signature_expected_receiver = receiver;
192 bool expected_to_throw = receiver.IsEmpty(); 192 bool expected_to_throw = receiver.IsEmpty();
193 v8::TryCatch try_catch; 193 v8::TryCatch try_catch(isolate);
194 CompileRun(source.start()); 194 CompileRun(source.start());
195 CHECK_EQ(expected_to_throw, try_catch.HasCaught()); 195 CHECK_EQ(expected_to_throw, try_catch.HasCaught());
196 if (!expected_to_throw) { 196 if (!expected_to_throw) {
197 CHECK_EQ(10, signature_callback_count); 197 CHECK_EQ(10, signature_callback_count);
198 } else { 198 } else {
199 CHECK(v8_str("TypeError: Illegal invocation") 199 CHECK(v8_str("TypeError: Illegal invocation")
200 ->Equals(try_catch.Exception()->ToString(isolate))); 200 ->Equals(try_catch.Exception()->ToString(isolate)));
201 } 201 }
202 } 202 }
203 203
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 private: 690 private:
691 char string_[10]; 691 char string_[10];
692 int length_; 692 int length_;
693 }; 693 };
694 694
695 695
696 THREADED_TEST(NewExternalForVeryLongString) { 696 THREADED_TEST(NewExternalForVeryLongString) {
697 auto isolate = CcTest::isolate(); 697 auto isolate = CcTest::isolate();
698 { 698 {
699 v8::HandleScope scope(isolate); 699 v8::HandleScope scope(isolate);
700 v8::TryCatch try_catch; 700 v8::TryCatch try_catch(isolate);
701 RandomLengthOneByteResource r(1 << 30); 701 RandomLengthOneByteResource r(1 << 30);
702 v8::Local<v8::String> str = v8::String::NewExternal(isolate, &r); 702 v8::Local<v8::String> str = v8::String::NewExternal(isolate, &r);
703 CHECK(str.IsEmpty()); 703 CHECK(str.IsEmpty());
704 CHECK(!try_catch.HasCaught()); 704 CHECK(!try_catch.HasCaught());
705 } 705 }
706 706
707 { 707 {
708 v8::HandleScope scope(isolate); 708 v8::HandleScope scope(isolate);
709 v8::TryCatch try_catch; 709 v8::TryCatch try_catch(isolate);
710 RandomLengthResource r(1 << 30); 710 RandomLengthResource r(1 << 30);
711 v8::Local<v8::String> str = v8::String::NewExternal(isolate, &r); 711 v8::Local<v8::String> str = v8::String::NewExternal(isolate, &r);
712 CHECK(str.IsEmpty()); 712 CHECK(str.IsEmpty());
713 CHECK(!try_catch.HasCaught()); 713 CHECK(!try_catch.HasCaught());
714 } 714 }
715 } 715 }
716 716
717 717
718 THREADED_TEST(ScavengeExternalString) { 718 THREADED_TEST(ScavengeExternalString) {
719 i::FLAG_stress_compaction = false; 719 i::FLAG_stress_compaction = false;
(...skipping 3285 matching lines...) Expand 10 before | Expand all | Expand 10 after
4005 4005
4006 // All objects should be gone. 7 global handles in total. 4006 // All objects should be gone. 7 global handles in total.
4007 CHECK_EQ(7, counter.NumberOfWeakCalls()); 4007 CHECK_EQ(7, counter.NumberOfWeakCalls());
4008 } 4008 }
4009 4009
4010 4010
4011 THREADED_TEST(ScriptException) { 4011 THREADED_TEST(ScriptException) {
4012 LocalContext env; 4012 LocalContext env;
4013 v8::HandleScope scope(env->GetIsolate()); 4013 v8::HandleScope scope(env->GetIsolate());
4014 Local<Script> script = v8_compile("throw 'panama!';"); 4014 Local<Script> script = v8_compile("throw 'panama!';");
4015 v8::TryCatch try_catch; 4015 v8::TryCatch try_catch(env->GetIsolate());
4016 Local<Value> result = script->Run(); 4016 Local<Value> result = script->Run();
4017 CHECK(result.IsEmpty()); 4017 CHECK(result.IsEmpty());
4018 CHECK(try_catch.HasCaught()); 4018 CHECK(try_catch.HasCaught());
4019 String::Utf8Value exception_value(try_catch.Exception()); 4019 String::Utf8Value exception_value(try_catch.Exception());
4020 CHECK_EQ(0, strcmp(*exception_value, "panama!")); 4020 CHECK_EQ(0, strcmp(*exception_value, "panama!"));
4021 } 4021 }
4022 4022
4023 4023
4024 TEST(TryCatchCustomException) { 4024 TEST(TryCatchCustomException) {
4025 LocalContext env; 4025 LocalContext env;
4026 v8::Isolate* isolate = env->GetIsolate(); 4026 v8::Isolate* isolate = env->GetIsolate();
4027 v8::HandleScope scope(isolate); 4027 v8::HandleScope scope(isolate);
4028 v8::TryCatch try_catch; 4028 v8::TryCatch try_catch(isolate);
4029 CompileRun( 4029 CompileRun(
4030 "function CustomError() { this.a = 'b'; }" 4030 "function CustomError() { this.a = 'b'; }"
4031 "(function f() { throw new CustomError(); })();"); 4031 "(function f() { throw new CustomError(); })();");
4032 CHECK(try_catch.HasCaught()); 4032 CHECK(try_catch.HasCaught());
4033 CHECK(try_catch.Exception() 4033 CHECK(try_catch.Exception()
4034 ->ToObject(isolate) 4034 ->ToObject(isolate)
4035 ->Get(v8_str("a")) 4035 ->Get(v8_str("a"))
4036 ->Equals(v8_str("b"))); 4036 ->Equals(v8_str("b")));
4037 } 4037 }
4038 4038
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
4350 // dont-enum 4350 // dont-enum
4351 prop = v8_str("dont_enum"); 4351 prop = v8_str("dont_enum");
4352 context->Global()->ForceSet(prop, v8_num(28), v8::DontEnum); 4352 context->Global()->ForceSet(prop, v8_num(28), v8::DontEnum);
4353 CHECK_EQ(v8::DontEnum, context->Global()->GetPropertyAttributes(prop)); 4353 CHECK_EQ(v8::DontEnum, context->Global()->GetPropertyAttributes(prop));
4354 // absent 4354 // absent
4355 prop = v8_str("absent"); 4355 prop = v8_str("absent");
4356 CHECK_EQ(v8::None, context->Global()->GetPropertyAttributes(prop)); 4356 CHECK_EQ(v8::None, context->Global()->GetPropertyAttributes(prop));
4357 Local<Value> fake_prop = v8_num(1); 4357 Local<Value> fake_prop = v8_num(1);
4358 CHECK_EQ(v8::None, context->Global()->GetPropertyAttributes(fake_prop)); 4358 CHECK_EQ(v8::None, context->Global()->GetPropertyAttributes(fake_prop));
4359 // exception 4359 // exception
4360 TryCatch try_catch; 4360 TryCatch try_catch(context->GetIsolate());
4361 Local<Value> exception = 4361 Local<Value> exception =
4362 CompileRun("({ toString: function() { throw 'exception';} })"); 4362 CompileRun("({ toString: function() { throw 'exception';} })");
4363 CHECK_EQ(v8::None, context->Global()->GetPropertyAttributes(exception)); 4363 CHECK_EQ(v8::None, context->Global()->GetPropertyAttributes(exception));
4364 CHECK(try_catch.HasCaught()); 4364 CHECK(try_catch.HasCaught());
4365 String::Utf8Value exception_value(try_catch.Exception()); 4365 String::Utf8Value exception_value(try_catch.Exception());
4366 CHECK_EQ(0, strcmp("exception", *exception_value)); 4366 CHECK_EQ(0, strcmp("exception", *exception_value));
4367 try_catch.Reset(); 4367 try_catch.Reset();
4368 } 4368 }
4369 4369
4370 4370
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
4745 args.GetIsolate()->ThrowException(v8_str("konto")); 4745 args.GetIsolate()->ThrowException(v8_str("konto"));
4746 } 4746 }
4747 4747
4748 4748
4749 void CCatcher(const v8::FunctionCallbackInfo<v8::Value>& args) { 4749 void CCatcher(const v8::FunctionCallbackInfo<v8::Value>& args) {
4750 if (args.Length() < 1) { 4750 if (args.Length() < 1) {
4751 args.GetReturnValue().Set(false); 4751 args.GetReturnValue().Set(false);
4752 return; 4752 return;
4753 } 4753 }
4754 v8::HandleScope scope(args.GetIsolate()); 4754 v8::HandleScope scope(args.GetIsolate());
4755 v8::TryCatch try_catch; 4755 v8::TryCatch try_catch(args.GetIsolate());
4756 Local<Value> result = CompileRun(args[0]->ToString(args.GetIsolate())); 4756 Local<Value> result = CompileRun(args[0]->ToString(args.GetIsolate()));
4757 CHECK(!try_catch.HasCaught() || result.IsEmpty()); 4757 CHECK(!try_catch.HasCaught() || result.IsEmpty());
4758 args.GetReturnValue().Set(try_catch.HasCaught()); 4758 args.GetReturnValue().Set(try_catch.HasCaught());
4759 } 4759 }
4760 4760
4761 4761
4762 THREADED_TEST(APICatch) { 4762 THREADED_TEST(APICatch) {
4763 v8::Isolate* isolate = CcTest::isolate(); 4763 v8::Isolate* isolate = CcTest::isolate();
4764 v8::HandleScope scope(isolate); 4764 v8::HandleScope scope(isolate);
4765 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 4765 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
(...skipping 12 matching lines...) Expand all
4778 } 4778 }
4779 4779
4780 4780
4781 THREADED_TEST(APIThrowTryCatch) { 4781 THREADED_TEST(APIThrowTryCatch) {
4782 v8::Isolate* isolate = CcTest::isolate(); 4782 v8::Isolate* isolate = CcTest::isolate();
4783 v8::HandleScope scope(isolate); 4783 v8::HandleScope scope(isolate);
4784 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 4784 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
4785 templ->Set(v8_str("ThrowFromC"), 4785 templ->Set(v8_str("ThrowFromC"),
4786 v8::FunctionTemplate::New(isolate, ThrowFromC)); 4786 v8::FunctionTemplate::New(isolate, ThrowFromC));
4787 LocalContext context(0, templ); 4787 LocalContext context(0, templ);
4788 v8::TryCatch try_catch; 4788 v8::TryCatch try_catch(isolate);
4789 CompileRun("ThrowFromC();"); 4789 CompileRun("ThrowFromC();");
4790 CHECK(try_catch.HasCaught()); 4790 CHECK(try_catch.HasCaught());
4791 } 4791 }
4792 4792
4793 4793
4794 // Test that a try-finally block doesn't shadow a try-catch block 4794 // Test that a try-finally block doesn't shadow a try-catch block
4795 // when setting up an external handler. 4795 // when setting up an external handler.
4796 // 4796 //
4797 // BUG(271): Some of the exception propagation does not work on the 4797 // BUG(271): Some of the exception propagation does not work on the
4798 // ARM simulator because the simulator separates the C++ stack and the 4798 // ARM simulator because the simulator separates the C++ stack and the
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
4994 4994
4995 TEST(APIThrowMessageAndVerboseTryCatch) { 4995 TEST(APIThrowMessageAndVerboseTryCatch) {
4996 message_received = false; 4996 message_received = false;
4997 v8::Isolate* isolate = CcTest::isolate(); 4997 v8::Isolate* isolate = CcTest::isolate();
4998 v8::HandleScope scope(isolate); 4998 v8::HandleScope scope(isolate);
4999 v8::V8::AddMessageListener(receive_message); 4999 v8::V8::AddMessageListener(receive_message);
5000 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 5000 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
5001 templ->Set(v8_str("ThrowFromC"), 5001 templ->Set(v8_str("ThrowFromC"),
5002 v8::FunctionTemplate::New(isolate, ThrowFromC)); 5002 v8::FunctionTemplate::New(isolate, ThrowFromC));
5003 LocalContext context(0, templ); 5003 LocalContext context(0, templ);
5004 v8::TryCatch try_catch; 5004 v8::TryCatch try_catch(isolate);
5005 try_catch.SetVerbose(true); 5005 try_catch.SetVerbose(true);
5006 Local<Value> result = CompileRun("ThrowFromC();"); 5006 Local<Value> result = CompileRun("ThrowFromC();");
5007 CHECK(try_catch.HasCaught()); 5007 CHECK(try_catch.HasCaught());
5008 CHECK(result.IsEmpty()); 5008 CHECK(result.IsEmpty());
5009 CHECK(message_received); 5009 CHECK(message_received);
5010 v8::V8::RemoveMessageListeners(receive_message); 5010 v8::V8::RemoveMessageListeners(receive_message);
5011 } 5011 }
5012 5012
5013 5013
5014 TEST(APIStackOverflowAndVerboseTryCatch) { 5014 TEST(APIStackOverflowAndVerboseTryCatch) {
5015 message_received = false; 5015 message_received = false;
5016 LocalContext context; 5016 LocalContext context;
5017 v8::HandleScope scope(context->GetIsolate()); 5017 v8::HandleScope scope(context->GetIsolate());
5018 v8::V8::AddMessageListener(receive_message); 5018 v8::V8::AddMessageListener(receive_message);
5019 v8::TryCatch try_catch; 5019 v8::TryCatch try_catch(context->GetIsolate());
5020 try_catch.SetVerbose(true); 5020 try_catch.SetVerbose(true);
5021 Local<Value> result = CompileRun("function foo() { foo(); } foo();"); 5021 Local<Value> result = CompileRun("function foo() { foo(); } foo();");
5022 CHECK(try_catch.HasCaught()); 5022 CHECK(try_catch.HasCaught());
5023 CHECK(result.IsEmpty()); 5023 CHECK(result.IsEmpty());
5024 CHECK(message_received); 5024 CHECK(message_received);
5025 v8::V8::RemoveMessageListeners(receive_message); 5025 v8::V8::RemoveMessageListeners(receive_message);
5026 } 5026 }
5027 5027
5028 5028
5029 THREADED_TEST(ExternalScriptException) { 5029 THREADED_TEST(ExternalScriptException) {
5030 v8::Isolate* isolate = CcTest::isolate(); 5030 v8::Isolate* isolate = CcTest::isolate();
5031 v8::HandleScope scope(isolate); 5031 v8::HandleScope scope(isolate);
5032 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 5032 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
5033 templ->Set(v8_str("ThrowFromC"), 5033 templ->Set(v8_str("ThrowFromC"),
5034 v8::FunctionTemplate::New(isolate, ThrowFromC)); 5034 v8::FunctionTemplate::New(isolate, ThrowFromC));
5035 LocalContext context(0, templ); 5035 LocalContext context(0, templ);
5036 5036
5037 v8::TryCatch try_catch; 5037 v8::TryCatch try_catch(isolate);
5038 Local<Value> result = CompileRun("ThrowFromC(); throw 'panama';"); 5038 Local<Value> result = CompileRun("ThrowFromC(); throw 'panama';");
5039 CHECK(result.IsEmpty()); 5039 CHECK(result.IsEmpty());
5040 CHECK(try_catch.HasCaught()); 5040 CHECK(try_catch.HasCaught());
5041 String::Utf8Value exception_value(try_catch.Exception()); 5041 String::Utf8Value exception_value(try_catch.Exception());
5042 CHECK_EQ(0, strcmp("konto", *exception_value)); 5042 CHECK_EQ(0, strcmp("konto", *exception_value));
5043 } 5043 }
5044 5044
5045 5045
5046 void CThrowCountDown(const v8::FunctionCallbackInfo<v8::Value>& args) { 5046 void CThrowCountDown(const v8::FunctionCallbackInfo<v8::Value>& args) {
5047 ApiTestFuzzer::Fuzz(); 5047 ApiTestFuzzer::Fuzz();
5048 CHECK_EQ(4, args.Length()); 5048 CHECK_EQ(4, args.Length());
5049 int count = args[0]->Int32Value(); 5049 int count = args[0]->Int32Value();
5050 int cInterval = args[2]->Int32Value(); 5050 int cInterval = args[2]->Int32Value();
5051 if (count == 0) { 5051 if (count == 0) {
5052 args.GetIsolate()->ThrowException(v8_str("FromC")); 5052 args.GetIsolate()->ThrowException(v8_str("FromC"));
5053 return; 5053 return;
5054 } else { 5054 } else {
5055 Local<v8::Object> global = args.GetIsolate()->GetCurrentContext()->Global(); 5055 Local<v8::Object> global = args.GetIsolate()->GetCurrentContext()->Global();
5056 Local<Value> fun = global->Get(v8_str("JSThrowCountDown")); 5056 Local<Value> fun = global->Get(v8_str("JSThrowCountDown"));
5057 v8::Handle<Value> argv[] = {v8_num(count - 1), args[1], args[2], args[3]}; 5057 v8::Handle<Value> argv[] = {v8_num(count - 1), args[1], args[2], args[3]};
5058 if (count % cInterval == 0) { 5058 if (count % cInterval == 0) {
5059 v8::TryCatch try_catch; 5059 v8::TryCatch try_catch(args.GetIsolate());
5060 Local<Value> result = fun.As<Function>()->Call(global, 4, argv); 5060 Local<Value> result = fun.As<Function>()->Call(global, 4, argv);
5061 int expected = args[3]->Int32Value(); 5061 int expected = args[3]->Int32Value();
5062 if (try_catch.HasCaught()) { 5062 if (try_catch.HasCaught()) {
5063 CHECK_EQ(expected, count); 5063 CHECK_EQ(expected, count);
5064 CHECK(result.IsEmpty()); 5064 CHECK(result.IsEmpty());
5065 CHECK(!CcTest::i_isolate()->has_scheduled_exception()); 5065 CHECK(!CcTest::i_isolate()->has_scheduled_exception());
5066 } else { 5066 } else {
5067 CHECK_NE(expected, count); 5067 CHECK_NE(expected, count);
5068 } 5068 }
5069 args.GetReturnValue().Set(result); 5069 args.GetReturnValue().Set(result);
(...skipping 16 matching lines...) Expand all
5086 CHECK_EQ(count, expected); 5086 CHECK_EQ(count, expected);
5087 } else { 5087 } else {
5088 CHECK_NE(count, expected); 5088 CHECK_NE(count, expected);
5089 } 5089 }
5090 } 5090 }
5091 5091
5092 5092
5093 THREADED_TEST(EvalInTryFinally) { 5093 THREADED_TEST(EvalInTryFinally) {
5094 LocalContext context; 5094 LocalContext context;
5095 v8::HandleScope scope(context->GetIsolate()); 5095 v8::HandleScope scope(context->GetIsolate());
5096 v8::TryCatch try_catch; 5096 v8::TryCatch try_catch(context->GetIsolate());
5097 CompileRun( 5097 CompileRun(
5098 "(function() {" 5098 "(function() {"
5099 " try {" 5099 " try {"
5100 " eval('asldkf (*&^&*^');" 5100 " eval('asldkf (*&^&*^');"
5101 " } finally {" 5101 " } finally {"
5102 " return;" 5102 " return;"
5103 " }" 5103 " }"
5104 "})()"); 5104 "})()");
5105 CHECK(!try_catch.HasCaught()); 5105 CHECK(!try_catch.HasCaught());
5106 } 5106 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
5214 CHECK(result->Get(v8::Integer::New(isolate, 2))->IsNumber()); 5214 CHECK(result->Get(v8::Integer::New(isolate, 2))->IsNumber());
5215 CHECK_EQ(0, result->Get(v8::Integer::New(isolate, 2))->Int32Value()); 5215 CHECK_EQ(0, result->Get(v8::Integer::New(isolate, 2))->Int32Value());
5216 CHECK(result->Get(v8::Integer::New(isolate, 3))->IsNull()); 5216 CHECK(result->Get(v8::Integer::New(isolate, 3))->IsNull());
5217 CHECK(result->Get(v8::Integer::New(isolate, 4))->IsUndefined()); 5217 CHECK(result->Get(v8::Integer::New(isolate, 4))->IsUndefined());
5218 } 5218 }
5219 5219
5220 5220
5221 THREADED_TEST(CatchZero) { 5221 THREADED_TEST(CatchZero) {
5222 LocalContext context; 5222 LocalContext context;
5223 v8::HandleScope scope(context->GetIsolate()); 5223 v8::HandleScope scope(context->GetIsolate());
5224 v8::TryCatch try_catch; 5224 v8::TryCatch try_catch(context->GetIsolate());
5225 CHECK(!try_catch.HasCaught()); 5225 CHECK(!try_catch.HasCaught());
5226 CompileRun("throw 10"); 5226 CompileRun("throw 10");
5227 CHECK(try_catch.HasCaught()); 5227 CHECK(try_catch.HasCaught());
5228 CHECK_EQ(10, try_catch.Exception()->Int32Value()); 5228 CHECK_EQ(10, try_catch.Exception()->Int32Value());
5229 try_catch.Reset(); 5229 try_catch.Reset();
5230 CHECK(!try_catch.HasCaught()); 5230 CHECK(!try_catch.HasCaught());
5231 CompileRun("throw 0"); 5231 CompileRun("throw 0");
5232 CHECK(try_catch.HasCaught()); 5232 CHECK(try_catch.HasCaught());
5233 CHECK_EQ(0, try_catch.Exception()->Int32Value()); 5233 CHECK_EQ(0, try_catch.Exception()->Int32Value());
5234 } 5234 }
5235 5235
5236 5236
5237 THREADED_TEST(CatchExceptionFromWith) { 5237 THREADED_TEST(CatchExceptionFromWith) {
5238 LocalContext context; 5238 LocalContext context;
5239 v8::HandleScope scope(context->GetIsolate()); 5239 v8::HandleScope scope(context->GetIsolate());
5240 v8::TryCatch try_catch; 5240 v8::TryCatch try_catch(context->GetIsolate());
5241 CHECK(!try_catch.HasCaught()); 5241 CHECK(!try_catch.HasCaught());
5242 CompileRun("var o = {}; with (o) { throw 42; }"); 5242 CompileRun("var o = {}; with (o) { throw 42; }");
5243 CHECK(try_catch.HasCaught()); 5243 CHECK(try_catch.HasCaught());
5244 } 5244 }
5245 5245
5246 5246
5247 THREADED_TEST(TryCatchAndFinallyHidingException) { 5247 THREADED_TEST(TryCatchAndFinallyHidingException) {
5248 LocalContext context; 5248 LocalContext context;
5249 v8::HandleScope scope(context->GetIsolate()); 5249 v8::HandleScope scope(context->GetIsolate());
5250 v8::TryCatch try_catch; 5250 v8::TryCatch try_catch(context->GetIsolate());
5251 CHECK(!try_catch.HasCaught()); 5251 CHECK(!try_catch.HasCaught());
5252 CompileRun("function f(k) { try { this[k]; } finally { return 0; } };"); 5252 CompileRun("function f(k) { try { this[k]; } finally { return 0; } };");
5253 CompileRun("f({toString: function() { throw 42; }});"); 5253 CompileRun("f({toString: function() { throw 42; }});");
5254 CHECK(!try_catch.HasCaught()); 5254 CHECK(!try_catch.HasCaught());
5255 } 5255 }
5256 5256
5257 5257
5258 void WithTryCatch(const v8::FunctionCallbackInfo<v8::Value>& args) { 5258 void WithTryCatch(const v8::FunctionCallbackInfo<v8::Value>& args) {
5259 v8::TryCatch try_catch; 5259 v8::TryCatch try_catch(args.GetIsolate());
5260 } 5260 }
5261 5261
5262 5262
5263 THREADED_TEST(TryCatchAndFinally) { 5263 THREADED_TEST(TryCatchAndFinally) {
5264 LocalContext context; 5264 LocalContext context;
5265 v8::Isolate* isolate = context->GetIsolate(); 5265 v8::Isolate* isolate = context->GetIsolate();
5266 v8::HandleScope scope(isolate); 5266 v8::HandleScope scope(isolate);
5267 context->Global()->Set( 5267 context->Global()->Set(
5268 v8_str("native_with_try_catch"), 5268 v8_str("native_with_try_catch"),
5269 v8::FunctionTemplate::New(isolate, WithTryCatch)->GetFunction()); 5269 v8::FunctionTemplate::New(isolate, WithTryCatch)->GetFunction());
5270 v8::TryCatch try_catch; 5270 v8::TryCatch try_catch(isolate);
5271 CHECK(!try_catch.HasCaught()); 5271 CHECK(!try_catch.HasCaught());
5272 CompileRun( 5272 CompileRun(
5273 "try {\n" 5273 "try {\n"
5274 " throw new Error('a');\n" 5274 " throw new Error('a');\n"
5275 "} finally {\n" 5275 "} finally {\n"
5276 " native_with_try_catch();\n" 5276 " native_with_try_catch();\n"
5277 "}\n"); 5277 "}\n");
5278 CHECK(try_catch.HasCaught()); 5278 CHECK(try_catch.HasCaught());
5279 } 5279 }
5280 5280
5281 5281
5282 static void TryCatchNested1Helper(int depth) { 5282 static void TryCatchNested1Helper(int depth) {
5283 if (depth > 0) { 5283 if (depth > 0) {
5284 v8::TryCatch try_catch; 5284 v8::TryCatch try_catch(CcTest::isolate());
5285 try_catch.SetVerbose(true); 5285 try_catch.SetVerbose(true);
5286 TryCatchNested1Helper(depth - 1); 5286 TryCatchNested1Helper(depth - 1);
5287 CHECK(try_catch.HasCaught()); 5287 CHECK(try_catch.HasCaught());
5288 try_catch.ReThrow(); 5288 try_catch.ReThrow();
5289 } else { 5289 } else {
5290 CcTest::isolate()->ThrowException(v8_str("E1")); 5290 CcTest::isolate()->ThrowException(v8_str("E1"));
5291 } 5291 }
5292 } 5292 }
5293 5293
5294 5294
5295 static void TryCatchNested2Helper(int depth) { 5295 static void TryCatchNested2Helper(int depth) {
5296 if (depth > 0) { 5296 if (depth > 0) {
5297 v8::TryCatch try_catch; 5297 v8::TryCatch try_catch(CcTest::isolate());
5298 try_catch.SetVerbose(true); 5298 try_catch.SetVerbose(true);
5299 TryCatchNested2Helper(depth - 1); 5299 TryCatchNested2Helper(depth - 1);
5300 CHECK(try_catch.HasCaught()); 5300 CHECK(try_catch.HasCaught());
5301 try_catch.ReThrow(); 5301 try_catch.ReThrow();
5302 } else { 5302 } else {
5303 CompileRun("throw 'E2';"); 5303 CompileRun("throw 'E2';");
5304 } 5304 }
5305 } 5305 }
5306 5306
5307 5307
5308 TEST(TryCatchNested) { 5308 TEST(TryCatchNested) {
5309 v8::V8::Initialize(); 5309 v8::V8::Initialize();
5310 LocalContext context; 5310 LocalContext context;
5311 v8::HandleScope scope(context->GetIsolate()); 5311 v8::HandleScope scope(context->GetIsolate());
5312 5312
5313 { 5313 {
5314 // Test nested try-catch with a native throw in the end. 5314 // Test nested try-catch with a native throw in the end.
5315 v8::TryCatch try_catch; 5315 v8::TryCatch try_catch(context->GetIsolate());
5316 TryCatchNested1Helper(5); 5316 TryCatchNested1Helper(5);
5317 CHECK(try_catch.HasCaught()); 5317 CHECK(try_catch.HasCaught());
5318 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(try_catch.Exception()), "E1")); 5318 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(try_catch.Exception()), "E1"));
5319 } 5319 }
5320 5320
5321 { 5321 {
5322 // Test nested try-catch with a JavaScript throw in the end. 5322 // Test nested try-catch with a JavaScript throw in the end.
5323 v8::TryCatch try_catch; 5323 v8::TryCatch try_catch(context->GetIsolate());
5324 TryCatchNested2Helper(5); 5324 TryCatchNested2Helper(5);
5325 CHECK(try_catch.HasCaught()); 5325 CHECK(try_catch.HasCaught());
5326 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(try_catch.Exception()), "E2")); 5326 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(try_catch.Exception()), "E2"));
5327 } 5327 }
5328 } 5328 }
5329 5329
5330 5330
5331 void TryCatchMixedNestingCheck(v8::TryCatch* try_catch) { 5331 void TryCatchMixedNestingCheck(v8::TryCatch* try_catch) {
5332 CHECK(try_catch->HasCaught()); 5332 CHECK(try_catch->HasCaught());
5333 Handle<Message> message = try_catch->Message(); 5333 Handle<Message> message = try_catch->Message();
5334 Handle<Value> resource = message->GetScriptOrigin().ResourceName(); 5334 Handle<Value> resource = message->GetScriptOrigin().ResourceName();
5335 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(resource), "inner")); 5335 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(resource), "inner"));
5336 CHECK_EQ(0, 5336 CHECK_EQ(0,
5337 strcmp(*v8::String::Utf8Value(message->Get()), "Uncaught Error: a")); 5337 strcmp(*v8::String::Utf8Value(message->Get()), "Uncaught Error: a"));
5338 CHECK_EQ(1, message->GetLineNumber()); 5338 CHECK_EQ(1, message->GetLineNumber());
5339 CHECK_EQ(0, message->GetStartColumn()); 5339 CHECK_EQ(0, message->GetStartColumn());
5340 } 5340 }
5341 5341
5342 5342
5343 void TryCatchMixedNestingHelper( 5343 void TryCatchMixedNestingHelper(
5344 const v8::FunctionCallbackInfo<v8::Value>& args) { 5344 const v8::FunctionCallbackInfo<v8::Value>& args) {
5345 ApiTestFuzzer::Fuzz(); 5345 ApiTestFuzzer::Fuzz();
5346 v8::TryCatch try_catch; 5346 v8::TryCatch try_catch(args.GetIsolate());
5347 CompileRunWithOrigin("throw new Error('a');\n", "inner", 0, 0); 5347 CompileRunWithOrigin("throw new Error('a');\n", "inner", 0, 0);
5348 CHECK(try_catch.HasCaught()); 5348 CHECK(try_catch.HasCaught());
5349 TryCatchMixedNestingCheck(&try_catch); 5349 TryCatchMixedNestingCheck(&try_catch);
5350 try_catch.ReThrow(); 5350 try_catch.ReThrow();
5351 } 5351 }
5352 5352
5353 5353
5354 // This test ensures that an outer TryCatch in the following situation: 5354 // This test ensures that an outer TryCatch in the following situation:
5355 // C++/TryCatch -> JS -> C++/TryCatch -> JS w/ SyntaxError 5355 // C++/TryCatch -> JS -> C++/TryCatch -> JS w/ SyntaxError
5356 // does not clobber the Message object generated for the inner TryCatch. 5356 // does not clobber the Message object generated for the inner TryCatch.
5357 // This exercises the ability of TryCatch.ReThrow() to restore the 5357 // This exercises the ability of TryCatch.ReThrow() to restore the
5358 // inner pending Message before throwing the exception again. 5358 // inner pending Message before throwing the exception again.
5359 TEST(TryCatchMixedNesting) { 5359 TEST(TryCatchMixedNesting) {
5360 v8::Isolate* isolate = CcTest::isolate(); 5360 v8::Isolate* isolate = CcTest::isolate();
5361 v8::HandleScope scope(isolate); 5361 v8::HandleScope scope(isolate);
5362 v8::V8::Initialize(); 5362 v8::V8::Initialize();
5363 v8::TryCatch try_catch; 5363 v8::TryCatch try_catch(isolate);
5364 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 5364 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
5365 templ->Set(v8_str("TryCatchMixedNestingHelper"), 5365 templ->Set(v8_str("TryCatchMixedNestingHelper"),
5366 v8::FunctionTemplate::New(isolate, TryCatchMixedNestingHelper)); 5366 v8::FunctionTemplate::New(isolate, TryCatchMixedNestingHelper));
5367 LocalContext context(0, templ); 5367 LocalContext context(0, templ);
5368 CompileRunWithOrigin("TryCatchMixedNestingHelper();\n", "outer", 1, 1); 5368 CompileRunWithOrigin("TryCatchMixedNestingHelper();\n", "outer", 1, 1);
5369 TryCatchMixedNestingCheck(&try_catch); 5369 TryCatchMixedNestingCheck(&try_catch);
5370 } 5370 }
5371 5371
5372 5372
5373 void TryCatchNativeHelper(const v8::FunctionCallbackInfo<v8::Value>& args) { 5373 void TryCatchNativeHelper(const v8::FunctionCallbackInfo<v8::Value>& args) {
5374 ApiTestFuzzer::Fuzz(); 5374 ApiTestFuzzer::Fuzz();
5375 v8::TryCatch try_catch; 5375 v8::TryCatch try_catch(args.GetIsolate());
5376 args.GetIsolate()->ThrowException(v8_str("boom")); 5376 args.GetIsolate()->ThrowException(v8_str("boom"));
5377 CHECK(try_catch.HasCaught()); 5377 CHECK(try_catch.HasCaught());
5378 } 5378 }
5379 5379
5380 5380
5381 TEST(TryCatchNative) { 5381 TEST(TryCatchNative) {
5382 v8::Isolate* isolate = CcTest::isolate(); 5382 v8::Isolate* isolate = CcTest::isolate();
5383 v8::HandleScope scope(isolate); 5383 v8::HandleScope scope(isolate);
5384 v8::V8::Initialize(); 5384 v8::V8::Initialize();
5385 v8::TryCatch try_catch; 5385 v8::TryCatch try_catch(isolate);
5386 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 5386 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
5387 templ->Set(v8_str("TryCatchNativeHelper"), 5387 templ->Set(v8_str("TryCatchNativeHelper"),
5388 v8::FunctionTemplate::New(isolate, TryCatchNativeHelper)); 5388 v8::FunctionTemplate::New(isolate, TryCatchNativeHelper));
5389 LocalContext context(0, templ); 5389 LocalContext context(0, templ);
5390 CompileRun("TryCatchNativeHelper();"); 5390 CompileRun("TryCatchNativeHelper();");
5391 CHECK(!try_catch.HasCaught()); 5391 CHECK(!try_catch.HasCaught());
5392 } 5392 }
5393 5393
5394 5394
5395 void TryCatchNativeResetHelper( 5395 void TryCatchNativeResetHelper(
5396 const v8::FunctionCallbackInfo<v8::Value>& args) { 5396 const v8::FunctionCallbackInfo<v8::Value>& args) {
5397 ApiTestFuzzer::Fuzz(); 5397 ApiTestFuzzer::Fuzz();
5398 v8::TryCatch try_catch; 5398 v8::TryCatch try_catch(args.GetIsolate());
5399 args.GetIsolate()->ThrowException(v8_str("boom")); 5399 args.GetIsolate()->ThrowException(v8_str("boom"));
5400 CHECK(try_catch.HasCaught()); 5400 CHECK(try_catch.HasCaught());
5401 try_catch.Reset(); 5401 try_catch.Reset();
5402 CHECK(!try_catch.HasCaught()); 5402 CHECK(!try_catch.HasCaught());
5403 } 5403 }
5404 5404
5405 5405
5406 TEST(TryCatchNativeReset) { 5406 TEST(TryCatchNativeReset) {
5407 v8::Isolate* isolate = CcTest::isolate(); 5407 v8::Isolate* isolate = CcTest::isolate();
5408 v8::HandleScope scope(isolate); 5408 v8::HandleScope scope(isolate);
5409 v8::V8::Initialize(); 5409 v8::V8::Initialize();
5410 v8::TryCatch try_catch; 5410 v8::TryCatch try_catch(isolate);
5411 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 5411 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
5412 templ->Set(v8_str("TryCatchNativeResetHelper"), 5412 templ->Set(v8_str("TryCatchNativeResetHelper"),
5413 v8::FunctionTemplate::New(isolate, TryCatchNativeResetHelper)); 5413 v8::FunctionTemplate::New(isolate, TryCatchNativeResetHelper));
5414 LocalContext context(0, templ); 5414 LocalContext context(0, templ);
5415 CompileRun("TryCatchNativeResetHelper();"); 5415 CompileRun("TryCatchNativeResetHelper();");
5416 CHECK(!try_catch.HasCaught()); 5416 CHECK(!try_catch.HasCaught());
5417 } 5417 }
5418 5418
5419 5419
5420 THREADED_TEST(Equality) { 5420 THREADED_TEST(Equality) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
5526 "var desc = { get: function(){return 43; }," 5526 "var desc = { get: function(){return 43; },"
5527 " configurable: false };" 5527 " configurable: false };"
5528 "Object.defineProperty(obj, 'x', desc);" 5528 "Object.defineProperty(obj, 'x', desc);"
5529 "obj.x"); 5529 "obj.x");
5530 result = script_define->Run(); 5530 result = script_define->Run();
5531 CHECK(result->Equals(v8_num(43))); 5531 CHECK(result->Equals(v8_num(43)));
5532 result = script_desc->Run(); 5532 result = script_desc->Run();
5533 CHECK_EQ(result->BooleanValue(), false); 5533 CHECK_EQ(result->BooleanValue(), false);
5534 5534
5535 // Make sure that it is not possible to redefine again 5535 // Make sure that it is not possible to redefine again
5536 v8::TryCatch try_catch; 5536 v8::TryCatch try_catch(isolate);
5537 result = script_define->Run(); 5537 result = script_define->Run();
5538 CHECK(try_catch.HasCaught()); 5538 CHECK(try_catch.HasCaught());
5539 String::Utf8Value exception_value(try_catch.Exception()); 5539 String::Utf8Value exception_value(try_catch.Exception());
5540 CHECK_EQ(0, 5540 CHECK_EQ(0,
5541 strcmp(*exception_value, "TypeError: Cannot redefine property: x")); 5541 strcmp(*exception_value, "TypeError: Cannot redefine property: x"));
5542 } 5542 }
5543 5543
5544 5544
5545 THREADED_TEST(DefinePropertyOnDefineGetterSetter) { 5545 THREADED_TEST(DefinePropertyOnDefineGetterSetter) {
5546 v8::Isolate* isolate = CcTest::isolate(); 5546 v8::Isolate* isolate = CcTest::isolate();
(...skipping 28 matching lines...) Expand all
5575 "var desc = {get: function(){return 43; }," 5575 "var desc = {get: function(){return 43; },"
5576 " configurable: false };" 5576 " configurable: false };"
5577 "Object.defineProperty(obj, 'x', desc);" 5577 "Object.defineProperty(obj, 'x', desc);"
5578 "obj.x"); 5578 "obj.x");
5579 result = script_define->Run(); 5579 result = script_define->Run();
5580 CHECK(result->Equals(v8_num(43))); 5580 CHECK(result->Equals(v8_num(43)));
5581 result = script_desc->Run(); 5581 result = script_desc->Run();
5582 5582
5583 CHECK_EQ(result->BooleanValue(), false); 5583 CHECK_EQ(result->BooleanValue(), false);
5584 5584
5585 v8::TryCatch try_catch; 5585 v8::TryCatch try_catch(isolate);
5586 result = script_define->Run(); 5586 result = script_define->Run();
5587 CHECK(try_catch.HasCaught()); 5587 CHECK(try_catch.HasCaught());
5588 String::Utf8Value exception_value(try_catch.Exception()); 5588 String::Utf8Value exception_value(try_catch.Exception());
5589 CHECK_EQ(0, 5589 CHECK_EQ(0,
5590 strcmp(*exception_value, "TypeError: Cannot redefine property: x")); 5590 strcmp(*exception_value, "TypeError: Cannot redefine property: x"));
5591 } 5591 }
5592 5592
5593 5593
5594 static v8::Handle<v8::Object> GetGlobalProperty(LocalContext* context, 5594 static v8::Handle<v8::Object> GetGlobalProperty(LocalContext* context,
5595 char const* name) { 5595 char const* name) {
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
5697 5697
5698 ExpectTrue("!Object.getOwnPropertyDescriptor(obj1, 'x').configurable"); 5698 ExpectTrue("!Object.getOwnPropertyDescriptor(obj1, 'x').configurable");
5699 ExpectTrue("!Object.getOwnPropertyDescriptor(obj2, 'x').configurable"); 5699 ExpectTrue("!Object.getOwnPropertyDescriptor(obj2, 'x').configurable");
5700 5700
5701 CHECK(!GetGlobalProperty(&context, "obj1") 5701 CHECK(!GetGlobalProperty(&context, "obj1")
5702 ->SetAccessor(v8_str("x"), GetXValue, NULL, v8_str("donut"))); 5702 ->SetAccessor(v8_str("x"), GetXValue, NULL, v8_str("donut")));
5703 CHECK(!GetGlobalProperty(&context, "obj2") 5703 CHECK(!GetGlobalProperty(&context, "obj2")
5704 ->SetAccessor(v8_str("x"), GetXValue, NULL, v8_str("donut"))); 5704 ->SetAccessor(v8_str("x"), GetXValue, NULL, v8_str("donut")));
5705 5705
5706 { 5706 {
5707 v8::TryCatch try_catch; 5707 v8::TryCatch try_catch(isolate);
5708 CompileRun( 5708 CompileRun(
5709 "Object.defineProperty(obj1, 'x'," 5709 "Object.defineProperty(obj1, 'x',"
5710 "{get: function() { return 'func'; }})"); 5710 "{get: function() { return 'func'; }})");
5711 CHECK(try_catch.HasCaught()); 5711 CHECK(try_catch.HasCaught());
5712 String::Utf8Value exception_value(try_catch.Exception()); 5712 String::Utf8Value exception_value(try_catch.Exception());
5713 CHECK_EQ( 5713 CHECK_EQ(
5714 0, strcmp(*exception_value, "TypeError: Cannot redefine property: x")); 5714 0, strcmp(*exception_value, "TypeError: Cannot redefine property: x"));
5715 } 5715 }
5716 { 5716 {
5717 v8::TryCatch try_catch; 5717 v8::TryCatch try_catch(isolate);
5718 CompileRun( 5718 CompileRun(
5719 "Object.defineProperty(obj2, 'x'," 5719 "Object.defineProperty(obj2, 'x',"
5720 "{get: function() { return 'func'; }})"); 5720 "{get: function() { return 'func'; }})");
5721 CHECK(try_catch.HasCaught()); 5721 CHECK(try_catch.HasCaught());
5722 String::Utf8Value exception_value(try_catch.Exception()); 5722 String::Utf8Value exception_value(try_catch.Exception());
5723 CHECK_EQ( 5723 CHECK_EQ(
5724 0, strcmp(*exception_value, "TypeError: Cannot redefine property: x")); 5724 0, strcmp(*exception_value, "TypeError: Cannot redefine property: x"));
5725 } 5725 }
5726 } 5726 }
5727 5727
(...skipping 1764 matching lines...) Expand 10 before | Expand all | Expand 10 after
7492 v8::Handle<String> foo_str = v8_str("foo"); 7492 v8::Handle<String> foo_str = v8_str("foo");
7493 v8::Handle<String> message_str = v8_str("message"); 7493 v8::Handle<String> message_str = v8_str("message");
7494 7494
7495 v8::V8::SetCaptureStackTraceForUncaughtExceptions(true); 7495 v8::V8::SetCaptureStackTraceForUncaughtExceptions(true);
7496 7496
7497 Local<v8::FunctionTemplate> fun = 7497 Local<v8::FunctionTemplate> fun =
7498 v8::FunctionTemplate::New(context->GetIsolate(), ThrowV8Exception); 7498 v8::FunctionTemplate::New(context->GetIsolate(), ThrowV8Exception);
7499 v8::Local<v8::Object> global = context->Global(); 7499 v8::Local<v8::Object> global = context->Global();
7500 global->Set(v8_str("throwV8Exception"), fun->GetFunction()); 7500 global->Set(v8_str("throwV8Exception"), fun->GetFunction());
7501 7501
7502 TryCatch try_catch; 7502 TryCatch try_catch(context->GetIsolate());
7503 CompileRun( 7503 CompileRun(
7504 "function f1() {\n" 7504 "function f1() {\n"
7505 " throwV8Exception();\n" 7505 " throwV8Exception();\n"
7506 "};\n" 7506 "};\n"
7507 "f1();"); 7507 "f1();");
7508 CHECK(try_catch.HasCaught()); 7508 CHECK(try_catch.HasCaught());
7509 7509
7510 v8::Handle<v8::Value> error = try_catch.Exception(); 7510 v8::Handle<v8::Value> error = try_catch.Exception();
7511 CHECK(error->IsObject()); 7511 CHECK(error->IsObject());
7512 CHECK(error.As<v8::Object>()->Get(message_str)->Equals(foo_str)); 7512 CHECK(error.As<v8::Object>()->Get(message_str)->Equals(foo_str));
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
7726 Local<Value> trouble = global->Get(v8_str("trouble")); 7726 Local<Value> trouble = global->Get(v8_str("trouble"));
7727 CHECK(trouble->IsFunction()); 7727 CHECK(trouble->IsFunction());
7728 Function::Cast(*trouble)->Call(global, 0, NULL); 7728 Function::Cast(*trouble)->Call(global, 0, NULL);
7729 v8::V8::RemoveMessageListeners(ExceptionInNativeScriptTestListener); 7729 v8::V8::RemoveMessageListeners(ExceptionInNativeScriptTestListener);
7730 } 7730 }
7731 7731
7732 7732
7733 TEST(CompilationErrorUsingTryCatchHandler) { 7733 TEST(CompilationErrorUsingTryCatchHandler) {
7734 LocalContext env; 7734 LocalContext env;
7735 v8::HandleScope scope(env->GetIsolate()); 7735 v8::HandleScope scope(env->GetIsolate());
7736 v8::TryCatch try_catch; 7736 v8::TryCatch try_catch(env->GetIsolate());
7737 v8_compile("This doesn't &*&@#$&*^ compile."); 7737 v8_compile("This doesn't &*&@#$&*^ compile.");
7738 CHECK(*try_catch.Exception()); 7738 CHECK(*try_catch.Exception());
7739 CHECK(try_catch.HasCaught()); 7739 CHECK(try_catch.HasCaught());
7740 } 7740 }
7741 7741
7742 7742
7743 TEST(TryCatchFinallyUsingTryCatchHandler) { 7743 TEST(TryCatchFinallyUsingTryCatchHandler) {
7744 LocalContext env; 7744 LocalContext env;
7745 v8::HandleScope scope(env->GetIsolate()); 7745 v8::HandleScope scope(env->GetIsolate());
7746 v8::TryCatch try_catch; 7746 v8::TryCatch try_catch(env->GetIsolate());
7747 CompileRun("try { throw ''; } catch (e) {}"); 7747 CompileRun("try { throw ''; } catch (e) {}");
7748 CHECK(!try_catch.HasCaught()); 7748 CHECK(!try_catch.HasCaught());
7749 CompileRun("try { throw ''; } finally {}"); 7749 CompileRun("try { throw ''; } finally {}");
7750 CHECK(try_catch.HasCaught()); 7750 CHECK(try_catch.HasCaught());
7751 try_catch.Reset(); 7751 try_catch.Reset();
7752 CompileRun( 7752 CompileRun(
7753 "(function() {" 7753 "(function() {"
7754 "try { throw ''; } finally { return; }" 7754 "try { throw ''; } finally { return; }"
7755 "})()"); 7755 "})()");
7756 CHECK(!try_catch.HasCaught()); 7756 CHECK(!try_catch.HasCaught());
(...skipping 11 matching lines...) Expand all
7768 } 7768 }
7769 7769
7770 7770
7771 TEST(TryCatchFinallyStoresMessageUsingTryCatchHandler) { 7771 TEST(TryCatchFinallyStoresMessageUsingTryCatchHandler) {
7772 v8::Isolate* isolate = CcTest::isolate(); 7772 v8::Isolate* isolate = CcTest::isolate();
7773 v8::HandleScope scope(isolate); 7773 v8::HandleScope scope(isolate);
7774 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 7774 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
7775 templ->Set(v8_str("CEvaluate"), 7775 templ->Set(v8_str("CEvaluate"),
7776 v8::FunctionTemplate::New(isolate, CEvaluate)); 7776 v8::FunctionTemplate::New(isolate, CEvaluate));
7777 LocalContext context(0, templ); 7777 LocalContext context(0, templ);
7778 v8::TryCatch try_catch; 7778 v8::TryCatch try_catch(isolate);
7779 CompileRun("try {" 7779 CompileRun("try {"
7780 " CEvaluate('throw 1;');" 7780 " CEvaluate('throw 1;');"
7781 "} finally {" 7781 "} finally {"
7782 "}"); 7782 "}");
7783 CHECK(try_catch.HasCaught()); 7783 CHECK(try_catch.HasCaught());
7784 CHECK(!try_catch.Message().IsEmpty()); 7784 CHECK(!try_catch.Message().IsEmpty());
7785 String::Utf8Value exception_value(try_catch.Exception()); 7785 String::Utf8Value exception_value(try_catch.Exception());
7786 CHECK_EQ(0, strcmp(*exception_value, "1")); 7786 CHECK_EQ(0, strcmp(*exception_value, "1"));
7787 try_catch.Reset(); 7787 try_catch.Reset();
7788 CompileRun("try {" 7788 CompileRun("try {"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
7895 Context::Scope scope_env2(env2); 7895 Context::Scope scope_env2(env2);
7896 Local<Value> result = Function::Cast(*spy)->Call(env2->Global(), 0, NULL); 7896 Local<Value> result = Function::Cast(*spy)->Call(env2->Global(), 0, NULL);
7897 CHECK(result->IsFunction()); 7897 CHECK(result->IsFunction());
7898 } 7898 }
7899 7899
7900 { 7900 {
7901 env2->SetSecurityToken(bar); 7901 env2->SetSecurityToken(bar);
7902 Context::Scope scope_env2(env2); 7902 Context::Scope scope_env2(env2);
7903 7903
7904 // Call cross_domain_call, it should throw an exception 7904 // Call cross_domain_call, it should throw an exception
7905 v8::TryCatch try_catch; 7905 v8::TryCatch try_catch(env1->GetIsolate());
7906 Function::Cast(*spy2)->Call(env2->Global(), 0, NULL); 7906 Function::Cast(*spy2)->Call(env2->Global(), 0, NULL);
7907 CHECK(try_catch.HasCaught()); 7907 CHECK(try_catch.HasCaught());
7908 } 7908 }
7909 } 7909 }
7910 7910
7911 7911
7912 // Regression test case for issue 1183439. 7912 // Regression test case for issue 1183439.
7913 THREADED_TEST(SecurityChecksForPrototypeChain) { 7913 THREADED_TEST(SecurityChecksForPrototypeChain) {
7914 LocalContext current; 7914 LocalContext current;
7915 v8::HandleScope scope(current->GetIsolate()); 7915 v8::HandleScope scope(current->GetIsolate());
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
8147 CHECK(global3->Get(v8_str("prop"))->IsUndefined()); 8147 CHECK(global3->Get(v8_str("prop"))->IsUndefined());
8148 CHECK(global3->Get(v8_str("getProp"))->IsUndefined()); 8148 CHECK(global3->Get(v8_str("getProp"))->IsUndefined());
8149 global3->Set(v8_str("prop"), v8::Integer::New(env3->GetIsolate(), -1)); 8149 global3->Set(v8_str("prop"), v8::Integer::New(env3->GetIsolate(), -1));
8150 global3->Set(v8_str("prop2"), v8::Integer::New(env3->GetIsolate(), 2)); 8150 global3->Set(v8_str("prop2"), v8::Integer::New(env3->GetIsolate(), 2));
8151 env3->Exit(); 8151 env3->Exit();
8152 8152
8153 // Call getProp in env1, and it should return the value 1 8153 // Call getProp in env1, and it should return the value 1
8154 { 8154 {
8155 Local<Value> get_prop = global1->Get(v8_str("getProp")); 8155 Local<Value> get_prop = global1->Get(v8_str("getProp"));
8156 CHECK(get_prop->IsFunction()); 8156 CHECK(get_prop->IsFunction());
8157 v8::TryCatch try_catch; 8157 v8::TryCatch try_catch(env1->GetIsolate());
8158 Local<Value> r = Function::Cast(*get_prop)->Call(global1, 0, NULL); 8158 Local<Value> r = Function::Cast(*get_prop)->Call(global1, 0, NULL);
8159 CHECK(!try_catch.HasCaught()); 8159 CHECK(!try_catch.HasCaught());
8160 CHECK_EQ(1, r->Int32Value()); 8160 CHECK_EQ(1, r->Int32Value());
8161 } 8161 }
8162 8162
8163 // Check that env3 is not accessible from env1 8163 // Check that env3 is not accessible from env1
8164 { 8164 {
8165 Local<Value> r = global3->Get(v8_str("prop2")); 8165 Local<Value> r = global3->Get(v8_str("prop2"));
8166 CHECK(r.IsEmpty()); 8166 CHECK(r.IsEmpty());
8167 } 8167 }
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
8692 i::FLAG_harmony_object_literals = true; 8692 i::FLAG_harmony_object_literals = true;
8693 v8::Isolate* isolate = CcTest::isolate(); 8693 v8::Isolate* isolate = CcTest::isolate();
8694 v8::HandleScope handle_scope(isolate); 8694 v8::HandleScope handle_scope(isolate);
8695 v8::Handle<v8::ObjectTemplate> obj_template = 8695 v8::Handle<v8::ObjectTemplate> obj_template =
8696 v8::ObjectTemplate::New(isolate); 8696 v8::ObjectTemplate::New(isolate);
8697 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL); 8697 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL);
8698 LocalContext env; 8698 LocalContext env;
8699 env->Global()->Set(v8_str("prohibited"), obj_template->NewInstance()); 8699 env->Global()->Set(v8_str("prohibited"), obj_template->NewInstance());
8700 8700
8701 { 8701 {
8702 v8::TryCatch try_catch; 8702 v8::TryCatch try_catch(isolate);
8703 CompileRun( 8703 CompileRun(
8704 "var f = { m() { return super.hasOwnProperty; } }.m;" 8704 "var f = { m() { return super.hasOwnProperty; } }.m;"
8705 "var m = %ToMethod(f, prohibited);" 8705 "var m = %ToMethod(f, prohibited);"
8706 "m();"); 8706 "m();");
8707 CHECK(try_catch.HasCaught()); 8707 CHECK(try_catch.HasCaught());
8708 } 8708 }
8709 8709
8710 { 8710 {
8711 v8::TryCatch try_catch; 8711 v8::TryCatch try_catch(isolate);
8712 CompileRun( 8712 CompileRun(
8713 "var f = {m() { return super[42]; } }.m;" 8713 "var f = {m() { return super[42]; } }.m;"
8714 "var m = %ToMethod(f, prohibited);" 8714 "var m = %ToMethod(f, prohibited);"
8715 "m();"); 8715 "m();");
8716 CHECK(try_catch.HasCaught()); 8716 CHECK(try_catch.HasCaught());
8717 } 8717 }
8718 8718
8719 { 8719 {
8720 v8::TryCatch try_catch; 8720 v8::TryCatch try_catch(isolate);
8721 CompileRun( 8721 CompileRun(
8722 "var f = {m() { super.hasOwnProperty = function () {}; } }.m;" 8722 "var f = {m() { super.hasOwnProperty = function () {}; } }.m;"
8723 "var m = %ToMethod(f, prohibited);" 8723 "var m = %ToMethod(f, prohibited);"
8724 "m();"); 8724 "m();");
8725 CHECK(try_catch.HasCaught()); 8725 CHECK(try_catch.HasCaught());
8726 } 8726 }
8727 8727
8728 { 8728 {
8729 v8::TryCatch try_catch; 8729 v8::TryCatch try_catch(isolate);
8730 CompileRun( 8730 CompileRun(
8731 "Object.defineProperty(Object.prototype, 'x', { set : function(){}});" 8731 "Object.defineProperty(Object.prototype, 'x', { set : function(){}});"
8732 "var f = {" 8732 "var f = {"
8733 " m() { " 8733 " m() { "
8734 " 'use strict';" 8734 " 'use strict';"
8735 " super.x = function () {};" 8735 " super.x = function () {};"
8736 " }" 8736 " }"
8737 "}.m;" 8737 "}.m;"
8738 "var m = %ToMethod(f, prohibited);" 8738 "var m = %ToMethod(f, prohibited);"
8739 "m();"); 8739 "m();");
8740 CHECK(try_catch.HasCaught()); 8740 CHECK(try_catch.HasCaught());
8741 } 8741 }
8742 } 8742 }
8743 8743
8744 8744
8745 TEST(Regress470113) { 8745 TEST(Regress470113) {
8746 i::FLAG_harmony_classes = true; 8746 i::FLAG_harmony_classes = true;
8747 i::FLAG_harmony_object_literals = true; 8747 i::FLAG_harmony_object_literals = true;
8748 v8::Isolate* isolate = CcTest::isolate(); 8748 v8::Isolate* isolate = CcTest::isolate();
8749 v8::HandleScope handle_scope(isolate); 8749 v8::HandleScope handle_scope(isolate);
8750 v8::Handle<v8::ObjectTemplate> obj_template = 8750 v8::Handle<v8::ObjectTemplate> obj_template =
8751 v8::ObjectTemplate::New(isolate); 8751 v8::ObjectTemplate::New(isolate);
8752 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL); 8752 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL);
8753 LocalContext env; 8753 LocalContext env;
8754 env->Global()->Set(v8_str("prohibited"), obj_template->NewInstance()); 8754 env->Global()->Set(v8_str("prohibited"), obj_template->NewInstance());
8755 8755
8756 { 8756 {
8757 v8::TryCatch try_catch; 8757 v8::TryCatch try_catch(isolate);
8758 CompileRun( 8758 CompileRun(
8759 "'use strict';\n" 8759 "'use strict';\n"
8760 "class C extends Object {\n" 8760 "class C extends Object {\n"
8761 " m() { super.powned = 'Powned!'; }\n" 8761 " m() { super.powned = 'Powned!'; }\n"
8762 "}\n" 8762 "}\n"
8763 "let c = new C();\n" 8763 "let c = new C();\n"
8764 "c.m.call(prohibited)"); 8764 "c.m.call(prohibited)");
8765 8765
8766 CHECK(try_catch.HasCaught()); 8766 CHECK(try_catch.HasCaught());
8767 } 8767 }
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
9488 v8::HandleScope handle_scope(isolate); 9488 v8::HandleScope handle_scope(isolate);
9489 9489
9490 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate); 9490 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate);
9491 9491
9492 Local<v8::Object> o0 = t->GetFunction()->NewInstance(); 9492 Local<v8::Object> o0 = t->GetFunction()->NewInstance();
9493 Local<v8::Object> o1 = t->GetFunction()->NewInstance(); 9493 Local<v8::Object> o1 = t->GetFunction()->NewInstance();
9494 9494
9495 CHECK(o0->SetPrototype(o1)); 9495 CHECK(o0->SetPrototype(o1));
9496 // If setting the prototype leads to the cycle, SetPrototype should 9496 // If setting the prototype leads to the cycle, SetPrototype should
9497 // return false and keep VM in sane state. 9497 // return false and keep VM in sane state.
9498 v8::TryCatch try_catch; 9498 v8::TryCatch try_catch(isolate);
9499 CHECK(!o1->SetPrototype(o0)); 9499 CHECK(!o1->SetPrototype(o0));
9500 CHECK(!try_catch.HasCaught()); 9500 CHECK(!try_catch.HasCaught());
9501 DCHECK(!CcTest::i_isolate()->has_pending_exception()); 9501 DCHECK(!CcTest::i_isolate()->has_pending_exception());
9502 9502
9503 CHECK_EQ(42, CompileRun("function f() { return 42; }; f()")->Int32Value()); 9503 CHECK_EQ(42, CompileRun("function f() { return 42; }; f()")->Int32Value());
9504 } 9504 }
9505 9505
9506 9506
9507 THREADED_TEST(FunctionRemovePrototype) { 9507 THREADED_TEST(FunctionRemovePrototype) {
9508 LocalContext context; 9508 LocalContext context;
9509 v8::Isolate* isolate = context->GetIsolate(); 9509 v8::Isolate* isolate = context->GetIsolate();
9510 v8::HandleScope handle_scope(isolate); 9510 v8::HandleScope handle_scope(isolate);
9511 9511
9512 Local<v8::FunctionTemplate> t1 = v8::FunctionTemplate::New(isolate); 9512 Local<v8::FunctionTemplate> t1 = v8::FunctionTemplate::New(isolate);
9513 t1->RemovePrototype(); 9513 t1->RemovePrototype();
9514 Local<v8::Function> fun = t1->GetFunction(); 9514 Local<v8::Function> fun = t1->GetFunction();
9515 context->Global()->Set(v8_str("fun"), fun); 9515 context->Global()->Set(v8_str("fun"), fun);
9516 CHECK(!CompileRun("'prototype' in fun")->BooleanValue()); 9516 CHECK(!CompileRun("'prototype' in fun")->BooleanValue());
9517 9517
9518 v8::TryCatch try_catch; 9518 v8::TryCatch try_catch(isolate);
9519 CompileRun("new fun()"); 9519 CompileRun("new fun()");
9520 CHECK(try_catch.HasCaught()); 9520 CHECK(try_catch.HasCaught());
9521 9521
9522 try_catch.Reset(); 9522 try_catch.Reset();
9523 fun->NewInstance(); 9523 fun->NewInstance();
9524 CHECK(try_catch.HasCaught()); 9524 CHECK(try_catch.HasCaught());
9525 } 9525 }
9526 9526
9527 9527
9528 THREADED_TEST(GetterSetterExceptions) { 9528 THREADED_TEST(GetterSetterExceptions) {
9529 LocalContext context; 9529 LocalContext context;
9530 v8::Isolate* isolate = context->GetIsolate(); 9530 v8::Isolate* isolate = context->GetIsolate();
9531 v8::HandleScope handle_scope(isolate); 9531 v8::HandleScope handle_scope(isolate);
9532 CompileRun( 9532 CompileRun(
9533 "function Foo() { };" 9533 "function Foo() { };"
9534 "function Throw() { throw 5; };" 9534 "function Throw() { throw 5; };"
9535 "var x = { };" 9535 "var x = { };"
9536 "x.__defineSetter__('set', Throw);" 9536 "x.__defineSetter__('set', Throw);"
9537 "x.__defineGetter__('get', Throw);"); 9537 "x.__defineGetter__('get', Throw);");
9538 Local<v8::Object> x = 9538 Local<v8::Object> x =
9539 Local<v8::Object>::Cast(context->Global()->Get(v8_str("x"))); 9539 Local<v8::Object>::Cast(context->Global()->Get(v8_str("x")));
9540 v8::TryCatch try_catch; 9540 v8::TryCatch try_catch(isolate);
9541 x->Set(v8_str("set"), v8::Integer::New(isolate, 8)); 9541 x->Set(v8_str("set"), v8::Integer::New(isolate, 8));
9542 x->Get(v8_str("get")); 9542 x->Get(v8_str("get"));
9543 x->Set(v8_str("set"), v8::Integer::New(isolate, 8)); 9543 x->Set(v8_str("set"), v8::Integer::New(isolate, 8));
9544 x->Get(v8_str("get")); 9544 x->Get(v8_str("get"));
9545 x->Set(v8_str("set"), v8::Integer::New(isolate, 8)); 9545 x->Set(v8_str("set"), v8::Integer::New(isolate, 8));
9546 x->Get(v8_str("get")); 9546 x->Get(v8_str("get"));
9547 x->Set(v8_str("set"), v8::Integer::New(isolate, 8)); 9547 x->Set(v8_str("set"), v8::Integer::New(isolate, 8));
9548 x->Get(v8_str("get")); 9548 x->Get(v8_str("get"));
9549 } 9549 }
9550 9550
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
9596 THREADED_TEST(ConstructorForObject) { 9596 THREADED_TEST(ConstructorForObject) {
9597 LocalContext context; 9597 LocalContext context;
9598 v8::Isolate* isolate = context->GetIsolate(); 9598 v8::Isolate* isolate = context->GetIsolate();
9599 v8::HandleScope handle_scope(isolate); 9599 v8::HandleScope handle_scope(isolate);
9600 9600
9601 { 9601 {
9602 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate); 9602 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate);
9603 instance_template->SetCallAsFunctionHandler(ConstructorCallback); 9603 instance_template->SetCallAsFunctionHandler(ConstructorCallback);
9604 Local<Object> instance = instance_template->NewInstance(); 9604 Local<Object> instance = instance_template->NewInstance();
9605 context->Global()->Set(v8_str("obj"), instance); 9605 context->Global()->Set(v8_str("obj"), instance);
9606 v8::TryCatch try_catch; 9606 v8::TryCatch try_catch(isolate);
9607 Local<Value> value; 9607 Local<Value> value;
9608 CHECK(!try_catch.HasCaught()); 9608 CHECK(!try_catch.HasCaught());
9609 9609
9610 // Call the Object's constructor with a 32-bit signed integer. 9610 // Call the Object's constructor with a 32-bit signed integer.
9611 value = CompileRun("(function() { var o = new obj(28); return o.a; })()"); 9611 value = CompileRun("(function() { var o = new obj(28); return o.a; })()");
9612 CHECK(!try_catch.HasCaught()); 9612 CHECK(!try_catch.HasCaught());
9613 CHECK(value->IsInt32()); 9613 CHECK(value->IsInt32());
9614 CHECK_EQ(28, value->Int32Value()); 9614 CHECK_EQ(28, value->Int32Value());
9615 9615
9616 Local<Value> args1[] = {v8_num(28)}; 9616 Local<Value> args1[] = {v8_num(28)};
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
9672 value = object5->Get(v8_str("a")); 9672 value = object5->Get(v8_str("a"));
9673 CHECK(!try_catch.HasCaught()); 9673 CHECK(!try_catch.HasCaught());
9674 CHECK(value->IsNull()); 9674 CHECK(value->IsNull());
9675 } 9675 }
9676 9676
9677 // Check exception handling when there is no constructor set for the Object. 9677 // Check exception handling when there is no constructor set for the Object.
9678 { 9678 {
9679 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate); 9679 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate);
9680 Local<Object> instance = instance_template->NewInstance(); 9680 Local<Object> instance = instance_template->NewInstance();
9681 context->Global()->Set(v8_str("obj2"), instance); 9681 context->Global()->Set(v8_str("obj2"), instance);
9682 v8::TryCatch try_catch; 9682 v8::TryCatch try_catch(isolate);
9683 Local<Value> value; 9683 Local<Value> value;
9684 CHECK(!try_catch.HasCaught()); 9684 CHECK(!try_catch.HasCaught());
9685 9685
9686 value = CompileRun("new obj2(28)"); 9686 value = CompileRun("new obj2(28)");
9687 CHECK(try_catch.HasCaught()); 9687 CHECK(try_catch.HasCaught());
9688 String::Utf8Value exception_value1(try_catch.Exception()); 9688 String::Utf8Value exception_value1(try_catch.Exception());
9689 CHECK_EQ(0, strcmp("TypeError: obj2 is not a function", *exception_value1)); 9689 CHECK_EQ(0, strcmp("TypeError: obj2 is not a function", *exception_value1));
9690 try_catch.Reset(); 9690 try_catch.Reset();
9691 9691
9692 Local<Value> args[] = {v8_num(29)}; 9692 Local<Value> args[] = {v8_num(29)};
9693 value = instance->CallAsConstructor(1, args); 9693 value = instance->CallAsConstructor(1, args);
9694 CHECK(try_catch.HasCaught()); 9694 CHECK(try_catch.HasCaught());
9695 String::Utf8Value exception_value2(try_catch.Exception()); 9695 String::Utf8Value exception_value2(try_catch.Exception());
9696 CHECK_EQ( 9696 CHECK_EQ(
9697 0, strcmp("TypeError: #<Object> is not a function", *exception_value2)); 9697 0, strcmp("TypeError: #<Object> is not a function", *exception_value2));
9698 try_catch.Reset(); 9698 try_catch.Reset();
9699 } 9699 }
9700 9700
9701 // Check the case when constructor throws exception. 9701 // Check the case when constructor throws exception.
9702 { 9702 {
9703 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate); 9703 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate);
9704 instance_template->SetCallAsFunctionHandler(ThrowValue); 9704 instance_template->SetCallAsFunctionHandler(ThrowValue);
9705 Local<Object> instance = instance_template->NewInstance(); 9705 Local<Object> instance = instance_template->NewInstance();
9706 context->Global()->Set(v8_str("obj3"), instance); 9706 context->Global()->Set(v8_str("obj3"), instance);
9707 v8::TryCatch try_catch; 9707 v8::TryCatch try_catch(isolate);
9708 Local<Value> value; 9708 Local<Value> value;
9709 CHECK(!try_catch.HasCaught()); 9709 CHECK(!try_catch.HasCaught());
9710 9710
9711 value = CompileRun("new obj3(22)"); 9711 value = CompileRun("new obj3(22)");
9712 CHECK(try_catch.HasCaught()); 9712 CHECK(try_catch.HasCaught());
9713 String::Utf8Value exception_value1(try_catch.Exception()); 9713 String::Utf8Value exception_value1(try_catch.Exception());
9714 CHECK_EQ(0, strcmp("22", *exception_value1)); 9714 CHECK_EQ(0, strcmp("22", *exception_value1));
9715 try_catch.Reset(); 9715 try_catch.Reset();
9716 9716
9717 Local<Value> args[] = {v8_num(23)}; 9717 Local<Value> args[] = {v8_num(23)};
9718 value = instance->CallAsConstructor(1, args); 9718 value = instance->CallAsConstructor(1, args);
9719 CHECK(try_catch.HasCaught()); 9719 CHECK(try_catch.HasCaught());
9720 String::Utf8Value exception_value2(try_catch.Exception()); 9720 String::Utf8Value exception_value2(try_catch.Exception());
9721 CHECK_EQ(0, strcmp("23", *exception_value2)); 9721 CHECK_EQ(0, strcmp("23", *exception_value2));
9722 try_catch.Reset(); 9722 try_catch.Reset();
9723 } 9723 }
9724 9724
9725 // Check whether constructor returns with an object or non-object. 9725 // Check whether constructor returns with an object or non-object.
9726 { 9726 {
9727 Local<FunctionTemplate> function_template = 9727 Local<FunctionTemplate> function_template =
9728 FunctionTemplate::New(isolate, FakeConstructorCallback); 9728 FunctionTemplate::New(isolate, FakeConstructorCallback);
9729 Local<Function> function = function_template->GetFunction(); 9729 Local<Function> function = function_template->GetFunction();
9730 Local<Object> instance1 = function; 9730 Local<Object> instance1 = function;
9731 context->Global()->Set(v8_str("obj4"), instance1); 9731 context->Global()->Set(v8_str("obj4"), instance1);
9732 v8::TryCatch try_catch; 9732 v8::TryCatch try_catch(isolate);
9733 Local<Value> value; 9733 Local<Value> value;
9734 CHECK(!try_catch.HasCaught()); 9734 CHECK(!try_catch.HasCaught());
9735 9735
9736 CHECK(instance1->IsObject()); 9736 CHECK(instance1->IsObject());
9737 CHECK(instance1->IsFunction()); 9737 CHECK(instance1->IsFunction());
9738 9738
9739 value = CompileRun("new obj4(28)"); 9739 value = CompileRun("new obj4(28)");
9740 CHECK(!try_catch.HasCaught()); 9740 CHECK(!try_catch.HasCaught());
9741 CHECK(value->IsObject()); 9741 CHECK(value->IsObject());
9742 9742
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
9806 "result1 = f(new Object());" 9806 "result1 = f(new Object());"
9807 "result2 = f(this);" 9807 "result2 = f(this);"
9808 "var x = new Object();" 9808 "var x = new Object();"
9809 "x.eval = function(x) { return 1; };" 9809 "x.eval = function(x) { return 1; };"
9810 "result3 = f(x);"); 9810 "result3 = f(x);");
9811 script->Run(); 9811 script->Run();
9812 CHECK_EQ(2, current->Global()->Get(v8_str("result1"))->Int32Value()); 9812 CHECK_EQ(2, current->Global()->Get(v8_str("result1"))->Int32Value());
9813 CHECK_EQ(0, current->Global()->Get(v8_str("result2"))->Int32Value()); 9813 CHECK_EQ(0, current->Global()->Get(v8_str("result2"))->Int32Value());
9814 CHECK_EQ(1, current->Global()->Get(v8_str("result3"))->Int32Value()); 9814 CHECK_EQ(1, current->Global()->Get(v8_str("result3"))->Int32Value());
9815 9815
9816 v8::TryCatch try_catch; 9816 v8::TryCatch try_catch(current->GetIsolate());
9817 script = v8_compile( 9817 script = v8_compile(
9818 "function f(x) { " 9818 "function f(x) { "
9819 " var bar = 2;" 9819 " var bar = 2;"
9820 " with (x) { return eval('bar'); }" 9820 " with (x) { return eval('bar'); }"
9821 "}" 9821 "}"
9822 "result4 = f(this)"); 9822 "result4 = f(this)");
9823 script->Run(); 9823 script->Run();
9824 CHECK(!try_catch.HasCaught()); 9824 CHECK(!try_catch.HasCaught());
9825 CHECK_EQ(2, current->Global()->Get(v8_str("result4"))->Int32Value()); 9825 CHECK_EQ(2, current->Global()->Get(v8_str("result4"))->Int32Value());
9826 9826
(...skipping 22 matching lines...) Expand all
9849 9849
9850 // Check that writing to non-existing properties introduces them in 9850 // Check that writing to non-existing properties introduces them in
9851 // the other context. 9851 // the other context.
9852 script = v8_compile("other.eval('na = 1234')"); 9852 script = v8_compile("other.eval('na = 1234')");
9853 script->Run(); 9853 script->Run();
9854 CHECK_EQ(1234, other->Global()->Get(v8_str("na"))->Int32Value()); 9854 CHECK_EQ(1234, other->Global()->Get(v8_str("na"))->Int32Value());
9855 CHECK(!current->Global()->Has(v8_str("na"))); 9855 CHECK(!current->Global()->Has(v8_str("na")));
9856 9856
9857 // Check that global variables in current context are not visible in other 9857 // Check that global variables in current context are not visible in other
9858 // context. 9858 // context.
9859 v8::TryCatch try_catch; 9859 v8::TryCatch try_catch(CcTest::isolate());
9860 script = v8_compile("var bar = 42; other.eval('bar');"); 9860 script = v8_compile("var bar = 42; other.eval('bar');");
9861 Local<Value> result = script->Run(); 9861 Local<Value> result = script->Run();
9862 CHECK(try_catch.HasCaught()); 9862 CHECK(try_catch.HasCaught());
9863 try_catch.Reset(); 9863 try_catch.Reset();
9864 9864
9865 // Check that local variables in current context are not visible in other 9865 // Check that local variables in current context are not visible in other
9866 // context. 9866 // context.
9867 script = v8_compile( 9867 script = v8_compile(
9868 "(function() { " 9868 "(function() { "
9869 " var baz = 87;" 9869 " var baz = 87;"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
9923 context0->Exit(); 9923 context0->Exit();
9924 9924
9925 // Put the function into context1 and call it before and after 9925 // Put the function into context1 and call it before and after
9926 // detaching the global. Before detaching, the call succeeds and 9926 // detaching the global. Before detaching, the call succeeds and
9927 // after detaching and exception is thrown. 9927 // after detaching and exception is thrown.
9928 context1->Enter(); 9928 context1->Enter();
9929 context1->Global()->Set(v8_str("fun"), fun); 9929 context1->Global()->Set(v8_str("fun"), fun);
9930 v8::Handle<v8::Value> x_value = CompileRun("fun('x')"); 9930 v8::Handle<v8::Value> x_value = CompileRun("fun('x')");
9931 CHECK_EQ(42, x_value->Int32Value()); 9931 CHECK_EQ(42, x_value->Int32Value());
9932 context0->DetachGlobal(); 9932 context0->DetachGlobal();
9933 v8::TryCatch catcher; 9933 v8::TryCatch catcher(isolate);
9934 x_value = CompileRun("fun('x')"); 9934 x_value = CompileRun("fun('x')");
9935 CHECK_EQ(42, x_value->Int32Value()); 9935 CHECK_EQ(42, x_value->Int32Value());
9936 context1->Exit(); 9936 context1->Exit();
9937 } 9937 }
9938 9938
9939 9939
9940 THREADED_TEST(CrossLazyLoad) { 9940 THREADED_TEST(CrossLazyLoad) {
9941 v8::HandleScope scope(CcTest::isolate()); 9941 v8::HandleScope scope(CcTest::isolate());
9942 LocalContext other; 9942 LocalContext other;
9943 LocalContext current; 9943 LocalContext current;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
9981 LocalContext context; 9981 LocalContext context;
9982 v8::Isolate* isolate = context->GetIsolate(); 9982 v8::Isolate* isolate = context->GetIsolate();
9983 v8::HandleScope scope(isolate); 9983 v8::HandleScope scope(isolate);
9984 9984
9985 { 9985 {
9986 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate); 9986 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate);
9987 Local<ObjectTemplate> instance_template = t->InstanceTemplate(); 9987 Local<ObjectTemplate> instance_template = t->InstanceTemplate();
9988 instance_template->SetCallAsFunctionHandler(call_as_function); 9988 instance_template->SetCallAsFunctionHandler(call_as_function);
9989 Local<v8::Object> instance = t->GetFunction()->NewInstance(); 9989 Local<v8::Object> instance = t->GetFunction()->NewInstance();
9990 context->Global()->Set(v8_str("obj"), instance); 9990 context->Global()->Set(v8_str("obj"), instance);
9991 v8::TryCatch try_catch; 9991 v8::TryCatch try_catch(isolate);
9992 Local<Value> value; 9992 Local<Value> value;
9993 CHECK(!try_catch.HasCaught()); 9993 CHECK(!try_catch.HasCaught());
9994 9994
9995 value = CompileRun("obj(42)"); 9995 value = CompileRun("obj(42)");
9996 CHECK(!try_catch.HasCaught()); 9996 CHECK(!try_catch.HasCaught());
9997 CHECK_EQ(42, value->Int32Value()); 9997 CHECK_EQ(42, value->Int32Value());
9998 9998
9999 value = CompileRun("(function(o){return o(49)})(obj)"); 9999 value = CompileRun("(function(o){return o(49)})(obj)");
10000 CHECK(!try_catch.HasCaught()); 10000 CHECK(!try_catch.HasCaught());
10001 CHECK_EQ(49, value->Int32Value()); 10001 CHECK_EQ(49, value->Int32Value());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
10036 CHECK(!try_catch.HasCaught()); 10036 CHECK(!try_catch.HasCaught());
10037 CHECK_EQ(28, value->Int32Value()); 10037 CHECK_EQ(28, value->Int32Value());
10038 } 10038 }
10039 10039
10040 { 10040 {
10041 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate); 10041 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate);
10042 Local<ObjectTemplate> instance_template(t->InstanceTemplate()); 10042 Local<ObjectTemplate> instance_template(t->InstanceTemplate());
10043 USE(instance_template); 10043 USE(instance_template);
10044 Local<v8::Object> instance = t->GetFunction()->NewInstance(); 10044 Local<v8::Object> instance = t->GetFunction()->NewInstance();
10045 context->Global()->Set(v8_str("obj2"), instance); 10045 context->Global()->Set(v8_str("obj2"), instance);
10046 v8::TryCatch try_catch; 10046 v8::TryCatch try_catch(isolate);
10047 Local<Value> value; 10047 Local<Value> value;
10048 CHECK(!try_catch.HasCaught()); 10048 CHECK(!try_catch.HasCaught());
10049 10049
10050 // Call an object without call-as-function handler through the JS 10050 // Call an object without call-as-function handler through the JS
10051 value = CompileRun("obj2(28)"); 10051 value = CompileRun("obj2(28)");
10052 CHECK(value.IsEmpty()); 10052 CHECK(value.IsEmpty());
10053 CHECK(try_catch.HasCaught()); 10053 CHECK(try_catch.HasCaught());
10054 String::Utf8Value exception_value1(try_catch.Exception()); 10054 String::Utf8Value exception_value1(try_catch.Exception());
10055 // TODO(verwaest): Better message 10055 // TODO(verwaest): Better message
10056 CHECK_EQ(0, strcmp("TypeError: obj2 is not a function", *exception_value1)); 10056 CHECK_EQ(0, strcmp("TypeError: obj2 is not a function", *exception_value1));
(...skipping 10 matching lines...) Expand all
10067 *exception_value2)); 10067 *exception_value2));
10068 try_catch.Reset(); 10068 try_catch.Reset();
10069 } 10069 }
10070 10070
10071 { 10071 {
10072 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate); 10072 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(isolate);
10073 Local<ObjectTemplate> instance_template = t->InstanceTemplate(); 10073 Local<ObjectTemplate> instance_template = t->InstanceTemplate();
10074 instance_template->SetCallAsFunctionHandler(ThrowValue); 10074 instance_template->SetCallAsFunctionHandler(ThrowValue);
10075 Local<v8::Object> instance = t->GetFunction()->NewInstance(); 10075 Local<v8::Object> instance = t->GetFunction()->NewInstance();
10076 context->Global()->Set(v8_str("obj3"), instance); 10076 context->Global()->Set(v8_str("obj3"), instance);
10077 v8::TryCatch try_catch; 10077 v8::TryCatch try_catch(isolate);
10078 Local<Value> value; 10078 Local<Value> value;
10079 CHECK(!try_catch.HasCaught()); 10079 CHECK(!try_catch.HasCaught());
10080 10080
10081 // Catch the exception which is thrown by call-as-function handler 10081 // Catch the exception which is thrown by call-as-function handler
10082 value = CompileRun("obj3(22)"); 10082 value = CompileRun("obj3(22)");
10083 CHECK(try_catch.HasCaught()); 10083 CHECK(try_catch.HasCaught());
10084 String::Utf8Value exception_value1(try_catch.Exception()); 10084 String::Utf8Value exception_value1(try_catch.Exception());
10085 CHECK_EQ(0, strcmp("22", *exception_value1)); 10085 CHECK_EQ(0, strcmp("22", *exception_value1));
10086 try_catch.Reset(); 10086 try_catch.Reset();
10087 10087
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
10165 // Check whether a non-function object is callable. 10165 // Check whether a non-function object is callable.
10166 THREADED_TEST(CallableObject) { 10166 THREADED_TEST(CallableObject) {
10167 LocalContext context; 10167 LocalContext context;
10168 v8::Isolate* isolate = context->GetIsolate(); 10168 v8::Isolate* isolate = context->GetIsolate();
10169 v8::HandleScope scope(isolate); 10169 v8::HandleScope scope(isolate);
10170 10170
10171 { 10171 {
10172 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate); 10172 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate);
10173 instance_template->SetCallAsFunctionHandler(call_as_function); 10173 instance_template->SetCallAsFunctionHandler(call_as_function);
10174 Local<Object> instance = instance_template->NewInstance(); 10174 Local<Object> instance = instance_template->NewInstance();
10175 v8::TryCatch try_catch; 10175 v8::TryCatch try_catch(isolate);
10176 10176
10177 CHECK(instance->IsCallable()); 10177 CHECK(instance->IsCallable());
10178 CHECK(!try_catch.HasCaught()); 10178 CHECK(!try_catch.HasCaught());
10179 } 10179 }
10180 10180
10181 { 10181 {
10182 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate); 10182 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate);
10183 Local<Object> instance = instance_template->NewInstance(); 10183 Local<Object> instance = instance_template->NewInstance();
10184 v8::TryCatch try_catch; 10184 v8::TryCatch try_catch(isolate);
10185 10185
10186 CHECK(!instance->IsCallable()); 10186 CHECK(!instance->IsCallable());
10187 CHECK(!try_catch.HasCaught()); 10187 CHECK(!try_catch.HasCaught());
10188 } 10188 }
10189 10189
10190 { 10190 {
10191 Local<FunctionTemplate> function_template = 10191 Local<FunctionTemplate> function_template =
10192 FunctionTemplate::New(isolate, call_as_function); 10192 FunctionTemplate::New(isolate, call_as_function);
10193 Local<Function> function = function_template->GetFunction(); 10193 Local<Function> function = function_template->GetFunction();
10194 Local<Object> instance = function; 10194 Local<Object> instance = function;
10195 v8::TryCatch try_catch; 10195 v8::TryCatch try_catch(isolate);
10196 10196
10197 CHECK(instance->IsCallable()); 10197 CHECK(instance->IsCallable());
10198 CHECK(!try_catch.HasCaught()); 10198 CHECK(!try_catch.HasCaught());
10199 } 10199 }
10200 10200
10201 { 10201 {
10202 Local<FunctionTemplate> function_template = FunctionTemplate::New(isolate); 10202 Local<FunctionTemplate> function_template = FunctionTemplate::New(isolate);
10203 Local<Function> function = function_template->GetFunction(); 10203 Local<Function> function = function_template->GetFunction();
10204 Local<Object> instance = function; 10204 Local<Object> instance = function;
10205 v8::TryCatch try_catch; 10205 v8::TryCatch try_catch(isolate);
10206 10206
10207 CHECK(instance->IsCallable()); 10207 CHECK(instance->IsCallable());
10208 CHECK(!try_catch.HasCaught()); 10208 CHECK(!try_catch.HasCaught());
10209 } 10209 }
10210 } 10210 }
10211 10211
10212 10212
10213 static int Recurse(v8::Isolate* isolate, int depth, int iterations) { 10213 static int Recurse(v8::Isolate* isolate, int depth, int iterations) {
10214 v8::HandleScope scope(isolate); 10214 v8::HandleScope scope(isolate);
10215 if (depth == 0) return v8::HandleScope::NumberOfHandles(isolate); 10215 if (depth == 0) return v8::HandleScope::NumberOfHandles(isolate);
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
10586 proto_templ->Set(v8_str("method"), method_templ); 10586 proto_templ->Set(v8_str("method"), method_templ);
10587 fun_templ->SetHiddenPrototype(true); 10587 fun_templ->SetHiddenPrototype(true);
10588 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); 10588 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate();
10589 templ->SetHandler(v8::NamedPropertyHandlerConfiguration( 10589 templ->SetHandler(v8::NamedPropertyHandlerConfiguration(
10590 InterceptorCallICFastApi, NULL, NULL, NULL, NULL, 10590 InterceptorCallICFastApi, NULL, NULL, NULL, NULL,
10591 v8::External::New(isolate, &interceptor_call_count))); 10591 v8::External::New(isolate, &interceptor_call_count)));
10592 LocalContext context; 10592 LocalContext context;
10593 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); 10593 v8::Handle<v8::Function> fun = fun_templ->GetFunction();
10594 GenerateSomeGarbage(); 10594 GenerateSomeGarbage();
10595 context->Global()->Set(v8_str("o"), fun->NewInstance()); 10595 context->Global()->Set(v8_str("o"), fun->NewInstance());
10596 v8::TryCatch try_catch; 10596 v8::TryCatch try_catch(isolate);
10597 CompileRun( 10597 CompileRun(
10598 "o.foo = 17;" 10598 "o.foo = 17;"
10599 "var receiver = {};" 10599 "var receiver = {};"
10600 "receiver.__proto__ = o;" 10600 "receiver.__proto__ = o;"
10601 "var result = 0;" 10601 "var result = 0;"
10602 "var saved_result = 0;" 10602 "var saved_result = 0;"
10603 "for (var i = 0; i < 100; i++) {" 10603 "for (var i = 0; i < 100; i++) {"
10604 " result = receiver.method(41);" 10604 " result = receiver.method(41);"
10605 " if (i == 50) {" 10605 " if (i == 50) {"
10606 " saved_result = result;" 10606 " saved_result = result;"
(...skipping 22 matching lines...) Expand all
10629 proto_templ->Set(v8_str("method"), method_templ); 10629 proto_templ->Set(v8_str("method"), method_templ);
10630 fun_templ->SetHiddenPrototype(true); 10630 fun_templ->SetHiddenPrototype(true);
10631 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate(); 10631 v8::Handle<v8::ObjectTemplate> templ = fun_templ->InstanceTemplate();
10632 templ->SetHandler(v8::NamedPropertyHandlerConfiguration( 10632 templ->SetHandler(v8::NamedPropertyHandlerConfiguration(
10633 InterceptorCallICFastApi, NULL, NULL, NULL, NULL, 10633 InterceptorCallICFastApi, NULL, NULL, NULL, NULL,
10634 v8::External::New(isolate, &interceptor_call_count))); 10634 v8::External::New(isolate, &interceptor_call_count)));
10635 LocalContext context; 10635 LocalContext context;
10636 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); 10636 v8::Handle<v8::Function> fun = fun_templ->GetFunction();
10637 GenerateSomeGarbage(); 10637 GenerateSomeGarbage();
10638 context->Global()->Set(v8_str("o"), fun->NewInstance()); 10638 context->Global()->Set(v8_str("o"), fun->NewInstance());
10639 v8::TryCatch try_catch; 10639 v8::TryCatch try_catch(isolate);
10640 CompileRun( 10640 CompileRun(
10641 "o.foo = 17;" 10641 "o.foo = 17;"
10642 "var receiver = {};" 10642 "var receiver = {};"
10643 "receiver.__proto__ = o;" 10643 "receiver.__proto__ = o;"
10644 "var result = 0;" 10644 "var result = 0;"
10645 "var saved_result = 0;" 10645 "var saved_result = 0;"
10646 "for (var i = 0; i < 100; i++) {" 10646 "for (var i = 0; i < 100; i++) {"
10647 " result = receiver.method(41);" 10647 " result = receiver.method(41);"
10648 " if (i == 50) {" 10648 " if (i == 50) {"
10649 " saved_result = result;" 10649 " saved_result = result;"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
10761 v8::Signature::New(isolate, fun_templ)); 10761 v8::Signature::New(isolate, fun_templ));
10762 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); 10762 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
10763 proto_templ->Set(v8_str("method"), method_templ); 10763 proto_templ->Set(v8_str("method"), method_templ);
10764 fun_templ->SetHiddenPrototype(true); 10764 fun_templ->SetHiddenPrototype(true);
10765 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); 10765 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate());
10766 CHECK(!templ.IsEmpty()); 10766 CHECK(!templ.IsEmpty());
10767 LocalContext context; 10767 LocalContext context;
10768 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); 10768 v8::Handle<v8::Function> fun = fun_templ->GetFunction();
10769 GenerateSomeGarbage(); 10769 GenerateSomeGarbage();
10770 context->Global()->Set(v8_str("o"), fun->NewInstance()); 10770 context->Global()->Set(v8_str("o"), fun->NewInstance());
10771 v8::TryCatch try_catch; 10771 v8::TryCatch try_catch(isolate);
10772 CompileRun( 10772 CompileRun(
10773 "o.foo = 17;" 10773 "o.foo = 17;"
10774 "var receiver = {};" 10774 "var receiver = {};"
10775 "receiver.__proto__ = o;" 10775 "receiver.__proto__ = o;"
10776 "var result = 0;" 10776 "var result = 0;"
10777 "var saved_result = 0;" 10777 "var saved_result = 0;"
10778 "for (var i = 0; i < 100; i++) {" 10778 "for (var i = 0; i < 100; i++) {"
10779 " result = receiver.method(41);" 10779 " result = receiver.method(41);"
10780 " if (i == 50) {" 10780 " if (i == 50) {"
10781 " saved_result = result;" 10781 " saved_result = result;"
(...skipping 18 matching lines...) Expand all
10800 v8::Signature::New(isolate, fun_templ)); 10800 v8::Signature::New(isolate, fun_templ));
10801 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate(); 10801 v8::Handle<v8::ObjectTemplate> proto_templ = fun_templ->PrototypeTemplate();
10802 proto_templ->Set(v8_str("method"), method_templ); 10802 proto_templ->Set(v8_str("method"), method_templ);
10803 fun_templ->SetHiddenPrototype(true); 10803 fun_templ->SetHiddenPrototype(true);
10804 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate()); 10804 v8::Handle<v8::ObjectTemplate> templ(fun_templ->InstanceTemplate());
10805 CHECK(!templ.IsEmpty()); 10805 CHECK(!templ.IsEmpty());
10806 LocalContext context; 10806 LocalContext context;
10807 v8::Handle<v8::Function> fun = fun_templ->GetFunction(); 10807 v8::Handle<v8::Function> fun = fun_templ->GetFunction();
10808 GenerateSomeGarbage(); 10808 GenerateSomeGarbage();
10809 context->Global()->Set(v8_str("o"), fun->NewInstance()); 10809 context->Global()->Set(v8_str("o"), fun->NewInstance());
10810 v8::TryCatch try_catch; 10810 v8::TryCatch try_catch(isolate);
10811 CompileRun( 10811 CompileRun(
10812 "o.foo = 17;" 10812 "o.foo = 17;"
10813 "var receiver = {};" 10813 "var receiver = {};"
10814 "receiver.__proto__ = o;" 10814 "receiver.__proto__ = o;"
10815 "var result = 0;" 10815 "var result = 0;"
10816 "var saved_result = 0;" 10816 "var saved_result = 0;"
10817 "for (var i = 0; i < 100; i++) {" 10817 "for (var i = 0; i < 100; i++) {"
10818 " result = receiver.method(41);" 10818 " result = receiver.method(41);"
10819 " if (i == 50) {" 10819 " if (i == 50) {"
10820 " saved_result = result;" 10820 " saved_result = result;"
(...skipping 27 matching lines...) Expand all
10848 10848
10849 Local<Object> another = Object::New(context->GetIsolate()); 10849 Local<Object> another = Object::New(context->GetIsolate());
10850 another->SetPrototype(instance); 10850 another->SetPrototype(instance);
10851 10851
10852 Local<Object> with_js_getter = CompileRun( 10852 Local<Object> with_js_getter = CompileRun(
10853 "o = {};\n" 10853 "o = {};\n"
10854 "o.__defineGetter__('f', function() { throw undefined; });\n" 10854 "o.__defineGetter__('f', function() { throw undefined; });\n"
10855 "o\n").As<Object>(); 10855 "o\n").As<Object>();
10856 CHECK(!with_js_getter.IsEmpty()); 10856 CHECK(!with_js_getter.IsEmpty());
10857 10857
10858 TryCatch try_catch; 10858 TryCatch try_catch(context->GetIsolate());
10859 10859
10860 Local<Value> result = instance->GetRealNamedProperty(v8_str("f")); 10860 Local<Value> result = instance->GetRealNamedProperty(v8_str("f"));
10861 CHECK(try_catch.HasCaught()); 10861 CHECK(try_catch.HasCaught());
10862 try_catch.Reset(); 10862 try_catch.Reset();
10863 CHECK(result.IsEmpty()); 10863 CHECK(result.IsEmpty());
10864 10864
10865 Maybe<PropertyAttribute> attr = 10865 Maybe<PropertyAttribute> attr =
10866 instance->GetRealNamedPropertyAttributes(v8_str("f")); 10866 instance->GetRealNamedPropertyAttributes(v8_str("f"));
10867 CHECK(!try_catch.HasCaught()); 10867 CHECK(!try_catch.HasCaught());
10868 CHECK(Just(None) == attr); 10868 CHECK(Just(None) == attr);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
10901 10901
10902 result = with_js_getter->Get(v8_str("f")); 10902 result = with_js_getter->Get(v8_str("f"));
10903 CHECK(try_catch.HasCaught()); 10903 CHECK(try_catch.HasCaught());
10904 try_catch.Reset(); 10904 try_catch.Reset();
10905 CHECK(result.IsEmpty()); 10905 CHECK(result.IsEmpty());
10906 } 10906 }
10907 10907
10908 10908
10909 static void ThrowingCallbackWithTryCatch( 10909 static void ThrowingCallbackWithTryCatch(
10910 const v8::FunctionCallbackInfo<v8::Value>& args) { 10910 const v8::FunctionCallbackInfo<v8::Value>& args) {
10911 TryCatch try_catch; 10911 TryCatch try_catch(args.GetIsolate());
10912 // Verboseness is important: it triggers message delivery which can call into 10912 // Verboseness is important: it triggers message delivery which can call into
10913 // external code. 10913 // external code.
10914 try_catch.SetVerbose(true); 10914 try_catch.SetVerbose(true);
10915 CompileRun("throw 'from JS';"); 10915 CompileRun("throw 'from JS';");
10916 CHECK(try_catch.HasCaught()); 10916 CHECK(try_catch.HasCaught());
10917 CHECK(!CcTest::i_isolate()->has_pending_exception()); 10917 CHECK(!CcTest::i_isolate()->has_pending_exception());
10918 CHECK(!CcTest::i_isolate()->has_scheduled_exception()); 10918 CHECK(!CcTest::i_isolate()->has_scheduled_exception());
10919 } 10919 }
10920 10920
10921 10921
10922 static int call_depth; 10922 static int call_depth;
10923 10923
10924 10924
10925 static void WithTryCatch(Handle<Message> message, Handle<Value> data) { 10925 static void WithTryCatch(Handle<Message> message, Handle<Value> data) {
10926 TryCatch try_catch; 10926 TryCatch try_catch(CcTest::isolate());
10927 } 10927 }
10928 10928
10929 10929
10930 static void ThrowFromJS(Handle<Message> message, Handle<Value> data) { 10930 static void ThrowFromJS(Handle<Message> message, Handle<Value> data) {
10931 if (--call_depth) CompileRun("throw 'ThrowInJS';"); 10931 if (--call_depth) CompileRun("throw 'ThrowInJS';");
10932 } 10932 }
10933 10933
10934 10934
10935 static void ThrowViaApi(Handle<Message> message, Handle<Value> data) { 10935 static void ThrowViaApi(Handle<Message> message, Handle<Value> data) {
10936 if (--call_depth) CcTest::isolate()->ThrowException(v8_str("ThrowViaApi")); 10936 if (--call_depth) CcTest::isolate()->ThrowException(v8_str("ThrowViaApi"));
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
11205 TEST_TOSTRINGTAG_TYPES(valueNull); 11205 TEST_TOSTRINGTAG_TYPES(valueNull);
11206 TEST_TOSTRINGTAG_TYPES(valueUndef); 11206 TEST_TOSTRINGTAG_TYPES(valueUndef);
11207 11207
11208 #undef TEST_TOSTRINGTAG 11208 #undef TEST_TOSTRINGTAG
11209 #undef TEST_TOSTRINGTAG_TYPES 11209 #undef TEST_TOSTRINGTAG_TYPES
11210 11210
11211 // @@toStringTag getter throws 11211 // @@toStringTag getter throws
11212 Local<Value> obj = v8::Object::New(isolate); 11212 Local<Value> obj = v8::Object::New(isolate);
11213 obj.As<v8::Object>()->SetAccessor(toStringTag, ThrowingSymbolAccessorGetter); 11213 obj.As<v8::Object>()->SetAccessor(toStringTag, ThrowingSymbolAccessorGetter);
11214 { 11214 {
11215 TryCatch try_catch; 11215 TryCatch try_catch(isolate);
11216 value = obj.As<v8::Object>()->ObjectProtoToString(); 11216 value = obj.As<v8::Object>()->ObjectProtoToString();
11217 CHECK(value.IsEmpty()); 11217 CHECK(value.IsEmpty());
11218 CHECK(try_catch.HasCaught()); 11218 CHECK(try_catch.HasCaught());
11219 } 11219 }
11220 11220
11221 // @@toStringTag getter does not throw 11221 // @@toStringTag getter does not throw
11222 obj = v8::Object::New(isolate); 11222 obj = v8::Object::New(isolate);
11223 obj.As<v8::Object>()->SetAccessor( 11223 obj.As<v8::Object>()->SetAccessor(
11224 toStringTag, SymbolAccessorGetterReturnsDefault, 0, v8_str("Test")); 11224 toStringTag, SymbolAccessorGetterReturnsDefault, 0, v8_str("Test"));
11225 { 11225 {
11226 TryCatch try_catch; 11226 TryCatch try_catch(isolate);
11227 value = obj.As<v8::Object>()->ObjectProtoToString(); 11227 value = obj.As<v8::Object>()->ObjectProtoToString();
11228 CHECK(value->IsString() && value->Equals(v8_str("[object Test]"))); 11228 CHECK(value->IsString() && value->Equals(v8_str("[object Test]")));
11229 CHECK(!try_catch.HasCaught()); 11229 CHECK(!try_catch.HasCaught());
11230 } 11230 }
11231 11231
11232 // JS @@toStringTag value 11232 // JS @@toStringTag value
11233 obj = CompileRun("obj = {}; obj[Symbol.toStringTag] = 'Test'; obj"); 11233 obj = CompileRun("obj = {}; obj[Symbol.toStringTag] = 'Test'; obj");
11234 { 11234 {
11235 TryCatch try_catch; 11235 TryCatch try_catch(isolate);
11236 value = obj.As<v8::Object>()->ObjectProtoToString(); 11236 value = obj.As<v8::Object>()->ObjectProtoToString();
11237 CHECK(value->IsString() && value->Equals(v8_str("[object Test]"))); 11237 CHECK(value->IsString() && value->Equals(v8_str("[object Test]")));
11238 CHECK(!try_catch.HasCaught()); 11238 CHECK(!try_catch.HasCaught());
11239 } 11239 }
11240 11240
11241 // JS @@toStringTag getter throws 11241 // JS @@toStringTag getter throws
11242 obj = CompileRun( 11242 obj = CompileRun(
11243 "obj = {}; Object.defineProperty(obj, Symbol.toStringTag, {" 11243 "obj = {}; Object.defineProperty(obj, Symbol.toStringTag, {"
11244 " get: function() { throw 'Test'; }" 11244 " get: function() { throw 'Test'; }"
11245 "}); obj"); 11245 "}); obj");
11246 { 11246 {
11247 TryCatch try_catch; 11247 TryCatch try_catch(isolate);
11248 value = obj.As<v8::Object>()->ObjectProtoToString(); 11248 value = obj.As<v8::Object>()->ObjectProtoToString();
11249 CHECK(value.IsEmpty()); 11249 CHECK(value.IsEmpty());
11250 CHECK(try_catch.HasCaught()); 11250 CHECK(try_catch.HasCaught());
11251 } 11251 }
11252 11252
11253 // JS @@toStringTag getter does not throw 11253 // JS @@toStringTag getter does not throw
11254 obj = CompileRun( 11254 obj = CompileRun(
11255 "obj = {}; Object.defineProperty(obj, Symbol.toStringTag, {" 11255 "obj = {}; Object.defineProperty(obj, Symbol.toStringTag, {"
11256 " get: function() { return 'Test'; }" 11256 " get: function() { return 'Test'; }"
11257 "}); obj"); 11257 "}); obj");
11258 { 11258 {
11259 TryCatch try_catch; 11259 TryCatch try_catch(isolate);
11260 value = obj.As<v8::Object>()->ObjectProtoToString(); 11260 value = obj.As<v8::Object>()->ObjectProtoToString();
11261 CHECK(value->IsString() && value->Equals(v8_str("[object Test]"))); 11261 CHECK(value->IsString() && value->Equals(v8_str("[object Test]")));
11262 CHECK(!try_catch.HasCaught()); 11262 CHECK(!try_catch.HasCaught());
11263 } 11263 }
11264 } 11264 }
11265 11265
11266 11266
11267 THREADED_TEST(ObjectGetConstructorName) { 11267 THREADED_TEST(ObjectGetConstructorName) {
11268 v8::Isolate* isolate = CcTest::isolate(); 11268 v8::Isolate* isolate = CcTest::isolate();
11269 LocalContext context; 11269 LocalContext context;
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
11463 static void ThrowInJS(const v8::FunctionCallbackInfo<v8::Value>& args) { 11463 static void ThrowInJS(const v8::FunctionCallbackInfo<v8::Value>& args) {
11464 v8::Isolate* isolate = args.GetIsolate(); 11464 v8::Isolate* isolate = args.GetIsolate();
11465 CHECK(v8::Locker::IsLocked(isolate)); 11465 CHECK(v8::Locker::IsLocked(isolate));
11466 ApiTestFuzzer::Fuzz(); 11466 ApiTestFuzzer::Fuzz();
11467 v8::Unlocker unlocker(isolate); 11467 v8::Unlocker unlocker(isolate);
11468 const char* code = "throw 7;"; 11468 const char* code = "throw 7;";
11469 { 11469 {
11470 v8::Locker nested_locker(isolate); 11470 v8::Locker nested_locker(isolate);
11471 v8::HandleScope scope(isolate); 11471 v8::HandleScope scope(isolate);
11472 v8::Handle<Value> exception; 11472 v8::Handle<Value> exception;
11473 { v8::TryCatch try_catch; 11473 {
11474 v8::TryCatch try_catch(isolate);
11474 v8::Handle<Value> value = CompileRun(code); 11475 v8::Handle<Value> value = CompileRun(code);
11475 CHECK(value.IsEmpty()); 11476 CHECK(value.IsEmpty());
11476 CHECK(try_catch.HasCaught()); 11477 CHECK(try_catch.HasCaught());
11477 // Make sure to wrap the exception in a new handle because 11478 // Make sure to wrap the exception in a new handle because
11478 // the handle returned from the TryCatch is destroyed 11479 // the handle returned from the TryCatch is destroyed
11479 // when the TryCatch is destroyed. 11480 // when the TryCatch is destroyed.
11480 exception = Local<Value>::New(isolate, try_catch.Exception()); 11481 exception = Local<Value>::New(isolate, try_catch.Exception());
11481 } 11482 }
11482 args.GetIsolate()->ThrowException(exception); 11483 args.GetIsolate()->ThrowException(exception);
11483 } 11484 }
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after
12489 v8::Local<v8::ObjectTemplate>::New(isolate, templ)->NewInstance(); 12490 v8::Local<v8::ObjectTemplate>::New(isolate, templ)->NewInstance();
12490 CHECK_EQ(1, result->InternalFieldCount()); 12491 CHECK_EQ(1, result->InternalFieldCount());
12491 } 12492 }
12492 12493
12493 12494
12494 // If part of the threaded tests, this test makes ThreadingTest fail 12495 // If part of the threaded tests, this test makes ThreadingTest fail
12495 // on mac. 12496 // on mac.
12496 TEST(CatchStackOverflow) { 12497 TEST(CatchStackOverflow) {
12497 LocalContext context; 12498 LocalContext context;
12498 v8::HandleScope scope(context->GetIsolate()); 12499 v8::HandleScope scope(context->GetIsolate());
12499 v8::TryCatch try_catch; 12500 v8::TryCatch try_catch(context->GetIsolate());
12500 v8::Handle<v8::Value> result = CompileRun( 12501 v8::Handle<v8::Value> result = CompileRun(
12501 "function f() {" 12502 "function f() {"
12502 " return f();" 12503 " return f();"
12503 "}" 12504 "}"
12504 "" 12505 ""
12505 "f();"); 12506 "f();");
12506 CHECK(result.IsEmpty()); 12507 CHECK(result.IsEmpty());
12507 } 12508 }
12508 12509
12509 12510
12510 static void CheckTryCatchSourceInfo(v8::Handle<v8::Script> script, 12511 static void CheckTryCatchSourceInfo(v8::Handle<v8::Script> script,
12511 const char* resource_name, 12512 const char* resource_name,
12512 int line_offset) { 12513 int line_offset) {
12513 v8::HandleScope scope(CcTest::isolate()); 12514 v8::HandleScope scope(CcTest::isolate());
12514 v8::TryCatch try_catch; 12515 v8::TryCatch try_catch(CcTest::isolate());
12515 v8::Handle<v8::Value> result = script->Run(); 12516 v8::Handle<v8::Value> result = script->Run();
12516 CHECK(result.IsEmpty()); 12517 CHECK(result.IsEmpty());
12517 CHECK(try_catch.HasCaught()); 12518 CHECK(try_catch.HasCaught());
12518 v8::Handle<v8::Message> message = try_catch.Message(); 12519 v8::Handle<v8::Message> message = try_catch.Message();
12519 CHECK(!message.IsEmpty()); 12520 CHECK(!message.IsEmpty());
12520 CHECK_EQ(10 + line_offset, message->GetLineNumber()); 12521 CHECK_EQ(10 + line_offset, message->GetLineNumber());
12521 CHECK_EQ(91, message->GetStartPosition()); 12522 CHECK_EQ(91, message->GetStartPosition());
12522 CHECK_EQ(92, message->GetEndPosition()); 12523 CHECK_EQ(92, message->GetEndPosition());
12523 CHECK_EQ(2, message->GetStartColumn()); 12524 CHECK_EQ(2, message->GetStartColumn());
12524 CHECK_EQ(3, message->GetEndColumn()); 12525 CHECK_EQ(3, message->GetEndColumn());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
12564 v8::String::NewFromUtf8(context->GetIsolate(), resource_name), 12565 v8::String::NewFromUtf8(context->GetIsolate(), resource_name),
12565 v8::Integer::New(context->GetIsolate(), 7)); 12566 v8::Integer::New(context->GetIsolate(), 7));
12566 script = v8::Script::Compile(source, &origin2); 12567 script = v8::Script::Compile(source, &origin2);
12567 CheckTryCatchSourceInfo(script, resource_name, 7); 12568 CheckTryCatchSourceInfo(script, resource_name, 7);
12568 } 12569 }
12569 12570
12570 12571
12571 THREADED_TEST(TryCatchSourceInfoForEOSError) { 12572 THREADED_TEST(TryCatchSourceInfoForEOSError) {
12572 LocalContext context; 12573 LocalContext context;
12573 v8::HandleScope scope(context->GetIsolate()); 12574 v8::HandleScope scope(context->GetIsolate());
12574 v8::TryCatch try_catch; 12575 v8::TryCatch try_catch(context->GetIsolate());
12575 v8::Script::Compile(v8_str("!\n")); 12576 v8::Script::Compile(v8_str("!\n"));
12576 CHECK(try_catch.HasCaught()); 12577 CHECK(try_catch.HasCaught());
12577 v8::Handle<v8::Message> message = try_catch.Message(); 12578 v8::Handle<v8::Message> message = try_catch.Message();
12578 CHECK_EQ(1, message->GetLineNumber()); 12579 CHECK_EQ(1, message->GetLineNumber());
12579 CHECK_EQ(0, message->GetStartColumn()); 12580 CHECK_EQ(0, message->GetStartColumn());
12580 } 12581 }
12581 12582
12582 12583
12583 THREADED_TEST(CompilationCache) { 12584 THREADED_TEST(CompilationCache) {
12584 LocalContext context; 12585 LocalContext context;
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after
13148 v8::V8::AddGCPrologueCallback(RunBeforeGC); 13149 v8::V8::AddGCPrologueCallback(RunBeforeGC);
13149 static const char* one_byte_content = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 13150 static const char* one_byte_content = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
13150 i::uc16* uc16_content = AsciiToTwoByteString(one_byte_content); 13151 i::uc16* uc16_content = AsciiToTwoByteString(one_byte_content);
13151 v8::Local<v8::String> string = v8_str(one_byte_content); 13152 v8::Local<v8::String> string = v8_str(one_byte_content);
13152 13153
13153 CcTest::global()->Set(v8_str("a"), string); 13154 CcTest::global()->Set(v8_str("a"), string);
13154 regexp_interruption_data.string.Reset(CcTest::isolate(), string); 13155 regexp_interruption_data.string.Reset(CcTest::isolate(), string);
13155 regexp_interruption_data.string_resource = new UC16VectorResource( 13156 regexp_interruption_data.string_resource = new UC16VectorResource(
13156 i::Vector<const i::uc16>(uc16_content, i::StrLength(one_byte_content))); 13157 i::Vector<const i::uc16>(uc16_content, i::StrLength(one_byte_content)));
13157 13158
13158 v8::TryCatch try_catch; 13159 v8::TryCatch try_catch(CcTest::isolate());
13159 timeout_thread.Start(); 13160 timeout_thread.Start();
13160 13161
13161 CompileRun("/((a*)*)*b/.exec(a)"); 13162 CompileRun("/((a*)*)*b/.exec(a)");
13162 CHECK(try_catch.HasTerminated()); 13163 CHECK(try_catch.HasTerminated());
13163 13164
13164 timeout_thread.Join(); 13165 timeout_thread.Join();
13165 13166
13166 regexp_interruption_data.string.Reset(); 13167 regexp_interruption_data.string.Reset();
13167 i::DeleteArray(uc16_content); 13168 i::DeleteArray(uc16_content);
13168 } 13169 }
(...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after
14094 c2->Global()->Set(v8::String::NewFromUtf8(c2->GetIsolate(), "foo"), 14095 c2->Global()->Set(v8::String::NewFromUtf8(c2->GetIsolate(), "foo"),
14095 v8::Integer::New(c2->GetIsolate(), 101)); 14096 v8::Integer::New(c2->GetIsolate(), 101));
14096 CHECK_EQ(dep->Run()->Int32Value(), 100); 14097 CHECK_EQ(dep->Run()->Int32Value(), 100);
14097 CHECK_EQ(indep->BindToCurrentContext()->Run()->Int32Value(), 101); 14098 CHECK_EQ(indep->BindToCurrentContext()->Run()->Int32Value(), 101);
14098 } 14099 }
14099 14100
14100 14101
14101 THREADED_TEST(StackTrace) { 14102 THREADED_TEST(StackTrace) {
14102 LocalContext context; 14103 LocalContext context;
14103 v8::HandleScope scope(context->GetIsolate()); 14104 v8::HandleScope scope(context->GetIsolate());
14104 v8::TryCatch try_catch; 14105 v8::TryCatch try_catch(context->GetIsolate());
14105 const char *source = "function foo() { FAIL.FAIL; }; foo();"; 14106 const char *source = "function foo() { FAIL.FAIL; }; foo();";
14106 v8::Handle<v8::String> src = 14107 v8::Handle<v8::String> src =
14107 v8::String::NewFromUtf8(context->GetIsolate(), source); 14108 v8::String::NewFromUtf8(context->GetIsolate(), source);
14108 v8::Handle<v8::String> origin = 14109 v8::Handle<v8::String> origin =
14109 v8::String::NewFromUtf8(context->GetIsolate(), "stack-trace-test"); 14110 v8::String::NewFromUtf8(context->GetIsolate(), "stack-trace-test");
14110 v8::ScriptCompiler::Source script_source(src, v8::ScriptOrigin(origin)); 14111 v8::ScriptCompiler::Source script_source(src, v8::ScriptOrigin(origin));
14111 v8::ScriptCompiler::CompileUnbound(context->GetIsolate(), &script_source) 14112 v8::ScriptCompiler::CompileUnbound(context->GetIsolate(), &script_source)
14112 ->BindToCurrentContext() 14113 ->BindToCurrentContext()
14113 ->Run(); 14114 ->Run();
14114 CHECK(try_catch.HasCaught()); 14115 CHECK(try_catch.HasCaught());
(...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after
15073 "function outer() {\n" 15074 "function outer() {\n"
15074 " function foo() {\n" 15075 " function foo() {\n"
15075 " FAIL.FAIL;\n" 15076 " FAIL.FAIL;\n"
15076 " }\n" 15077 " }\n"
15077 " foo();\n" 15078 " foo();\n"
15078 "}\n" 15079 "}\n"
15079 "outer()\n%s"; 15080 "outer()\n%s";
15080 15081
15081 i::ScopedVector<char> code(1024); 15082 i::ScopedVector<char> code(1024);
15082 i::SNPrintF(code, source, "//# sourceURL=source_url"); 15083 i::SNPrintF(code, source, "//# sourceURL=source_url");
15083 v8::TryCatch try_catch; 15084 v8::TryCatch try_catch(context->GetIsolate());
15084 CompileRunWithOrigin(code.start(), "", 0, 0); 15085 CompileRunWithOrigin(code.start(), "", 0, 0);
15085 CHECK(try_catch.HasCaught()); 15086 CHECK(try_catch.HasCaught());
15086 v8::String::Utf8Value stack(try_catch.StackTrace()); 15087 v8::String::Utf8Value stack(try_catch.StackTrace());
15087 CHECK(strstr(*stack, "at foo (source_url:3:5)") != NULL); 15088 CHECK(strstr(*stack, "at foo (source_url:3:5)") != NULL);
15088 } 15089 }
15089 15090
15090 15091
15091 TEST(EvalWithSourceURLInMessageScriptResourceNameOrSourceURL) { 15092 TEST(EvalWithSourceURLInMessageScriptResourceNameOrSourceURL) {
15092 LocalContext context; 15093 LocalContext context;
15093 v8::HandleScope scope(context->GetIsolate()); 15094 v8::HandleScope scope(context->GetIsolate());
15094 15095
15095 const char *source = 15096 const char *source =
15096 "function outer() {\n" 15097 "function outer() {\n"
15097 " var scriptContents = \"function foo() { FAIL.FAIL; }\\\n" 15098 " var scriptContents = \"function foo() { FAIL.FAIL; }\\\n"
15098 " //# sourceURL=source_url\";\n" 15099 " //# sourceURL=source_url\";\n"
15099 " eval(scriptContents);\n" 15100 " eval(scriptContents);\n"
15100 " foo(); }\n" 15101 " foo(); }\n"
15101 "outer();\n" 15102 "outer();\n"
15102 "//# sourceURL=outer_url"; 15103 "//# sourceURL=outer_url";
15103 15104
15104 v8::TryCatch try_catch; 15105 v8::TryCatch try_catch(context->GetIsolate());
15105 CompileRun(source); 15106 CompileRun(source);
15106 CHECK(try_catch.HasCaught()); 15107 CHECK(try_catch.HasCaught());
15107 15108
15108 Local<v8::Message> message = try_catch.Message(); 15109 Local<v8::Message> message = try_catch.Message();
15109 Handle<Value> sourceURL = 15110 Handle<Value> sourceURL =
15110 message->GetScriptOrigin().ResourceName(); 15111 message->GetScriptOrigin().ResourceName();
15111 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(sourceURL), "source_url")); 15112 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(sourceURL), "source_url"));
15112 } 15113 }
15113 15114
15114 15115
15115 TEST(RecursionWithSourceURLInMessageScriptResourceNameOrSourceURL) { 15116 TEST(RecursionWithSourceURLInMessageScriptResourceNameOrSourceURL) {
15116 LocalContext context; 15117 LocalContext context;
15117 v8::HandleScope scope(context->GetIsolate()); 15118 v8::HandleScope scope(context->GetIsolate());
15118 15119
15119 const char *source = 15120 const char *source =
15120 "function outer() {\n" 15121 "function outer() {\n"
15121 " var scriptContents = \"function boo(){ boo(); }\\\n" 15122 " var scriptContents = \"function boo(){ boo(); }\\\n"
15122 " //# sourceURL=source_url\";\n" 15123 " //# sourceURL=source_url\";\n"
15123 " eval(scriptContents);\n" 15124 " eval(scriptContents);\n"
15124 " boo(); }\n" 15125 " boo(); }\n"
15125 "outer();\n" 15126 "outer();\n"
15126 "//# sourceURL=outer_url"; 15127 "//# sourceURL=outer_url";
15127 15128
15128 v8::TryCatch try_catch; 15129 v8::TryCatch try_catch(context->GetIsolate());
15129 CompileRun(source); 15130 CompileRun(source);
15130 CHECK(try_catch.HasCaught()); 15131 CHECK(try_catch.HasCaught());
15131 15132
15132 Local<v8::Message> message = try_catch.Message(); 15133 Local<v8::Message> message = try_catch.Message();
15133 Handle<Value> sourceURL = 15134 Handle<Value> sourceURL =
15134 message->GetScriptOrigin().ResourceName(); 15135 message->GetScriptOrigin().ResourceName();
15135 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(sourceURL), "source_url")); 15136 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(sourceURL), "source_url"));
15136 } 15137 }
15137 15138
15138 15139
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
15484 // split them into two 32-bit constants and combine them programmatically. 15485 // split them into two 32-bit constants and combine them programmatically.
15485 static double DoubleFromBits(uint32_t high_bits, uint32_t low_bits) { 15486 static double DoubleFromBits(uint32_t high_bits, uint32_t low_bits) {
15486 return DoubleFromBits((static_cast<uint64_t>(high_bits) << 32) | low_bits); 15487 return DoubleFromBits((static_cast<uint64_t>(high_bits) << 32) | low_bits);
15487 } 15488 }
15488 15489
15489 15490
15490 THREADED_TEST(QuietSignalingNaNs) { 15491 THREADED_TEST(QuietSignalingNaNs) {
15491 LocalContext context; 15492 LocalContext context;
15492 v8::Isolate* isolate = context->GetIsolate(); 15493 v8::Isolate* isolate = context->GetIsolate();
15493 v8::HandleScope scope(isolate); 15494 v8::HandleScope scope(isolate);
15494 v8::TryCatch try_catch; 15495 v8::TryCatch try_catch(isolate);
15495 15496
15496 // Special double values. 15497 // Special double values.
15497 double snan = DoubleFromBits(0x7ff00000, 0x00000001); 15498 double snan = DoubleFromBits(0x7ff00000, 0x00000001);
15498 double qnan = DoubleFromBits(0x7ff80000, 0x00000000); 15499 double qnan = DoubleFromBits(0x7ff80000, 0x00000000);
15499 double infinity = DoubleFromBits(0x7ff00000, 0x00000000); 15500 double infinity = DoubleFromBits(0x7ff00000, 0x00000000);
15500 double max_normal = DoubleFromBits(0x7fefffff, 0xffffffffu); 15501 double max_normal = DoubleFromBits(0x7fefffff, 0xffffffffu);
15501 double min_normal = DoubleFromBits(0x00100000, 0x00000000); 15502 double min_normal = DoubleFromBits(0x00100000, 0x00000000);
15502 double max_denormal = DoubleFromBits(0x000fffff, 0xffffffffu); 15503 double max_denormal = DoubleFromBits(0x000fffff, 0xffffffffu);
15503 double min_denormal = DoubleFromBits(0x00000000, 0x00000001); 15504 double min_denormal = DoubleFromBits(0x00000000, 0x00000001);
15504 15505
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
15571 CHECK_EQ(0xfff, static_cast<int>((stored_bits >> 51) & 0xfff)); 15572 CHECK_EQ(0xfff, static_cast<int>((stored_bits >> 51) & 0xfff));
15572 #endif 15573 #endif
15573 } 15574 }
15574 } 15575 }
15575 } 15576 }
15576 15577
15577 15578
15578 static void SpaghettiIncident( 15579 static void SpaghettiIncident(
15579 const v8::FunctionCallbackInfo<v8::Value>& args) { 15580 const v8::FunctionCallbackInfo<v8::Value>& args) {
15580 v8::HandleScope scope(args.GetIsolate()); 15581 v8::HandleScope scope(args.GetIsolate());
15581 v8::TryCatch tc; 15582 v8::TryCatch tc(args.GetIsolate());
15582 v8::Handle<v8::String> str(args[0]->ToString(args.GetIsolate())); 15583 v8::Handle<v8::String> str(args[0]->ToString(args.GetIsolate()));
15583 USE(str); 15584 USE(str);
15584 if (tc.HasCaught()) 15585 if (tc.HasCaught())
15585 tc.ReThrow(); 15586 tc.ReThrow();
15586 } 15587 }
15587 15588
15588 15589
15589 // Test that an exception can be propagated down through a spaghetti 15590 // Test that an exception can be propagated down through a spaghetti
15590 // stack using ReThrow. 15591 // stack using ReThrow.
15591 THREADED_TEST(SpaghettiStackReThrow) { 15592 THREADED_TEST(SpaghettiStackReThrow) {
15592 v8::Isolate* isolate = CcTest::isolate(); 15593 v8::Isolate* isolate = CcTest::isolate();
15593 v8::HandleScope scope(isolate); 15594 v8::HandleScope scope(isolate);
15594 LocalContext context; 15595 LocalContext context;
15595 context->Global()->Set( 15596 context->Global()->Set(
15596 v8::String::NewFromUtf8(isolate, "s"), 15597 v8::String::NewFromUtf8(isolate, "s"),
15597 v8::FunctionTemplate::New(isolate, SpaghettiIncident)->GetFunction()); 15598 v8::FunctionTemplate::New(isolate, SpaghettiIncident)->GetFunction());
15598 v8::TryCatch try_catch; 15599 v8::TryCatch try_catch(isolate);
15599 CompileRun( 15600 CompileRun(
15600 "var i = 0;" 15601 "var i = 0;"
15601 "var o = {" 15602 "var o = {"
15602 " toString: function () {" 15603 " toString: function () {"
15603 " if (i == 10) {" 15604 " if (i == 10) {"
15604 " throw 'Hey!';" 15605 " throw 'Hey!';"
15605 " } else {" 15606 " } else {"
15606 " i++;" 15607 " i++;"
15607 " return s(o);" 15608 " return s(o);"
15608 " }" 15609 " }"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
15674 CHECK_EQ(1, GetGlobalObjectsCount()); 15675 CHECK_EQ(1, GetGlobalObjectsCount());
15675 15676
15676 // Looking up the line number for an exception creates reference from the 15677 // Looking up the line number for an exception creates reference from the
15677 // compilation cache to the global object. 15678 // compilation cache to the global object.
15678 const char* source_exception = "function f(){throw 1;} f()"; 15679 const char* source_exception = "function f(){throw 1;} f()";
15679 { 15680 {
15680 v8::HandleScope scope(isolate); 15681 v8::HandleScope scope(isolate);
15681 v8::Local<Context> context = Context::New(isolate); 15682 v8::Local<Context> context = Context::New(isolate);
15682 15683
15683 context->Enter(); 15684 context->Enter();
15684 v8::TryCatch try_catch; 15685 v8::TryCatch try_catch(isolate);
15685 CompileRun(source_exception); 15686 CompileRun(source_exception);
15686 CHECK(try_catch.HasCaught()); 15687 CHECK(try_catch.HasCaught());
15687 v8::Handle<v8::Message> message = try_catch.Message(); 15688 v8::Handle<v8::Message> message = try_catch.Message();
15688 CHECK(!message.IsEmpty()); 15689 CHECK(!message.IsEmpty());
15689 CHECK_EQ(1, message->GetLineNumber()); 15690 CHECK_EQ(1, message->GetLineNumber());
15690 context->Exit(); 15691 context->Exit();
15691 } 15692 }
15692 isolate->ContextDisposedNotification(); 15693 isolate->ContextDisposedNotification();
15693 for (gc_count = 1; gc_count < 10; gc_count++) { 15694 for (gc_count = 1; gc_count < 10; gc_count++) {
15694 other_context->Enter(); 15695 other_context->Enter();
(...skipping 1592 matching lines...) Expand 10 before | Expand all | Expand 10 after
17287 static_cast<int>(re->GetFlags())); 17288 static_cast<int>(re->GetFlags()));
17288 17289
17289 context->Global()->Set(v8_str("re"), re); 17290 context->Global()->Set(v8_str("re"), re);
17290 ExpectTrue("re.test('FoobarbaZ')"); 17291 ExpectTrue("re.test('FoobarbaZ')");
17291 17292
17292 // RegExps are objects on which you can set properties. 17293 // RegExps are objects on which you can set properties.
17293 re->Set(v8_str("property"), v8::Integer::New(context->GetIsolate(), 32)); 17294 re->Set(v8_str("property"), v8::Integer::New(context->GetIsolate(), 32));
17294 v8::Handle<v8::Value> value(CompileRun("re.property")); 17295 v8::Handle<v8::Value> value(CompileRun("re.property"));
17295 CHECK_EQ(32, value->Int32Value()); 17296 CHECK_EQ(32, value->Int32Value());
17296 17297
17297 v8::TryCatch try_catch; 17298 v8::TryCatch try_catch(context->GetIsolate());
17298 re = v8::RegExp::New(v8_str("foo["), v8::RegExp::kNone); 17299 re = v8::RegExp::New(v8_str("foo["), v8::RegExp::kNone);
17299 CHECK(re.IsEmpty()); 17300 CHECK(re.IsEmpty());
17300 CHECK(try_catch.HasCaught()); 17301 CHECK(try_catch.HasCaught());
17301 context->Global()->Set(v8_str("ex"), try_catch.Exception()); 17302 context->Global()->Set(v8_str("ex"), try_catch.Exception());
17302 ExpectTrue("ex instanceof SyntaxError"); 17303 ExpectTrue("ex instanceof SyntaxError");
17303 } 17304 }
17304 17305
17305 17306
17306 THREADED_TEST(Equals) { 17307 THREADED_TEST(Equals) {
17307 LocalContext localContext; 17308 LocalContext localContext;
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
17627 Handle<Value> result = CompileRun("eval('42')"); 17628 Handle<Value> result = CompileRun("eval('42')");
17628 CHECK_EQ(42, result->Int32Value()); 17629 CHECK_EQ(42, result->Int32Value());
17629 result = CompileRun("(function(e) { return e('42'); })(eval)"); 17630 result = CompileRun("(function(e) { return e('42'); })(eval)");
17630 CHECK_EQ(42, result->Int32Value()); 17631 CHECK_EQ(42, result->Int32Value());
17631 result = CompileRun("var f = new Function('return 42'); f()"); 17632 result = CompileRun("var f = new Function('return 42'); f()");
17632 CHECK_EQ(42, result->Int32Value()); 17633 CHECK_EQ(42, result->Int32Value());
17633 } 17634 }
17634 17635
17635 17636
17636 void CheckCodeGenerationDisallowed() { 17637 void CheckCodeGenerationDisallowed() {
17637 TryCatch try_catch; 17638 TryCatch try_catch(CcTest::isolate());
17638 17639
17639 Handle<Value> result = CompileRun("eval('42')"); 17640 Handle<Value> result = CompileRun("eval('42')");
17640 CHECK(result.IsEmpty()); 17641 CHECK(result.IsEmpty());
17641 CHECK(try_catch.HasCaught()); 17642 CHECK(try_catch.HasCaught());
17642 try_catch.Reset(); 17643 try_catch.Reset();
17643 17644
17644 result = CompileRun("(function(e) { return e('42'); })(eval)"); 17645 result = CompileRun("(function(e) { return e('42'); })(eval)");
17645 CHECK(result.IsEmpty()); 17646 CHECK(result.IsEmpty());
17646 CHECK(try_catch.HasCaught()); 17647 CHECK(try_catch.HasCaught());
17647 try_catch.Reset(); 17648 try_catch.Reset();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
17690 // Set a callback that disallows the code generation. 17691 // Set a callback that disallows the code generation.
17691 V8::SetAllowCodeGenerationFromStringsCallback(&CodeGenerationDisallowed); 17692 V8::SetAllowCodeGenerationFromStringsCallback(&CodeGenerationDisallowed);
17692 CHECK(!context->IsCodeGenerationFromStringsAllowed()); 17693 CHECK(!context->IsCodeGenerationFromStringsAllowed());
17693 CheckCodeGenerationDisallowed(); 17694 CheckCodeGenerationDisallowed();
17694 } 17695 }
17695 17696
17696 17697
17697 TEST(SetErrorMessageForCodeGenFromStrings) { 17698 TEST(SetErrorMessageForCodeGenFromStrings) {
17698 LocalContext context; 17699 LocalContext context;
17699 v8::HandleScope scope(context->GetIsolate()); 17700 v8::HandleScope scope(context->GetIsolate());
17700 TryCatch try_catch; 17701 TryCatch try_catch(context->GetIsolate());
17701 17702
17702 Handle<String> message = v8_str("Message") ; 17703 Handle<String> message = v8_str("Message") ;
17703 Handle<String> expected_message = v8_str("Uncaught EvalError: Message"); 17704 Handle<String> expected_message = v8_str("Uncaught EvalError: Message");
17704 V8::SetAllowCodeGenerationFromStringsCallback(&CodeGenerationDisallowed); 17705 V8::SetAllowCodeGenerationFromStringsCallback(&CodeGenerationDisallowed);
17705 context->AllowCodeGenerationFromStrings(false); 17706 context->AllowCodeGenerationFromStrings(false);
17706 context->SetErrorMessageForCodeGenerationFromStrings(message); 17707 context->SetErrorMessageForCodeGenerationFromStrings(message);
17707 Handle<Value> result = CompileRun("eval('42')"); 17708 Handle<Value> result = CompileRun("eval('42')");
17708 CHECK(result.IsEmpty()); 17709 CHECK(result.IsEmpty());
17709 CHECK(try_catch.HasCaught()); 17710 CHECK(try_catch.HasCaught());
17710 Handle<String> actual_message = try_catch.Message()->Get(); 17711 Handle<String> actual_message = try_catch.Message()->Get();
17711 CHECK(expected_message->Equals(actual_message)); 17712 CHECK(expected_message->Equals(actual_message));
17712 } 17713 }
17713 17714
17714 17715
17715 static void NonObjectThis(const v8::FunctionCallbackInfo<v8::Value>& args) { 17716 static void NonObjectThis(const v8::FunctionCallbackInfo<v8::Value>& args) {
17716 } 17717 }
17717 17718
17718 17719
17719 THREADED_TEST(CallAPIFunctionOnNonObject) { 17720 THREADED_TEST(CallAPIFunctionOnNonObject) {
17720 LocalContext context; 17721 LocalContext context;
17721 v8::Isolate* isolate = context->GetIsolate(); 17722 v8::Isolate* isolate = context->GetIsolate();
17722 v8::HandleScope scope(isolate); 17723 v8::HandleScope scope(isolate);
17723 Handle<FunctionTemplate> templ = 17724 Handle<FunctionTemplate> templ =
17724 v8::FunctionTemplate::New(isolate, NonObjectThis); 17725 v8::FunctionTemplate::New(isolate, NonObjectThis);
17725 Handle<Function> function = templ->GetFunction(); 17726 Handle<Function> function = templ->GetFunction();
17726 context->Global()->Set(v8_str("f"), function); 17727 context->Global()->Set(v8_str("f"), function);
17727 TryCatch try_catch; 17728 TryCatch try_catch(isolate);
17728 CompileRun("f.call(2)"); 17729 CompileRun("f.call(2)");
17729 } 17730 }
17730 17731
17731 17732
17732 // Regression test for issue 1470. 17733 // Regression test for issue 1470.
17733 THREADED_TEST(ReadOnlyIndexedProperties) { 17734 THREADED_TEST(ReadOnlyIndexedProperties) {
17734 v8::Isolate* isolate = CcTest::isolate(); 17735 v8::Isolate* isolate = CcTest::isolate();
17735 v8::HandleScope scope(isolate); 17736 v8::HandleScope scope(isolate);
17736 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 17737 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
17737 17738
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
18166 LocalContext env; 18167 LocalContext env;
18167 v8::Isolate* isolate = env->GetIsolate(); 18168 v8::Isolate* isolate = env->GetIsolate();
18168 v8::HandleScope scope(isolate); 18169 v8::HandleScope scope(isolate);
18169 CompileRun( 18170 CompileRun(
18170 "var exception1Calls = 0;" 18171 "var exception1Calls = 0;"
18171 "var exception2Calls = 0;"); 18172 "var exception2Calls = 0;");
18172 isolate->EnqueueMicrotask( 18173 isolate->EnqueueMicrotask(
18173 Function::New(isolate, MicrotaskExceptionOne)); 18174 Function::New(isolate, MicrotaskExceptionOne));
18174 isolate->EnqueueMicrotask( 18175 isolate->EnqueueMicrotask(
18175 Function::New(isolate, MicrotaskExceptionTwo)); 18176 Function::New(isolate, MicrotaskExceptionTwo));
18176 TryCatch try_catch; 18177 TryCatch try_catch(isolate);
18177 CompileRun("1+1;"); 18178 CompileRun("1+1;");
18178 CHECK(!try_catch.HasCaught()); 18179 CHECK(!try_catch.HasCaught());
18179 CHECK_EQ(1, CompileRun("exception1Calls")->Int32Value()); 18180 CHECK_EQ(1, CompileRun("exception1Calls")->Int32Value());
18180 CHECK_EQ(1, CompileRun("exception2Calls")->Int32Value()); 18181 CHECK_EQ(1, CompileRun("exception2Calls")->Int32Value());
18181 } 18182 }
18182 18183
18183 18184
18184 TEST(SetAutorunMicrotasks) { 18185 TEST(SetAutorunMicrotasks) {
18185 LocalContext env; 18186 LocalContext env;
18186 v8::HandleScope scope(env->GetIsolate()); 18187 v8::HandleScope scope(env->GetIsolate());
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
18487 CHECK_EQ(0, instance_checked_getter_count); 18488 CHECK_EQ(0, instance_checked_getter_count);
18488 CHECK_EQ(0, instance_checked_setter_count); 18489 CHECK_EQ(0, instance_checked_setter_count);
18489 } 18490 }
18490 try_catch->Reset(); 18491 try_catch->Reset();
18491 } 18492 }
18492 18493
18493 18494
18494 static void CheckInstanceCheckedAccessors(bool expects_callbacks) { 18495 static void CheckInstanceCheckedAccessors(bool expects_callbacks) {
18495 instance_checked_getter_count = 0; 18496 instance_checked_getter_count = 0;
18496 instance_checked_setter_count = 0; 18497 instance_checked_setter_count = 0;
18497 TryCatch try_catch; 18498 TryCatch try_catch(CcTest::isolate());
18498 18499
18499 // Test path through generic runtime code. 18500 // Test path through generic runtime code.
18500 CompileRun("obj.foo"); 18501 CompileRun("obj.foo");
18501 CheckInstanceCheckedResult(1, 0, expects_callbacks, &try_catch); 18502 CheckInstanceCheckedResult(1, 0, expects_callbacks, &try_catch);
18502 CompileRun("obj.foo = 23"); 18503 CompileRun("obj.foo = 23");
18503 CheckInstanceCheckedResult(1, 1, expects_callbacks, &try_catch); 18504 CheckInstanceCheckedResult(1, 1, expects_callbacks, &try_catch);
18504 18505
18505 // Test path through generated LoadIC and StoredIC. 18506 // Test path through generated LoadIC and StoredIC.
18506 CompileRun("function test_get(o) { o.foo; }" 18507 CompileRun("function test_get(o) { o.foo; }"
18507 "test_get(obj);"); 18508 "test_get(obj);");
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
18635 } 18636 }
18636 18637
18637 18638
18638 TEST(TryFinallyMessage) { 18639 TEST(TryFinallyMessage) {
18639 LocalContext context; 18640 LocalContext context;
18640 v8::HandleScope scope(context->GetIsolate()); 18641 v8::HandleScope scope(context->GetIsolate());
18641 { 18642 {
18642 // Test that the original error message is not lost if there is a 18643 // Test that the original error message is not lost if there is a
18643 // recursive call into Javascript is done in the finally block, e.g. to 18644 // recursive call into Javascript is done in the finally block, e.g. to
18644 // initialize an IC. (crbug.com/129171) 18645 // initialize an IC. (crbug.com/129171)
18645 TryCatch try_catch; 18646 TryCatch try_catch(context->GetIsolate());
18646 const char* trigger_ic = 18647 const char* trigger_ic =
18647 "try { \n" 18648 "try { \n"
18648 " throw new Error('test'); \n" 18649 " throw new Error('test'); \n"
18649 "} finally { \n" 18650 "} finally { \n"
18650 " var x = 0; \n" 18651 " var x = 0; \n"
18651 " x++; \n" // Trigger an IC initialization here. 18652 " x++; \n" // Trigger an IC initialization here.
18652 "} \n"; 18653 "} \n";
18653 CompileRun(trigger_ic); 18654 CompileRun(trigger_ic);
18654 CHECK(try_catch.HasCaught()); 18655 CHECK(try_catch.HasCaught());
18655 Local<Message> message = try_catch.Message(); 18656 Local<Message> message = try_catch.Message();
18656 CHECK(!message.IsEmpty()); 18657 CHECK(!message.IsEmpty());
18657 CHECK_EQ(2, message->GetLineNumber()); 18658 CHECK_EQ(2, message->GetLineNumber());
18658 } 18659 }
18659 18660
18660 { 18661 {
18661 // Test that the original exception message is indeed overwritten if 18662 // Test that the original exception message is indeed overwritten if
18662 // a new error is thrown in the finally block. 18663 // a new error is thrown in the finally block.
18663 TryCatch try_catch; 18664 TryCatch try_catch(context->GetIsolate());
18664 const char* throw_again = 18665 const char* throw_again =
18665 "try { \n" 18666 "try { \n"
18666 " throw new Error('test'); \n" 18667 " throw new Error('test'); \n"
18667 "} finally { \n" 18668 "} finally { \n"
18668 " var x = 0; \n" 18669 " var x = 0; \n"
18669 " x++; \n" 18670 " x++; \n"
18670 " throw new Error('again'); \n" // This is the new uncaught error. 18671 " throw new Error('again'); \n" // This is the new uncaught error.
18671 "} \n"; 18672 "} \n";
18672 CompileRun(throw_again); 18673 CompileRun(throw_again);
18673 CHECK(try_catch.HasCaught()); 18674 CHECK(try_catch.HasCaught());
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
18823 } 18824 }
18824 18825
18825 18826
18826 THREADED_TEST(Regress137496) { 18827 THREADED_TEST(Regress137496) {
18827 i::FLAG_expose_gc = true; 18828 i::FLAG_expose_gc = true;
18828 LocalContext context; 18829 LocalContext context;
18829 v8::HandleScope scope(context->GetIsolate()); 18830 v8::HandleScope scope(context->GetIsolate());
18830 18831
18831 // Compile a try-finally clause where the finally block causes a GC 18832 // Compile a try-finally clause where the finally block causes a GC
18832 // while there still is a message pending for external reporting. 18833 // while there still is a message pending for external reporting.
18833 TryCatch try_catch; 18834 TryCatch try_catch(context->GetIsolate());
18834 try_catch.SetVerbose(true); 18835 try_catch.SetVerbose(true);
18835 CompileRun("try { throw new Error(); } finally { gc(); }"); 18836 CompileRun("try { throw new Error(); } finally { gc(); }");
18836 CHECK(try_catch.HasCaught()); 18837 CHECK(try_catch.HasCaught());
18837 } 18838 }
18838 18839
18839 18840
18840 THREADED_TEST(Regress157124) { 18841 THREADED_TEST(Regress157124) {
18841 LocalContext context; 18842 LocalContext context;
18842 v8::Isolate* isolate = context->GetIsolate(); 18843 v8::Isolate* isolate = context->GetIsolate();
18843 v8::HandleScope scope(isolate); 18844 v8::HandleScope scope(isolate);
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
19095 19096
19096 v8::Handle<v8::FunctionTemplate> catcher_fun = 19097 v8::Handle<v8::FunctionTemplate> catcher_fun =
19097 v8::FunctionTemplate::New(isolate, CatcherCallback); 19098 v8::FunctionTemplate::New(isolate, CatcherCallback);
19098 context1->Global()->Set(v8_str("catcher"), catcher_fun->GetFunction()); 19099 context1->Global()->Set(v8_str("catcher"), catcher_fun->GetFunction());
19099 19100
19100 v8::Handle<v8::FunctionTemplate> has_own_property_fun = 19101 v8::Handle<v8::FunctionTemplate> has_own_property_fun =
19101 v8::FunctionTemplate::New(isolate, HasOwnPropertyCallback); 19102 v8::FunctionTemplate::New(isolate, HasOwnPropertyCallback);
19102 context1->Global()->Set(v8_str("has_own_property"), 19103 context1->Global()->Set(v8_str("has_own_property"),
19103 has_own_property_fun->GetFunction()); 19104 has_own_property_fun->GetFunction());
19104 19105
19105 { v8::TryCatch try_catch; 19106 {
19107 v8::TryCatch try_catch(isolate);
19106 access_check_fail_thrown = false; 19108 access_check_fail_thrown = false;
19107 CompileRun("other.x;"); 19109 CompileRun("other.x;");
19108 CHECK(access_check_fail_thrown); 19110 CHECK(access_check_fail_thrown);
19109 CHECK(try_catch.HasCaught()); 19111 CHECK(try_catch.HasCaught());
19110 } 19112 }
19111 19113
19112 CheckCorrectThrow("other.x"); 19114 CheckCorrectThrow("other.x");
19113 CheckCorrectThrow("other[1]"); 19115 CheckCorrectThrow("other[1]");
19114 CheckCorrectThrow("JSON.stringify(other)"); 19116 CheckCorrectThrow("JSON.stringify(other)");
19115 CheckCorrectThrow("has_own_property(other, 'x')"); 19117 CheckCorrectThrow("has_own_property(other, 'x')");
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after
19712 "check(wrap_get());\n" 19714 "check(wrap_get());\n"
19713 "\n" 19715 "\n"
19714 "check = function(returned) {\n" 19716 "check = function(returned) {\n"
19715 " if (returned !== 1) { throw returned; }\n" 19717 " if (returned !== 1) { throw returned; }\n"
19716 "}\n" 19718 "}\n"
19717 "check(wrap_set());\n" 19719 "check(wrap_set());\n"
19718 "check(wrap_set());\n" 19720 "check(wrap_set());\n"
19719 "%%OptimizeFunctionOnNextCall(wrap_set_%d);\n" 19721 "%%OptimizeFunctionOnNextCall(wrap_set_%d);\n"
19720 "check(wrap_set());\n", 19722 "check(wrap_set());\n",
19721 wrap_function.start(), key, key, key, key, key, key); 19723 wrap_function.start(), key, key, key, key, key, key);
19722 v8::TryCatch try_catch; 19724 v8::TryCatch try_catch(isolate);
19723 CompileRun(source.start()); 19725 CompileRun(source.start());
19724 DCHECK(!try_catch.HasCaught()); 19726 DCHECK(!try_catch.HasCaught());
19725 CHECK_EQ(9, count); 19727 CHECK_EQ(9, count);
19726 } 19728 }
19727 }; 19729 };
19728 19730
19729 19731
19730 Local<Object> ApiCallOptimizationChecker::data; 19732 Local<Object> ApiCallOptimizationChecker::data;
19731 Local<Object> ApiCallOptimizationChecker::receiver; 19733 Local<Object> ApiCallOptimizationChecker::receiver;
19732 Local<Object> ApiCallOptimizationChecker::holder; 19734 Local<Object> ApiCallOptimizationChecker::holder;
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
20136 { v8::Isolate::AllowJavascriptExecutionScope yes_js(isolate); 20138 { v8::Isolate::AllowJavascriptExecutionScope yes_js(isolate);
20137 CompileRun("1+1"); 20139 CompileRun("1+1");
20138 } 20140 }
20139 } 20141 }
20140 20142
20141 20143
20142 TEST(ThrowOnJavascriptExecution) { 20144 TEST(ThrowOnJavascriptExecution) {
20143 LocalContext context; 20145 LocalContext context;
20144 v8::Isolate* isolate = context->GetIsolate(); 20146 v8::Isolate* isolate = context->GetIsolate();
20145 v8::HandleScope scope(isolate); 20147 v8::HandleScope scope(isolate);
20146 v8::TryCatch try_catch; 20148 v8::TryCatch try_catch(isolate);
20147 v8::Isolate::DisallowJavascriptExecutionScope throw_js( 20149 v8::Isolate::DisallowJavascriptExecutionScope throw_js(
20148 isolate, v8::Isolate::DisallowJavascriptExecutionScope::THROW_ON_FAILURE); 20150 isolate, v8::Isolate::DisallowJavascriptExecutionScope::THROW_ON_FAILURE);
20149 CompileRun("1+1"); 20151 CompileRun("1+1");
20150 CHECK(try_catch.HasCaught()); 20152 CHECK(try_catch.HasCaught());
20151 } 20153 }
20152 20154
20153 20155
20154 TEST(Regress354123) { 20156 TEST(Regress354123) {
20155 LocalContext current; 20157 LocalContext current;
20156 v8::Isolate* isolate = current->GetIsolate(); 20158 v8::Isolate* isolate = current->GetIsolate();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
20196 } 20198 }
20197 20199
20198 20200
20199 TEST(CaptureStackTraceForStackOverflow) { 20201 TEST(CaptureStackTraceForStackOverflow) {
20200 v8::internal::FLAG_stack_size = 150; 20202 v8::internal::FLAG_stack_size = 150;
20201 LocalContext current; 20203 LocalContext current;
20202 v8::Isolate* isolate = current->GetIsolate(); 20204 v8::Isolate* isolate = current->GetIsolate();
20203 v8::HandleScope scope(isolate); 20205 v8::HandleScope scope(isolate);
20204 V8::SetCaptureStackTraceForUncaughtExceptions( 20206 V8::SetCaptureStackTraceForUncaughtExceptions(
20205 true, 10, v8::StackTrace::kDetailed); 20207 true, 10, v8::StackTrace::kDetailed);
20206 v8::TryCatch try_catch; 20208 v8::TryCatch try_catch(isolate);
20207 CompileRun("(function f(x) { f(x+1); })(0)"); 20209 CompileRun("(function f(x) { f(x+1); })(0)");
20208 CHECK(try_catch.HasCaught()); 20210 CHECK(try_catch.HasCaught());
20209 } 20211 }
20210 20212
20211 20213
20212 TEST(ScriptNameAndLineNumber) { 20214 TEST(ScriptNameAndLineNumber) {
20213 LocalContext env; 20215 LocalContext env;
20214 v8::Isolate* isolate = env->GetIsolate(); 20216 v8::Isolate* isolate = env->GetIsolate();
20215 v8::HandleScope scope(isolate); 20217 v8::HandleScope scope(isolate);
20216 const char* url = "http://www.foo.com/foo.js"; 20218 const char* url = "http://www.foo.com/foo.js";
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
20437 // Helper function for running streaming tests. 20439 // Helper function for running streaming tests.
20438 void RunStreamingTest(const char** chunks, 20440 void RunStreamingTest(const char** chunks,
20439 v8::ScriptCompiler::StreamedSource::Encoding encoding = 20441 v8::ScriptCompiler::StreamedSource::Encoding encoding =
20440 v8::ScriptCompiler::StreamedSource::ONE_BYTE, 20442 v8::ScriptCompiler::StreamedSource::ONE_BYTE,
20441 bool expected_success = true, 20443 bool expected_success = true,
20442 const char* expected_source_url = NULL, 20444 const char* expected_source_url = NULL,
20443 const char* expected_source_mapping_url = NULL) { 20445 const char* expected_source_mapping_url = NULL) {
20444 LocalContext env; 20446 LocalContext env;
20445 v8::Isolate* isolate = env->GetIsolate(); 20447 v8::Isolate* isolate = env->GetIsolate();
20446 v8::HandleScope scope(isolate); 20448 v8::HandleScope scope(isolate);
20447 v8::TryCatch try_catch; 20449 v8::TryCatch try_catch(isolate);
20448 20450
20449 v8::ScriptCompiler::StreamedSource source(new TestSourceStream(chunks), 20451 v8::ScriptCompiler::StreamedSource source(new TestSourceStream(chunks),
20450 encoding); 20452 encoding);
20451 v8::ScriptCompiler::ScriptStreamingTask* task = 20453 v8::ScriptCompiler::ScriptStreamingTask* task =
20452 v8::ScriptCompiler::StartStreamingScript(isolate, &source); 20454 v8::ScriptCompiler::StartStreamingScript(isolate, &source);
20453 20455
20454 // TestSourceStream::GetMoreData won't block, so it's OK to just run the 20456 // TestSourceStream::GetMoreData won't block, so it's OK to just run the
20455 // task here in the main thread. 20457 // task here in the main thread.
20456 task->Run(); 20458 task->Run();
20457 delete task; 20459 delete task;
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
20809 v8::Isolate* isolate = env->GetIsolate(); 20811 v8::Isolate* isolate = env->GetIsolate();
20810 v8::HandleScope scope(isolate); 20812 v8::HandleScope scope(isolate);
20811 20813
20812 // First, run a script with a let variable. 20814 // First, run a script with a let variable.
20813 CompileRun("\"use strict\"; let x = 1;"); 20815 CompileRun("\"use strict\"; let x = 1;");
20814 20816
20815 // Then stream a script which (erroneously) tries to introduce the same 20817 // Then stream a script which (erroneously) tries to introduce the same
20816 // variable again. 20818 // variable again.
20817 const char* chunks[] = {"\"use strict\"; let x = 2;", NULL}; 20819 const char* chunks[] = {"\"use strict\"; let x = 2;", NULL};
20818 20820
20819 v8::TryCatch try_catch; 20821 v8::TryCatch try_catch(isolate);
20820 v8::ScriptCompiler::StreamedSource source( 20822 v8::ScriptCompiler::StreamedSource source(
20821 new TestSourceStream(chunks), 20823 new TestSourceStream(chunks),
20822 v8::ScriptCompiler::StreamedSource::ONE_BYTE); 20824 v8::ScriptCompiler::StreamedSource::ONE_BYTE);
20823 v8::ScriptCompiler::ScriptStreamingTask* task = 20825 v8::ScriptCompiler::ScriptStreamingTask* task =
20824 v8::ScriptCompiler::StartStreamingScript(isolate, &source); 20826 v8::ScriptCompiler::StartStreamingScript(isolate, &source);
20825 task->Run(); 20827 task->Run();
20826 delete task; 20828 delete task;
20827 20829
20828 // Parsing should succeed (the script will be parsed and compiled in a context 20830 // Parsing should succeed (the script will be parsed and compiled in a context
20829 // independent way, so the error is not detected). 20831 // independent way, so the error is not detected).
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
20924 } 20926 }
20925 20927
20926 20928
20927 TEST(StringConcatOverflow) { 20929 TEST(StringConcatOverflow) {
20928 v8::V8::Initialize(); 20930 v8::V8::Initialize();
20929 v8::HandleScope scope(CcTest::isolate()); 20931 v8::HandleScope scope(CcTest::isolate());
20930 RandomLengthOneByteResource* r = 20932 RandomLengthOneByteResource* r =
20931 new RandomLengthOneByteResource(i::String::kMaxLength); 20933 new RandomLengthOneByteResource(i::String::kMaxLength);
20932 v8::Local<v8::String> str = v8::String::NewExternal(CcTest::isolate(), r); 20934 v8::Local<v8::String> str = v8::String::NewExternal(CcTest::isolate(), r);
20933 CHECK(!str.IsEmpty()); 20935 CHECK(!str.IsEmpty());
20934 v8::TryCatch try_catch; 20936 v8::TryCatch try_catch(CcTest::isolate());
20935 v8::Local<v8::String> result = v8::String::Concat(str, str); 20937 v8::Local<v8::String> result = v8::String::Concat(str, str);
20936 CHECK(result.IsEmpty()); 20938 CHECK(result.IsEmpty());
20937 CHECK(!try_catch.HasCaught()); 20939 CHECK(!try_catch.HasCaught());
20938 } 20940 }
20939 20941
20940 20942
20941 TEST(TurboAsmDisablesNeuter) { 20943 TEST(TurboAsmDisablesNeuter) {
20942 v8::V8::Initialize(); 20944 v8::V8::Initialize();
20943 v8::HandleScope scope(CcTest::isolate()); 20945 v8::HandleScope scope(CcTest::isolate());
20944 LocalContext context; 20946 LocalContext context;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
20985 v8::HandleScope handle_scope(isolate); 20987 v8::HandleScope handle_scope(isolate);
20986 LocalContext env; 20988 LocalContext env;
20987 20989
20988 v8::Handle<v8::ObjectTemplate> obj_template = 20990 v8::Handle<v8::ObjectTemplate> obj_template =
20989 v8::ObjectTemplate::New(isolate); 20991 v8::ObjectTemplate::New(isolate);
20990 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL); 20992 obj_template->SetAccessCheckCallbacks(AccessAlwaysBlocked, NULL);
20991 20993
20992 env->Global()->Set(v8_str("prohibited"), obj_template->NewInstance()); 20994 env->Global()->Set(v8_str("prohibited"), obj_template->NewInstance());
20993 20995
20994 { 20996 {
20995 v8::TryCatch try_catch; 20997 v8::TryCatch try_catch(isolate);
20996 CompileRun( 20998 CompileRun(
20997 "function f() { %_GetPrototype(prohibited); }" 20999 "function f() { %_GetPrototype(prohibited); }"
20998 "%OptimizeFunctionOnNextCall(f);" 21000 "%OptimizeFunctionOnNextCall(f);"
20999 "f();"); 21001 "f();");
21000 CHECK(try_catch.HasCaught()); 21002 CHECK(try_catch.HasCaught());
21001 } 21003 }
21002 } 21004 }
21003 21005
21004 21006
21005 TEST(GetPrototypeHidden) { 21007 TEST(GetPrototypeHidden) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
21069 21071
21070 TEST(NewStringRangeError) { 21072 TEST(NewStringRangeError) {
21071 v8::Isolate* isolate = CcTest::isolate(); 21073 v8::Isolate* isolate = CcTest::isolate();
21072 v8::HandleScope handle_scope(isolate); 21074 v8::HandleScope handle_scope(isolate);
21073 const int length = i::String::kMaxLength + 1; 21075 const int length = i::String::kMaxLength + 1;
21074 const int buffer_size = length * sizeof(uint16_t); 21076 const int buffer_size = length * sizeof(uint16_t);
21075 void* buffer = malloc(buffer_size); 21077 void* buffer = malloc(buffer_size);
21076 if (buffer == NULL) return; 21078 if (buffer == NULL) return;
21077 memset(buffer, 'A', buffer_size); 21079 memset(buffer, 'A', buffer_size);
21078 { 21080 {
21079 v8::TryCatch try_catch; 21081 v8::TryCatch try_catch(isolate);
21080 char* data = reinterpret_cast<char*>(buffer); 21082 char* data = reinterpret_cast<char*>(buffer);
21081 CHECK(v8::String::NewFromUtf8(isolate, data, v8::String::kNormalString, 21083 CHECK(v8::String::NewFromUtf8(isolate, data, v8::String::kNormalString,
21082 length).IsEmpty()); 21084 length).IsEmpty());
21083 CHECK(!try_catch.HasCaught()); 21085 CHECK(!try_catch.HasCaught());
21084 } 21086 }
21085 { 21087 {
21086 v8::TryCatch try_catch; 21088 v8::TryCatch try_catch(isolate);
21087 uint8_t* data = reinterpret_cast<uint8_t*>(buffer); 21089 uint8_t* data = reinterpret_cast<uint8_t*>(buffer);
21088 CHECK(v8::String::NewFromOneByte(isolate, data, v8::String::kNormalString, 21090 CHECK(v8::String::NewFromOneByte(isolate, data, v8::String::kNormalString,
21089 length).IsEmpty()); 21091 length).IsEmpty());
21090 CHECK(!try_catch.HasCaught()); 21092 CHECK(!try_catch.HasCaught());
21091 } 21093 }
21092 { 21094 {
21093 v8::TryCatch try_catch; 21095 v8::TryCatch try_catch(isolate);
21094 uint16_t* data = reinterpret_cast<uint16_t*>(buffer); 21096 uint16_t* data = reinterpret_cast<uint16_t*>(buffer);
21095 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString, 21097 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString,
21096 length).IsEmpty()); 21098 length).IsEmpty());
21097 CHECK(!try_catch.HasCaught()); 21099 CHECK(!try_catch.HasCaught());
21098 } 21100 }
21099 free(buffer); 21101 free(buffer);
21100 } 21102 }
21101 21103
21102 21104
21103 TEST(SealHandleScope) { 21105 TEST(SealHandleScope) {
(...skipping 28 matching lines...) Expand all
21132 } 21134 }
21133 21135
21134 21136
21135 TEST(StrongModeArityCallFromApi) { 21137 TEST(StrongModeArityCallFromApi) {
21136 i::FLAG_strong_mode = true; 21138 i::FLAG_strong_mode = true;
21137 LocalContext env; 21139 LocalContext env;
21138 v8::Isolate* isolate = env->GetIsolate(); 21140 v8::Isolate* isolate = env->GetIsolate();
21139 v8::HandleScope scope(isolate); 21141 v8::HandleScope scope(isolate);
21140 Local<Function> fun; 21142 Local<Function> fun;
21141 { 21143 {
21142 v8::TryCatch try_catch; 21144 v8::TryCatch try_catch(isolate);
21143 fun = Local<Function>::Cast(CompileRun( 21145 fun = Local<Function>::Cast(CompileRun(
21144 "function f(x) { 'use strong'; }" 21146 "function f(x) { 'use strong'; }"
21145 "f")); 21147 "f"));
21146 21148
21147 CHECK(!try_catch.HasCaught()); 21149 CHECK(!try_catch.HasCaught());
21148 } 21150 }
21149 21151
21150 { 21152 {
21151 v8::TryCatch try_catch; 21153 v8::TryCatch try_catch(isolate);
21152 fun->Call(v8::Undefined(isolate), 0, nullptr); 21154 fun->Call(v8::Undefined(isolate), 0, nullptr);
21153 CHECK(try_catch.HasCaught()); 21155 CHECK(try_catch.HasCaught());
21154 } 21156 }
21155 21157
21156 { 21158 {
21157 v8::TryCatch try_catch; 21159 v8::TryCatch try_catch(isolate);
21158 v8::Handle<Value> args[] = {v8_num(42)}; 21160 v8::Handle<Value> args[] = {v8_num(42)};
21159 fun->Call(v8::Undefined(isolate), arraysize(args), args); 21161 fun->Call(v8::Undefined(isolate), arraysize(args), args);
21160 CHECK(!try_catch.HasCaught()); 21162 CHECK(!try_catch.HasCaught());
21161 } 21163 }
21162 21164
21163 { 21165 {
21164 v8::TryCatch try_catch; 21166 v8::TryCatch try_catch(isolate);
21165 v8::Handle<Value> args[] = {v8_num(42), v8_num(555)}; 21167 v8::Handle<Value> args[] = {v8_num(42), v8_num(555)};
21166 fun->Call(v8::Undefined(isolate), arraysize(args), args); 21168 fun->Call(v8::Undefined(isolate), arraysize(args), args);
21167 CHECK(!try_catch.HasCaught()); 21169 CHECK(!try_catch.HasCaught());
21168 } 21170 }
21169 } 21171 }
21170 21172
21171 21173
21172 TEST(StrongModeArityCallFromApi2) { 21174 TEST(StrongModeArityCallFromApi2) {
21173 i::FLAG_strong_mode = true; 21175 i::FLAG_strong_mode = true;
21174 LocalContext env; 21176 LocalContext env;
21175 v8::Isolate* isolate = env->GetIsolate(); 21177 v8::Isolate* isolate = env->GetIsolate();
21176 v8::HandleScope scope(isolate); 21178 v8::HandleScope scope(isolate);
21177 Local<Function> fun; 21179 Local<Function> fun;
21178 { 21180 {
21179 v8::TryCatch try_catch; 21181 v8::TryCatch try_catch(isolate);
21180 fun = Local<Function>::Cast(CompileRun( 21182 fun = Local<Function>::Cast(CompileRun(
21181 "'use strong';" 21183 "'use strong';"
21182 "function f(x) {}" 21184 "function f(x) {}"
21183 "f")); 21185 "f"));
21184 21186
21185 CHECK(!try_catch.HasCaught()); 21187 CHECK(!try_catch.HasCaught());
21186 } 21188 }
21187 21189
21188 { 21190 {
21189 v8::TryCatch try_catch; 21191 v8::TryCatch try_catch(isolate);
21190 fun->Call(v8::Undefined(isolate), 0, nullptr); 21192 fun->Call(v8::Undefined(isolate), 0, nullptr);
21191 CHECK(try_catch.HasCaught()); 21193 CHECK(try_catch.HasCaught());
21192 } 21194 }
21193 21195
21194 { 21196 {
21195 v8::TryCatch try_catch; 21197 v8::TryCatch try_catch(isolate);
21196 v8::Handle<Value> args[] = {v8_num(42)}; 21198 v8::Handle<Value> args[] = {v8_num(42)};
21197 fun->Call(v8::Undefined(isolate), arraysize(args), args); 21199 fun->Call(v8::Undefined(isolate), arraysize(args), args);
21198 CHECK(!try_catch.HasCaught()); 21200 CHECK(!try_catch.HasCaught());
21199 } 21201 }
21200 21202
21201 { 21203 {
21202 v8::TryCatch try_catch; 21204 v8::TryCatch try_catch(isolate);
21203 v8::Handle<Value> args[] = {v8_num(42), v8_num(555)}; 21205 v8::Handle<Value> args[] = {v8_num(42), v8_num(555)};
21204 fun->Call(v8::Undefined(isolate), arraysize(args), args); 21206 fun->Call(v8::Undefined(isolate), arraysize(args), args);
21205 CHECK(!try_catch.HasCaught()); 21207 CHECK(!try_catch.HasCaught());
21206 } 21208 }
21207 } 21209 }
21208 21210
21209 21211
21210 TEST(ExtrasExportsObject) { 21212 TEST(ExtrasExportsObject) {
21211 v8::Isolate* isolate = CcTest::isolate(); 21213 v8::Isolate* isolate = CcTest::isolate();
21212 v8::HandleScope handle_scope(isolate); 21214 v8::HandleScope handle_scope(isolate);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
21272 CHECK_EQ(2, set->Size()); 21274 CHECK_EQ(2, set->Size());
21273 21275
21274 v8::Local<v8::Array> keys = set->AsArray(); 21276 v8::Local<v8::Array> keys = set->AsArray();
21275 CHECK_EQ(2, keys->Length()); 21277 CHECK_EQ(2, keys->Length());
21276 CHECK_EQ(1, keys->Get(0).As<v8::Int32>()->Value()); 21278 CHECK_EQ(1, keys->Get(0).As<v8::Int32>()->Value());
21277 CHECK_EQ(2, keys->Get(1).As<v8::Int32>()->Value()); 21279 CHECK_EQ(2, keys->Get(1).As<v8::Int32>()->Value());
21278 21280
21279 set = v8::Set::FromArray(env.local(), keys).ToLocalChecked(); 21281 set = v8::Set::FromArray(env.local(), keys).ToLocalChecked();
21280 CHECK_EQ(2, set->Size()); 21282 CHECK_EQ(2, set->Size());
21281 } 21283 }
OLDNEW
« no previous file with comments | « test/cctest/test-accessors.cc ('k') | test/cctest/test-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698