Commit Graph

561 Commits

Author SHA1 Message Date
MarkZ 72ee2943fd [dartdevc] Moving DDC Set implementations into DDC's private runtime.
This allows internal Set classes to be referenced by our runtime.

Context: incoming changes to our generic types (required for hot reload) requires that RTIs be passed to generic classes on instantiation. Moving our Set implementation into our private runtime and making their classes public allows us to directly reference them without clobbering names externally.
Change-Id: Ie47b3263ebbf2650d314b5285a2d50f3abd1a664
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/373327
Commit-Queue: Mark Zhou <markzipan@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
2024-07-02 07:27:12 +00:00
Nicholas Shahan e7b1bca707 [ddc] Rename variable used to store late value
Late local variables are lowered by the CFE into a local:
* backing store variable
* get method
* set method
* isSet local variable (optionally when the type is nullable)

This change updates the name in JavaScript used for the backing store
variable to match the name for the late variable from the original
source. It also updates the scope information passed for expression
evaluation to remove the lowered name and replace it with the original
so evaluations will work as well.

The name change avoids the hiding performed by the debugger on
recognized temporary names so it appears in the list of local variables.

b/343405209
Issue: See https://github.com/dart-lang/sdk/issues/55918

Change-Id: I6b65a62baf6f26f6e9cfee9f14667d021e16645e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/369506
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-06-05 20:50:49 +00:00
Johnni Winther ae03b57cbb [cfe] Remove .isNonNullableByDefault from package:kernel
This removes the .isNonNullableByDefault properties and similar from
the AST nodes in package:kernel. NNBD is now always enabled so these
properties are trivial.

TEST=existing

Change-Id: I75ca0551ac4b5910ea63530dd0c9c2e68bd01aff
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/366320
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2024-05-15 08:31:38 +00:00
Nicholas Shahan 1a0dd104d4 [ddc] Update some sourcemap locations
* Add special handling for String concatenations so the first string
  gets mapped correctly and work better in sound null safety.
* Update variable assignments to more consistently point to helpful
  locations, specifically when lowered from a prefix increment like
  `++x`.
* Run the sourcemap and stacktrace test suites with sound null safety.

Previously these suites were running with unsound null safety so more
operations were wrapped in function calls to check for null. Those calls
allowed for mode step or break points that hid some of the issues
addressed in this change.

Issue: https://github.com/dart-lang/sdk/issues/55692

Change-Id: Ibd887c8da64e72ab84c0698dd49b845abfaedbb8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/366025
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-05-10 23:49:14 +00:00
Nicholas Shahan ab2dd17ac7 [ddc] Erase extensions before calling .isTop()
The CFE test for top types doesn't and probably shouldn't erase
extension types so now they are earased before calling.

Change-Id: I4d2c9d13149031925fb144aff9c1628eef84941c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/364601
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-04-26 21:31:02 +00:00
Nicholas Shahan 061004f83f [ddc] Cleanup old setBaseClass()
With the new type system type arguments appearing in extends are
no longer represented by a class definition and do not need to
trigger any lazy logic.

Change-Id: I3f80f9f972bec69c678909c12d25a604a8fe2c59
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/353205
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Mark Zhou <markzipan@google.com>
2024-04-18 23:21:07 +00:00
Nicholas Shahan 2379cdc080 [ddc] Enforce more null safety on js interop
- Add a runtime flag to enable checks on non-nullable APIs that
  return values from non-static JavaScript interop.
- Call a new helper method at the call site when these APIs are
  detected to perform the null check.
- Add test file for the cases we can detect and enforce.

NOTE: This does not make non-static JavaScript interop sound.
This only adds more checks to enforce soundness with respect
to nullability in some cases. There are still holes that will
never be closed due to the permissive nature of this form of
JavaScript interop.

Change-Id: I2f88d1543a683fdc84d764e2b0eaafeb0ca73107
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/358581
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2024-04-03 23:20:15 +00:00
Ömer Sinan Ağacan e42a0af8da [ddc] Avoid decoding the whole file repeatedly in assert statements
`Source.text` is the cached `utf8.decode(source)`. Use it instead of
decoding `source` for each `assert` statement.

Change-Id: I118992d8e71d75f048064e12aed32ff396273425
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/360820
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Commit-Queue: Ömer Ağacan <omersa@google.com>
2024-04-03 17:09:30 +00:00
Nicholas Shahan 5b262d8234 [ddc] Delete _emitPropertyGet
Avoids the use of one method with multiple code paths and returns
to handle any situation because it becomes very hard to reason
about what original source code leads to each path.

