Version 2.11.0-209.0.dev
Merge commit 'e9aa232066472941a0cb309c5d958c14435c42cb' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 3137119..f280248 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
"constraint, update this by running tools/generate_package_config.dart."
],
"configVersion": 2,
- "generated": "2020-09-18T09:56:27.880444",
+ "generated": "2020-10-09T10:15:45.502457",
"generator": "tools/generate_package_config.dart",
"packages": [
{
@@ -136,7 +136,7 @@
"name": "build_integration",
"rootUri": "../pkg/build_integration",
"packageUri": "lib/",
- "languageVersion": "2.0"
+ "languageVersion": "2.1"
},
{
"name": "charcode",
@@ -178,7 +178,7 @@
"name": "csslib",
"rootUri": "../third_party/pkg/csslib",
"packageUri": "lib/",
- "languageVersion": "2.10"
+ "languageVersion": "2.11"
},
{
"name": "dart2js_info",
@@ -207,7 +207,8 @@
{
"name": "dart_style",
"rootUri": "../third_party/pkg_tested/dart_style",
- "packageUri": "lib/"
+ "packageUri": "lib/",
+ "languageVersion": "2.9"
},
{
"name": "dartdev",
@@ -219,7 +220,7 @@
"name": "dartdoc",
"rootUri": "../third_party/pkg/dartdoc",
"packageUri": "lib/",
- "languageVersion": "2.7"
+ "languageVersion": "2.10"
},
{
"name": "dartfix",
@@ -493,7 +494,8 @@
{
"name": "pub",
"rootUri": "../third_party/pkg/pub",
- "packageUri": "lib/"
+ "packageUri": "lib/",
+ "languageVersion": "2.9"
},
{
"name": "pub_semver",
diff --git a/pkg/_fe_analyzer_shared/lib/src/testing/features.dart b/pkg/_fe_analyzer_shared/lib/src/testing/features.dart
index 7725a34..79072a1 100644
--- a/pkg/_fe_analyzer_shared/lib/src/testing/features.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/testing/features.dart
@@ -9,6 +9,25 @@
Map<String, Object> _features = {};
Set<String> _unsorted = new Set<String>();
+ Features();
+
+ /// Creates a [Features] registering each key in [featuresMap] as a features
+ /// with the corresponding value(s) in the map. Note: values are expected to
+ /// be either a single `String` value or a `List<String>`.
+ factory Features.fromMap(Map<String, dynamic> featuresMap) {
+ Features features = new Features();
+ featuresMap.forEach((key, value) {
+ if (value is List) {
+ for (dynamic v in value) {
+ features.addElement(key, v);
+ }
+ } else {
+ features.add(key, value: value);
+ }
+ });
+ return features;
+ }
+
/// Mark the feature [key] as existing. If [value] is provided, the feature
/// [key] is set to have this value.
void add(String key, {var value: ''}) {
diff --git a/pkg/compiler/test/deferred_loading/data/basic_deferred/lib.dart b/pkg/compiler/test/deferred_loading/data/basic_deferred/lib.dart
index 3120bea..88ba170 100644
--- a/pkg/compiler/test/deferred_loading/data/basic_deferred/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/basic_deferred/lib.dart
@@ -4,12 +4,12 @@
// @dart = 2.7
-/*member: defaultArg:OutputUnit(1, {lib})*/
+/*member: defaultArg:member_unit=1{lib}*/
defaultArg() => "";
/*member: funky:
- OutputUnit(1, {lib}),
- constants=[FunctionConstant(defaultArg)=OutputUnit(1, {lib})]
+ constants=[FunctionConstant(defaultArg)=1{lib}],
+ member_unit=1{lib}
*/
funky([x = defaultArg]) => x();
diff --git a/pkg/compiler/test/deferred_loading/data/basic_deferred/main.dart b/pkg/compiler/test/deferred_loading/data/basic_deferred/main.dart
index 11d445d..ca84a9f 100644
--- a/pkg/compiler/test/deferred_loading/data/basic_deferred/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/basic_deferred/main.dart
@@ -7,9 +7,9 @@
import 'lib.dart' deferred as lib;
/*member: main:
- OutputUnit(main, {}),
- constants=[FunctionConstant(funky)=OutputUnit(1, {lib})]
+ constants=[FunctionConstant(funky)=1{lib}],
+ member_unit=main{}
*/
-main() => lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+main() => lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
(lib.funky)();
});
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_class/lib.dart b/pkg/compiler/test/deferred_loading/data/deferred_class/lib.dart
index faac240..f41bc37 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_class/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_class/lib.dart
@@ -8,12 +8,15 @@
library deferred_class_library;
-/*class: MyClass:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: MyClass:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class MyClass {
- /*member: MyClass.:OutputUnit(1, {lib})*/
+ /*member: MyClass.:member_unit=1{lib}*/
const MyClass();
- /*member: MyClass.foo:OutputUnit(1, {lib})*/
+ /*member: MyClass.foo:member_unit=1{lib}*/
foo(x) {
print('MyClass.foo($x)');
return (x - 3) ~/ 2;
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_class/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_class/main.dart
index 90fd81f..bb45d8c 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_class/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_class/main.dart
@@ -6,9 +6,9 @@
import 'lib.dart' deferred as lib;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
return new lib.MyClass().foo(87);
});
}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant1/lib3.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant1/lib3.dart
index 5d63ed2..8351313 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant1/lib3.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant1/lib3.dart
@@ -6,9 +6,12 @@
library deferred_constants1_lib3;
-/*class: C:OutputUnit(main, {}), type=OutputUnit(main, {})*/
+/*class: C:
+ class_unit=main{},
+ type_unit=main{}
+*/
class C {
- /*member: C.value:OutputUnit(main, {})*/
+ /*member: C.value:member_unit=main{}*/
final value;
const C(this.value);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant1/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant1/main.dart
index 0f40d1c..5a1c77d 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant1/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant1/main.dart
@@ -8,18 +8,18 @@
import 'lib2.dart' deferred as lib2;
/*member: main:
- OutputUnit(main, {}),
constants=[
- ConstructedConstant(C(value=ConstructedConstant(C(value=IntConstant(7)))))=OutputUnit(1, {lib2}),
- ConstructedConstant(C(value=IntConstant(1)))=OutputUnit(main, {}),
- ConstructedConstant(C(value=IntConstant(2)))=OutputUnit(1, {lib2}),
- ConstructedConstant(C(value=IntConstant(4)))=OutputUnit(main, {}),
- ConstructedConstant(C(value=IntConstant(5)))=OutputUnit(main, {})]
+ ConstructedConstant(C(value=ConstructedConstant(C(value=IntConstant(7)))))=1{lib2},
+ ConstructedConstant(C(value=IntConstant(1)))=main{},
+ ConstructedConstant(C(value=IntConstant(2)))=1{lib2},
+ ConstructedConstant(C(value=IntConstant(4)))=main{},
+ ConstructedConstant(C(value=IntConstant(5)))=main{}],
+ member_unit=main{}
*/
main() async {
C1.value;
print(const C(4));
- /*OutputUnit(main, {})*/ () => print(const C(5));
+ /*closure_unit=main{}*/ () => print(const C(5));
await lib2.loadLibrary();
print(lib2.C2.value);
print(lib2.C3.value);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant2/lib.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant2/lib.dart
index 9d06cea..da8377c 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant2/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant2/lib.dart
@@ -6,18 +6,21 @@
library deferred_constants2_lib;
-/*class: Constant:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: Constant:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class Constant {
- /*member: Constant.value:OutputUnit(1, {lib})*/
+ /*member: Constant.value:member_unit=1{lib}*/
final value;
const Constant(this.value);
- /*member: Constant.==:OutputUnit(1, {lib})*/
+ /*member: Constant.==:member_unit=1{lib}*/
@override
operator ==(other) => other is Constant && value == other.value;
- /*member: Constant.hashCode:OutputUnit(1, {lib})*/
+ /*member: Constant.hashCode:member_unit=1{lib}*/
@override
get hashCode => 0;
}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant2/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant2/main.dart
index a35addc..71a715b 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant2/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant2/main.dart
@@ -9,12 +9,11 @@
import 'lib.dart' deferred as lib;
/*member: main:
- OutputUnit(main, {}),
- constants=[
- ConstructedConstant(Constant(value=IntConstant(499)))=OutputUnit(1, {lib})]
+ constants=[ConstructedConstant(Constant(value=IntConstant(499)))=1{lib}],
+ member_unit=main{}
*/
main() {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
Expect.equals(499, lib.C1.value);
});
}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart
index 061d9d1..54f922e 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib1.dart
@@ -12,12 +12,12 @@
const c3 = const C(3);
/*member: m1:
- OutputUnit(1, {l1}),
constants=[
- ConstructedConstant(C(x=IntConstant(1)))=OutputUnit(main, {}),
- ConstructedConstant(C(x=IntConstant(2)))=OutputUnit(1, {l1}),
- ConstructedConstant(C(x=IntConstant(3)))=OutputUnit(1, {l1}),
- ConstructedConstant(C(x=IntConstant(4)))=OutputUnit(2, {l2})]
+ ConstructedConstant(C(x=IntConstant(1)))=main{},
+ ConstructedConstant(C(x=IntConstant(2)))=1{l1},
+ ConstructedConstant(C(x=IntConstant(3)))=1{l1},
+ ConstructedConstant(C(x=IntConstant(4)))=2{l2}],
+ member_unit=1{l1}
*/
m1() async {
print(c2);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart
index 71db665..51392c1 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant3/lib2.dart
@@ -13,11 +13,11 @@
const c5 = const C(5);
/*member: m2:
- OutputUnit(2, {l2}),
constants=[
- ConstructedConstant(C(x=IntConstant(1)))=OutputUnit(main, {}),
- ConstructedConstant(C(x=IntConstant(4)))=OutputUnit(2, {l2}),
- ConstructedConstant(C(x=IntConstant(5)))=OutputUnit(2, {l2})]
+ ConstructedConstant(C(x=IntConstant(1)))=main{},
+ ConstructedConstant(C(x=IntConstant(4)))=2{l2},
+ ConstructedConstant(C(x=IntConstant(5)))=2{l2}],
+ member_unit=2{l2}
*/
m2() async {
print(c3);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart
index da731a5..5bc723e 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant3/main.dart
@@ -10,10 +10,10 @@
const c1 = const C(1);
/*member: main:
- OutputUnit(main, {}),
constants=[
- ConstructedConstant(C(x=IntConstant(1)))=OutputUnit(main, {}),
- ConstructedConstant(C(x=IntConstant(2)))=OutputUnit(1, {l1})]
+ ConstructedConstant(C(x=IntConstant(1)))=main{},
+ ConstructedConstant(C(x=IntConstant(2)))=1{l1}],
+ member_unit=main{}
*/
main() async {
print(c1.x);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_constant3/shared.dart b/pkg/compiler/test/deferred_loading/data/deferred_constant3/shared.dart
index 57c860b..60a3657 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_constant3/shared.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_constant3/shared.dart
@@ -4,10 +4,13 @@
// @dart = 2.7
-/*class: C:OutputUnit(main, {}), type=OutputUnit(main, {})*/
+/*class: C:
+ class_unit=main{},
+ type_unit=main{}
+*/
class C {
const C(this.x);
- /*member: C.x:OutputUnit(main, {})*/
+ /*member: C.x:member_unit=main{}*/
final x;
}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/lib.dart b/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/lib.dart
index 8cab462..c26bea6 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/lib.dart
@@ -4,7 +4,7 @@
// @dart = 2.7
-/*member: foo:OutputUnit(1, {lib})*/
+/*member: foo:member_unit=1{lib}*/
foo() {
return "loaded";
}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/main.dart
index 67201ca..167b145 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_fail_and_retry/main.dart
@@ -11,7 +11,7 @@
import "package:async_helper/async_helper.dart";
import "dart:js" as js;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() {
// We patch document.body.appendChild to change the script src on first
// invocation.
@@ -36,14 +36,14 @@
]);
asyncStart();
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
Expect.fail("Library should not have loaded");
- }, onError: /*OutputUnit(main, {})*/ (error) {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ }, onError: /*closure_unit=main{}*/ (error) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
Expect.equals("loaded", lib.foo());
- }, onError: /*OutputUnit(main, {})*/ (error) {
+ }, onError: /*closure_unit=main{}*/ (error) {
Expect.fail("Library should have loaded this time");
- }).whenComplete(/*OutputUnit(main, {})*/ () {
+ }).whenComplete(/*closure_unit=main{}*/ () {
asyncEnd();
});
});
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_function/lib.dart b/pkg/compiler/test/deferred_loading/data/deferred_function/lib.dart
index 8406ca6..efaf766 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_function/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_function/lib.dart
@@ -8,7 +8,7 @@
library deferred_function_library;
-/*member: foo:OutputUnit(1, {lib})*/
+/*member: foo:member_unit=1{lib}*/
foo(x) {
print('foo($x)');
return 42;
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_function/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_function/main.dart
index cf774ed..3c99316 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_function/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_function/main.dart
@@ -10,16 +10,16 @@
import 'lib.dart' deferred as lib;
/*member: readFoo:
- OutputUnit(main, {}),
- constants=[FunctionConstant(foo)=OutputUnit(1, {lib})]
+ constants=[FunctionConstant(foo)=1{lib}],
+ member_unit=main{}
*/
readFoo() {
return lib.foo;
}
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
lib.foo('b');
readFoo();
});
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
index a4170a9..55ced68 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
@@ -4,6 +4,9 @@
// @dart = 2.7
-/*class: C3:OutputUnit(1, {lib1, lib2}), type=OutputUnit(1, {lib1, lib2})*/
-/*member: C3.:OutputUnit(1, {lib1, lib2})*/
+/*class: C3:
+ class_unit=1{lib1, lib2},
+ type_unit=1{lib1, lib2}
+*/
+/*member: C3.:member_unit=1{lib1, lib2}*/
class C3 {}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart
index 1f1586c..ca698b0 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib1.dart
@@ -6,6 +6,9 @@
import "deferred_overlapping_lib3.dart";
-/*class: C1:OutputUnit(2, {lib1}), type=OutputUnit(2, {lib1})*/
-/*member: C1.:OutputUnit(2, {lib1})*/
+/*class: C1:
+ class_unit=2{lib1},
+ type_unit=2{lib1}
+*/
+/*member: C1.:member_unit=2{lib1}*/
class C1 extends C3 {}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib2.dart b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib2.dart
index 748d2cd..449b2c4 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/lib2.dart
@@ -6,6 +6,9 @@
import "deferred_overlapping_lib3.dart";
-/*class: C2:OutputUnit(3, {lib2}), type=OutputUnit(3, {lib2})*/
-/*member: C2.:OutputUnit(3, {lib2})*/
+/*class: C2:
+ class_unit=3{lib2},
+ type_unit=3{lib2}
+*/
+/*member: C2.:member_unit=3{lib2}*/
class C2 extends C3 {}
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart
index b766437..782e177 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_overlapping/main.dart
@@ -8,11 +8,11 @@
import 'lib2.dart' deferred as lib2;
// lib1.C1 and lib2.C2 has a shared base class. It will go in its own hunk.
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
void main() {
- lib1.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
new lib1.C1();
- lib2.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib2.loadLibrary().then(/*closure_unit=main{}*/ (_) {
new lib2.C2();
});
});
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_typed_map/lib1.dart b/pkg/compiler/test/deferred_loading/data/deferred_typed_map/lib1.dart
index 0c7ae5a..d59813b 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_typed_map/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_typed_map/lib1.dart
@@ -4,15 +4,18 @@
// @dart = 2.7
-/*class: M:none, type=OutputUnit(1, {lib})*/
+/*class: M:
+ class_unit=none,
+ type_unit=1{lib}
+*/
class M {}
typedef dynamic FF({M b});
const table = const <int, FF>{1: f1, 2: f2};
-/*member: f1:OutputUnit(1, {lib})*/
+/*member: f1:member_unit=1{lib}*/
dynamic f1({M b}) => null;
-/*member: f2:OutputUnit(1, {lib})*/
+/*member: f2:member_unit=1{lib}*/
dynamic f2({M b}) => null;
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_typed_map/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_typed_map/main.dart
index 9150c50..20bb44c 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_typed_map/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_typed_map/main.dart
@@ -6,7 +6,10 @@
import 'lib1.dart' deferred as lib;
-/*member: main:OutputUnit(main, {}),constants=[MapConstant(<int*, dynamic Function({M* b})*>{IntConstant(1): FunctionConstant(f1), IntConstant(2): FunctionConstant(f2)})=OutputUnit(1, {lib})]*/
+/*member: main:
+ constants=[MapConstant(<int*, dynamic Function({M* b})*>{IntConstant(1): FunctionConstant(f1), IntConstant(2): FunctionConstant(f2)})=1{lib}],
+ member_unit=main{}
+*/
main() async {
await lib.loadLibrary();
print(lib.table[1]);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_typedef/lib1.dart b/pkg/compiler/test/deferred_loading/data/deferred_typedef/lib1.dart
index e1a6bb8..b3181b4 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_typedef/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_typedef/lib1.dart
@@ -6,12 +6,15 @@
library deferred_typedef_lib1;
-/*class: C:OutputUnit(1, {lib1}), type=OutputUnit(1, {lib1})*/
+/*class: C:
+ class_unit=1{lib1},
+ type_unit=1{lib1}
+*/
class C {
- /*member: C.a:OutputUnit(1, {lib1})*/
+ /*member: C.a:member_unit=1{lib1}*/
final a;
- /*member: C.b:OutputUnit(1, {lib1})*/
+ /*member: C.b:member_unit=1{lib1}*/
final b;
const C(this.a, this.b);
@@ -21,7 +24,7 @@
typedef void MyF2();
-/*member: topLevelMethod:OutputUnit(1, {lib1})*/
+/*member: topLevelMethod:member_unit=1{lib1}*/
topLevelMethod() {}
const cA = const C(MyF1, topLevelMethod);
diff --git a/pkg/compiler/test/deferred_loading/data/deferred_typedef/main.dart b/pkg/compiler/test/deferred_loading/data/deferred_typedef/main.dart
index a5bccc8..9c56b84 100644
--- a/pkg/compiler/test/deferred_loading/data/deferred_typedef/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/deferred_typedef/main.dart
@@ -6,7 +6,12 @@
import 'lib1.dart' deferred as lib1;
-/*member: main:OutputUnit(main, {}),constants=[ConstructedConstant(C(a=TypeConstant(void Function()),b=FunctionConstant(topLevelMethod)))=OutputUnit(1, {lib1}),TypeConstant(void Function())=OutputUnit(1, {lib1})]*/
+/*member: main:
+ constants=[
+ ConstructedConstant(C(a=TypeConstant(void Function()),b=FunctionConstant(topLevelMethod)))=1{lib1},
+ TypeConstant(void Function())=1{lib1}],
+ member_unit=main{}
+*/
main() async {
await lib1.loadLibrary();
print(lib1.cA);
diff --git a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart
index 2fcc514..f22f054 100644
--- a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart
+++ b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart
@@ -9,29 +9,32 @@
const c = "string3";
-/*class: C:OutputUnit(main, {}), type=OutputUnit(main, {})*/
+/*class: C:
+ class_unit=main{},
+ type_unit=main{}
+*/
class C {
- /*member: C.p:OutputUnit(main, {})*/
+ /*member: C.p:member_unit=main{}*/
final p;
const C(this.p);
}
-/*member: foo:OutputUnit(2, {lib1, lib2})*/
+/*member: foo:member_unit=2{lib1, lib2}*/
foo() => print("main");
/*member: main:
- OutputUnit(main, {}),
constants=[
- ConstructedConstant(C(p=IntConstant(1)))=OutputUnit(main, {}),
- ConstructedConstant(C(p=IntConstant(1010)))=OutputUnit(1, {lib1}),
- ConstructedConstant(C(p=IntConstant(2)))=OutputUnit(2, {lib1, lib2}),
- ConstructedConstant(C(p=StringConstant("string1")))=OutputUnit(1, {lib1}),
- ConstructedConstant(C(p=StringConstant("string2")))=OutputUnit(1, {lib1})]
+ ConstructedConstant(C(p=IntConstant(1)))=main{},
+ ConstructedConstant(C(p=IntConstant(1010)))=1{lib1},
+ ConstructedConstant(C(p=IntConstant(2)))=2{lib1, lib2},
+ ConstructedConstant(C(p=StringConstant("string1")))=1{lib1},
+ ConstructedConstant(C(p=StringConstant("string2")))=1{lib1}],
+ member_unit=main{}
*/
void main() {
- lib1.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
- lib2.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+ lib2.loadLibrary().then(/*closure_unit=main{}*/ (_) {
lib1.foo();
lib2.foo();
print(lib1.C1);
diff --git a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib1.dart b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib1.dart
index c017966..a147c36 100644
--- a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib1.dart
@@ -15,7 +15,10 @@
const C2b = const C(1010);
-/*class: D:none, type=none*/
+/*class: D:
+ class_unit=none,
+ type_unit=none
+*/
class D {
static const C3 = "string2";
@@ -28,7 +31,7 @@
const C6 = const C(2);
-/*member: foo:OutputUnit(1, {lib1})*/
+/*member: foo:member_unit=1{lib1}*/
foo() {
print("lib1");
main.foo();
diff --git a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib2.dart b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib2.dart
index cacae15..d421b89 100644
--- a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_constants/lib2.dart
@@ -13,7 +13,7 @@
const C6 = const C(2);
-/*member: foo:OutputUnit(3, {lib2})*/
+/*member: foo:member_unit=3{lib2}*/
foo() {
print("lib2");
main.foo();
diff --git a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/lib.dart b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/lib.dart
index 18fced0..ec89e79 100644
--- a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/lib.dart
@@ -4,8 +4,8 @@
// @dart = 2.7
-/*member: finalVar:OutputUnit(1, {lib})*/
+/*member: finalVar:member_unit=1{lib}*/
final finalVar = "string1";
-/*member: globalVar:OutputUnit(1, {lib})*/
+/*member: globalVar:member_unit=1{lib}*/
var globalVar = "string2";
diff --git a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/main.dart b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/main.dart
index 22cbcb4..3a45b3e 100644
--- a/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/dont_inline_deferred_global/main.dart
@@ -6,9 +6,9 @@
import 'lib.dart' deferred as lib;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
void main() {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
print(lib.finalVar);
print(lib.globalVar);
lib.globalVar = "foobar";
diff --git a/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/lib.dart b/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/lib.dart
index f305b51..ab4dc02 100644
--- a/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/lib.dart
@@ -4,93 +4,135 @@
// @dart = 2.7
-/*member: a:OutputUnit(1, {lib})*/
+/*member: a:member_unit=1{lib}*/
a() => print("123");
-/*member: b:OutputUnit(1, {lib})*/
+/*member: b:member_unit=1{lib}*/
b() => print("123");
-/*member: c:OutputUnit(1, {lib})*/
+/*member: c:member_unit=1{lib}*/
c() => print("123");
-/*member: d:OutputUnit(1, {lib})*/
+/*member: d:member_unit=1{lib}*/
d() => print("123");
-/*class: B:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: B:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class B {
- /*member: B.:OutputUnit(1, {lib})*/
+ /*member: B.:member_unit=1{lib}*/
B() {
b();
}
}
-/*class: B2:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: B2.:OutputUnit(1, {lib})*/
+/*class: B2:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: B2.:member_unit=1{lib}*/
class B2 extends B {
// No constructor creates a synthetic constructor that has an implicit
// super-call.
}
-/*class: A:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: A:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class A {
- /*member: A.:OutputUnit(1, {lib})*/
+ /*member: A.:member_unit=1{lib}*/
A() {
a();
}
}
-/*class: A2:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: A2:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class A2 extends A {
// Implicit super call.
- /*member: A2.:OutputUnit(1, {lib})*/
+ /*member: A2.:member_unit=1{lib}*/
A2();
}
-/*class: C1:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: C1:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class C1 {}
-/*class: C2:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: C2:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class C2 {
- /*member: C2.:OutputUnit(1, {lib})*/
+ /*member: C2.:member_unit=1{lib}*/
C2() {
c();
}
}
-/*class: C2p:none, type=none*/
+/*class: C2p:
+ class_unit=none,
+ type_unit=none
+*/
class C2p {
C2() {
c();
}
}
-/*class: C3:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: C3.:OutputUnit(1, {lib})*/
+/*class: C3:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: C3.:member_unit=1{lib}*/
class C3 extends C2 with C1 {
// Implicit redirecting "super" call via mixin.
}
-/*class: E:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: E:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class E {}
-/*class: F:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: F:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class F {}
-/*class: G:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: G.:OutputUnit(1, {lib})*/
+/*class: G:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: G.:member_unit=1{lib}*/
class G extends C3 with C1, E, F {}
-/*class: D1:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: D1:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class D1 {}
-/*class: D2:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: D2:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class D2 {
- /*member: D2.:OutputUnit(1, {lib})*/
+ /*member: D2.:member_unit=1{lib}*/
D2(x) {
d();
}
}
// Implicit redirecting "super" call with a parameter via mixin.
-/*class: D3:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
+/*class: D3:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
class D3 = D2 with D1;
diff --git a/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/main.dart b/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/main.dart
index fe41fa5..74cd88d 100644
--- a/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/follow_implicit_super_regression_test/main.dart
@@ -6,9 +6,9 @@
import "lib.dart" deferred as lib;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
void main() {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
new lib.A2();
new lib.B2();
new lib.C3();
diff --git a/pkg/compiler/test/deferred_loading/data/future_or/lib2.dart b/pkg/compiler/test/deferred_loading/data/future_or/lib2.dart
index d222767..aad0cf2 100644
--- a/pkg/compiler/test/deferred_loading/data/future_or/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/future_or/lib2.dart
@@ -4,10 +4,13 @@
// @dart = 2.7
-/*class: A:OutputUnit(1, {lib1}), type=OutputUnit(main, {})*/
+/*class: A:
+ class_unit=1{lib1},
+ type_unit=main{}
+*/
class A {
const A();
- /*member: A.method:OutputUnit(1, {lib1})*/
+ /*member: A.method:member_unit=1{lib1}*/
method() {}
}
diff --git a/pkg/compiler/test/deferred_loading/data/future_or/main.dart b/pkg/compiler/test/deferred_loading/data/future_or/main.dart
index ed02ff6..de44d54 100644
--- a/pkg/compiler/test/deferred_loading/data/future_or/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/future_or/main.dart
@@ -8,7 +8,10 @@
import 'lib1.dart' deferred as lib1;
import 'lib2.dart' as lib2;
-/*member: main:OutputUnit(main, {}),constants=[ConstructedConstant(A())=OutputUnit(1, {lib1})]*/
+/*member: main:
+ constants=[ConstructedConstant(A())=1{lib1}],
+ member_unit=main{}
+*/
main() async {
await lib1.loadLibrary();
lib1.field is FutureOr<lib2.A>;
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation0/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation0/lib1.dart
index 3904f05..59fba08 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation0/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation0/lib1.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(1, {b})*/
+/*member: getFoo:member_unit=1{b}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
/*member: m:
- OutputUnit(1, {b}),
- constants=[
- InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(1, {b})]
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=1{b}],
+ member_unit=1{b}
*/
m(int x, {G<int> f: getFoo}) {
print(f(x));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation0/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation0/main.dart
index 0b94d3a..5da17d9 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation0/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation0/main.dart
@@ -6,12 +6,12 @@
// Test instantiation used only in a deferred library.
-/*class: global#Instantiation:OutputUnit(1, {b}), type=OutputUnit(1, {b})*/
-/*class: global#Instantiation1:OutputUnit(1, {b}), type=OutputUnit(1, {b})*/
+/*class: global#Instantiation:class_unit=1{b},type_unit=1{b}*/
+/*class: global#Instantiation1:class_unit=1{b},type_unit=1{b}*/
import 'lib1.dart' deferred as b;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await b.loadLibrary();
print(b.m(3));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation1/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation1/lib1.dart
index 3904f05..59fba08 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation1/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation1/lib1.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(1, {b})*/
+/*member: getFoo:member_unit=1{b}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
/*member: m:
- OutputUnit(1, {b}),
- constants=[
- InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(1, {b})]
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=1{b}],
+ member_unit=1{b}
*/
m(int x, {G<int> f: getFoo}) {
print(f(x));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation1/lib2.dart b/pkg/compiler/test/deferred_loading/data/instantiation1/lib2.dart
index e0ae1fb..faddc09 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation1/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation1/lib2.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(3, {c})*/
+/*member: getFoo:member_unit=3{c}*/
T getFoo<T, S>(T v, S w) => v;
typedef dynamic G<T, S>(T v, S w);
/*member: m:
- OutputUnit(3, {c}),
- constants=[
- InstantiationConstant([int*, int*],FunctionConstant(getFoo))=OutputUnit(3, {c})]
+ constants=[InstantiationConstant([int*, int*],FunctionConstant(getFoo))=3{c}],
+ member_unit=3{c}
*/
m(int x, int y, {G<int, int> f: getFoo}) {
print(f(x, y));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation1/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation1/main.dart
index 2e0e4ef..ae2c5a7 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation1/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation1/main.dart
@@ -7,14 +7,14 @@
// Test instantiations with different type argument count used only in two
// deferred libraries.
-/*class: global#Instantiation:OutputUnit(2, {b, c}), type=OutputUnit(2, {b, c})*/
-/*class: global#Instantiation1:OutputUnit(1, {b}), type=OutputUnit(1, {b})*/
-/*class: global#Instantiation2:OutputUnit(3, {c}), type=OutputUnit(3, {c})*/
+/*class: global#Instantiation:class_unit=2{b, c},type_unit=2{b, c}*/
+/*class: global#Instantiation1:class_unit=1{b},type_unit=1{b}*/
+/*class: global#Instantiation2:class_unit=3{c},type_unit=3{c}*/
import 'lib1.dart' deferred as b;
import 'lib2.dart' deferred as c;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await b.loadLibrary();
await c.loadLibrary();
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart
index 75e44c2..50dde94 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation2/lib1.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(2, {b})*/
+/*member: getFoo:member_unit=2{b}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
/*member: m:
- OutputUnit(2, {b}),
- constants=[
- InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(2, {b})]
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=2{b}],
+ member_unit=2{b}
*/
m(int x, {G<int> f: getFoo}) {
print(f(x));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation2/lib2.dart b/pkg/compiler/test/deferred_loading/data/instantiation2/lib2.dart
index c81081d..c7537c6 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation2/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation2/lib2.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(3, {c})*/
+/*member: getFoo:member_unit=3{c}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
/*member: m:
- OutputUnit(3, {c}),
- constants=[
- InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(3, {c})]
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=3{c}],
+ member_unit=3{c}
*/
m(int x, {G<int> f: getFoo}) {
print(f(x));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart
index 70dc5f6..3ff8f46 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation2/main.dart
@@ -7,13 +7,13 @@
// Test instantiations with the same type argument count used only in two
// deferred libraries.
-/*class: global#Instantiation:OutputUnit(1, {b, c}), type=OutputUnit(1, {b, c})*/
-/*class: global#Instantiation1:OutputUnit(1, {b, c}), type=OutputUnit(1, {b, c})*/
+/*class: global#Instantiation:class_unit=1{b, c},type_unit=1{b, c}*/
+/*class: global#Instantiation1:class_unit=1{b, c},type_unit=1{b, c}*/
import 'lib1.dart' deferred as b;
import 'lib2.dart' deferred as c;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await b.loadLibrary();
await c.loadLibrary();
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation3/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation3/lib1.dart
index 843596b..a211ccb 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation3/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation3/lib1.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(1, {b})*/
+/*member: getFoo:member_unit=1{b}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
/*member: m:
- OutputUnit(1, {b}),
- constants=[
- InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(1, {b})]
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=1{b}],
+ member_unit=1{b}
*/
m(int x, {G<int> f}) {
f ??= getFoo;
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation3/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation3/main.dart
index 3cb4f5a..b0d3a8f 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation3/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation3/main.dart
@@ -6,14 +6,14 @@
// Test instantiation used only in a deferred library.
-/*class: global#Instantiation:OutputUnit(1, {b}), type=OutputUnit(1, {b})*/
-/*class: global#Instantiation1:OutputUnit(1, {b}), type=OutputUnit(1, {b})*/
+/*class: global#Instantiation:class_unit=1{b},type_unit=1{b}*/
+/*class: global#Instantiation1:class_unit=1{b},type_unit=1{b}*/
-/*member: global#instantiate1:OutputUnit(1, {b})*/
+/*member: global#instantiate1:member_unit=1{b}*/
import 'lib1.dart' deferred as b;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await b.loadLibrary();
print(b.m(3));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation4/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation4/lib1.dart
index 57e5118..a211ccb 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation4/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation4/lib1.dart
@@ -4,12 +4,15 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(1, {b})*/
+/*member: getFoo:member_unit=1{b}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
-/*member: m:OutputUnit(1, {b}),constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(1, {b})]*/
+/*member: m:
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=1{b}],
+ member_unit=1{b}
+*/
m(int x, {G<int> f}) {
f ??= getFoo;
print(f(x));
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation4/lib2.dart b/pkg/compiler/test/deferred_loading/data/instantiation4/lib2.dart
index 99d9dcd..ea8657c 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation4/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation4/lib2.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(3, {c})*/
+/*member: getFoo:member_unit=3{c}*/
T getFoo<T, S>(T v, S w) => v;
typedef dynamic G<T, S>(T v, S w);
/*member: m:
- OutputUnit(3, {c}),
- constants=[
- InstantiationConstant([int*, int*],FunctionConstant(getFoo))=OutputUnit(3, {c})]
+ constants=[InstantiationConstant([int*, int*],FunctionConstant(getFoo))=3{c}],
+ member_unit=3{c}
*/
m(int x, int y, {G<int, int> f}) {
f ??= getFoo;
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation4/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation4/main.dart
index 361d35a..34bf22a 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation4/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation4/main.dart
@@ -7,17 +7,17 @@
// Test instantiations with different type argument count used only in two
// deferred libraries.
-/*class: global#Instantiation:OutputUnit(2, {b, c}), type=OutputUnit(2, {b, c})*/
-/*class: global#Instantiation1:OutputUnit(1, {b}), type=OutputUnit(1, {b})*/
-/*class: global#Instantiation2:OutputUnit(3, {c}), type=OutputUnit(3, {c})*/
+/*class: global#Instantiation:class_unit=2{b, c},type_unit=2{b, c}*/
+/*class: global#Instantiation1:class_unit=1{b},type_unit=1{b}*/
+/*class: global#Instantiation2:class_unit=3{c},type_unit=3{c}*/
-/*member: global#instantiate1:OutputUnit(1, {b})*/
-/*member: global#instantiate2:OutputUnit(3, {c})*/
+/*member: global#instantiate1:member_unit=1{b}*/
+/*member: global#instantiate2:member_unit=3{c}*/
import 'lib1.dart' deferred as b;
import 'lib2.dart' deferred as c;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await b.loadLibrary();
await c.loadLibrary();
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart b/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart
index 562d112..506a6b3 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation5/lib1.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(2, {b})*/
+/*member: getFoo:member_unit=2{b}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
/*member: m:
- OutputUnit(2, {b}),
- constants=[
- InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(2, {b})]
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=2{b}],
+ member_unit=2{b}
*/
m(int x, {G<int> f}) {
f ??= getFoo;
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation5/lib2.dart b/pkg/compiler/test/deferred_loading/data/instantiation5/lib2.dart
index a2f7a32..8a5d498 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation5/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation5/lib2.dart
@@ -4,15 +4,14 @@
// @dart = 2.7
-/*member: getFoo:OutputUnit(3, {c})*/
+/*member: getFoo:member_unit=3{c}*/
T getFoo<T>(T v) => v;
typedef dynamic G<T>(T v);
/*member: m:
- OutputUnit(3, {c}),
- constants=[
- InstantiationConstant([int*],FunctionConstant(getFoo))=OutputUnit(3, {c})]
+ constants=[InstantiationConstant([int*],FunctionConstant(getFoo))=3{c}],
+ member_unit=3{c}
*/
m(int x, {G<int> f}) {
f ??= getFoo;
diff --git a/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart b/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart
index 9f270b1..5612525 100644
--- a/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/instantiation5/main.dart
@@ -7,15 +7,15 @@
// Test instantiations with the same type argument count used only in two
// deferred libraries.
-/*class: global#Instantiation:OutputUnit(1, {b, c}), type=OutputUnit(1, {b, c})*/
-/*class: global#Instantiation1:OutputUnit(1, {b, c}), type=OutputUnit(1, {b, c})*/
+/*class: global#Instantiation:class_unit=1{b, c},type_unit=1{b, c}*/
+/*class: global#Instantiation1:class_unit=1{b, c},type_unit=1{b, c}*/
-/*member: global#instantiate1:OutputUnit(1, {b, c})*/
+/*member: global#instantiate1:member_unit=1{b, c}*/
import 'lib1.dart' deferred as b;
import 'lib2.dart' deferred as c;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await b.loadLibrary();
await c.loadLibrary();
diff --git a/pkg/compiler/test/deferred_loading/data/inteface_type_variable/lib.dart b/pkg/compiler/test/deferred_loading/data/inteface_type_variable/lib.dart
index 95c9a26..d20e094 100644
--- a/pkg/compiler/test/deferred_loading/data/inteface_type_variable/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/inteface_type_variable/lib.dart
@@ -4,38 +4,62 @@
// @dart = 2.7
-/*class: A:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: A.:OutputUnit(1, {lib})*/
+/*class: A:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: A.:member_unit=1{lib}*/
class A {}
-/*class: I:none, type=OutputUnit(1, {lib})*/
+/*class: I:
+ class_unit=none,
+ type_unit=1{lib}
+*/
class I<T> {}
-/*class: J:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: J.:OutputUnit(1, {lib})*/
+/*class: J:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: J.:member_unit=1{lib}*/
class J<T> {}
// C needs to include "N", otherwise checking for `is I<A>` will likely cause
// problems
-/*class: C:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: C.:OutputUnit(1, {lib})*/
+/*class: C:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: C.:member_unit=1{lib}*/
class C extends A implements I<N> {}
-/*class: C1:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: C1.:OutputUnit(1, {lib})*/
+/*class: C1:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: C1.:member_unit=1{lib}*/
class C1 extends J<M> implements A {}
-/*class: C2:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: C2.:OutputUnit(1, {lib})*/
+/*class: C2:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: C2.:member_unit=1{lib}*/
class C2 extends J<M> implements I<N> {}
-/*class: N:none, type=OutputUnit(1, {lib})*/
+/*class: N:
+ class_unit=none,
+ type_unit=1{lib}
+*/
class N extends A {}
-/*class: M:none, type=OutputUnit(1, {lib})*/
+/*class: M:
+ class_unit=none,
+ type_unit=1{lib}
+*/
class M extends A {}
-/*member: doCheck1:OutputUnit(1, {lib})*/
+/*member: doCheck1:member_unit=1{lib}*/
doCheck1(x) => x is I<A>;
-/*member: doCheck2:OutputUnit(1, {lib})*/
+/*member: doCheck2:member_unit=1{lib}*/
doCheck2(x) => x is J<A>;
diff --git a/pkg/compiler/test/deferred_loading/data/inteface_type_variable/main.dart b/pkg/compiler/test/deferred_loading/data/inteface_type_variable/main.dart
index d9075e9..d4b10fb 100644
--- a/pkg/compiler/test/deferred_loading/data/inteface_type_variable/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/inteface_type_variable/main.dart
@@ -11,9 +11,9 @@
///
/// If not, we may include it in the main unit and may not see that the base
/// class is not added to the main unit.
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
lib.doCheck1(dontInline(new lib.C()));
lib.doCheck1(dontInline(new lib.C1()));
lib.doCheck1(dontInline(new lib.C2()));
@@ -24,5 +24,5 @@
}
@pragma('dart2js:noInline')
-/*member: dontInline:OutputUnit(main, {})*/
+/*member: dontInline:member_unit=main{}*/
dontInline(x) => x;
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart
index 3e9dbdf..4cd9f15 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/lib.dart
@@ -4,24 +4,27 @@
// @dart = 2.7
-/*class: Foo:OutputUnit(1, {libB}), type=OutputUnit(3, {libA, libB, libC})*/
+/*class: Foo:
+ class_unit=1{libB},
+ type_unit=3{libA, libB, libC}
+*/
class Foo {
- /*member: Foo.x:OutputUnit(1, {libB})*/
+ /*member: Foo.x:member_unit=1{libB}*/
int x;
- /*member: Foo.:OutputUnit(1, {libB})*/
+ /*member: Foo.:member_unit=1{libB}*/
Foo() {
x = DateTime.now().millisecond;
}
- /*member: Foo.method:OutputUnit(1, {libB})*/
+ /*member: Foo.method:member_unit=1{libB}*/
int method() => x;
}
-/*member: isFoo:OutputUnit(3, {libA, libB, libC})*/
+/*member: isFoo:member_unit=3{libA, libB, libC}*/
bool isFoo(o) {
return o is Foo;
}
-/*member: callFooMethod:OutputUnit(1, {libB})*/
+/*member: callFooMethod:member_unit=1{libB}*/
int callFooMethod() {
return Foo().method();
}
@@ -29,58 +32,94 @@
typedef int FunFoo(Foo a);
typedef int FunFunFoo(FunFoo b, int c);
-/*member: isFunFunFoo:OutputUnit(3, {libA, libB, libC})*/
+/*member: isFunFunFoo:member_unit=3{libA, libB, libC}*/
bool isFunFunFoo(o) {
return o is FunFunFoo;
}
-/*class: Aoo:none, type=OutputUnit(2, {libC})*/
+/*class: Aoo:
+ class_unit=none,
+ type_unit=2{libC}
+*/
class Aoo<T> {}
-/*class: Boo:OutputUnit(2, {libC}), type=OutputUnit(2, {libC})*/
+/*class: Boo:
+ class_unit=2{libC},
+ type_unit=2{libC}
+*/
class Boo<T> implements Aoo<T> {}
-/*class: Coo:OutputUnit(2, {libC}), type=OutputUnit(2, {libC})*/
-/*member: Coo.:OutputUnit(2, {libC})*/
+/*class: Coo:
+ class_unit=2{libC},
+ type_unit=2{libC}
+*/
+/*member: Coo.:member_unit=2{libC}*/
class Coo<T> {}
-/*class: Doo:OutputUnit(2, {libC}), type=OutputUnit(5, {libB, libC})*/
-/*member: Doo.:OutputUnit(2, {libC})*/
+/*class: Doo:
+ class_unit=2{libC},
+ type_unit=5{libB, libC}
+*/
+/*member: Doo.:member_unit=2{libC}*/
class Doo<T> extends Coo<T> with Boo<T> {}
-/*member: createDooFunFunFoo:OutputUnit(2, {libC})*/
+/*member: createDooFunFunFoo:member_unit=2{libC}*/
createDooFunFunFoo() => Doo<FunFunFoo>();
-/*class: B:OutputUnit(2, {libC}), type=OutputUnit(2, {libC})*/
-/*member: B.:OutputUnit(2, {libC})*/
+/*class: B:
+ class_unit=2{libC},
+ type_unit=2{libC}
+*/
+/*member: B.:member_unit=2{libC}*/
class B {}
-/*class: B2:OutputUnit(2, {libC}), type=OutputUnit(4, {libA, libC})*/
-/*member: B2.:OutputUnit(2, {libC})*/
+/*class: B2:
+ class_unit=2{libC},
+ type_unit=4{libA, libC}
+*/
+/*member: B2.:member_unit=2{libC}*/
class B2 extends B {}
-/*class: C1:OutputUnit(2, {libC}), type=OutputUnit(2, {libC})*/
+/*class: C1:
+ class_unit=2{libC},
+ type_unit=2{libC}
+*/
class C1 {}
-/*class: C2:OutputUnit(2, {libC}), type=OutputUnit(2, {libC})*/
-/*member: C2.:OutputUnit(2, {libC})*/
+/*class: C2:
+ class_unit=2{libC},
+ type_unit=2{libC}
+*/
+/*member: C2.:member_unit=2{libC}*/
class C2 {}
-/*class: C3:OutputUnit(2, {libC}), type=OutputUnit(4, {libA, libC})*/
-/*member: C3.:OutputUnit(2, {libC})*/
+/*class: C3:
+ class_unit=2{libC},
+ type_unit=4{libA, libC}
+*/
+/*member: C3.:member_unit=2{libC}*/
class C3 extends C2 with C1 {}
-/*class: D1:OutputUnit(2, {libC}), type=OutputUnit(2, {libC})*/
+/*class: D1:
+ class_unit=2{libC},
+ type_unit=2{libC}
+*/
class D1 {}
-/*class: D2:OutputUnit(2, {libC}), type=OutputUnit(2, {libC})*/
-/*member: D2.:OutputUnit(2, {libC})*/
+/*class: D2:
+ class_unit=2{libC},
+ type_unit=2{libC}
+*/
+/*member: D2.:member_unit=2{libC}*/
class D2 {}
-/*class: D3:OutputUnit(2, {libC}), type=OutputUnit(4, {libA, libC})*/
+/*class: D3:
+ class_unit=2{libC},
+ type_unit=4{libA, libC}
+*/
class D3 = D2 with D1;
-/*member: isMega:OutputUnit(6, {libA})*/
+/*member: isMega:member_unit=6{libA}*/
bool isMega(o) {
return o is B2 || o is C3 || o is D3;
}
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart
index 5601618..447ec58 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/liba.dart
@@ -6,11 +6,11 @@
import 'lib.dart' as lib;
-/*member: isFoo:OutputUnit(6, {libA})*/
+/*member: isFoo:member_unit=6{libA}*/
bool isFoo(o) => lib.isFoo(o);
-/*member: isFunFunFoo:OutputUnit(6, {libA})*/
+/*member: isFunFunFoo:member_unit=6{libA}*/
bool isFunFunFoo(o) => lib.isFunFunFoo(o);
-/*member: isMega:OutputUnit(6, {libA})*/
+/*member: isMega:member_unit=6{libA}*/
bool isMega(o) => lib.isMega(o);
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart
index 2b28333..20c2423 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/libb.dart
@@ -6,14 +6,14 @@
import 'lib.dart' as lib;
-/*member: callFooMethod:OutputUnit(1, {libB})*/
+/*member: callFooMethod:member_unit=1{libB}*/
int callFooMethod() => lib.callFooMethod();
-/*member: isFoo:OutputUnit(1, {libB})*/
+/*member: isFoo:member_unit=1{libB}*/
bool isFoo(o) => lib.isFoo(o);
-/*member: isFunFunFoo:OutputUnit(1, {libB})*/
+/*member: isFunFunFoo:member_unit=1{libB}*/
bool isFunFunFoo(o) => lib.isFunFunFoo(o);
-/*member: isDooFunFunFoo:OutputUnit(1, {libB})*/
+/*member: isDooFunFunFoo:member_unit=1{libB}*/
bool isDooFunFunFoo(o) => o is lib.Doo<lib.FunFunFoo>;
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart
index 8e9708b..ddc592e 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/libc.dart
@@ -6,20 +6,20 @@
import 'lib.dart' as lib;
-/*member: isFoo:OutputUnit(2, {libC})*/
+/*member: isFoo:member_unit=2{libC}*/
bool isFoo(o) => lib.isFoo(o);
-/*member: isFunFunFoo:OutputUnit(2, {libC})*/
+/*member: isFunFunFoo:member_unit=2{libC}*/
bool isFunFunFoo(o) => lib.isFunFunFoo(o);
-/*member: createB2:OutputUnit(2, {libC})*/
+/*member: createB2:member_unit=2{libC}*/
createB2() => new lib.B2();
-/*member: createC3:OutputUnit(2, {libC})*/
+/*member: createC3:member_unit=2{libC}*/
createC3() => new lib.C3();
-/*member: createD3:OutputUnit(2, {libC})*/
+/*member: createD3:member_unit=2{libC}*/
createD3() => new lib.D3();
-/*member: createDooFunFunFoo:OutputUnit(2, {libC})*/
+/*member: createDooFunFunFoo:member_unit=2{libC}*/
createDooFunFunFoo() => lib.createDooFunFunFoo();
diff --git a/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart b/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart
index 541070c..ca9bb68 100644
--- a/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/lazy_types/main.dart
@@ -8,7 +8,23 @@
import 'libb.dart' deferred as libB;
import 'libc.dart' deferred as libC;
-/*member: foo:OutputUnit(main, {}),constants=[FunctionConstant(callFooMethod)=OutputUnit(1, {libB}),FunctionConstant(createB2)=OutputUnit(2, {libC}),FunctionConstant(createC3)=OutputUnit(2, {libC}),FunctionConstant(createD3)=OutputUnit(2, {libC}),FunctionConstant(createDooFunFunFoo)=OutputUnit(2, {libC}),FunctionConstant(isDooFunFunFoo)=OutputUnit(1, {libB}),FunctionConstant(isFoo)=OutputUnit(1, {libB}),FunctionConstant(isFoo)=OutputUnit(2, {libC}),FunctionConstant(isFoo)=OutputUnit(6, {libA}),FunctionConstant(isFunFunFoo)=OutputUnit(1, {libB}),FunctionConstant(isFunFunFoo)=OutputUnit(2, {libC}),FunctionConstant(isFunFunFoo)=OutputUnit(6, {libA}),FunctionConstant(isMega)=OutputUnit(6, {libA})]*/
+/*member: foo:
+ constants=[
+ FunctionConstant(callFooMethod)=1{libB},
+ FunctionConstant(createB2)=2{libC},
+ FunctionConstant(createC3)=2{libC},
+ FunctionConstant(createD3)=2{libC},
+ FunctionConstant(createDooFunFunFoo)=2{libC},
+ FunctionConstant(isDooFunFunFoo)=1{libB},
+ FunctionConstant(isFoo)=1{libB},
+ FunctionConstant(isFoo)=2{libC},
+ FunctionConstant(isFoo)=6{libA},
+ FunctionConstant(isFunFunFoo)=1{libB},
+ FunctionConstant(isFunFunFoo)=2{libC},
+ FunctionConstant(isFunFunFoo)=6{libA},
+ FunctionConstant(isMega)=6{libA}],
+ member_unit=main{}
+*/
void foo() async {
await libA.loadLibrary();
await libB.loadLibrary();
@@ -31,7 +47,7 @@
print((libC.createDooFunFunFoo)());
}
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() {
foo();
}
diff --git a/pkg/compiler/test/deferred_loading/data/regress_35311/lib.dart b/pkg/compiler/test/deferred_loading/data/regress_35311/lib.dart
index ee3d8b3..b7ecf26 100644
--- a/pkg/compiler/test/deferred_loading/data/regress_35311/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/regress_35311/lib.dart
@@ -2,12 +2,15 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*class: B:OutputUnit(1, {lib}), type=OutputUnit(main, {})*/
-/*member: B.:OutputUnit(1, {lib})*/
+/*class: B:
+ class_unit=1{lib},
+ type_unit=main{}
+*/
+/*member: B.:member_unit=1{lib}*/
class B {
- /*member: B.value:OutputUnit(1, {lib})*/
+ /*member: B.value:member_unit=1{lib}*/
B value = null;
}
-/*member: list:OutputUnit(1, {lib})*/
+/*member: list:member_unit=1{lib}*/
List<B> list = [];
diff --git a/pkg/compiler/test/deferred_loading/data/regress_35311/main.dart b/pkg/compiler/test/deferred_loading/data/regress_35311/main.dart
index 7b8802a..9489c7f 100644
--- a/pkg/compiler/test/deferred_loading/data/regress_35311/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/regress_35311/main.dart
@@ -4,19 +4,19 @@
import 'lib.dart' deferred as lib;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await lib.loadLibrary();
// inferred return-type in closures:
// lib.B f1() => lib.B(); // Compile time error(see tests/dart2js)
- var f2 = /*OutputUnit(main, {})*/ () =>
+ var f2 = /*closure_unit=main{}*/ () =>
lib.B(); // no compile error, but f1 has inferred type: () -> d.B
// inferred type-arguments
// lib.list = <lib.B>[]; // Compile time error(see tests/dart2js)
lib.list = []; // no error, but type parameter was injected here
lib.list = lib.list
- .map(/*OutputUnit(main, {})*/ (x) => x.value)
+ .map(/*closure_unit=main{}*/ (x) => x.value)
.toList(); // no Compile error, type parameter inferred on closure and map<T>.
}
diff --git a/pkg/compiler/test/deferred_loading/data/regress_43055/libb.dart b/pkg/compiler/test/deferred_loading/data/regress_43055/libb.dart
index b72819b..c88e3f0 100644
--- a/pkg/compiler/test/deferred_loading/data/regress_43055/libb.dart
+++ b/pkg/compiler/test/deferred_loading/data/regress_43055/libb.dart
@@ -6,6 +6,9 @@
import 'libc.dart';
-/*class: C1:OutputUnit(1, {libb}), type=OutputUnit(main, {})*/
-/*member: C1.:OutputUnit(1, {libb})*/
+/*class: C1:
+ class_unit=1{libb},
+ type_unit=main{}
+*/
+/*member: C1.:member_unit=1{libb}*/
class C1 extends C2 implements C3 {}
diff --git a/pkg/compiler/test/deferred_loading/data/regress_43055/libc.dart b/pkg/compiler/test/deferred_loading/data/regress_43055/libc.dart
index a1300e3..70f5c4b 100644
--- a/pkg/compiler/test/deferred_loading/data/regress_43055/libc.dart
+++ b/pkg/compiler/test/deferred_loading/data/regress_43055/libc.dart
@@ -4,9 +4,15 @@
// @dart = 2.7
-/*class: C2:OutputUnit(1, {libb}), type=OutputUnit(main, {})*/
-/*member: C2.:OutputUnit(1, {libb})*/
+/*class: C2:
+ class_unit=1{libb},
+ type_unit=main{}
+*/
+/*member: C2.:member_unit=1{libb}*/
class C2 {}
-/*class: C3:none, type=OutputUnit(main, {})*/
+/*class: C3:
+ class_unit=none,
+ type_unit=main{}
+*/
class C3 {}
diff --git a/pkg/compiler/test/deferred_loading/data/regress_43055/main.dart b/pkg/compiler/test/deferred_loading/data/regress_43055/main.dart
index f916de5..dfbc3c4 100644
--- a/pkg/compiler/test/deferred_loading/data/regress_43055/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/regress_43055/main.dart
@@ -6,9 +6,9 @@
import 'libb.dart' deferred as libb;
import 'libc.dart';
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
- var f = /*OutputUnit(main, {})*/ () => libb.C1();
+ var f = /*closure_unit=main{}*/ () => libb.C1();
print(f is C2 Function());
print(f is C3 Function());
await libb.loadLibrary();
diff --git a/pkg/compiler/test/deferred_loading/data/shared_constant/lib_a.dart b/pkg/compiler/test/deferred_loading/data/shared_constant/lib_a.dart
index 174c5a5..f4c32dc 100644
--- a/pkg/compiler/test/deferred_loading/data/shared_constant/lib_a.dart
+++ b/pkg/compiler/test/deferred_loading/data/shared_constant/lib_a.dart
@@ -7,8 +7,8 @@
import 'shared.dart' deferred as s1;
/*member: doA:
- OutputUnit(main, {}),
- constants=[ConstructedConstant(C())=OutputUnit(1, {s1, s2})]
+ constants=[ConstructedConstant(C())=1{s1, s2}],
+ member_unit=main{}
*/
doA() async {
await s1.loadLibrary();
diff --git a/pkg/compiler/test/deferred_loading/data/shared_constant/lib_b.dart b/pkg/compiler/test/deferred_loading/data/shared_constant/lib_b.dart
index 814bff6..5e0922c 100644
--- a/pkg/compiler/test/deferred_loading/data/shared_constant/lib_b.dart
+++ b/pkg/compiler/test/deferred_loading/data/shared_constant/lib_b.dart
@@ -7,8 +7,8 @@
import 'shared.dart' deferred as s2;
/*member: doB:
- OutputUnit(main, {}),
- constants=[ConstructedConstant(C())=OutputUnit(1, {s1, s2})]
+ constants=[ConstructedConstant(C())=1{s1, s2}],
+ member_unit=main{}
*/
doB() async {
await s2.loadLibrary();
diff --git a/pkg/compiler/test/deferred_loading/data/shared_constant/lib_c.dart b/pkg/compiler/test/deferred_loading/data/shared_constant/lib_c.dart
index 71f2233..3a8da8a 100644
--- a/pkg/compiler/test/deferred_loading/data/shared_constant/lib_c.dart
+++ b/pkg/compiler/test/deferred_loading/data/shared_constant/lib_c.dart
@@ -4,10 +4,13 @@
// @dart = 2.7
-/*class: C:OutputUnit(1, {s1, s2}), type=OutputUnit(1, {s1, s2})*/
+/*class: C:
+ class_unit=1{s1, s2},
+ type_unit=1{s1, s2}
+*/
class C {
const C();
- /*member: C.method:OutputUnit(1, {s1, s2})*/
+ /*member: C.method:member_unit=1{s1, s2}*/
method() => print("1");
}
diff --git a/pkg/compiler/test/deferred_loading/data/shared_constant/main.dart b/pkg/compiler/test/deferred_loading/data/shared_constant/main.dart
index 00dffbc..8337bc0 100644
--- a/pkg/compiler/test/deferred_loading/data/shared_constant/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/shared_constant/main.dart
@@ -13,7 +13,7 @@
import 'lib_a.dart';
import 'lib_b.dart';
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
(await doA()).method();
await doB();
diff --git a/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart b/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart
index ebec04b..18c2288 100644
--- a/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart
@@ -6,102 +6,123 @@
library lib1;
-/*class: ConstClass:OutputUnit(2, {lib1, lib2}), type=OutputUnit(2, {lib1, lib2})*/
+/*class: ConstClass:
+ class_unit=2{lib1, lib2},
+ type_unit=2{lib1, lib2}
+*/
class ConstClass {
- /*member: ConstClass.x:OutputUnit(2, {lib1, lib2})*/
+ /*member: ConstClass.x:member_unit=2{lib1, lib2}*/
final x;
const ConstClass(this.x);
}
/*member: x:
- OutputUnit(2, {lib1, lib2}),
- constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=OutputUnit(2, {lib1, lib2})]
+ constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=2{lib1, lib2}],
+ member_unit=2{lib1, lib2}
*/
var x = const ConstClass(const ConstClass(1));
-/*class: C:OutputUnit(1, {lib1}), type=OutputUnit(1, {lib1})*/
+/*class: C:
+ class_unit=1{lib1},
+ type_unit=1{lib1}
+*/
class C {
- /*member: C.foo:OutputUnit(3, {lib2})*/
+ /*member: C.foo:member_unit=3{lib2}*/
static foo() {
- /*OutputUnit(3, {lib2})*/ () {}(); // Hack to avoid inlining.
+ /*closure_unit=3{lib2}*/ () {}(); // Hack to avoid inlining.
return 1;
}
- /*member: C.:OutputUnit(1, {lib1})*/
+ /*member: C.:member_unit=1{lib1}*/
C();
- /*member: C.bar:OutputUnit(1, {lib1})*/
+ /*member: C.bar:member_unit=1{lib1}*/
bar() {
- /*OutputUnit(1, {lib1})*/ () {}(); // Hack to avoid inlining.
+ /*closure_unit=1{lib1}*/ () {}(); // Hack to avoid inlining.
return 1;
}
}
-/*class: C1:none, type=none*/
+/*class: C1:
+ class_unit=none,
+ type_unit=none
+*/
class C1 {
/*member: C1.foo:
- OutputUnit(3, {lib2}),
- constants=[MapConstant({})=OutputUnit(3, {lib2})]
+ constants=[MapConstant({})=3{lib2}],
+ member_unit=3{lib2}
*/
static var foo = const {};
var bar = const {};
}
-/*class: C2:OutputUnit(1, {lib1}), type=OutputUnit(1, {lib1})*/
+/*class: C2:
+ class_unit=1{lib1},
+ type_unit=1{lib1}
+*/
class C2 {
- /*member: C2.foo:OutputUnit(3, {lib2})*/
+ /*member: C2.foo:member_unit=3{lib2}*/
static var foo = new Map<int, int>.from({1: 2});
- /*member: C2.bar:OutputUnit(1, {lib1})*/
+ /*member: C2.bar:member_unit=1{lib1}*/
var bar = new Map<int, int>.from({1: 2});
- /*member: C2.:OutputUnit(1, {lib1})*/
+ /*member: C2.:member_unit=1{lib1}*/
C2();
}
-/*class: C3:OutputUnit(1, {lib1}), type=OutputUnit(1, {lib1})*/
+/*class: C3:
+ class_unit=1{lib1},
+ type_unit=1{lib1}
+*/
class C3 {
/*member: C3.foo:
- OutputUnit(3, {lib2}),
- constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=OutputUnit(2, {lib1, lib2})]
+ constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=2{lib1, lib2}],
+ member_unit=3{lib2}
*/
static final foo = const ConstClass(const ConstClass(1));
/*member: C3.bar:
- OutputUnit(1, {lib1}),
- constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=OutputUnit(2, {lib1, lib2})]
+ constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=2{lib1, lib2}],
+ member_unit=1{lib1}
*/
final bar = const ConstClass(const ConstClass(1));
- /*member: C3.:OutputUnit(1, {lib1})*/
+ /*member: C3.:member_unit=1{lib1}*/
C3();
}
-/*class: C4:OutputUnit(1, {lib1}), type=OutputUnit(1, {lib1})*/
+/*class: C4:
+ class_unit=1{lib1},
+ type_unit=1{lib1}
+*/
class C4 {
- /*member: C4.foo:OutputUnit(3, {lib2})*/
+ /*member: C4.foo:member_unit=3{lib2}*/
static final foo = new Map<ConstClass, ConstClass>.from({x: x});
- /*member: C4.bar:OutputUnit(1, {lib1})*/
+ /*member: C4.bar:member_unit=1{lib1}*/
final bar = new Map<ConstClass, ConstClass>.from({x: x});
- /*member: C4.:OutputUnit(1, {lib1})*/
+ /*member: C4.:member_unit=1{lib1}*/
C4();
}
-/*class: C5:OutputUnit(1, {lib1}), type=OutputUnit(1, {lib1})*/
+/*class: C5:
+ class_unit=1{lib1},
+ type_unit=1{lib1}
+*/
class C5 {
static const foo = const [
const {1: 3}
];
- /*member: C5.:OutputUnit(1, {lib1})*/
+ /*member: C5.:member_unit=1{lib1}*/
C5();
- /*member: C5.bar:OutputUnit(1, {lib1})*/
+ /*member: C5.bar:member_unit=1{lib1}*/
bar() {
- /*OutputUnit(1, {lib1})*/ () {}(); // Hack to avoid inlining.
+ /*closure_unit=1{lib1}*/ () {}(); // Hack to avoid inlining.
return 1;
}
}
diff --git a/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart b/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart
index 404e560..79c236c 100644
--- a/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart
@@ -10,10 +10,10 @@
import "lib1.dart";
/*member: foo:
- OutputUnit(3, {lib2}),
constants=[
- ListConstant(<Map<int*,int*>*>[MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})])=OutputUnit(3, {lib2}),
- MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})=OutputUnit(3, {lib2})]
+ ListConstant(<Map<int*,int*>*>[MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})])=3{lib2},
+ MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})=3{lib2}],
+ member_unit=3{lib2}
*/
foo() {
Expect.equals(1, C.foo());
diff --git a/pkg/compiler/test/deferred_loading/data/static_separate/main.dart b/pkg/compiler/test/deferred_loading/data/static_separate/main.dart
index eb82cbf..78918bf 100644
--- a/pkg/compiler/test/deferred_loading/data/static_separate/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/static_separate/main.dart
@@ -14,14 +14,14 @@
import 'lib1.dart' deferred as lib1;
import 'lib2.dart' deferred as lib2;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
void main() {
asyncStart();
- Expect.throws(/*OutputUnit(main, {})*/ () {
+ Expect.throws(/*closure_unit=main{}*/ () {
new lib1.C();
});
- lib1.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
- lib2.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib1.loadLibrary().then(/*closure_unit=main{}*/ (_) {
+ lib2.loadLibrary().then(/*closure_unit=main{}*/ (_) {
print("HERE");
Expect.equals(1, new lib1.C().bar());
var x = new lib1.C2();
diff --git a/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib1.dart b/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib1.dart
index 4ef7683..de7cb74 100644
--- a/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib1.dart
@@ -6,5 +6,5 @@
import 'lib2.dart';
-/*member: doCast:OutputUnit(main, {})*/
-doCast(List<dynamic> l) => l.cast<B>().map(/*OutputUnit(main, {})*/ (x) => 1);
+/*member: doCast:member_unit=main{}*/
+doCast(List<dynamic> l) => l.cast<B>().map(/*closure_unit=main{}*/ (x) => 1);
diff --git a/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib2.dart b/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib2.dart
index d6a1146..1a0b2fe 100644
--- a/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_argument_dependency/lib2.dart
@@ -4,14 +4,20 @@
// @dart = 2.7
-/*class: A:OutputUnit(1, {c}), type=OutputUnit(1, {c})*/
+/*class: A:
+ class_unit=1{c},
+ type_unit=1{c}
+*/
class A {
- /*member: A.:OutputUnit(1, {c})*/
+ /*member: A.:member_unit=1{c}*/
A();
}
-/*class: B:none, type=OutputUnit(main, {})*/
+/*class: B:
+ class_unit=none,
+ type_unit=main{}
+*/
class B extends A {}
-/*member: createA:OutputUnit(1, {c})*/
+/*member: createA:member_unit=1{c}*/
createA() => new A();
diff --git a/pkg/compiler/test/deferred_loading/data/type_argument_dependency/main.dart b/pkg/compiler/test/deferred_loading/data/type_argument_dependency/main.dart
index 70024a3..c279b65 100644
--- a/pkg/compiler/test/deferred_loading/data/type_argument_dependency/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_argument_dependency/main.dart
@@ -7,7 +7,7 @@
import 'lib1.dart';
import 'lib2.dart' deferred as c;
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() async {
await c.loadLibrary();
c.createA();
diff --git a/pkg/compiler/test/deferred_loading/data/type_arguments/lib1.dart b/pkg/compiler/test/deferred_loading/data/type_arguments/lib1.dart
index 1886af2..0d00710 100644
--- a/pkg/compiler/test/deferred_loading/data/type_arguments/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_arguments/lib1.dart
@@ -6,12 +6,18 @@
import 'lib3.dart';
-/*class: A:OutputUnit(1, {lib1}), type=OutputUnit(1, {lib1})*/
+/*class: A:
+ class_unit=1{lib1},
+ type_unit=1{lib1}
+*/
class A<T> {
const A();
}
-/*class: B:none, type=OutputUnit(1, {lib1})*/
+/*class: B:
+ class_unit=none,
+ type_unit=1{lib1}
+*/
class B {}
const dynamic field1 = const A<B>();
diff --git a/pkg/compiler/test/deferred_loading/data/type_arguments/lib2.dart b/pkg/compiler/test/deferred_loading/data/type_arguments/lib2.dart
index 3f18084..2e07747 100644
--- a/pkg/compiler/test/deferred_loading/data/type_arguments/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_arguments/lib2.dart
@@ -4,12 +4,18 @@
// @dart = 2.7
-/*class: C:OutputUnit(main, {}), type=OutputUnit(main, {})*/
+/*class: C:
+ class_unit=main{},
+ type_unit=main{}
+*/
class C<T> {
const C();
}
-/*class: D:none, type=OutputUnit(main, {})*/
+/*class: D:
+ class_unit=none,
+ type_unit=main{}
+*/
class D {}
const dynamic field = const C<D>();
diff --git a/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart b/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart
index 8e2f533..9b56057 100644
--- a/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_arguments/lib3.dart
@@ -4,12 +4,18 @@
// @dart = 2.7
-/*class: E:OutputUnit(2, {lib3}), type=OutputUnit(2, {lib3})*/
+/*class: E:
+ class_unit=2{lib3},
+ type_unit=2{lib3}
+*/
class E<T> {
const E();
}
-/*class: F:none, type=OutputUnit(3, {lib1, lib3})*/
+/*class: F:
+ class_unit=none,
+ type_unit=3{lib1, lib3}
+*/
class F {}
const dynamic field = const E<F>();
diff --git a/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart b/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart
index 2e5f732..dd5873b 100644
--- a/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/type_arguments/main.dart
@@ -8,7 +8,14 @@
import 'lib2.dart' as lib2;
import 'lib3.dart' deferred as lib3;
-/*member: main:OutputUnit(main, {}),constants=[ConstructedConstant(A<B*>())=OutputUnit(1, {lib1}),ConstructedConstant(A<F*>())=OutputUnit(1, {lib1}),ConstructedConstant(C<D*>())=OutputUnit(main, {}),ConstructedConstant(E<F*>())=OutputUnit(2, {lib3})]*/
+/*member: main:
+ constants=[
+ ConstructedConstant(A<B*>())=1{lib1},
+ ConstructedConstant(A<F*>())=1{lib1},
+ ConstructedConstant(C<D*>())=main{},
+ ConstructedConstant(E<F*>())=2{lib3}],
+ member_unit=main{}
+*/
main() async {
await lib1.loadLibrary();
lib1.field1;
diff --git a/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/lib.dart b/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/lib.dart
index 51880ac..62e44b1 100644
--- a/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/lib.dart
+++ b/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/lib.dart
@@ -7,26 +7,38 @@
// All of these types are considered instantiated because we create an instance
// of [C].
-/*class: A:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: A.:OutputUnit(1, {lib})*/
+/*class: A:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: A.:member_unit=1{lib}*/
class A {}
-/*class: Box:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: Box.:OutputUnit(1, {lib})*/
+/*class: Box:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: Box.:member_unit=1{lib}*/
class Box<T> {
- /*member: Box.value:OutputUnit(1, {lib})*/
+ /*member: Box.value:member_unit=1{lib}*/
int value;
}
-/*class: B:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: B.:OutputUnit(1, {lib})*/
+/*class: B:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: B.:member_unit=1{lib}*/
class B<T> extends A {
- /*member: B.box:OutputUnit(1, {lib})*/
+ /*member: B.box:member_unit=1{lib}*/
final box = new Box<T>();
}
-/*class: C:OutputUnit(1, {lib}), type=OutputUnit(1, {lib})*/
-/*member: C.:OutputUnit(1, {lib})*/
+/*class: C:
+ class_unit=1{lib},
+ type_unit=1{lib}
+*/
+/*member: C.:member_unit=1{lib}*/
class C extends B<N> {}
// N is not instantiated, but used as a type argument in C and indirectly in a
@@ -35,5 +47,8 @@
// to the main output unit. However, A is in the output unit of C so we fail
// when trying to finalize the declaration of N while loading the main output
// unit.
-/*class: N:none, type=OutputUnit(1, {lib})*/
+/*class: N:
+ class_unit=none,
+ type_unit=1{lib}
+*/
class N extends A {}
diff --git a/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/main.dart b/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/main.dart
index 0f072de..8b8ad89 100644
--- a/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/uninstantiated_type_variable/main.dart
@@ -11,13 +11,13 @@
///
/// If not, we may include it in the main unit and may not see that the base
/// class is not added to the main unit.
-/*member: main:OutputUnit(main, {})*/
+/*member: main:member_unit=main{}*/
main() {
- lib.loadLibrary().then(/*OutputUnit(main, {})*/ (_) {
+ lib.loadLibrary().then(/*closure_unit=main{}*/ (_) {
dontInline(new lib.C()).box.value;
});
}
@pragma('dart2js:noInline')
-/*member: dontInline:OutputUnit(main, {})*/
+/*member: dontInline:member_unit=main{}*/
dontInline(x) => x;
diff --git a/pkg/compiler/test/deferred_loading/deferred_loading_test.dart b/pkg/compiler/test/deferred_loading/deferred_loading_test.dart
index e2ad132..43f6ffa 100644
--- a/pkg/compiler/test/deferred_loading/deferred_loading_test.dart
+++ b/pkg/compiler/test/deferred_loading/deferred_loading_test.dart
@@ -5,6 +5,7 @@
// @dart = 2.7
import 'dart:io' hide Link;
+import 'package:_fe_analyzer_shared/src/testing/features.dart';
import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/closure.dart';
import 'package:compiler/src/common.dart';
@@ -23,7 +24,7 @@
/// Add in options to pass to the compiler like
/// `Flags.disableTypeInference` or `Flags.disableInlining`
-const List<String> compilerOptions = const <String>[];
+const List<String> compilerOptions = const [];
/// Compute the [OutputUnit]s for all source files involved in the test, and
/// ensure that the compiler is correctly calculating what is used and what is
@@ -32,7 +33,7 @@
/// same name as the original file in `data`.
main(List<String> args) {
asyncTest(() async {
- Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
+ Directory dataDir = Directory.fromUri(Platform.script.resolve('data'));
await checkTests(dataDir, const OutputUnitDataComputer(),
options: compilerOptions, args: args, setUpFunction: () {
importPrefixes.clear();
@@ -44,13 +45,13 @@
// artificial constraint of requiring every deferred import use a different
// named prefix per test. We enforce this constraint here by checking that no
// prefix name responds to two different libraries.
-Map<String, Uri> importPrefixes = <String, Uri>{};
+Map<String, Uri> importPrefixes = {};
/// Create a consistent string representation of [OutputUnit]s for both
/// KImportEntities and ImportElements.
String outputUnitString(OutputUnit unit) {
if (unit == null) return 'none';
- StringBuffer sb = new StringBuffer();
+ StringBuffer sb = StringBuffer();
bool first = true;
for (ImportEntity import in unit.importsForTesting) {
if (!first) sb.write(', ');
@@ -72,10 +73,18 @@
}
importPrefixes[import.name] = import.enclosingLibraryUri;
}
- return 'OutputUnit(${unit.name}, {$sb})';
+ return '${unit.name}{$sb}';
}
-class OutputUnitDataComputer extends DataComputer<String> {
+class Tags {
+ static const String cls = 'class_unit';
+ static const String member = 'member_unit';
+ static const String closure = 'closure_unit';
+ static const String constants = 'constants';
+ static const String type = 'type_unit';
+}
+
+class OutputUnitDataComputer extends DataComputer<Features> {
const OutputUnitDataComputer();
/// OutputData for [member] as a kernel based element.
@@ -86,33 +95,34 @@
/// is.
@override
void computeMemberData(Compiler compiler, MemberEntity member,
- Map<Id, ActualData<String>> actualMap,
+ Map<Id, ActualData<Features>> actualMap,
{bool verbose: false}) {
JsClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
JsToElementMap elementMap = closedWorld.elementMap;
MemberDefinition definition = elementMap.getMemberDefinition(member);
- new OutputUnitIrComputer(compiler.reporter, actualMap, elementMap,
+ OutputUnitIrComputer(compiler.reporter, actualMap, elementMap,
closedWorld.outputUnitData, closedWorld.closureDataLookup)
.run(definition.node);
}
@override
- void computeClassData(
- Compiler compiler, ClassEntity cls, Map<Id, ActualData<String>> actualMap,
+ void computeClassData(Compiler compiler, ClassEntity cls,
+ Map<Id, ActualData<Features>> actualMap,
{bool verbose: false}) {
JsClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
JsToElementMap elementMap = closedWorld.elementMap;
ClassDefinition definition = elementMap.getClassDefinition(cls);
- new OutputUnitIrComputer(compiler.reporter, actualMap, elementMap,
+ OutputUnitIrComputer(compiler.reporter, actualMap, elementMap,
closedWorld.outputUnitData, closedWorld.closureDataLookup)
.computeForClass(definition.node);
}
@override
- DataInterpreter<String> get dataValidator => const StringDataInterpreter();
+ DataInterpreter<Features> get dataValidator =>
+ const FeaturesDataInterpreter();
}
-class OutputUnitIrComputer extends IrDataExtractor<String> {
+class OutputUnitIrComputer extends IrDataExtractor<Features> {
final JsToElementMap _elementMap;
final OutputUnitData _data;
final ClosureData _closureDataLookup;
@@ -121,34 +131,36 @@
OutputUnitIrComputer(
DiagnosticReporter reporter,
- Map<Id, ActualData<String>> actualMap,
+ Map<Id, ActualData<Features>> actualMap,
this._elementMap,
this._data,
this._closureDataLookup)
: super(reporter, actualMap);
- String getMemberValue(MemberEntity member, Set<String> constants) {
- StringBuffer sb = new StringBuffer();
- sb.write(outputUnitString(_data.outputUnitForMemberForTesting(member)));
- if (constants.isNotEmpty) {
- List<String> text = constants.toList()..sort();
- sb.write(',constants=[${text.join(',')}]');
+ Features getMemberValue(
+ String tag, MemberEntity member, Set<String> constants) {
+ Features features = Features();
+ features.add(tag,
+ value: outputUnitString(_data.outputUnitForMemberForTesting(member)));
+ for (var constant in constants) {
+ features.addElement(Tags.constants, constant);
}
- return sb.toString();
+ return features;
}
@override
- String computeClassValue(Id id, ir.Class node) {
+ Features computeClassValue(Id id, ir.Class node) {
var cls = _elementMap.getClass(node);
- StringBuffer sb = new StringBuffer();
- sb.write(outputUnitString(_data.outputUnitForClassForTesting(cls)));
- sb.write(', type=');
- sb.write(outputUnitString(_data.outputUnitForClassTypeForTesting(cls)));
- return sb.toString();
+ Features features = Features();
+ features.add(Tags.cls,
+ value: outputUnitString(_data.outputUnitForClassForTesting(cls)));
+ features.add(Tags.type,
+ value: outputUnitString(_data.outputUnitForClassTypeForTesting(cls)));
+ return features;
}
@override
- String computeMemberValue(Id id, ir.Member node) {
+ Features computeMemberValue(Id id, ir.Member node) {
if (node is ir.Field && node.isConst) {
ir.Expression initializer = node.initializer;
ConstantValue constant = _elementMap.getConstantValue(node, initializer);
@@ -160,11 +172,14 @@
// front of the constructor. The "-6" is an approximation assuming that
// there is just a single space after "const" and no prefix.
// TODO(sigmund): offsets should be fixed in the FE instead.
- span = new SourceSpan(span.uri, span.begin - 6, span.end - 6);
+ span = SourceSpan(span.uri, span.begin - 6, span.end - 6);
}
_registerValue(
- new NodeId(span.begin, IdKind.node),
- outputUnitString(_data.outputUnitForConstantForTesting(constant)),
+ NodeId(span.begin, IdKind.node),
+ Features.fromMap({
+ Tags.member: outputUnitString(
+ _data.outputUnitForConstantForTesting(constant))
+ }),
node,
span,
actualMap,
@@ -172,9 +187,10 @@
}
}
- String value = getMemberValue(_elementMap.getMember(node), _constants);
+ Features features =
+ getMemberValue(Tags.member, _elementMap.getMember(node), _constants);
_constants = {};
- return value;
+ return features;
}
@override
@@ -188,10 +204,10 @@
}
@override
- String computeNodeValue(Id id, ir.TreeNode node) {
+ Features computeNodeValue(Id id, ir.TreeNode node) {
if (node is ir.FunctionExpression || node is ir.FunctionDeclaration) {
ClosureRepresentationInfo info = _closureDataLookup.getClosureInfo(node);
- return getMemberValue(info.callMethod, const {});
+ return getMemberValue(Tags.closure, info.callMethod, const {});
}
return null;
}
@@ -215,6 +231,6 @@
}
if (value != null) {
actualMap[id] =
- new ActualData<T>(id, value, sourceSpan.uri, sourceSpan.begin, object);
+ ActualData<T>(id, value, sourceSpan.uri, sourceSpan.begin, object);
}
}
diff --git a/pkg/dartdev/lib/src/commands/analyze_impl.dart b/pkg/dartdev/lib/src/analysis_server.dart
similarity index 60%
rename from pkg/dartdev/lib/src/commands/analyze_impl.dart
rename to pkg/dartdev/lib/src/analysis_server.dart
index 3f315b8..907b5104 100644
--- a/pkg/dartdev/lib/src/commands/analyze_impl.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -10,49 +10,57 @@
show EditBulkFixesResult, ResponseDecoder;
import 'package:path/path.dart' as path;
-import '../core.dart';
-import '../sdk.dart';
-import '../utils.dart';
+import 'core.dart';
+import 'sdk.dart';
+import 'utils.dart';
/// A class to provide an API wrapper around an analysis server process.
class AnalysisServer {
- AnalysisServer(this.sdkPath, this.directories);
+ AnalysisServer(this.sdkPath, this.directory);
final Directory sdkPath;
- final List<Directory> directories;
+ final Directory directory;
Process _process;
- final StreamController<bool> _analyzingController =
- StreamController<bool>.broadcast();
- Completer<bool> _analysisFinished = Completer();
- final StreamController<EditBulkFixesResult> _bulkFixesController =
- StreamController<EditBulkFixesResult>.broadcast();
- final StreamController<FileAnalysisErrors> _errorsController =
- StreamController<FileAnalysisErrors>.broadcast();
- bool _didServerErrorOccur = false;
- final _shutdownRequestCompleter = Completer<void>();
+ Completer<bool> _analysisFinished = Completer();
int _id = 0;
- String _fixRequestId;
- String _shutdownRequestId;
-
- bool get didServerErrorOccur => _didServerErrorOccur;
-
- Stream<bool> get onAnalyzing => _analyzingController.stream;
+ Stream<bool> get onAnalyzing {
+ // {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
+ return _streamController('server.status')
+ .stream
+ .where((event) => event['analysis'] != null)
+ .map((event) => event['analysis']['isAnalyzing'] as bool);
+ }
/// This future completes when we next receive an analysis finished event
- /// (unless there's not current analysis and we've already received a complete
- /// event, in which case this future immediately completes).
+ /// (unless there's no current analysis and we've already received a complete
+ /// event, in which case this future completes immediately).
Future<bool> get analysisFinished => _analysisFinished.future;
- Stream<FileAnalysisErrors> get onErrors => _errorsController.stream;
-
- Stream<EditBulkFixesResult> get onBulkFixes => _bulkFixesController.stream;
+ Stream<FileAnalysisErrors> get onErrors {
+ // {"event":"analysis.errors","params":{"file":"/Users/.../lib/main.dart","errors":[]}}
+ return _streamController('analysis.errors').stream.map((event) {
+ final file = event['file'] as String;
+ final errorsList = event['errors'] as List<dynamic>;
+ final errors = errorsList
+ .map<Map<String, dynamic>>(castStringKeyedMap)
+ .map<AnalysisError>(
+ (Map<String, dynamic> json) => AnalysisError(json))
+ .toList();
+ return FileAnalysisErrors(file, errors);
+ });
+ }
Future<int> get onExit => _process.exitCode;
+ final Map<String, StreamController<Map<String, dynamic>>> _streamControllers =
+ {};
+
+ final Map<String, Completer<Map<String, dynamic>>> _requestCompleters = {};
+
Future<void> start() async {
final List<String> command = <String>[
sdk.analysisServerSnapshot,
@@ -77,7 +85,10 @@
.transform<String>(const LineSplitter());
inStream.listen(_handleServerResponse);
- _sendCommand('server.setSubscriptions', <String, dynamic>{
+ _streamController('server.error').stream.listen(_handleServerError);
+
+ // ignore: unawaited_futures
+ _sendCommand('server.setSubscriptions', params: <String, dynamic>{
'subscriptions': <String>['STATUS'],
});
@@ -85,10 +96,10 @@
// protocol throws an error (INVALID_FILE_PATH_FORMAT) if there is a
// trailing slash.
//
- // The call to absolute.resolveSymbolicLinksSync() canonicalizes the path
- // to be passed to the analysis server.
+ // The call to absolute.resolveSymbolicLinksSync() canonicalizes the path to
+ // be passed to the analysis server.
var dirPath = trimEnd(
- directories.single.absolute.resolveSymbolicLinksSync(),
+ directory.absolute.resolveSymbolicLinksSync(),
path.context.separator,
);
@@ -102,40 +113,53 @@
}
});
- _sendCommand('analysis.setAnalysisRoots', <String, dynamic>{
+ // ignore: unawaited_futures
+ _sendCommand('analysis.setAnalysisRoots', params: <String, dynamic>{
'included': [dirPath],
'excluded': <String>[]
});
}
- void requestBulkFixes(String filePath) {
- _sendCommand('edit.bulkFixes', <String, dynamic>{
+ Future<String> getVersion() {
+ return _sendCommand('server.getVersion')
+ .then((response) => response['version']);
+ }
+
+ Future<EditBulkFixesResult> requestBulkFixes(String filePath) {
+ return _sendCommand('edit.bulkFixes', params: <String, dynamic>{
'included': [path.canonicalize(filePath)],
+ }).then((result) {
+ return EditBulkFixesResult.fromJson(
+ ResponseDecoder(null), 'result', result);
});
- _fixRequestId = _id.toString();
}
- Future<void> shutdown({Duration timeLimit}) async {
- timeLimit ??= const Duration(seconds: 5);
- // Cleanup streams.
- await _closeStreamControllers();
-
+ Future<void> shutdown({Duration timeout = const Duration(seconds: 5)}) async {
// Request shutdown.
- _sendCommand('server.shutdown', null);
- _shutdownRequestId = _id.toString();
- await _shutdownRequestCompleter.future.timeout(timeLimit, onTimeout: () {
- _process?.kill();
+ await _sendCommand('server.shutdown').then((value) {
+ return null;
+ }).timeout(timeout, onTimeout: () async {
+ await dispose();
+ }).then((value) async {
+ await dispose();
});
}
- void _sendCommand(String method, Map<String, dynamic> params) {
+ Future<Map<String, dynamic>> _sendCommand(String method,
+ {Map<String, dynamic> params}) {
+ final String id = (++_id).toString();
final String message = json.encode(<String, dynamic>{
- 'id': (++_id).toString(),
+ 'id': id,
'method': method,
'params': params,
});
+
+ _requestCompleters[id] = Completer();
_process.stdin.writeln(message);
+
log.trace('==> $message');
+
+ return _requestCompleters[id].future;
}
void _handleServerResponse(String line) {
@@ -145,47 +169,24 @@
if (response is Map<String, dynamic>) {
if (response['event'] != null) {
- final String event = response['event'] as String;
+ final event = response['event'] as String;
final dynamic params = response['params'];
if (params is Map<String, dynamic>) {
- if (event == 'server.status') {
- _handleStatus(castStringKeyedMap(response['params']));
- } else if (event == 'analysis.errors') {
- _handleAnalysisIssues(castStringKeyedMap(response['params']));
- } else if (event == 'server.error') {
- _handleServerError(castStringKeyedMap(response['params']));
- }
+ _streamController(event).add(castStringKeyedMap(params));
}
- } else if (response['error'] != null) {
- // Fields are 'code', 'message', and 'stackTrace'.
- final Map<String, dynamic> error =
- castStringKeyedMap(response['error']);
- log.stderr(
- 'Error response from the server: '
- '${error['code']} ${error['message']}',
- );
- if (error['stackTrace'] != null) {
- log.stderr(error['stackTrace'] as String);
- }
- // Dispose of the process at this point so the process doesn't hang.
- dispose();
- } else if (response['id'] == _fixRequestId) {
- var decoder = ResponseDecoder(null);
- var result =
- EditBulkFixesResult.fromJson(decoder, 'result', response['result']);
- _bulkFixesController.add(result);
- } else if (response['id'] == _shutdownRequestId) {
- _shutdownRequestCompleter.complete();
- }
- }
- }
+ } else if (response['id'] != null) {
+ final id = response['id'];
- void _handleStatus(Map<String, dynamic> statusInfo) {
- // {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
- if (statusInfo['analysis'] != null && !_analyzingController.isClosed) {
- final bool isAnalyzing = statusInfo['analysis']['isAnalyzing'] as bool;
- _analyzingController.add(isAnalyzing);
+ if (response['error'] != null) {
+ final error = castStringKeyedMap(response['error']);
+ _requestCompleters
+ .remove(id)
+ ?.completeError(RequestError.parse(error));
+ } else {
+ _requestCompleters.remove(id)?.complete(response['result']);
+ }
+ }
}
}
@@ -195,30 +196,14 @@
if (error['stackTrace'] != null) {
log.stderr(error['stackTrace'] as String);
}
- _didServerErrorOccur = true;
}
- void _handleAnalysisIssues(Map<String, dynamic> issueInfo) {
- // {"event":"analysis.errors","params":{"file":"/Users/.../lib/main.dart","errors":[]}}
- final String file = issueInfo['file'] as String;
- final List<dynamic> errorsList = issueInfo['errors'] as List<dynamic>;
- final List<AnalysisError> errors = errorsList
- .map<Map<String, dynamic>>(castStringKeyedMap)
- .map<AnalysisError>((Map<String, dynamic> json) => AnalysisError(json))
- .toList();
- if (!_errorsController.isClosed) {
- _errorsController.add(FileAnalysisErrors(file, errors));
- }
- }
-
- void _closeStreamControllers() async {
- await _analyzingController.close();
- await _errorsController.close();
- await _bulkFixesController.close();
+ StreamController<Map<String, dynamic>> _streamController(String streamId) {
+ return _streamControllers.putIfAbsent(
+ streamId, () => StreamController<Map<String, dynamic>>.broadcast());
}
Future<bool> dispose() async {
- await _closeStreamControllers();
return _process?.kill();
}
}
@@ -286,8 +271,8 @@
}
// TODO(jwren) add some tests to verify that the results are what we are
- // expecting, 'other' is not always on the RHS of the subtraction in the
- // implementation.
+ // expecting, 'other' is not always on the RHS of the subtraction in the
+ // implementation.
@override
int compareTo(AnalysisError other) {
// Sort in order of file path, error location, severity, and message.
@@ -333,3 +318,22 @@
FileAnalysisErrors(this.file, this.errors);
}
+
+class RequestError {
+ static RequestError parse(dynamic error) {
+ return RequestError(
+ error['code'],
+ error['message'],
+ stackTrace: error['stackTrace'],
+ );
+ }
+
+ final String code;
+ final String message;
+ final String stackTrace;
+
+ RequestError(this.code, this.message, {this.stackTrace});
+
+ @override
+ String toString() => '[RequestError code: $code, message: $message]';
+}
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 6ea3dbe..80ef119 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -8,11 +8,11 @@
import 'package:meta/meta.dart';
import 'package:path/path.dart' as path;
+import '../analysis_server.dart';
import '../core.dart';
import '../events.dart';
import '../sdk.dart';
import '../utils.dart';
-import 'analyze_impl.dart';
class AnalyzeCommand extends DartdevCommand<int> {
static const String cmdName = 'analyze';
@@ -55,7 +55,7 @@
final AnalysisServer server = AnalysisServer(
io.Directory(sdk.sdkPath),
- [dir],
+ dir,
);
server.onErrors.listen((FileAnalysisErrors fileErrors) {
@@ -78,81 +78,81 @@
await server.analysisFinished;
analysisFinished = true;
- // todo (pq): consider server.shutdown() for cleaner dispose.
- await server.dispose();
+ await server.shutdown(timeout: Duration(milliseconds: 100));
+
progress.finish(showTiming: true);
errors.sort();
- if (errors.isNotEmpty) {
- final bullet = log.ansi.bullet;
-
- log.stdout('');
-
- bool hasErrors = false;
- bool hasWarnings = false;
- bool hasInfos = false;
-
- for (final AnalysisError error in errors) {
- // error • Message ... at path.dart:line:col • (code)
-
- var filePath = path.relative(error.file, from: dir.path);
- var severity = error.severity.toLowerCase().padLeft(_severityWidth);
- if (error.isError) {
- severity = log.ansi.error(severity);
- }
-
- log.stdout(
- '$severity $bullet '
- '${log.ansi.emphasized(error.messageSentenceFragment)} '
- 'at $filePath:${error.startLine}:${error.startColumn} $bullet '
- '(${error.code})',
- );
-
- if (verbose) {
- var padding = ' ' * _bodyIndentWidth;
- for (var message in error.contextMessages) {
- log.stdout('$padding${message.message} '
- 'at ${message.filePath}:${message.line}:${message.column}');
- }
- if (error.correction != null) {
- log.stdout('$padding${error.correction}');
- }
- if (error.url != null) {
- log.stdout('$padding${error.url}');
- }
- }
-
- hasErrors |= error.isError;
- hasWarnings |= error.isWarning;
- hasInfos |= error.isInfo;
- }
-
- log.stdout('');
-
- final errorCount = errors.length;
- log.stdout('$errorCount ${pluralize('issue', errorCount)} found.');
-
- // Return an error code in the range [0-3] dependent on the severity of
- // the issue(s) found.
- if (hasErrors) {
- return 3;
- }
-
- bool fatalWarnings = argResults['fatal-warnings'];
- bool fatalInfos = argResults['fatal-infos'];
-
- if (fatalWarnings && hasWarnings) {
- return 2;
- } else if (fatalInfos && hasInfos) {
- return 1;
- } else {
- return 0;
- }
- } else {
+ if (errors.isEmpty) {
log.stdout('No issues found!');
return 0;
}
+
+ final bullet = log.ansi.bullet;
+
+ log.stdout('');
+
+ bool hasErrors = false;
+ bool hasWarnings = false;
+ bool hasInfos = false;
+
+ for (final AnalysisError error in errors) {
+ // error • Message ... at path.dart:line:col • (code)
+
+ var filePath = path.relative(error.file, from: dir.path);
+ var severity = error.severity.toLowerCase().padLeft(_severityWidth);
+ if (error.isError) {
+ severity = log.ansi.error(severity);
+ }
+
+ log.stdout(
+ '$severity $bullet '
+ '${log.ansi.emphasized(error.messageSentenceFragment)} '
+ 'at $filePath:${error.startLine}:${error.startColumn} $bullet '
+ '(${error.code})',
+ );
+
+ if (verbose) {
+ var padding = ' ' * _bodyIndentWidth;
+ for (var message in error.contextMessages) {
+ log.stdout('$padding${message.message} '
+ 'at ${message.filePath}:${message.line}:${message.column}');
+ }
+ if (error.correction != null) {
+ log.stdout('$padding${error.correction}');
+ }
+ if (error.url != null) {
+ log.stdout('$padding${error.url}');
+ }
+ }
+
+ hasErrors |= error.isError;
+ hasWarnings |= error.isWarning;
+ hasInfos |= error.isInfo;
+ }
+
+ log.stdout('');
+
+ final errorCount = errors.length;
+ log.stdout('$errorCount ${pluralize('issue', errorCount)} found.');
+
+ // Return an error code in the range [0-3] dependent on the severity of
+ // the issue(s) found.
+ if (hasErrors) {
+ return 3;
+ }
+
+ bool fatalWarnings = argResults['fatal-warnings'];
+ bool fatalInfos = argResults['fatal-infos'];
+
+ if (fatalWarnings && hasWarnings) {
+ return 2;
+ } else if (fatalInfos && hasInfos) {
+ return 1;
+ } else {
+ return 0;
+ }
}
@override
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index 7cd14e0..990da09 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -3,16 +3,16 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
-import 'dart:io';
+import 'dart:io' as io;
import 'package:analysis_server_client/protocol.dart' hide AnalysisError;
import 'package:meta/meta.dart';
import 'package:path/path.dart' as path;
+import '../analysis_server.dart';
import '../core.dart';
import '../events.dart';
import '../sdk.dart';
-import 'analyze_impl.dart';
class FixCommand extends DartdevCommand<int> {
static const String cmdName = 'fix';
@@ -37,37 +37,34 @@
}
var dir = argResults.rest.isEmpty
- ? Directory.current
- : Directory(argResults.rest.single);
+ ? io.Directory.current
+ : io.Directory(argResults.rest.single);
if (!dir.existsSync()) {
usageException("Directory doesn't exist: ${dir.path}");
}
- var bulkFixCompleter = Completer<void>();
var progress =
log.progress('Computing fixes in ${path.basename(dir.path)}');
var server = AnalysisServer(
- Directory(sdk.sdkPath),
- [dir],
+ io.Directory(sdk.sdkPath),
+ dir,
);
await server.start();
+
+ EditBulkFixesResult fixes;
//ignore: unawaited_futures
server.onExit.then((int exitCode) {
- if (!bulkFixCompleter.isCompleted) {
- bulkFixCompleter.completeError('analysis server exited: $exitCode');
+ if (fixes == null && exitCode != 0) {
+ progress?.cancel();
+ io.exitCode = exitCode;
}
});
- List<SourceFileEdit> edits;
- server.onBulkFixes.listen((EditBulkFixesResult fixes) {
- edits = fixes.edits;
- bulkFixCompleter.complete();
- });
- server.requestBulkFixes(dir.absolute.path);
+ fixes = await server.requestBulkFixes(dir.absolute.path);
+ final List<SourceFileEdit> edits = fixes.edits;
- await bulkFixCompleter.future;
await server.shutdown();
progress.finish(showTiming: true);
@@ -82,6 +79,7 @@
log.stdout('Fixed $fileCount files.');
}
}
+
return 0;
}
@@ -90,7 +88,7 @@
for (var edit in edits) {
var fileName = edit.file;
files.add(fileName);
- var file = File(fileName);
+ var file = io.File(fileName);
var code = await file.exists() ? await file.readAsString() : '';
code = SourceEdit.applySequence(code, edit.edits);
await file.writeAsString(code);
diff --git a/pkg/dartdev/test/analysis_server_test.dart b/pkg/dartdev/test/analysis_server_test.dart
new file mode 100644
index 0000000..27f5b3f
--- /dev/null
+++ b/pkg/dartdev/test/analysis_server_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io' as io;
+
+import 'package:cli_util/cli_logging.dart';
+import 'package:dartdev/src/analysis_server.dart';
+import 'package:dartdev/src/core.dart';
+import 'package:dartdev/src/sdk.dart';
+import 'package:test/test.dart';
+
+import 'utils.dart';
+
+void main() {
+ group('AnalysisServer', () {
+ TestProject p;
+
+ setUp(() {
+ log = Logger.standard();
+ p = project();
+ });
+
+ tearDown(() => p?.dispose());
+
+ test('can start', () async {
+ AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), p.dir);
+ await server.start();
+ await server.shutdown();
+ });
+
+ test('can send message', () async {
+ AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), p.dir);
+ await server.start();
+
+ final response = await server.getVersion();
+ expect(response, isNotEmpty);
+
+ await server.shutdown();
+ });
+ });
+}
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index aa4e2eb..f7791c2 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:dartdev/src/commands/analyze_impl.dart';
+import 'package:dartdev/src/analysis_server.dart';
import 'package:test/test.dart';
import '../utils.dart';
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index f06a7d0..e5d4c71 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -5654,6 +5654,10 @@
callName,
new Arguments(<Expression>[rhs])..fileOffset = node.fileOffset)
..fileOffset = node.fileOffset;
+ // Future calls to flow analysis will be using `resultExpression` to refer
+ // to the variable set, so instruct flow analysis to forward the
+ // expression information.
+ inferrer.flowAnalysis.forwardExpression(resultExpression, node);
} else {
node.value = rhs..parent = node;
resultExpression = node;
@@ -5927,6 +5931,10 @@
callName,
new Arguments(<Expression>[])..fileOffset = node.fileOffset)
..fileOffset = node.fileOffset;
+ // Future calls to flow analysis will be using `resultExpression` to refer
+ // to the variable get, so instruct flow analysis to forward the
+ // expression information.
+ inferrer.flowAnalysis.forwardExpression(resultExpression, node);
} else {
resultExpression = node;
}
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 0fc4c97..7e46518 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE.md file.
import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
+import 'package:front_end/src/fasta/kernel/internal_ast.dart';
import 'package:kernel/ast.dart'
show
@@ -314,7 +315,15 @@
}
@override
- DartType variableType(VariableDeclaration variable) => variable.type;
+ DartType variableType(VariableDeclaration variable) {
+ if (variable is VariableDeclarationImpl) {
+ // When late variables get lowered, their type is changed, but the
+ // original type is stored in `VariableDeclarationImpl.lateType`, so we
+ // use that if it exists.
+ return variable.lateType ?? variable.type;
+ }
+ return variable.type;
+ }
@override
DartType tryPromoteToType(DartType to, DartType from) {
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 4a2893b..18581dd4 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -903,6 +903,7 @@
reflective
reg
regis
+registering
rehash
reindexed
reissued
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index 62f6492..f3a1c47 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -1537,6 +1537,7 @@
instantiation
instantiations
instead
+instruct
instruction
instructions
instrumentation
diff --git a/pkg/wasm/lib/src/function.dart b/pkg/wasm/lib/src/function.dart
index 4ac694e..e9a23c5 100644
--- a/pkg/wasm/lib/src/function.dart
+++ b/pkg/wasm/lib/src/function.dart
@@ -10,35 +10,43 @@
/// WasmFunction is a callable function from a WasmInstance.
class WasmFunction {
String _name;
- Pointer<WasmerExportFunc> _func;
+ Pointer<WasmerFunc> _func;
List<int> _argTypes;
int _returnType;
- Pointer<WasmerValue> _args;
- Pointer<WasmerValue> _result;
+ Pointer<WasmerVal> _args;
+ Pointer<WasmerVal> _results;
WasmFunction(this._name, this._func, this._argTypes, this._returnType)
- : _args = allocate<WasmerValue>(count: _argTypes.length),
- _result = allocate<WasmerValue>() {
+ : _args = _argTypes.length == 0
+ ? nullptr
+ : allocate<WasmerVal>(count: _argTypes.length),
+ _results =
+ _returnType == WasmerValKindVoid ? nullptr : allocate<WasmerVal>() {
for (var i = 0; i < _argTypes.length; ++i) {
- _args[i].tag = _argTypes[i];
+ _args[i].kind = _argTypes[i];
}
}
+ String toString() {
+ return "${wasmerValKindName(_returnType)} $_name" +
+ "(${_argTypes.map(wasmerValKindName).join(", ")})";
+ }
+
bool _fillArg(dynamic arg, int i) {
switch (_argTypes[i]) {
- case WasmerValueTagI32:
+ case WasmerValKindI32:
if (arg is! int) return false;
_args[i].i32 = arg;
return true;
- case WasmerValueTagI64:
+ case WasmerValKindI64:
if (arg is! int) return false;
_args[i].i64 = arg;
return true;
- case WasmerValueTagF32:
+ case WasmerValKindF32:
if (arg is! num) return false;
_args[i].f32 = arg;
return true;
- case WasmerValueTagF64:
+ case WasmerValKindF64:
if (arg is! num) return false;
_args[i].f64 = arg;
return true;
@@ -48,29 +56,29 @@
dynamic apply(List<dynamic> args) {
if (args.length != _argTypes.length) {
- throw ArgumentError("Wrong number arguments for WASM function: $_name");
+ throw ArgumentError("Wrong number arguments for WASM function: $this");
}
for (var i = 0; i < args.length; ++i) {
if (!_fillArg(args[i], i)) {
- throw ArgumentError("Bad argument type for WASM function: $_name");
+ throw ArgumentError("Bad argument type for WASM function: $this");
}
}
- WasmRuntime().call(_func, _args, _argTypes.length, _result,
- _returnType == WasmerValueTagVoid ? 0 : 1);
+ WasmRuntime().call(_func, _args, _results);
- if (_returnType == WasmerValueTagVoid) {
+ if (_returnType == WasmerValKindVoid) {
return null;
}
- assert(_returnType == _result.ref.tag);
+ var result = _results[0];
+ assert(_returnType == result.kind);
switch (_returnType) {
- case WasmerValueTagI32:
- return _result.ref.i32;
- case WasmerValueTagI64:
- return _result.ref.i64;
- case WasmerValueTagF32:
- return _result.ref.f32;
- case WasmerValueTagF64:
- return _result.ref.f64;
+ case WasmerValKindI32:
+ return result.i32;
+ case WasmerValKindI64:
+ return result.i64;
+ case WasmerValKindF32:
+ return result.f32;
+ case WasmerValKindF64:
+ return result.f64;
}
}
diff --git a/pkg/wasm/lib/src/module.dart b/pkg/wasm/lib/src/module.dart
index 4013966..a2a9944 100644
--- a/pkg/wasm/lib/src/module.dart
+++ b/pkg/wasm/lib/src/module.dart
@@ -11,14 +11,23 @@
/// WasmModule is a compiled module that can be instantiated.
class WasmModule {
- Pointer<WasmerModule> _module;
+ Pointer<WasmerStore> _store;
+ late Pointer<WasmerModule> _module;
/// Compile a module.
- WasmModule(Uint8List data) : _module = WasmRuntime().compile(data) {}
+ WasmModule(Uint8List data) : _store = WasmRuntime().newStore() {
+ _module = WasmRuntime().compile(_store, data);
+ }
/// Instantiate the module with the given imports.
WasmInstance instantiate(WasmImports imports) {
- return WasmInstance(_module, imports);
+ return WasmInstance(_store, _module, imports);
+ }
+
+ /// Create a new memory with the given number of initial pages, and optional
+ /// maximum number of pages.
+ WasmMemory createMemory(int pages, [int? maxPages]) {
+ return WasmMemory._create(_store, pages, maxPages);
}
/// Returns a description of all of the module's imports and exports, for
@@ -28,12 +37,12 @@
var runtime = WasmRuntime();
var imports = runtime.importDescriptors(_module);
for (var imp in imports) {
- var kind = wasmerImpExpKindName(imp.kind);
+ var kind = wasmerExternKindName(imp.kind);
description.write('import $kind: ${imp.moduleName}::${imp.name}\n');
}
var exports = runtime.exportDescriptors(_module);
for (var exp in exports) {
- var kind = wasmerImpExpKindName(exp.kind);
+ var kind = wasmerExternKindName(exp.kind);
description.write('export $kind: ${exp.name}\n');
}
return description.toString();
@@ -42,13 +51,13 @@
/// WasmImports holds all the imports for a WasmInstance.
class WasmImports {
- Pointer<WasmerImport> _imports;
+ Pointer<Pointer<WasmerExtern>> _imports;
int _capacity;
int _length;
/// Create an imports object.
WasmImports([this._capacity = 4])
- : _imports = allocate<WasmerImport>(count: _capacity),
+ : _imports = allocate<Pointer<WasmerExtern>>(count: _capacity),
_length = 0 {}
/// Returns the number of imports.
@@ -57,26 +66,31 @@
/// WasmInstance is an instantiated WasmModule.
class WasmInstance {
+ Pointer<WasmerStore> _store;
Pointer<WasmerModule> _module;
Pointer<WasmerInstance> _instance;
Pointer<WasmerMemory>? _exportedMemory;
Map<String, WasmFunction> _functions = {};
- WasmInstance(this._module, WasmImports imports)
+ WasmInstance(this._store, this._module, WasmImports imports)
: _instance = WasmRuntime()
- .instantiate(_module, imports._imports, imports.length) {
+ .instantiate(_store, _module, imports._imports, imports.length) {
var runtime = WasmRuntime();
- var exps = runtime.exports(_instance);
- for (var e in exps) {
- var kind = runtime.exportKind(e);
- String name = runtime.exportName(e);
- if (kind == WasmerImpExpKindFunction) {
- var f = runtime.exportToFunction(e);
+ var exports = runtime.exports(_instance);
+ var exportDescs = runtime.exportDescriptors(_module);
+ assert(exports.ref.length == exportDescs.length);
+ for (var i = 0; i < exports.ref.length; ++i) {
+ var e = exports.ref.data[i];
+ var kind = runtime.externKind(exports.ref.data[i]);
+ String name = exportDescs[i].name;
+ if (kind == WasmerExternKindFunction) {
+ var f = runtime.externToFunction(e);
+ var ft = exportDescs[i].funcType;
_functions[name] = WasmFunction(
- name, f, runtime.getArgTypes(f), runtime.getReturnType(f));
- } else if (kind == WasmerImpExpKindMemory) {
+ name, f, runtime.getArgTypes(ft), runtime.getReturnType(ft));
+ } else if (kind == WasmerExternKindMemory) {
// WASM currently allows only one memory per module.
- _exportedMemory = runtime.exportToMemory(e);
+ _exportedMemory = runtime.externToMemory(e);
}
}
}
@@ -107,8 +121,8 @@
/// Create a new memory with the given number of initial pages, and optional
/// maximum number of pages.
- WasmMemory(int pages, [int? maxPages])
- : _mem = WasmRuntime().newMemory(pages, maxPages) {
+ WasmMemory._create(Pointer<WasmerStore> store, int pages, int? maxPages)
+ : _mem = WasmRuntime().newMemory(store, pages, maxPages) {
_view = WasmRuntime().memoryView(_mem);
}
diff --git a/pkg/wasm/lib/src/runtime.dart b/pkg/wasm/lib/src/runtime.dart
index 4ddec1d..6f09208 100644
--- a/pkg/wasm/lib/src/runtime.dart
+++ b/pkg/wasm/lib/src/runtime.dart
@@ -2,6 +2,10 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// This file has been automatically generated. Please do not edit it manually.
+// To regenerate the file, use the following command
+// "generate_ffi_boilerplate.py".
+
import 'dart:convert';
import 'dart:ffi';
import 'dart:io';
@@ -14,62 +18,92 @@
int kind;
String moduleName;
String name;
- WasmImportDescriptor(this.kind, this.moduleName, this.name);
+ Pointer<WasmerFunctype> funcType;
+ WasmImportDescriptor(this.kind, this.moduleName, this.name, this.funcType);
}
class WasmExportDescriptor {
int kind;
String name;
- WasmExportDescriptor(this.kind, this.name);
+ Pointer<WasmerFunctype> funcType;
+ WasmExportDescriptor(this.kind, this.name, this.funcType);
}
class WasmRuntime {
static WasmRuntime? _inst;
DynamicLibrary _lib;
- late WasmerCompileFn _compile;
- late WasmerInstantiateFn _instantiate;
+ late Pointer<WasmerEngine> _engine;
+ late WasmerByteVecDeleteFn _byte_vec_delete;
+ late WasmerByteVecNewFn _byte_vec_new;
+ late WasmerByteVecNewEmptyFn _byte_vec_new_empty;
+ late WasmerByteVecNewUninitializedFn _byte_vec_new_uninitialized;
+ late WasmerEngineDeleteFn _engine_delete;
+ late WasmerEngineNewFn _engine_new;
+ late WasmerExporttypeNameFn _exporttype_name;
+ late WasmerExporttypeTypeFn _exporttype_type;
+ late WasmerExporttypeVecDeleteFn _exporttype_vec_delete;
+ late WasmerExporttypeVecNewFn _exporttype_vec_new;
+ late WasmerExporttypeVecNewEmptyFn _exporttype_vec_new_empty;
+ late WasmerExporttypeVecNewUninitializedFn _exporttype_vec_new_uninitialized;
+ late WasmerExternAsFuncFn _extern_as_func;
+ late WasmerExternAsMemoryFn _extern_as_memory;
+ late WasmerExternDeleteFn _extern_delete;
+ late WasmerExternKindFn _extern_kind;
+ late WasmerExternVecDeleteFn _extern_vec_delete;
+ late WasmerExternVecNewFn _extern_vec_new;
+ late WasmerExternVecNewEmptyFn _extern_vec_new_empty;
+ late WasmerExternVecNewUninitializedFn _extern_vec_new_uninitialized;
+ late WasmerExterntypeAsFunctypeFn _externtype_as_functype;
+ late WasmerExterntypeDeleteFn _externtype_delete;
+ late WasmerExterntypeKindFn _externtype_kind;
+ late WasmerFuncCallFn _func_call;
+ late WasmerFuncDeleteFn _func_delete;
+ late WasmerFunctypeDeleteFn _functype_delete;
+ late WasmerFunctypeParamsFn _functype_params;
+ late WasmerFunctypeResultsFn _functype_results;
+ late WasmerImporttypeModuleFn _importtype_module;
+ late WasmerImporttypeNameFn _importtype_name;
+ late WasmerImporttypeTypeFn _importtype_type;
+ late WasmerImporttypeVecDeleteFn _importtype_vec_delete;
+ late WasmerImporttypeVecNewFn _importtype_vec_new;
+ late WasmerImporttypeVecNewEmptyFn _importtype_vec_new_empty;
+ late WasmerImporttypeVecNewUninitializedFn _importtype_vec_new_uninitialized;
+ late WasmerInstanceDeleteFn _instance_delete;
late WasmerInstanceExportsFn _instance_exports;
- late WasmerExportsLenFn _exports_len;
- late WasmerExportsGetFn _exports_get;
- late WasmerExportKindFn _export_kind;
- late WasmerExportToFuncFn _export_to_func;
- late WasmerExportFuncReturnsArityFn _export_func_returns_arity;
- late WasmerExportFuncReturnsFn _export_func_returns;
- late WasmerExportFuncParamsArityFn _export_func_params_arity;
- late WasmerExportFuncParamsFn _export_func_params;
- late WasmerExportFuncCallFn _export_func_call;
- late WasmerExportNamePtrFn _export_name_ptr;
- late WasmerExportDescriptorsFn _export_descriptors;
- late WasmerExportDescriptorsDestroyFn _export_descriptors_destroy;
- late WasmerExportDescriptorsLenFn _export_descriptors_len;
- late WasmerExportDescriptorsGetFn _export_descriptors_get;
- late WasmerExportDescriptorKindFn _export_descriptor_kind;
- late WasmerExportDescriptorNamePtrFn _export_descriptor_name_ptr;
- late WasmerImportDescriptorModuleNamePtrFn _import_descriptor_module_name_ptr;
- late WasmerImportDescriptorNamePtrFn _import_descriptor_name_ptr;
- late WasmerImportDescriptorsFn _import_descriptors;
- late WasmerImportDescriptorsDestroyFn _import_descriptors_destroy;
- late WasmerImportDescriptorsLenFn _import_descriptors_len;
- late WasmerImportDescriptorsGetFn _import_descriptors_get;
- late WasmerImportDescriptorKindFn _import_descriptor_kind;
- late WasmerExportToMemoryFn _export_to_memory;
- late WasmerMemoryNewPtrFn _memory_new_ptr;
- late WasmerMemoryGrowFn _memory_grow;
- late WasmerMemoryLengthFn _memory_length;
+ late WasmerInstanceNewFn _instance_new;
late WasmerMemoryDataFn _memory_data;
- late WasmerMemoryDataLengthFn _memory_data_length;
+ late WasmerMemoryDataSizeFn _memory_data_size;
+ late WasmerMemoryDeleteFn _memory_delete;
+ late WasmerMemoryGrowFn _memory_grow;
+ late WasmerMemoryNewFn _memory_new;
+ late WasmerMemorySizeFn _memory_size;
+ late WasmerMemorytypeDeleteFn _memorytype_delete;
+ late WasmerMemorytypeNewFn _memorytype_new;
+ late WasmerModuleDeleteFn _module_delete;
+ late WasmerModuleExportsFn _module_exports;
+ late WasmerModuleImportsFn _module_imports;
+ late WasmerModuleNewFn _module_new;
+ late WasmerStoreDeleteFn _store_delete;
+ late WasmerStoreNewFn _store_new;
+ late WasmerTrapDeleteFn _trap_delete;
+ late WasmerValtypeDeleteFn _valtype_delete;
+ late WasmerValtypeKindFn _valtype_kind;
+ late WasmerValtypeVecDeleteFn _valtype_vec_delete;
+ late WasmerValtypeVecNewFn _valtype_vec_new;
+ late WasmerValtypeVecNewEmptyFn _valtype_vec_new_empty;
+ late WasmerValtypeVecNewUninitializedFn _valtype_vec_new_uninitialized;
factory WasmRuntime() {
- if (_inst == null) {
- _inst = WasmRuntime._init();
- }
- return _inst as WasmRuntime;
+ WasmRuntime inst = _inst ?? WasmRuntime._init();
+ _inst = inst;
+ return inst;
}
static String _getLibName() {
- if (Platform.isMacOS) return "libwasmer_wrapper.dylib";
- if (Platform.isLinux) return "libwasmer_wrapper.so";
+ if (Platform.isMacOS) return "libwasmer.dylib";
+ if (Platform.isLinux) return "libwasmer.so";
+ // TODO(dartbug.com/37882): Support more platforms.
throw Exception("Wasm not currently supported on this platform");
}
@@ -104,296 +138,322 @@
WasmRuntime._init()
: _lib = DynamicLibrary.open(path.join(_getLibDir(), _getLibName())) {
- _compile = _lib.lookupFunction<NativeWasmerCompileFn, WasmerCompileFn>(
- 'wasmer_compile');
- _instantiate =
- _lib.lookupFunction<NativeWasmerInstantiateFn, WasmerInstantiateFn>(
- 'wasmer_module_instantiate');
+ _byte_vec_delete =
+ _lib.lookupFunction<NativeWasmerByteVecDeleteFn, WasmerByteVecDeleteFn>(
+ 'wasm_byte_vec_delete');
+ _byte_vec_new =
+ _lib.lookupFunction<NativeWasmerByteVecNewFn, WasmerByteVecNewFn>(
+ 'wasm_byte_vec_new');
+ _byte_vec_new_empty = _lib.lookupFunction<NativeWasmerByteVecNewEmptyFn,
+ WasmerByteVecNewEmptyFn>('wasm_byte_vec_new_empty');
+ _byte_vec_new_uninitialized = _lib.lookupFunction<
+ NativeWasmerByteVecNewUninitializedFn,
+ WasmerByteVecNewUninitializedFn>('wasm_byte_vec_new_uninitialized');
+ _engine_delete =
+ _lib.lookupFunction<NativeWasmerEngineDeleteFn, WasmerEngineDeleteFn>(
+ 'wasm_engine_delete');
+ _engine_new =
+ _lib.lookupFunction<NativeWasmerEngineNewFn, WasmerEngineNewFn>(
+ 'wasm_engine_new');
+ _exporttype_name = _lib.lookupFunction<NativeWasmerExporttypeNameFn,
+ WasmerExporttypeNameFn>('wasm_exporttype_name');
+ _exporttype_type = _lib.lookupFunction<NativeWasmerExporttypeTypeFn,
+ WasmerExporttypeTypeFn>('wasm_exporttype_type');
+ _exporttype_vec_delete = _lib.lookupFunction<
+ NativeWasmerExporttypeVecDeleteFn,
+ WasmerExporttypeVecDeleteFn>('wasm_exporttype_vec_delete');
+ _exporttype_vec_new = _lib.lookupFunction<NativeWasmerExporttypeVecNewFn,
+ WasmerExporttypeVecNewFn>('wasm_exporttype_vec_new');
+ _exporttype_vec_new_empty = _lib.lookupFunction<
+ NativeWasmerExporttypeVecNewEmptyFn,
+ WasmerExporttypeVecNewEmptyFn>('wasm_exporttype_vec_new_empty');
+ _exporttype_vec_new_uninitialized = _lib.lookupFunction<
+ NativeWasmerExporttypeVecNewUninitializedFn,
+ WasmerExporttypeVecNewUninitializedFn>(
+ 'wasm_exporttype_vec_new_uninitialized');
+ _extern_as_func =
+ _lib.lookupFunction<NativeWasmerExternAsFuncFn, WasmerExternAsFuncFn>(
+ 'wasm_extern_as_func');
+ _extern_as_memory = _lib.lookupFunction<NativeWasmerExternAsMemoryFn,
+ WasmerExternAsMemoryFn>('wasm_extern_as_memory');
+ _extern_delete =
+ _lib.lookupFunction<NativeWasmerExternDeleteFn, WasmerExternDeleteFn>(
+ 'wasm_extern_delete');
+ _extern_kind =
+ _lib.lookupFunction<NativeWasmerExternKindFn, WasmerExternKindFn>(
+ 'wasm_extern_kind');
+ _extern_vec_delete = _lib.lookupFunction<NativeWasmerExternVecDeleteFn,
+ WasmerExternVecDeleteFn>('wasm_extern_vec_delete');
+ _extern_vec_new =
+ _lib.lookupFunction<NativeWasmerExternVecNewFn, WasmerExternVecNewFn>(
+ 'wasm_extern_vec_new');
+ _extern_vec_new_empty = _lib.lookupFunction<NativeWasmerExternVecNewEmptyFn,
+ WasmerExternVecNewEmptyFn>('wasm_extern_vec_new_empty');
+ _extern_vec_new_uninitialized = _lib.lookupFunction<
+ NativeWasmerExternVecNewUninitializedFn,
+ WasmerExternVecNewUninitializedFn>('wasm_extern_vec_new_uninitialized');
+ _externtype_as_functype = _lib.lookupFunction<
+ NativeWasmerExterntypeAsFunctypeFn,
+ WasmerExterntypeAsFunctypeFn>('wasm_externtype_as_functype');
+ _externtype_delete = _lib.lookupFunction<NativeWasmerExterntypeDeleteFn,
+ WasmerExterntypeDeleteFn>('wasm_externtype_delete');
+ _externtype_kind = _lib.lookupFunction<NativeWasmerExterntypeKindFn,
+ WasmerExterntypeKindFn>('wasm_externtype_kind');
+ _func_call = _lib.lookupFunction<NativeWasmerFuncCallFn, WasmerFuncCallFn>(
+ 'wasm_func_call');
+ _func_delete =
+ _lib.lookupFunction<NativeWasmerFuncDeleteFn, WasmerFuncDeleteFn>(
+ 'wasm_func_delete');
+ _functype_delete = _lib.lookupFunction<NativeWasmerFunctypeDeleteFn,
+ WasmerFunctypeDeleteFn>('wasm_functype_delete');
+ _functype_params = _lib.lookupFunction<NativeWasmerFunctypeParamsFn,
+ WasmerFunctypeParamsFn>('wasm_functype_params');
+ _functype_results = _lib.lookupFunction<NativeWasmerFunctypeResultsFn,
+ WasmerFunctypeResultsFn>('wasm_functype_results');
+ _importtype_module = _lib.lookupFunction<NativeWasmerImporttypeModuleFn,
+ WasmerImporttypeModuleFn>('wasm_importtype_module');
+ _importtype_name = _lib.lookupFunction<NativeWasmerImporttypeNameFn,
+ WasmerImporttypeNameFn>('wasm_importtype_name');
+ _importtype_type = _lib.lookupFunction<NativeWasmerImporttypeTypeFn,
+ WasmerImporttypeTypeFn>('wasm_importtype_type');
+ _importtype_vec_delete = _lib.lookupFunction<
+ NativeWasmerImporttypeVecDeleteFn,
+ WasmerImporttypeVecDeleteFn>('wasm_importtype_vec_delete');
+ _importtype_vec_new = _lib.lookupFunction<NativeWasmerImporttypeVecNewFn,
+ WasmerImporttypeVecNewFn>('wasm_importtype_vec_new');
+ _importtype_vec_new_empty = _lib.lookupFunction<
+ NativeWasmerImporttypeVecNewEmptyFn,
+ WasmerImporttypeVecNewEmptyFn>('wasm_importtype_vec_new_empty');
+ _importtype_vec_new_uninitialized = _lib.lookupFunction<
+ NativeWasmerImporttypeVecNewUninitializedFn,
+ WasmerImporttypeVecNewUninitializedFn>(
+ 'wasm_importtype_vec_new_uninitialized');
+ _instance_delete = _lib.lookupFunction<NativeWasmerInstanceDeleteFn,
+ WasmerInstanceDeleteFn>('wasm_instance_delete');
_instance_exports = _lib.lookupFunction<NativeWasmerInstanceExportsFn,
- WasmerInstanceExportsFn>('wasmer_instance_exports');
- _exports_len =
- _lib.lookupFunction<NativeWasmerExportsLenFn, WasmerExportsLenFn>(
- 'wasmer_exports_len');
- _exports_get =
- _lib.lookupFunction<NativeWasmerExportsGetFn, WasmerExportsGetFn>(
- 'wasmer_exports_get');
- _export_kind =
- _lib.lookupFunction<NativeWasmerExportKindFn, WasmerExportKindFn>(
- 'wasmer_export_kind');
- _export_to_func =
- _lib.lookupFunction<NativeWasmerExportToFuncFn, WasmerExportToFuncFn>(
- 'wasmer_export_to_func');
- _export_func_returns_arity = _lib.lookupFunction<
- NativeWasmerExportFuncReturnsArityFn,
- WasmerExportFuncReturnsArityFn>('wasmer_export_func_returns_arity');
- _export_func_returns = _lib.lookupFunction<NativeWasmerExportFuncReturnsFn,
- WasmerExportFuncReturnsFn>('wasmer_export_func_returns');
- _export_func_params_arity = _lib.lookupFunction<
- NativeWasmerExportFuncParamsArityFn,
- WasmerExportFuncParamsArityFn>('wasmer_export_func_params_arity');
- _export_func_params = _lib.lookupFunction<NativeWasmerExportFuncParamsFn,
- WasmerExportFuncParamsFn>('wasmer_export_func_params');
- _export_func_call = _lib.lookupFunction<NativeWasmerExportFuncCallFn,
- WasmerExportFuncCallFn>('wasmer_export_func_call');
- _export_descriptors = _lib.lookupFunction<NativeWasmerExportDescriptorsFn,
- WasmerExportDescriptorsFn>('wasmer_export_descriptors');
- _export_descriptors_destroy = _lib.lookupFunction<
- NativeWasmerExportDescriptorsDestroyFn,
- WasmerExportDescriptorsDestroyFn>('wasmer_export_descriptors_destroy');
- _export_descriptors_len = _lib.lookupFunction<
- NativeWasmerExportDescriptorsLenFn,
- WasmerExportDescriptorsLenFn>('wasmer_export_descriptors_len');
- _export_descriptors_get = _lib.lookupFunction<
- NativeWasmerExportDescriptorsGetFn,
- WasmerExportDescriptorsGetFn>('wasmer_export_descriptors_get');
- _export_descriptor_kind = _lib.lookupFunction<
- NativeWasmerExportDescriptorKindFn,
- WasmerExportDescriptorKindFn>('wasmer_export_descriptor_kind');
- _export_name_ptr =
- _lib.lookupFunction<NativeWasmerExportNamePtrFn, WasmerExportNamePtrFn>(
- 'wasmer_export_name_ptr');
- _export_descriptor_name_ptr = _lib.lookupFunction<
- NativeWasmerExportDescriptorNamePtrFn,
- WasmerExportDescriptorNamePtrFn>('wasmer_export_descriptor_name_ptr');
- _import_descriptors = _lib.lookupFunction<NativeWasmerImportDescriptorsFn,
- WasmerImportDescriptorsFn>('wasmer_import_descriptors');
- _import_descriptors_destroy = _lib.lookupFunction<
- NativeWasmerImportDescriptorsDestroyFn,
- WasmerImportDescriptorsDestroyFn>('wasmer_import_descriptors_destroy');
- _import_descriptors_len = _lib.lookupFunction<
- NativeWasmerImportDescriptorsLenFn,
- WasmerImportDescriptorsLenFn>('wasmer_import_descriptors_len');
- _import_descriptors_get = _lib.lookupFunction<
- NativeWasmerImportDescriptorsGetFn,
- WasmerImportDescriptorsGetFn>('wasmer_import_descriptors_get');
- _import_descriptor_kind = _lib.lookupFunction<
- NativeWasmerImportDescriptorKindFn,
- WasmerImportDescriptorKindFn>('wasmer_import_descriptor_kind');
- _import_descriptor_module_name_ptr = _lib.lookupFunction<
- NativeWasmerImportDescriptorModuleNamePtrFn,
- WasmerImportDescriptorModuleNamePtrFn>(
- 'wasmer_import_descriptor_module_name_ptr');
- _import_descriptor_name_ptr = _lib.lookupFunction<
- NativeWasmerImportDescriptorNamePtrFn,
- WasmerImportDescriptorNamePtrFn>('wasmer_import_descriptor_name_ptr');
- _export_to_memory = _lib.lookupFunction<NativeWasmerExportToMemoryFn,
- WasmerExportToMemoryFn>('wasmer_export_to_memory');
- _memory_new_ptr =
- _lib.lookupFunction<NativeWasmerMemoryNewPtrFn, WasmerMemoryNewPtrFn>(
- 'wasmer_memory_new_ptr');
- _memory_grow =
- _lib.lookupFunction<NativeWasmerMemoryGrowFn, WasmerMemoryGrowFn>(
- 'wasmer_memory_grow');
- _memory_length =
- _lib.lookupFunction<NativeWasmerMemoryLengthFn, WasmerMemoryLengthFn>(
- 'wasmer_memory_length');
+ WasmerInstanceExportsFn>('wasm_instance_exports');
+ _instance_new =
+ _lib.lookupFunction<NativeWasmerInstanceNewFn, WasmerInstanceNewFn>(
+ 'wasm_instance_new');
_memory_data =
_lib.lookupFunction<NativeWasmerMemoryDataFn, WasmerMemoryDataFn>(
- 'wasmer_memory_data');
- _memory_data_length = _lib.lookupFunction<NativeWasmerMemoryDataLengthFn,
- WasmerMemoryDataLengthFn>('wasmer_memory_data_length');
+ 'wasm_memory_data');
+ _memory_data_size = _lib.lookupFunction<NativeWasmerMemoryDataSizeFn,
+ WasmerMemoryDataSizeFn>('wasm_memory_data_size');
+ _memory_delete =
+ _lib.lookupFunction<NativeWasmerMemoryDeleteFn, WasmerMemoryDeleteFn>(
+ 'wasm_memory_delete');
+ _memory_grow =
+ _lib.lookupFunction<NativeWasmerMemoryGrowFn, WasmerMemoryGrowFn>(
+ 'wasm_memory_grow');
+ _memory_new =
+ _lib.lookupFunction<NativeWasmerMemoryNewFn, WasmerMemoryNewFn>(
+ 'wasm_memory_new');
+ _memory_size =
+ _lib.lookupFunction<NativeWasmerMemorySizeFn, WasmerMemorySizeFn>(
+ 'wasm_memory_size');
+ _memorytype_delete = _lib.lookupFunction<NativeWasmerMemorytypeDeleteFn,
+ WasmerMemorytypeDeleteFn>('wasm_memorytype_delete');
+ _memorytype_new =
+ _lib.lookupFunction<NativeWasmerMemorytypeNewFn, WasmerMemorytypeNewFn>(
+ 'wasm_memorytype_new');
+ _module_delete =
+ _lib.lookupFunction<NativeWasmerModuleDeleteFn, WasmerModuleDeleteFn>(
+ 'wasm_module_delete');
+ _module_exports =
+ _lib.lookupFunction<NativeWasmerModuleExportsFn, WasmerModuleExportsFn>(
+ 'wasm_module_exports');
+ _module_imports =
+ _lib.lookupFunction<NativeWasmerModuleImportsFn, WasmerModuleImportsFn>(
+ 'wasm_module_imports');
+ _module_new =
+ _lib.lookupFunction<NativeWasmerModuleNewFn, WasmerModuleNewFn>(
+ 'wasm_module_new');
+ _store_delete =
+ _lib.lookupFunction<NativeWasmerStoreDeleteFn, WasmerStoreDeleteFn>(
+ 'wasm_store_delete');
+ _store_new = _lib.lookupFunction<NativeWasmerStoreNewFn, WasmerStoreNewFn>(
+ 'wasm_store_new');
+ _trap_delete =
+ _lib.lookupFunction<NativeWasmerTrapDeleteFn, WasmerTrapDeleteFn>(
+ 'wasm_trap_delete');
+ _valtype_delete =
+ _lib.lookupFunction<NativeWasmerValtypeDeleteFn, WasmerValtypeDeleteFn>(
+ 'wasm_valtype_delete');
+ _valtype_kind =
+ _lib.lookupFunction<NativeWasmerValtypeKindFn, WasmerValtypeKindFn>(
+ 'wasm_valtype_kind');
+ _valtype_vec_delete = _lib.lookupFunction<NativeWasmerValtypeVecDeleteFn,
+ WasmerValtypeVecDeleteFn>('wasm_valtype_vec_delete');
+ _valtype_vec_new =
+ _lib.lookupFunction<NativeWasmerValtypeVecNewFn, WasmerValtypeVecNewFn>(
+ 'wasm_valtype_vec_new');
+ _valtype_vec_new_empty = _lib.lookupFunction<
+ NativeWasmerValtypeVecNewEmptyFn,
+ WasmerValtypeVecNewEmptyFn>('wasm_valtype_vec_new_empty');
+ _valtype_vec_new_uninitialized = _lib.lookupFunction<
+ NativeWasmerValtypeVecNewUninitializedFn,
+ WasmerValtypeVecNewUninitializedFn>(
+ 'wasm_valtype_vec_new_uninitialized');
+
+ _engine = _engine_new();
}
- Pointer<WasmerModule> compile(Uint8List data) {
+ Pointer<WasmerStore> newStore() {
+ return _store_new(_engine);
+ }
+
+ Pointer<WasmerModule> compile(Pointer<WasmerStore> store, Uint8List data) {
var dataPtr = allocate<Uint8>(count: data.length);
for (int i = 0; i < data.length; ++i) {
dataPtr[i] = data[i];
}
+ var dataVec = allocate<WasmerByteVec>();
+ dataVec.ref.data = dataPtr;
+ dataVec.ref.length = data.length;
- var modulePtrPtr = allocate<Pointer<WasmerModule>>();
- int result = _compile(modulePtrPtr, dataPtr, data.length);
- Pointer<WasmerModule> modulePtr = modulePtrPtr.value;
+ var modulePtr = _module_new(store, dataVec);
- free(modulePtrPtr);
free(dataPtr);
+ free(dataVec);
- if (result != WasmerResultOk) {
+ if (modulePtr == nullptr) {
throw Exception("Wasm module compile failed");
}
return modulePtr;
}
- String _callStringWrapperFunction(Function fn, dynamic arg) {
- var strPtr = allocate<WasmerByteArray>();
- fn(arg, strPtr);
- var str = strPtr.ref.string;
- free(strPtr);
- return str;
- }
-
List<WasmExportDescriptor> exportDescriptors(Pointer<WasmerModule> module) {
- var exportsPtrPtr = allocate<Pointer<WasmerExportDescriptors>>();
- _export_descriptors(module, exportsPtrPtr);
- Pointer<WasmerExportDescriptors> exportsPtr = exportsPtrPtr.value;
- free(exportsPtrPtr);
- var n = _export_descriptors_len(exportsPtr);
+ var exportsVec = allocate<WasmerExporttypeVec>();
+ _module_exports(module, exportsVec);
var exps = <WasmExportDescriptor>[];
- for (var i = 0; i < n; ++i) {
- var exp = _export_descriptors_get(exportsPtr, i);
- exps.add(WasmExportDescriptor(_export_descriptor_kind(exp),
- _callStringWrapperFunction(_export_descriptor_name_ptr, exp)));
+ for (var i = 0; i < exportsVec.ref.length; ++i) {
+ var exp = exportsVec.ref.data[i];
+ var extern = _exporttype_type(exp);
+ var kind = _externtype_kind(extern);
+ var fnType = kind == WasmerExternKindFunction
+ ? _externtype_as_functype(extern)
+ : nullptr;
+ exps.add(WasmExportDescriptor(
+ kind, _exporttype_name(exp).ref.toString(), fnType));
}
- _export_descriptors_destroy(exportsPtr);
+ free(exportsVec);
return exps;
}
List<WasmImportDescriptor> importDescriptors(Pointer<WasmerModule> module) {
- var importsPtrPtr = allocate<Pointer<WasmerImportDescriptors>>();
- _import_descriptors(module, importsPtrPtr);
- Pointer<WasmerImportDescriptors> importsPtr = importsPtrPtr.value;
- free(importsPtrPtr);
-
- var n = _import_descriptors_len(importsPtr);
+ var importsVec = allocate<WasmerImporttypeVec>();
+ _module_imports(module, importsVec);
var imps = <WasmImportDescriptor>[];
- for (var i = 0; i < n; ++i) {
- var imp = _import_descriptors_get(importsPtr, i);
+ for (var i = 0; i < importsVec.ref.length; ++i) {
+ var imp = importsVec.ref.data[i];
+ var extern = _importtype_type(imp);
+ var kind = _externtype_kind(extern);
+ var fnType = kind == WasmerExternKindFunction
+ ? _externtype_as_functype(extern)
+ : nullptr;
imps.add(WasmImportDescriptor(
- _import_descriptor_kind(imp),
- _callStringWrapperFunction(_import_descriptor_module_name_ptr, imp),
- _callStringWrapperFunction(_import_descriptor_name_ptr, imp)));
+ kind,
+ _importtype_module(imp).ref.toString(),
+ _importtype_name(imp).ref.toString(),
+ fnType));
}
- _import_descriptors_destroy(importsPtr);
+ free(importsVec);
return imps;
}
- Pointer<WasmerInstance> instantiate(Pointer<WasmerModule> module,
- Pointer<WasmerImport> imports, int numImports) {
- var instancePtrPtr = allocate<Pointer<WasmerInstance>>();
- int result = _instantiate(module, instancePtrPtr, imports, numImports);
- Pointer<WasmerInstance> instancePtr = instancePtrPtr.value;
- free(instancePtrPtr);
+ Pointer<WasmerInstance> instantiate(
+ Pointer<WasmerStore> store,
+ Pointer<WasmerModule> module,
+ Pointer<Pointer<WasmerExtern>> imports,
+ int numImports) {
+ var importsVec = allocate<WasmerImporttypeVec>();
+ _module_imports(module, importsVec);
+ if (importsVec.ref.length != numImports) {
+ throw Exception(
+ "Wrong number of imports. Expected ${importsVec.ref.length} but " +
+ "found $numImports.");
+ }
+ free(importsVec);
- if (result != WasmerResultOk) {
+ var instancePtr = _instance_new(store, module, imports, nullptr);
+ if (instancePtr == nullptr) {
throw Exception("Wasm module instantiation failed");
}
return instancePtr;
}
- List<Pointer<WasmerExport>> exports(Pointer<WasmerInstance> instancePtr) {
- var exportsPtrPtr = allocate<Pointer<WasmerExports>>();
- _instance_exports(instancePtr, exportsPtrPtr);
- Pointer<WasmerExports> exportsPtr = exportsPtrPtr.value;
- free(exportsPtrPtr);
-
- var n = _exports_len(exportsPtr);
- var exps = <Pointer<WasmerExport>>[];
- for (var i = 0; i < n; ++i) {
- exps.add(_exports_get(exportsPtr, i));
- }
- return exps;
+ Pointer<WasmerExternVec> exports(Pointer<WasmerInstance> instancePtr) {
+ var exports = allocate<WasmerExternVec>();
+ _instance_exports(instancePtr, exports);
+ return exports;
}
- int exportKind(Pointer<WasmerExport> export) {
- return _export_kind(export);
+ int externKind(Pointer<WasmerExtern> extern) {
+ return _extern_kind(extern);
}
- String exportName(Pointer<WasmerExport> export) {
- return _callStringWrapperFunction(_export_name_ptr, export);
+ Pointer<WasmerFunc> externToFunction(Pointer<WasmerExtern> extern) {
+ return _extern_as_func(extern);
}
- Pointer<WasmerExportFunc> exportToFunction(Pointer<WasmerExport> export) {
- return _export_to_func(export);
- }
-
- List<int> getArgTypes(Pointer<WasmerExportFunc> func) {
+ List<int> getArgTypes(Pointer<WasmerFunctype> funcType) {
var types = <int>[];
- var nPtr = allocate<Uint32>();
- var result = _export_func_params_arity(func, nPtr);
- if (result != WasmerResultOk) {
- free(nPtr);
- throw Exception("Failed to get number of WASM function args");
+ var args = _functype_params(funcType);
+ for (var i = 0; i < args.ref.length; ++i) {
+ types.add(_valtype_kind(args.ref.data[i]));
}
- var n = nPtr.value;
- free(nPtr);
- var argsPtr = allocate<Uint32>(count: n);
- result = _export_func_params(func, argsPtr, n);
- if (result != WasmerResultOk) {
- free(argsPtr);
- throw Exception("Failed to get WASM function args");
- }
- for (var i = 0; i < n; ++i) {
- types.add(argsPtr[i]);
- }
- free(argsPtr);
return types;
}
- int getReturnType(Pointer<WasmerExportFunc> func) {
- var nPtr = allocate<Uint32>();
- var result = _export_func_returns_arity(func, nPtr);
- if (result != WasmerResultOk) {
- free(nPtr);
- throw Exception("Failed to get number of WASM function returns");
- }
- var n = nPtr.value;
- free(nPtr);
- if (n == 0) {
- return WasmerValueTagVoid;
- } else if (n > 1) {
+ int getReturnType(Pointer<WasmerFunctype> funcType) {
+ var rets = _functype_results(funcType);
+ if (rets.ref.length == 0) {
+ return WasmerValKindVoid;
+ } else if (rets.ref.length > 1) {
throw Exception("Multiple return values are not supported");
}
- var returnsPtr = allocate<Uint32>();
- result = _export_func_returns(func, returnsPtr, 1);
- if (result != WasmerResultOk) {
- free(returnsPtr);
- throw Exception("Failed to get WASM function args");
- }
- var type = returnsPtr.value;
- free(returnsPtr);
- return type;
+ return _valtype_kind(rets.ref.data[0]);
}
- void call(Pointer<WasmerExportFunc> func, Pointer<WasmerValue> args,
- int numArgs, Pointer<WasmerValue> results, int numResults) {
- var result = _export_func_call(func, args, numArgs, results, numArgs);
- if (result != WasmerResultOk) {
- throw Exception("Failed to call WASM function");
- }
+ void call(Pointer<WasmerFunc> func, Pointer<WasmerVal> args,
+ Pointer<WasmerVal> results) {
+ _func_call(func, args, results);
}
- Pointer<WasmerMemory> exportToMemory(Pointer<WasmerExport> export) {
- var memPtrPtr = allocate<Pointer<WasmerMemory>>();
- var result = _export_to_memory(export, memPtrPtr);
- if (result != WasmerResultOk) {
- free(memPtrPtr);
- throw Exception("Failed to get exported memory");
- }
- Pointer<WasmerMemory> memPtr = memPtrPtr.value;
- free(memPtrPtr);
- return memPtr;
+ Pointer<WasmerMemory> externToMemory(Pointer<WasmerExtern> extern) {
+ return _extern_as_memory(extern);
}
- Pointer<WasmerMemory> newMemory(int pages, int? maxPages) {
- var memPtrPtr = allocate<Pointer<WasmerMemory>>();
+ Pointer<WasmerMemory> newMemory(
+ Pointer<WasmerStore> store, int pages, int? maxPages) {
var limPtr = allocate<WasmerLimits>();
limPtr.ref.min = pages;
- limPtr.ref.has_max = maxPages != null ? 1 : 0;
- limPtr.ref.max = maxPages ?? 0;
- var result = _memory_new_ptr(memPtrPtr, limPtr);
+ limPtr.ref.max = maxPages ?? wasm_limits_max_default;
+ var memType = _memorytype_new(limPtr);
free(limPtr);
- if (result != WasmerResultOk) {
- free(memPtrPtr);
+ Pointer<WasmerMemory> memPtr = _memory_new(store, memType);
+
+ if (memPtr == nullptr) {
throw Exception("Failed to create memory");
}
- Pointer<WasmerMemory> memPtr = memPtrPtr.value;
- free(memPtrPtr);
return memPtr;
}
void growMemory(Pointer<WasmerMemory> memory, int deltaPages) {
var result = _memory_grow(memory, deltaPages);
- if (result != WasmerResultOk) {
+ if (result == 0) {
throw Exception("Failed to grow memory");
}
}
int memoryLength(Pointer<WasmerMemory> memory) {
- return _memory_length(memory);
+ return _memory_size(memory);
}
Uint8List memoryView(Pointer<WasmerMemory> memory) {
- return _memory_data(memory).asTypedList(_memory_data_length(memory));
+ return _memory_data(memory).asTypedList(_memory_data_size(memory));
}
}
diff --git a/pkg/wasm/lib/src/tools/generate_ffi_boilerplate.py b/pkg/wasm/lib/src/tools/generate_ffi_boilerplate.py
new file mode 100755
index 0000000..cf9621c
--- /dev/null
+++ b/pkg/wasm/lib/src/tools/generate_ffi_boilerplate.py
@@ -0,0 +1,340 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# This is an ad-hoc script that generates FFI boilderplate for the Wasmer API.
+# The relevant functions from wasm.h have been copied below, and are parsed to
+# figure out the FFI boilerplate. The results are inserted into
+# wasmer_api_template.dart and runtime_template.dart to generate wasmer_api.dart
+# and runtime.dart.
+
+# Usage:
+# generate_ffi_boilerplate.py && dartfmt -w ../runtime.dart ../wasmer_api.dart
+
+import os
+import re
+
+predefTypes = {}
+opaqueTypes = set()
+vecTypes = {}
+fns = []
+unusedFns = set()
+
+
+def camel(t):
+ return ''.join([s[0].upper() + s[1:] for s in t.split('_')])
+
+
+def ptrWrap(t, n):
+ for i in range(n):
+ t = 'Pointer<%s>' % t
+ return t
+
+
+def getDartType(t, i):
+ if t in predefTypes:
+ t = predefTypes[t][i]
+ else:
+ assert (t.startswith('wasm_') and t.endswith('_t'))
+ t = 'Wasmer' + camel(t[5:-2])
+ return t
+
+
+def dartArgType(a, i):
+ n, t = a
+ j = i if n == 0 else 0
+ return ptrWrap(getDartType(t, j), n)
+
+
+def dartFnType(r, a, i):
+ return '%s Function(%s)' % (dartArgType(r, i), ', '.join(
+ [dartArgType(t, i) for t in a]))
+
+
+def dartFnTypeName(n):
+ assert (n.startswith('wasm_'))
+ return camel(n[5:])
+
+
+def dartFnMembName(n):
+ assert (n.startswith('wasm_'))
+ return n[4:]
+
+
+def nativeTypeToFfi(n):
+ return getDartType(n, 0)
+
+
+def nativeTypeToDart(n):
+ return getDartType(n, 1)
+
+
+def getFns():
+ for name, retType, args in sorted(fns):
+ if name not in unusedFns:
+ yield name, retType, args
+
+
+opaqueTypeTemplate = '''// wasm_%s_t
+class Wasmer%s extends Struct {}'''
+
+vecTypeTemplate = '''// wasm_%s_vec_t
+class Wasmer%sVec extends Struct {
+ @Uint64()
+ external int length;
+
+ external Pointer<%s> data;
+
+ %s
+}'''
+
+byteVecToStringTemplate = '''
+ Uint8List get list => data.asTypedList(length);
+ String toString() => utf8.decode(list);
+'''
+
+fnApiTemplate = '''
+// %s
+typedef NativeWasmer%sFn = %s;
+typedef Wasmer%sFn = %s;'''
+
+
+def getWasmerApi():
+ return ('\n\n'.join([
+ opaqueTypeTemplate % (t, camel(t)) for t in sorted(opaqueTypes)
+ ]) + '\n\n' + '\n\n'.join([
+ vecTypeTemplate %
+ (t, camel(t),
+ ('Pointer<%s>' if ptr else '%s') % nativeTypeToFfi('wasm_%s_t' % t),
+ (byteVecToStringTemplate if t == 'byte' else ''))
+ for t, ptr in sorted(vecTypes.items())
+ ]) + '\n' + '\n'.join([
+ fnApiTemplate %
+ (name, dartFnTypeName(name), dartFnType(retType, args, 0),
+ dartFnTypeName(name), dartFnType(retType, args, 1))
+ for name, retType, args in getFns()
+ ]))
+
+
+def getRuntimeMemb():
+ return '\n'.join([
+ " late Wasmer%sFn %s;" % (dartFnTypeName(name), dartFnMembName(name))
+ for name, _, _ in getFns()
+ ])
+
+
+def getRuntimeLoad():
+ return '\n'.join([
+ " %s = _lib.lookupFunction<NativeWasmer%sFn, Wasmer%sFn>('%s');" %
+ (dartFnMembName(name), dartFnTypeName(name), dartFnTypeName(name), name)
+ for name, _, _ in getFns()
+ ])
+
+
+def predefinedType(nativeType, ffiType, dartType):
+ predefTypes[nativeType] = (ffiType, dartType)
+
+
+def match(r, s):
+ return r.fullmatch(s).groups()
+
+
+reReplace = [(re.compile('\\b%s\\b' % k), v) for k, v in [
+ ('const', ''),
+ ('own', ''),
+ ('WASM_API_EXTERN', ''),
+ ('wasm_name_t', 'wasm_byte_vec_t'),
+ ('wasm_memory_pages_t', 'uint32_t'),
+ ('wasm_externkind_t', 'uint8_t'),
+ ('wasm_valkind_t', 'uint8_t'),
+]]
+reWord = re.compile(r'\b\w+\b')
+
+
+def parseType(s):
+ for r, t in reReplace:
+ s = r.sub(t, s)
+ s = s.strip()
+ numWords = len(reWord.findall(s))
+ assert (numWords == 1 or numWords == 2)
+ if numWords == 2:
+ i = 0
+
+ def lastWordRepl(m):
+ nonlocal i
+ i += 1
+ return '' if i == numWords else m.group(0)
+
+ s = reWord.sub(lastWordRepl, s)
+ numPtr = 0
+ while True:
+ s = s.strip()
+ if s.endswith('*'):
+ s = s[:-1]
+ elif s.endswith('[]'):
+ s = s[:-2]
+ else:
+ break
+ numPtr += 1
+ return (numPtr, s)
+
+
+reFnSig = re.compile(r'(.*) ([^ ]*)\((.*)\);?')
+
+
+def addFn(sig):
+ ret, name, argpack = match(reFnSig, sig)
+ retType = parseType(ret)
+ args = [parseType(a) for a in argpack.split(',') if len(a.strip()) > 0]
+ for _, t in args + [retType]:
+ if t not in predefTypes and t[5:-2] not in opaqueTypes and t[
+ 5:-6] not in vecTypes:
+ print('Missing type: ' + t)
+ fns.append((name, retType, args))
+
+
+def declareOwn(name):
+ opaqueTypes.add(name)
+ addFn('void wasm_%s_delete(wasm_%s_t*)' % (name, name))
+
+
+def declareVec(name, storePtr):
+ vecTypes[name] = storePtr
+ addFn('void wasm_%s_vec_new_empty(wasm_%s_vec_t* out)' % (name, name))
+ addFn('void wasm_%s_vec_new_uninitialized(wasm_%s_vec_t* out, size_t)' %
+ (name, name))
+ addFn('void wasm_%s_vec_new(wasm_%s_vec_t* out, size_t, wasm_%s_t %s[])' %
+ (name, name, name, '*' if storePtr else ''))
+ addFn('void wasm_%s_vec_copy(wasm_%s_vec_t* out, const wasm_%s_vec_t*)' %
+ (name, name, name))
+ addFn('void wasm_%s_vec_delete(wasm_%s_vec_t*)' % (name, name))
+
+
+def declareType(name, withCopy=True):
+ declareOwn(name)
+ declareVec(name, True)
+ if withCopy:
+ addFn('wasm_%s_t* wasm_%s_copy(wasm_%s_t*)' % (name, name, name))
+
+
+predefinedType('void', 'Void', 'void')
+predefinedType('bool', 'Uint8', 'int')
+predefinedType('byte_t', 'Uint8', 'int')
+predefinedType('wasm_byte_t', 'Uint8', 'int')
+predefinedType('uint8_t', 'Uint8', 'int')
+predefinedType('uint16_t', 'Uint16', 'int')
+predefinedType('uint32_t', 'Uint32', 'int')
+predefinedType('uint64_t', 'Uint64', 'int')
+predefinedType('size_t', 'Uint64', 'int')
+predefinedType('int8_t', 'Int8', 'int')
+predefinedType('int16_t', 'Int16', 'int')
+predefinedType('int32_t', 'Int32', 'int')
+predefinedType('int64_t', 'Int64', 'int')
+predefinedType('float32_t', 'Float32', 'double')
+predefinedType('float64_t', 'Float64', 'double')
+predefinedType('wasm_limits_t', 'WasmerLimits', 'WasmerLimits')
+predefinedType('wasm_val_t', 'WasmerVal', 'WasmerVal')
+
+declareOwn('engine')
+declareOwn('store')
+declareVec('byte', False)
+declareVec('val', False)
+declareType('importtype')
+declareType('exporttype')
+declareType('valtype')
+declareType('extern', False)
+
+# These are actually DECLARE_TYPE, but we don't need the vec or copy stuff.
+declareOwn('memorytype')
+declareOwn('externtype')
+declareOwn('functype')
+
+# These are actually DECLARE_SHARABLE_REF, but we don't need the ref stuff.
+declareOwn('module')
+
+# These are actually DECLARE_REF, but we don't need the ref stuff.
+declareOwn('memory')
+declareOwn('trap')
+declareOwn('instance')
+declareOwn('func')
+
+rawFns = '''
+WASM_API_EXTERN own wasm_engine_t* wasm_engine_new();
+WASM_API_EXTERN own wasm_store_t* wasm_store_new(wasm_engine_t*);
+WASM_API_EXTERN own wasm_memorytype_t* wasm_memorytype_new(const wasm_limits_t*);
+WASM_API_EXTERN own wasm_module_t* wasm_module_new(wasm_store_t*, const wasm_byte_vec_t* binary);
+WASM_API_EXTERN void wasm_module_imports(const wasm_module_t*, own wasm_importtype_vec_t* out);
+WASM_API_EXTERN const wasm_name_t* wasm_importtype_module(const wasm_importtype_t*);
+WASM_API_EXTERN const wasm_name_t* wasm_importtype_name(const wasm_importtype_t*);
+WASM_API_EXTERN const wasm_externtype_t* wasm_importtype_type(const wasm_importtype_t*);
+WASM_API_EXTERN wasm_functype_t* wasm_externtype_as_functype(wasm_externtype_t*);
+WASM_API_EXTERN void wasm_module_exports(const wasm_module_t*, own wasm_exporttype_vec_t* out);
+WASM_API_EXTERN const wasm_name_t* wasm_exporttype_name(const wasm_exporttype_t*);
+WASM_API_EXTERN const wasm_externtype_t* wasm_exporttype_type(const wasm_exporttype_t*);
+WASM_API_EXTERN wasm_externkind_t wasm_externtype_kind(const wasm_externtype_t*);
+WASM_API_EXTERN own wasm_instance_t* wasm_instance_new(wasm_store_t*, const wasm_module_t*, const wasm_extern_t* const imports[], own wasm_trap_t**);
+WASM_API_EXTERN void wasm_instance_exports(const wasm_instance_t*, own wasm_extern_vec_t* out);
+WASM_API_EXTERN own wasm_memory_t* wasm_memory_new(wasm_store_t*, const wasm_memorytype_t*);
+WASM_API_EXTERN byte_t* wasm_memory_data(wasm_memory_t*);
+WASM_API_EXTERN size_t wasm_memory_data_size(const wasm_memory_t*);
+WASM_API_EXTERN wasm_memory_pages_t wasm_memory_size(const wasm_memory_t*);
+WASM_API_EXTERN bool wasm_memory_grow(wasm_memory_t*, wasm_memory_pages_t delta);
+WASM_API_EXTERN wasm_externkind_t wasm_extern_kind(const wasm_extern_t*);
+WASM_API_EXTERN wasm_func_t* wasm_extern_as_func(wasm_extern_t*);
+WASM_API_EXTERN wasm_memory_t* wasm_extern_as_memory(wasm_extern_t*);
+WASM_API_EXTERN const wasm_valtype_vec_t* wasm_functype_params(const wasm_functype_t*);
+WASM_API_EXTERN const wasm_valtype_vec_t* wasm_functype_results(const wasm_functype_t*);
+WASM_API_EXTERN own wasm_trap_t* wasm_func_call(const wasm_func_t*, const wasm_val_t args[], wasm_val_t results[]);
+WASM_API_EXTERN wasm_valkind_t wasm_valtype_kind(const wasm_valtype_t*);
+'''
+for f in rawFns.split('\n'):
+ if len(f.strip()) > 0:
+ addFn(f)
+
+unusedFns = {
+ 'wasm_byte_vec_copy',
+ 'wasm_exporttype_delete',
+ 'wasm_exporttype_copy',
+ 'wasm_exporttype_vec_copy',
+ 'wasm_extern_vec_copy',
+ 'wasm_importtype_delete',
+ 'wasm_importtype_copy',
+ 'wasm_importtype_vec_copy',
+ 'wasm_val_vec_copy',
+ 'wasm_val_vec_delete',
+ 'wasm_val_vec_new',
+ 'wasm_val_vec_new_empty',
+ 'wasm_val_vec_new_uninitialized',
+ 'wasm_valtype_copy',
+ 'wasm_valtype_vec_copy',
+}
+
+genDoc = '''// This file has been automatically generated. Please do not edit it manually.
+// To regenerate the file, use the following command
+// "generate_ffi_boilerplate.py".'''
+
+thisDir = os.path.dirname(os.path.abspath(__file__))
+
+
+def readFile(filename):
+ with open(os.path.abspath(os.path.join(thisDir, filename)), 'r') as f:
+ return f.read()
+
+
+def writeFile(filename, content):
+ with open(os.path.abspath(os.path.join(thisDir, '..', filename)), 'w') as f:
+ f.write(content)
+
+
+wasmerApiText = readFile('wasmer_api_template.dart')
+wasmerApiText = wasmerApiText.replace('/* <WASMER_API> */', getWasmerApi())
+wasmerApiText = wasmerApiText.replace('/* <GEN_DOC> */', genDoc)
+writeFile('wasmer_api.dart', wasmerApiText)
+
+runtimeText = readFile('runtime_template.dart')
+runtimeText = runtimeText.replace('/* <RUNTIME_MEMB> */', getRuntimeMemb())
+runtimeText = runtimeText.replace('/* <RUNTIME_LOAD> */', getRuntimeLoad())
+runtimeText = runtimeText.replace('/* <GEN_DOC> */', genDoc)
+writeFile('runtime.dart', runtimeText)
diff --git a/pkg/wasm/lib/src/tools/runtime_template.dart b/pkg/wasm/lib/src/tools/runtime_template.dart
new file mode 100644
index 0000000..d403882
--- /dev/null
+++ b/pkg/wasm/lib/src/tools/runtime_template.dart
@@ -0,0 +1,243 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/* <GEN_DOC> */
+
+import 'dart:convert';
+import 'dart:ffi';
+import 'dart:io';
+import 'dart:typed_data';
+import 'package:ffi/ffi.dart';
+import 'package:path/path.dart' as path;
+import 'wasmer_api.dart';
+
+class WasmImportDescriptor {
+ int kind;
+ String moduleName;
+ String name;
+ Pointer<WasmerFunctype> funcType;
+ WasmImportDescriptor(this.kind, this.moduleName, this.name, this.funcType);
+}
+
+class WasmExportDescriptor {
+ int kind;
+ String name;
+ Pointer<WasmerFunctype> funcType;
+ WasmExportDescriptor(this.kind, this.name, this.funcType);
+}
+
+class WasmRuntime {
+ static WasmRuntime? _inst;
+
+ DynamicLibrary _lib;
+ late Pointer<WasmerEngine> _engine;
+/* <RUNTIME_MEMB> */
+
+ factory WasmRuntime() {
+ WasmRuntime inst = _inst ?? WasmRuntime._init();
+ _inst = inst;
+ return inst;
+ }
+
+ static String _getLibName() {
+ if (Platform.isMacOS) return "libwasmer.dylib";
+ if (Platform.isLinux) return "libwasmer.so";
+ // TODO(dartbug.com/37882): Support more platforms.
+ throw Exception("Wasm not currently supported on this platform");
+ }
+
+ static String _getLibDir() {
+ // The common case, and how cli_util.dart computes the Dart SDK directory,
+ // path.dirname called twice on Platform.resolvedExecutable.
+ var commonLibDir = path.join(
+ path.absolute(path.dirname(path.dirname(Platform.resolvedExecutable))),
+ 'bin',
+ 'third_party',
+ 'wasmer');
+ if (Directory(commonLibDir).existsSync()) {
+ return commonLibDir;
+ }
+
+ // This is the less common case where the user is in the checked out Dart
+ // SDK, and is executing dart via:
+ // ./out/ReleaseX64/dart ...
+ var checkedOutLibDir = path.join(
+ path.absolute(path.dirname(Platform.resolvedExecutable)),
+ 'dart-sdk',
+ 'bin',
+ 'third_party',
+ 'wasmer');
+ if (Directory(checkedOutLibDir).existsSync()) {
+ return checkedOutLibDir;
+ }
+
+ // If neither returned above, we return the common case:
+ return commonLibDir;
+ }
+
+ WasmRuntime._init()
+ : _lib = DynamicLibrary.open(path.join(_getLibDir(), _getLibName())) {
+/* <RUNTIME_LOAD> */
+
+ _engine = _engine_new();
+ }
+
+ Pointer<WasmerStore> newStore() {
+ return _store_new(_engine);
+ }
+
+ Pointer<WasmerModule> compile(Pointer<WasmerStore> store, Uint8List data) {
+ var dataPtr = allocate<Uint8>(count: data.length);
+ for (int i = 0; i < data.length; ++i) {
+ dataPtr[i] = data[i];
+ }
+ var dataVec = allocate<WasmerByteVec>();
+ dataVec.ref.data = dataPtr;
+ dataVec.ref.length = data.length;
+
+ var modulePtr = _module_new(store, dataVec);
+
+ free(dataPtr);
+ free(dataVec);
+
+ if (modulePtr == nullptr) {
+ throw Exception("Wasm module compile failed");
+ }
+
+ return modulePtr;
+ }
+
+ List<WasmExportDescriptor> exportDescriptors(Pointer<WasmerModule> module) {
+ var exportsVec = allocate<WasmerExporttypeVec>();
+ _module_exports(module, exportsVec);
+ var exps = <WasmExportDescriptor>[];
+ for (var i = 0; i < exportsVec.ref.length; ++i) {
+ var exp = exportsVec.ref.data[i];
+ var extern = _exporttype_type(exp);
+ var kind = _externtype_kind(extern);
+ var fnType = kind == WasmerExternKindFunction
+ ? _externtype_as_functype(extern)
+ : nullptr;
+ exps.add(WasmExportDescriptor(
+ kind, _exporttype_name(exp).ref.toString(), fnType));
+ }
+ free(exportsVec);
+ return exps;
+ }
+
+ List<WasmImportDescriptor> importDescriptors(Pointer<WasmerModule> module) {
+ var importsVec = allocate<WasmerImporttypeVec>();
+ _module_imports(module, importsVec);
+ var imps = <WasmImportDescriptor>[];
+ for (var i = 0; i < importsVec.ref.length; ++i) {
+ var imp = importsVec.ref.data[i];
+ var extern = _importtype_type(imp);
+ var kind = _externtype_kind(extern);
+ var fnType = kind == WasmerExternKindFunction
+ ? _externtype_as_functype(extern)
+ : nullptr;
+ imps.add(WasmImportDescriptor(
+ kind,
+ _importtype_module(imp).ref.toString(),
+ _importtype_name(imp).ref.toString(),
+ fnType));
+ }
+ free(importsVec);
+ return imps;
+ }
+
+ Pointer<WasmerInstance> instantiate(
+ Pointer<WasmerStore> store,
+ Pointer<WasmerModule> module,
+ Pointer<Pointer<WasmerExtern>> imports,
+ int numImports) {
+ var importsVec = allocate<WasmerImporttypeVec>();
+ _module_imports(module, importsVec);
+ if (importsVec.ref.length != numImports) {
+ throw Exception(
+ "Wrong number of imports. Expected ${importsVec.ref.length} but " +
+ "found $numImports.");
+ }
+ free(importsVec);
+
+ var instancePtr = _instance_new(store, module, imports, nullptr);
+ if (instancePtr == nullptr) {
+ throw Exception("Wasm module instantiation failed");
+ }
+
+ return instancePtr;
+ }
+
+ Pointer<WasmerExternVec> exports(Pointer<WasmerInstance> instancePtr) {
+ var exports = allocate<WasmerExternVec>();
+ _instance_exports(instancePtr, exports);
+ return exports;
+ }
+
+ int externKind(Pointer<WasmerExtern> extern) {
+ return _extern_kind(extern);
+ }
+
+ Pointer<WasmerFunc> externToFunction(Pointer<WasmerExtern> extern) {
+ return _extern_as_func(extern);
+ }
+
+ List<int> getArgTypes(Pointer<WasmerFunctype> funcType) {
+ var types = <int>[];
+ var args = _functype_params(funcType);
+ for (var i = 0; i < args.ref.length; ++i) {
+ types.add(_valtype_kind(args.ref.data[i]));
+ }
+ return types;
+ }
+
+ int getReturnType(Pointer<WasmerFunctype> funcType) {
+ var rets = _functype_results(funcType);
+ if (rets.ref.length == 0) {
+ return WasmerValKindVoid;
+ } else if (rets.ref.length > 1) {
+ throw Exception("Multiple return values are not supported");
+ }
+ return _valtype_kind(rets.ref.data[0]);
+ }
+
+ void call(Pointer<WasmerFunc> func, Pointer<WasmerVal> args,
+ Pointer<WasmerVal> results) {
+ _func_call(func, args, results);
+ }
+
+ Pointer<WasmerMemory> externToMemory(Pointer<WasmerExtern> extern) {
+ return _extern_as_memory(extern);
+ }
+
+ Pointer<WasmerMemory> newMemory(
+ Pointer<WasmerStore> store, int pages, int? maxPages) {
+ var limPtr = allocate<WasmerLimits>();
+ limPtr.ref.min = pages;
+ limPtr.ref.max = maxPages ?? wasm_limits_max_default;
+ var memType = _memorytype_new(limPtr);
+ free(limPtr);
+ Pointer<WasmerMemory> memPtr = _memory_new(store, memType);
+
+ if (memPtr == nullptr) {
+ throw Exception("Failed to create memory");
+ }
+ return memPtr;
+ }
+
+ void growMemory(Pointer<WasmerMemory> memory, int deltaPages) {
+ var result = _memory_grow(memory, deltaPages);
+ if (result == 0) {
+ throw Exception("Failed to grow memory");
+ }
+ }
+
+ int memoryLength(Pointer<WasmerMemory> memory) {
+ return _memory_size(memory);
+ }
+
+ Uint8List memoryView(Pointer<WasmerMemory> memory) {
+ return _memory_data(memory).asTypedList(_memory_data_size(memory));
+ }
+}
diff --git a/pkg/wasm/lib/src/tools/wasmer_api_template.dart b/pkg/wasm/lib/src/tools/wasmer_api_template.dart
new file mode 100644
index 0000000..6a77171
--- /dev/null
+++ b/pkg/wasm/lib/src/tools/wasmer_api_template.dart
@@ -0,0 +1,103 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/* <GEN_DOC> */
+
+import 'dart:convert';
+import 'dart:ffi';
+import 'dart:typed_data';
+
+// wasm_valkind_enum
+const int WasmerValKindI32 = 0;
+const int WasmerValKindI64 = 1;
+const int WasmerValKindF32 = 2;
+const int WasmerValKindF64 = 3;
+// The void tag is not part of the C API. It's used to represent the return type
+// of a void function.
+const int WasmerValKindVoid = -1;
+
+// wasm_externkind_enum
+const int WasmerExternKindFunction = 0;
+const int WasmerExternKindGlobal = 1;
+const int WasmerExternKindTable = 2;
+const int WasmerExternKindMemory = 3;
+
+String wasmerExternKindName(int kind) {
+ switch (kind) {
+ case WasmerExternKindFunction:
+ return "function";
+ case WasmerExternKindGlobal:
+ return "global";
+ case WasmerExternKindTable:
+ return "table";
+ case WasmerExternKindMemory:
+ return "memory";
+ default:
+ return "unknown";
+ }
+}
+
+String wasmerValKindName(int kind) {
+ switch (kind) {
+ case WasmerValKindI32:
+ return "int32";
+ case WasmerValKindI64:
+ return "int64";
+ case WasmerValKindF32:
+ return "float32";
+ case WasmerValKindF64:
+ return "float64";
+ case WasmerValKindVoid:
+ return "void";
+ default:
+ return "unknown";
+ }
+}
+
+// wasm_val_t
+class WasmerVal extends Struct {
+ // wasm_valkind_t
+ @Uint8()
+ external int kind;
+
+ // This is a union of int32_t, int64_t, float, and double. The kind determines
+ // which type it is. It's declared as an int64_t because that's large enough
+ // to hold all the types. We use ByteData to get the other types.
+ @Int64()
+ external int value;
+
+ int get _off32 => Endian.host == Endian.little ? 0 : 4;
+ int get i64 => value;
+ ByteData get _getterBytes => ByteData(8)..setInt64(0, value, Endian.host);
+ int get i32 => _getterBytes.getInt32(_off32, Endian.host);
+ double get f32 => _getterBytes.getFloat32(_off32, Endian.host);
+ double get f64 => _getterBytes.getFloat64(0, Endian.host);
+
+ set i64(int val) => value = val;
+ set _val(ByteData bytes) => value = bytes.getInt64(0, Endian.host);
+ set i32(int val) => _val = ByteData(8)..setInt32(_off32, val, Endian.host);
+ set f32(num val) =>
+ _val = ByteData(8)..setFloat32(_off32, val as double, Endian.host);
+ set f64(num val) =>
+ _val = ByteData(8)..setFloat64(0, val as double, Endian.host);
+
+ bool get isI32 => kind == WasmerValKindI32;
+ bool get isI64 => kind == WasmerValKindI64;
+ bool get isF32 => kind == WasmerValKindF32;
+ bool get isF64 => kind == WasmerValKindF64;
+}
+
+// wasmer_limits_t
+class WasmerLimits extends Struct {
+ @Uint32()
+ external int min;
+
+ @Uint32()
+ external int max;
+}
+
+// Default maximum, which indicates no upper limit.
+const int wasm_limits_max_default = 0xffffffff;
+
+/* <WASMER_API> */
diff --git a/pkg/wasm/lib/src/wasmer_api.dart b/pkg/wasm/lib/src/wasmer_api.dart
index 94dd651..ad8219d 100644
--- a/pkg/wasm/lib/src/wasmer_api.dart
+++ b/pkg/wasm/lib/src/wasmer_api.dart
@@ -2,116 +2,70 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// This file has been automatically generated. Please do not edit it manually.
+// To regenerate the file, use the following command
+// "generate_ffi_boilerplate.py".
+
import 'dart:convert';
import 'dart:ffi';
import 'dart:typed_data';
-// wasmer_result_t
-const int WasmerResultOk = 1;
-const int WasmerResultError = 2;
-
-// wasmer_value_tag
-const int WasmerValueTagI32 = 0;
-const int WasmerValueTagI64 = 1;
-const int WasmerValueTagF32 = 2;
-const int WasmerValueTagF64 = 3;
+// wasm_valkind_enum
+const int WasmerValKindI32 = 0;
+const int WasmerValKindI64 = 1;
+const int WasmerValKindF32 = 2;
+const int WasmerValKindF64 = 3;
// The void tag is not part of the C API. It's used to represent the return type
// of a void function.
-const int WasmerValueTagVoid = -1;
+const int WasmerValKindVoid = -1;
-// wasmer_import_export_kind
-const int WasmerImpExpKindFunction = 0;
-const int WasmerImpExpKindGlobal = 1;
-const int WasmerImpExpKindMemory = 2;
-const int WasmerImpExpKindTable = 3;
+// wasm_externkind_enum
+const int WasmerExternKindFunction = 0;
+const int WasmerExternKindGlobal = 1;
+const int WasmerExternKindTable = 2;
+const int WasmerExternKindMemory = 3;
-String wasmerImpExpKindName(int kind) {
+String wasmerExternKindName(int kind) {
switch (kind) {
- case WasmerImpExpKindFunction:
+ case WasmerExternKindFunction:
return "function";
- case WasmerImpExpKindGlobal:
+ case WasmerExternKindGlobal:
return "global";
- case WasmerImpExpKindMemory:
- return "memory";
- case WasmerImpExpKindTable:
+ case WasmerExternKindTable:
return "table";
+ case WasmerExternKindMemory:
+ return "memory";
default:
return "unknown";
}
}
-// wasmer_module_t
-class WasmerModule extends Struct {}
-
-// wasmer_instance_t
-class WasmerInstance extends Struct {}
-
-// wasmer_exports_t
-class WasmerExports extends Struct {}
-
-// wasmer_export_t
-class WasmerExport extends Struct {}
-
-// wasmer_export_descriptors_t
-class WasmerExportDescriptors extends Struct {}
-
-// wasmer_export_descriptor_t
-class WasmerExportDescriptor extends Struct {}
-
-// wasmer_export_func_t
-class WasmerExportFunc extends Struct {}
-
-// wasmer_import_descriptors_t
-class WasmerImportDescriptors extends Struct {}
-
-// wasmer_import_descriptor_t
-class WasmerImportDescriptor extends Struct {}
-
-// wasmer_memory_t
-class WasmerMemory extends Struct {}
-
-// wasmer_import_t
-class WasmerImport extends Struct {
- external Pointer<Uint8> module_name;
-
- @Uint32()
- external int module_name_length;
-
- external Pointer<Uint8> import_name;
-
- @Uint32()
- external int import_name_length;
-
- // wasmer_import_export_kind
- @Uint32()
- external int tag;
-
- // wasmer_import_export_value, which is a union of wasmer_import_func_t*,
- // wasmer_table_t*, wasmer_memory_t*, and wasmer_global_t*. The tag determines
- // which type it is.
- external Pointer<Void> value;
+String wasmerValKindName(int kind) {
+ switch (kind) {
+ case WasmerValKindI32:
+ return "int32";
+ case WasmerValKindI64:
+ return "int64";
+ case WasmerValKindF32:
+ return "float32";
+ case WasmerValKindF64:
+ return "float64";
+ case WasmerValKindVoid:
+ return "void";
+ default:
+ return "unknown";
+ }
}
-// wasmer_byte_array
-class WasmerByteArray extends Struct {
- external Pointer<Uint8> bytes;
+// wasm_val_t
+class WasmerVal extends Struct {
+ // wasm_valkind_t
+ @Uint8()
+ external int kind;
- @Uint32()
- external int length;
-
- Uint8List get list => bytes.asTypedList(length);
- String get string => utf8.decode(list);
-}
-
-// wasmer_value_t
-class WasmerValue extends Struct {
- // wasmer_value_tag
- @Uint32()
- external int tag;
-
- // wasmer_value, which is a union of int32_t, int64_t, float, and double. The
- // tag determines which type it is. It's declared as an int64_t because that's
- // large enough to hold all the types. We use ByteData to get the other types.
+ // This is a union of int32_t, int64_t, float, and double. The kind determines
+ // which type it is. It's declared as an int64_t because that's large enough
+ // to hold all the types. We use ByteData to get the other types.
@Int64()
external int value;
@@ -130,10 +84,10 @@
set f64(num val) =>
_val = ByteData(8)..setFloat64(0, val as double, Endian.host);
- bool get isI32 => tag == WasmerValueTagI32;
- bool get isI64 => tag == WasmerValueTagI64;
- bool get isF32 => tag == WasmerValueTagF32;
- bool get isF64 => tag == WasmerValueTagF64;
+ bool get isI32 => kind == WasmerValKindI32;
+ bool get isI64 => kind == WasmerValKindI64;
+ bool get isF32 => kind == WasmerValKindF32;
+ bool get isF64 => kind == WasmerValKindF64;
}
// wasmer_limits_t
@@ -141,196 +95,417 @@
@Uint32()
external int min;
- // bool
- @Uint8()
- external int has_max;
-
@Uint32()
external int max;
}
-// wasmer_compile
-typedef NativeWasmerCompileFn = Uint32 Function(
- Pointer<Pointer<WasmerModule>>, Pointer<Uint8>, Uint32);
-typedef WasmerCompileFn = int Function(
- Pointer<Pointer<WasmerModule>>, Pointer<Uint8>, int);
+// Default maximum, which indicates no upper limit.
+const int wasm_limits_max_default = 0xffffffff;
-// wasmer_module_instantiate
-typedef NativeWasmerInstantiateFn = Uint32 Function(Pointer<WasmerModule>,
- Pointer<Pointer<WasmerInstance>>, Pointer<WasmerImport>, Int32);
-typedef WasmerInstantiateFn = int Function(Pointer<WasmerModule>,
- Pointer<Pointer<WasmerInstance>>, Pointer<WasmerImport>, int);
+// wasm_engine_t
+class WasmerEngine extends Struct {}
-// wasmer_instance_exports
+// wasm_exporttype_t
+class WasmerExporttype extends Struct {}
+
+// wasm_extern_t
+class WasmerExtern extends Struct {}
+
+// wasm_externtype_t
+class WasmerExterntype extends Struct {}
+
+// wasm_func_t
+class WasmerFunc extends Struct {}
+
+// wasm_functype_t
+class WasmerFunctype extends Struct {}
+
+// wasm_importtype_t
+class WasmerImporttype extends Struct {}
+
+// wasm_instance_t
+class WasmerInstance extends Struct {}
+
+// wasm_memory_t
+class WasmerMemory extends Struct {}
+
+// wasm_memorytype_t
+class WasmerMemorytype extends Struct {}
+
+// wasm_module_t
+class WasmerModule extends Struct {}
+
+// wasm_store_t
+class WasmerStore extends Struct {}
+
+// wasm_trap_t
+class WasmerTrap extends Struct {}
+
+// wasm_valtype_t
+class WasmerValtype extends Struct {}
+
+// wasm_byte_vec_t
+class WasmerByteVec extends Struct {
+ @Uint64()
+ external int length;
+
+ external Pointer<Uint8> data;
+
+ Uint8List get list => data.asTypedList(length);
+ String toString() => utf8.decode(list);
+}
+
+// wasm_exporttype_vec_t
+class WasmerExporttypeVec extends Struct {
+ @Uint64()
+ external int length;
+
+ external Pointer<Pointer<WasmerExporttype>> data;
+}
+
+// wasm_extern_vec_t
+class WasmerExternVec extends Struct {
+ @Uint64()
+ external int length;
+
+ external Pointer<Pointer<WasmerExtern>> data;
+}
+
+// wasm_importtype_vec_t
+class WasmerImporttypeVec extends Struct {
+ @Uint64()
+ external int length;
+
+ external Pointer<Pointer<WasmerImporttype>> data;
+}
+
+// wasm_val_vec_t
+class WasmerValVec extends Struct {
+ @Uint64()
+ external int length;
+
+ external Pointer<WasmerVal> data;
+}
+
+// wasm_valtype_vec_t
+class WasmerValtypeVec extends Struct {
+ @Uint64()
+ external int length;
+
+ external Pointer<Pointer<WasmerValtype>> data;
+}
+
+// wasm_byte_vec_delete
+typedef NativeWasmerByteVecDeleteFn = Void Function(Pointer<WasmerByteVec>);
+typedef WasmerByteVecDeleteFn = void Function(Pointer<WasmerByteVec>);
+
+// wasm_byte_vec_new
+typedef NativeWasmerByteVecNewFn = Void Function(
+ Pointer<WasmerByteVec>, Uint64, Pointer<Uint8>);
+typedef WasmerByteVecNewFn = void Function(
+ Pointer<WasmerByteVec>, int, Pointer<Uint8>);
+
+// wasm_byte_vec_new_empty
+typedef NativeWasmerByteVecNewEmptyFn = Void Function(Pointer<WasmerByteVec>);
+typedef WasmerByteVecNewEmptyFn = void Function(Pointer<WasmerByteVec>);
+
+// wasm_byte_vec_new_uninitialized
+typedef NativeWasmerByteVecNewUninitializedFn = Void Function(
+ Pointer<WasmerByteVec>, Uint64);
+typedef WasmerByteVecNewUninitializedFn = void Function(
+ Pointer<WasmerByteVec>, int);
+
+// wasm_engine_delete
+typedef NativeWasmerEngineDeleteFn = Void Function(Pointer<WasmerEngine>);
+typedef WasmerEngineDeleteFn = void Function(Pointer<WasmerEngine>);
+
+// wasm_engine_new
+typedef NativeWasmerEngineNewFn = Pointer<WasmerEngine> Function();
+typedef WasmerEngineNewFn = Pointer<WasmerEngine> Function();
+
+// wasm_exporttype_name
+typedef NativeWasmerExporttypeNameFn = Pointer<WasmerByteVec> Function(
+ Pointer<WasmerExporttype>);
+typedef WasmerExporttypeNameFn = Pointer<WasmerByteVec> Function(
+ Pointer<WasmerExporttype>);
+
+// wasm_exporttype_type
+typedef NativeWasmerExporttypeTypeFn = Pointer<WasmerExterntype> Function(
+ Pointer<WasmerExporttype>);
+typedef WasmerExporttypeTypeFn = Pointer<WasmerExterntype> Function(
+ Pointer<WasmerExporttype>);
+
+// wasm_exporttype_vec_delete
+typedef NativeWasmerExporttypeVecDeleteFn = Void Function(
+ Pointer<WasmerExporttypeVec>);
+typedef WasmerExporttypeVecDeleteFn = void Function(
+ Pointer<WasmerExporttypeVec>);
+
+// wasm_exporttype_vec_new
+typedef NativeWasmerExporttypeVecNewFn = Void Function(
+ Pointer<WasmerExporttypeVec>, Uint64, Pointer<Pointer<WasmerExporttype>>);
+typedef WasmerExporttypeVecNewFn = void Function(
+ Pointer<WasmerExporttypeVec>, int, Pointer<Pointer<WasmerExporttype>>);
+
+// wasm_exporttype_vec_new_empty
+typedef NativeWasmerExporttypeVecNewEmptyFn = Void Function(
+ Pointer<WasmerExporttypeVec>);
+typedef WasmerExporttypeVecNewEmptyFn = void Function(
+ Pointer<WasmerExporttypeVec>);
+
+// wasm_exporttype_vec_new_uninitialized
+typedef NativeWasmerExporttypeVecNewUninitializedFn = Void Function(
+ Pointer<WasmerExporttypeVec>, Uint64);
+typedef WasmerExporttypeVecNewUninitializedFn = void Function(
+ Pointer<WasmerExporttypeVec>, int);
+
+// wasm_extern_as_func
+typedef NativeWasmerExternAsFuncFn = Pointer<WasmerFunc> Function(
+ Pointer<WasmerExtern>);
+typedef WasmerExternAsFuncFn = Pointer<WasmerFunc> Function(
+ Pointer<WasmerExtern>);
+
+// wasm_extern_as_memory
+typedef NativeWasmerExternAsMemoryFn = Pointer<WasmerMemory> Function(
+ Pointer<WasmerExtern>);
+typedef WasmerExternAsMemoryFn = Pointer<WasmerMemory> Function(
+ Pointer<WasmerExtern>);
+
+// wasm_extern_delete
+typedef NativeWasmerExternDeleteFn = Void Function(Pointer<WasmerExtern>);
+typedef WasmerExternDeleteFn = void Function(Pointer<WasmerExtern>);
+
+// wasm_extern_kind
+typedef NativeWasmerExternKindFn = Uint8 Function(Pointer<WasmerExtern>);
+typedef WasmerExternKindFn = int Function(Pointer<WasmerExtern>);
+
+// wasm_extern_vec_delete
+typedef NativeWasmerExternVecDeleteFn = Void Function(Pointer<WasmerExternVec>);
+typedef WasmerExternVecDeleteFn = void Function(Pointer<WasmerExternVec>);
+
+// wasm_extern_vec_new
+typedef NativeWasmerExternVecNewFn = Void Function(
+ Pointer<WasmerExternVec>, Uint64, Pointer<Pointer<WasmerExtern>>);
+typedef WasmerExternVecNewFn = void Function(
+ Pointer<WasmerExternVec>, int, Pointer<Pointer<WasmerExtern>>);
+
+// wasm_extern_vec_new_empty
+typedef NativeWasmerExternVecNewEmptyFn = Void Function(
+ Pointer<WasmerExternVec>);
+typedef WasmerExternVecNewEmptyFn = void Function(Pointer<WasmerExternVec>);
+
+// wasm_extern_vec_new_uninitialized
+typedef NativeWasmerExternVecNewUninitializedFn = Void Function(
+ Pointer<WasmerExternVec>, Uint64);
+typedef WasmerExternVecNewUninitializedFn = void Function(
+ Pointer<WasmerExternVec>, int);
+
+// wasm_externtype_as_functype
+typedef NativeWasmerExterntypeAsFunctypeFn = Pointer<WasmerFunctype> Function(
+ Pointer<WasmerExterntype>);
+typedef WasmerExterntypeAsFunctypeFn = Pointer<WasmerFunctype> Function(
+ Pointer<WasmerExterntype>);
+
+// wasm_externtype_delete
+typedef NativeWasmerExterntypeDeleteFn = Void Function(
+ Pointer<WasmerExterntype>);
+typedef WasmerExterntypeDeleteFn = void Function(Pointer<WasmerExterntype>);
+
+// wasm_externtype_kind
+typedef NativeWasmerExterntypeKindFn = Uint8 Function(
+ Pointer<WasmerExterntype>);
+typedef WasmerExterntypeKindFn = int Function(Pointer<WasmerExterntype>);
+
+// wasm_func_call
+typedef NativeWasmerFuncCallFn = Pointer<WasmerTrap> Function(
+ Pointer<WasmerFunc>, Pointer<WasmerVal>, Pointer<WasmerVal>);
+typedef WasmerFuncCallFn = Pointer<WasmerTrap> Function(
+ Pointer<WasmerFunc>, Pointer<WasmerVal>, Pointer<WasmerVal>);
+
+// wasm_func_delete
+typedef NativeWasmerFuncDeleteFn = Void Function(Pointer<WasmerFunc>);
+typedef WasmerFuncDeleteFn = void Function(Pointer<WasmerFunc>);
+
+// wasm_functype_delete
+typedef NativeWasmerFunctypeDeleteFn = Void Function(Pointer<WasmerFunctype>);
+typedef WasmerFunctypeDeleteFn = void Function(Pointer<WasmerFunctype>);
+
+// wasm_functype_params
+typedef NativeWasmerFunctypeParamsFn = Pointer<WasmerValtypeVec> Function(
+ Pointer<WasmerFunctype>);
+typedef WasmerFunctypeParamsFn = Pointer<WasmerValtypeVec> Function(
+ Pointer<WasmerFunctype>);
+
+// wasm_functype_results
+typedef NativeWasmerFunctypeResultsFn = Pointer<WasmerValtypeVec> Function(
+ Pointer<WasmerFunctype>);
+typedef WasmerFunctypeResultsFn = Pointer<WasmerValtypeVec> Function(
+ Pointer<WasmerFunctype>);
+
+// wasm_importtype_module
+typedef NativeWasmerImporttypeModuleFn = Pointer<WasmerByteVec> Function(
+ Pointer<WasmerImporttype>);
+typedef WasmerImporttypeModuleFn = Pointer<WasmerByteVec> Function(
+ Pointer<WasmerImporttype>);
+
+// wasm_importtype_name
+typedef NativeWasmerImporttypeNameFn = Pointer<WasmerByteVec> Function(
+ Pointer<WasmerImporttype>);
+typedef WasmerImporttypeNameFn = Pointer<WasmerByteVec> Function(
+ Pointer<WasmerImporttype>);
+
+// wasm_importtype_type
+typedef NativeWasmerImporttypeTypeFn = Pointer<WasmerExterntype> Function(
+ Pointer<WasmerImporttype>);
+typedef WasmerImporttypeTypeFn = Pointer<WasmerExterntype> Function(
+ Pointer<WasmerImporttype>);
+
+// wasm_importtype_vec_delete
+typedef NativeWasmerImporttypeVecDeleteFn = Void Function(
+ Pointer<WasmerImporttypeVec>);
+typedef WasmerImporttypeVecDeleteFn = void Function(
+ Pointer<WasmerImporttypeVec>);
+
+// wasm_importtype_vec_new
+typedef NativeWasmerImporttypeVecNewFn = Void Function(
+ Pointer<WasmerImporttypeVec>, Uint64, Pointer<Pointer<WasmerImporttype>>);
+typedef WasmerImporttypeVecNewFn = void Function(
+ Pointer<WasmerImporttypeVec>, int, Pointer<Pointer<WasmerImporttype>>);
+
+// wasm_importtype_vec_new_empty
+typedef NativeWasmerImporttypeVecNewEmptyFn = Void Function(
+ Pointer<WasmerImporttypeVec>);
+typedef WasmerImporttypeVecNewEmptyFn = void Function(
+ Pointer<WasmerImporttypeVec>);
+
+// wasm_importtype_vec_new_uninitialized
+typedef NativeWasmerImporttypeVecNewUninitializedFn = Void Function(
+ Pointer<WasmerImporttypeVec>, Uint64);
+typedef WasmerImporttypeVecNewUninitializedFn = void Function(
+ Pointer<WasmerImporttypeVec>, int);
+
+// wasm_instance_delete
+typedef NativeWasmerInstanceDeleteFn = Void Function(Pointer<WasmerInstance>);
+typedef WasmerInstanceDeleteFn = void Function(Pointer<WasmerInstance>);
+
+// wasm_instance_exports
typedef NativeWasmerInstanceExportsFn = Void Function(
- Pointer<WasmerInstance>, Pointer<Pointer<WasmerExports>>);
+ Pointer<WasmerInstance>, Pointer<WasmerExternVec>);
typedef WasmerInstanceExportsFn = void Function(
- Pointer<WasmerInstance>, Pointer<Pointer<WasmerExports>>);
+ Pointer<WasmerInstance>, Pointer<WasmerExternVec>);
-// wasmer_exports_len
-typedef NativeWasmerExportsLenFn = Int32 Function(Pointer<WasmerExports>);
-typedef WasmerExportsLenFn = int Function(Pointer<WasmerExports>);
+// wasm_instance_new
+typedef NativeWasmerInstanceNewFn = Pointer<WasmerInstance> Function(
+ Pointer<WasmerStore>,
+ Pointer<WasmerModule>,
+ Pointer<Pointer<WasmerExtern>>,
+ Pointer<Pointer<WasmerTrap>>);
+typedef WasmerInstanceNewFn = Pointer<WasmerInstance> Function(
+ Pointer<WasmerStore>,
+ Pointer<WasmerModule>,
+ Pointer<Pointer<WasmerExtern>>,
+ Pointer<Pointer<WasmerTrap>>);
-// wasmer_exports_get
-typedef NativeWasmerExportsGetFn = Pointer<WasmerExport> Function(
- Pointer<WasmerExports>, Int32);
-typedef WasmerExportsGetFn = Pointer<WasmerExport> Function(
- Pointer<WasmerExports>, int);
-
-// wasmer_export_descriptors
-typedef NativeWasmerExportDescriptorsFn = Void Function(
- Pointer<WasmerModule>, Pointer<Pointer<WasmerExportDescriptors>>);
-typedef WasmerExportDescriptorsFn = void Function(
- Pointer<WasmerModule>, Pointer<Pointer<WasmerExportDescriptors>>);
-
-// wasmer_export_descriptors_destroy
-typedef NativeWasmerExportDescriptorsDestroyFn = Void Function(
- Pointer<WasmerExportDescriptors>);
-typedef WasmerExportDescriptorsDestroyFn = void Function(
- Pointer<WasmerExportDescriptors>);
-
-// wasmer_export_descriptors_len
-typedef NativeWasmerExportDescriptorsLenFn = Int32 Function(
- Pointer<WasmerExportDescriptors>);
-typedef WasmerExportDescriptorsLenFn = int Function(
- Pointer<WasmerExportDescriptors>);
-
-// wasmer_export_descriptors_get
-typedef NativeWasmerExportDescriptorsGetFn = Pointer<WasmerExportDescriptor>
- Function(Pointer<WasmerExportDescriptors>, Int32);
-typedef WasmerExportDescriptorsGetFn = Pointer<WasmerExportDescriptor> Function(
- Pointer<WasmerExportDescriptors>, int);
-
-// wasmer_export_descriptor_kind
-typedef NativeWasmerExportDescriptorKindFn = Uint32 Function(
- Pointer<WasmerExportDescriptor>);
-typedef WasmerExportDescriptorKindFn = int Function(
- Pointer<WasmerExportDescriptor>);
-
-// wasmer_export_descriptor_name_ptr
-typedef NativeWasmerExportDescriptorNamePtrFn = Void Function(
- Pointer<WasmerExportDescriptor>, Pointer<WasmerByteArray>);
-typedef WasmerExportDescriptorNamePtrFn = void Function(
- Pointer<WasmerExportDescriptor>, Pointer<WasmerByteArray>);
-
-// wasmer_import_descriptors
-typedef NativeWasmerImportDescriptorsFn = Void Function(
- Pointer<WasmerModule>, Pointer<Pointer<WasmerImportDescriptors>>);
-typedef WasmerImportDescriptorsFn = void Function(
- Pointer<WasmerModule>, Pointer<Pointer<WasmerImportDescriptors>>);
-
-// wasmer_import_descriptors_destroy
-typedef NativeWasmerImportDescriptorsDestroyFn = Void Function(
- Pointer<WasmerImportDescriptors>);
-typedef WasmerImportDescriptorsDestroyFn = void Function(
- Pointer<WasmerImportDescriptors>);
-
-// wasmer_import_descriptors_len
-typedef NativeWasmerImportDescriptorsLenFn = Int32 Function(
- Pointer<WasmerImportDescriptors>);
-typedef WasmerImportDescriptorsLenFn = int Function(
- Pointer<WasmerImportDescriptors>);
-
-// wasmer_import_descriptors_get
-typedef NativeWasmerImportDescriptorsGetFn = Pointer<WasmerImportDescriptor>
- Function(Pointer<WasmerImportDescriptors>, Int32);
-typedef WasmerImportDescriptorsGetFn = Pointer<WasmerImportDescriptor> Function(
- Pointer<WasmerImportDescriptors>, int);
-
-// wasmer_import_descriptor_kind
-typedef NativeWasmerImportDescriptorKindFn = Uint32 Function(
- Pointer<WasmerImportDescriptor>);
-typedef WasmerImportDescriptorKindFn = int Function(
- Pointer<WasmerImportDescriptor>);
-
-// wasmer_import_descriptor_module_name_ptr
-typedef NativeWasmerImportDescriptorModuleNamePtrFn = Void Function(
- Pointer<WasmerImportDescriptor>, Pointer<WasmerByteArray>);
-typedef WasmerImportDescriptorModuleNamePtrFn = void Function(
- Pointer<WasmerImportDescriptor>, Pointer<WasmerByteArray>);
-
-// wasmer_import_descriptor_name_ptr
-typedef NativeWasmerImportDescriptorNamePtrFn = Void Function(
- Pointer<WasmerImportDescriptor>, Pointer<WasmerByteArray>);
-typedef WasmerImportDescriptorNamePtrFn = void Function(
- Pointer<WasmerImportDescriptor>, Pointer<WasmerByteArray>);
-
-// wasmer_export_name_ptr
-typedef NativeWasmerExportNamePtrFn = Void Function(
- Pointer<WasmerExport>, Pointer<WasmerByteArray>);
-typedef WasmerExportNamePtrFn = void Function(
- Pointer<WasmerExport>, Pointer<WasmerByteArray>);
-
-// wasmer_export_kind
-typedef NativeWasmerExportKindFn = Uint32 Function(Pointer<WasmerExport>);
-typedef WasmerExportKindFn = int Function(Pointer<WasmerExport>);
-
-// wasmer_export_to_func
-typedef NativeWasmerExportToFuncFn = Pointer<WasmerExportFunc> Function(
- Pointer<WasmerExport>);
-typedef WasmerExportToFuncFn = Pointer<WasmerExportFunc> Function(
- Pointer<WasmerExport>);
-
-// wasmer_export_func_returns_arity
-typedef NativeWasmerExportFuncReturnsArityFn = Uint32 Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>);
-typedef WasmerExportFuncReturnsArityFn = int Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>);
-
-// wasmer_export_func_returns
-typedef NativeWasmerExportFuncReturnsFn = Uint32 Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>, Uint32);
-typedef WasmerExportFuncReturnsFn = int Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>, int);
-
-// wasmer_export_func_params_arity
-typedef NativeWasmerExportFuncParamsArityFn = Uint32 Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>);
-typedef WasmerExportFuncParamsArityFn = int Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>);
-
-// wasmer_export_func_params
-typedef NativeWasmerExportFuncParamsFn = Uint32 Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>, Uint32);
-typedef WasmerExportFuncParamsFn = int Function(
- Pointer<WasmerExportFunc>, Pointer<Uint32>, int);
-
-// wasmer_export_func_call
-typedef NativeWasmerExportFuncCallFn = Uint32 Function(
- Pointer<WasmerExportFunc>,
- Pointer<WasmerValue>,
- Uint32,
- Pointer<WasmerValue>,
- Uint32);
-typedef WasmerExportFuncCallFn = int Function(Pointer<WasmerExportFunc>,
- Pointer<WasmerValue>, int, Pointer<WasmerValue>, int);
-
-// wasmer_export_to_memory
-typedef NativeWasmerExportToMemoryFn = Uint32 Function(
- Pointer<WasmerExport>, Pointer<Pointer<WasmerMemory>>);
-typedef WasmerExportToMemoryFn = int Function(
- Pointer<WasmerExport>, Pointer<Pointer<WasmerMemory>>);
-
-// wasmer_memory_new_ptr
-typedef NativeWasmerMemoryNewPtrFn = Uint32 Function(
- Pointer<Pointer<WasmerMemory>>, Pointer<WasmerLimits>);
-typedef WasmerMemoryNewPtrFn = int Function(
- Pointer<Pointer<WasmerMemory>>, Pointer<WasmerLimits>);
-
-// wasmer_memory_grow
-typedef NativeWasmerMemoryGrowFn = Uint32 Function(
- Pointer<WasmerMemory>, Uint32);
-typedef WasmerMemoryGrowFn = int Function(Pointer<WasmerMemory>, int);
-
-// wasmer_memory_length
-typedef NativeWasmerMemoryLengthFn = Uint32 Function(Pointer<WasmerMemory>);
-typedef WasmerMemoryLengthFn = int Function(Pointer<WasmerMemory>);
-
-// wasmer_memory_data
+// wasm_memory_data
typedef NativeWasmerMemoryDataFn = Pointer<Uint8> Function(
Pointer<WasmerMemory>);
typedef WasmerMemoryDataFn = Pointer<Uint8> Function(Pointer<WasmerMemory>);
-// wasmer_memory_data_length
-typedef NativeWasmerMemoryDataLengthFn = Uint32 Function(Pointer<WasmerMemory>);
-typedef WasmerMemoryDataLengthFn = int Function(Pointer<WasmerMemory>);
+// wasm_memory_data_size
+typedef NativeWasmerMemoryDataSizeFn = Uint64 Function(Pointer<WasmerMemory>);
+typedef WasmerMemoryDataSizeFn = int Function(Pointer<WasmerMemory>);
+
+// wasm_memory_delete
+typedef NativeWasmerMemoryDeleteFn = Void Function(Pointer<WasmerMemory>);
+typedef WasmerMemoryDeleteFn = void Function(Pointer<WasmerMemory>);
+
+// wasm_memory_grow
+typedef NativeWasmerMemoryGrowFn = Uint8 Function(
+ Pointer<WasmerMemory>, Uint32);
+typedef WasmerMemoryGrowFn = int Function(Pointer<WasmerMemory>, int);
+
+// wasm_memory_new
+typedef NativeWasmerMemoryNewFn = Pointer<WasmerMemory> Function(
+ Pointer<WasmerStore>, Pointer<WasmerMemorytype>);
+typedef WasmerMemoryNewFn = Pointer<WasmerMemory> Function(
+ Pointer<WasmerStore>, Pointer<WasmerMemorytype>);
+
+// wasm_memory_size
+typedef NativeWasmerMemorySizeFn = Uint32 Function(Pointer<WasmerMemory>);
+typedef WasmerMemorySizeFn = int Function(Pointer<WasmerMemory>);
+
+// wasm_memorytype_delete
+typedef NativeWasmerMemorytypeDeleteFn = Void Function(
+ Pointer<WasmerMemorytype>);
+typedef WasmerMemorytypeDeleteFn = void Function(Pointer<WasmerMemorytype>);
+
+// wasm_memorytype_new
+typedef NativeWasmerMemorytypeNewFn = Pointer<WasmerMemorytype> Function(
+ Pointer<WasmerLimits>);
+typedef WasmerMemorytypeNewFn = Pointer<WasmerMemorytype> Function(
+ Pointer<WasmerLimits>);
+
+// wasm_module_delete
+typedef NativeWasmerModuleDeleteFn = Void Function(Pointer<WasmerModule>);
+typedef WasmerModuleDeleteFn = void Function(Pointer<WasmerModule>);
+
+// wasm_module_exports
+typedef NativeWasmerModuleExportsFn = Void Function(
+ Pointer<WasmerModule>, Pointer<WasmerExporttypeVec>);
+typedef WasmerModuleExportsFn = void Function(
+ Pointer<WasmerModule>, Pointer<WasmerExporttypeVec>);
+
+// wasm_module_imports
+typedef NativeWasmerModuleImportsFn = Void Function(
+ Pointer<WasmerModule>, Pointer<WasmerImporttypeVec>);
+typedef WasmerModuleImportsFn = void Function(
+ Pointer<WasmerModule>, Pointer<WasmerImporttypeVec>);
+
+// wasm_module_new
+typedef NativeWasmerModuleNewFn = Pointer<WasmerModule> Function(
+ Pointer<WasmerStore>, Pointer<WasmerByteVec>);
+typedef WasmerModuleNewFn = Pointer<WasmerModule> Function(
+ Pointer<WasmerStore>, Pointer<WasmerByteVec>);
+
+// wasm_store_delete
+typedef NativeWasmerStoreDeleteFn = Void Function(Pointer<WasmerStore>);
+typedef WasmerStoreDeleteFn = void Function(Pointer<WasmerStore>);
+
+// wasm_store_new
+typedef NativeWasmerStoreNewFn = Pointer<WasmerStore> Function(
+ Pointer<WasmerEngine>);
+typedef WasmerStoreNewFn = Pointer<WasmerStore> Function(Pointer<WasmerEngine>);
+
+// wasm_trap_delete
+typedef NativeWasmerTrapDeleteFn = Void Function(Pointer<WasmerTrap>);
+typedef WasmerTrapDeleteFn = void Function(Pointer<WasmerTrap>);
+
+// wasm_valtype_delete
+typedef NativeWasmerValtypeDeleteFn = Void Function(Pointer<WasmerValtype>);
+typedef WasmerValtypeDeleteFn = void Function(Pointer<WasmerValtype>);
+
+// wasm_valtype_kind
+typedef NativeWasmerValtypeKindFn = Uint8 Function(Pointer<WasmerValtype>);
+typedef WasmerValtypeKindFn = int Function(Pointer<WasmerValtype>);
+
+// wasm_valtype_vec_delete
+typedef NativeWasmerValtypeVecDeleteFn = Void Function(
+ Pointer<WasmerValtypeVec>);
+typedef WasmerValtypeVecDeleteFn = void Function(Pointer<WasmerValtypeVec>);
+
+// wasm_valtype_vec_new
+typedef NativeWasmerValtypeVecNewFn = Void Function(
+ Pointer<WasmerValtypeVec>, Uint64, Pointer<Pointer<WasmerValtype>>);
+typedef WasmerValtypeVecNewFn = void Function(
+ Pointer<WasmerValtypeVec>, int, Pointer<Pointer<WasmerValtype>>);
+
+// wasm_valtype_vec_new_empty
+typedef NativeWasmerValtypeVecNewEmptyFn = Void Function(
+ Pointer<WasmerValtypeVec>);
+typedef WasmerValtypeVecNewEmptyFn = void Function(Pointer<WasmerValtypeVec>);
+
+// wasm_valtype_vec_new_uninitialized
+typedef NativeWasmerValtypeVecNewUninitializedFn = Void Function(
+ Pointer<WasmerValtypeVec>, Uint64);
+typedef WasmerValtypeVecNewUninitializedFn = void Function(
+ Pointer<WasmerValtypeVec>, int);
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index ce97313..9e721f2 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -29,6 +29,15 @@
rewind_optimized_out_test: SkipByDesign # No incremental compiler available.
rewind_test: SkipByDesign # No incremental compiler available.
+[ $compiler == dartk ]
+bad_reload_test: RuntimeError # Issue 34025
+coverage_optimized_function_test: Pass, Slow
+evaluate_activation_in_method_class_test: RuntimeError # Issue 35505
+evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
+evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
+get_source_report_test: RuntimeError # Should pass again when constant evaluation is relanded, see http://dartbug.com/36600
+pause_on_unhandled_async_exceptions2_test: Pass, Slow
+
[ $compiler == dartkp ]
add_breakpoint_rpc_kernel_test: SkipByDesign
async_generator_breakpoint_test: SkipByDesign
@@ -201,19 +210,12 @@
[ $arch != simarm && $arch != simarm64 && $compiler == dartk ]
complex_reload_test: RuntimeError
-[ $compiler == dartkb && ($builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd || $builder_tag == bytecode_mixed || $builder_tag == bytecode_mixed_nnbd) ]
-*: Skip # There are still timeouts in the interpreter and mixed modes which cause infra timeouts.
-
-[ $mode == debug && $system == windows ]
-debugger_location_second_test: Skip, Timeout
-debugger_location_test: Skip, Timeout
-
-[ $mode == debug && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $mode == debug ]
isolate_lifecycle_test: Skip # Flaky.
pause_idle_isolate_test: Skip # Flaky
rewind_optimized_out_test: Pass, Slow
-[ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $system == windows ]
add_breakpoint_rpc_kernel_test: Skip # Timeout
break_on_default_constructor_test: Skip # Issues 32137 and 32138.
breakpoint_in_parts_class_test: Skip # Timeout
@@ -264,7 +266,7 @@
step_through_switch_test: Skip # Times out. Issue 32137.
step_through_switch_with_continue_test: Skip # Times out. Issue 32137.
-[ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64) ]
add_breakpoint_rpc_kernel_test: RuntimeError # Issue #34736
async_generator_breakpoint_test: SkipByDesign # No incremental compiler available.
bad_reload_test: Skip # Times out on sim architectures, also RuntimeError.
@@ -294,11 +296,6 @@
simple_reload_test: RuntimeError, Timeout
valid_source_locations_test: Skip # Issue 34736, too slow.
-[ $compiler == dartk || $compiler == dartkb ]
-bad_reload_test: RuntimeError # Issue 34025
-coverage_optimized_function_test: Pass, Slow
-evaluate_activation_in_method_class_test: RuntimeError # Issue 35505
-evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
-evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
-get_source_report_test: RuntimeError # Should pass again when constant evaluation is relanded, see http://dartbug.com/36600
-pause_on_unhandled_async_exceptions2_test: Pass, Slow
+[ $mode == debug && $system == windows ]
+debugger_location_second_test: Skip, Timeout
+debugger_location_test: Skip, Timeout
diff --git a/runtime/observatory_2/tests/service_2/service_2_kernel.status b/runtime/observatory_2/tests/service_2/service_2_kernel.status
index ce97313..9e721f2 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -29,6 +29,15 @@
rewind_optimized_out_test: SkipByDesign # No incremental compiler available.
rewind_test: SkipByDesign # No incremental compiler available.
+[ $compiler == dartk ]
+bad_reload_test: RuntimeError # Issue 34025
+coverage_optimized_function_test: Pass, Slow
+evaluate_activation_in_method_class_test: RuntimeError # Issue 35505
+evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
+evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
+get_source_report_test: RuntimeError # Should pass again when constant evaluation is relanded, see http://dartbug.com/36600
+pause_on_unhandled_async_exceptions2_test: Pass, Slow
+
[ $compiler == dartkp ]
add_breakpoint_rpc_kernel_test: SkipByDesign
async_generator_breakpoint_test: SkipByDesign
@@ -201,19 +210,12 @@
[ $arch != simarm && $arch != simarm64 && $compiler == dartk ]
complex_reload_test: RuntimeError
-[ $compiler == dartkb && ($builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd || $builder_tag == bytecode_mixed || $builder_tag == bytecode_mixed_nnbd) ]
-*: Skip # There are still timeouts in the interpreter and mixed modes which cause infra timeouts.
-
-[ $mode == debug && $system == windows ]
-debugger_location_second_test: Skip, Timeout
-debugger_location_test: Skip, Timeout
-
-[ $mode == debug && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $mode == debug ]
isolate_lifecycle_test: Skip # Flaky.
pause_idle_isolate_test: Skip # Flaky
rewind_optimized_out_test: Pass, Slow
-[ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $system == windows ]
add_breakpoint_rpc_kernel_test: Skip # Timeout
break_on_default_constructor_test: Skip # Issues 32137 and 32138.
breakpoint_in_parts_class_test: Skip # Timeout
@@ -264,7 +266,7 @@
step_through_switch_test: Skip # Times out. Issue 32137.
step_through_switch_with_continue_test: Skip # Times out. Issue 32137.
-[ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64) ]
add_breakpoint_rpc_kernel_test: RuntimeError # Issue #34736
async_generator_breakpoint_test: SkipByDesign # No incremental compiler available.
bad_reload_test: Skip # Times out on sim architectures, also RuntimeError.
@@ -294,11 +296,6 @@
simple_reload_test: RuntimeError, Timeout
valid_source_locations_test: Skip # Issue 34736, too slow.
-[ $compiler == dartk || $compiler == dartkb ]
-bad_reload_test: RuntimeError # Issue 34025
-coverage_optimized_function_test: Pass, Slow
-evaluate_activation_in_method_class_test: RuntimeError # Issue 35505
-evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
-evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
-get_source_report_test: RuntimeError # Should pass again when constant evaluation is relanded, see http://dartbug.com/36600
-pause_on_unhandled_async_exceptions2_test: Pass, Slow
+[ $mode == debug && $system == windows ]
+debugger_location_second_test: Skip, Timeout
+debugger_location_test: Skip, Timeout
diff --git a/runtime/tests/vm/dart/appjit_bytecode_simple_test.dart b/runtime/tests/vm/dart/appjit_bytecode_simple_test.dart
deleted file mode 100644
index d936339..0000000
--- a/runtime/tests/vm/dart/appjit_bytecode_simple_test.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=appjit_bytecode_simple_test_body.dart
-
-// Verify that app-jit snapshot contains dependencies between classes and CHA
-// optimized code.
-
-import 'dart:async';
-import 'dart:io' show Platform;
-
-import 'snapshot_test_helper.dart';
-
-Future<void> main() => runAppJitBytecodeTest(
- Platform.script.resolve('appjit_bytecode_simple_test_body.dart'));
diff --git a/runtime/tests/vm/dart/appjit_bytecode_simple_test_body.dart b/runtime/tests/vm/dart/appjit_bytecode_simple_test_body.dart
deleted file mode 100644
index a882e9a..0000000
--- a/runtime/tests/vm/dart/appjit_bytecode_simple_test_body.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-void main(List<String> args) {
- final isTraining = args.contains("--train");
- print(isTraining ? 'OK(Trained)' : 'OK(Run)');
-}
diff --git a/runtime/tests/vm/dart/bytecode_and_ast_mix_test.dart b/runtime/tests/vm/dart/bytecode_and_ast_mix_test.dart
deleted file mode 100644
index 72f6b76..0000000
--- a/runtime/tests/vm/dart/bytecode_and_ast_mix_test.dart
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=bytecode_and_ast_mix_test_body.dart
-
-// Tests the mix of kernel AST (test) and bytecode dill files (core libraries).
-// Verifies that kernel AST can reference a not yet loaded bytecode class
-// through a constant in metadata.
-
-import 'dart:io' show Platform;
-
-import 'package:path/path.dart' as path;
-import 'snapshot_test_helper.dart';
-
-main() async {
- final testScriptUri =
- Platform.script.resolve('bytecode_and_ast_mix_test_body.dart');
- await withTempDir((String temp) async {
- final dillPath = path.join(temp, 'ast.dill');
- final testPath = testScriptUri.toFilePath();
-
- final buildResult = await runGenKernel('BUILD AST DILL FILE', [
- '--no-gen-bytecode',
- '--output=$dillPath',
- testPath,
- ]);
- print(buildResult);
- final runResult = await runDart('RUN FROM AST DILL FILE', [dillPath]);
- expectOutput("OK", runResult);
- });
-}
diff --git a/runtime/tests/vm/dart/bytecode_and_ast_mix_test_body.dart b/runtime/tests/vm/dart/bytecode_and_ast_mix_test_body.dart
deleted file mode 100644
index 703a2cc..0000000
--- a/runtime/tests/vm/dart/bytecode_and_ast_mix_test_body.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:mirrors';
-import 'package:expect/expect.dart';
-
-class A {
- void foo() {}
-}
-
-class B extends A {
- @override
- void foo() {}
-}
-
-main() {
- ClassMirror classB = reflectClass(B);
- MethodMirror foo = classB.declarations[#foo] as MethodMirror;
- final annotation = foo.metadata[0].reflectee;
- Expect.isTrue(annotation.toString().contains('_Override'));
- print('OK');
-}
diff --git a/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test.dart b/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test.dart
deleted file mode 100644
index a44f8f2..0000000
--- a/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=bytecode_with_ast_in_aot_test_body1.dart
-// OtherResources=bytecode_with_ast_in_aot_test_body2.dart
-
-// Tests that gen_kernel is able to produce dill file with both bytecode
-// and AST in AOT mode, and gen_snapshot is able to consume them.
-// Two test cases are only different in number of entry points, so
-// obfuscation prohibitions metadata has different size, causing
-// different alignment of bytecode metadata.
-
-import 'dart:io' show Platform;
-
-import 'package:path/path.dart' as path;
-import 'snapshot_test_helper.dart';
-
-testAOTOnBytecodeWithAST(String temp, String source) async {
- final sourcePath = Platform.script.resolve(source).toFilePath();
- final dillPath = path.join(temp, '${source}.dill');
- final snapshotPath = path.join(temp, '${source}.so');
-
- final genKernelResult = await runGenKernel('BUILD DILL FILE', [
- '--aot',
- '--gen-bytecode',
- '--no-drop-ast',
- '--output=$dillPath',
- sourcePath,
- ]);
- print(genKernelResult);
- final genSnapshotResult = await runGenSnapshot('GENERATE SNAPSHOT', [
- '--use-bytecode-compiler',
- '--snapshot-kind=app-aot-elf',
- '--elf=$snapshotPath',
- dillPath,
- ]);
- print(genSnapshotResult);
- final runResult =
- await runBinary('RUN SNAPSHOT', dartPrecompiledRuntime, [snapshotPath]);
- expectOutput("OK", runResult);
-}
-
-main() async {
- await withTempDir((String temp) async {
- await testAOTOnBytecodeWithAST(
- temp, 'bytecode_with_ast_in_aot_test_body1.dart');
- await testAOTOnBytecodeWithAST(
- temp, 'bytecode_with_ast_in_aot_test_body2.dart');
- });
-}
diff --git a/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test_body1.dart b/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test_body1.dart
deleted file mode 100644
index 18ae42b..0000000
--- a/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test_body1.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Test case for bytecode_with_ast_in_aot_test.dart.
-// Contains 1 entry point.
-
-import 'package:expect/expect.dart';
-
-class A {
- // Make sure obfuscation prohibitions metadata is generated.
- @pragma('vm:entry-point')
- void foofoo1() {}
-}
-
-main() {
- new A();
- print('OK');
-}
diff --git a/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test_body2.dart b/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test_body2.dart
deleted file mode 100644
index c3a1e7e..0000000
--- a/runtime/tests/vm/dart/bytecode_with_ast_in_aot_test_body2.dart
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Test case for bytecode_with_ast_in_aot_test.dart.
-// Contains 2 entry points.
-
-import 'package:expect/expect.dart';
-
-class A {
- // Make sure obfuscation prohibitions metadata is generated.
- @pragma('vm:entry-point')
- void foofoo1() {}
-
- // One more entry for obfuscation prohibitions metadata,
- // raises the chances that subsequent bytecode metadata is misaligned.
- @pragma('vm:entry-point')
- void foofoo2() {}
-}
-
-main() {
- new A();
- print('OK');
-}
diff --git a/runtime/tests/vm/dart/minimal_kernel_bytecode_test.dart b/runtime/tests/vm/dart/minimal_kernel_bytecode_test.dart
deleted file mode 100644
index 417f129..0000000
--- a/runtime/tests/vm/dart/minimal_kernel_bytecode_test.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=minimal_kernel_script.dart
-
-// Tests that dill file produced with --minimal-kernel --gen-bytecode
-// options works as expected.
-
-import 'minimal_kernel_test.dart' as test;
-
-main() async {
- await test.compileAndRunMinimalDillTest(['--gen-bytecode']);
-}
diff --git a/runtime/tests/vm/dart/snapshot_test_helper.dart b/runtime/tests/vm/dart/snapshot_test_helper.dart
index 00d1afe..1b578b9 100644
--- a/runtime/tests/vm/dart/snapshot_test_helper.dart
+++ b/runtime/tests/vm/dart/snapshot_test_helper.dart
@@ -188,22 +188,3 @@
expectOutput("OK(Run)", runResult);
});
}
-
-Future<void> runAppJitBytecodeTest(Uri testScriptUri) async {
- await withTempDir((String temp) async {
- final snapshotPath = p.join(temp, 'app.jit');
- final testPath = testScriptUri.toFilePath();
-
- final trainingResult = await runDart('TRAINING RUN', [
- '--enable_interpreter',
- '--snapshot=$snapshotPath',
- '--snapshot-kind=app-jit',
- testPath,
- '--train'
- ]);
- expectOutput("OK(Trained)", trainingResult);
- final runResult = await runDart(
- 'RUN FROM SNAPSHOT', ['--enable_interpreter', snapshotPath]);
- expectOutput("OK(Run)", runResult);
- });
-}
diff --git a/runtime/tests/vm/dart_2/appjit_bytecode_simple_test.dart b/runtime/tests/vm/dart_2/appjit_bytecode_simple_test.dart
deleted file mode 100644
index d936339..0000000
--- a/runtime/tests/vm/dart_2/appjit_bytecode_simple_test.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=appjit_bytecode_simple_test_body.dart
-
-// Verify that app-jit snapshot contains dependencies between classes and CHA
-// optimized code.
-
-import 'dart:async';
-import 'dart:io' show Platform;
-
-import 'snapshot_test_helper.dart';
-
-Future<void> main() => runAppJitBytecodeTest(
- Platform.script.resolve('appjit_bytecode_simple_test_body.dart'));
diff --git a/runtime/tests/vm/dart_2/appjit_bytecode_simple_test_body.dart b/runtime/tests/vm/dart_2/appjit_bytecode_simple_test_body.dart
deleted file mode 100644
index a882e9a..0000000
--- a/runtime/tests/vm/dart_2/appjit_bytecode_simple_test_body.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-void main(List<String> args) {
- final isTraining = args.contains("--train");
- print(isTraining ? 'OK(Trained)' : 'OK(Run)');
-}
diff --git a/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test.dart b/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test.dart
deleted file mode 100644
index 72f6b76..0000000
--- a/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test.dart
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=bytecode_and_ast_mix_test_body.dart
-
-// Tests the mix of kernel AST (test) and bytecode dill files (core libraries).
-// Verifies that kernel AST can reference a not yet loaded bytecode class
-// through a constant in metadata.
-
-import 'dart:io' show Platform;
-
-import 'package:path/path.dart' as path;
-import 'snapshot_test_helper.dart';
-
-main() async {
- final testScriptUri =
- Platform.script.resolve('bytecode_and_ast_mix_test_body.dart');
- await withTempDir((String temp) async {
- final dillPath = path.join(temp, 'ast.dill');
- final testPath = testScriptUri.toFilePath();
-
- final buildResult = await runGenKernel('BUILD AST DILL FILE', [
- '--no-gen-bytecode',
- '--output=$dillPath',
- testPath,
- ]);
- print(buildResult);
- final runResult = await runDart('RUN FROM AST DILL FILE', [dillPath]);
- expectOutput("OK", runResult);
- });
-}
diff --git a/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test_body.dart b/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test_body.dart
deleted file mode 100644
index dac3c07..0000000
--- a/runtime/tests/vm/dart_2/bytecode_and_ast_mix_test_body.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:mirrors';
-import 'package:expect/expect.dart';
-
-class A {
- void foo() {}
-}
-
-class B extends A {
- @override
- void foo() {}
-}
-
-main() {
- ClassMirror classB = reflectClass(B);
- MethodMirror foo = classB.declarations[#foo];
- final annotation = foo.metadata[0].reflectee;
- Expect.isTrue(annotation.toString().contains('_Override'));
- print('OK');
-}
diff --git a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test.dart b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test.dart
deleted file mode 100644
index a44f8f2..0000000
--- a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=bytecode_with_ast_in_aot_test_body1.dart
-// OtherResources=bytecode_with_ast_in_aot_test_body2.dart
-
-// Tests that gen_kernel is able to produce dill file with both bytecode
-// and AST in AOT mode, and gen_snapshot is able to consume them.
-// Two test cases are only different in number of entry points, so
-// obfuscation prohibitions metadata has different size, causing
-// different alignment of bytecode metadata.
-
-import 'dart:io' show Platform;
-
-import 'package:path/path.dart' as path;
-import 'snapshot_test_helper.dart';
-
-testAOTOnBytecodeWithAST(String temp, String source) async {
- final sourcePath = Platform.script.resolve(source).toFilePath();
- final dillPath = path.join(temp, '${source}.dill');
- final snapshotPath = path.join(temp, '${source}.so');
-
- final genKernelResult = await runGenKernel('BUILD DILL FILE', [
- '--aot',
- '--gen-bytecode',
- '--no-drop-ast',
- '--output=$dillPath',
- sourcePath,
- ]);
- print(genKernelResult);
- final genSnapshotResult = await runGenSnapshot('GENERATE SNAPSHOT', [
- '--use-bytecode-compiler',
- '--snapshot-kind=app-aot-elf',
- '--elf=$snapshotPath',
- dillPath,
- ]);
- print(genSnapshotResult);
- final runResult =
- await runBinary('RUN SNAPSHOT', dartPrecompiledRuntime, [snapshotPath]);
- expectOutput("OK", runResult);
-}
-
-main() async {
- await withTempDir((String temp) async {
- await testAOTOnBytecodeWithAST(
- temp, 'bytecode_with_ast_in_aot_test_body1.dart');
- await testAOTOnBytecodeWithAST(
- temp, 'bytecode_with_ast_in_aot_test_body2.dart');
- });
-}
diff --git a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body1.dart b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body1.dart
deleted file mode 100644
index 18ae42b..0000000
--- a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body1.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Test case for bytecode_with_ast_in_aot_test.dart.
-// Contains 1 entry point.
-
-import 'package:expect/expect.dart';
-
-class A {
- // Make sure obfuscation prohibitions metadata is generated.
- @pragma('vm:entry-point')
- void foofoo1() {}
-}
-
-main() {
- new A();
- print('OK');
-}
diff --git a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body2.dart b/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body2.dart
deleted file mode 100644
index c3a1e7e..0000000
--- a/runtime/tests/vm/dart_2/bytecode_with_ast_in_aot_test_body2.dart
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Test case for bytecode_with_ast_in_aot_test.dart.
-// Contains 2 entry points.
-
-import 'package:expect/expect.dart';
-
-class A {
- // Make sure obfuscation prohibitions metadata is generated.
- @pragma('vm:entry-point')
- void foofoo1() {}
-
- // One more entry for obfuscation prohibitions metadata,
- // raises the chances that subsequent bytecode metadata is misaligned.
- @pragma('vm:entry-point')
- void foofoo2() {}
-}
-
-main() {
- new A();
- print('OK');
-}
diff --git a/runtime/tests/vm/dart_2/minimal_kernel_bytecode_test.dart b/runtime/tests/vm/dart_2/minimal_kernel_bytecode_test.dart
deleted file mode 100644
index 417f129..0000000
--- a/runtime/tests/vm/dart_2/minimal_kernel_bytecode_test.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// OtherResources=minimal_kernel_script.dart
-
-// Tests that dill file produced with --minimal-kernel --gen-bytecode
-// options works as expected.
-
-import 'minimal_kernel_test.dart' as test;
-
-main() async {
- await test.compileAndRunMinimalDillTest(['--gen-bytecode']);
-}
diff --git a/runtime/tests/vm/dart_2/snapshot_test_helper.dart b/runtime/tests/vm/dart_2/snapshot_test_helper.dart
index 56472f1..eef877f 100644
--- a/runtime/tests/vm/dart_2/snapshot_test_helper.dart
+++ b/runtime/tests/vm/dart_2/snapshot_test_helper.dart
@@ -188,22 +188,3 @@
expectOutput("OK(Run)", runResult);
});
}
-
-Future<void> runAppJitBytecodeTest(Uri testScriptUri) async {
- await withTempDir((String temp) async {
- final snapshotPath = p.join(temp, 'app.jit');
- final testPath = testScriptUri.toFilePath();
-
- final trainingResult = await runDart('TRAINING RUN', [
- '--enable_interpreter',
- '--snapshot=$snapshotPath',
- '--snapshot-kind=app-jit',
- testPath,
- '--train'
- ]);
- expectOutput("OK(Trained)", trainingResult);
- final runResult = await runDart(
- 'RUN FROM SNAPSHOT', ['--enable_interpreter', snapshotPath]);
- expectOutput("OK(Run)", runResult);
- });
-}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index a80880d..2d7c568 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -14,7 +14,6 @@
dart/data_uri_import_test/none: SkipByDesign
dart/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
dart/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
-dart/minimal_kernel_bytecode_test: Pass, Slow # Spawns several subprocesses
dart/minimal_kernel_test: Pass, Slow # Spawns several subprocesses
dart/null_safety_autodetection_in_kernel_compiler_test: Pass, Slow # Spawns several subprocesses
dart/slow_path_shared_stub_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
@@ -24,7 +23,6 @@
dart_2/data_uri_import_test/none: SkipByDesign
dart_2/emit_aot_size_info_flag_test: Pass, Slow # Spawns several subprocesses
dart_2/isolates/*: Pass, Slow # Tests use many isolates and take a longer time.
-dart_2/minimal_kernel_bytecode_test: Pass, Slow # Spawns several subprocesses
dart_2/minimal_kernel_test: Pass, Slow # Spawns several subprocesses
dart_2/null_safety_autodetection_in_kernel_compiler_test: Pass, Slow # Spawns several subprocesses
dart_2/slow_path_shared_stub_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
@@ -50,12 +48,10 @@
cc/*: Skip # Many tests want see unoptimized code running
dart/appjit*: SkipByDesign # Test needs to a particular opt-counter value
dart/kernel_determinism_test: SkipSlow
-dart/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
dart_2/appjit*: SkipByDesign # Test needs to a particular opt-counter value
dart_2/kernel_determinism_test: SkipSlow
-dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
@@ -73,13 +69,25 @@
dart_2/redirection_type_shuffling_test/none: RuntimeError
dart_2/snapshot_version_test: RuntimeError
-[ $compiler != dartk ]
-dart/b162922506_test: SkipByDesign # Only run in JIT
-dart_2/b162922506_test: SkipByDesign # Only run in JIT
+[ $compiler == dartk ]
+cc/DartAPI_New: Fail # Issue #33041
+cc/IsolateReload_LibraryLookup: Fail, Crash # Issue 32190
+dart/redirection_type_shuffling_test/00: RuntimeError, Pass
+dart/redirection_type_shuffling_test/none: RuntimeError
+dart_2/redirection_type_shuffling_test/00: RuntimeError, Pass
+dart_2/redirection_type_shuffling_test/none: RuntimeError
-[ $compiler == dartkb ]
-dart/generic_field_invocation_test: SkipByDesign # KBC interpreters do not support --no_lazy_dispatchers
-dart_2/generic_field_invocation_test: SkipByDesign # KBC interpreters do not support --no_lazy_dispatchers
+[ $compiler != dartk ]
+cc/IsolateReload_KernelIncrementalCompile: SkipByDesign
+cc/IsolateReload_KernelIncrementalCompileAppAndLib: SkipByDesign
+cc/IsolateReload_KernelIncrementalCompileExpression: SkipByDesign
+cc/IsolateReload_KernelIncrementalCompileGenerics: SkipByDesign
+cc/Mixin_PrivateSuperResolution: Skip
+cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Skip
+dart/b162922506_test: SkipByDesign # Only run in JIT
+dart/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
+dart_2/b162922506_test: SkipByDesign # Only run in JIT
+dart_2/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
[ $compiler == dartkp ]
dart/causal_stacks/async_throws_stack_no_causal_non_symbolic_test: SkipByDesign # --no-lazy... does nothing on precompiler.
@@ -111,14 +119,12 @@
cc/VerifyImplicit_Crash: Crash # Negative tests of VerifiedMemory should crash iff in DEBUG mode. TODO(koda): Improve support for negative tests.
dart/appjit_cha_deopt_test: Pass, Slow # Quite slow in debug mode, uses --optimization-counter-threshold=100
dart/b162922506_test: SkipSlow # Generates very large input file
-dart/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow in debug mode
dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow in debug mode
dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow in debug mode
dart/spawn_shutdown_test: Pass, Slow # VM Shutdown test, It can take some time for all the isolates to shutdown in a Debug build.
dart/type_casts_with_null_safety_autodetection_test: Pass, Slow # Very slow in debug mode, uses --optimization-counter-threshold=10
dart_2/appjit_cha_deopt_test: Pass, Slow # Quite slow in debug mode, uses --optimization-counter-threshold=100
dart_2/b162922506_test: SkipSlow # Generates very large input file
-dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow in debug mode
dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow in debug mode
dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow in debug mode
dart_2/spawn_shutdown_test: Pass, Slow # VM Shutdown test, It can take some time for all the isolates to shutdown in a Debug build.
@@ -155,16 +161,14 @@
cc/GenKernelKernelLoadKernel: Skip # Issue 34542.
cc/GenKernelKernelMaxRSS: Skip # Issue 34393.
cc/GenKernelKernelReadAllBytecode: Skip # Issue 34393.
-dart/appjit_bytecode_simple_test: Skip # Issue 34393.
dart/disassemble_determinism_test: Slow, Pass # Times out on slower bots.
-dart_2/appjit_bytecode_simple_test: Skip # Issue 34393.
dart_2/disassemble_determinism_test: Slow, Pass # Times out on slower bots.
[ $arch == ia32 && $mode == debug && $system == windows ]
dart/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
dart_2/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
-[ $arch != simarm && $arch != simarm64 && $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
+[ $arch != simarm && $arch != simarm64 && $compiler == dartk && $hot_reload ]
dart/data_uri_import_test/base64: Crash
dart/data_uri_import_test/nocharset: Crash
dart/data_uri_import_test/nomime: Crash
@@ -190,74 +194,19 @@
dart_2/optimized_stacktrace_line_test: SkipByDesign # Looks for filenames in stacktrace output
dart_2/regress_37382_test: SkipByDesign # Matches the type arguments names
-[ $compiler == dartk && $mode == product && $runtime == vm ]
-cc/CorelibIsolateStartup: Timeout, Pass
-
-[ $compiler != dartk && $compiler != dartkb ]
-cc/IsolateReload_KernelIncrementalCompile: SkipByDesign
-cc/IsolateReload_KernelIncrementalCompileAppAndLib: SkipByDesign
-cc/IsolateReload_KernelIncrementalCompileExpression: SkipByDesign
-cc/IsolateReload_KernelIncrementalCompileGenerics: SkipByDesign
-cc/Mixin_PrivateSuperResolution: Skip
-cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Skip
-dart/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
-dart_2/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
-
-[ $compiler != dartk && $compiler != dartkb && $compiler != none ]
-dart/appjit*: SkipByDesign # Test needs to run from source
-dart/bytecode_and_ast_mix_test: SkipByDesign # Test needs to run from source
-dart/kernel_determinism_test: SkipByDesign # Test needs to run from source
-dart/minimal_kernel_bytecode_test: SkipByDesign # Test needs to run from source
-dart/minimal_kernel_test: SkipByDesign # Test needs to run from source
-dart/null_safety_autodetection_in_kernel_compiler_test: SkipByDesign # Test needs to run from source
-dart/snapshot_depfile_test: SkipByDesign # Test needs to run from source
-dart/type_casts_with_null_safety_autodetection_test: SkipByDesign # Test needs to run from source
-dart_2/appjit*: SkipByDesign # Test needs to run from source
-dart_2/bytecode_and_ast_mix_test: SkipByDesign # Test needs to run from source
-dart_2/kernel_determinism_test: SkipByDesign # Test needs to run from source
-dart_2/minimal_kernel_bytecode_test: SkipByDesign # Test needs to run from source
-dart_2/minimal_kernel_test: SkipByDesign # Test needs to run from source
-dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipByDesign # Test needs to run from source
-dart_2/snapshot_depfile_test: SkipByDesign # Test needs to run from source
-
-[ $compiler == dartkp && ($runtime == dart_precompiled || $runtime == vm) ]
-dart/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
-dart/spawn_shutdown_test: SkipSlow
-dart_2/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
-dart_2/spawn_shutdown_test: SkipSlow
-
-[ $mode == debug && $system == windows ]
-dart/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
-dart_2/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
-
# Enabling of dartk for sim{arm,arm64} revelaed these test failures, which
# are to be triaged. Isolate tests are skipped on purpose due to the usage of
# batch mode.
-[ $mode == debug && ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $mode == debug && ($arch == simarm || $arch == simarm64) ]
cc/StackTraceMallocHookLengthTest: Fail # Please triage.
-[ $mode == product && $runtime == vm ]
-cc/DartAPI_IsolateSetCheckedMode: Fail, OK # Checked mode disabled in product mode.
-
-[ $mode == release && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $mode == product && $runtime == vm ]
cc/CorelibIsolateStartup: Timeout, Pass
-[ $runtime == dart_precompiled && $minified ]
-dart/inline_stack_frame_test: Skip
-dart/optimized_stacktrace_line_test: Skip
-dart_2/inline_stack_frame_test: Skip
-dart_2/optimized_stacktrace_line_test: Skip
+[ $compiler == dartk && $mode == release && $runtime == vm ]
+cc/CorelibIsolateStartup: Timeout, Pass
-[ $runtime != dart_precompiled && $runtime != vm ]
-dart/*: SkipByDesign # VM specific tests
-dart/catch_entry_state: SkipByDesign
-dart_2/*: SkipByDesign # VM specific tests
-dart_2/catch_entry_state: SkipByDesign
-
-[ $runtime == vm && $system == macos && ($compiler == dartk || $compiler == dartkb) ]
-cc/IsolateReload_LibraryLookup: Fail, Crash
-
-[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime == vm ]
cc/DartAPI_LoadLibrary: Fail, Crash # Issue 33048.
cc/DebuggerAPI_BreakpointStubPatching: Fail
cc/DebuggerAPI_GetClosureInfo: Fail
@@ -273,41 +222,80 @@
dart/spawn_shutdown_test: SkipSlow
dart_2/spawn_shutdown_test: SkipSlow
-[ $system != fuchsia && ($arch != x64 || $system != linux) ]
-cc/CodeExecutability: SkipByDesign # --dual-map-code not supported on non-Linux/Fuchsia
-
-[ $system == linux && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime == vm && $system == macos ]
cc/IsolateReload_LibraryLookup: Fail, Crash
-[ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $system == linux ]
cc/IsolateReload_LibraryLookup: Fail, Crash
-[ $checked && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $system == windows ]
+cc/IsolateReload_LibraryLookup: Fail, Crash
+
+[ $compiler == dartk && $checked ]
dart/redirection_type_shuffling_test/00: Pass # Works in --checked mode but not in --strong mode.
dart_2/redirection_type_shuffling_test/00: Pass # Works in --checked mode but not in --strong mode.
-[ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64) ]
dart/appjit*: SkipSlow # DFE too slow
dart/b162922506_test: SkipSlow # Generates large input file
dart/data_uri_spawn_test: Skip # Please triage.
-dart/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow on simulated architectures
dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow on simulated architectures
dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow on simulated architectures
dart/snapshot_version_test: RuntimeError # Please triage.
dart_2/appjit*: SkipSlow # DFE too slow
dart_2/b162922506_test: SkipSlow # Generates large input file
dart_2/data_uri_spawn_test: Skip # Please triage.
-dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow on simulated architectures
dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow on simulated architectures
dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow on simulated architectures
dart_2/snapshot_version_test: RuntimeError # Please triage.
-[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
+[ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
dart/data_uri_spawn_test: Skip # Timeout
dart/kernel_determinism_test: SkipSlow
dart_2/data_uri_spawn_test: Skip # Timeout
dart_2/kernel_determinism_test: SkipSlow
+[ $compiler != dartk && $compiler != none ]
+dart/appjit*: SkipByDesign # Test needs to run from source
+dart/kernel_determinism_test: SkipByDesign # Test needs to run from source
+dart/minimal_kernel_test: SkipByDesign # Test needs to run from source
+dart/null_safety_autodetection_in_kernel_compiler_test: SkipByDesign # Test needs to run from source
+dart/snapshot_depfile_test: SkipByDesign # Test needs to run from source
+dart/type_casts_with_null_safety_autodetection_test: SkipByDesign # Test needs to run from source
+dart_2/appjit*: SkipByDesign # Test needs to run from source
+dart_2/kernel_determinism_test: SkipByDesign # Test needs to run from source
+dart_2/minimal_kernel_test: SkipByDesign # Test needs to run from source
+dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipByDesign # Test needs to run from source
+dart_2/snapshot_depfile_test: SkipByDesign # Test needs to run from source
+
+[ $compiler == dartkp && ($runtime == dart_precompiled || $runtime == vm) ]
+dart/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
+dart/spawn_shutdown_test: SkipSlow
+dart_2/redirection_type_shuffling_test: SkipByDesign # Includes dart:mirrors.
+dart_2/spawn_shutdown_test: SkipSlow
+
+[ $mode == debug && $system == windows ]
+dart/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
+dart_2/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
+
+[ $mode == product && $runtime == vm ]
+cc/DartAPI_IsolateSetCheckedMode: Fail, OK # Checked mode disabled in product mode.
+
+[ $runtime == dart_precompiled && $minified ]
+dart/inline_stack_frame_test: Skip
+dart/optimized_stacktrace_line_test: Skip
+dart_2/inline_stack_frame_test: Skip
+dart_2/optimized_stacktrace_line_test: Skip
+
+[ $runtime != dart_precompiled && $runtime != vm ]
+dart/*: SkipByDesign # VM specific tests
+dart/catch_entry_state: SkipByDesign
+dart_2/*: SkipByDesign # VM specific tests
+dart_2/catch_entry_state: SkipByDesign
+
+[ $system != fuchsia && ($arch != x64 || $system != linux) ]
+cc/CodeExecutability: SkipByDesign # --dual-map-code not supported on non-Linux/Fuchsia
+
[ $arch == arm || $arch == arm64 || $builder_tag == crossword || $builder_tag == crossword_ast || $compiler != dartkp || $system == linux && ($arch == simarm || $arch == simarm64) ]
dart/v8_snapshot_profile_writer_test: SkipByDesign # Only relevant for AOT. Doesn't work in cross-compilation (has to run on the host). On Linux/simarm64 and Linux/simarm this test requires buildtools/clang which is not always available on testing shards.
dart_2/v8_snapshot_profile_writer_test: SkipByDesign # Only relevant for AOT. Doesn't work in cross-compilation (has to run on the host). On Linux/simarm64 and Linux/simarm this test requires buildtools/clang which is not always available on testing shards.
@@ -373,23 +361,11 @@
dart/thread_priority_linux_test: SkipByDesign
dart_2/thread_priority_linux_test: SkipByDesign
-[ $builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd || $builder_tag == bytecode_mixed || $builder_tag == bytecode_mixed_nnbd ]
-cc/StreamingFlowGraphBuilder_ConcatStringLits: SkipByDesign # Optimisation isn't run for bytecode functions.
-cc/StreamingFlowGraphBuilder_ConstFoldStringConcats: SkipByDesign # Optimisation isn't run for bytecode functions.
-cc/StreamingFlowGraphBuilder_DropEmptyStringInterp: SkipByDesign # Optimisation isn't run for bytecode functions.
-cc/StreamingFlowGraphBuilder_FlattenNestedStringInterp: SkipByDesign # Optimisation isn't run for bytecode functions.
-
-[ $builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd || $hot_reload || $hot_reload_rollback || $compiler != dartk && $compiler != dartkb && $compiler != dartkp ]
-dart/entrypoints/*: SkipByDesign # These tests are for compiler optimizations and very sensitive to when functions are optimized, so they are disabled on hotreload and optcounter bots.
-dart_2/entrypoints/*: SkipByDesign # These tests are for compiler optimizations and very sensitive to when functions are optimized, so they are disabled on hotreload and optcounter bots.
-
[ $builder_tag == crossword || $builder_tag == crossword_ast ]
-dart/bytecode_with_ast_in_aot_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
dart/emit_aot_size_info_flag_test: SkipByDesign # The test itself cannot determine the location of gen_snapshot (only tools/test.py knows where it is).
dart/sdk_hash_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
dart/split_aot_kernel_generation2_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
dart/split_aot_kernel_generation_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
-dart_2/bytecode_with_ast_in_aot_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
dart_2/emit_aot_size_info_flag_test: SkipByDesign # The test itself cannot determine the location of gen_snapshot (only tools/test.py knows where it is).
dart_2/sdk_hash_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
dart_2/split_aot_kernel_generation2_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
@@ -403,21 +379,11 @@
dart/data_uri*test: Skip # Data uri's not supported by dart2js or the analyzer.
dart_2/data_uri*test: Skip # Data uri's not supported by dart2js or the analyzer.
-[ $compiler == dartk || $compiler == dartkb ]
-cc/DartAPI_New: Fail # Issue #33041
-cc/IsolateReload_LibraryLookup: Fail, Crash # Issue 32190
-dart/redirection_type_shuffling_test/00: RuntimeError, Pass
-dart/redirection_type_shuffling_test/none: RuntimeError
-dart_2/redirection_type_shuffling_test/00: RuntimeError, Pass
-dart_2/redirection_type_shuffling_test/none: RuntimeError
-
[ $mode == debug || $runtime != dart_precompiled || $system == android ]
-dart/bytecode_with_ast_in_aot_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
dart/emit_aot_size_info_flag_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
dart/split_aot_kernel_generation2_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
dart/split_aot_kernel_generation_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
dart/use_bare_instructions_flag_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
-dart_2/bytecode_with_ast_in_aot_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
dart_2/emit_aot_size_info_flag_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
dart_2/split_aot_kernel_generation2_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
dart_2/split_aot_kernel_generation_test: SkipByDesign # This test is for VM AOT only and is quite slow (so we don't run it in debug mode).
@@ -471,7 +437,6 @@
dart/disassemble_determinism_test: SkipSlow # Runs expensive fibonacci(32) computation in 2 subprocesses
dart/isolates/spawn_function_test: Skip # This test explicitly enables isolate groups (off-by-default atm). It will be enabled once full IG reloading is implemented.
dart/issue_31959_31960_test: SkipSlow
-dart/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
dart/print_flow_graph_determinism_test: SkipSlow
@@ -486,7 +451,6 @@
dart_2/disassemble_determinism_test: SkipSlow # Runs expensive fibonacci(32) computation in 2 subprocesses
dart_2/isolates/spawn_function_test: Skip # This test explicitly enables isolate groups (off-by-default atm). It will be enabled once full IG reloading is implemented.
dart_2/issue_31959_31960_test: SkipSlow
-dart_2/minimal_kernel_bytecode_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow in hot reload testing mode
dart_2/print_flow_graph_determinism_test: SkipSlow
@@ -496,3 +460,7 @@
dart_2/splay_test: SkipSlow
dart_2/stack_overflow_shared_test: SkipSlow # Too slow with --shared-slow-path-triggers-gc flag and not relevant outside precompiled.
dart_2/type_feedback_test: Pass, Slow
+
+[ $hot_reload || $hot_reload_rollback || $compiler != dartk && $compiler != dartkp ]
+dart/entrypoints/*: SkipByDesign # These tests are for compiler optimizations and very sensitive to when functions are optimized, so they are disabled on hotreload and optcounter bots.
+dart_2/entrypoints/*: SkipByDesign # These tests are for compiler optimizations and very sensitive to when functions are optimized, so they are disabled on hotreload and optcounter bots.
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 9444e50..392c905 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -586,16 +586,17 @@
visibility = [ ":create_common_sdk" ]
deps = [
":copy_libraries",
- "../third_party/wasmer:wasmer_wrapper",
+ "../third_party/wasmer:wasmer",
]
outputs =
[ "$root_out_dir/dart-sdk/bin/third_party/wasmer/{{source_file_part}}" ]
if (is_win) {
- sources = [ "$root_out_dir/wasmer_wrapper.dll" ]
+ sources = [ "$target_out_dir/../third_party/wasmer/wasmer.dll" ]
} else if (is_mac) {
- sources = [ "$root_out_dir/libwasmer_wrapper.dylib" ]
+ sources = [ "$target_out_dir/../third_party/wasmer/libwasmer.dylib" ]
} else {
- sources = [ "$root_out_dir/libwasmer_wrapper.so" ]
+ # TODO(dartbug.com/37882): Support Fuchsia.
+ sources = [ "$target_out_dir/../third_party/wasmer/libwasmer.so" ]
}
}
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index f9dadb3..ee639b0 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -2,10 +2,10 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
-[ $compiler == dartkb ]
-LibTest/isolate/Isolate/kill_A01_t01: Skip # Issue 37699
-LibTest/isolate/Isolate/pause_A01_t01: Skip # Issue 37699
-LibTest/isolate/Isolate/pause_A01_t02: Skip # Issue 37699
+[ $compiler == dartk ]
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Crash
+LibTest/isolate/SendPort/send_A01_t02: Crash
+LibTest/isolate/SendPort/send_A01_t03: Crash
[ $compiler == fasta ]
Language/Statements/For/syntax_t13: Crash # Assertion error: kernel_shadow_ast.dart: 'receiver == null': is not true.
@@ -329,10 +329,10 @@
LibTest/collection/ListBase/ListBase_class_A01_t01: Skip # Issue 43036
LibTest/collection/ListMixin/ListMixin_class_A01_t01: Skip # Issue 43036
-[ $runtime == vm && $system == linux && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime == vm && $system == linux ]
LibTest/isolate/Isolate/spawn_A06_t03: Crash
-[ $runtime == vm && $system == macos && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime == vm && $system == macos ]
LibTest/collection/ListBase/ListBase_class_A01_t02: Slow, Pass
LibTest/collection/ListBase/ListBase_class_A01_t03: Slow, Pass
LibTest/collection/ListMixin/ListMixin_class_A01_t02: Slow, Pass
@@ -340,19 +340,9 @@
LibTest/core/List/List_class_A01_t02: Slow, Pass
LibTest/core/List/List_class_A01_t03: Slow, Pass
-[ $runtime != vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime != vm ]
Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: Crash
-[ $builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd ]
-LibTest/collection/ListBase/ListBase_class_A01_t04: Slow, Pass
-LibTest/collection/ListBase/ListBase_class_A01_t05: Slow, Pass
-LibTest/collection/ListBase/ListBase_class_A01_t06: Slow, Pass
-
-[ $compiler == dartk || $compiler == dartkb ]
-Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Crash
-LibTest/isolate/SendPort/send_A01_t02: Crash
-LibTest/isolate/SendPort/send_A01_t03: Crash
-
# It makes no sense to run any test that uses spawnURI under the simulator
# as that would involve running CFE (the front end) in simulator mode
# to compile the URI file specified in spawnURI code.
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index 1a224c7..3a0f103 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -2,10 +2,10 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
-[ $compiler == dartkb ]
-LibTest/isolate/Isolate/kill_A01_t01: Skip # Issue 37699
-LibTest/isolate/Isolate/pause_A01_t01: Skip # Issue 37699
-LibTest/isolate/Isolate/pause_A01_t02: Skip # Issue 37699
+[ $compiler == dartk ]
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Crash
+LibTest/isolate/SendPort/send_A01_t02: Crash
+LibTest/isolate/SendPort/send_A01_t03: Crash
[ $compiler == fasta ]
Language/Statements/For/syntax_t13: Crash # Assertion error: kernel_shadow_ast.dart: 'receiver == null': is not true.
@@ -173,10 +173,10 @@
LanguageFeatures/regression/34803_t01: Crash
LanguageFeatures/regression/34803_t02: Crash
-[ $runtime == vm && $system == linux && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime == vm && $system == linux ]
LibTest/isolate/Isolate/spawn_A06_t03: Crash
-[ $runtime == vm && $system == macos && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime == vm && $system == macos ]
LibTest/collection/ListBase/ListBase_class_A01_t02: Slow, Pass
LibTest/collection/ListBase/ListBase_class_A01_t03: Slow, Pass
LibTest/collection/ListMixin/ListMixin_class_A01_t02: Slow, Pass
@@ -184,19 +184,9 @@
LibTest/core/List/List_class_A01_t02: Slow, Pass
LibTest/core/List/List_class_A01_t03: Slow, Pass
-[ $runtime != vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $compiler == dartk && $runtime != vm ]
Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: Crash
-[ $builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd ]
-LibTest/collection/ListBase/ListBase_class_A01_t04: Slow, Pass
-LibTest/collection/ListBase/ListBase_class_A01_t05: Slow, Pass
-LibTest/collection/ListBase/ListBase_class_A01_t06: Slow, Pass
-
-[ $compiler == dartk || $compiler == dartkb ]
-Language/Libraries_and_Scripts/Scripts/top_level_main_t01: Crash
-LibTest/isolate/SendPort/send_A01_t02: Crash
-LibTest/isolate/SendPort/send_A01_t03: Crash
-
# It makes no sense to run any test that uses spawnURI under the simulator
# as that would involve running CFE (the front end) in simulator mode
# to compile the URI file specified in spawnURI code.
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 0e59aaa..d2b5d94 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -45,7 +45,7 @@
uri_parse_test: Slow, Pass
uri_test: Slow, Pass
-[ $compiler == dartkb || $compiler == dartkp ]
+[ $compiler == dartkp ]
bigint_parse_radix_test: Slow, Pass # --no_intrinsify
bigint_test/03: SkipSlow # --no_intrinsify
bigint_test/15: SkipSlow # --no_intrinsify
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 5226c43..316928f 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -5,6 +5,11 @@
[ $compiler == dartdevk ]
regexp/lookbehind_test/01: Skip # Flaky in uncatchable way. Issue 36280
+[ $compiler == dartkp ]
+bigint_parse_radix_test: Slow, Pass # --no_intrinsify
+bigint_test/03: SkipSlow # --no_intrinsify
+bigint_test/15: SkipSlow # --no_intrinsify
+
[ $mode == debug ]
regexp/pcre_test: Slow, Pass # Issue 22008
@@ -51,11 +56,6 @@
uri_parse_test: Slow, Pass
uri_test: Slow, Pass
-[ $compiler == dartkb || $compiler == dartkp ]
-bigint_parse_radix_test: Slow, Pass # --no_intrinsify
-bigint_test/03: SkipSlow # --no_intrinsify
-bigint_test/15: SkipSlow # --no_intrinsify
-
[ $runtime == dart_precompiled || $runtime == vm ]
regexp/global_test: Skip # Issue 21709
regexp/pcre_test: Slow, Pass
diff --git a/tests/language/language.status b/tests/language/language.status
index 277066a..09e7d9e 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -42,7 +42,7 @@
[ $compiler != dart2js && $compiler != dartdevc && !$checked ]
function_type/*: Skip # Needs checked mode.
-[ $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $mode == debug && $runtime == vm ]
+[ $compiler != dartk && $compiler != dartkp && $mode == debug && $runtime == vm ]
identifier/built_in_type_annotation_test/set: Crash # Not supported by legacy VM front-end.
[ $hot_reload || $hot_reload_rollback ]
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index 9ff89b0..c3aae5e 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -218,9 +218,44 @@
vm/no_such_method_error_message_vm_test: SkipByDesign # Looks for unobfuscated name in error message
vm/regress_28325_test: SkipByDesign # Looks for filename in stack trace
+[ $compiler == dartk && $mode == debug && $hot_reload ]
+async_star/async_star2_test/01: Crash
+async_star/async_star2_test/05: Crash
+
[ $compiler == dartk && $mode == debug && ($hot_reload || $hot_reload_rollback) ]
+enum/duplicate_test/02: Crash # Issue 34606
+enum/duplicate_test/none: Crash # Issue 34606
+enum/private_test/01: Crash # Issue 34606
+enum/test: Crash # Issue 34606
unsorted/inference_enum_list_test: Skip # Issue 35885
+[ $compiler == dartk && $mode == product && $runtime == vm ]
+vm/causal_async_exception_stack2_test: SkipByDesign
+vm/causal_async_exception_stack_test: SkipByDesign
+
+# ===== dartk + vm status lines =====
+[ $compiler == dartk && $runtime == vm ]
+const/const2_test: Crash # Flaky
+main/no_main_test/01: Skip
+mixin/illegal_super_use_test: Skip # Issues 24478 and 23773
+mixin/illegal_superclass_test: Skip # Issues 24478 and 23773
+unsorted/disassemble_test: Slow, Crash # dartbug.com/34971
+vm/closure_memory_retention_test: Skip # KernelVM bug: Hits OOM
+vm/regress_29145_test: Skip # Issue 29145
+web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
+
+[ $compiler == dartk && $hot_reload_rollback ]
+symbol/conflict_test: Slow, Pass
+
+[ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
+async_star/async_star2_test/01: Skip # Timeout
+async_star/async_star2_test/02: Skip # Timeout
+async_star/async_star2_test/03: Skip # Timeout
+async_star/async_star2_test/04: Skip # Timeout
+async_star/async_star2_test/05: Skip # Timeout
+async_star/async_star2_test/none: Skip # Timeout
+type_constants_test/none: Skip # Deferred libraries and hot reload.
+
[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
vm/precompiled_static_initializer_test: Slow, Pass
@@ -280,42 +315,5 @@
[ $compiler == dartkp && $system == windows ]
unsorted/disassemble_test: Slow, Pass
-[ $mode == debug && $runtime == vm && ($compiler == app_jitk || $compiler == dartk || $compiler == dartkb) ]
+[ $mode == debug && $runtime == vm && ($compiler == app_jitk || $compiler == dartk) ]
optimize/deopt_inlined_function_lazy_test: Skip
-
-[ $mode == debug && $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
-async_star/async_star2_test/01: Crash
-async_star/async_star2_test/05: Crash
-
-[ $mode == debug && ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
-enum/duplicate_test/02: Crash # Issue 34606
-enum/duplicate_test/none: Crash # Issue 34606
-enum/private_test/01: Crash # Issue 34606
-enum/test: Crash # Issue 34606
-
-[ $mode == product && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-vm/causal_async_exception_stack2_test: SkipByDesign
-vm/causal_async_exception_stack_test: SkipByDesign
-
-# ===== dartk + vm status lines =====
-[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-const/const2_test: Crash # Flaky
-main/no_main_test/01: Skip
-mixin/illegal_super_use_test: Skip # Issues 24478 and 23773
-mixin/illegal_superclass_test: Skip # Issues 24478 and 23773
-unsorted/disassemble_test: Slow, Crash # dartbug.com/34971
-vm/closure_memory_retention_test: Skip # KernelVM bug: Hits OOM
-vm/regress_29145_test: Skip # Issue 29145
-web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
-
-[ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-symbol/conflict_test: Slow, Pass
-
-[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
-async_star/async_star2_test/01: Skip # Timeout
-async_star/async_star2_test/02: Skip # Timeout
-async_star/async_star2_test/03: Skip # Timeout
-async_star/async_star2_test/04: Skip # Timeout
-async_star/async_star2_test/05: Skip # Timeout
-async_star/async_star2_test/none: Skip # Timeout
-type_constants_test/none: Skip # Deferred libraries and hot reload.
diff --git a/tests/language/nnbd/inference/late_variable_type_for_promotion_test.dart b/tests/language/nnbd/inference/late_variable_type_for_promotion_test.dart
new file mode 100644
index 0000000..d6223d5
--- /dev/null
+++ b/tests/language/nnbd/inference/late_variable_type_for_promotion_test.dart
@@ -0,0 +1,120 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../../static_type_helper.dart';
+
+/// Test that promotion logic properly understands the type of a late variable.
+/// In particular, make sure that CFE late lowering doesn't cause flow analysis
+/// to treat the type as nullable when it's non-nullable.
+
+void nonNullableInitializedWithType() {
+ late num x = 0;
+ x.expectStaticType<Exactly<num>>();
+ // Attempting to promote to `int?` should do nothing, since `int?` is not a
+ // subtype of `num`.
+ if (x is int?) {
+ x.expectStaticType<Exactly<num>>();
+ }
+ // Attempting to promote to `int` should be ok, though.
+ if (x is int) {
+ x.expectStaticType<Exactly<int>>();
+ }
+}
+
+void nullableInitializedWithType() {
+ late num? x = 0 as num?; // Cast to prevent promotion
+ x.expectStaticType<Exactly<num?>>();
+ // Attempting to promote to `num` should be ok, since `num` is a subtype of
+ // `num?`.
+ if (x is num) {
+ x.expectStaticType<Exactly<num>>();
+ }
+ // Attempting to promote to `int?` should be ok too.
+ if (x is int?) {
+ x.expectStaticType<Exactly<int?>>();
+ }
+}
+
+void nonNullableInitializedUntyped() {
+ late var x = 0 as num;
+ x.expectStaticType<Exactly<num>>();
+ // Attempting to promote to `int?` should do nothing, since `int?` is not a
+ // subtype of `num`.
+ if (x is int?) {
+ x.expectStaticType<Exactly<num>>();
+ }
+ // Attempting to promote to `int` should be ok, though.
+ if (x is int) {
+ x.expectStaticType<Exactly<int>>();
+ }
+}
+
+void nullableInitializedUntyped() {
+ late var x = 0 as num?;
+ x.expectStaticType<Exactly<num?>>();
+ // Attempting to promote to `num` should be ok, since `num` is a subtype of
+ // `num?`.
+ if (x is num) {
+ x.expectStaticType<Exactly<num>>();
+ }
+ // Attempting to promote to `int?` should be ok too.
+ if (x is int?) {
+ x.expectStaticType<Exactly<int?>>();
+ }
+}
+
+void nonNullableUninitializedWithType() {
+ late num x;
+ x = 0;
+ x.expectStaticType<Exactly<num>>();
+ // Attempting to promote to `int?` should do nothing, since `int?` is not a
+ // subtype of `num`.
+ if (x is int?) {
+ x.expectStaticType<Exactly<num>>();
+ }
+ // Attempting to promote to `int` should be ok, though.
+ if (x is int) {
+ x.expectStaticType<Exactly<int>>();
+ }
+}
+
+void nullableUninitializedWithType() {
+ late num? x;
+ x = 0 as num?; // Cast to prevent promotion
+ x.expectStaticType<Exactly<num?>>();
+ // Attempting to promote to `num` should be ok, since `num` is a subtype of
+ // `num?`.
+ if (x is num) {
+ x.expectStaticType<Exactly<num>>();
+ }
+ // Attempting to promote to `int?` should be ok too.
+ if (x is int?) {
+ x.expectStaticType<Exactly<int?>>();
+ }
+}
+
+void uninitializedUntyped() {
+ late x;
+ x = 0;
+ x.expectStaticType<Exactly<dynamic>>();
+ // Attempting to promote to `int?` should be ok, since `int?` is a subtype of
+ // `dynamic`.
+ if (x is int?) {
+ x.expectStaticType<Exactly<int?>>();
+ }
+ // Attempting to promote to `int` should be ok too.
+ if (x is int) {
+ x.expectStaticType<Exactly<int>>();
+ }
+}
+
+main() {
+ nonNullableInitializedWithType();
+ nullableInitializedWithType();
+ nonNullableInitializedUntyped();
+ nullableInitializedUntyped();
+ nonNullableUninitializedWithType();
+ nullableUninitializedWithType();
+ uninitializedUntyped();
+}
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index c602c82..80846fb 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -41,7 +41,7 @@
[ $compiler != dart2js && $compiler != dartdevc && !$checked ]
function_type/*: Skip # Needs checked mode.
-[ $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $mode == debug && $runtime == vm ]
+[ $compiler != dartk && $compiler != dartkp && $mode == debug && $runtime == vm ]
identifier/built_in_type_annotation_test/set: Crash # Not supported by legacy VM front-end.
[ $hot_reload || $hot_reload_rollback ]
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 65d883a..8c0d481 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -108,21 +108,21 @@
[ $compiler == dartkp && $system == windows ]
unsorted/disassemble_test: Slow, Pass
-[ $mode == debug && $runtime == vm && ($compiler == app_jitk || $compiler == dartk || $compiler == dartkb) ]
+[ $mode == debug && $runtime == vm && ($compiler == app_jitk || $compiler == dartk) ]
optimize/deopt_inlined_function_lazy_test: Skip
-[ $mode == debug && ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
+[ $mode == debug && ($compiler == dartk) && ($hot_reload || $hot_reload_rollback) ]
enum/duplicate_test/02: Crash # Issue 34606
enum/duplicate_test/none: Crash # Issue 34606
enum/private_test/01: Crash # Issue 34606
enum/test: Crash # Issue 34606
-[ $mode == product && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $mode == product && $runtime == vm && ($compiler == dartk) ]
vm/causal_async_exception_stack2_test: SkipByDesign
vm/causal_async_exception_stack_test: SkipByDesign
# ===== dartk + vm status lines =====
-[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $runtime == vm && ($compiler == dartk) ]
const/const2_test: Crash # Flaky
main/no_main_test/01: Skip
mixin/illegal_super_use_test: Skip # Issues 24478 and 23773
@@ -132,8 +132,8 @@
vm/regress_29145_test: Skip # Issue 29145
web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
-[ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
+[ $hot_reload_rollback && ($compiler == dartk) ]
symbol/conflict_test: Slow, Pass
-[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
+[ ($compiler == dartk) && ($hot_reload || $hot_reload_rollback) ]
type_constants_test/none: Skip # Deferred libraries and hot reload.
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 8d88c56..43d6d0e 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -61,7 +61,7 @@
[ $arch == simarm || $arch == simarmv6 ]
convert/utf85_test: Skip # Pass, Slow Issue 12644.
-[ $arch != x64 || $compiler == dartkb || $runtime != vm ]
+[ $arch != x64 || $runtime != vm ]
isolate/int32_length_overflow_test: SkipSlow
[ $mode == product || $runtime != vm ]
diff --git a/tests/lib/lib_kernel.status b/tests/lib/lib_kernel.status
index 8151fcf..03ac748 100644
--- a/tests/lib/lib_kernel.status
+++ b/tests/lib/lib_kernel.status
@@ -6,20 +6,17 @@
isolate/ping_pause_test: Skip # Issue https://dartbug.com/37787
-[ $compiler == dartkb ]
-isolate/isolate_complex_messages_test: Crash # runtime/vm/object.cc: 17395: error: expected: type_arguments.IsNull() || type_arguments.IsCanonical()
-
[ $compiler == fasta ]
html/*: Skip # TODO(ahe): Make dart:html available.
js/*: Skip # TODO(ahe): Make dart:js available.
-[ $arch == x64 && $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $arch == x64 && $compiler == dartk && $mode == debug && $runtime == vm ]
mirrors/invocation_fuzz_test: Skip # Because it times out, issue 29439.
[ $arch == x64 && ($hot_reload || $hot_reload_rollback) ]
convert/base64_test/01: Crash # http://dartbug.com/35948
-[ $builder_tag == optimization_counter_threshold && ($compiler == dartk || $compiler == dartkb) ]
+[ $builder_tag == optimization_counter_threshold && $compiler == dartk ]
mirrors/invocation_fuzz_test/emptyarray: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
mirrors/invocation_fuzz_test/false: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
mirrors/invocation_fuzz_test/none: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
@@ -29,6 +26,33 @@
[ $compiler == app_jitk && ($mode == product || $mode == release) ]
isolate/spawn_uri_nested_vm_test: Skip # Timeout, Issue 33385
+[ $compiler == dartk && $mode == debug && $runtime == vm ]
+mirrors/other_declarations_location_test: Crash # Issue 33325 (assertion error, TypeParameter not having position).
+
+[ $compiler == dartk && $mode == debug && $hot_reload_rollback ]
+isolate/message3_test/constList_identical: Skip # Timeout
+
+# ===== dartk + vm status lines =====
+[ $compiler == dartk && $runtime == vm ]
+html/*: SkipByDesign # dart:html not supported on VM.
+isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
+isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
+isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
+isolate/static_function_test: Skip # Times out. Issue 31855. CompileTimeError. Issue 31402
+mirrors/invocation_fuzz_test: Crash
+mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
+mirrors/native_class_test: SkipByDesign # Imports dart:html
+
+[ $compiler == dartk && $hot_reload_rollback ]
+isolate/illegal_msg_function_test: Skip # Timeout
+isolate/pause_test: Skip # Timeout
+
+[ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
+isolate/message4_test: Crash # Timeout and sporadic crash (issue 33824)
+mirrors/dynamic_load_test: Skip # Reload has an effect similar to deleting the dynamically loaded library
+mirrors/immutable_collections_test: Pass, Slow
+mirrors/mirrors_reader_test: Pass, Slow
+
[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
isolate/static_function_test: Skip # Flaky (https://github.com/dart-lang/sdk/issues/30063).
@@ -40,34 +64,7 @@
isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
mirrors/*: SkipByDesign # Mirrors are not supported in AOT mode.
-[ $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-mirrors/other_declarations_location_test: Crash # Issue 33325 (assertion error, TypeParameter not having position).
-
-[ $mode == debug && $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-isolate/message3_test/constList_identical: Skip # Timeout
-
-# ===== dartk + vm status lines =====
-[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-html/*: SkipByDesign # dart:html not supported on VM.
-isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/static_function_test: Skip # Times out. Issue 31855. CompileTimeError. Issue 31402
-mirrors/invocation_fuzz_test: Crash
-mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
-mirrors/native_class_test: SkipByDesign # Imports dart:html
-
-[ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-isolate/illegal_msg_function_test: Skip # Timeout
-isolate/pause_test: Skip # Timeout
-
-[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
-isolate/message4_test: Crash # Timeout and sporadic crash (issue 33824)
-mirrors/dynamic_load_test: Skip # Reload has an effect similar to deleting the dynamically loaded library
-mirrors/immutable_collections_test: Pass, Slow
-mirrors/mirrors_reader_test: Pass, Slow
-
-[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp ]
+[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkp ]
html/*: SkipByDesign
js/*: SkipByDesign
diff --git a/tests/lib/lib_vm.status b/tests/lib/lib_vm.status
index edb365c..77a53e5 100644
--- a/tests/lib/lib_vm.status
+++ b/tests/lib/lib_vm.status
@@ -17,7 +17,7 @@
[ $arch == simarm64 && $runtime == vm ]
convert/utf85_test: Skip # Pass, Slow Issue 20111.
-[ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $runtime == vm ]
+[ $compiler != app_jitk && $compiler != dartk && $runtime == vm ]
async/future_or_only_in_async_test/00: MissingCompileTimeError
convert/streamed_conversion_json_utf8_decode_test: Pass, Slow # Infrequent timeouts.
html/*: SkipByDesign # dart:html not supported on VM.
@@ -34,7 +34,7 @@
mirrors/redirecting_factory_test/01: RuntimeError
mirrors/redirecting_factory_test/none: RuntimeError
-[ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $runtime == vm && !$checked ]
+[ $compiler != app_jitk && $compiler != dartk && $runtime == vm && !$checked ]
mirrors/inference_and_no_such_method_test: RuntimeError
[ $runtime == vm && $system == fuchsia ]
diff --git a/tests/lib/wasm/memory_error_test.dart b/tests/lib/wasm/memory_error_test.dart
index 3a172d8..f02dc6c 100644
--- a/tests/lib/wasm/memory_error_test.dart
+++ b/tests/lib/wasm/memory_error_test.dart
@@ -9,9 +9,14 @@
import "dart:typed_data";
void main() {
- Expect.throws(() => WasmMemory(1000000000));
- var mem = WasmMemory(100);
+ // Empty wasm module.
+ var data = Uint8List.fromList(
+ [0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0x00, 0x00]);
+ var module = WasmModule(data);
+
+ Expect.throws(() => module.createMemory(1000000000));
+ var mem = module.createMemory(100);
Expect.throws(() => mem.grow(1000000000));
- mem = WasmMemory(100, 200);
+ mem = module.createMemory(100, 200);
Expect.throws(() => mem.grow(300));
}
diff --git a/tests/lib/wasm/memory_test.dart b/tests/lib/wasm/memory_test.dart
index ecaf433..544c6a1 100644
--- a/tests/lib/wasm/memory_test.dart
+++ b/tests/lib/wasm/memory_test.dart
@@ -9,7 +9,12 @@
import "dart:typed_data";
void main() {
- var mem = WasmMemory(100);
+ // Empty wasm module.
+ var data = Uint8List.fromList(
+ [0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0x00, 0x00]);
+ var module = WasmModule(data);
+
+ var mem = module.createMemory(100);
Expect.equals(100, mem.lengthInPages);
Expect.equals(100 * WasmMemory.kPageSizeInBytes, mem.lengthInBytes);
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index 843b50a..535b366 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -61,7 +61,7 @@
[ $arch == simarm || $arch == simarmv6 ]
convert/utf85_test: Skip # Pass, Slow Issue 12644.
-[ $arch != x64 || $compiler == dartkb || $runtime != vm ]
+[ $arch != x64 || $runtime != vm ]
isolate/int32_length_overflow_test: SkipSlow
[ $mode == product || $runtime != vm ]
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index a1866a5..03ac748 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -6,21 +6,17 @@
isolate/ping_pause_test: Skip # Issue https://dartbug.com/37787
-[ $compiler == dartkb ]
-async/stream_state_nonzero_timer_test: Skip # Issues 42331, 42073
-isolate/isolate_complex_messages_test: Crash # runtime/vm/object.cc: 17395: error: expected: type_arguments.IsNull() || type_arguments.IsCanonical()
-
[ $compiler == fasta ]
html/*: Skip # TODO(ahe): Make dart:html available.
js/*: Skip # TODO(ahe): Make dart:js available.
-[ $arch == x64 && $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
+[ $arch == x64 && $compiler == dartk && $mode == debug && $runtime == vm ]
mirrors/invocation_fuzz_test: Skip # Because it times out, issue 29439.
[ $arch == x64 && ($hot_reload || $hot_reload_rollback) ]
convert/base64_test/01: Crash # http://dartbug.com/35948
-[ $builder_tag == optimization_counter_threshold && ($compiler == dartk || $compiler == dartkb) ]
+[ $builder_tag == optimization_counter_threshold && $compiler == dartk ]
mirrors/invocation_fuzz_test/emptyarray: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
mirrors/invocation_fuzz_test/false: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
mirrors/invocation_fuzz_test/none: Crash # Flaky on vm-kernel-optcounter-threshold-linux-release-x64, bug #31838
@@ -30,6 +26,33 @@
[ $compiler == app_jitk && ($mode == product || $mode == release) ]
isolate/spawn_uri_nested_vm_test: Skip # Timeout, Issue 33385
+[ $compiler == dartk && $mode == debug && $runtime == vm ]
+mirrors/other_declarations_location_test: Crash # Issue 33325 (assertion error, TypeParameter not having position).
+
+[ $compiler == dartk && $mode == debug && $hot_reload_rollback ]
+isolate/message3_test/constList_identical: Skip # Timeout
+
+# ===== dartk + vm status lines =====
+[ $compiler == dartk && $runtime == vm ]
+html/*: SkipByDesign # dart:html not supported on VM.
+isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
+isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
+isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
+isolate/static_function_test: Skip # Times out. Issue 31855. CompileTimeError. Issue 31402
+mirrors/invocation_fuzz_test: Crash
+mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
+mirrors/native_class_test: SkipByDesign # Imports dart:html
+
+[ $compiler == dartk && $hot_reload_rollback ]
+isolate/illegal_msg_function_test: Skip # Timeout
+isolate/pause_test: Skip # Timeout
+
+[ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
+isolate/message4_test: Crash # Timeout and sporadic crash (issue 33824)
+mirrors/dynamic_load_test: Skip # Reload has an effect similar to deleting the dynamically loaded library
+mirrors/immutable_collections_test: Pass, Slow
+mirrors/mirrors_reader_test: Pass, Slow
+
[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
isolate/static_function_test: Skip # Flaky (https://github.com/dart-lang/sdk/issues/30063).
@@ -41,34 +64,7 @@
isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
mirrors/*: SkipByDesign # Mirrors are not supported in AOT mode.
-[ $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-mirrors/other_declarations_location_test: Crash # Issue 33325 (assertion error, TypeParameter not having position).
-
-[ $mode == debug && $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-isolate/message3_test/constList_identical: Skip # Timeout
-
-# ===== dartk + vm status lines =====
-[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-html/*: SkipByDesign # dart:html not supported on VM.
-isolate/deferred_in_isolate2_test: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/static_function_test: Skip # Times out. Issue 31855. CompileTimeError. Issue 31402
-mirrors/invocation_fuzz_test: Crash
-mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
-mirrors/native_class_test: SkipByDesign # Imports dart:html
-
-[ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-isolate/illegal_msg_function_test: Skip # Timeout
-isolate/pause_test: Skip # Timeout
-
-[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
-isolate/message4_test: Crash # Timeout and sporadic crash (issue 33824)
-mirrors/dynamic_load_test: Skip # Reload has an effect similar to deleting the dynamically loaded library
-mirrors/immutable_collections_test: Pass, Slow
-mirrors/mirrors_reader_test: Pass, Slow
-
-[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp ]
+[ $compiler == app_jitk || $compiler == dartk || $compiler == dartkp ]
html/*: SkipByDesign
js/*: SkipByDesign
diff --git a/tests/lib_2/lib_2_vm.status b/tests/lib_2/lib_2_vm.status
index 65cb43c..68e3420 100644
--- a/tests/lib_2/lib_2_vm.status
+++ b/tests/lib_2/lib_2_vm.status
@@ -8,7 +8,7 @@
[ $arch == arm64 && $runtime == vm ]
mirrors/immutable_collections_test: Pass, Slow # http://dartbug.com/33057
-[ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $runtime == vm ]
+[ $compiler != app_jitk && $compiler != dartk && $runtime == vm ]
async/future_or_only_in_async_test/00: MissingCompileTimeError
convert/streamed_conversion_json_utf8_decode_test: Pass, Slow # Infrequent timeouts.
html/*: SkipByDesign # dart:html not supported on VM.
@@ -25,7 +25,7 @@
mirrors/redirecting_factory_test/01: RuntimeError
mirrors/redirecting_factory_test/none: RuntimeError
-[ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $runtime == vm && !$checked ]
+[ $compiler != app_jitk && $compiler != dartk && $runtime == vm && !$checked ]
mirrors/inference_and_no_such_method_test: RuntimeError
[ $runtime == vm && $system == fuchsia ]
diff --git a/tests/lib_2/wasm/basic_test.dart b/tests/lib_2/wasm/basic_test.dart
index 72f4c6c..da2fb9a 100644
--- a/tests/lib_2/wasm/basic_test.dart
+++ b/tests/lib_2/wasm/basic_test.dart
@@ -22,7 +22,7 @@
var inst = WasmModule(data).instantiate(WasmImports());
var fn = inst.lookupFunction("square");
- int n = fn.call(1234);
+ int n = fn(1234);
Expect.equals(1234 * 1234, n);
diff --git a/tests/lib_2/wasm/memory_error_test.dart b/tests/lib_2/wasm/memory_error_test.dart
index 3a172d8..f02dc6c 100644
--- a/tests/lib_2/wasm/memory_error_test.dart
+++ b/tests/lib_2/wasm/memory_error_test.dart
@@ -9,9 +9,14 @@
import "dart:typed_data";
void main() {
- Expect.throws(() => WasmMemory(1000000000));
- var mem = WasmMemory(100);
+ // Empty wasm module.
+ var data = Uint8List.fromList(
+ [0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0x00, 0x00]);
+ var module = WasmModule(data);
+
+ Expect.throws(() => module.createMemory(1000000000));
+ var mem = module.createMemory(100);
Expect.throws(() => mem.grow(1000000000));
- mem = WasmMemory(100, 200);
+ mem = module.createMemory(100, 200);
Expect.throws(() => mem.grow(300));
}
diff --git a/tests/lib_2/wasm/memory_test.dart b/tests/lib_2/wasm/memory_test.dart
index ecaf433..544c6a1 100644
--- a/tests/lib_2/wasm/memory_test.dart
+++ b/tests/lib_2/wasm/memory_test.dart
@@ -9,7 +9,12 @@
import "dart:typed_data";
void main() {
- var mem = WasmMemory(100);
+ // Empty wasm module.
+ var data = Uint8List.fromList(
+ [0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0x00, 0x00]);
+ var module = WasmModule(data);
+
+ var mem = module.createMemory(100);
Expect.equals(100, mem.lengthInPages);
Expect.equals(100 * WasmMemory.kPageSizeInBytes, mem.lengthInBytes);
diff --git a/tests/standalone/standalone_kernel.status b/tests/standalone/standalone_kernel.status
index 02cfb78..bc9439c 100644
--- a/tests/standalone/standalone_kernel.status
+++ b/tests/standalone/standalone_kernel.status
@@ -8,9 +8,6 @@
io/process_sync_test: Pass, Slow # Spawns synchronously subprocesses in sequence.
out_of_memory_unhandled_exception_test: Pass, Slow
-[ $compiler == dartkb ]
-no_lazy_dispatchers_test: SkipByDesign # KBC interpreter doesn't support --no_lazy_dispatchers
-
[ $system == android ]
entrypoints_verification_test: Skip # Requires shared objects which the test script doesn't "adb push".
io/http_ban_http_allowed_cases_test: Skip # Depends on grabbing local hostname which isn't supported.
@@ -21,12 +18,62 @@
[ $arch == ia32 && $builder_tag == optimization_counter_threshold ]
io/file_lock_test: SkipSlow # Timeout
-[ $arch == simarm64 && ($compiler == dartk || $compiler == dartkb) ]
+[ $arch == simarm64 && $compiler == dartk ]
io/http_bind_test: Slow, Pass
-[ $builder_tag == optimization_counter_threshold && ($compiler == dartk || $compiler == dartkb) ]
+[ $builder_tag == optimization_counter_threshold && $compiler == dartk ]
map_insert_remove_oom_test: Skip # Heap limit too low.
+[ $compiler == dartk && $mode == debug && $runtime == vm ]
+io/file_lock_test: Slow, Pass
+io/raw_socket_test: Crash
+io/socket_exception_test: Crash
+io/socket_finalizer_test: Crash
+io/socket_info_ipv4_test: Crash
+io/socket_info_ipv6_test: Crash
+io/socket_port_test: Crash
+
+[ $compiler == dartk && $mode == debug && $hot_reload ]
+io/web_socket_ping_test: Crash
+
+[ $compiler == dartk && $runtime == vm ]
+no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
+
+[ $compiler == dartk && $system == windows ]
+io/dart_std_io_pipe_test: Slow, Pass
+io/secure_builtin_roots_test: Skip # Issues 32137 and 32138.
+io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
+map_insert_remove_oom_test: Skip # Heap limit too low.
+
+[ $compiler == dartk && $hot_reload ]
+io/http_no_reason_phrase_test: Crash
+io/http_outgoing_size_test: Crash
+
+[ $compiler == dartk && $hot_reload_rollback ]
+io/directory_chdir_test: Skip # Timeout
+io/echo_server_stream_test: Slow, Pass
+
+# Enabling of dartk for sim{arm,arm64} revealed these test failures, which
+# are to be triaged. Isolate tests are skipped on purpose due to the usage of
+# batch mode.
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64) ]
+io/file_blocking_lock_test: Crash # Please triage.
+io/file_lock_test: Slow, Pass
+map_insert_remove_oom_test: Skip # Heap limit too low.
+
+[ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
+io/addlatexhash_test: Skip # Timeout
+io/http_advanced_test: Skip # Timeout
+io/http_auth_digest_test: Crash
+io/http_auth_test: Skip # Timeout
+io/http_proxy_advanced_test: Skip # Timeout
+io/http_read_test: Skip # Timeout
+io/pipe_server_test: Skip # Timeout
+io/socket_close_test: Skip # Timeout
+io/socket_many_connections_test: Skip # Timeout
+io/web_socket_compression_test: Skip # Timeout
+io/web_socket_test: Skip # Timeout
+
[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
io/raw_socket_test: Crash
io/socket_exception_test: Crash
@@ -61,58 +108,5 @@
map_insert_remove_oom_test: Skip # Heap limit too low.
no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
-[ $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-io/file_lock_test: Slow, Pass
-io/raw_socket_test: Crash
-io/socket_exception_test: Crash
-io/socket_finalizer_test: Crash
-io/socket_info_ipv4_test: Crash
-io/socket_info_ipv6_test: Crash
-io/socket_port_test: Crash
-
-[ $mode == debug && $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
-io/web_socket_ping_test: Crash
-
-[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
-
-[ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
-io/dart_std_io_pipe_test: Slow, Pass
-io/secure_builtin_roots_test: Skip # Issues 32137 and 32138.
-io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
-map_insert_remove_oom_test: Skip # Heap limit too low.
-
-[ $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
-io/http_no_reason_phrase_test: Crash
-io/http_outgoing_size_test: Crash
-
-[ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-io/directory_chdir_test: Skip # Timeout
-io/echo_server_stream_test: Slow, Pass
-
-# Enabling of dartk for sim{arm,arm64} revealed these test failures, which
-# are to be triaged. Isolate tests are skipped on purpose due to the usage of
-# batch mode.
-[ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
-io/file_blocking_lock_test: Crash # Please triage.
-io/file_lock_test: Slow, Pass
-map_insert_remove_oom_test: Skip # Heap limit too low.
-
-[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
-io/addlatexhash_test: Skip # Timeout
-io/http_advanced_test: Skip # Timeout
-io/http_auth_digest_test: Crash
-io/http_auth_test: Skip # Timeout
-io/http_proxy_advanced_test: Skip # Timeout
-io/http_read_test: Skip # Timeout
-io/pipe_server_test: Skip # Timeout
-io/socket_close_test: Skip # Timeout
-io/socket_many_connections_test: Skip # Timeout
-io/web_socket_compression_test: Skip # Timeout
-io/web_socket_test: Skip # Timeout
-
-[ $builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd ]
-io/http_big_header_test: SkipSlow # Timeout
-
-[ $compiler != dartk && $compiler != dartkb && $compiler != dartkp || $compiler == dartkp && $system == windows ]
+[ $compiler != dartk && $compiler != dartkp || $compiler == dartkp && $system == windows ]
entrypoints_verification_test: SkipByDesign # Requires VM to run. Cannot run in precompiled Windows because the DLL is linked against dart.exe instead of dart_precompiled_runtime.exe.
diff --git a/tests/standalone/standalone_vm.status b/tests/standalone/standalone_vm.status
index 93e314f..bc1e1fb 100644
--- a/tests/standalone/standalone_vm.status
+++ b/tests/standalone/standalone_vm.status
@@ -47,9 +47,6 @@
[ $arch == arm && $mode == release && $runtime == dart_precompiled && $system == android ]
io/stdout_stderr_non_blocking_test: Pass, Timeout # Issue 28426
-[ $arch == x64 && $compiler == dartkb && $runtime == vm && $system == linux ]
-io/stdout_stderr_non_blocking_test: Pass, Timeout # Issue 35192
-
[ $arch == x64 && $mode == release && $runtime == vm && $system == linux ]
io/http_bind_test: Pass, Timeout # Issue 35192
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index af8e3ec..cf0367e 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -9,9 +9,6 @@
io/process_sync_test: Pass, Slow # Spawns synchronously subprocesses in sequence.
out_of_memory_unhandled_exception_test: Pass, Slow
-[ $compiler == dartkb ]
-no_lazy_dispatchers_test: SkipByDesign # KBC interpreter doesn't support --no_lazy_dispatchers
-
[ $system == android ]
entrypoints_verification_test: Skip # Requires shared objects which the test script doesn't "adb push".
io/http_ban_http_allowed_cases_test: Skip # Depends on grabbing local hostname which isn't supported.
@@ -22,12 +19,62 @@
[ $arch == ia32 && $builder_tag == optimization_counter_threshold ]
io/file_lock_test: SkipSlow # Timeout
-[ $arch == simarm64 && ($compiler == dartk || $compiler == dartkb) ]
+[ $arch == simarm64 && $compiler == dartk ]
io/http_bind_test: Slow, Pass
-[ $builder_tag == optimization_counter_threshold && ($compiler == dartk || $compiler == dartkb) ]
+[ $builder_tag == optimization_counter_threshold && $compiler == dartk ]
map_insert_remove_oom_test: Skip # Heap limit too low.
+[ $compiler == dartk && $mode == debug && $runtime == vm ]
+io/file_lock_test: Slow, Pass
+io/raw_socket_test: Crash
+io/socket_exception_test: Crash
+io/socket_finalizer_test: Crash
+io/socket_info_ipv4_test: Crash
+io/socket_info_ipv6_test: Crash
+io/socket_port_test: Crash
+
+[ $compiler == dartk && $mode == debug && $hot_reload ]
+io/web_socket_ping_test: Crash
+
+[ $compiler == dartk && $runtime == vm ]
+no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
+
+[ $compiler == dartk && $system == windows ]
+io/dart_std_io_pipe_test: Slow, Pass
+io/secure_builtin_roots_test: Skip # Issues 32137 and 32138.
+io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
+map_insert_remove_oom_test: Skip # Heap limit too low.
+
+[ $compiler == dartk && $hot_reload ]
+io/http_no_reason_phrase_test: Crash
+io/http_outgoing_size_test: Crash
+
+[ $compiler == dartk && $hot_reload_rollback ]
+io/directory_chdir_test: Skip # Timeout
+io/echo_server_stream_test: Slow, Pass
+
+# Enabling of dartk for sim{arm,arm64} revealed these test failures, which
+# are to be triaged. Isolate tests are skipped on purpose due to the usage of
+# batch mode.
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64) ]
+io/file_blocking_lock_test: Crash # Please triage.
+io/file_lock_test: Slow, Pass
+map_insert_remove_oom_test: Skip # Heap limit too low.
+
+[ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
+io/addlatexhash_test: Skip # Timeout
+io/http_advanced_test: Skip # Timeout
+io/http_auth_digest_test: Crash
+io/http_auth_test: Skip # Timeout
+io/http_proxy_advanced_test: Skip # Timeout
+io/http_read_test: Skip # Timeout
+io/pipe_server_test: Skip # Timeout
+io/socket_close_test: Skip # Timeout
+io/socket_many_connections_test: Skip # Timeout
+io/web_socket_compression_test: Skip # Timeout
+io/web_socket_test: Skip # Timeout
+
[ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled ]
io/raw_socket_test: Crash
io/socket_exception_test: Crash
@@ -62,58 +109,5 @@
map_insert_remove_oom_test: Skip # Heap limit too low.
no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
-[ $mode == debug && $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-io/file_lock_test: Slow, Pass
-io/raw_socket_test: Crash
-io/socket_exception_test: Crash
-io/socket_finalizer_test: Crash
-io/socket_info_ipv4_test: Crash
-io/socket_info_ipv6_test: Crash
-io/socket_port_test: Crash
-
-[ $mode == debug && $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
-io/web_socket_ping_test: Crash
-
-[ $runtime == vm && ($compiler == dartk || $compiler == dartkb) ]
-no_support_debugger_test: Skip # kernel-service snapshot not compatible with flag disabled
-
-[ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
-io/dart_std_io_pipe_test: Slow, Pass
-io/secure_builtin_roots_test: Skip # Issues 32137 and 32138.
-io/wait_for_event_isolate_test: Skip # Issues 32137 and 32138.
-map_insert_remove_oom_test: Skip # Heap limit too low.
-
-[ $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
-io/http_no_reason_phrase_test: Crash
-io/http_outgoing_size_test: Crash
-
-[ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
-io/directory_chdir_test: Skip # Timeout
-io/echo_server_stream_test: Slow, Pass
-
-# Enabling of dartk for sim{arm,arm64} revealed these test failures, which
-# are to be triaged. Isolate tests are skipped on purpose due to the usage of
-# batch mode.
-[ ($arch == simarm || $arch == simarm64) && ($compiler == dartk || $compiler == dartkb) ]
-io/file_blocking_lock_test: Crash # Please triage.
-io/file_lock_test: Slow, Pass
-map_insert_remove_oom_test: Skip # Heap limit too low.
-
-[ ($compiler == dartk || $compiler == dartkb) && ($hot_reload || $hot_reload_rollback) ]
-io/addlatexhash_test: Skip # Timeout
-io/http_advanced_test: Skip # Timeout
-io/http_auth_digest_test: Crash
-io/http_auth_test: Skip # Timeout
-io/http_proxy_advanced_test: Skip # Timeout
-io/http_read_test: Skip # Timeout
-io/pipe_server_test: Skip # Timeout
-io/socket_close_test: Skip # Timeout
-io/socket_many_connections_test: Skip # Timeout
-io/web_socket_compression_test: Skip # Timeout
-io/web_socket_test: Skip # Timeout
-
-[ $builder_tag == bytecode_interpreter || $builder_tag == bytecode_interpreter_nnbd ]
-io/http_big_header_test: SkipSlow # Timeout
-
-[ $compiler != dartk && $compiler != dartkb && $compiler != dartkp || $compiler == dartkp && $system == windows ]
+[ $compiler != dartk && $compiler != dartkp || $compiler == dartkp && $system == windows ]
entrypoints_verification_test: SkipByDesign # Requires VM to run. Cannot run in precompiled Windows because the DLL is linked against dart.exe instead of dart_precompiled_runtime.exe.
diff --git a/tests/standalone_2/standalone_2_vm.status b/tests/standalone_2/standalone_2_vm.status
index 2bd998d..478da0f 100644
--- a/tests/standalone_2/standalone_2_vm.status
+++ b/tests/standalone_2/standalone_2_vm.status
@@ -47,9 +47,6 @@
[ $arch == arm && $mode == release && $runtime == dart_precompiled && $system == android ]
io/stdout_stderr_non_blocking_test: Pass, Timeout # Issue 28426
-[ $arch == x64 && $compiler == dartkb && $runtime == vm && $system == linux ]
-io/stdout_stderr_non_blocking_test: Pass, Timeout # Issue 35192
-
[ $arch == x64 && $mode == release && $runtime == vm && $system == linux ]
io/http_bind_test: Pass, Timeout # Issue 35192
diff --git a/third_party/wasmer/BUILD.gn b/third_party/wasmer/BUILD.gn
index afd36a8..f3398f5 100644
--- a/third_party/wasmer/BUILD.gn
+++ b/third_party/wasmer/BUILD.gn
@@ -1,17 +1,6 @@
import("../../build/rust/rust.gni")
-shared_library("wasmer_wrapper") {
- sources = [
- "wasmer.hh",
- "wasmer_wrapper.cc",
- ]
- deps = [ ":wasmer_lib" ]
- if (is_linux) {
- libs = [ "rt" ]
- }
- ldflags = [ "-Wl,--no-as-needed" ] # Force linking of all wasmer symbols.
-}
-
-rust_library("wasmer_lib") {
+rust_library("wasmer") {
lib_name = "wasmer"
+ shared = true
}
diff --git a/third_party/wasmer/Cargo.toml b/third_party/wasmer/Cargo.toml
index bfe6172..bc52ada 100644
--- a/third_party/wasmer/Cargo.toml
+++ b/third_party/wasmer/Cargo.toml
@@ -1,11 +1,13 @@
[package]
name = "wasmer"
-version = "0.17.1"
+version = "1.0.0-alpha3"
[lib]
name = "wasmer"
-crate-type = ["staticlib"]
+crate-type = ["dylib"]
path = "wasmer.rs"
-[dependencies]
-wasmer-runtime-c-api = "0.17.1"
+[dependencies.wasmer-c-api]
+version = "1.0.0-alpha3"
+default-features = false
+features = ["jit", "cranelift", "wasi"]
diff --git a/third_party/wasmer/LICENSE b/third_party/wasmer/LICENSE
deleted file mode 100644
index 62bb543..0000000
--- a/third_party/wasmer/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2019-present Wasmer, Inc. and its affiliates.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/third_party/wasmer/README.google b/third_party/wasmer/README.google
deleted file mode 100644
index aec1896..0000000
--- a/third_party/wasmer/README.google
+++ /dev/null
@@ -1,11 +0,0 @@
-Name: Wasmer Runtime C API
-Short Name: wasmer
-URL: https://github.com/wasmerio/wasmer/tree/master/lib/runtime-c-api
-Version: 0.6.0
-Date: August 16, 2019
-License: MIT
-
-Description:
-This directory contains an unmodified copy of wasmer.hh from the Wasmer Runtime
-C API (and README.md and LICENCE). Other files in this directory are added to
-build the corresponding rust library.
diff --git a/third_party/wasmer/README.md b/third_party/wasmer/README.md
deleted file mode 100644
index d1475b7..0000000
--- a/third_party/wasmer/README.md
+++ /dev/null
@@ -1,140 +0,0 @@
-<p align="center">
- <a href="https://wasmer.io" target="_blank" rel="noopener noreferrer">
- <img width="300" src="https://raw.githubusercontent.com/wasmerio/wasmer/master/assets/logo.png" alt="Wasmer logo">
- </a>
-</p>
-
-<p align="center">
- <a href="https://dev.azure.com/wasmerio/wasmer/_build/latest?definitionId=3&branchName=master">
- <img src="https://img.shields.io/azure-devops/build/wasmerio/wasmer/3.svg?style=flat-square" alt="Build Status">
- </a>
- <a href="https://github.com/wasmerio/wasmer/blob/master/LICENSE">
- <img src="https://img.shields.io/github/license/wasmerio/wasmer.svg?style=flat-square" alt="License">
- </a>
- <a href="https://spectrum.chat/wasmer">
- <img src="https://withspectrum.github.io/badge/badge.svg" alt="Join the Wasmer Community">
- </a>
- <a href="https://crates.io/crates/wasmer-runtime-c-api">
- <img src="https://img.shields.io/crates/d/wasmer-runtime-c-api.svg?style=flat-square" alt="Number of downloads from crates.io">
- </a>
- <a href="https://wasmerio.github.io/wasmer/c/runtime-c-api/">
- <img src="https://img.shields.io/badge/Docs-Wasmer%20C%20API-blue?style=flat-square" alt="Wasmer C API Documentation">
- </a>
-</p>
-
-# Wasmer Runtime C API
-
-Wasmer is a standalone JIT WebAssembly runtime, aiming to be fully
-compatible with WASI, Emscripten, Rust and Go. [Learn
-more](https://github.com/wasmerio/wasmer).
-
-This crate exposes a C and a C++ API for the Wasmer runtime.
-
-# Usage
-
-The C and C++ header files can be found in the source tree of this
-crate, respectively [`wasmer.h`][wasmer_h] and
-[`wasmer.hh`][wasmer_hh]. They are automatically generated, and always
-up-to-date in this repository.
-The runtime shared library (so, dll, dylib) can also be downloaded in Wasmer [release page](https://github.com/wasmerio/wasmer/releases).
-
-You can find the full C API documentation here:
-https://wasmerio.github.io/wasmer/c/runtime-c-api/
-
-Here is a simple example to use the C API:
-
-```c
-#include <stdio.h>
-#include "../wasmer.h"
-#include <assert.h>
-#include <stdint.h>
-
-int main()
-{
- // Read the Wasm file bytes.
- FILE *file = fopen("sum.wasm", "r");
- fseek(file, 0, SEEK_END);
- long len = ftell(file);
- uint8_t *bytes = malloc(len);
- fseek(file, 0, SEEK_SET);
- fread(bytes, 1, len, file);
- fclose(file);
-
- // Prepare the imports.
- wasmer_import_t imports[] = {};
-
- // Instantiate!
- wasmer_instance_t *instance = NULL;
- wasmer_result_t instantiation_result = wasmer_instantiate(&instance, bytes, len, imports, 0);
-
- assert(instantiation_result == WASMER_OK);
-
- // Let's call a function.
- // Start by preparing the arguments.
-
- // Value of argument #1 is `7i32`.
- wasmer_value_t argument_one;
- argument_one.tag = WASM_I32;
- argument_one.value.I32 = 7;
-
- // Value of argument #2 is `8i32`.
- wasmer_value_t argument_two;
- argument_two.tag = WASM_I32;
- argument_two.value.I32 = 8;
-
- // Prepare the arguments.
- wasmer_value_t arguments[] = {argument_one, argument_two};
-
- // Prepare the return value.
- wasmer_value_t result_one;
- wasmer_value_t results[] = {result_one};
-
- // Call the `sum` function with the prepared arguments and the return value.
- wasmer_result_t call_result = wasmer_instance_call(instance, "sum", arguments, 2, results, 1);
-
- // Let's display the result.
- printf("Call result: %d\n", call_result);
- printf("Result: %d\n", results[0].value.I32);
-
- // `sum(7, 8) == 15`.
- assert(results[0].value.I32 == 15);
- assert(call_result == WASMER_OK);
-
- wasmer_instance_destroy(instance);
-
- return 0;
-}
-```
-
-# Testing
-
-Tests are run using the release build of the library. If you make
-changes or compile with non-default features, please ensure you
-rebuild in release mode for the tests to see the changes.
-
-The tests can be run via `cargo test`, such as:
-
-```sh
-$ cargo test --release -- --nocapture
-```
-
-To run tests manually, enter the `lib/runtime-c-api/tests` directory
-and run the following commands:
-
-```sh
-$ cmake .
-$ make
-$ make test
-```
-
-
-# License
-
-Wasmer is primarily distributed under the terms of the [MIT
-license][mit-license] ([LICENSE][license]).
-
-
-[wasmer_h]: ./wasmer.h
-[wasmer_hh]: ./wasmer.hh
-[mit-license]: http://opensource.org/licenses/MIT
-[license]: https://github.com/wasmerio/wasmer/blob/master/LICENSE
diff --git a/third_party/wasmer/wasmer.hh b/third_party/wasmer/wasmer.hh
deleted file mode 100644
index 647e637..0000000
--- a/third_party/wasmer/wasmer.hh
+++ /dev/null
@@ -1,1273 +0,0 @@
-
-#if !defined(WASMER_H_MACROS)
-
-#define WASMER_H_MACROS
-
-// Define the `ARCH_X86_X64` constant.
-#if defined(MSVC) && defined(_M_AMD64)
-# define ARCH_X86_64
-#elif (defined(GCC) || defined(__GNUC__) || defined(__clang__)) && defined(__x86_64__)
-# define ARCH_X86_64
-#endif
-
-// Compatibility with non-Clang compilers.
-#if !defined(__has_attribute)
-# define __has_attribute(x) 0
-#endif
-
-// Compatibility with non-Clang compilers.
-#if !defined(__has_declspec_attribute)
-# define __has_declspec_attribute(x) 0
-#endif
-
-// Define the `DEPRECATED` macro.
-#if defined(GCC) || defined(__GNUC__) || __has_attribute(deprecated)
-# define DEPRECATED(message) __attribute__((deprecated(message)))
-#elif defined(MSVC) || __has_declspec_attribute(deprecated)
-# define DEPRECATED(message) __declspec(deprecated(message))
-#endif
-
-#define WASMER_WASI_ENABLED
-#endif // WASMER_H_MACROS
-
-
-#ifndef WASMER_H
-#define WASMER_H
-
-#include <cstdarg>
-#include <cstdint>
-#include <cstdlib>
-#include <new>
-
-#if defined(WASMER_WASI_ENABLED)
-enum class Version : uint8_t {
- /// Version cannot be detected or is unknown.
- Unknown = 0,
- /// Latest version. See `wasmer_wasi::WasiVersion::Latest` to
- /// learn more.
- Latest = 1,
- /// `wasi_unstable`.
- Snapshot0 = 2,
- /// `wasi_snapshot_preview1`.
- Snapshot1 = 3,
-};
-#endif
-
-/// List of export/import kinds.
-enum class wasmer_import_export_kind : uint32_t {
- /// The export/import is a function.
- WASM_FUNCTION = 0,
- /// The export/import is a global.
- WASM_GLOBAL = 1,
- /// The export/import is a memory.
- WASM_MEMORY = 2,
- /// The export/import is a table.
- WASM_TABLE = 3,
-};
-
-/// The `wasmer_result_t` enum is a type that represents either a
-/// success, or a failure.
-enum class wasmer_result_t {
- /// Represents a success.
- WASMER_OK = 1,
- /// Represents a failure.
- WASMER_ERROR = 2,
-};
-
-/// Represents all possibles WebAssembly value types.
-///
-/// See `wasmer_value_t` to get a complete example.
-enum class wasmer_value_tag : uint32_t {
- /// Represents the `i32` WebAssembly type.
- WASM_I32,
- /// Represents the `i64` WebAssembly type.
- WASM_I64,
- /// Represents the `f32` WebAssembly type.
- WASM_F32,
- /// Represents the `f64` WebAssembly type.
- WASM_F64,
-};
-
-struct wasmer_module_t {
-
-};
-
-/// Opaque pointer to a `wasmer_runtime::Instance` value in Rust.
-///
-/// A `wasmer_runtime::Instance` represents a WebAssembly instance. It
-/// is generally generated by the `wasmer_instantiate()` function, or by
-/// the `wasmer_module_instantiate()` function for the most common paths.
-struct wasmer_instance_t {
-
-};
-
-struct wasmer_byte_array {
- const uint8_t *bytes;
- uint32_t bytes_len;
-};
-
-#if defined(WASMER_EMSCRIPTEN_ENABLED)
-/// Type used to construct an import_object_t with Emscripten imports.
-struct wasmer_emscripten_globals_t {
-
-};
-#endif
-
-struct wasmer_import_object_t {
-
-};
-
-/// Opaque pointer to `NamedExportDescriptor`.
-struct wasmer_export_descriptor_t {
-
-};
-
-/// Opaque pointer to `NamedExportDescriptors`.
-struct wasmer_export_descriptors_t {
-
-};
-
-/// Opaque pointer to `wasmer_export_t`.
-struct wasmer_export_func_t {
-
-};
-
-/// Represents a WebAssembly value.
-///
-/// This is a [Rust union][rust-union], which is equivalent to the C
-/// union. See `wasmer_value_t` to get a complete example.
-///
-/// [rust-union]: https://doc.rust-lang.org/reference/items/unions.html
-union wasmer_value {
- int32_t I32;
- int64_t I64;
- float F32;
- double F64;
-};
-
-/// Represents a WebAssembly type and value pair,
-/// i.e. `wasmer_value_tag` and `wasmer_value`. Since the latter is an
-/// union, it's the safe way to read or write a WebAssembly value in
-/// C.
-///
-/// Example:
-///
-/// ```c
-/// // Create a WebAssembly value.
-/// wasmer_value_t wasm_value = {
-/// .tag = WASM_I32,
-/// .value.I32 = 42,
-/// };
-///
-/// // Read a WebAssembly value.
-/// if (wasm_value.tag == WASM_I32) {
-/// int32_t x = wasm_value.value.I32;
-/// // …
-/// }
-/// ```
-struct wasmer_value_t {
- /// The value type.
- wasmer_value_tag tag;
- /// The value.
- wasmer_value value;
-};
-
-/// Opaque pointer to `NamedExport`.
-struct wasmer_export_t {
-
-};
-
-/// Opaque pointer to a `wasmer_runtime::Memory` value in Rust.
-///
-/// A `wasmer_runtime::Memory` represents a WebAssembly memory. It is
-/// possible to create one with `wasmer_memory_new()` and pass it as
-/// imports of an instance, or to read it from exports of an instance
-/// with `wasmer_export_to_memory()`.
-struct wasmer_memory_t {
-
-};
-
-/// Opaque pointer to the opaque structure `crate::NamedExports`,
-/// which is a wrapper around a vector of the opaque structure
-/// `crate::NamedExport`.
-///
-/// Check the `wasmer_instance_exports()` function to learn more.
-struct wasmer_exports_t {
-
-};
-
-struct wasmer_global_t {
-
-};
-
-struct wasmer_global_descriptor_t {
- bool mutable_;
- wasmer_value_tag kind;
-};
-
-struct wasmer_import_descriptor_t {
-
-};
-
-struct wasmer_import_descriptors_t {
-
-};
-
-struct wasmer_import_func_t {
-
-};
-
-struct wasmer_table_t {
-
-};
-
-/// Union of import/export value.
-union wasmer_import_export_value {
- const wasmer_import_func_t *func;
- const wasmer_table_t *table;
- const wasmer_memory_t *memory;
- const wasmer_global_t *global;
-};
-
-struct wasmer_import_t {
- wasmer_byte_array module_name;
- wasmer_byte_array import_name;
- wasmer_import_export_kind tag;
- wasmer_import_export_value value;
-};
-
-struct wasmer_import_object_iter_t {
-
-};
-
-/// Opaque pointer to a `wasmer_runtime::Ctx` value in Rust.
-///
-/// An instance context is passed to any host function (aka imported
-/// function) as the first argument. It is necessary to read the
-/// instance data or the memory, respectively with the
-/// `wasmer_instance_context_data_get()` function, and the
-/// `wasmer_instance_context_memory()` function.
-///
-/// It is also possible to get the instance context outside a host
-/// function by using the `wasmer_instance_context_get()`
-/// function. See also `wasmer_instance_context_data_set()` to set the
-/// instance context data.
-///
-/// Example:
-///
-/// ```c
-/// // A host function that prints data from the WebAssembly memory to
-/// // the standard output.
-/// void print(wasmer_instance_context_t *context, int32_t pointer, int32_t length) {
-/// // Use `wasmer_instance_context` to get back the first instance memory.
-/// const wasmer_memory_t *memory = wasmer_instance_context_memory(context, 0);
-///
-/// // Continue…
-/// }
-/// ```
-struct wasmer_instance_context_t {
-
-};
-
-/// The `wasmer_limit_option_t` struct represents an optional limit
-/// for `wasmer_limits_t`.
-struct wasmer_limit_option_t {
- /// Whether the limit is set.
- bool has_some;
- /// The limit value.
- uint32_t some;
-};
-
-/// The `wasmer_limits_t` struct is a type that describes a memory
-/// options. See the `wasmer_memory_t` struct or the
-/// `wasmer_memory_new()` function to get more information.
-struct wasmer_limits_t {
- /// The minimum number of allowed pages.
- uint32_t min;
- /// The maximum number of allowed pages.
- wasmer_limit_option_t max;
-};
-
-struct wasmer_serialized_module_t {
-
-};
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-struct wasmer_trampoline_buffer_builder_t {
-
-};
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-struct wasmer_trampoline_callable_t {
-
-};
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-struct wasmer_trampoline_buffer_t {
-
-};
-#endif
-
-#if defined(WASMER_WASI_ENABLED)
-/// Opens a directory that's visible to the WASI module as `alias` but
-/// is backed by the host file at `host_file_path`
-struct wasmer_wasi_map_dir_entry_t {
- /// What the WASI module will see in its virtual root
- wasmer_byte_array alias;
- /// The backing file that the WASI module will interact with via the alias
- wasmer_byte_array host_file_path;
-};
-#endif
-
-extern "C" {
-
-/// Creates a new Module from the given wasm bytes.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_compile(wasmer_module_t **module,
- uint8_t *wasm_bytes,
- uint32_t wasm_bytes_len);
-
-#if defined(WASMER_EMSCRIPTEN_ENABLED)
-/// Convenience function for setting up arguments and calling the Emscripten
-/// main function.
-///
-/// WARNING:
-///
-/// Do not call this function on untrusted code when operating without
-/// additional sandboxing in place.
-/// Emscripten has access to many host system calls and therefore may do very
-/// bad things.
-wasmer_result_t wasmer_emscripten_call_main(wasmer_instance_t *instance,
- const wasmer_byte_array *args,
- unsigned int args_len);
-#endif
-
-#if defined(WASMER_EMSCRIPTEN_ENABLED)
-/// Destroy `wasmer_emscrpten_globals_t` created by
-/// `wasmer_emscripten_get_emscripten_globals`.
-void wasmer_emscripten_destroy_globals(wasmer_emscripten_globals_t *globals);
-#endif
-
-#if defined(WASMER_EMSCRIPTEN_ENABLED)
-/// Create a `wasmer_import_object_t` with Emscripten imports, use
-/// `wasmer_emscripten_get_emscripten_globals` to get a
-/// `wasmer_emscripten_globals_t` from a `wasmer_module_t`.
-///
-/// WARNING:
-///
-/// This `import_object_t` contains thin-wrappers around host system calls.
-/// Do not use this to execute untrusted code without additional sandboxing.
-wasmer_import_object_t *wasmer_emscripten_generate_import_object(wasmer_emscripten_globals_t *globals);
-#endif
-
-#if defined(WASMER_EMSCRIPTEN_ENABLED)
-/// Create a `wasmer_emscripten_globals_t` from a Wasm module.
-wasmer_emscripten_globals_t *wasmer_emscripten_get_globals(const wasmer_module_t *module);
-#endif
-
-#if defined(WASMER_EMSCRIPTEN_ENABLED)
-/// Execute global constructors (required if the module is compiled from C++)
-/// and sets up the internal environment.
-///
-/// This function sets the data pointer in the same way that
-/// [`wasmer_instance_context_data_set`] does.
-wasmer_result_t wasmer_emscripten_set_up(wasmer_instance_t *instance,
- wasmer_emscripten_globals_t *globals);
-#endif
-
-/// Gets export descriptor kind
-wasmer_import_export_kind wasmer_export_descriptor_kind(wasmer_export_descriptor_t *export_);
-
-/// Gets name for the export descriptor
-wasmer_byte_array wasmer_export_descriptor_name(wasmer_export_descriptor_t *export_descriptor);
-
-/// Gets export descriptors for the given module
-///
-/// The caller owns the object and should call `wasmer_export_descriptors_destroy` to free it.
-void wasmer_export_descriptors(const wasmer_module_t *module,
- wasmer_export_descriptors_t **export_descriptors);
-
-/// Frees the memory for the given export descriptors
-void wasmer_export_descriptors_destroy(wasmer_export_descriptors_t *export_descriptors);
-
-/// Gets export descriptor by index
-wasmer_export_descriptor_t *wasmer_export_descriptors_get(wasmer_export_descriptors_t *export_descriptors,
- int idx);
-
-/// Gets the length of the export descriptors
-int wasmer_export_descriptors_len(wasmer_export_descriptors_t *exports);
-
-/// Calls a `func` with the provided parameters.
-/// Results are set using the provided `results` pointer.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_export_func_call(const wasmer_export_func_t *func,
- const wasmer_value_t *params,
- unsigned int params_len,
- wasmer_value_t *results,
- unsigned int results_len);
-
-/// Sets the params buffer to the parameter types of the given wasmer_export_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_export_func_params(const wasmer_export_func_t *func,
- wasmer_value_tag *params,
- uint32_t params_len);
-
-/// Sets the result parameter to the arity of the params of the wasmer_export_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_export_func_params_arity(const wasmer_export_func_t *func, uint32_t *result);
-
-/// Sets the returns buffer to the parameter types of the given wasmer_export_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_export_func_returns(const wasmer_export_func_t *func,
- wasmer_value_tag *returns,
- uint32_t returns_len);
-
-/// Sets the result parameter to the arity of the returns of the wasmer_export_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_export_func_returns_arity(const wasmer_export_func_t *func,
- uint32_t *result);
-
-/// Gets wasmer_export kind
-wasmer_import_export_kind wasmer_export_kind(wasmer_export_t *export_);
-
-/// Gets name from wasmer_export
-wasmer_byte_array wasmer_export_name(wasmer_export_t *export_);
-
-/// Gets export func from export
-const wasmer_export_func_t *wasmer_export_to_func(const wasmer_export_t *export_);
-
-/// Gets a memory pointer from an export pointer.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_export_to_memory(const wasmer_export_t *export_, wasmer_memory_t **memory);
-
-/// Frees the memory for the given exports.
-///
-/// Check the `wasmer_instance_exports()` function to get a complete
-/// example.
-///
-/// If `exports` is a null pointer, this function does nothing.
-///
-/// Example:
-///
-/// ```c
-/// // Get some exports.
-/// wasmer_exports_t *exports = NULL;
-/// wasmer_instance_exports(instance, &exports);
-///
-/// // Destroy the exports.
-/// wasmer_exports_destroy(exports);
-/// ```
-void wasmer_exports_destroy(wasmer_exports_t *exports);
-
-/// Gets wasmer_export by index
-wasmer_export_t *wasmer_exports_get(wasmer_exports_t *exports, int idx);
-
-/// Gets the length of the exports
-int wasmer_exports_len(wasmer_exports_t *exports);
-
-/// Frees memory for the given Global
-void wasmer_global_destroy(wasmer_global_t *global);
-
-/// Gets the value stored by the given Global
-wasmer_value_t wasmer_global_get(wasmer_global_t *global);
-
-/// Returns a descriptor (type, mutability) of the given Global
-wasmer_global_descriptor_t wasmer_global_get_descriptor(wasmer_global_t *global);
-
-/// Creates a new Global and returns a pointer to it.
-/// The caller owns the object and should call `wasmer_global_destroy` to free it.
-wasmer_global_t *wasmer_global_new(wasmer_value_t value, bool mutable_);
-
-/// Sets the value stored by the given Global
-void wasmer_global_set(wasmer_global_t *global, wasmer_value_t value);
-
-/// Gets export descriptor kind
-wasmer_import_export_kind wasmer_import_descriptor_kind(wasmer_import_descriptor_t *export_);
-
-/// Gets module name for the import descriptor
-wasmer_byte_array wasmer_import_descriptor_module_name(wasmer_import_descriptor_t *import_descriptor);
-
-/// Gets name for the import descriptor
-wasmer_byte_array wasmer_import_descriptor_name(wasmer_import_descriptor_t *import_descriptor);
-
-/// Gets import descriptors for the given module
-///
-/// The caller owns the object and should call `wasmer_import_descriptors_destroy` to free it.
-void wasmer_import_descriptors(const wasmer_module_t *module,
- wasmer_import_descriptors_t **import_descriptors);
-
-/// Frees the memory for the given import descriptors
-void wasmer_import_descriptors_destroy(wasmer_import_descriptors_t *import_descriptors);
-
-/// Gets import descriptor by index
-wasmer_import_descriptor_t *wasmer_import_descriptors_get(wasmer_import_descriptors_t *import_descriptors,
- unsigned int idx);
-
-/// Gets the length of the import descriptors
-unsigned int wasmer_import_descriptors_len(wasmer_import_descriptors_t *exports);
-
-/// Frees memory for the given Func
-void wasmer_import_func_destroy(wasmer_import_func_t *func);
-
-/// Creates new host function, aka imported function. `func` is a
-/// function pointer, where the first argument is the famous `vm::Ctx`
-/// (in Rust), or `wasmer_instance_context_t` (in C). All arguments
-/// must be typed with compatible WebAssembly native types:
-///
-/// | WebAssembly type | C/C++ type |
-/// | ---------------- | ---------- |
-/// | `i32` | `int32_t` |
-/// | `i64` | `int64_t` |
-/// | `f32` | `float` |
-/// | `f64` | `double` |
-///
-/// The function pointer must have a lifetime greater than the
-/// WebAssembly instance lifetime.
-///
-/// The caller owns the object and should call
-/// `wasmer_import_func_destroy` to free it.
-wasmer_import_func_t *wasmer_import_func_new(void (*func)(void *data),
- const wasmer_value_tag *params,
- unsigned int params_len,
- const wasmer_value_tag *returns,
- unsigned int returns_len);
-
-/// Sets the params buffer to the parameter types of the given wasmer_import_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_import_func_params(const wasmer_import_func_t *func,
- wasmer_value_tag *params,
- unsigned int params_len);
-
-/// Sets the result parameter to the arity of the params of the wasmer_import_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_import_func_params_arity(const wasmer_import_func_t *func, uint32_t *result);
-
-/// Sets the returns buffer to the parameter types of the given wasmer_import_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_import_func_returns(const wasmer_import_func_t *func,
- wasmer_value_tag *returns,
- unsigned int returns_len);
-
-/// Sets the result parameter to the arity of the returns of the wasmer_import_func_t
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_import_func_returns_arity(const wasmer_import_func_t *func,
- uint32_t *result);
-
-/// Frees memory of the given ImportObject
-void wasmer_import_object_destroy(wasmer_import_object_t *import_object);
-
-/// Extends an existing import object with new imports
-wasmer_result_t wasmer_import_object_extend(wasmer_import_object_t *import_object,
- const wasmer_import_t *imports,
- unsigned int imports_len);
-
-/// Gets an entry from an ImportObject at the name and namespace.
-/// Stores `name`, `namespace`, and `import_export_value` in `import`.
-/// Thus these must remain valid for the lifetime of `import`.
-///
-/// The caller owns all data involved.
-/// `import_export_value` will be written to based on `tag`.
-wasmer_result_t wasmer_import_object_get_import(const wasmer_import_object_t *import_object,
- wasmer_byte_array namespace_,
- wasmer_byte_array name,
- wasmer_import_t *import,
- wasmer_import_export_value *import_export_value,
- uint32_t tag);
-
-/// Frees the memory allocated in `wasmer_import_object_iter_next`
-///
-/// This function does not free the memory in `wasmer_import_object_t`;
-/// it only frees memory allocated while querying a `wasmer_import_object_t`.
-void wasmer_import_object_imports_destroy(wasmer_import_t *imports, uint32_t imports_len);
-
-/// Returns true if further calls to `wasmer_import_object_iter_next` will
-/// not return any new data
-bool wasmer_import_object_iter_at_end(wasmer_import_object_iter_t *import_object_iter);
-
-/// Frees the memory allocated by `wasmer_import_object_iterate_functions`
-void wasmer_import_object_iter_destroy(wasmer_import_object_iter_t *import_object_iter);
-
-/// Writes the next value to `import`. `WASMER_ERROR` is returned if there
-/// was an error or there's nothing left to return.
-///
-/// To free the memory allocated here, pass the import to `wasmer_import_object_imports_destroy`.
-/// To check if the iterator is done, use `wasmer_import_object_iter_at_end`.
-wasmer_result_t wasmer_import_object_iter_next(wasmer_import_object_iter_t *import_object_iter,
- wasmer_import_t *import);
-
-/// Create an iterator over the functions in the import object.
-/// Get the next import with `wasmer_import_object_iter_next`
-/// Free the iterator with `wasmer_import_object_iter_destroy`
-wasmer_import_object_iter_t *wasmer_import_object_iterate_functions(const wasmer_import_object_t *import_object);
-
-/// Creates a new empty import object.
-/// See also `wasmer_import_object_append`
-wasmer_import_object_t *wasmer_import_object_new();
-
-/// Calls an exported function of a WebAssembly instance by `name`
-/// with the provided parameters. The exported function results are
-/// stored on the provided `results` pointer.
-///
-/// This function returns `wasmer_result_t::WASMER_OK` upon success,
-/// `wasmer_result_t::WASMER_ERROR` otherwise. You can use
-/// `wasmer_last_error_message()` to get the generated error message.
-///
-/// Potential errors are the following:
-///
-/// * `instance` is a null pointer,
-/// * `name` is a null pointer,
-/// * `params` is a null pointer.
-///
-/// Example of calling an exported function that needs two parameters, and returns one value:
-///
-/// ```c
-/// // First argument.
-/// wasmer_value_t argument_one = {
-/// .tag = WASM_I32,
-/// .value.I32 = 3,
-/// };
-///
-/// // Second argument.
-/// wasmer_value_t argument_two = {
-/// .tag = WASM_I32,
-/// .value.I32 = 4,
-/// };
-///
-/// // First result.
-/// wasmer_value_t result_one;
-///
-/// // All arguments and results.
-/// wasmer_value_t arguments[] = {argument_one, argument_two};
-/// wasmer_value_t results[] = {result_one};
-///
-/// wasmer_result_t call_result = wasmer_instance_call(
-/// instance, // instance pointer
-/// "sum", // the exported function name
-/// arguments, // the arguments
-/// 2, // the number of arguments
-/// results, // the results
-/// 1 // the number of results
-/// );
-///
-/// if (call_result == WASMER_OK) {
-/// printf("Result is: %d\n", results[0].value.I32);
-/// }
-/// ```
-wasmer_result_t wasmer_instance_call(wasmer_instance_t *instance,
- const char *name,
- const wasmer_value_t *params,
- uint32_t params_len,
- wasmer_value_t *results,
- uint32_t results_len);
-
-/// Gets the data that can be hold by an instance.
-///
-/// This function is complementary of
-/// `wasmer_instance_context_data_set()`. Please read its
-/// documentation. You can also read the documentation of
-/// `wasmer_instance_context_t` to get other examples.
-///
-/// This function returns nothing if `ctx` is a null pointer.
-void *wasmer_instance_context_data_get(const wasmer_instance_context_t *ctx);
-
-/// Sets the data that can be hold by an instance context.
-///
-/// An instance context (represented by the opaque
-/// `wasmer_instance_context_t` structure) can hold user-defined
-/// data. This function sets the data. This function is complementary
-/// of `wasmer_instance_context_data_get()`.
-///
-/// This function does nothing if `instance` is a null pointer.
-///
-/// Example:
-///
-/// ```c
-/// // Define your own data.
-/// typedef struct {
-/// // …
-/// } my_data;
-///
-/// // Allocate them and set them on the given instance.
-/// my_data *data = malloc(sizeof(my_data));
-/// data->… = …;
-/// wasmer_instance_context_data_set(instance, (void*) data);
-///
-/// // You can read your data.
-/// {
-/// my_data *data = (my_data*) wasmer_instance_context_data_get(wasmer_instance_context_get(instance));
-/// // …
-/// }
-/// ```
-void wasmer_instance_context_data_set(wasmer_instance_t *instance,
- void *data_ptr);
-
-/// Returns the instance context. Learn more by looking at the
-/// `wasmer_instance_context_t` struct.
-///
-/// This function returns `null` if `instance` is a null pointer.
-///
-/// Example:
-///
-/// ```c
-/// const wasmer_instance_context_get *context = wasmer_instance_context_get(instance);
-/// my_data *data = (my_data *) wasmer_instance_context_data_get(context);
-/// // Do something with `my_data`.
-/// ```
-///
-/// It is often useful with `wasmer_instance_context_data_set()`.
-const wasmer_instance_context_t *wasmer_instance_context_get(wasmer_instance_t *instance);
-
-/// Gets the `memory_idx`th memory of the instance.
-///
-/// Note that the index is always `0` until multiple memories are supported.
-///
-/// This function is mostly used inside host functions (aka imported
-/// functions) to read the instance memory.
-///
-/// Example of a _host function_ that reads and prints a string based on a pointer and a length:
-///
-/// ```c
-/// void print_string(const wasmer_instance_context_t *context, int32_t pointer, int32_t length) {
-/// // Get the 0th memory.
-/// const wasmer_memory_t *memory = wasmer_instance_context_memory(context, 0);
-///
-/// // Get the memory data as a pointer.
-/// uint8_t *memory_bytes = wasmer_memory_data(memory);
-///
-/// // Print what we assumed to be a string!
-/// printf("%.*s", length, memory_bytes + pointer);
-/// }
-/// ```
-const wasmer_memory_t *wasmer_instance_context_memory(const wasmer_instance_context_t *ctx,
- uint32_t _memory_idx);
-
-/// Frees memory for the given `wasmer_instance_t`.
-///
-/// Check the `wasmer_instantiate()` function to get a complete
-/// example.
-///
-/// If `instance` is a null pointer, this function does nothing.
-///
-/// Example:
-///
-/// ```c
-/// // Get an instance.
-/// wasmer_instance_t *instance = NULL;
-/// wasmer_instantiate(&instance, bytes, bytes_length, imports, 0);
-///
-/// // Destroy the instance.
-/// wasmer_instance_destroy(instance);
-/// ```
-void wasmer_instance_destroy(wasmer_instance_t *instance);
-
-/// Gets all the exports of the given WebAssembly instance.
-///
-/// This function stores a Rust vector of exports into `exports` as an
-/// opaque pointer of kind `wasmer_exports_t`.
-///
-/// As is, you can do anything with `exports` except using the
-/// companion functions, like `wasmer_exports_len()`,
-/// `wasmer_exports_get()` or `wasmer_export_kind()`. See the example below.
-///
-/// **Warning**: The caller owns the object and should call
-/// `wasmer_exports_destroy()` to free it.
-///
-/// Example:
-///
-/// ```c
-/// // Get the exports.
-/// wasmer_exports_t *exports = NULL;
-/// wasmer_instance_exports(instance, &exports);
-///
-/// // Get the number of exports.
-/// int exports_length = wasmer_exports_len(exports);
-/// printf("Number of exports: %d\n", exports_length);
-///
-/// // Read the first export.
-/// wasmer_export_t *export = wasmer_exports_get(exports, 0);
-///
-/// // Get the kind of the export.
-/// wasmer_import_export_kind export_kind = wasmer_export_kind(export);
-///
-/// // Assert it is a function (why not).
-/// assert(export_kind == WASM_FUNCTION);
-///
-/// // Read the export name.
-/// wasmer_byte_array name_bytes = wasmer_export_name(export);
-///
-/// assert(name_bytes.bytes_len == sizeof("sum") - 1);
-/// assert(memcmp(name_bytes.bytes, "sum", sizeof("sum") - 1) == 0);
-///
-/// // Destroy the exports.
-/// wasmer_exports_destroy(exports);
-/// ```
-void wasmer_instance_exports(wasmer_instance_t *instance, wasmer_exports_t **exports);
-
-/// Creates a new WebAssembly instance from the given bytes and imports.
-///
-/// The result is stored in the first argument `instance` if
-/// successful, i.e. when the function returns
-/// `wasmer_result_t::WASMER_OK`. Otherwise
-/// `wasmer_result_t::WASMER_ERROR` is returned, and
-/// `wasmer_last_error_length()` with `wasmer_last_error_message()` must
-/// be used to read the error message.
-///
-/// The caller is responsible to free the instance with
-/// `wasmer_instance_destroy()`.
-///
-/// Example:
-///
-/// ```c
-/// // 1. Read a WebAssembly module from a file.
-/// FILE *file = fopen("sum.wasm", "r");
-/// fseek(file, 0, SEEK_END);
-/// long bytes_length = ftell(file);
-/// uint8_t *bytes = malloc(bytes_length);
-/// fseek(file, 0, SEEK_SET);
-/// fread(bytes, 1, bytes_length, file);
-/// fclose(file);
-///
-/// // 2. Declare the imports (here, none).
-/// wasmer_import_t imports[] = {};
-///
-/// // 3. Instantiate the WebAssembly module.
-/// wasmer_instance_t *instance = NULL;
-/// wasmer_result_t result = wasmer_instantiate(&instance, bytes, bytes_length, imports, 0);
-///
-/// // 4. Check for errors.
-/// if (result != WASMER_OK) {
-/// int error_length = wasmer_last_error_length();
-/// char *error = malloc(error_length);
-/// wasmer_last_error_message(error, error_length);
-/// // Do something with `error`…
-/// }
-///
-/// // 5. Free the memory!
-/// wasmer_instance_destroy(instance);
-/// ```
-wasmer_result_t wasmer_instantiate(wasmer_instance_t **instance,
- uint8_t *wasm_bytes,
- uint32_t wasm_bytes_len,
- wasmer_import_t *imports,
- int imports_len);
-
-/// Gets the length in bytes of the last error if any.
-///
-/// This can be used to dynamically allocate a buffer with the correct number of
-/// bytes needed to store a message.
-///
-/// See `wasmer_last_error_message()` to get a full example.
-int wasmer_last_error_length();
-
-/// Gets the last error message if any into the provided buffer
-/// `buffer` up to the given `length`.
-///
-/// The `length` parameter must be large enough to store the last
-/// error message. Ideally, the value should come from
-/// `wasmer_last_error_length()`.
-///
-/// The function returns the length of the string in bytes, `-1` if an
-/// error occurs. Potential errors are:
-///
-/// * The buffer is a null pointer,
-/// * The buffer is too smal to hold the error message.
-///
-/// Note: The error message always has a trailing null character.
-///
-/// Example:
-///
-/// ```c
-/// int error_length = wasmer_last_error_length();
-///
-/// if (error_length > 0) {
-/// char *error_message = malloc(error_length);
-/// wasmer_last_error_message(error_message, error_length);
-/// printf("Error message: `%s`\n", error_message);
-/// } else {
-/// printf("No error message\n");
-/// }
-/// ```
-int wasmer_last_error_message(char *buffer, int length);
-
-/// Gets a pointer to the beginning of the contiguous memory data
-/// bytes.
-///
-/// The function returns `NULL` if `memory` is a null pointer.
-///
-/// Note that when the memory grows, it can be reallocated, and thus
-/// the returned pointer can be invalidated.
-///
-/// Example:
-///
-/// ```c
-/// uint8_t *memory_data = wasmer_memory_data(memory);
-/// char *str = (char*) malloc(sizeof(char) * 7);
-///
-/// for (uint32_t nth = 0; nth < 7; ++nth) {
-/// str[nth] = (char) memory_data[nth];
-/// }
-/// ```
-uint8_t *wasmer_memory_data(const wasmer_memory_t *memory);
-
-/// Gets the size in bytes of the memory data.
-///
-/// This function returns 0 if `memory` is a null pointer.
-///
-/// Example:
-///
-/// ```c
-/// uint32_t memory_data_length = wasmer_memory_data_length(memory);
-/// ```
-uint32_t wasmer_memory_data_length(const wasmer_memory_t *memory);
-
-/// Frees memory for the given `wasmer_memory_t`.
-///
-/// Check the `wasmer_memory_new()` function to get a complete
-/// example.
-///
-/// If `memory` is a null pointer, this function does nothing.
-///
-/// Example:
-///
-/// ```c
-/// // Get a memory.
-/// wasmer_memory_t *memory = NULL;
-/// wasmer_result_t result = wasmer_memory_new(&memory, memory_descriptor);
-///
-/// // Destroy the memory.
-/// wasmer_memory_destroy(memory);
-/// ```
-void wasmer_memory_destroy(wasmer_memory_t *memory);
-
-/// Grows a memory by the given number of pages (of 65Kb each).
-///
-/// The functions return `wasmer_result_t::WASMER_OK` upon success,
-/// `wasmer_result_t::WASMER_ERROR` otherwise. Use
-/// `wasmer_last_error_length()` with `wasmer_last_error_message()` to
-/// read the error message.
-///
-/// Example:
-///
-/// ```c
-/// wasmer_result_t result = wasmer_memory_grow(memory, 10);
-///
-/// if (result != WASMER_OK) {
-/// // …
-/// }
-/// ```
-wasmer_result_t wasmer_memory_grow(wasmer_memory_t *memory, uint32_t delta);
-
-/// Reads the current length (in pages) of the given memory.
-///
-/// The function returns zero if `memory` is a null pointer.
-///
-/// Example:
-///
-/// ```c
-/// uint32_t memory_length = wasmer_memory_length(memory);
-///
-/// printf("Memory pages length: %d\n", memory_length);
-/// ```
-uint32_t wasmer_memory_length(const wasmer_memory_t *memory);
-
-/// Creates a new empty WebAssembly memory for the given descriptor.
-///
-/// The result is stored in the first argument `memory` if successful,
-/// i.e. when the function returns
-/// `wasmer_result_t::WASMER_OK`. Otherwise,
-/// `wasmer_result_t::WASMER_ERROR` is returned, and
-/// `wasmer_last_error_length()` with `wasmer_last_error_message()`
-/// must be used to read the error message.
-///
-/// The caller owns the memory and is responsible to free it with
-/// `wasmer_memory_destroy()`.
-///
-/// Example:
-///
-/// ```c
-/// // 1. The memory object.
-/// wasmer_memory_t *memory = NULL;
-///
-/// // 2. The memory descriptor.
-/// wasmer_limits_t memory_descriptor = {
-/// .min = 10,
-/// .max = {
-/// .has_some = true,
-/// .some = 15,
-/// },
-/// };
-///
-/// // 3. Initialize the memory.
-/// wasmer_result_t result = wasmer_memory_new(&memory, memory_descriptor);
-///
-/// if (result != WASMER_OK) {
-/// int error_length = wasmer_last_error_length();
-/// char *error = malloc(error_length);
-/// wasmer_last_error_message(error, error_length);
-/// // Do something with `error`…
-/// }
-///
-/// // 4. Free the memory!
-/// wasmer_memory_destroy(memory);
-/// ```
-wasmer_result_t wasmer_memory_new(wasmer_memory_t **memory, wasmer_limits_t limits);
-
-/// Deserialize the given serialized module.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_module_deserialize(wasmer_module_t **module,
- const wasmer_serialized_module_t *serialized_module);
-
-/// Frees memory for the given Module
-void wasmer_module_destroy(wasmer_module_t *module);
-
-/// Given:
-/// * A prepared `wasmer` import-object
-/// * A compiled wasmer module
-///
-/// Instantiates a wasmer instance
-wasmer_result_t wasmer_module_import_instantiate(wasmer_instance_t **instance,
- const wasmer_module_t *module,
- const wasmer_import_object_t *import_object);
-
-/// Creates a new Instance from the given module and imports.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_module_instantiate(const wasmer_module_t *module,
- wasmer_instance_t **instance,
- wasmer_import_t *imports,
- int imports_len);
-
-/// Serialize the given Module.
-///
-/// The caller owns the object and should call `wasmer_serialized_module_destroy` to free it.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_module_serialize(wasmer_serialized_module_t **serialized_module,
- const wasmer_module_t *module);
-
-/// Get bytes of the serialized module.
-wasmer_byte_array wasmer_serialized_module_bytes(const wasmer_serialized_module_t *serialized_module);
-
-/// Frees memory for the given serialized Module.
-void wasmer_serialized_module_destroy(wasmer_serialized_module_t *serialized_module);
-
-/// Transform a sequence of bytes into a serialized module.
-///
-/// The caller owns the object and should call `wasmer_serialized_module_destroy` to free it.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_serialized_module_from_bytes(wasmer_serialized_module_t **serialized_module,
- const uint8_t *serialized_module_bytes,
- uint32_t serialized_module_bytes_length);
-
-/// Frees memory for the given Table
-void wasmer_table_destroy(wasmer_table_t *table);
-
-/// Grows a Table by the given number of elements.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_table_grow(wasmer_table_t *table, uint32_t delta);
-
-/// Returns the current length of the given Table
-uint32_t wasmer_table_length(wasmer_table_t *table);
-
-/// Creates a new Table for the given descriptor and initializes the given
-/// pointer to pointer to a pointer to the new Table.
-///
-/// The caller owns the object and should call `wasmer_table_destroy` to free it.
-///
-/// Returns `wasmer_result_t::WASMER_OK` upon success.
-///
-/// Returns `wasmer_result_t::WASMER_ERROR` upon failure. Use `wasmer_last_error_length`
-/// and `wasmer_last_error_message` to get an error message.
-wasmer_result_t wasmer_table_new(wasmer_table_t **table, wasmer_limits_t limits);
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-/// Adds a callinfo trampoline to the builder.
-///
-/// Deprecated. In a future version `DynamicFunc::new` will be exposed to the C API and should be used instead of this function.
-uintptr_t wasmer_trampoline_buffer_builder_add_callinfo_trampoline(wasmer_trampoline_buffer_builder_t *builder,
- const wasmer_trampoline_callable_t *func,
- const void *ctx,
- uint32_t num_params);
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-/// Adds a context trampoline to the builder.
-uintptr_t wasmer_trampoline_buffer_builder_add_context_trampoline(wasmer_trampoline_buffer_builder_t *builder,
- const wasmer_trampoline_callable_t *func,
- const void *ctx);
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-/// Finalizes the trampoline builder into an executable buffer.
-wasmer_trampoline_buffer_t *wasmer_trampoline_buffer_builder_build(wasmer_trampoline_buffer_builder_t *builder);
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-/// Creates a new trampoline builder.
-wasmer_trampoline_buffer_builder_t *wasmer_trampoline_buffer_builder_new();
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-/// Destroys the trampoline buffer if not null.
-void wasmer_trampoline_buffer_destroy(wasmer_trampoline_buffer_t *buffer);
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-/// Returns the callable pointer for the trampoline with index `idx`.
-const wasmer_trampoline_callable_t *wasmer_trampoline_buffer_get_trampoline(const wasmer_trampoline_buffer_t *buffer,
- uintptr_t idx);
-#endif
-
-#if (!defined(_WIN32) && defined(ARCH_X86_64))
-/// Returns the context added by `add_context_trampoline`, from within the callee function.
-void *wasmer_trampoline_get_context();
-#endif
-
-/// Stop the execution of a host function, aka imported function. The
-/// function must be used _only_ inside a host function.
-///
-/// The pointer to `wasmer_instance_context_t` is received by the host
-/// function as its first argument. Just passing it to `ctx` is fine.
-///
-/// The error message must have a greater lifetime than the host
-/// function itself since the error is read outside the host function
-/// with `wasmer_last_error_message`.
-///
-/// This function returns `wasmer_result_t::WASMER_ERROR` if `ctx` or
-/// `error_message` are null.
-///
-/// This function never returns otherwise.
-wasmer_result_t wasmer_trap(const wasmer_instance_context_t *ctx, const char *error_message);
-
-/// Validates a sequence of bytes hoping it represents a valid WebAssembly module.
-///
-/// The function returns true if the bytes are valid, false otherwise.
-///
-/// Example:
-///
-/// ```c
-/// bool result = wasmer_validate(bytes, bytes_length);
-///
-/// if (false == result) {
-/// // Do something…
-/// }
-/// ```
-bool wasmer_validate(const uint8_t *wasm_bytes, uint32_t wasm_bytes_len);
-
-#if defined(WASMER_WASI_ENABLED)
-/// Convenience function that creates a WASI import object with no arguments,
-/// environment variables, preopened files, or mapped directories.
-///
-/// This function is the same as calling [`wasmer_wasi_generate_import_object`] with all
-/// empty values.
-wasmer_import_object_t *wasmer_wasi_generate_default_import_object();
-#endif
-
-#if defined(WASMER_WASI_ENABLED)
-/// Creates a WASI import object.
-///
-/// This function treats null pointers as empty collections.
-/// For example, passing null for a string in `args`, will lead to a zero
-/// length argument in that position.
-wasmer_import_object_t *wasmer_wasi_generate_import_object(const wasmer_byte_array *args,
- unsigned int args_len,
- const wasmer_byte_array *envs,
- unsigned int envs_len,
- const wasmer_byte_array *preopened_files,
- unsigned int preopened_files_len,
- const wasmer_wasi_map_dir_entry_t *mapped_dirs,
- unsigned int mapped_dirs_len);
-#endif
-
-#if defined(WASMER_WASI_ENABLED)
-/// Creates a WASI import object for a specific version.
-///
-/// This function is similar to `wasmer_wasi_generate_import_object`
-/// except that the first argument describes the WASI version.
-///
-/// The version is expected to be of kind `Version`.
-wasmer_import_object_t *wasmer_wasi_generate_import_object_for_version(unsigned char version,
- const wasmer_byte_array *args,
- unsigned int args_len,
- const wasmer_byte_array *envs,
- unsigned int envs_len,
- const wasmer_byte_array *preopened_files,
- unsigned int preopened_files_len,
- const wasmer_wasi_map_dir_entry_t *mapped_dirs,
- unsigned int mapped_dirs_len);
-#endif
-
-#if defined(WASMER_WASI_ENABLED)
-/// Find the version of WASI used by the module.
-///
-/// In case of error, the returned version is `Version::Unknown`.
-Version wasmer_wasi_get_version(const wasmer_module_t *module);
-#endif
-
-} // extern "C"
-
-#endif // WASMER_H
diff --git a/third_party/wasmer/wasmer.rs b/third_party/wasmer/wasmer.rs
index fdcb27a..c4bd6e5 100644
--- a/third_party/wasmer/wasmer.rs
+++ b/third_party/wasmer/wasmer.rs
@@ -1 +1 @@
-pub extern crate wasmer_runtime_c_api;
+pub extern crate wasmer_c_api;
diff --git a/third_party/wasmer/wasmer_wrapper.cc b/third_party/wasmer/wasmer_wrapper.cc
deleted file mode 100644
index cdfaa69..0000000
--- a/third_party/wasmer/wasmer_wrapper.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Wraps several functions from wasmer.hh, so that they take and return all
-// structs by pointer, rather than by value. This is necessary because Dart FFI
-// doesn't support passing structs by value yet (once it does, we can delete
-// this wrapper).
-
-#include "wasmer.hh"
-
-extern "C" {
-// Wraps wasmer_export_name.
-void wasmer_export_name_ptr(wasmer_export_t* export_,
- wasmer_byte_array* out_name) {
- *out_name = wasmer_export_name(export_);
-}
-
-// Wraps wasmer_export_descriptor_name.
-void wasmer_export_descriptor_name_ptr(
- wasmer_export_descriptor_t* export_descriptor,
- wasmer_byte_array* out_name) {
- *out_name = wasmer_export_descriptor_name(export_descriptor);
-}
-
-// Wraps wasmer_import_descriptor_module_name.
-void wasmer_import_descriptor_module_name_ptr(
- wasmer_import_descriptor_t* import_descriptor,
- wasmer_byte_array* out_name) {
- *out_name = wasmer_import_descriptor_module_name(import_descriptor);
-}
-
-// Wraps wasmer_import_descriptor_name.
-void wasmer_import_descriptor_name_ptr(
- wasmer_import_descriptor_t* import_descriptor,
- wasmer_byte_array* out_name) {
- *out_name = wasmer_import_descriptor_name(import_descriptor);
-}
-
-// Wraps wasmer_memory_new.
-wasmer_result_t wasmer_memory_new_ptr(wasmer_memory_t** memory,
- wasmer_limits_t* limits) {
- return wasmer_memory_new(memory, *limits);
-}
-}
diff --git a/tools/VERSION b/tools/VERSION
index fd614ac..ac56f0c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 11
PATCH 0
-PRERELEASE 208
+PRERELEASE 209
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/generate_package_config.dart b/tools/generate_package_config.dart
index 7c5daf2..28de041 100644
--- a/tools/generate_package_config.dart
+++ b/tools/generate_package_config.dart
@@ -20,6 +20,9 @@
packageDirectory('runtime/observatory'),
packageDirectory(
'runtime/observatory/tests/service/observatory_test_package'),
+ packageDirectory('runtime/observatory_2'),
+ packageDirectory(
+ 'runtime/observatory_2/tests/service_2/observatory_test_package_2'),
packageDirectory('sdk/lib/_internal/sdk_library_metadata'),
packageDirectory('sdk/lib/_internal/js_runtime'),
packageDirectory('third_party/pkg/protobuf/protobuf'),
@@ -85,12 +88,6 @@
var version = pubspecLanguageVersion(packageDir);
var hasLibDirectory = Directory(p.join(packageDir, 'lib')).existsSync();
- // TODO(rnystrom): Currently, the pre-built SDK does not allow language
- // version 2.9.0. Until that's fixed, if we see that version, just write
- // no version at all so that implementations use the current language
- // version.
- if (version.toString() == '2.9.0') version = null;
-
yield {
'name': p.basename(packageDir),
'rootUri': p