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

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

Issue 9227007: Version 3.8.6 (Closed) Base URL: http://v8.googlecode.com/svn/trunk/
Patch Set: Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/cctest/test-alloc.cc ('k') | test/cctest/test-assembler-x64.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 2011 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
11 // with the distribution. 11 // with the distribution.
(...skipping 2848 matching lines...) Expand 10 before | Expand all | Expand 10 after
2860 // Fraction. 2860 // Fraction.
2861 CompileRun("var obj = 42.3;"); 2861 CompileRun("var obj = 42.3;");
2862 obj = env->Global()->Get(v8_str("obj")); 2862 obj = env->Global()->Get(v8_str("obj"));
2863 CHECK(!obj->IsInt32()); 2863 CHECK(!obj->IsInt32());
2864 CHECK(!obj->IsUint32()); 2864 CHECK(!obj->IsUint32());
2865 // Large negative fraction. 2865 // Large negative fraction.
2866 CompileRun("var obj = -5726623061.75;"); 2866 CompileRun("var obj = -5726623061.75;");
2867 obj = env->Global()->Get(v8_str("obj")); 2867 obj = env->Global()->Get(v8_str("obj"));
2868 CHECK(!obj->IsInt32()); 2868 CHECK(!obj->IsInt32());
2869 CHECK(!obj->IsUint32()); 2869 CHECK(!obj->IsUint32());
2870 // Positive zero
2871 CompileRun("var obj = 0.0;");
2872 obj = env->Global()->Get(v8_str("obj"));
2873 CHECK(obj->IsInt32());
2874 CHECK(obj->IsUint32());
2875 // Positive zero
2876 CompileRun("var obj = -0.0;");
2877 obj = env->Global()->Get(v8_str("obj"));
2878 CHECK(!obj->IsInt32());
2879 CHECK(!obj->IsUint32());
2870 } 2880 }
2871 2881
2872 2882
2873 THREADED_TEST(ConversionException) { 2883 THREADED_TEST(ConversionException) {
2874 v8::HandleScope scope; 2884 v8::HandleScope scope;
2875 LocalContext env; 2885 LocalContext env;
2876 CompileRun( 2886 CompileRun(
2877 "function TestClass() { };" 2887 "function TestClass() { };"
2878 "TestClass.prototype.toString = function () { throw 'uncle?'; };" 2888 "TestClass.prototype.toString = function () { throw 'uncle?'; };"
2879 "var obj = new TestClass();"); 2889 "var obj = new TestClass();");
(...skipping 5054 matching lines...) Expand 10 before | Expand all | Expand 10 after
7934 7944
7935 THREADED_TEST(CrossEval) { 7945 THREADED_TEST(CrossEval) {
7936 v8::HandleScope scope; 7946 v8::HandleScope scope;
7937 LocalContext other; 7947 LocalContext other;
7938 LocalContext current; 7948 LocalContext current;
7939 7949
7940 Local<String> token = v8_str("<security token>"); 7950 Local<String> token = v8_str("<security token>");
7941 other->SetSecurityToken(token); 7951 other->SetSecurityToken(token);
7942 current->SetSecurityToken(token); 7952 current->SetSecurityToken(token);
7943 7953
7944 // Setup reference from current to other. 7954 // Set up reference from current to other.
7945 current->Global()->Set(v8_str("other"), other->Global()); 7955 current->Global()->Set(v8_str("other"), other->Global());
7946 7956
7947 // Check that new variables are introduced in other context. 7957 // Check that new variables are introduced in other context.
7948 Local<Script> script = 7958 Local<Script> script =
7949 Script::Compile(v8_str("other.eval('var foo = 1234')")); 7959 Script::Compile(v8_str("other.eval('var foo = 1234')"));
7950 script->Run(); 7960 script->Run();
7951 Local<Value> foo = other->Global()->Get(v8_str("foo")); 7961 Local<Value> foo = other->Global()->Get(v8_str("foo"));
7952 CHECK_EQ(1234, foo->Int32Value()); 7962 CHECK_EQ(1234, foo->Int32Value());
7953 CHECK(!current->Global()->Has(v8_str("foo"))); 7963 CHECK(!current->Global()->Has(v8_str("foo")));
7954 7964
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
8014 8024
8015 // Test that calling eval in a context which has been detached from 8025 // Test that calling eval in a context which has been detached from
8016 // its global throws an exception. This behavior is consistent with 8026 // its global throws an exception. This behavior is consistent with
8017 // other JavaScript implementations. 8027 // other JavaScript implementations.
8018 THREADED_TEST(EvalInDetachedGlobal) { 8028 THREADED_TEST(EvalInDetachedGlobal) {
8019 v8::HandleScope scope; 8029 v8::HandleScope scope;
8020 8030
8021 v8::Persistent<Context> context0 = Context::New(); 8031 v8::Persistent<Context> context0 = Context::New();
8022 v8::Persistent<Context> context1 = Context::New(); 8032 v8::Persistent<Context> context1 = Context::New();
8023 8033
8024 // Setup function in context0 that uses eval from context0. 8034 // Set up function in context0 that uses eval from context0.
8025 context0->Enter(); 8035 context0->Enter();
8026 v8::Handle<v8::Value> fun = 8036 v8::Handle<v8::Value> fun =
8027 CompileRun("var x = 42;" 8037 CompileRun("var x = 42;"
8028 "(function() {" 8038 "(function() {"
8029 " var e = eval;" 8039 " var e = eval;"
8030 " return function(s) { return e(s); }" 8040 " return function(s) { return e(s); }"
8031 "})()"); 8041 "})()");
8032 context0->Exit(); 8042 context0->Exit();
8033 8043
8034 // Put the function into context1 and call it before and after 8044 // Put the function into context1 and call it before and after
(...skipping 17 matching lines...) Expand all
8052 8062
8053 THREADED_TEST(CrossLazyLoad) { 8063 THREADED_TEST(CrossLazyLoad) {
8054 v8::HandleScope scope; 8064 v8::HandleScope scope;
8055 LocalContext other; 8065 LocalContext other;
8056 LocalContext current; 8066 LocalContext current;
8057 8067
8058 Local<String> token = v8_str("<security token>"); 8068 Local<String> token = v8_str("<security token>");
8059 other->SetSecurityToken(token); 8069 other->SetSecurityToken(token);
8060 current->SetSecurityToken(token); 8070 current->SetSecurityToken(token);
8061 8071
8062 // Setup reference from current to other. 8072 // Set up reference from current to other.
8063 current->Global()->Set(v8_str("other"), other->Global()); 8073 current->Global()->Set(v8_str("other"), other->Global());
8064 8074
8065 // Trigger lazy loading in other context. 8075 // Trigger lazy loading in other context.
8066 Local<Script> script = 8076 Local<Script> script =
8067 Script::Compile(v8_str("other.eval('new Date(42)')")); 8077 Script::Compile(v8_str("other.eval('new Date(42)')"));
8068 Local<Value> value = script->Run(); 8078 Local<Value> value = script->Run();
8069 CHECK_EQ(42.0, value->NumberValue()); 8079 CHECK_EQ(42.0, value->NumberValue());
8070 } 8080 }
8071 8081
8072 8082
(...skipping 2090 matching lines...) Expand 10 before | Expand all | Expand 10 after
10163 } else { 10173 } else {
10164 // Otherwise select a new test and start that. 10174 // Otherwise select a new test and start that.
10165 NextThread(); 10175 NextThread();
10166 } 10176 }
10167 } 10177 }
10168 10178
10169 10179
10170 static unsigned linear_congruential_generator; 10180 static unsigned linear_congruential_generator;
10171 10181
10172 10182
10173 void ApiTestFuzzer::Setup(PartOfTest part) { 10183 void ApiTestFuzzer::SetUp(PartOfTest part) {
10174 linear_congruential_generator = i::FLAG_testing_prng_seed; 10184 linear_congruential_generator = i::FLAG_testing_prng_seed;
10175 fuzzing_ = true; 10185 fuzzing_ = true;
10176 int count = RegisterThreadedTest::count(); 10186 int count = RegisterThreadedTest::count();
10177 int start = count * part / (LAST_PART + 1); 10187 int start = count * part / (LAST_PART + 1);
10178 int end = (count * (part + 1) / (LAST_PART + 1)) - 1; 10188 int end = (count * (part + 1) / (LAST_PART + 1)) - 1;
10179 active_tests_ = tests_being_run_ = end - start + 1; 10189 active_tests_ = tests_being_run_ = end - start + 1;
10180 for (int i = 0; i < tests_being_run_; i++) { 10190 for (int i = 0; i < tests_being_run_; i++) {
10181 RegisterThreadedTest::nth(i)->fuzzer_ = new ApiTestFuzzer(i + start); 10191 RegisterThreadedTest::nth(i)->fuzzer_ = new ApiTestFuzzer(i + start);
10182 } 10192 }
10183 for (int i = 0; i < active_tests_; i++) { 10193 for (int i = 0; i < active_tests_; i++) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
10227 fuzzing_ = false; 10237 fuzzing_ = false;
10228 for (int i = 0; i < RegisterThreadedTest::count(); i++) { 10238 for (int i = 0; i < RegisterThreadedTest::count(); i++) {
10229 ApiTestFuzzer *fuzzer = RegisterThreadedTest::nth(i)->fuzzer_; 10239 ApiTestFuzzer *fuzzer = RegisterThreadedTest::nth(i)->fuzzer_;
10230 if (fuzzer != NULL) fuzzer->Join(); 10240 if (fuzzer != NULL) fuzzer->Join();
10231 } 10241 }
10232 } 10242 }
10233 10243
10234 10244
10235 // Lets not be needlessly self-referential. 10245 // Lets not be needlessly self-referential.
10236 TEST(Threading) { 10246 TEST(Threading) {
10237 ApiTestFuzzer::Setup(ApiTestFuzzer::FIRST_PART); 10247 ApiTestFuzzer::SetUp(ApiTestFuzzer::FIRST_PART);
10238 ApiTestFuzzer::RunAllTests(); 10248 ApiTestFuzzer::RunAllTests();
10239 ApiTestFuzzer::TearDown(); 10249 ApiTestFuzzer::TearDown();
10240 } 10250 }
10241 10251
10242 TEST(Threading2) { 10252 TEST(Threading2) {
10243 ApiTestFuzzer::Setup(ApiTestFuzzer::SECOND_PART); 10253 ApiTestFuzzer::SetUp(ApiTestFuzzer::SECOND_PART);
10244 ApiTestFuzzer::RunAllTests(); 10254 ApiTestFuzzer::RunAllTests();
10245 ApiTestFuzzer::TearDown(); 10255 ApiTestFuzzer::TearDown();
10246 } 10256 }
10247 10257
10248 TEST(Threading3) { 10258 TEST(Threading3) {
10249 ApiTestFuzzer::Setup(ApiTestFuzzer::THIRD_PART); 10259 ApiTestFuzzer::SetUp(ApiTestFuzzer::THIRD_PART);
10250 ApiTestFuzzer::RunAllTests(); 10260 ApiTestFuzzer::RunAllTests();
10251 ApiTestFuzzer::TearDown(); 10261 ApiTestFuzzer::TearDown();
10252 } 10262 }
10253 10263
10254 TEST(Threading4) { 10264 TEST(Threading4) {
10255 ApiTestFuzzer::Setup(ApiTestFuzzer::FOURTH_PART); 10265 ApiTestFuzzer::SetUp(ApiTestFuzzer::FOURTH_PART);
10256 ApiTestFuzzer::RunAllTests(); 10266 ApiTestFuzzer::RunAllTests();
10257 ApiTestFuzzer::TearDown(); 10267 ApiTestFuzzer::TearDown();
10258 } 10268 }
10259 10269
10260 void ApiTestFuzzer::CallTest() { 10270 void ApiTestFuzzer::CallTest() {
10261 if (kLogThreading) 10271 if (kLogThreading)
10262 printf("Start test %d\n", test_number_); 10272 printf("Start test %d\n", test_number_);
10263 CallTestNumber(test_number_); 10273 CallTestNumber(test_number_);
10264 if (kLogThreading) 10274 if (kLogThreading)
10265 printf("End test %d\n", test_number_); 10275 printf("End test %d\n", test_number_);
(...skipping 1838 matching lines...) Expand 10 before | Expand all | Expand 10 after
12104 calling_context2->SetSecurityToken(token); 12114 calling_context2->SetSecurityToken(token);
12105 12115
12106 // Create an object with a C++ callback in context0. 12116 // Create an object with a C++ callback in context0.
12107 calling_context0->Enter(); 12117 calling_context0->Enter();
12108 Local<v8::FunctionTemplate> callback_templ = 12118 Local<v8::FunctionTemplate> callback_templ =
12109 v8::FunctionTemplate::New(GetCallingContextCallback); 12119 v8::FunctionTemplate::New(GetCallingContextCallback);
12110 calling_context0->Global()->Set(v8_str("callback"), 12120 calling_context0->Global()->Set(v8_str("callback"),
12111 callback_templ->GetFunction()); 12121 callback_templ->GetFunction());
12112 calling_context0->Exit(); 12122 calling_context0->Exit();
12113 12123
12114 // Expose context0 in context1 and setup a function that calls the 12124 // Expose context0 in context1 and set up a function that calls the
12115 // callback function. 12125 // callback function.
12116 calling_context1->Enter(); 12126 calling_context1->Enter();
12117 calling_context1->Global()->Set(v8_str("context0"), 12127 calling_context1->Global()->Set(v8_str("context0"),
12118 calling_context0->Global()); 12128 calling_context0->Global());
12119 CompileRun("function f() { context0.callback() }"); 12129 CompileRun("function f() { context0.callback() }");
12120 calling_context1->Exit(); 12130 calling_context1->Exit();
12121 12131
12122 // Expose context1 in context2 and call the callback function in 12132 // Expose context1 in context2 and call the callback function in
12123 // context0 indirectly through f in context1. 12133 // context0 indirectly through f in context1.
12124 calling_context2->Enter(); 12134 calling_context2->Enter();
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
12262 12272
12263 result = CompileRun("var sum = 0;" 12273 result = CompileRun("var sum = 0;"
12264 "for (var i = 0; i < 8; i++) {" 12274 "for (var i = 0; i < 8; i++) {"
12265 " sum += pixels[i];" 12275 " sum += pixels[i];"
12266 "}" 12276 "}"
12267 "sum;"); 12277 "sum;");
12268 CHECK_EQ(28, result->Int32Value()); 12278 CHECK_EQ(28, result->Int32Value());
12269 12279
12270 i::Handle<i::Smi> value(i::Smi::FromInt(2)); 12280 i::Handle<i::Smi> value(i::Smi::FromInt(2));
12271 i::Handle<i::Object> no_failure; 12281 i::Handle<i::Object> no_failure;
12272 no_failure = i::SetElement(jsobj, 1, value, i::kNonStrictMode); 12282 no_failure = i::JSObject::SetElement(jsobj, 1, value, i::kNonStrictMode);
12273 ASSERT(!no_failure.is_null()); 12283 ASSERT(!no_failure.is_null());
12274 i::USE(no_failure); 12284 i::USE(no_failure);
12275 CHECK_EQ(2, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 12285 CHECK_EQ(2, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value());
12276 *value.location() = i::Smi::FromInt(256); 12286 *value.location() = i::Smi::FromInt(256);
12277 no_failure = i::SetElement(jsobj, 1, value, i::kNonStrictMode); 12287 no_failure = i::JSObject::SetElement(jsobj, 1, value, i::kNonStrictMode);
12278 ASSERT(!no_failure.is_null()); 12288 ASSERT(!no_failure.is_null());
12279 i::USE(no_failure); 12289 i::USE(no_failure);
12280 CHECK_EQ(255, 12290 CHECK_EQ(255,
12281 i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 12291 i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value());
12282 *value.location() = i::Smi::FromInt(-1); 12292 *value.location() = i::Smi::FromInt(-1);
12283 no_failure = i::SetElement(jsobj, 1, value, i::kNonStrictMode); 12293 no_failure = i::JSObject::SetElement(jsobj, 1, value, i::kNonStrictMode);
12284 ASSERT(!no_failure.is_null()); 12294 ASSERT(!no_failure.is_null());
12285 i::USE(no_failure); 12295 i::USE(no_failure);
12286 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value()); 12296 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(1)->ToObjectChecked())->value());
12287 12297
12288 result = CompileRun("for (var i = 0; i < 8; i++) {" 12298 result = CompileRun("for (var i = 0; i < 8; i++) {"
12289 " pixels[i] = (i * 65) - 109;" 12299 " pixels[i] = (i * 65) - 109;"
12290 "}" 12300 "}"
12291 "pixels[1] + pixels[6];"); 12301 "pixels[1] + pixels[6];");
12292 CHECK_EQ(255, result->Int32Value()); 12302 CHECK_EQ(255, result->Int32Value());
12293 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(0)->ToObjectChecked())->value()); 12303 CHECK_EQ(0, i::Smi::cast(jsobj->GetElement(0)->ToObjectChecked())->value());
(...skipping 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after
13542 rv = v8::V8::IdleNotification(); 13552 rv = v8::V8::IdleNotification();
13543 if (rv) 13553 if (rv)
13544 break; 13554 break;
13545 } 13555 }
13546 CHECK(rv == true); 13556 CHECK(rv == true);
13547 } 13557 }
13548 13558
13549 // Test that idle notification can be handled and eventually returns true. 13559 // Test that idle notification can be handled and eventually returns true.
13550 // This just checks the contract of the IdleNotification() function, 13560 // This just checks the contract of the IdleNotification() function,
13551 // and does not verify that it does reasonable work. 13561 // and does not verify that it does reasonable work.
13552 THREADED_TEST(IdleNotificationWithHint) { 13562 TEST(IdleNotificationWithHint) {
13553 v8::HandleScope scope; 13563 v8::HandleScope scope;
13554 LocalContext env; 13564 LocalContext env;
13555 CompileRun("function binom(n, m) {" 13565 {
13556 " var C = [[1]];" 13566 i::AlwaysAllocateScope always_allocate;
13557 " for (var i = 1; i <= n; ++i) {" 13567 CompileRun("function binom(n, m) {"
13558 " C[i] = [1];" 13568 " var C = [[1]];"
13559 " for (var j = 1; j < i; ++j) {" 13569 " for (var i = 1; i <= n; ++i) {"
13560 " C[i][j] = C[i-1][j-1] + C[i-1][j];" 13570 " C[i] = [1];"
13561 " }" 13571 " for (var j = 1; j < i; ++j) {"
13562 " C[i][i] = 1;" 13572 " C[i][j] = C[i-1][j-1] + C[i-1][j];"
13563 " }" 13573 " }"
13564 " return C[n][m];" 13574 " C[i][i] = 1;"
13565 "};" 13575 " }"
13566 "binom(1000, 500)"); 13576 " return C[n][m];"
13577 "};"
13578 "binom(1000, 500)");
13579 }
13567 bool rv = false; 13580 bool rv = false;
13568 intptr_t old_size = HEAP->SizeOfObjects(); 13581 intptr_t old_size = HEAP->SizeOfObjects();
13569 bool no_idle_work = v8::V8::IdleNotification(10); 13582 bool no_idle_work = v8::V8::IdleNotification(10);
13570 for (int i = 0; i < 200; i++) { 13583 for (int i = 0; i < 200; i++) {
13571 rv = v8::V8::IdleNotification(10); 13584 rv = v8::V8::IdleNotification(10);
13572 if (rv) 13585 if (rv)
13573 break; 13586 break;
13574 } 13587 }
13575 CHECK(rv == true); 13588 CHECK(rv == true);
13576 intptr_t new_size = HEAP->SizeOfObjects(); 13589 intptr_t new_size = HEAP->SizeOfObjects();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
13658 LocalContext c1; 13671 LocalContext c1;
13659 v8::HeapStatistics heap_statistics; 13672 v8::HeapStatistics heap_statistics;
13660 CHECK_EQ(static_cast<int>(heap_statistics.total_heap_size()), 0); 13673 CHECK_EQ(static_cast<int>(heap_statistics.total_heap_size()), 0);
13661 CHECK_EQ(static_cast<int>(heap_statistics.used_heap_size()), 0); 13674 CHECK_EQ(static_cast<int>(heap_statistics.used_heap_size()), 0);
13662 v8::V8::GetHeapStatistics(&heap_statistics); 13675 v8::V8::GetHeapStatistics(&heap_statistics);
13663 CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0); 13676 CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0);
13664 CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0); 13677 CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0);
13665 } 13678 }
13666 13679
13667 13680
13681 class VisitorImpl : public v8::ExternalResourceVisitor {
13682 public:
13683 VisitorImpl(TestResource* r1, TestResource* r2)
13684 : resource1_(r1),
13685 resource2_(r2),
13686 found_resource1_(false),
13687 found_resource2_(false) {}
13688 virtual ~VisitorImpl() {}
13689 virtual void VisitExternalString(v8::Handle<v8::String> string) {
13690 if (!string->IsExternal()) {
13691 CHECK(string->IsExternalAscii());
13692 return;
13693 }
13694 v8::String::ExternalStringResource* resource =
13695 string->GetExternalStringResource();
13696 CHECK(resource);
13697 if (resource1_ == resource) {
13698 CHECK(!found_resource1_);
13699 found_resource1_ = true;
13700 }
13701 if (resource2_ == resource) {
13702 CHECK(!found_resource2_);
13703 found_resource2_ = true;
13704 }
13705 }
13706 void CheckVisitedResources() {
13707 CHECK(found_resource1_);
13708 CHECK(found_resource2_);
13709 }
13710
13711 private:
13712 v8::String::ExternalStringResource* resource1_;
13713 v8::String::ExternalStringResource* resource2_;
13714 bool found_resource1_;
13715 bool found_resource2_;
13716 };
13717
13718 TEST(VisitExternalStrings) {
13719 v8::HandleScope scope;
13720 LocalContext env;
13721 const char* string = "Some string";
13722 uint16_t* two_byte_string = AsciiToTwoByteString(string);
13723 TestResource* resource1 = new TestResource(two_byte_string);
13724 v8::Local<v8::String> string1 = v8::String::NewExternal(resource1);
13725 TestResource* resource2 = new TestResource(two_byte_string);
13726 v8::Local<v8::String> string2 = v8::String::NewExternal(resource2);
13727
13728 VisitorImpl visitor(resource1, resource2);
13729 v8::V8::VisitExternalResources(&visitor);
13730 visitor.CheckVisitedResources();
13731 }
13732
13733
13668 static double DoubleFromBits(uint64_t value) { 13734 static double DoubleFromBits(uint64_t value) {
13669 double target; 13735 double target;
13670 memcpy(&target, &value, sizeof(target)); 13736 memcpy(&target, &value, sizeof(target));
13671 return target; 13737 return target;
13672 } 13738 }
13673 13739
13674 13740
13675 static uint64_t DoubleToBits(double value) { 13741 static uint64_t DoubleToBits(double value) {
13676 uint64_t target; 13742 uint64_t target;
13677 memcpy(&target, &value, sizeof(target)); 13743 memcpy(&target, &value, sizeof(target));
(...skipping 2136 matching lines...) Expand 10 before | Expand all | Expand 10 after
15814 CompileRun("throw 'exception';"); 15880 CompileRun("throw 'exception';");
15815 } 15881 }
15816 15882
15817 15883
15818 TEST(CallCompletedCallbackTwoExceptions) { 15884 TEST(CallCompletedCallbackTwoExceptions) {
15819 v8::HandleScope scope; 15885 v8::HandleScope scope;
15820 LocalContext env; 15886 LocalContext env;
15821 v8::V8::AddCallCompletedCallback(CallCompletedCallbackException); 15887 v8::V8::AddCallCompletedCallback(CallCompletedCallbackException);
15822 CompileRun("throw 'first exception';"); 15888 CompileRun("throw 'first exception';");
15823 } 15889 }
OLDNEW
« no previous file with comments | « test/cctest/test-alloc.cc ('k') | test/cctest/test-assembler-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698