| OLD | NEW |
| 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/snapshot.h" | 5 #include "vm/snapshot.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "vm/bootstrap.h" | 8 #include "vm/bootstrap.h" |
| 9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 return cls.raw(); | 236 return cls.raw(); |
| 237 } | 237 } |
| 238 | 238 |
| 239 | 239 |
| 240 RawObject* SnapshotReader::ReadStaticImplicitClosure(intptr_t object_id, | 240 RawObject* SnapshotReader::ReadStaticImplicitClosure(intptr_t object_id, |
| 241 intptr_t class_header) { | 241 intptr_t class_header) { |
| 242 ASSERT(kind_ == Snapshot::kMessage); | 242 ASSERT(kind_ == Snapshot::kMessage); |
| 243 | 243 |
| 244 // First create a function object and associate it with the specified | 244 // First create a function object and associate it with the specified |
| 245 // 'object_id'. | 245 // 'object_id'. |
| 246 Function& func = Function::ZoneHandle(isolate(), Function::null()); | 246 Function& func = Function::Handle(isolate(), Function::null()); |
| 247 AddBackRef(object_id, &func, kIsDeserialized); | 247 Instance& obj = Instance::ZoneHandle(isolate(), Instance::null()); |
| 248 AddBackRef(object_id, &obj, kIsDeserialized); |
| 248 | 249 |
| 249 // Read the library/class/function information and lookup the function. | 250 // Read the library/class/function information and lookup the function. |
| 250 str_ ^= ReadObjectImpl(); | 251 str_ ^= ReadObjectImpl(); |
| 251 library_ = Library::LookupLibrary(str_); | 252 library_ = Library::LookupLibrary(str_); |
| 252 if (library_.IsNull() || !library_.Loaded()) { | 253 if (library_.IsNull() || !library_.Loaded()) { |
| 253 SetReadException("Invalid Library object found in message."); | 254 SetReadException("Invalid Library object found in message."); |
| 254 } | 255 } |
| 255 str_ ^= ReadObjectImpl(); | 256 str_ ^= ReadObjectImpl(); |
| 256 if (str_.Equals(Symbols::TopLevel())) { | 257 if (str_.Equals(Symbols::TopLevel())) { |
| 257 str_ ^= ReadObjectImpl(); | 258 str_ ^= ReadObjectImpl(); |
| 258 func = library_.LookupFunctionAllowPrivate(str_); | 259 func = library_.LookupFunctionAllowPrivate(str_); |
| 259 } else { | 260 } else { |
| 260 cls_ = library_.LookupClassAllowPrivate(str_); | 261 cls_ = library_.LookupClassAllowPrivate(str_); |
| 261 if (cls_.IsNull()) { | 262 if (cls_.IsNull()) { |
| 262 OS::Print("Name of class not found %s\n", str_.ToCString()); | 263 OS::Print("Name of class not found %s\n", str_.ToCString()); |
| 263 SetReadException("Invalid Class object found in message."); | 264 SetReadException("Invalid Class object found in message."); |
| 264 } | 265 } |
| 265 cls_.EnsureIsFinalized(isolate()); | 266 cls_.EnsureIsFinalized(isolate()); |
| 266 str_ ^= ReadObjectImpl(); | 267 str_ ^= ReadObjectImpl(); |
| 267 func = cls_.LookupFunctionAllowPrivate(str_); | 268 func = cls_.LookupFunctionAllowPrivate(str_); |
| 268 } | 269 } |
| 269 if (func.IsNull()) { | 270 if (func.IsNull()) { |
| 270 SetReadException("Invalid function object found in message."); | 271 SetReadException("Invalid function object found in message."); |
| 271 } | 272 } |
| 272 func = func.ImplicitClosureFunction(); | 273 func = func.ImplicitClosureFunction(); |
| 273 ASSERT(!func.IsNull()); | 274 ASSERT(!func.IsNull()); |
| 274 | 275 |
| 275 // Return the associated implicit static closure. | 276 // Return the associated implicit static closure. |
| 276 return func.ImplicitStaticClosure(); | 277 obj = func.ImplicitStaticClosure(); |
| 278 return obj.raw(); |
| 277 } | 279 } |
| 278 | 280 |
| 279 | 281 |
| 280 RawObject* SnapshotReader::ReadObjectImpl() { | 282 RawObject* SnapshotReader::ReadObjectImpl() { |
| 281 int64_t value = Read<int64_t>(); | 283 int64_t value = Read<int64_t>(); |
| 282 if ((value & kSmiTagMask) == kSmiTag) { | 284 if ((value & kSmiTagMask) == kSmiTag) { |
| 283 return NewInteger(value); | 285 return NewInteger(value); |
| 284 } | 286 } |
| 285 ASSERT((value <= kIntptrMax) && (value >= kIntptrMin)); | 287 ASSERT((value <= kIntptrMax) && (value >= kIntptrMin)); |
| 286 return ReadObjectImpl(static_cast<intptr_t>(value)); | 288 return ReadObjectImpl(static_cast<intptr_t>(value)); |
| (...skipping 1661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1948 NoGCScope no_gc; | 1950 NoGCScope no_gc; |
| 1949 WriteObject(obj.raw()); | 1951 WriteObject(obj.raw()); |
| 1950 UnmarkAll(); | 1952 UnmarkAll(); |
| 1951 } else { | 1953 } else { |
| 1952 ThrowException(exception_type(), exception_msg()); | 1954 ThrowException(exception_type(), exception_msg()); |
| 1953 } | 1955 } |
| 1954 } | 1956 } |
| 1955 | 1957 |
| 1956 | 1958 |
| 1957 } // namespace dart | 1959 } // namespace dart |
| OLD | NEW |