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

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

Issue 668193002: Remove isolate pointer from context objects. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 1 month 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
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 1118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 pending_classes.Add(cls); 1129 pending_classes.Add(cls);
1130 1130
1131 // Pre-register the isolate library so the native class implementations 1131 // Pre-register the isolate library so the native class implementations
1132 // can be hooked up before compiling it. 1132 // can be hooked up before compiling it.
1133 Library& isolate_lib = 1133 Library& isolate_lib =
1134 Library::Handle(isolate, Library::LookupLibrary(Symbols::DartIsolate())); 1134 Library::Handle(isolate, Library::LookupLibrary(Symbols::DartIsolate()));
1135 if (isolate_lib.IsNull()) { 1135 if (isolate_lib.IsNull()) {
1136 isolate_lib = Library::NewLibraryHelper(Symbols::DartIsolate(), true); 1136 isolate_lib = Library::NewLibraryHelper(Symbols::DartIsolate(), true);
1137 isolate_lib.SetLoadRequested(); 1137 isolate_lib.SetLoadRequested();
1138 isolate_lib.Register(); 1138 isolate_lib.Register();
1139 isolate->object_store()->set_bootstrap_library(ObjectStore::kIsolate, 1139 object_store->set_bootstrap_library(ObjectStore::kIsolate, isolate_lib);
1140 isolate_lib);
1141 } 1140 }
1142 ASSERT(!isolate_lib.IsNull()); 1141 ASSERT(!isolate_lib.IsNull());
1143 ASSERT(isolate_lib.raw() == Library::IsolateLibrary()); 1142 ASSERT(isolate_lib.raw() == Library::IsolateLibrary());
1144 1143
1145 cls = Class::New<Capability>(); 1144 cls = Class::New<Capability>();
1146 RegisterPrivateClass(cls, Symbols::_CapabilityImpl(), isolate_lib); 1145 RegisterPrivateClass(cls, Symbols::_CapabilityImpl(), isolate_lib);
1147 pending_classes.Add(cls); 1146 pending_classes.Add(cls);
1148 1147
1149 cls = Class::New<ReceivePort>(); 1148 cls = Class::New<ReceivePort>();
1150 RegisterPrivateClass(cls, Symbols::_RawReceivePortImpl(), isolate_lib); 1149 RegisterPrivateClass(cls, Symbols::_RawReceivePortImpl(), isolate_lib);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 object_store->set_weak_property_class(cls); 1251 object_store->set_weak_property_class(cls);
1253 RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib); 1252 RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib);
1254 1253
1255 // Pre-register the mirrors library so we can place the vm class 1254 // Pre-register the mirrors library so we can place the vm class
1256 // MirrorReference there rather than the core library. 1255 // MirrorReference there rather than the core library.
1257 lib = Library::LookupLibrary(Symbols::DartMirrors()); 1256 lib = Library::LookupLibrary(Symbols::DartMirrors());
1258 if (lib.IsNull()) { 1257 if (lib.IsNull()) {
1259 lib = Library::NewLibraryHelper(Symbols::DartMirrors(), true); 1258 lib = Library::NewLibraryHelper(Symbols::DartMirrors(), true);
1260 lib.SetLoadRequested(); 1259 lib.SetLoadRequested();
1261 lib.Register(); 1260 lib.Register();
1262 isolate->object_store()->set_bootstrap_library(ObjectStore::kMirrors, 1261 object_store->set_bootstrap_library(ObjectStore::kMirrors, lib);
1263 lib);
1264 } 1262 }
1265 ASSERT(!lib.IsNull()); 1263 ASSERT(!lib.IsNull());
1266 ASSERT(lib.raw() == Library::MirrorsLibrary()); 1264 ASSERT(lib.raw() == Library::MirrorsLibrary());
1267 1265
1268 cls = Class::New<MirrorReference>(); 1266 cls = Class::New<MirrorReference>();
1269 RegisterPrivateClass(cls, Symbols::_MirrorReference(), lib); 1267 RegisterPrivateClass(cls, Symbols::_MirrorReference(), lib);
1270 1268
1271 // Pre-register the collection library so we can place the vm class 1269 // Pre-register the collection library so we can place the vm class
1272 // LinkedHashMap there rather than the core library. 1270 // LinkedHashMap there rather than the core library.
1273 lib = Library::LookupLibrary(Symbols::DartCollection()); 1271 lib = Library::LookupLibrary(Symbols::DartCollection());
1274 if (lib.IsNull()) { 1272 if (lib.IsNull()) {
1275 lib = Library::NewLibraryHelper(Symbols::DartCollection(), true); 1273 lib = Library::NewLibraryHelper(Symbols::DartCollection(), true);
1276 lib.SetLoadRequested(); 1274 lib.SetLoadRequested();
1277 lib.Register(); 1275 lib.Register();
1278 isolate->object_store()->set_bootstrap_library(ObjectStore::kCollection, 1276 object_store->set_bootstrap_library(ObjectStore::kCollection, lib);
1279 lib);
1280 } 1277 }
1281 ASSERT(!lib.IsNull()); 1278 ASSERT(!lib.IsNull());
1282 ASSERT(lib.raw() == Library::CollectionLibrary()); 1279 ASSERT(lib.raw() == Library::CollectionLibrary());
1283 1280
1284 cls = Class::New<LinkedHashMap>(); 1281 cls = Class::New<LinkedHashMap>();
1285 object_store->set_linked_hash_map_class(cls); 1282 object_store->set_linked_hash_map_class(cls);
1286 cls.set_type_arguments_field_offset(LinkedHashMap::type_arguments_offset()); 1283 cls.set_type_arguments_field_offset(LinkedHashMap::type_arguments_offset());
1287 cls.set_num_type_arguments(2); 1284 cls.set_num_type_arguments(2);
1288 cls.set_num_own_type_arguments(2); 1285 cls.set_num_own_type_arguments(2);
1289 RegisterPrivateClass(cls, Symbols::_LinkedHashMap(), lib); 1286 RegisterPrivateClass(cls, Symbols::_LinkedHashMap(), lib);
1290 pending_classes.Add(cls); 1287 pending_classes.Add(cls);
1291 1288
1292 // Pre-register the profiler library so we can place the vm class 1289 // Pre-register the profiler library so we can place the vm class
1293 // UserTag there rather than the core library. 1290 // UserTag there rather than the core library.
1294 lib = Library::LookupLibrary(Symbols::DartProfiler()); 1291 lib = Library::LookupLibrary(Symbols::DartProfiler());
1295 if (lib.IsNull()) { 1292 if (lib.IsNull()) {
1296 lib = Library::NewLibraryHelper(Symbols::DartProfiler(), true); 1293 lib = Library::NewLibraryHelper(Symbols::DartProfiler(), true);
1297 lib.SetLoadRequested(); 1294 lib.SetLoadRequested();
1298 lib.Register(); 1295 lib.Register();
1299 isolate->object_store()->set_bootstrap_library(ObjectStore::kProfiler, 1296 object_store->set_bootstrap_library(ObjectStore::kProfiler, lib);
1300 lib);
1301 } 1297 }
1302 ASSERT(!lib.IsNull()); 1298 ASSERT(!lib.IsNull());
1303 ASSERT(lib.raw() == Library::ProfilerLibrary()); 1299 ASSERT(lib.raw() == Library::ProfilerLibrary());
1304 1300
1305 lib = Library::LookupLibrary(Symbols::DartProfiler()); 1301 lib = Library::LookupLibrary(Symbols::DartProfiler());
1306 ASSERT(!lib.IsNull()); 1302 ASSERT(!lib.IsNull());
1307 cls = Class::New<UserTag>(); 1303 cls = Class::New<UserTag>();
1308 RegisterPrivateClass(cls, Symbols::_UserTag(), lib); 1304 RegisterPrivateClass(cls, Symbols::_UserTag(), lib);
1309 pending_classes.Add(cls); 1305 pending_classes.Add(cls);
1310 1306
1311 // Setup some default native field classes which can be extended for 1307 // Setup some default native field classes which can be extended for
1312 // specifying native fields in dart classes. 1308 // specifying native fields in dart classes.
1313 Library::InitNativeWrappersLibrary(isolate); 1309 Library::InitNativeWrappersLibrary(isolate);
1314 ASSERT(isolate->object_store()->native_wrappers_library() != Library::null()); 1310 ASSERT(object_store->native_wrappers_library() != Library::null());
1315 1311
1316 // Pre-register the typed_data library so the native class implementations 1312 // Pre-register the typed_data library so the native class implementations
1317 // can be hooked up before compiling it. 1313 // can be hooked up before compiling it.
1318 lib = Library::LookupLibrary(Symbols::DartTypedData()); 1314 lib = Library::LookupLibrary(Symbols::DartTypedData());
1319 if (lib.IsNull()) { 1315 if (lib.IsNull()) {
1320 lib = Library::NewLibraryHelper(Symbols::DartTypedData(), true); 1316 lib = Library::NewLibraryHelper(Symbols::DartTypedData(), true);
1321 lib.SetLoadRequested(); 1317 lib.SetLoadRequested();
1322 lib.Register(); 1318 lib.Register();
1323 isolate->object_store()->set_bootstrap_library(ObjectStore::kTypedData, 1319 object_store->set_bootstrap_library(ObjectStore::kTypedData, lib);
1324 lib);
1325 } 1320 }
1326 ASSERT(!lib.IsNull()); 1321 ASSERT(!lib.IsNull());
1327 ASSERT(lib.raw() == Library::TypedDataLibrary()); 1322 ASSERT(lib.raw() == Library::TypedDataLibrary());
1328 #define REGISTER_TYPED_DATA_CLASS(clazz) \ 1323 #define REGISTER_TYPED_DATA_CLASS(clazz) \
1329 cls = Class::NewTypedDataClass(kTypedData##clazz##Cid); \ 1324 cls = Class::NewTypedDataClass(kTypedData##clazz##Cid); \
1330 RegisterPrivateClass(cls, Symbols::_##clazz(), lib); \ 1325 RegisterPrivateClass(cls, Symbols::_##clazz(), lib); \
1331 1326
1332 CLASS_LIST_TYPED_DATA(REGISTER_TYPED_DATA_CLASS); 1327 CLASS_LIST_TYPED_DATA(REGISTER_TYPED_DATA_CLASS);
1333 #undef REGISTER_TYPED_DATA_CLASS 1328 #undef REGISTER_TYPED_DATA_CLASS
1334 #define REGISTER_TYPED_DATA_VIEW_CLASS(clazz) \ 1329 #define REGISTER_TYPED_DATA_VIEW_CLASS(clazz) \
(...skipping 3766 matching lines...) Expand 10 before | Expand all | Expand 10 after
5101 void Function::AttachCode(const Code& value) const { 5096 void Function::AttachCode(const Code& value) const {
5102 SetInstructions(value); 5097 SetInstructions(value);
5103 ASSERT(Function::Handle(value.function()).IsNull() || 5098 ASSERT(Function::Handle(value.function()).IsNull() ||
5104 (value.function() == this->raw())); 5099 (value.function() == this->raw()));
5105 value.set_owner(*this); 5100 value.set_owner(*this);
5106 } 5101 }
5107 5102
5108 5103
5109 bool Function::HasCode() const { 5104 bool Function::HasCode() const {
5110 ASSERT(raw_ptr()->instructions_ != Instructions::null()); 5105 ASSERT(raw_ptr()->instructions_ != Instructions::null());
5106 StubCode* stub_code = Isolate::Current()->stub_code();
5111 return raw_ptr()->instructions_ != 5107 return raw_ptr()->instructions_ !=
5112 StubCode::LazyCompile_entry()->code()->ptr()->instructions_; 5108 stub_code->LazyCompile_entry()->code()->ptr()->instructions_;
5113 } 5109 }
5114 5110
5115 5111
5116 void Function::ClearCode() const { 5112 void Function::ClearCode() const {
5117 StorePointer(&raw_ptr()->unoptimized_code_, Code::null()); 5113 StorePointer(&raw_ptr()->unoptimized_code_, Code::null());
5114 StubCode* stub_code = Isolate::Current()->stub_code();
5118 StorePointer(&raw_ptr()->instructions_, 5115 StorePointer(&raw_ptr()->instructions_,
5119 Code::Handle(StubCode::LazyCompile_entry()->code()).instructions()); 5116 Code::Handle(stub_code->LazyCompile_entry()->code()).instructions());
5120 } 5117 }
5121 5118
5122 5119
5123 void Function::SwitchToUnoptimizedCode() const { 5120 void Function::SwitchToUnoptimizedCode() const {
5124 ASSERT(HasOptimizedCode()); 5121 ASSERT(HasOptimizedCode());
5125 const Code& current_code = Code::Handle(CurrentCode()); 5122 const Code& current_code = Code::Handle(CurrentCode());
5126 5123
5127 if (FLAG_trace_disabling_optimized_code) { 5124 if (FLAG_trace_disabling_optimized_code) {
5128 OS::Print("Disabling optimized code: '%s' entry: %#" Px "\n", 5125 OS::Print("Disabling optimized code: '%s' entry: %#" Px "\n",
5129 ToFullyQualifiedCString(), 5126 ToFullyQualifiedCString(),
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after
6123 result.set_num_fixed_parameters(0); 6120 result.set_num_fixed_parameters(0);
6124 result.set_num_optional_parameters(0); 6121 result.set_num_optional_parameters(0);
6125 result.set_usage_counter(0); 6122 result.set_usage_counter(0);
6126 result.set_deoptimization_counter(0); 6123 result.set_deoptimization_counter(0);
6127 result.set_optimized_instruction_count(0); 6124 result.set_optimized_instruction_count(0);
6128 result.set_optimized_call_site_count(0); 6125 result.set_optimized_call_site_count(0);
6129 result.set_is_optimizable(is_native ? false : true); 6126 result.set_is_optimizable(is_native ? false : true);
6130 result.set_is_inlinable(true); 6127 result.set_is_inlinable(true);
6131 result.set_allows_hoisting_check_class(true); 6128 result.set_allows_hoisting_check_class(true);
6132 result.set_allows_bounds_check_generalization(true); 6129 result.set_allows_bounds_check_generalization(true);
6133 result.SetInstructions(Code::Handle(StubCode::LazyCompile_entry()->code())); 6130 StubCode* stub_code = Isolate::Current()->stub_code();
6131 result.SetInstructions(Code::Handle(stub_code->LazyCompile_entry()->code()));
6134 if (kind == RawFunction::kClosureFunction) { 6132 if (kind == RawFunction::kClosureFunction) {
6135 const ClosureData& data = ClosureData::Handle(ClosureData::New()); 6133 const ClosureData& data = ClosureData::Handle(ClosureData::New());
6136 result.set_data(data); 6134 result.set_data(data);
6137 } 6135 }
6138 6136
6139 return result.raw(); 6137 return result.raw();
6140 } 6138 }
6141 6139
6142 6140
6143 RawFunction* Function::Clone(const Class& new_owner) const { 6141 RawFunction* Function::Clone(const Class& new_owner) const {
(...skipping 6294 matching lines...) Expand 10 before | Expand all | Expand 10 after
12438 } 12436 }
12439 Context& result = Context::Handle(); 12437 Context& result = Context::Handle();
12440 { 12438 {
12441 RawObject* raw = Object::Allocate(Context::kClassId, 12439 RawObject* raw = Object::Allocate(Context::kClassId,
12442 Context::InstanceSize(num_variables), 12440 Context::InstanceSize(num_variables),
12443 space); 12441 space);
12444 NoGCScope no_gc; 12442 NoGCScope no_gc;
12445 result ^= raw; 12443 result ^= raw;
12446 result.set_num_variables(num_variables); 12444 result.set_num_variables(num_variables);
12447 } 12445 }
12448 result.set_isolate(Isolate::Current());
12449 return result.raw(); 12446 return result.raw();
12450 } 12447 }
12451 12448
12452 12449
12453 const char* Context::ToCString() const { 12450 const char* Context::ToCString() const {
12454 if (IsNull()) { 12451 if (IsNull()) {
12455 return "Context (Null)"; 12452 return "Context (Null)";
12456 } 12453 }
12457 Zone* zone = Isolate::Current()->current_zone(); 12454 Zone* zone = Isolate::Current()->current_zone();
12458 const Context& parent_ctx = Context::Handle(parent()); 12455 const Context& parent_ctx = Context::Handle(parent());
(...skipping 7231 matching lines...) Expand 10 before | Expand all | Expand 10 after
19690 intptr_t len = OS::SNPrint(NULL, 0, format, fun_sig, from, fun_desc) + 1; 19687 intptr_t len = OS::SNPrint(NULL, 0, format, fun_sig, from, fun_desc) + 1;
19691 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 19688 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
19692 OS::SNPrint(chars, len, format, fun_sig, from, fun_desc); 19689 OS::SNPrint(chars, len, format, fun_sig, from, fun_desc);
19693 return chars; 19690 return chars;
19694 } 19691 }
19695 19692
19696 19693
19697 RawInstance* Closure::New(const Function& function, 19694 RawInstance* Closure::New(const Function& function,
19698 const Context& context, 19695 const Context& context,
19699 Heap::Space space) { 19696 Heap::Space space) {
19700 Isolate* isolate = Isolate::Current();
19701 ASSERT(context.isolate() == isolate);
19702
19703 const Class& cls = Class::Handle(function.signature_class()); 19697 const Class& cls = Class::Handle(function.signature_class());
19704 ASSERT(cls.instance_size() == Closure::InstanceSize()); 19698 ASSERT(cls.instance_size() == Closure::InstanceSize());
19705 Instance& result = Instance::Handle(); 19699 Instance& result = Instance::Handle();
19706 { 19700 {
19707 RawObject* raw = Object::Allocate(cls.id(), Closure::InstanceSize(), space); 19701 RawObject* raw = Object::Allocate(cls.id(), Closure::InstanceSize(), space);
19708 NoGCScope no_gc; 19702 NoGCScope no_gc;
19709 result ^= raw; 19703 result ^= raw;
19710 } 19704 }
19711 Closure::set_function(result, function); 19705 Closure::set_function(result, function);
19712 Closure::set_context(result, context); 19706 Closure::set_context(result, context);
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
20317 return tag_label.ToCString(); 20311 return tag_label.ToCString();
20318 } 20312 }
20319 20313
20320 20314
20321 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 20315 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
20322 Instance::PrintJSONImpl(stream, ref); 20316 Instance::PrintJSONImpl(stream, ref);
20323 } 20317 }
20324 20318
20325 20319
20326 } // namespace dart 20320 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_test.cc » ('j') | runtime/vm/stub_code.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698