Commit graph

55822 commits

Author SHA1 Message Date
Brian Wilkerson 04816270fa Add Forest support for creating parenthesized conditions
Change-Id: I69aa15244dff20d18d7a34c6b052bd9eeed388ed
Reviewed-on: https://dart-review.googlesource.com/55761
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-05-18 17:51:08 +00:00
Konstantin Shcheglov 7a90ed9b88 Tests for completion with nested blocks, functions, and methods.
R=brianwilkerson@google.com

Change-Id: I050aaa2f80a3374fd92587a0b8461bc170078bd8
Reviewed-on: https://dart-review.googlesource.com/55903
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-05-18 17:43:38 +00:00
Brian Wilkerson 353ddbaea1 Add Forest support for while statements
Change-Id: Iffec7799642a44fc6ab2b5f8b7493135d2d05ac5
Reviewed-on: https://dart-review.googlesource.com/55906
Reviewed-by: Dan Rubel <danrubel@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-05-18 17:34:28 +00:00
Johnni Winther 8d0bda43f3 Fix codesize regression from Cleanup after removing MirrorsData
Change-Id: If67905010f46797e0d007cf80973905a8f6e5537
Reviewed-on: https://dart-review.googlesource.com/55889
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2018-05-18 17:05:47 +00:00
Brian Wilkerson 802c25aff9 Add tests to test InstanceCreationExpressionImpl.canBeConst
Change-Id: Id678d054d7b54e5eb33e5f406efa7b51a7aa4361
Reviewed-on: https://dart-review.googlesource.com/55902
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-05-18 16:51:27 +00:00
Konstantin Shcheglov def6f6c86c Don't create linked groups when nothing was written.
In particular, if the type was invalid, so that we cannot write it.

R=brianwilkerson@google.com

Change-Id: I5499e17e2aa3527d21cab050b7fecfd3cd09efc7
Reviewed-on: https://dart-review.googlesource.com/55860
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-05-18 15:54:29 +00:00
Peter von der Ahé 0c2b349827 Blocks and variable declarations in Forest
This is a starting point for supporting blocks and variable
declarations in the forest API. I'm not sure exactly how the
analyzer handles variable declarations, so we'll probably have
to iterate on that part.

Change-Id: I93aec818baec24f8b038f02c66699117070d6b0c
Reviewed-on: https://dart-review.googlesource.com/55683
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-05-18 13:55:47 +00:00
Dmitry Stefantsov 5ecf69d90a [fasta] Use Object as defaultType if Object is the explicit bound
Change-Id: I0b3dacbbe5bc45b9e0142e7bb3f6793c83ac4cd2
Reviewed-on: https://dart-review.googlesource.com/55885
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-05-18 11:08:57 +00:00
Samir Jindel 4bac17655d [kernel/vm] VM support for instantiate-to-bounds.
Dynamic invocations of generic functions might not pass type arguments.
The type arguments need to be filled in with the default type arguments
calculated by the CFE.

Change-Id: I5865e79b2975af97d1ca1680bd88ba8137208bb8
Reviewed-on: https://dart-review.googlesource.com/48423
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-05-18 11:07:17 +00:00
Lasse R.H. Nielsen a4494a7fb2 Make mixin and interface built-in identifiers.
Fixes #33113

Bug: http://dartbug.com/33113
Change-Id: I4b0b7c9d82ae9df6a7e9f71168ca981c62c7a2f1
Reviewed-on: https://dart-review.googlesource.com/55222
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-05-18 09:57:17 +00:00
Lasse R.H. Nielsen dc76aa34c7 Stop using a port to keep the isolate alive in async_helper.
Addresses issue #33067.

Bug: http://dartbug.com/33067
Change-Id: Id9e60e930a8f289a51063f609e13fb998f6907c3
Reviewed-on: https://dart-review.googlesource.com/55662
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2018-05-18 09:33:27 +00:00
Martin Kustermann a16563931c [VM] Mark 3 more tests as pass, crash
Issue https://github.com/dart-lang/sdk/issues/33156

