Commit Graph

30 Commits

Author SHA1 Message Date
Johnni Winther 03ac05b146 [kernel] Migrate package:kernel/text_serializer.dart
Change-Id: I0b084911fa4ba35593a70ba8c214e818dbf7c219
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/190440
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2021-03-10 13:26:58 +00:00
Johnni Winther 34fb48bb8a [kernel,front_end] Migrate first wave of pkg/kernel and pkg/front_end
Migrates libraries dependent only on already migrated libraries.

Change-Id: I0e85ee8dbc2afce031b92e0009e71c206a55af28
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/179502
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2021-01-18 15:40:21 +00:00
Lasse R.H. Nielsen 6e29700e16 Update List constructor documentation, deprecate constructor.
Emphasize that the operation is going away,
and mark constructor as deprecated.

TEST= Refactoring+deprecation only, covered by existing tests.

Change-Id: I82aa044cd2cf7bf347b624371399f44bda8f4a07
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/173261
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
2020-12-07 16:20:28 +00:00
Johnni Winther b38821f39d [kernel] Enforce lints in pkg/kernel
Change-Id: I954f7632f22b552febed2a3140f81245277cb050
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/171581
Reviewed-by: Jens Johansen <jensj@google.com>
2020-11-11 12:51:28 +00:00
Dmitry Stefantsov d6dfbda0d3 [cfe] Complete basic implementation of round-trip text serialization
The future non-basic version is to include the following:

  * adding missing annotations on nodes
  * adding URIs and file offsets to the nodes
  * adding nullability markers to types
  * stylistic changes
  * optimizations
  * better surface syntax
  * better error messages

Change-Id: If2fc51e4932d9043dd1719b766bd23ff4e0fc1ad
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/154001
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2020-07-13 14:13:55 +00:00
Dmitry Stefantsov 060d948339 [cfe] Add support for classes to round-trip text serialization
Supplementary changes for handling Classes done in this CL are the
following:

  * handling Supertypes
  * handling Constructors
  * handling remaining kinds of Procedure
  * serializing AsyncMarker the same way as flags
  * eliminating the need to wrap flags into IntLiteral

Change-Id: Id69c6e37f093cf80206f4657b649f79c75484775
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/154000
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2020-07-10 12:49:27 +00:00
Dmitry Stefantsov 2eee76303f [cfe] Add support for constants to Kernel text serialization
The CL also finalizes the support for expressions because the constant
expressions can now be serialized.

Change-Id: I7bc98fc974d3be1d4b9f1712cf67f9fbe6496e01
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153461
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2020-07-07 15:22:01 +00:00
Dmitry Stefantsov e196354481 [cfe] Support more Expression nodes in text serialization
The following nodes are now supported:
* SetConcatenation
* MapConcatenation
* FileUriExpression
* BlockExpression
* ListConcatenation
* NullCheck
* Instantiation
* CheckLibraryIsLoaded
* LoadLibrary

Change-Id: Ia269196c36facb211995d0ef8cd8a68cbf836e37
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153346
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2020-07-07 09:32:29 +00:00
Dmitry Stefantsov da8712394b [cfe] Support LabeledStatement and Break in text serialization
In addition to supporting the nodes, the notion of Binder is
reworked.  It doesn't store the computed local distinct name on the
node itself now, as it's not always possible (which is the case of
LabeledStatement), but keep it in a map.

Change-Id: I04c08875cbcac3a547d62afbe5b17f023e6f1035
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153342
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2020-07-07 09:32:29 +00:00
Dmitry Stefantsov 56df960ddf [cfe] Refine text serialization testing: skip free variables
The CL reduces the number of false positive cases in the round-trip
serialization unit testing by refining the verifier analysis.  Not it
doesn't attempt to make the round trip over the sub-trees containing
free variables.

Change-Id: Ib6fb2e72f7543ea7d99c5273c337801f3ad1bec4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/144285
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2020-04-22 10:27:08 +00:00
Dmitry Stefantsov d5dea0056b [cfe] Improve diagnostics on text serialization failures
This CL also includes the following changes:
- The .registerTags() method is added to the Case combinator.
- The actual canonical names' root is passed into the deserializer.
- Some text serialization failures are fixed and the corresponding
status entries in text_serialization.status removed.