Fixes: https://github.com/dart-lang/sdk/issues/54463
Change-Id: I8158ae2a79e0f627f0703e2e253b4406022fc84b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/357208
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-04-02 22:54:23 +00:00
Nicholas Shahan 37e86575c4 [ddc] Refactor visitDynamicGet
Stop passing `null` as the member parameter of `_emitPropertyGet`.

Avoids the use of one method with multiple code paths and returns
to handle any situation because it becomes very hard to reason
about what original source code leads to each path.

Issue: https://github.com/dart-lang/sdk/issues/54463
Change-Id: Iab15890541150cfc8c230c209adec245da025762
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/357206
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2024-04-02 21:50:42 +00:00
Nicholas Shahan c5218f2d4e [ddc] Refactor visitFunctionTearOff
Stop passing `null` as the member parameter of `_emitPropertyGet`.

Avoids the use of one method with multiple code paths and returns
to handle any situation because it becomes very hard to reason
about what original source code leads to each path.

Issue: https://github.com/dart-lang/sdk/issues/54463
Change-Id: I1255817c7cf76578b256650789f6530b456b2f03
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/357207
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-04-02 19:57:25 +00:00
Nicholas Shahan 1cb4f090c3 [ddc] Refactor visitRecord(Index|Name)Get
Stop passing `null` as the member parameter of `_emitPropertyGet`.

Avoids the use of one method with multiple code paths and returns
to handle any situation because it becomes very hard to reason 
about what original source code leads to each path.

Issue: https://github.com/dart-lang/sdk/issues/54463
Change-Id: I31ada0647816e8c7db2dac56a0a56fd50d9bd0a5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/357205
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-03-14 15:11:48 +00:00
Nicholas Shahan 98a3605562 [ddc] Fix assert location in expression eval
When assertions appear in a debugger expression they now have a
synthetic source location available. This also allows for the lookup
of the actual source.

Issue: https://github.com/dart-lang/sdk/issues/43986
Fixes: https://github.com/dart-lang/sdk/issues/54956
Change-Id: I34ae5f810593b40282929d02cb290de86603922f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/356287
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-03-08 17:05:10 +00:00
Nicholas Shahan 0231b2ae1f [ddc] Remove more unnecessary code
After the switch to the new type system more code is unnecessary.
- Clean up logic for deferring classes because the new type system
  allows us to flatten the search to just the immediate superclass.
- Delete more `emit<xxx>Type` helper methods.
- Further differentiate emitting a Type vs a reference to a Class.

Fixes: https://github.com/dart-lang/sdk/issues/54745
Change-Id: Ia6e1accb4c9c993967cd5444c18c65938954f7d9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/348766
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Mark Zhou <markzipan@google.com>
2024-02-21 23:04:43 +00:00
Sam Rawlins cda9755918 dev_compiler: prepare for curly_braces lint change
This aligns this code better with Effective Dart and prepares for the
upcoming lint rule change at https://dart-review.googlesource.com/c/sdk/+/353140.

Change-Id: I1b3ff4a4f85ec2182d06a67acf0e43fbc45129f2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/353220
Auto-Submit: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
2024-02-20 16:04:30 +00:00
Nicholas Shahan 3c13e9f273 [ddc] Cleanup dead code from the runtime library
This code is no longer used now that the new runtime types are always
enabled.

Change-Id: I0c7d627199a10e023d5d1afa581812b360e9a0f0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/344609
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-02-16 22:33:54 +00:00
Nicholas Shahan 528e1092bc [ddc] Cleanup dead code from the compiler
This code is no longer used now that the new runtime types are always
enabled.

Change-Id: Ic8e59ed43931fc89efeee48269c7da388a6c6553
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/344606
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-02-16 17:40:08 +00:00
Nicholas Shahan 48dd473c21 [ddc] Delete new runtime types flag from compiler
Cleanup branches that are no longer reachable.

Change-Id: If53a80915f3c7dc444e7027a8287395add23165b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/344605
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-02-15 22:24:27 +00:00
Nicholas Shahan f6ffe00f28 [ddc] Avoid calling addTypeCaches with new types
Some preparation for deleting all the old type system code.

Change-Id: I9319064100ce19a4122612c36781c7e4a71094aa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/352724
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-02-15 18:28:49 +00:00
Nicholas Shahan 29f5b4141f [ddc] Don't emit old type system variance
The variance information emitted here is only used in the old
type system so it can be skipped when using the new representation.