Change-Id: Iefbfd15e428c004244d86e0a544a174d31cbea78
Reviewed-on: https://dart-review.googlesource.com/55880
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-05-18 08:00:21 +00:00
Leaf Petersen a5d4195b0b CHANGELOG entry for noSuchMethod change
Change-Id: Idf8ea6252aba97b4a29a3d0acaa530e8c0cb59eb
Reviewed-on: https://dart-review.googlesource.com/55843
Reviewed-by: Jenny Messerly <jmesserly@google.com>
2018-05-18 00:16:46 +00:00
Konstantin Shcheglov d49af06ce0 Fix for searching references to named parameters in hierarchy.
R=brianwilkerson@google.com

Change-Id: I932eae1a1c6e440fab2034bffc7ec850f1216b9c
Reviewed-on: https://dart-review.googlesource.com/55841
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-05-18 00:08:38 +00:00
Zach Anderson c26435f18f [dart:io] Add length check assert to x509 code
Change-Id: I42c29e43f34cceea90caa5b99c4249ddaabe968c
Reviewed-on: https://dart-review.googlesource.com/55763
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-05-17 21:49:17 +00:00
Dan Rubel 6fee620564 Convert more IdentiferContext consts
* Update local function identifier context
* Update IdentifierContext.operatorName
* Simplify top level declaration identifier context

Change-Id: Ie977769dde3374f109283b9af49be18dd71144bf
Reviewed-on: https://dart-review.googlesource.com/55803
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-05-17 21:42:17 +00:00
Brian Wilkerson a6ad152315 Fix constant-related deprecation warnings in analyzer packages
Change-Id: I6e4186d2a877275db2f04881a6aa6d154d4f8693
Reviewed-on: https://dart-review.googlesource.com/55820
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-05-17 21:24:38 +00:00
Dan Rubel 3e8ca8e0a6 Improve class declaration header recovery
This improves recovery when parsing type names in a class declaration header
by replacing calls to parseType with calls to computeType.

Change-Id: Icbb86fd977d4d92b00abf2282baea34a1ff21e1d
Reviewed-on: https://dart-review.googlesource.com/55802
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-05-17 20:57:11 +00:00
Dan Rubel ffd5a1914d Update top level function name identifier context
Change-Id: I25e20aad434b670752a2cac2d572812a0f88228a
Reviewed-on: https://dart-review.googlesource.com/55801
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-05-17 20:57:11 +00:00
Zach Anderson 24f5ca0187 [fuchsia] Use Fuchsia prebuilts
This is still using the prebuilts from Dart's bot for building
the Observatory. Instead, we should probably build/take the
Observatory from Fuchsia's bots.

Change-Id: I466061d6f7176e2b76912d303ef0b0c518d19e1e
Reviewed-on: https://dart-review.googlesource.com/55580
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-05-17 20:54:06 +00:00
Dan Rubel 1a2f317735 Update parse mixin to use computeType and add recovery tests
... and address comments in
https://dart-review.googlesource.com/c/sdk/+/55560

Change-Id: Ifc97b0b43d91e6c04a344a862d2de0e11ae001cf
Reviewed-on: https://dart-review.googlesource.com/55800
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-05-17 20:49:06 +00:00
Alexander Thomas 1d6619eba6 [infra] Upgrade checked in SDKs to 2.0.0-dev.55.0
TBR=whesse@google.com

Change-Id: Iaa6f059e805a85df1a81b594a488bce14d539a67
Reviewed-on: https://dart-review.googlesource.com/55782
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Alexander Thomas <athom@google.com>
2018-05-17 20:45:26 +00:00
Konstantin Shcheglov 76a30dd594 Initial implementation of 'execution.getSuggestions'.
Only local variables, no tests for multiple blocks, or parameters.
No support for classes yet.

