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

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

Issue 2194333002: RELOAD: Maintain identity of static tear-offs. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: . Created 4 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
« no previous file with comments | « 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 "vm/hash_table.h" 7 #include "vm/hash_table.h"
8 #include "vm/isolate_reload.h" 8 #include "vm/isolate_reload.h"
9 #include "vm/log.h" 9 #include "vm/log.h"
10 #include "vm/resolver.h" 10 #include "vm/resolver.h"
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 ASSERT(!owner.IsNull()); 356 ASSERT(!owner.IsNull());
357 if (!owner.IsPatchClass()) { 357 if (!owner.IsPatchClass()) {
358 ASSERT(owner.raw() == this->raw()); 358 ASSERT(owner.raw() == this->raw());
359 field.set_owner(patch); 359 field.set_owner(patch);
360 } 360 }
361 field.ForceDynamicGuardedCidAndLength(); 361 field.ForceDynamicGuardedCidAndLength();
362 } 362 }
363 } 363 }
364 364
365 365
366 void Class::MigrateImplicitStaticClosures(IsolateReloadContext* irc,
367 const Class& new_cls) const {
368 const Array& funcs = Array::Handle(functions());
369 Function& old_func = Function::Handle();
370 String& selector = String::Handle();
371 Function& new_func = Function::Handle();
372 Instance& old_closure = Instance::Handle();
373 Instance& new_closure = Instance::Handle();
374 for (intptr_t i = 0; i < funcs.Length(); i++) {
375 old_func ^= funcs.At(i);
376 if (old_func.is_static() &&
377 old_func.HasImplicitClosureFunction()) {
378 selector = old_func.name();
379 new_func = new_cls.LookupFunction(selector);
380 if (!new_func.IsNull() && new_func.is_static()) {
381 old_func = old_func.ImplicitClosureFunction();
382 old_closure = old_func.ImplicitStaticClosure();
383 new_func = new_func.ImplicitClosureFunction();
384 new_closure = new_func.ImplicitStaticClosure();
385 irc->AddBecomeMapping(old_closure, new_closure);
386 }
387 }
388 }
389 }
390
391
366 class EnumClassConflict : public ClassReasonForCancelling { 392 class EnumClassConflict : public ClassReasonForCancelling {
367 public: 393 public:
368 EnumClassConflict(const Class& from, const Class& to) 394 EnumClassConflict(const Class& from, const Class& to)
369 : ClassReasonForCancelling(from, to) { } 395 : ClassReasonForCancelling(from, to) { }
370 396
371 RawString* ToString() { 397 RawString* ToString() {
372 return String::NewFormatted( 398 return String::NewFormatted(
373 from_.is_enum_class() 399 from_.is_enum_class()
374 ? "Enum class cannot be redefined to be a non-enum class: %s" 400 ? "Enum class cannot be redefined to be a non-enum class: %s"
375 : "Class cannot be redefined to be a enum class: %s", 401 : "Class cannot be redefined to be a enum class: %s",
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 } 721 }
696 ClearAndSetStaticTarget(new_target); 722 ClearAndSetStaticTarget(new_target);
697 } else { 723 } else {
698 ClearWithSentinel(); 724 ClearWithSentinel();
699 } 725 }
700 } 726 }
701 727
702 #endif // !PRODUCT 728 #endif // !PRODUCT
703 729
704 } // namespace dart. 730 } // namespace dart.
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698