Change-Id: I43093c1742f9a89ef018dd76ec7a0bcd477414c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/348801
Reviewed-by: Kallen Tu <kallentu@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-01-29 20:08:28 +00:00
Oleh Prypin 0da8f7a7b4 Remove unnecessary imports of 'package:collection' IterableExtension
* Replace `.whereNotNull()` with `.nonNulls` which is now in Dart core.
* `.firstOrNull`, `.lastOrNull`, `.singleOrNull` and `.elementAtOrNull(i)` are also in Dart core and even under the same name, so simply drop the import of 'package:collection' whenever possible.

Bug: b/322159291
Change-Id: I81eb93426680dc78a608bbcc714eb26c0eca5c62
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/348260
Reviewed-by: Lasse Nielsen <lrn@google.com>
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Oleh Prypin <oprypin@google.com>
2024-01-25 11:07:28 +00:00
Nicholas Shahan b811ab5b04 [ddc] Reset all initialized consts on hot restart
Clear local caches storing const values in each module.

Change-Id: I7766e92df6b8d1f91bad5fbb2addb8ace7763646
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/347220
Reviewed-by: Mark Zhou <markzipan@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-01-22 23:25:18 +00:00
Chloe Stefantsova 970885b879 [cfe] Use TypeParameter in DDCTypeEnvironment, TypeParameterFinder
This CL is a part of the clean up for
https://dart-review.googlesource.com/c/sdk/+/312264

Change-Id: If9d892496af5498943694ad266ee6eb151fdc3e1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/346401
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
2024-01-17 11:00:17 +00:00
Nicholas Shahan 95cad9c8a6 [ddc] Fix semantics of capturing loop variables
Fixes the for loop lowering to JavaScript when there are function
expressions in the loop initialization, condition, or updates.

Manually assign source mapping information on js_ast nodes to 
make stepping in the Dart debugger make as much sense as possible.
With these mappings three steps are required on each loop variable 
on each iteration but it ensures that the mapping always points to the
variable instead of some random line of code in or around the original
for loop.

Fixes the failure on language/loop/for_variable_capture_test.

Issue: https://github.com/dart-lang/language/issues/3539
Change-Id: I755b88faef11804986fb3d1b2c328da3dd08fe8d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/345145
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-01-12 20:04:52 +00:00
Nicholas Shahan 1572bb563f [ddc] Delete typeRep() and legacyTypeRep()
Replaces all uses with the equivalent `TYPE_REF()` and 
`LEGACY_TYPE_REF()` because they are used in the shared dart:_rti 
library and there is no need to support both.

Change-Id: I8c04eb12856cf6933a168f3e63351a45cd5d704e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/344608
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2024-01-12 00:45:47 +00:00
Nicholas Shahan 1f35476e63 [ddc] Delete compileTimeFlag()
Replaces all uses with the equivalent `JS_GET_FLAG` because it is
used in the shared dart:_rti library and there is no need to support
both.

Change-Id: I4e347d568444caab63e4217845c14353c429cb10
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/344607
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Mark Zhou <markzipan@google.com>
2024-01-12 00:12:35 +00:00
Nicholas Shahan ced57aa549 [ddc] Handle extension types in more locations
Either erased the extension type or documented why it seems erasure is 
not needed.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: Ic6c2fcaebaf10570691b95a383b8ad2e40d2061a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/343720
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-12-27 23:38:42 +00:00
Kallen Tu febdd14b3d [ddc] Add type parameter variance to ddc canary.
Updated the ddc canary implementation to handle variance subtyping.

Variance subtyping is currently broken on DDC. This CL emits a runtime call to `addTypeParameterVariances` from `rti.dart` to annotate the type parameter variances of each interface that's appeared in type recipes. The rest of the subtyping algorithm already exists from the Dart2JS implementation, so the variance feature should be working correctly now in DDC with these changes and after the switch to canary by default.

Existing tests now pass: language/variance/variance_in_subtyping_test, language/variance/variance_inout_subtyping_test

Fixes https://github.com/dart-lang/sdk/issues/54367

Change-Id: I8483570184de61f2a6d365f89446720ef2349608
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338651
Reviewed-by: Nate Bosch <nbosch@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
2023-12-27 18:19:10 +00:00
Nicholas Shahan e339deff3a [ddc] Cleanup use of Nullability.legacy
These uses all flow to code that ignores the nullability so `.nonNullable`
works just as well.