Change-Id: I222dfa3fc348dddf83e0c6edb92f15d08b8e73e9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143803
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2020-04-17 10:53:47 +00:00
Dmitry Stefantsov ae0eca8318 [cfe] Add text serialization support for libraries
Change-Id: Ia36efcc433df573abf2f82c1b402fa031276c652
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143587
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2020-04-17 07:27:06 +00:00
Dmitry Stefantsov 7e430f6ff7 [kernel] Add serialization support for FunctionNodes
Change-Id: I2dc014cebcab0da911757e49d1feb59f52444c1a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/93982
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2019-11-14 16:23:16 +00:00
Dmitry Stefantsov 5e3e633d5d [kernel] Add text (de)serialization for TypeParameterTypes
Change-Id: I6a50629b40fab061f3bade650b11499b505f9c3d
Reviewed-on: https://dart-review.googlesource.com/c/92429
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2019-02-20 12:40:21 +00:00
Dmitry Stefantsov 923cea6652 [kernel] Add Bind and Binder combinators
Change-Id: I24bb40faa516eb7093561c2348854771c9eac7d1
Reviewed-on: https://dart-review.googlesource.com/c/93407
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2019-02-20 12:40:21 +00:00
Dmitry Stefantsov c19af8cee9 [kernel] Cleanup code for (De)SerializationEnvironment
Change-Id: I751d13014f44bea99733eccdb9665ce4a50da8b2
Reviewed-on: https://dart-review.googlesource.com/c/93222
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2019-02-20 12:40:21 +00:00
Dmitry Stefantsov d60354b521 [kernel] Add binders and close terms as separate operations
Change-Id: I3e9372df5f37cad91d4609d052f05c94fdc54ab1
Reviewed-on: https://dart-review.googlesource.com/c/92428
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2019-02-20 12:40:21 +00:00
Dmitry Stefantsov 6205d7e82c [kernel] Add ability to (de)serialize StaticGet
Change-Id: I8593c38c38f7aa4a9b8d573516681158db7f670c
Reviewed-on: https://dart-review.googlesource.com/c/89546
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
2019-01-18 09:31:06 +00:00
Dmitry Stefantsov e529988474 [kernel] Rename ScopedReference to ScopedUse
Change-Id: Ie18096e1bbeb6fcf7d638838cfd96627fb07b1af
Reviewed-on: https://dart-review.googlesource.com/c/89545
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
2019-01-18 09:31:06 +00:00
Dmitry Stefantsov f437fa02c2 [kernel] Nest *Environment into *State for (de)serialization
Change-Id: I580a67fd366546d7526e8b8204111aa89bb34c79
Reviewed-on: https://dart-review.googlesource.com/c/89284
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2019-01-18 09:31:06 +00:00
Dmitry Stefantsov 59b252fa0a [kernel] Add text serializer/deserializer for VariableGet
Change-Id: I884190dffbca5eb5181f21bc12972b375e31de65
Reviewed-on: https://dart-review.googlesource.com/c/88724
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2019-01-10 14:20:01 +00:00
Kevin Millikin 9f866c8696 [Kernel] Do not serialize list lengths
The length is redundant if the list is delimited.  Serializing the
length had the slight advantage of preallocating a list of the correct
size and the disadvantages of being harder to maintain by hand and
ugly to read.

Instead, delimit lists.  The empty list is naturally ().

Change-Id: I17c14f4e0ca4934cfd3dcdf2a0047f87df80bb79
Reviewed-on: https://dart-review.googlesource.com/c/88320
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2019-01-03 10:16:14 +00:00
Kevin Millikin 66fa918fd3 [Kernel] Add text serializers for Let expressions
Serializing Let requires us to serialize variable declarations which are
complicated.  They require us to support optional values because they
have an optional initializer.  This is done by using a _ for none.

Having support for Let will allow us to support variable get and set.

Change-Id: I207183730389de70409ae6ca5017510420e36830
Reviewed-on: https://dart-review.googlesource.com/c/88182
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2019-01-02 15:49:49 +00:00
Kevin Millikin 01b23e23a4 [Kernel] Add text serializers for lists, sets, and maps
Use separate tags for the non-const and const versions of these
literals, just like the binary serializer does.

Change-Id: I3fabf02ce758a46ce55ff258723dd3ae11e6d497
Reviewed-on: https://dart-review.googlesource.com/c/88181
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2019-01-02 12:12:49 +00:00
Kevin Millikin 94e77946a0 [Kernel] Add text serializers for some DartTypes
Add serializers for some simple DartTypes and some expressions that
were blocked on being able to serializer DartTypes.

Change-Id: Ib16aa59e5782bddc820ea88e0885f258fc17bbd0
Reviewed-on: https://dart-review.googlesource.com/c/88180
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2019-01-02 10:45:35 +00:00
Kevin Millikin aeb873187d [Kernel] Add text serializers for lists
Add a serializer for lists that writes the length and then the elements.
Use it for serializing/deserializing StringConcatenation.

Change-Id: I61eb0ec319b0dbf94a2f3965b392a7ad12ce01dc
Reviewed-on: https://dart-review.googlesource.com/c/87962
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2018-12-21 10:46:00 +00:00
Kevin Millikin 9d77f18784 [Kernel] Serialize logical expressions
Use the operator string as the tag.  This requires us to be able to
serialize a sequence of (two) things.  Homogeneous lists don't give us
static typing so we introduce a pair class.

This requires allocating a pair (serializing a list would require
allocating a list anyway).  When we start generating and optimizing
the combinator applications we expect to eliminate the pair allocation
overhead.

Change-Id: I5a00c6973b9065ac8a91f1a69b52d97554f1e823
Reviewed-on: https://dart-review.googlesource.com/c/87840
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2018-12-20 15:24:15 +00:00
Kevin Millikin 091e38afcb [Kernel] Implement more text serialization
Begin serializing expressions.  Fairly quickly you encounter the cyclic
dependency between class Expression and any subclass that contains
nested expressions.  It isn't possible to implement this with immutable
values in Dart.

A quick solution is to break the cycle somewhere.  Here, the cycle is
broken by late initialization of the serializer for Expression.
Serializers are still immutable (either const or with all final fields)
and still singleton instances (by virtue of being static fields).

Change-Id: I9886bcd57041744e0ef9e95f7b901fcb94b5e042
Reviewed-on: https://dart-review.googlesource.com/c/87801
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2018-12-20 13:45:04 +00:00
Kevin Millikin ff44e27c5a Implement text serialization of strings
Use json.encode/json.decode.  This gets some strings wrong but it
should be enough to make more progress.

Testing with hardcoded strings is already getting awkward.

Change-Id: Ie0b168bec611ed93da13fff90f86232bb56c713f
Reviewed-on: https://dart-review.googlesource.com/c/87663
Reviewed-by: Daniel Hillerström <hillerstrom@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2018-12-20 11:12:49 +00:00
Kevin Millikin 612b6884c4 Split the text serializer into libraries
Move the combinators and the reader into their own libraries.

Change-Id: I85042a3f319c0fc945d658dd23a3959c74b7cbca
Reviewed-on: https://dart-review.googlesource.com/c/87660
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Kevin Millikin <kmillikin@google.com>
2018-12-19 14:24:22 +00:00