No support for expressions or runtime variable types.

R=brianwilkerson@google.com

Change-Id: I9ec5c40e407cda48be408e4e4882d97349413b9c
Reviewed-on: https://dart-review.googlesource.com/55762
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-05-17 20:25:04 +00:00
Martin Kustermann 510669a0b4 [VM] Address uncovered issues, mark test as passing
Change-Id: Ie2c5eb055ce6138952af145ce6fdb972c057bd16
Reviewed-on: https://dart-review.googlesource.com/55780
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-05-17 19:21:35 +00:00
Konstantin Shcheglov abb1ee98f7 Move library related operations to DartFileEditBuilderImpl. Initialize enclosing elements into fields lazily.
R=brianwilkerson@google.com

Change-Id: Ic933c9399f2288805e1f450f9d564e174516addc
Reviewed-on: https://dart-review.googlesource.com/55760
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-05-17 18:41:49 +00:00
Dan Rubel 7d5ebb937b A few more Analyzer/CFE type argument tests
Change-Id: I32e3dd65f470893f1ff244412eae7fccc0a6c150
Reviewed-on: https://dart-review.googlesource.com/55740
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-05-17 17:17:16 +00:00
Martin Kustermann 11006c3bac Reland "[VM] Use IR for code in [CatchEntryInstr]s to populate captured exception/stacktrace variables"
This fixes an issue when a program got loaded via dill, a function
with a try-catch got optimized and the exception/stacktrace variables
got captured.

Change-Id: Icb8ea5f3557080f8274f7db2af09e33154820e5b
Reviewed-on: https://dart-review.googlesource.com/55721
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-05-17 16:48:56 +00:00
Zach Anderson e7495e427c [dart:io] Adds X509Certificate.der and X509Certificate.pem
fixes #33115

Change-Id: I7ccf5998b23e936040fe65792824f09d3f494cf7
Reviewed-on: https://dart-review.googlesource.com/55505
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2018-05-17 16:20:06 +00:00
Konstantin Shcheglov 62ffedefdd Rewrite writing types to using existing writeXYZ() methods.
Also extract code that ensures imports and writes prefixes into a
separate method.

R=brianwilkerson@google.com

Change-Id: Icd35af19435153bfaebd46f7611823e6a9830d20
Reviewed-on: https://dart-review.googlesource.com/55640
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-05-17 15:51:27 +00:00
Martin Kustermann e6fc78c87b Revert "Reland "[VM] Use IR for code in [CatchEntryInstr]s to populate captured exception/stacktrace variables""
This reverts commit 23b4a505ec.

Reason for revert: The language_2/custom_await_stack_trace_test started failing.

Original change's description:
> Reland "[VM] Use IR for code in [CatchEntryInstr]s to populate captured exception/stacktrace variables"
> 
> This fixes an issue when a program got loaded via dill, a function
> with a try-catch got optimized and the exception/stacktrace variables
> got captured.
> 
> Change-Id: Icb626965019b248afe3b72a6679c5049ea7b7b00
> Reviewed-on: https://dart-review.googlesource.com/55681
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
> Commit-Queue: Martin Kustermann <kustermann@google.com>

TBR=vegorov@google.com,kustermann@google.com

Change-Id: Ic825c1e3ed14c731da1d43aa6f27d37ed5d36b4c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/55720
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-05-17 15:13:50 +00:00
Dmitry Stefantsov d59745029a [fasta] Update expectation files after CL 50945
Change-Id: I639fe81e848bec4a3d8735f55750d59eb422763d
Reviewed-on: https://dart-review.googlesource.com/54246
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2018-05-17 14:27:46 +00:00
Dmitry Stefantsov 6fc4854e98 [fasta] Run instantiate-to-bound on functions
Change-Id: Icff76f2e8f309b6d96059839f05b3ec4cc61510d
Reviewed-on: https://dart-review.googlesource.com/50945
Reviewed-by: Peter von der Ahé <ahe@google.com>
2018-05-17 14:27:46 +00:00
Martin Kustermann 23b4a505ec Reland "[VM] Use IR for code in [CatchEntryInstr]s to populate captured exception/stacktrace variables"
This fixes an issue when a program got loaded via dill, a function
with a try-catch got optimized and the exception/stacktrace variables
got captured.