Issue: https://github.com/dart-lang/sdk/issues/49996
Change-Id: I5363b8f7f757d421866b60c9a9308bf2370f4e50
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/342723
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-12-19 23:28:27 +00:00
Chloe Stefantsova 3eeba4a4e2 [cfe] Refactor FunctionNode.futureValueType into emitted value type
Previously we would encode the type of the value returned in `async`
functions as the field `futureValueType` on `FunctionNode`. For all
other kinds of functions, such as `sync`, `sync*`, and `async*`, that
field would be null. This CL renames `futureValueType` into
`emittedVAlueType`, and for functions of kinds `async`, `sync*`, and
`async*` that is expected to be the type of values emitted via
`return` or `yield` statements. For `sync` functions that field is
supposed to contain `null`.

In response to https://github.com/dart-lang/sdk/issues/54159

TEST=existing

Change-Id: I1efdbcc4e75d150f5618c7ca50cfe49a0e54fce6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/341662
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Ömer Ağacan <omersa@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
2023-12-19 08:44:43 +00:00
Nicholas Shahan 38e2d34424 [ddc] Erase extension types in as expressions
Ensures the same optimizations to expressions statically typed as
extension types.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: If85f17203cb4c07c06da0e2e1712fea15c39c444
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/342106
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-12-18 20:56:54 +00:00
Nicholas Shahan 8d24f7ebd4 [ddc] Erase extension types in string concats
Ensures the same optimizations to expressions statically typed as
extension types.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: I981859562bdd81cf34bd5ed4160a270e6fdff9f3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/342105
Reviewed-by: Mark Zhou <markzipan@google.com>
2023-12-18 20:56:54 +00:00
Nicholas Shahan b2cd914227 [ddc] Erase extension types in assertions
Ensures the same optimizations to expressions statically typed as
extension types.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: Id9b944d3f716faf38bb4770eb9b90ccc708056ce
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/342104
Reviewed-by: Mark Zhou <markzipan@google.com>
2023-12-18 20:56:54 +00:00
Nicholas Shahan 83ba9fe0a8 [ddc] Enable new runtime types by default
Fixes: https://github.com/dart-lang/sdk/issues/48585
Change-Id: I7b0cfd70c4ada42e094e6ecbfbd077aebf16a490
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/341329
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-12-18 18:35:29 +00:00
Kallen Tu ee3ee59012 [ddc] Re-enable 'variance' experiment flag.
We want to be able to emit variance information in DDC and this flag was gating the variance checking logic in `rti.dart`.

Set to `true` by default since we can't use the feature without the experiment enabled anyways.

Change-Id: I69a0691e9fbe6f0f355fc7319151c19bbffc1961
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/341640
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
2023-12-14 21:01:10 +00:00
Nicholas Shahan 5530d82467 [ddc] Cleanup unused legacy types
These types are all used in placed where the nullability is ignored
so this is mainly just for sanity sake and in preparation for a future
where the getters/methods no longer exist.

Issue: https://github.com/dart-lang/sdk/issues/49996
Change-Id: I4e6489ea859176e30ee8508ad252f4c9b68159b9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/337921
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2023-12-13 16:02:38 +00:00
Nicholas Shahan a45fc14739 [ddc] Update debugger field signatures
Erases extension types to their representation type for field
signatures. This is the best representation we have at runtime for
the field. Note this isn't necessarily the runtime type of the
field value.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: Ibe064f4fd3829a858fc9fd920e2e91175d9ae0c9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336823
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Mark Zhou <markzipan@google.com>
2023-11-21 01:55:46 +00:00
Nicholas Shahan 30b530bce7 [ddc] Handle Object members on extension types
Erase extension types when deciding to dispatch directly or to a helper
method for Object members.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: I31081bf4ec64a0f667c8d40b08b94773e229ebe1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/335601
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-11-17 22:24:37 +00:00
Nicholas Shahan 385c0063af [ddc] Cleanup extension type erasure helper
A better API is now available from the kernel nodes directly.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: I1b4b36e44292cadc3f9d6c495ae93ae20e0db970
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/335944
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-11-14 22:26:39 +00:00
Nicholas Shahan f1219f2956 [ddc] Make equality optimizations aware of
extension types. This ensures the same optimizations are applied to
extension types and the representation type they are erased to.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: I630fc8b68e6e86b81ec85495286719ca39f89d14
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/335943
Reviewed-by: Mark Zhou <markzipan@google.com>
2023-11-14 22:26:39 +00:00
Nicholas Shahan 60b90b296c [ddc] Add more context to error messages
Some SDK only inline helper methods expect specific types passed to
them. These expectations can't be enforced by the type system and
everything is currently working properly. Extension methods may cause 
confusion in the future so this change adds a bit more context to
the error messages just in case.

