commit | 2de63ac01c3f092b24da50d1080617f3244e7b05 | [log] [tgz] |
---|---|---|
author | Martin Kustermann <kustermann@google.com> | Fri Nov 16 11:18:22 2018 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Fri Nov 16 11:18:22 2018 +0000 |
tree | a49f29e8f41d77b172c86579b8f676f8c5ff6313 | |
parent | 79b85ae94409225d57e9bc78f54a566c896e1aa6 [diff] |
[VM] Add @pragma annotations on Field, make @pragma annotations work generally Currently the @pramga('vm:exact-result-type') annotation only works if the function is a recognized method. This change changes that to make the VM just look if a function has the annotation (no matter if it's also in the list of recognized methods or not). Furthermore this CL adds a "has_pragma" bit to [Field] objects, similar to how we have it on [Function]/[Class]es. This allows annotating fields with types, as we do with function return types. Furthermore this CL lets the type propgagator use @pragma('vm:exact-result-type') annotations to narrow the [CompileType] set on [LoadFieldInstr]s. Since the @pragma is a general feature, this CL moves the `Function::FindPragma()` to `Library::FindPragma` (which is where any other metadata lookup happens). We also let the `FindPragma` accept any of Class/Function/Field objects. Furthermore this CL adds a bailout if we try to evaluate metadata in the background compiler, since the background compiler is not allowed to execute generated code. The bailout should trigger a re-compilation on the mutator thread. Furthermore the `FindPragma()` function is fixed to handle the case when the evaluation of the metadata results in e.g. a language error. In this case we simply claim to not have found a pragma annotation. Issue https://github.com/dart-lang/sdk/issues/31954 Change-Id: I0900a80d5ae0f3e8d09baf13cba1b20dd974df31 Reviewed-on: https://dart-review.googlesource.com/c/84037 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Visit the dartlang.org to learn more about the language, tools, getting started, and more.
Browse pub.dartlang.org for more packages and libraries contributed by the community and the Dart team.
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.