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

Side by Side Diff: vm/object.cc

Issue 10834284: - Split Dart core libraries into shared sources and patch sources. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 4 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 | « vm/object.h ('k') | vm/parser.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/bigint_operations.h" 10 #include "vm/bigint_operations.h"
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 const String& name = String::Handle(Symbols::New(cname)); 423 const String& name = String::Handle(Symbols::New(cname));
424 const Class& cls = Class::Handle( 424 const Class& cls = Class::Handle(
425 Class::NewInterface(name, script, Scanner::kDummyTokenIndex)); 425 Class::NewInterface(name, script, Scanner::kDummyTokenIndex));
426 lib.AddClass(cls); 426 lib.AddClass(cls);
427 return cls.raw(); 427 return cls.raw();
428 } 428 }
429 429
430 430
431 void Object::RegisterClass(const Class& cls, 431 void Object::RegisterClass(const Class& cls,
432 const char* cname, 432 const char* cname,
433 const Script& script,
434 const Library& lib) { 433 const Library& lib) {
435 const String& name = String::Handle(Symbols::New(cname)); 434 const String& name = String::Handle(Symbols::New(cname));
436 cls.set_name(name); 435 cls.set_name(name);
437 cls.set_script(script);
438 lib.AddClass(cls); 436 lib.AddClass(cls);
439 } 437 }
440 438
441 439
442 void Object::RegisterPrivateClass(const Class& cls, 440 void Object::RegisterPrivateClass(const Class& cls,
443 const char* public_class_name, 441 const char* public_class_name,
444 const Script& script,
445 const Library& lib) { 442 const Library& lib) {
446 String& str = String::Handle(); 443 String& str = String::Handle();
447 str = Symbols::New(public_class_name); 444 str = Symbols::New(public_class_name);
448 str = lib.PrivateName(str); 445 str = lib.PrivateName(str);
449 cls.set_name(str); 446 cls.set_name(str);
450 cls.set_script(script);
451 lib.AddClass(cls); 447 lib.AddClass(cls);
452 } 448 }
453 449
454 450
455 RawError* Object::Init(Isolate* isolate) { 451 RawError* Object::Init(Isolate* isolate) {
456 TIMERSCOPE(time_bootstrap); 452 TIMERSCOPE(time_bootstrap);
457 ObjectStore* object_store = isolate->object_store(); 453 ObjectStore* object_store = isolate->object_store();
458 454
459 Class& cls = Class::Handle(); 455 Class& cls = Class::Handle();
460 Type& type = Type::Handle(); 456 Type& type = Type::Handle();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 const GrowableObjectArray& pending_classes = 500 const GrowableObjectArray& pending_classes =
505 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); 501 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld));
506 object_store->set_pending_classes(pending_classes); 502 object_store->set_pending_classes(pending_classes);
507 503
508 Context& context = Context::Handle(Context::New(0, Heap::kOld)); 504 Context& context = Context::Handle(Context::New(0, Heap::kOld));
509 object_store->set_empty_context(context); 505 object_store->set_empty_context(context);
510 506
511 // Now that the symbol table is initialized and that the core dictionary as 507 // Now that the symbol table is initialized and that the core dictionary as
512 // well as the core implementation dictionary have been setup, preallocate 508 // well as the core implementation dictionary have been setup, preallocate
513 // remaining classes and register them by name in the dictionaries. 509 // remaining classes and register them by name in the dictionaries.
514 const Script& impl_script = Script::Handle(Bootstrap::LoadImplScript()); 510 const Script& impl_script = Script::Handle(
511 Bootstrap::LoadCoreImplScript(false));
515 512
516 cls = Class::New<Integer>(); 513 cls = Class::New<Integer>();
517 object_store->set_integer_implementation_class(cls); 514 object_store->set_integer_implementation_class(cls);
518 RegisterClass(cls, "IntegerImplementation", impl_script, core_impl_lib); 515 RegisterClass(cls, "IntegerImplementation", core_impl_lib);
519 pending_classes.Add(cls, Heap::kOld); 516 pending_classes.Add(cls, Heap::kOld);
520 517
521 cls = Class::New<Smi>(); 518 cls = Class::New<Smi>();
522 object_store->set_smi_class(cls); 519 object_store->set_smi_class(cls);
523 RegisterClass(cls, "Smi", impl_script, core_impl_lib); 520 RegisterClass(cls, "Smi", core_impl_lib);
524 pending_classes.Add(cls, Heap::kOld); 521 pending_classes.Add(cls, Heap::kOld);
525 522
526 cls = Class::New<Mint>(); 523 cls = Class::New<Mint>();
527 object_store->set_mint_class(cls); 524 object_store->set_mint_class(cls);
528 RegisterClass(cls, "Mint", impl_script, core_impl_lib); 525 RegisterClass(cls, "Mint", core_impl_lib);
529 pending_classes.Add(cls, Heap::kOld); 526 pending_classes.Add(cls, Heap::kOld);
530 527
531 cls = Class::New<Bigint>(); 528 cls = Class::New<Bigint>();
532 object_store->set_bigint_class(cls); 529 object_store->set_bigint_class(cls);
533 RegisterClass(cls, "Bigint", impl_script, core_impl_lib); 530 RegisterClass(cls, "Bigint", core_impl_lib);
534 pending_classes.Add(cls, Heap::kOld); 531 pending_classes.Add(cls, Heap::kOld);
535 532
536 cls = Class::New<Double>(); 533 cls = Class::New<Double>();
537 object_store->set_double_class(cls); 534 object_store->set_double_class(cls);
538 RegisterClass(cls, "Double", impl_script, core_impl_lib); 535 RegisterClass(cls, "Double", core_impl_lib);
539 pending_classes.Add(cls, Heap::kOld); 536 pending_classes.Add(cls, Heap::kOld);
540 537
541 cls = Class::New<Bool>(); 538 cls = Class::New<Bool>();
542 object_store->set_bool_class(cls); 539 object_store->set_bool_class(cls);
543 RegisterClass(cls, "Bool", impl_script, core_impl_lib); 540 RegisterClass(cls, "Bool", core_impl_lib);
544 pending_classes.Add(cls, Heap::kOld); 541 pending_classes.Add(cls, Heap::kOld);
545 542
546 cls = object_store->array_class(); // Was allocated above. 543 cls = object_store->array_class(); // Was allocated above.
547 RegisterClass(cls, "ObjectArray", impl_script, core_impl_lib); 544 RegisterClass(cls, "ObjectArray", core_impl_lib);
548 pending_classes.Add(cls, Heap::kOld); 545 pending_classes.Add(cls, Heap::kOld);
549 546
550 cls = object_store->growable_object_array_class(); // Was allocated above. 547 cls = object_store->growable_object_array_class(); // Was allocated above.
551 RegisterClass(cls, "GrowableObjectArray", impl_script, core_impl_lib); 548 RegisterClass(cls, "GrowableObjectArray", core_impl_lib);
552 pending_classes.Add(cls, Heap::kOld); 549 pending_classes.Add(cls, Heap::kOld);
553 550
554 cls = Class::New<ImmutableArray>(); 551 cls = Class::New<ImmutableArray>();
555 object_store->set_immutable_array_class(cls); 552 object_store->set_immutable_array_class(cls);
556 cls.set_type_arguments_instance_field_offset(Array::type_arguments_offset()); 553 cls.set_type_arguments_instance_field_offset(Array::type_arguments_offset());
557 ASSERT(object_store->immutable_array_class() != object_store->array_class()); 554 ASSERT(object_store->immutable_array_class() != object_store->array_class());
558 RegisterClass(cls, "ImmutableArray", impl_script, core_impl_lib); 555 RegisterClass(cls, "ImmutableArray", core_impl_lib);
559 pending_classes.Add(cls, Heap::kOld); 556 pending_classes.Add(cls, Heap::kOld);
560 557
561 cls = object_store->one_byte_string_class(); // Was allocated above. 558 cls = object_store->one_byte_string_class(); // Was allocated above.
562 RegisterClass(cls, "OneByteString", impl_script, core_impl_lib); 559 RegisterClass(cls, "OneByteString", core_impl_lib);
563 pending_classes.Add(cls, Heap::kOld); 560 pending_classes.Add(cls, Heap::kOld);
564 561
565 cls = Class::New<TwoByteString>(); 562 cls = Class::New<TwoByteString>();
566 object_store->set_two_byte_string_class(cls); 563 object_store->set_two_byte_string_class(cls);
567 RegisterClass(cls, "TwoByteString", impl_script, core_impl_lib); 564 RegisterClass(cls, "TwoByteString", core_impl_lib);
568 pending_classes.Add(cls, Heap::kOld); 565 pending_classes.Add(cls, Heap::kOld);
569 566
570 cls = Class::New<FourByteString>(); 567 cls = Class::New<FourByteString>();
571 object_store->set_four_byte_string_class(cls); 568 object_store->set_four_byte_string_class(cls);
572 RegisterClass(cls, "FourByteString", impl_script, core_impl_lib); 569 RegisterClass(cls, "FourByteString", core_impl_lib);
573 pending_classes.Add(cls, Heap::kOld); 570 pending_classes.Add(cls, Heap::kOld);
574 571
575 cls = Class::New<ExternalOneByteString>(); 572 cls = Class::New<ExternalOneByteString>();
576 object_store->set_external_one_byte_string_class(cls); 573 object_store->set_external_one_byte_string_class(cls);
577 RegisterClass(cls, "ExternalOneByteString", impl_script, core_impl_lib); 574 RegisterClass(cls, "ExternalOneByteString", core_impl_lib);
578 pending_classes.Add(cls, Heap::kOld); 575 pending_classes.Add(cls, Heap::kOld);
579 576
580 cls = Class::New<ExternalTwoByteString>(); 577 cls = Class::New<ExternalTwoByteString>();
581 object_store->set_external_two_byte_string_class(cls); 578 object_store->set_external_two_byte_string_class(cls);
582 RegisterClass(cls, "ExternalTwoByteString", impl_script, core_impl_lib); 579 RegisterClass(cls, "ExternalTwoByteString", core_impl_lib);
583 pending_classes.Add(cls, Heap::kOld); 580 pending_classes.Add(cls, Heap::kOld);
584 581
585 cls = Class::New<ExternalFourByteString>(); 582 cls = Class::New<ExternalFourByteString>();
586 object_store->set_external_four_byte_string_class(cls); 583 object_store->set_external_four_byte_string_class(cls);
587 RegisterClass(cls, "ExternalFourByteString", impl_script, core_impl_lib); 584 RegisterClass(cls, "ExternalFourByteString", core_impl_lib);
588 pending_classes.Add(cls, Heap::kOld); 585 pending_classes.Add(cls, Heap::kOld);
589 586
590 cls = Class::New<Stacktrace>(); 587 cls = Class::New<Stacktrace>();
591 object_store->set_stacktrace_class(cls); 588 object_store->set_stacktrace_class(cls);
592 RegisterClass(cls, "Stacktrace", impl_script, core_impl_lib); 589 RegisterClass(cls, "Stacktrace", core_impl_lib);
593 pending_classes.Add(cls, Heap::kOld); 590 pending_classes.Add(cls, Heap::kOld);
594 // Super type set below, after Object is allocated. 591 // Super type set below, after Object is allocated.
595 592
596 cls = Class::New<JSRegExp>(); 593 cls = Class::New<JSRegExp>();
597 object_store->set_jsregexp_class(cls); 594 object_store->set_jsregexp_class(cls);
598 RegisterClass(cls, "JSSyntaxRegExp", impl_script, core_impl_lib); 595 RegisterClass(cls, "JSSyntaxRegExp", core_impl_lib);
599 pending_classes.Add(cls, Heap::kOld); 596 pending_classes.Add(cls, Heap::kOld);
600 597
601 // Initialize the base interfaces used by the core VM classes. 598 // Initialize the base interfaces used by the core VM classes.
602 const Script& script = Script::Handle(Bootstrap::LoadScript()); 599 const Script& script = Script::Handle(Bootstrap::LoadCoreScript(false));
603 600
604 // Allocate and initialize the Object class and type. The Object 601 // Allocate and initialize the Object class and type. The Object
605 // class and ByteArray subclasses are the only pre-allocated, 602 // class and ByteArray subclasses are the only pre-allocated,
606 // non-interface classes in the core library. 603 // non-interface classes in the core library.
607 cls = Class::New<Instance>(); 604 cls = Class::New<Instance>();
608 object_store->set_object_class(cls); 605 object_store->set_object_class(cls);
609 cls.set_name(String::Handle(Symbols::New("Object"))); 606 cls.set_name(String::Handle(Symbols::New("Object")));
610 cls.set_script(script); 607 cls.set_script(script);
611 cls.set_is_prefinalized(); 608 cls.set_is_prefinalized();
612 core_lib.AddClass(cls); 609 core_lib.AddClass(cls);
613 pending_classes.Add(cls, Heap::kOld); 610 pending_classes.Add(cls, Heap::kOld);
614 type = Type::NewNonParameterizedType(cls); 611 type = Type::NewNonParameterizedType(cls);
615 object_store->set_object_type(type); 612 object_store->set_object_type(type);
616 613
617 cls = Class::New<Int8Array>(); 614 cls = Class::New<Int8Array>();
618 object_store->set_int8_array_class(cls); 615 object_store->set_int8_array_class(cls);
619 RegisterPrivateClass(cls, "_Int8Array", script, core_lib); 616 RegisterPrivateClass(cls, "_Int8Array", core_lib);
620 617
621 cls = Class::New<Uint8Array>(); 618 cls = Class::New<Uint8Array>();
622 object_store->set_uint8_array_class(cls); 619 object_store->set_uint8_array_class(cls);
623 RegisterPrivateClass(cls, "_Uint8Array", script, core_lib); 620 RegisterPrivateClass(cls, "_Uint8Array", core_lib);
624 621
625 cls = Class::New<Int16Array>(); 622 cls = Class::New<Int16Array>();
626 object_store->set_int16_array_class(cls); 623 object_store->set_int16_array_class(cls);
627 RegisterPrivateClass(cls, "_Int16Array", script, core_lib); 624 RegisterPrivateClass(cls, "_Int16Array", core_lib);
628 625
629 cls = Class::New<Uint16Array>(); 626 cls = Class::New<Uint16Array>();
630 object_store->set_uint16_array_class(cls); 627 object_store->set_uint16_array_class(cls);
631 RegisterPrivateClass(cls, "_Uint16Array", script, core_lib); 628 RegisterPrivateClass(cls, "_Uint16Array", core_lib);
632 629
633 cls = Class::New<Int32Array>(); 630 cls = Class::New<Int32Array>();
634 object_store->set_int32_array_class(cls); 631 object_store->set_int32_array_class(cls);
635 RegisterPrivateClass(cls, "_Int32Array", script, core_lib); 632 RegisterPrivateClass(cls, "_Int32Array", core_lib);
636 633
637 cls = Class::New<Uint32Array>(); 634 cls = Class::New<Uint32Array>();
638 object_store->set_uint32_array_class(cls); 635 object_store->set_uint32_array_class(cls);
639 RegisterPrivateClass(cls, "_Uint32Array", script, core_lib); 636 RegisterPrivateClass(cls, "_Uint32Array", core_lib);
640 637
641 cls = Class::New<Int64Array>(); 638 cls = Class::New<Int64Array>();
642 object_store->set_int64_array_class(cls); 639 object_store->set_int64_array_class(cls);
643 RegisterPrivateClass(cls, "_Int64Array", script, core_lib); 640 RegisterPrivateClass(cls, "_Int64Array", core_lib);
644 641
645 cls = Class::New<Uint64Array>(); 642 cls = Class::New<Uint64Array>();
646 object_store->set_uint64_array_class(cls); 643 object_store->set_uint64_array_class(cls);
647 RegisterPrivateClass(cls, "_Uint64Array", script, core_lib); 644 RegisterPrivateClass(cls, "_Uint64Array", core_lib);
648 645
649 cls = Class::New<Float32Array>(); 646 cls = Class::New<Float32Array>();
650 object_store->set_float32_array_class(cls); 647 object_store->set_float32_array_class(cls);
651 RegisterPrivateClass(cls, "_Float32Array", script, core_lib); 648 RegisterPrivateClass(cls, "_Float32Array", core_lib);
652 649
653 cls = Class::New<Float64Array>(); 650 cls = Class::New<Float64Array>();
654 object_store->set_float64_array_class(cls); 651 object_store->set_float64_array_class(cls);
655 RegisterPrivateClass(cls, "_Float64Array", script, core_lib); 652 RegisterPrivateClass(cls, "_Float64Array", core_lib);
656 653
657 cls = Class::New<ExternalInt8Array>(); 654 cls = Class::New<ExternalInt8Array>();
658 object_store->set_external_int8_array_class(cls); 655 object_store->set_external_int8_array_class(cls);
659 RegisterPrivateClass(cls, "_ExternalInt8Array", script, core_lib); 656 RegisterPrivateClass(cls, "_ExternalInt8Array", core_lib);
660 657
661 cls = Class::New<ExternalUint8Array>(); 658 cls = Class::New<ExternalUint8Array>();
662 object_store->set_external_uint8_array_class(cls); 659 object_store->set_external_uint8_array_class(cls);
663 RegisterPrivateClass(cls, "_ExternalUint8Array", script, core_lib); 660 RegisterPrivateClass(cls, "_ExternalUint8Array", core_lib);
664 661
665 cls = Class::New<ExternalInt16Array>(); 662 cls = Class::New<ExternalInt16Array>();
666 object_store->set_external_int16_array_class(cls); 663 object_store->set_external_int16_array_class(cls);
667 RegisterPrivateClass(cls, "_ExternalInt16Array", script, core_lib); 664 RegisterPrivateClass(cls, "_ExternalInt16Array", core_lib);
668 665
669 cls = Class::New<ExternalUint16Array>(); 666 cls = Class::New<ExternalUint16Array>();
670 object_store->set_external_uint16_array_class(cls); 667 object_store->set_external_uint16_array_class(cls);
671 RegisterPrivateClass(cls, "_ExternalUint16Array", script, core_lib); 668 RegisterPrivateClass(cls, "_ExternalUint16Array", core_lib);
672 669
673 cls = Class::New<ExternalInt32Array>(); 670 cls = Class::New<ExternalInt32Array>();
674 object_store->set_external_int32_array_class(cls); 671 object_store->set_external_int32_array_class(cls);
675 RegisterPrivateClass(cls, "_ExternalInt32Array", script, core_lib); 672 RegisterPrivateClass(cls, "_ExternalInt32Array", core_lib);
676 673
677 cls = Class::New<ExternalUint32Array>(); 674 cls = Class::New<ExternalUint32Array>();
678 object_store->set_external_uint32_array_class(cls); 675 object_store->set_external_uint32_array_class(cls);
679 RegisterPrivateClass(cls, "_ExternalUint32Array", script, core_lib); 676 RegisterPrivateClass(cls, "_ExternalUint32Array", core_lib);
680 677
681 cls = Class::New<ExternalInt64Array>(); 678 cls = Class::New<ExternalInt64Array>();
682 object_store->set_external_int64_array_class(cls); 679 object_store->set_external_int64_array_class(cls);
683 RegisterPrivateClass(cls, "_ExternalInt64Array", script, core_lib); 680 RegisterPrivateClass(cls, "_ExternalInt64Array", core_lib);
684 681
685 cls = Class::New<ExternalUint64Array>(); 682 cls = Class::New<ExternalUint64Array>();
686 object_store->set_external_uint64_array_class(cls); 683 object_store->set_external_uint64_array_class(cls);
687 RegisterPrivateClass(cls, "_ExternalUint64Array", script, core_lib); 684 RegisterPrivateClass(cls, "_ExternalUint64Array", core_lib);
688 685
689 cls = Class::New<ExternalFloat32Array>(); 686 cls = Class::New<ExternalFloat32Array>();
690 object_store->set_external_float32_array_class(cls); 687 object_store->set_external_float32_array_class(cls);
691 RegisterPrivateClass(cls, "_ExternalFloat32Array", script, core_lib); 688 RegisterPrivateClass(cls, "_ExternalFloat32Array", core_lib);
692 689
693 cls = Class::New<ExternalFloat64Array>(); 690 cls = Class::New<ExternalFloat64Array>();
694 object_store->set_external_float64_array_class(cls); 691 object_store->set_external_float64_array_class(cls);
695 RegisterPrivateClass(cls, "_ExternalFloat64Array", script, core_lib); 692 RegisterPrivateClass(cls, "_ExternalFloat64Array", core_lib);
696 693
697 // Set the super type of class Stacktrace to Object type so that the 694 // Set the super type of class Stacktrace to Object type so that the
698 // 'toString' method is implemented. 695 // 'toString' method is implemented.
699 cls = object_store->stacktrace_class(); 696 cls = object_store->stacktrace_class();
700 cls.set_super_type(type); 697 cls.set_super_type(type);
701 698
702 cls = CreateAndRegisterInterface("Function", script, core_lib); 699 cls = CreateAndRegisterInterface("Function", script, core_lib);
703 pending_classes.Add(cls, Heap::kOld); 700 pending_classes.Add(cls, Heap::kOld);
704 type = Type::NewNonParameterizedType(cls); 701 type = Type::NewNonParameterizedType(cls);
705 object_store->set_function_interface(type); 702 object_store->set_function_interface(type);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 Library::InitNativeWrappersLibrary(isolate); 768 Library::InitNativeWrappersLibrary(isolate);
772 ASSERT(isolate->object_store()->native_wrappers_library() != Library::null()); 769 ASSERT(isolate->object_store()->native_wrappers_library() != Library::null());
773 770
774 // Finish the initialization by compiling the bootstrap scripts containing the 771 // Finish the initialization by compiling the bootstrap scripts containing the
775 // base interfaces and the implementation of the internal classes. 772 // base interfaces and the implementation of the internal classes.
776 Error& error = Error::Handle(); 773 Error& error = Error::Handle();
777 error = Bootstrap::Compile(core_lib, script); 774 error = Bootstrap::Compile(core_lib, script);
778 if (!error.IsNull()) { 775 if (!error.IsNull()) {
779 return error.raw(); 776 return error.raw();
780 } 777 }
778 Script& patch_script = Script::Handle(Bootstrap::LoadCoreScript(true));
779 error = core_lib.Patch(patch_script);
780 if (!error.IsNull()) {
781 return error.raw();
782 }
781 error = Bootstrap::Compile(core_impl_lib, impl_script); 783 error = Bootstrap::Compile(core_impl_lib, impl_script);
782 if (!error.IsNull()) { 784 if (!error.IsNull()) {
783 return error.raw(); 785 return error.raw();
784 } 786 }
785 const Script& math_script = Script::Handle(Bootstrap::LoadMathScript()); 787 patch_script = Bootstrap::LoadCoreImplScript(true);
788 error = core_impl_lib.Patch(patch_script);
789 if (!error.IsNull()) {
790 return error.raw();
791 }
792 const Script& math_script = Script::Handle(Bootstrap::LoadMathScript(false));
786 Library::InitMathLibrary(isolate); 793 Library::InitMathLibrary(isolate);
787 const Library& math_lib = Library::Handle(Library::MathLibrary()); 794 const Library& math_lib = Library::Handle(Library::MathLibrary());
788 ASSERT(!math_lib.IsNull()); 795 ASSERT(!math_lib.IsNull());
789 error = Bootstrap::Compile(math_lib, math_script); 796 error = Bootstrap::Compile(math_lib, math_script);
790 if (!error.IsNull()) { 797 if (!error.IsNull()) {
791 return error.raw(); 798 return error.raw();
792 } 799 }
793 const Script& isolate_script = Script::Handle(Bootstrap::LoadIsolateScript()); 800 patch_script = Bootstrap::LoadMathScript(true);
801 error = math_lib.Patch(patch_script);
802 if (!error.IsNull()) {
803 return error.raw();
804 }
805 const Script& isolate_script = Script::Handle(
806 Bootstrap::LoadIsolateScript(false));
794 Library::InitIsolateLibrary(isolate); 807 Library::InitIsolateLibrary(isolate);
795 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); 808 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary());
796 ASSERT(!isolate_lib.IsNull()); 809 ASSERT(!isolate_lib.IsNull());
797 error = Bootstrap::Compile(isolate_lib, isolate_script); 810 error = Bootstrap::Compile(isolate_lib, isolate_script);
798 if (!error.IsNull()) { 811 if (!error.IsNull()) {
799 return error.raw(); 812 return error.raw();
800 } 813 }
801 const Script& mirrors_script = Script::Handle(Bootstrap::LoadMirrorsScript()); 814 patch_script = Bootstrap::LoadIsolateScript(true);
815 error = isolate_lib.Patch(patch_script);
816 if (!error.IsNull()) {
817 return error.raw();
818 }
819 const Script& mirrors_script = Script::Handle(
820 Bootstrap::LoadMirrorsScript(false));
802 Library::InitMirrorsLibrary(isolate); 821 Library::InitMirrorsLibrary(isolate);
803 const Library& mirrors_lib = Library::Handle(Library::MirrorsLibrary()); 822 const Library& mirrors_lib = Library::Handle(Library::MirrorsLibrary());
804 ASSERT(!mirrors_lib.IsNull()); 823 ASSERT(!mirrors_lib.IsNull());
805 error = Bootstrap::Compile(mirrors_lib, mirrors_script); 824 error = Bootstrap::Compile(mirrors_lib, mirrors_script);
806 if (!error.IsNull()) { 825 if (!error.IsNull()) {
807 return error.raw(); 826 return error.raw();
808 } 827 }
828 patch_script = Bootstrap::LoadMirrorsScript(true);
829 error = mirrors_lib.Patch(patch_script);
830 if (!error.IsNull()) {
831 return error.raw();
832 }
809 Bootstrap::SetupNativeResolver(); 833 Bootstrap::SetupNativeResolver();
810 834
811 // Remove the Object superclass cycle by setting the super type to null (not 835 // Remove the Object superclass cycle by setting the super type to null (not
812 // to the type of null). 836 // to the type of null).
813 cls = object_store->object_class(); 837 cls = object_store->object_class();
814 cls.set_super_type(Type::Handle()); 838 cls.set_super_type(Type::Handle());
815 839
816 ClassFinalizer::VerifyBootstrapClasses(); 840 ClassFinalizer::VerifyBootstrapClasses();
817 return Error::null(); 841 return Error::null();
818 } 842 }
(...skipping 5343 matching lines...) Expand 10 before | Expand all | Expand 10 after
6162 lib ^= libs.At(i); 6186 lib ^= libs.At(i);
6163 error_message = lib.FindDuplicateDefinition(); 6187 error_message = lib.FindDuplicateDefinition();
6164 if (!error_message.IsNull()) { 6188 if (!error_message.IsNull()) {
6165 return error_message.raw(); 6189 return error_message.raw();
6166 } 6190 }
6167 } 6191 }
6168 return String::null(); 6192 return String::null();
6169 } 6193 }
6170 6194
6171 6195
6172 RawError* Library::Patch(const String& url, const String& source) const { 6196 RawError* Library::Patch(const Script& script) const {
6173 const Script& script = Script::Handle( 6197 ASSERT(script.kind() == RawScript::kPatchTag);
6174 Script::New(url, source, RawScript::kPatchTag));
6175 return Compiler::Compile(*this, script); 6198 return Compiler::Compile(*this, script);
6176 } 6199 }
6177 6200
6178 6201
6179 bool Library::IsKeyUsed(intptr_t key) { 6202 bool Library::IsKeyUsed(intptr_t key) {
6180 intptr_t lib_key; 6203 intptr_t lib_key;
6181 const GrowableObjectArray& libs = GrowableObjectArray::Handle( 6204 const GrowableObjectArray& libs = GrowableObjectArray::Handle(
6182 Isolate::Current()->object_store()->libraries()); 6205 Isolate::Current()->object_store()->libraries());
6183 Library& lib = Library::Handle(); 6206 Library& lib = Library::Handle();
6184 String& lib_url = String::Handle(); 6207 String& lib_url = String::Handle();
(...skipping 4843 matching lines...) Expand 10 before | Expand all | Expand 10 after
11028 const char* JSRegExp::ToCString() const { 11051 const char* JSRegExp::ToCString() const {
11029 const String& str = String::Handle(pattern()); 11052 const String& str = String::Handle(pattern());
11030 const char* format = "JSRegExp: pattern=%s flags=%s"; 11053 const char* format = "JSRegExp: pattern=%s flags=%s";
11031 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 11054 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
11032 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); 11055 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1);
11033 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 11056 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
11034 return chars; 11057 return chars;
11035 } 11058 }
11036 11059
11037 } // namespace dart 11060 } // namespace dart
OLDNEW
« no previous file with comments | « vm/object.h ('k') | vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698