dart-sdk/sdk/lib
Jess Lally 5a4b252252 [dart2wasm] Replace struct.new_default with struct.new for object
allocation.

When using the `struct.new_default` instruction for object allocation,
fields are always nullable and mutable. By using the `struct.new`
instruction instead, class fields can now have the same mutability and
nullability in Wasm as declared in Dart. In addition, the class ID and
type parameters (which are also stored in an object's struct), can now
be immutable and nonnullable as well.

To do this, object construction is now split into three functions:
(1) Initializer: evaluates initializers for instance fields and
constructor initializers (this constructor before super constructor).
(2) Constructor body: executes the constructor body (super constructor
before this constructor), with `this` pointed to the constructed object.
(3) Constructor allocator: which calls (1), allocates the object using
`struct.new`, then calls (2).

Because fields now have the correct mutability and nullability in Wasm,
this removes unnecessary null checks for nonnullable fields, and may
allow for better optimisations by Binaryen.

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

Change-Id: Ib26046686f772a70509a870301217e9b1c91b77e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/315820
Commit-Queue: Jess Lally <jessicalally@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
2023-09-07 09:52:57 +00:00
..
_http [standalone, io] Don't register service extensions in product mode. 2023-08-30 21:46:17 +00:00
_internal [dart2wasm] Replace struct.new_default with struct.new for object 2023-09-07 09:52:57 +00:00
_wasm [dart2wasm] Support initial value and literals for Wasm object arrays 2023-09-07 05:29:30 +00:00
async [vm] Treat Future.then(..., onError:...) as catch all handler 2023-08-31 11:47:54 +00:00
cli Add library doc comment to dart:cli 2021-10-28 10:23:50 +00:00
collection [lib] Improve IndexedIterable performance on VM 2023-09-06 14:09:11 +00:00
convert Make utf8.encode() have Uint8List return type 2023-07-11 08:54:33 +00:00
core Remove duplicate doc in Uri.encodeQueryComponent() 2023-08-08 18:11:51 +00:00
developer [vm/compiler] Tag non-ffi force-optimized functions idempotent. 2023-08-18 18:27:58 +00:00
ffi [vm/ffi] Closure callbacks for sync callbacks 2023-08-25 03:35:44 +00:00
html [dart:html] Fix incorrect parameter mention in drawImageScaledFromSource docs 2023-08-23 00:25:29 +00:00
indexed_db/dart2js Tighten introductory text 2023-05-16 13:55:23 +00:00
internal [lib] Improve IndexedIterable performance on VM 2023-09-06 14:09:11 +00:00
io [standalone, io] Don't register service extensions in product mode. 2023-08-30 21:46:17 +00:00
isolate Mark packageConfigSync and resolvePackageUriSync as released in 3.2 2023-08-22 08:05:19 +00:00
js Reland "[pkg:js/dart:js_interop] Move annotations to dart:_js_annotations" 2023-05-02 15:24:18 +00:00
js_interop [dart:js_interop] Add JS types for Symbol/BigInt 2023-08-21 21:54:15 +00:00
js_interop_unsafe [dart:js_interop] Expose dart:js_interop through dart.dev 2023-05-04 17:41:53 +00:00
js_util [js_util] Make callMethod take an Object method. 2023-03-23 00:23:00 +00:00
math Adding class modifiers to dart:math. 2023-03-13 14:01:26 +00:00
mirrors [sdk docs] update sdk libraries to use triple slash docs 2023-03-14 19:10:25 +00:00
svg/dart2js [sdk docs] update sdk libraries to use triple slash docs 2023-03-14 19:10:25 +00:00
typed_data [flip-modifiers]: Reapply "Enforce current library restrictions." 2023-03-03 09:37:38 +00:00
vmservice Make Iterable be the default implementation of itself. 2023-04-04 21:45:19 +00:00
web_audio/dart2js [sdk docs] update sdk libraries to use triple slash docs 2023-03-14 19:10:25 +00:00
web_gl/dart2js [sdk docs] update sdk libraries to use triple slash docs 2023-03-14 19:10:25 +00:00
web_sql/dart2js [sdk docs] update sdk libraries to use triple slash docs 2023-03-14 19:10:25 +00:00
analysis_options.yaml [vm/ffi] Support varargs 2023-01-20 10:30:41 +00:00
libraries.json [dart2wasm] Make implementation libraries part of core to hide internals 2023-08-14 11:09:10 +00:00
libraries.yaml [dart2wasm] Make implementation libraries part of core to hide internals 2023-08-14 11:09:10 +00:00
PRESUBMIT.py [sdk/lib] Better presubmit check for libraries.{json,yaml} 2022-01-10 08:26:20 +00:00
vmservice_libraries.json [Core Libraries] Eliminate the fork in the core libraries. 2020-06-16 23:37:36 +00:00
vmservice_libraries.yaml update the tooling to generate libraries.json from libraries.yaml 2021-07-27 23:02:50 +00:00