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

Side by Side Diff: runtime/vm/object.cc

Issue 265443002: VM: Explicitly load function and context before calling a closure. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: addressed comments Created 6 years, 7 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
« runtime/vm/object.h ('K') | « runtime/vm/object.h ('k') | no next file » | 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/cpu.h" 10 #include "vm/cpu.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 Smi* Object::smi_illegal_cid_ = NULL; 106 Smi* Object::smi_illegal_cid_ = NULL;
107 LanguageError* Object::snapshot_writer_error_ = NULL; 107 LanguageError* Object::snapshot_writer_error_ = NULL;
108 LanguageError* Object::branch_offset_error_ = NULL; 108 LanguageError* Object::branch_offset_error_ = NULL;
109 109
110 RawObject* Object::null_ = reinterpret_cast<RawObject*>(RAW_NULL); 110 RawObject* Object::null_ = reinterpret_cast<RawObject*>(RAW_NULL);
111 RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 111 RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
112 RawClass* Object::dynamic_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 112 RawClass* Object::dynamic_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
113 RawClass* Object::void_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 113 RawClass* Object::void_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
114 RawType* Object::dynamic_type_ = reinterpret_cast<RawType*>(RAW_NULL); 114 RawType* Object::dynamic_type_ = reinterpret_cast<RawType*>(RAW_NULL);
115 RawType* Object::void_type_ = reinterpret_cast<RawType*>(RAW_NULL); 115 RawType* Object::void_type_ = reinterpret_cast<RawType*>(RAW_NULL);
116 RawType* Object::function_type_ = reinterpret_cast<RawType*>(RAW_NULL);
116 RawClass* Object::unresolved_class_class_ = 117 RawClass* Object::unresolved_class_class_ =
117 reinterpret_cast<RawClass*>(RAW_NULL); 118 reinterpret_cast<RawClass*>(RAW_NULL);
118 RawClass* Object::type_arguments_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 119 RawClass* Object::type_arguments_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
119 RawClass* Object::patch_class_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 120 RawClass* Object::patch_class_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
120 RawClass* Object::function_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 121 RawClass* Object::function_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
121 RawClass* Object::closure_data_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 122 RawClass* Object::closure_data_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
122 RawClass* Object::redirection_data_class_ = 123 RawClass* Object::redirection_data_class_ =
123 reinterpret_cast<RawClass*>(RAW_NULL); 124 reinterpret_cast<RawClass*>(RAW_NULL);
124 RawClass* Object::field_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 125 RawClass* Object::field_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
125 RawClass* Object::literal_token_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 126 RawClass* Object::literal_token_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 cls.set_is_type_finalized(); 684 cls.set_is_type_finalized();
684 cls.set_is_finalized(); 685 cls.set_is_finalized();
685 isolate->object_store()->set_type_class(cls); 686 isolate->object_store()->set_type_class(cls);
686 687
687 cls = dynamic_class_; 688 cls = dynamic_class_;
688 dynamic_type_ = Type::NewNonParameterizedType(cls); 689 dynamic_type_ = Type::NewNonParameterizedType(cls);
689 690
690 cls = void_class_; 691 cls = void_class_;
691 void_type_ = Type::NewNonParameterizedType(cls); 692 void_type_ = Type::NewNonParameterizedType(cls);
692 693
694 cls = function_class_;
695 function_type_ = Type::NewNonParameterizedType(cls);
696
693 // Allocate and initialize singleton true and false boolean objects. 697 // Allocate and initialize singleton true and false boolean objects.
694 cls = Class::New<Bool>(); 698 cls = Class::New<Bool>();
695 isolate->object_store()->set_bool_class(cls); 699 isolate->object_store()->set_bool_class(cls);
696 *bool_true_ = Bool::New(true); 700 *bool_true_ = Bool::New(true);
697 *bool_false_ = Bool::New(false); 701 *bool_false_ = Bool::New(false);
698 702
699 *smi_illegal_cid_ = Smi::New(kIllegalCid); 703 *smi_illegal_cid_ = Smi::New(kIllegalCid);
700 704
701 String& error_str = String::Handle(); 705 String& error_str = String::Handle();
702 error_str = String::New("SnapshotWriter Error", Heap::kOld); 706 error_str = String::New("SnapshotWriter Error", Heap::kOld);
(...skipping 13138 matching lines...) Expand 10 before | Expand all | Expand 10 after
13841 if (IsCanonical() || IsMalformed()) { 13845 if (IsCanonical() || IsMalformed()) {
13842 ASSERT(IsMalformed() || TypeArguments::Handle(arguments()).IsOld()); 13846 ASSERT(IsMalformed() || TypeArguments::Handle(arguments()).IsOld());
13843 return this->raw(); 13847 return this->raw();
13844 } 13848 }
13845 Isolate* isolate = Isolate::Current(); 13849 Isolate* isolate = Isolate::Current();
13846 Type& type = Type::Handle(isolate); 13850 Type& type = Type::Handle(isolate);
13847 const Class& cls = Class::Handle(isolate, type_class()); 13851 const Class& cls = Class::Handle(isolate, type_class());
13848 if (cls.raw() == Object::dynamic_class() && (isolate != Dart::vm_isolate())) { 13852 if (cls.raw() == Object::dynamic_class() && (isolate != Dart::vm_isolate())) {
13849 return Object::dynamic_type(); 13853 return Object::dynamic_type();
13850 } 13854 }
13855 if (cls.raw() == Object::function_class() &&
13856 (isolate != Dart::vm_isolate())) {
13857 return Object::function_type();
13858 }
13851 // Fast canonical lookup/registry for simple types. 13859 // Fast canonical lookup/registry for simple types.
13852 if ((cls.NumTypeArguments() == 0) && !cls.IsSignatureClass()) { 13860 if ((cls.NumTypeArguments() == 0) && !cls.IsSignatureClass()) {
13853 type = cls.CanonicalType(); 13861 type = cls.CanonicalType();
13854 if (type.IsNull()) { 13862 if (type.IsNull()) {
13855 ASSERT(!cls.raw()->IsVMHeapObject() || (isolate == Dart::vm_isolate())); 13863 ASSERT(!cls.raw()->IsVMHeapObject() || (isolate == Dart::vm_isolate()));
13856 cls.set_canonical_types(*this); 13864 cls.set_canonical_types(*this);
13857 SetCanonical(); 13865 SetCanonical();
13858 return this->raw(); 13866 return this->raw();
13859 } 13867 }
13860 ASSERT(this->Equals(type)); 13868 ASSERT(this->Equals(type));
(...skipping 4808 matching lines...) Expand 10 before | Expand all | Expand 10 after
18669 return tag_label.ToCString(); 18677 return tag_label.ToCString();
18670 } 18678 }
18671 18679
18672 18680
18673 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 18681 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
18674 Instance::PrintJSONImpl(stream, ref); 18682 Instance::PrintJSONImpl(stream, ref);
18675 } 18683 }
18676 18684
18677 18685
18678 } // namespace dart 18686 } // namespace dart
OLDNEW
« runtime/vm/object.h ('K') | « runtime/vm/object.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698