6c19a8fc81
This CL makes use of the now included constant constructor coverage in the dill file. It works like this: * When the CFE evaluates constants, every constant constructor invocation evaluated saves the reference to the constructor in the `Source` (from the Components uri to source table) for the callers Library. * This data is loaded into the VM in a "raw" format. * When a request for coverage comes in, the VM - on top of the normal coverage processing - goes through all scripts to find constant constructor coverage for the requested script and offset. Note that all scripts must be checked because library A can have evaluated a constructor from library B - so even if only coverage for library B was requested, library A has to be checked. For all constructors found the start and end position is reported as covered. Note that this does not mark any initializes and there are (at least currently) no good way of marking which initializes were evaluated (because it has to be stable across edits even when the `advanced invalidation feature` is enabled). * Note that the reason for the coverage to work on references - as hinted above - is because we want it to be stable across hot reloads even if/when advanced invalidation is enabled. This means, that library A cannot record "positional coverage" for library B because library B might get (for instance) new comments that will make any old offsets invalid. By using references we always lookup in the current world and use the correct offsets. https://github.com/dart-lang/sdk/issues/38934 TEST=Existing test suite, new tests for the new coverage added. Change-Id: I29531247a4b91a99d9a459cfdefbb9798e9c948f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175246 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: Jens Johansen <jensj@google.com>