OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 13657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13668 LocalContext c1; | 13668 LocalContext c1; |
13669 v8::HeapStatistics heap_statistics; | 13669 v8::HeapStatistics heap_statistics; |
13670 CHECK_EQ(static_cast<int>(heap_statistics.total_heap_size()), 0); | 13670 CHECK_EQ(static_cast<int>(heap_statistics.total_heap_size()), 0); |
13671 CHECK_EQ(static_cast<int>(heap_statistics.used_heap_size()), 0); | 13671 CHECK_EQ(static_cast<int>(heap_statistics.used_heap_size()), 0); |
13672 v8::V8::GetHeapStatistics(&heap_statistics); | 13672 v8::V8::GetHeapStatistics(&heap_statistics); |
13673 CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0); | 13673 CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0); |
13674 CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0); | 13674 CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0); |
13675 } | 13675 } |
13676 | 13676 |
13677 | 13677 |
| 13678 class VisitorImpl : public v8::ExternalResourceVisitor { |
| 13679 public: |
| 13680 VisitorImpl(TestResource* r1, TestResource* r2) |
| 13681 : resource1_(r1), |
| 13682 resource2_(r2), |
| 13683 found_resource1_(false), |
| 13684 found_resource2_(false) {} |
| 13685 virtual ~VisitorImpl() {} |
| 13686 virtual void VisitExternalString(v8::Handle<v8::String> string) { |
| 13687 if (!string->IsExternal()) { |
| 13688 CHECK(string->IsExternalAscii()); |
| 13689 return; |
| 13690 } |
| 13691 v8::String::ExternalStringResource* resource = |
| 13692 string->GetExternalStringResource(); |
| 13693 CHECK(resource); |
| 13694 if (resource1_ == resource) { |
| 13695 CHECK(!found_resource1_); |
| 13696 found_resource1_ = true; |
| 13697 } |
| 13698 if (resource2_ == resource) { |
| 13699 CHECK(!found_resource2_); |
| 13700 found_resource2_ = true; |
| 13701 } |
| 13702 } |
| 13703 void CheckVisitedResources() { |
| 13704 CHECK(found_resource1_); |
| 13705 CHECK(found_resource2_); |
| 13706 } |
| 13707 |
| 13708 private: |
| 13709 v8::String::ExternalStringResource* resource1_; |
| 13710 v8::String::ExternalStringResource* resource2_; |
| 13711 bool found_resource1_; |
| 13712 bool found_resource2_; |
| 13713 }; |
| 13714 |
| 13715 TEST(VisitExternalStrings) { |
| 13716 v8::HandleScope scope; |
| 13717 LocalContext env; |
| 13718 const char* string = "Some string"; |
| 13719 uint16_t* two_byte_string = AsciiToTwoByteString(string); |
| 13720 TestResource* resource1 = new TestResource(two_byte_string); |
| 13721 v8::Local<v8::String> string1 = v8::String::NewExternal(resource1); |
| 13722 TestResource* resource2 = new TestResource(two_byte_string); |
| 13723 v8::Local<v8::String> string2 = v8::String::NewExternal(resource2); |
| 13724 |
| 13725 VisitorImpl visitor(resource1, resource2); |
| 13726 v8::V8::VisitExternalResources(&visitor); |
| 13727 visitor.CheckVisitedResources(); |
| 13728 } |
| 13729 |
| 13730 |
13678 static double DoubleFromBits(uint64_t value) { | 13731 static double DoubleFromBits(uint64_t value) { |
13679 double target; | 13732 double target; |
13680 memcpy(&target, &value, sizeof(target)); | 13733 memcpy(&target, &value, sizeof(target)); |
13681 return target; | 13734 return target; |
13682 } | 13735 } |
13683 | 13736 |
13684 | 13737 |
13685 static uint64_t DoubleToBits(double value) { | 13738 static uint64_t DoubleToBits(double value) { |
13686 uint64_t target; | 13739 uint64_t target; |
13687 memcpy(&target, &value, sizeof(target)); | 13740 memcpy(&target, &value, sizeof(target)); |
(...skipping 2136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15824 CompileRun("throw 'exception';"); | 15877 CompileRun("throw 'exception';"); |
15825 } | 15878 } |
15826 | 15879 |
15827 | 15880 |
15828 TEST(CallCompletedCallbackTwoExceptions) { | 15881 TEST(CallCompletedCallbackTwoExceptions) { |
15829 v8::HandleScope scope; | 15882 v8::HandleScope scope; |
15830 LocalContext env; | 15883 LocalContext env; |
15831 v8::V8::AddCallCompletedCallback(CallCompletedCallbackException); | 15884 v8::V8::AddCallCompletedCallback(CallCompletedCallbackException); |
15832 CompileRun("throw 'first exception';"); | 15885 CompileRun("throw 'first exception';"); |
15833 } | 15886 } |
OLD | NEW |