Change-Id: Icb626965019b248afe3b72a6679c5049ea7b7b00
Reviewed-on: https://dart-review.googlesource.com/55681
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-05-17 14:16:16 +00:00
Samir Jindel 23c8c4d101 [vm/kernel] Pass type variables through ActivationFrame for expression compilation.
Fixes https://github.com/dart-lang/sdk/issues/32376.

Change-Id: I37bbda2dbc6052925aa840865c62a170604c6cdd
Reviewed-on: https://dart-review.googlesource.com/44784
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-05-17 13:59:57 +00:00
Dan Rubel b827b70e89 Extract IdentifierContext.typeVariableContext into new subclass
Change-Id: Iae637b02ee517e06d4d04f1e0f0289d760750195
Reviewed-on: https://dart-review.googlesource.com/55600
Reviewed-by: Peter von der Ahé <ahe@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-05-17 13:39:36 +00:00
Dan Rubel b7659e6d03 Improve typedef declaration recovery
This CL improves typedef recovery and removes another call to parseType.

Change-Id: I55aca86fe08bb06b040f5ec3c54266fcf795dbb3
Reviewed-on: https://dart-review.googlesource.com/55540
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-05-17 13:39:36 +00:00
Brian Wilkerson 7c1ae73a21 Fix a Dart 2 runtime bug in BodyBuilder
Change-Id: Iea2acd59b7b6283a6144dd06e1cabc0c10521d35
Reviewed-on: https://dart-review.googlesource.com/55583
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-05-17 13:18:16 +00:00
Martin Kustermann 38cb4cbc0a [VM] Update status file to make hot-reload builders green
Change-Id: I2f2e66c4affe0f9737e5a14e05da45ad574e23e7
Reviewed-on: https://dart-review.googlesource.com/55685
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-05-17 12:17:59 +00:00
Martin Kustermann 1be81b4a96 [VM] Skip vm/dart/appjit_test on opt-counter builder
It is quite slow on those builders and causes timeouts.

Change-Id: I876bba2c8e0d4e06dd9dff94e421d35e3f0236d1
Reviewed-on: https://dart-review.googlesource.com/55684
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-05-17 11:53:33 +00:00
Alexander Thomas 4d22c0de58 [infra] Improve cycle time of dart2js builders
* Remove co19_2 from file sets for now.
* Skip extremely slow test.
* Remove redundant build target from test matrix.

#33150

Change-Id: Ib17d2e7438dc2ab473e751f1d79c617cbc26275d
Reviewed-on: https://dart-review.googlesource.com/55661
Reviewed-by: William Hesse <whesse@google.com>
Commit-Queue: Alexander Thomas <athom@google.com>
2018-05-17 10:21:23 +00:00
Peter von der Ahé 812189d3e7 Convert LargeIntAccessor to LargeIntAccessGenerator
Change-Id: I904562f31a5f03fb7dfdd8dac3db55b5085ed68a
Reviewed-on: https://dart-review.googlesource.com/55469
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
2018-05-17 08:45:05 +00:00
Peter von der Ahé 5e98c49606 Convert ReadOnlyAccessor to ReadOnlyAccessGenerator
Change-Id: If4ba17b46dbe366ff148f50f55df99d79f492fe0
Reviewed-on: https://dart-review.googlesource.com/55467
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-05-17 08:45:05 +00:00
Peter von der Ahé 17e284fbc2 Convert DeferredAccessor to DeferredAccessGenerator
Change-Id: I591895d94b051534c0151e30689d1798d803796d
Reviewed-on: https://dart-review.googlesource.com/55466
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2018-05-17 08:45:05 +00:00
Johnni Winther d5719cae62 Small cleanup in compiler.dart
Change-Id: I2b3d3ce5925d6c7078250ab3fdadfc3daef90d73
Reviewed-on: https://dart-review.googlesource.com/55462
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2018-05-17 08:40:03 +00:00
Johnni Winther 54173bf293 Move TypeMask cache to CommonMasks
Change-Id: I908046245f822079dab41421b868a8cc786c9745
Reviewed-on: https://dart-review.googlesource.com/55463
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2018-05-17 08:05:42 +00:00
Johnni Winther 78f348b3d5 Don't export types/masks.dart from types/types.dart
To make uses of TypeMask explicit in the imports.

