Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2007-2010 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2010 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 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 #ifdef VERIFY_HEAP | 191 #ifdef VERIFY_HEAP |
| 192 isolate->heap()->Verify(); | 192 isolate->heap()->Verify(); |
| 193 #endif | 193 #endif |
| 194 CHECK(isolate->global_object()->IsJSObject()); | 194 CHECK(isolate->global_object()->IsJSObject()); |
| 195 CHECK(isolate->native_context()->IsContext()); | 195 CHECK(isolate->native_context()->IsContext()); |
| 196 CHECK(isolate->heap()->string_table()->IsStringTable()); | 196 CHECK(isolate->heap()->string_table()->IsStringTable()); |
| 197 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("Empty")); | 197 isolate->factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("Empty")); |
| 198 } | 198 } |
| 199 | 199 |
| 200 | 200 |
| 201 UNINITIALIZED_DEPENDENT_TEST(Deserialize, Serialize) { | 201 UNINITIALIZED_TEST(Deserialize) { |
| 202 // The serialize-deserialize tests only work if the VM is built without | 202 // The serialize-deserialize tests only work if the VM is built without |
| 203 // serialization. That doesn't matter. We don't need to be able to | 203 // serialization. That doesn't matter. We don't need to be able to |
| 204 // serialize a snapshot in a VM that is booted from a snapshot. | 204 // serialize a snapshot in a VM that is booted from a snapshot. |
| 205 DisableTurbofan(); | 205 DisableTurbofan(); |
| 206 if (DefaultSnapshotAvailable()) return; | 206 if (DefaultSnapshotAvailable()) return; |
| 207 v8::Isolate* isolate = Deserialize(); | 207 v8::Isolate* isolate = TestIsolate::NewInitialized(true); |
| 208 Serialize(isolate); | |
| 209 isolate = Deserialize(); | |
| 208 { | 210 { |
| 209 v8::HandleScope handle_scope(isolate); | 211 v8::HandleScope handle_scope(isolate); |
| 210 v8::Isolate::Scope isolate_scope(isolate); | 212 v8::Isolate::Scope isolate_scope(isolate); |
| 211 | 213 |
| 212 v8::Local<v8::Context> env = v8::Context::New(isolate); | 214 v8::Local<v8::Context> env = v8::Context::New(isolate); |
| 213 env->Enter(); | 215 env->Enter(); |
| 214 | 216 |
| 215 SanityCheck(isolate); | 217 SanityCheck(isolate); |
| 216 } | 218 } |
| 217 isolate->Dispose(); | 219 isolate->Dispose(); |
| 218 } | 220 } |
| 219 | 221 |
| 220 | 222 |
| 221 UNINITIALIZED_DEPENDENT_TEST(DeserializeFromSecondSerialization, | 223 UNINITIALIZED_TEST(DeserializeFromSecondSerialization) { |
| 222 SerializeTwice) { | |
| 223 DisableTurbofan(); | 224 DisableTurbofan(); |
| 224 if (DefaultSnapshotAvailable()) return; | 225 if (DefaultSnapshotAvailable()) return; |
| 225 v8::Isolate* isolate = Deserialize(); | 226 v8::Isolate* isolate = TestIsolate::NewInitialized(true); |
| 227 Serialize(isolate); | |
| 228 Serialize(isolate); | |
| 229 isolate = Deserialize(); | |
| 226 { | 230 { |
| 227 v8::Isolate::Scope isolate_scope(isolate); | 231 v8::Isolate::Scope isolate_scope(isolate); |
| 228 v8::HandleScope handle_scope(isolate); | 232 v8::HandleScope handle_scope(isolate); |
| 229 | 233 |
| 230 v8::Local<v8::Context> env = v8::Context::New(isolate); | 234 v8::Local<v8::Context> env = v8::Context::New(isolate); |
| 231 env->Enter(); | 235 env->Enter(); |
| 232 | 236 |
| 233 SanityCheck(isolate); | 237 SanityCheck(isolate); |
| 234 } | 238 } |
| 235 isolate->Dispose(); | 239 isolate->Dispose(); |
| 236 } | 240 } |
| 237 | 241 |
| 238 | 242 |
| 239 UNINITIALIZED_DEPENDENT_TEST(DeserializeAndRunScript2, Serialize) { | 243 UNINITIALIZED_TEST(DeserializeAndRunScript2) { |
| 240 DisableTurbofan(); | 244 DisableTurbofan(); |
| 241 if (DefaultSnapshotAvailable()) return; | 245 if (DefaultSnapshotAvailable()) return; |
| 242 v8::Isolate* isolate = Deserialize(); | 246 v8::Isolate* isolate = TestIsolate::NewInitialized(true); |
| 247 Serialize(isolate); | |
|
Michael Achenbach
2016/03/02 11:22:47
FYI: The old "Serialize" test doesn't call isolate
| |
| 248 isolate = Deserialize(); | |
| 243 { | 249 { |
| 244 v8::Isolate::Scope isolate_scope(isolate); | 250 v8::Isolate::Scope isolate_scope(isolate); |
| 245 v8::HandleScope handle_scope(isolate); | 251 v8::HandleScope handle_scope(isolate); |
| 246 | 252 |
| 247 | 253 |
| 248 v8::Local<v8::Context> env = v8::Context::New(isolate); | 254 v8::Local<v8::Context> env = v8::Context::New(isolate); |
| 249 env->Enter(); | 255 env->Enter(); |
| 250 | 256 |
| 251 const char* c_source = "\"1234\".length"; | 257 const char* c_source = "\"1234\".length"; |
| 252 v8::Local<v8::Script> script = v8_compile(c_source); | 258 v8::Local<v8::Script> script = v8_compile(c_source); |
| 253 v8::Maybe<int32_t> result = script->Run(isolate->GetCurrentContext()) | 259 v8::Maybe<int32_t> result = script->Run(isolate->GetCurrentContext()) |
| 254 .ToLocalChecked() | 260 .ToLocalChecked() |
| 255 ->Int32Value(isolate->GetCurrentContext()); | 261 ->Int32Value(isolate->GetCurrentContext()); |
| 256 CHECK_EQ(4, result.FromJust()); | 262 CHECK_EQ(4, result.FromJust()); |
| 257 } | 263 } |
| 258 isolate->Dispose(); | 264 isolate->Dispose(); |
| 259 } | 265 } |
| 260 | 266 |
| 261 | 267 |
| 262 UNINITIALIZED_DEPENDENT_TEST(DeserializeFromSecondSerializationAndRunScript2, | 268 UNINITIALIZED_TEST(DeserializeFromSecondSerializationAndRunScript2) { |
| 263 SerializeTwice) { | |
| 264 DisableTurbofan(); | 269 DisableTurbofan(); |
| 265 if (DefaultSnapshotAvailable()) return; | 270 if (DefaultSnapshotAvailable()) return; |
| 266 v8::Isolate* isolate = Deserialize(); | 271 v8::Isolate* isolate = TestIsolate::NewInitialized(true); |
| 272 Serialize(isolate); | |
| 273 Serialize(isolate); | |
| 274 isolate = Deserialize(); | |
| 267 { | 275 { |
| 268 v8::Isolate::Scope isolate_scope(isolate); | 276 v8::Isolate::Scope isolate_scope(isolate); |
| 269 v8::HandleScope handle_scope(isolate); | 277 v8::HandleScope handle_scope(isolate); |
| 270 | 278 |
| 271 v8::Local<v8::Context> env = v8::Context::New(isolate); | 279 v8::Local<v8::Context> env = v8::Context::New(isolate); |
| 272 env->Enter(); | 280 env->Enter(); |
| 273 | 281 |
| 274 const char* c_source = "\"1234\".length"; | 282 const char* c_source = "\"1234\".length"; |
| 275 v8::Local<v8::Script> script = v8_compile(c_source); | 283 v8::Local<v8::Script> script = v8_compile(c_source); |
| 276 v8::Maybe<int32_t> result = script->Run(isolate->GetCurrentContext()) | 284 v8::Maybe<int32_t> result = script->Run(isolate->GetCurrentContext()) |
| 277 .ToLocalChecked() | 285 .ToLocalChecked() |
| 278 ->Int32Value(isolate->GetCurrentContext()); | 286 ->Int32Value(isolate->GetCurrentContext()); |
| 279 CHECK_EQ(4, result.FromJust()); | 287 CHECK_EQ(4, result.FromJust()); |
| 280 } | 288 } |
| 281 isolate->Dispose(); | 289 isolate->Dispose(); |
| 282 } | 290 } |
| 283 | 291 |
| 284 | 292 static void PartiallySerialize() { |
| 285 UNINITIALIZED_TEST(PartialSerialization) { | |
| 286 DisableTurbofan(); | |
| 287 if (DefaultSnapshotAvailable()) return; | |
| 288 v8::Isolate* v8_isolate = TestIsolate::NewInitialized(true); | 293 v8::Isolate* v8_isolate = TestIsolate::NewInitialized(true); |
| 289 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); | 294 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); |
| 290 v8_isolate->Enter(); | 295 v8_isolate->Enter(); |
| 291 { | 296 { |
| 292 Heap* heap = isolate->heap(); | 297 Heap* heap = isolate->heap(); |
| 293 | 298 |
| 294 v8::Persistent<v8::Context> env; | 299 v8::Persistent<v8::Context> env; |
| 295 { | 300 { |
| 296 HandleScope scope(isolate); | 301 HandleScope scope(isolate); |
| 297 env.Reset(v8_isolate, v8::Context::New(v8_isolate)); | 302 env.Reset(v8_isolate, v8::Context::New(v8_isolate)); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 346 WritePayload(partial_snapshot.RawData(), FLAG_testing_serialization_file); | 351 WritePayload(partial_snapshot.RawData(), FLAG_testing_serialization_file); |
| 347 WritePayload(startup_snapshot.RawData(), startup_name.start()); | 352 WritePayload(startup_snapshot.RawData(), startup_name.start()); |
| 348 | 353 |
| 349 startup_name.Dispose(); | 354 startup_name.Dispose(); |
| 350 } | 355 } |
| 351 v8_isolate->Exit(); | 356 v8_isolate->Exit(); |
| 352 v8_isolate->Dispose(); | 357 v8_isolate->Dispose(); |
| 353 } | 358 } |
| 354 | 359 |
| 355 | 360 |
| 356 UNINITIALIZED_DEPENDENT_TEST(PartialDeserialization, PartialSerialization) { | 361 UNINITIALIZED_TEST(PartialSerialization) { |
| 357 DisableTurbofan(); | 362 DisableTurbofan(); |
| 358 if (DefaultSnapshotAvailable()) return; | 363 if (DefaultSnapshotAvailable()) return; |
| 364 PartiallySerialize(); | |
|
Michael Achenbach
2016/03/02 11:22:47
For all serialize/deserialize pairs: Do we want th
| |
| 365 } | |
| 366 | |
| 367 | |
| 368 UNINITIALIZED_TEST(PartialDeserialization) { | |
| 369 DisableTurbofan(); | |
| 370 if (DefaultSnapshotAvailable()) return; | |
| 371 PartiallySerialize(); | |
| 359 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; | 372 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; |
| 360 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); | 373 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); |
| 361 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); | 374 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); |
| 362 | 375 |
| 363 v8::Isolate* v8_isolate = InitializeFromFile(startup_name.start()); | 376 v8::Isolate* v8_isolate = InitializeFromFile(startup_name.start()); |
| 364 CHECK(v8_isolate); | 377 CHECK(v8_isolate); |
| 365 startup_name.Dispose(); | 378 startup_name.Dispose(); |
| 366 { | 379 { |
| 367 v8::Isolate::Scope isolate_scope(v8_isolate); | 380 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 368 | 381 |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 393 .ToHandleChecked(); | 406 .ToHandleChecked(); |
| 394 CHECK(root2->IsString()); | 407 CHECK(root2->IsString()); |
| 395 CHECK(root.is_identical_to(root2)); | 408 CHECK(root.is_identical_to(root2)); |
| 396 } | 409 } |
| 397 | 410 |
| 398 DeleteArray(snapshot); | 411 DeleteArray(snapshot); |
| 399 } | 412 } |
| 400 v8_isolate->Dispose(); | 413 v8_isolate->Dispose(); |
| 401 } | 414 } |
| 402 | 415 |
| 403 | 416 static void SerializeContext() { |
| 404 UNINITIALIZED_TEST(ContextSerialization) { | |
| 405 DisableTurbofan(); | |
| 406 if (DefaultSnapshotAvailable()) return; | |
| 407 v8::Isolate* v8_isolate = TestIsolate::NewInitialized(true); | 417 v8::Isolate* v8_isolate = TestIsolate::NewInitialized(true); |
| 408 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); | 418 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); |
| 409 Heap* heap = isolate->heap(); | 419 Heap* heap = isolate->heap(); |
| 410 { | 420 { |
| 411 v8::Isolate::Scope isolate_scope(v8_isolate); | 421 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 412 | 422 |
| 413 v8::Persistent<v8::Context> env; | 423 v8::Persistent<v8::Context> env; |
| 414 { | 424 { |
| 415 HandleScope scope(isolate); | 425 HandleScope scope(isolate); |
| 416 env.Reset(v8_isolate, v8::Context::New(v8_isolate)); | 426 env.Reset(v8_isolate, v8::Context::New(v8_isolate)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 459 | 469 |
| 460 WritePayload(partial_snapshot.RawData(), FLAG_testing_serialization_file); | 470 WritePayload(partial_snapshot.RawData(), FLAG_testing_serialization_file); |
| 461 WritePayload(startup_snapshot.RawData(), startup_name.start()); | 471 WritePayload(startup_snapshot.RawData(), startup_name.start()); |
| 462 | 472 |
| 463 startup_name.Dispose(); | 473 startup_name.Dispose(); |
| 464 } | 474 } |
| 465 v8_isolate->Dispose(); | 475 v8_isolate->Dispose(); |
| 466 } | 476 } |
| 467 | 477 |
| 468 | 478 |
| 469 UNINITIALIZED_DEPENDENT_TEST(ContextDeserialization, ContextSerialization) { | 479 UNINITIALIZED_TEST(ContextSerialization) { |
| 470 DisableTurbofan(); | 480 DisableTurbofan(); |
| 471 if (DefaultSnapshotAvailable()) return; | 481 if (DefaultSnapshotAvailable()) return; |
| 482 SerializeContext(); | |
| 483 } | |
| 484 | |
| 485 | |
| 486 UNINITIALIZED_TEST(ContextDeserialization) { | |
| 487 DisableTurbofan(); | |
| 488 if (DefaultSnapshotAvailable()) return; | |
| 489 SerializeContext(); | |
| 472 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; | 490 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; |
| 473 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); | 491 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); |
| 474 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); | 492 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); |
| 475 | 493 |
| 476 v8::Isolate* v8_isolate = InitializeFromFile(startup_name.start()); | 494 v8::Isolate* v8_isolate = InitializeFromFile(startup_name.start()); |
| 477 CHECK(v8_isolate); | 495 CHECK(v8_isolate); |
| 478 startup_name.Dispose(); | 496 startup_name.Dispose(); |
| 479 { | 497 { |
| 480 v8::Isolate::Scope isolate_scope(v8_isolate); | 498 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 481 | 499 |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 506 .ToHandleChecked(); | 524 .ToHandleChecked(); |
| 507 CHECK(root2->IsContext()); | 525 CHECK(root2->IsContext()); |
| 508 CHECK(!root.is_identical_to(root2)); | 526 CHECK(!root.is_identical_to(root2)); |
| 509 } | 527 } |
| 510 DeleteArray(snapshot); | 528 DeleteArray(snapshot); |
| 511 } | 529 } |
| 512 v8_isolate->Dispose(); | 530 v8_isolate->Dispose(); |
| 513 } | 531 } |
| 514 | 532 |
| 515 | 533 |
| 516 UNINITIALIZED_TEST(CustomContextSerialization) { | 534 static void SerializeCustomContext() { |
| 517 DisableTurbofan(); | |
| 518 if (DefaultSnapshotAvailable()) return; | |
| 519 v8::Isolate* v8_isolate = TestIsolate::NewInitialized(true); | 535 v8::Isolate* v8_isolate = TestIsolate::NewInitialized(true); |
| 520 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); | 536 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); |
| 521 { | 537 { |
| 522 v8::Isolate::Scope isolate_scope(v8_isolate); | 538 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 523 | 539 |
| 524 v8::Persistent<v8::Context> env; | 540 v8::Persistent<v8::Context> env; |
| 525 { | 541 { |
| 526 HandleScope scope(isolate); | 542 HandleScope scope(isolate); |
| 527 env.Reset(v8_isolate, v8::Context::New(v8_isolate)); | 543 env.Reset(v8_isolate, v8::Context::New(v8_isolate)); |
| 528 } | 544 } |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 590 | 606 |
| 591 WritePayload(partial_snapshot.RawData(), FLAG_testing_serialization_file); | 607 WritePayload(partial_snapshot.RawData(), FLAG_testing_serialization_file); |
| 592 WritePayload(startup_snapshot.RawData(), startup_name.start()); | 608 WritePayload(startup_snapshot.RawData(), startup_name.start()); |
| 593 | 609 |
| 594 startup_name.Dispose(); | 610 startup_name.Dispose(); |
| 595 } | 611 } |
| 596 v8_isolate->Dispose(); | 612 v8_isolate->Dispose(); |
| 597 } | 613 } |
| 598 | 614 |
| 599 | 615 |
| 600 UNINITIALIZED_DEPENDENT_TEST(CustomContextDeserialization, | 616 |
| 601 CustomContextSerialization) { | 617 UNINITIALIZED_TEST(CustomContextSerialization) { |
| 618 DisableTurbofan(); | |
| 619 if (DefaultSnapshotAvailable()) return; | |
| 620 SerializeCustomContext(); | |
| 621 } | |
| 622 | |
| 623 | |
| 624 UNINITIALIZED_TEST(CustomContextDeserialization) { | |
| 602 DisableTurbofan(); | 625 DisableTurbofan(); |
| 603 FLAG_crankshaft = false; | 626 FLAG_crankshaft = false; |
| 604 if (DefaultSnapshotAvailable()) return; | 627 if (DefaultSnapshotAvailable()) return; |
| 628 SerializeCustomContext(); | |
| 605 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; | 629 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; |
| 606 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); | 630 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); |
| 607 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); | 631 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); |
| 608 | 632 |
| 609 v8::Isolate* v8_isolate = InitializeFromFile(startup_name.start()); | 633 v8::Isolate* v8_isolate = InitializeFromFile(startup_name.start()); |
| 610 CHECK(v8_isolate); | 634 CHECK(v8_isolate); |
| 611 startup_name.Dispose(); | 635 startup_name.Dispose(); |
| 612 { | 636 { |
| 613 v8::Isolate::Scope isolate_scope(v8_isolate); | 637 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 614 | 638 |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 862 TEST(TestThatAlwaysSucceeds) { | 886 TEST(TestThatAlwaysSucceeds) { |
| 863 } | 887 } |
| 864 | 888 |
| 865 | 889 |
| 866 TEST(TestThatAlwaysFails) { | 890 TEST(TestThatAlwaysFails) { |
| 867 bool ArtificialFailure = false; | 891 bool ArtificialFailure = false; |
| 868 CHECK(ArtificialFailure); | 892 CHECK(ArtificialFailure); |
| 869 } | 893 } |
| 870 | 894 |
| 871 | 895 |
| 872 DEPENDENT_TEST(DependentTestThatAlwaysFails, TestThatAlwaysSucceeds) { | |
| 873 bool ArtificialFailure2 = false; | |
| 874 CHECK(ArtificialFailure2); | |
| 875 } | |
| 876 | |
| 877 | |
| 878 int CountBuiltins() { | 896 int CountBuiltins() { |
| 879 // Check that we have not deserialized any additional builtin. | 897 // Check that we have not deserialized any additional builtin. |
| 880 HeapIterator iterator(CcTest::heap()); | 898 HeapIterator iterator(CcTest::heap()); |
| 881 DisallowHeapAllocation no_allocation; | 899 DisallowHeapAllocation no_allocation; |
| 882 int counter = 0; | 900 int counter = 0; |
| 883 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { | 901 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
| 884 if (obj->IsCode() && Code::cast(obj)->kind() == Code::BUILTIN) counter++; | 902 if (obj->IsCode() && Code::cast(obj)->kind() == Code::BUILTIN) counter++; |
| 885 } | 903 } |
| 886 return counter; | 904 return counter; |
| 887 } | 905 } |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1768 delete script_data; | 1786 delete script_data; |
| 1769 } | 1787 } |
| 1770 | 1788 |
| 1771 | 1789 |
| 1772 TEST(SerializationMemoryStats) { | 1790 TEST(SerializationMemoryStats) { |
| 1773 FLAG_profile_deserialization = true; | 1791 FLAG_profile_deserialization = true; |
| 1774 FLAG_always_opt = false; | 1792 FLAG_always_opt = false; |
| 1775 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); | 1793 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); |
| 1776 delete[] blob.data; | 1794 delete[] blob.data; |
| 1777 } | 1795 } |
| OLD | NEW |