We've been emitting less optimal code to maintain compilation output consistency between hot reloaded and non-hot-reloaded code. However, certain core language features (constants, etc.) may require us to perform custom cross-generation diffing. In the advent of a diffing mechanism, we should un-deoptimize certain code patterns in compiler_new.dart:
[ ] Instance fields only need a forwarding getter (with embedded initializer) when newly added
[ ] SDK fields likely won't be hot reloaded and can be emitted without a value store + indirection getter (likely via a pragma)
[ ] All fields only need implicit type checks when their type is updated
[ ] RTI subtyping rules that implicitly refer to Object only need to be emitted for added/modified types
[ ] Subtype check caches don't need to be cleared on the first generation
We've been emitting less optimal code to maintain compilation output consistency between hot reloaded and non-hot-reloaded code. However, certain core language features (constants, etc.) may require us to perform custom cross-generation diffing. In the advent of a diffing mechanism, we should un-deoptimize certain code patterns in compiler_new.dart:
Object
only need to be emitted for added/modified types