Issue: https://github.com/dart-lang/sdk/issues/49735
Change-Id: Idc620993d1a240fa5aaaccd4519433b04f0ba9ad
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/335942
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Mark Zhou <markzipan@google.com>
2023-11-14 21:13:49 +00:00
Nicholas Shahan e278c09ab6 [ddc] Erase ExtensionTypes before normalizing
- Update FutureOr normalization to use exhaustive switch statement and
  throw on ExtensionTypes.
- Delete ExtensionTypeEraser in favor of the `.extensionTypeErasure`
  getter provided by Kernel.

Issue: https://github.com/dart-lang/sdk/issues/53566
Change-Id: Id8cd9b85f9f875084080c7c9d0d8b0bb03ee8da7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/334780
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
2023-11-08 19:07:38 +00:00
Nicholas Shahan 2ef46a1fff [ddc] Fix custom formatter for classes
Classes were mistakenly being formatted by the function formatter.

Change-Id: I6c513803c7c211f02bb9267914b5988cd6c02c5e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/334005
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2023-11-07 00:48:58 +00:00
Nicholas Shahan c50fcf8828 [ddc] Show "any" for type args of package js types
Ensures that `toString()` of types that contain embedded js types 
will appear the same in the old and new runtime type systems.

Issue: https://github.com/dart-lang/sdk/issues/48585
Change-Id: I71ec0e13943281e745bcf05e10aa36d093cbc0c3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/334003
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
2023-11-06 22:13:17 +00:00
Johnni Winther 72f1591f29 [cfe] Use getTypeAsInstanceOf instead of getInterfaceTypeAsInstanceOfClass
The changes calls to getInterfaceTypeAsInstanceOfClass (et al.) to
getTypeAsInstanceOf to ensure that we take extension types into account.

Change-Id: I7d732cdae8494002b44561cb02c49d58dd0ba67b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/332920
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
2023-10-31 22:30:50 +00:00
Johnni Winther 4b2cf0744d [cfe] Add TypeDeclarationType and asInstanceOf
This add a common sealed superclass TypeDeclarationType for
ExtensionType and InterfaceType and uses it to add a common
asInstanceOf method to ClassHierarchy.

Change-Id: I7294e41069b063305c3bd4e384ff90614a3936a6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/331981
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Ömer Ağacan <omersa@google.com>
2023-10-26 08:46:48 +00:00
Nicholas Shahan 8a1e69063e [ddc] Update for extra null safety checks in RTI
- In development mode (DDC) the extra null safety errors will be thrown.
- Remove extra code paths that called unsound helpers.
- Fix expectations in weak_null_safety_errors_test.dart.

Change-Id: I107c602b0ae38b13038e501564cba9b8cfc58e70
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/329568
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-10-19 21:32:15 +00:00
Johnni Winther 9a4c9100ae [kernel] Add DartType.extensionTypeErasure
This renames ExtensionType.typeErasure and adds it to DartType. This also fixes the extension type erasure for when extension types are used in the arguments of an extension type.

DartType.extensionTypeErasure can be used by backends to easily
access the type without extension types for any type.

TEST=pkg/kernel/test/extension_type_erasure_test.dart


Change-Id: Ia49d273ed85111e3ae822720860a3e0be5ea0252
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/329960
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2023-10-11 13:51:22 +00:00
Nicholas Shahan 53ba601220 [ddc] Apply select inlining for dart:_rti
Adds simple method inlining for select patterns only in the dart:_rti
library as an optimization. This helps avoid chains of costly
accesses method calls that in the end simply perform a single
operation and return the result.

For example and snipet from the compiled SDK before:

```
if (_rti._isString(object)) {...}
```
and after:

```
if(typeof object == "string") {...}
```

Issue: https://github.com/dart-lang/sdk/issues/48585
Change-Id: I90596294d35a8fd75d74014c6a12f6e8c726cfcc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324571
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
2023-09-30 00:20:58 +00:00
Nicholas Shahan acb19ddc3b [ddc] Throw when visiting unsupported types
Always throw on `InvalidType` and `AuxiliaryType` in all `DartType`
visitors. These are not expected to exist at this stage in the
compilation.

Change-Id: I8486e4245d6eae895d9420ca64a216aa207af80e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/327980
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Anna Gringauze <annagrin@google.com>
2023-09-29 18:46:31 +00:00