Change-Id: I7c0c2377b65720394dcda217e5e68a4e3f9a4e9c
Reviewed-on: https://dart-review.googlesource.com/55421
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2018-05-17 08:05:42 +00:00
Johnni Winther d2d763411d Use AbstractValue in inference results.
Change-Id: I2a932abd2d8d3236b560721c9d5ec010271d2b85
Reviewed-on: https://dart-review.googlesource.com/55362
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2018-05-17 08:05:42 +00:00
Johnni Winther 1c0b52ccc0 Reapply "Cleanup after removing MirrorsData" with fix
Change-Id: I4083b06ed2ea8d9e8bdc9e884803f238adb564fb
Reviewed-on: https://dart-review.googlesource.com/55420
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2018-05-17 08:01:22 +00:00
Jens Johansen e491bc5d86 Allow to specify what dill file to initialize from
This CL updates the frontend_server to allow specifying what dill
file to initialize from.

Normally, it tries to initialize from the same dill file as is the
output. This is fine in many cases (e.g. flutter run always says it
should output to build/app.dill): The first time it compiles
everything, subsequent times (across restarts) it only recompiles
what's needed.

When running tests, however, the output is in a temporary directory,
so it doesn't work across restarts. The startup time for tests is
always rather high, because it always has to recompile everything.

This CL updates the frontend_server to allow specifying what dill
file to initialize from. Flutter can thus save the compiled test
file in a centralized location (e.g. build/test.dill) and load from
that across restarts.

Plumbing this into flutter yields the following result, when running
a single test (the one automatically created when creating a new
flutter project):

Before: ~5.5 seconds
Now, first run: ~5.5 second (unchanged)
Now, subsequent runs: ~3.4 seconds

Approximate breakdown:

Startup cost (e.g. if there's no test directory):        ~ 800 ms
Starting up the actual frontend server: ~150 ms
Reading source from old dill, loading all relevant files
and invalidating source:                                 ~ 300 ms
Compiling everything (or, rather, nothing as it's all
from the dill at this point):                            ~ 650 ms
Serializing:                                             ~ 250 ms
Copying files:                                           ~  50 ms
Running the actual test:                                 ~1100 ms

Total:                                                   ~3300 ms

`time flutter test --local-engine=host_debug --preview-dart-2`
says ~3.4 seconds...

To compare, --no-preview-dart-2 takes ~2.2 seconds,
so dart2 still has a (significantly) higher startup cost.

Moves the needle on https://github.com/flutter/flutter/issues/15767.

Change-Id: I36a2d05bc76e0193d369df42eb3b9f08416dd78f
Reviewed-on: https://dart-review.googlesource.com/51820
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-05-17 06:49:41 +00:00
Jens Johansen 8101ee0479 [kernel] Remove unused GlobalIndexer from ast_to_binary.dart
Change-Id: Ide2b8997d831f811fa278164a25139ea1fde0c5f
Reviewed-on: https://dart-review.googlesource.com/55460
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-05-17 06:03:02 +00:00