diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 7773b42..dd474e4 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": "2021-05-20T07:53:18.817456",
+  "generated": "2021-05-20T11:33:30.068787",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -779,7 +779,7 @@
       "name": "wasm",
       "rootUri": "../pkg/wasm",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "watcher",
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index b286788..c995737 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -80,7 +80,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 139;
+  static const int DATA_VERSION = 140;
 
   /// The length of the list returned by [_computeDeclaredVariablesSignature].
   static const int _declaredVariablesSignatureLength = 4;
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 351b628..e31e14d 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -18,7 +18,6 @@
 import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
-import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/constant/compute.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
@@ -957,7 +956,7 @@
 
   /// A list containing all of the extensions contained in this compilation
   /// unit.
-  List<ExtensionElement> _extensions = _Sentinel.extensionElement;
+  List<ExtensionElement> _extensions = const [];
 
   /// A list containing all of the top-level functions contained in this
   /// compilation unit.
@@ -974,7 +973,7 @@
 
   /// A list containing all of the type aliases contained in this compilation
   /// unit.
-  List<TypeAliasElement> _typeAliases = _Sentinel.typeAliasElement;
+  List<TypeAliasElement> _typeAliases = const [];
 
   /// A list containing all of the classes contained in this compilation unit.
   List<ClassElement> _types = const [];
@@ -1035,29 +1034,6 @@
 
   @override
   List<ExtensionElement> get extensions {
-    if (!identical(_extensions, _Sentinel.extensionElement)) {
-      return _extensions;
-    }
-
-    if (linkedNode != null) {
-      var containerRef = reference!.getChild('@extension');
-      _extensions = <ExtensionElement>[];
-      var nextUnnamedExtensionId = 0;
-      for (var node in _linkedUnitDeclarations) {
-        if (node is ExtensionDeclarationImpl) {
-          var nameIdentifier = node.name;
-          var refName = nameIdentifier != null
-              ? nameIdentifier.name
-              : 'extension-${nextUnnamedExtensionId++}';
-          var reference = containerRef.getChild(refName);
-          var element = node.declaredElement;
-          element ??= ExtensionElementImpl.forLinkedNode(this, reference, node);
-          _extensions.add(element);
-        }
-      }
-      return _extensions;
-    }
-
     return _extensions;
   }
 
@@ -1161,31 +1137,6 @@
 
   @override
   List<TypeAliasElement> get typeAliases {
-    if (!identical(_typeAliases, _Sentinel.typeAliasElement)) {
-      return _typeAliases;
-    }
-
-    if (linkedNode != null) {
-      var containerRef = reference!.getChild('@typeAlias');
-      _typeAliases = <TypeAliasElement>[];
-      for (var node in _linkedUnitDeclarations) {
-        String name;
-        if (node is FunctionTypeAlias) {
-          name = node.name.name;
-        } else if (node is GenericTypeAlias) {
-          name = node.name.name;
-        } else {
-          continue;
-        }
-
-        var reference = containerRef.getChild(name);
-        var element = node.declaredElement as TypeAliasElement?;
-        element ??= TypeAliasElementImpl.forLinkedNodeFactory(
-            this, reference, node as TypeAlias);
-        _typeAliases.add(element);
-      }
-    }
-
     return _typeAliases;
   }
 
@@ -1219,10 +1170,6 @@
     _types = types;
   }
 
-  List<CompilationUnitMember> get _linkedUnitDeclarations {
-    return linkedContext!.unit.declarations;
-  }
-
   @override
   bool operator ==(Object object) =>
       object is CompilationUnitElementImpl && source == object.source;
@@ -3112,13 +3059,6 @@
   /// element.
   ExtensionElementImpl(String? name, int nameOffset) : super(name, nameOffset);
 
-  /// Initialize using the given linked information.
-  ExtensionElementImpl.forLinkedNode(CompilationUnitElementImpl enclosing,
-      Reference reference, ExtensionDeclarationImpl linkedNode)
-      : super.forLinkedNode(enclosing, reference, linkedNode) {
-    linkedNode.declaredElement = this;
-  }
-
   @override
   List<PropertyAccessorElement> get accessors {
     return _accessors;
@@ -3149,13 +3089,6 @@
 
   DartType get extendedTypeInternal {
     linkedData?.read(this);
-    if (_extendedType != null) return _extendedType!;
-
-    if (linkedNode != null) {
-      final linkedNode = this.linkedNode as ExtensionDeclaration;
-      return _extendedType = linkedNode.extendedType.typeOrThrow;
-    }
-
     return _extendedType!;
   }
 
@@ -3173,10 +3106,7 @@
 
   @override
   String get identifier {
-    if (linkedData != null) {
-      return linkedData!.reference.name;
-    }
-    if (linkedNode != null) {
+    if (reference != null) {
       return reference!.name;
     }
     return super.identifier;
@@ -3208,23 +3138,6 @@
   }
 
   @override
-  String? get name {
-    if (linkedNode != null) {
-      return (linkedNode as ExtensionDeclaration).name?.name;
-    }
-    return super.name;
-  }
-
-  @override
-  int get nameOffset {
-    if (linkedNode != null) {
-      return enclosingUnit.linkedContext!.getNameOffset(linkedNode!);
-    }
-
-    return super.nameOffset;
-  }
-
-  @override
   List<TypeParameterElement> get typeParameters {
     linkedData?.read(this);
     return super.typeParameters;
@@ -3433,12 +3346,6 @@
   FunctionTypeAliasElementImpl(String name, int nameOffset)
       : super(name, nameOffset);
 
-  FunctionTypeAliasElementImpl.forLinkedNode(
-    CompilationUnitElementImpl enclosingUnit,
-    Reference reference,
-    TypeAlias linkedNode,
-  ) : super.forLinkedNode(enclosingUnit, reference, linkedNode);
-
   @Deprecated('Use aliasedElement instead')
   @override
   GenericFunctionTypeElementImpl get function {
@@ -3562,12 +3469,6 @@
     );
   }
 
-  @override
-  List<TypeParameterElement> get typeParameters {
-    // TODO(scheglov) remove the method
-    return _typeParameterElements;
-  }
-
   /// Set the type parameters defined by this function type element to the given
   /// [typeParameters].
   set typeParameters(List<TypeParameterElement> typeParameters) {
@@ -5561,40 +5462,6 @@
 
   TypeAliasElementImpl(String name, int nameOffset) : super(name, nameOffset);
 
-  TypeAliasElementImpl.forLinkedNode(
-    CompilationUnitElementImpl enclosingUnit,
-    Reference reference,
-    TypeAlias linkedNode,
-  ) : super.forLinkedNode(enclosingUnit, reference, linkedNode) {
-    var nameNode = linkedNode is FunctionTypeAliasImpl
-        ? linkedNode.name
-        : (linkedNode as GenericTypeAliasImpl).name;
-    nameNode.staticElement = this;
-  }
-
-  factory TypeAliasElementImpl.forLinkedNodeFactory(
-    CompilationUnitElementImpl enclosingUnit,
-    Reference reference,
-    TypeAlias linkedNode,
-  ) {
-    if (linkedNode is FunctionTypeAlias) {
-      // ignore: deprecated_member_use_from_same_package
-      return FunctionTypeAliasElementImpl.forLinkedNode(
-          enclosingUnit, reference, linkedNode);
-    } else {
-      var aliasedType = (linkedNode as GenericTypeAlias).type;
-      if (aliasedType is GenericFunctionType ||
-          !enclosingUnit.isNonFunctionTypeAliasesEnabled) {
-        // ignore: deprecated_member_use_from_same_package
-        return FunctionTypeAliasElementImpl.forLinkedNode(
-            enclosingUnit, reference, linkedNode);
-      } else {
-        return TypeAliasElementImpl.forLinkedNode(
-            enclosingUnit, reference, linkedNode);
-      }
-    }
-  }
-
   @override
   ElementImpl? get aliasedElement {
     linkedData?.read(this);
@@ -5609,24 +5476,6 @@
   @override
   DartType get aliasedType {
     linkedData?.read(this);
-    if (_aliasedType != null) return _aliasedType!;
-
-    final linkedNode = this.linkedNode;
-    if (linkedNode is GenericTypeAlias) {
-      var typeNode = linkedNode.type;
-      if (isNonFunctionTypeAliasesEnabled) {
-        _aliasedType = typeNode.type;
-        assert(_aliasedType != null);
-      } else if (typeNode is GenericFunctionType) {
-        _aliasedType = typeNode.type;
-        assert(_aliasedType != null);
-      } else {
-        _aliasedType = _errorFunctionType(NullabilitySuffix.none);
-      }
-    } else if (linkedNode is FunctionTypeAlias) {
-      _aliasedType = (_aliasedElement as GenericFunctionTypeElementImpl).type;
-    }
-
     return _aliasedType!;
   }
 
@@ -5658,22 +5507,10 @@
 
   @override
   String get name {
-    if (linkedNode != null) {
-      return reference!.name;
-    }
     return super.name!;
   }
 
   @override
-  int get nameOffset {
-    if (linkedNode != null) {
-      return enclosingUnit.linkedContext!.getNameOffset(linkedNode!);
-    }
-
-    return super.nameOffset;
-  }
-
-  @override
   List<TypeParameterElement> get typeParameters {
     linkedData?.read(this);
     return super.typeParameters;
@@ -5784,12 +5621,6 @@
   /// [offset].
   TypeParameterElementImpl(String name, int offset) : super(name, offset);
 
-  TypeParameterElementImpl.forLinkedNode(
-      ElementImpl enclosing, TypeParameterImpl linkedNode)
-      : super.forLinkedNode(enclosing, null, linkedNode) {
-    linkedNode.name.staticElement = this;
-  }
-
   /// Initialize a newly created synthetic type parameter element to have the
   /// given [name], and with [synthetic] set to true.
   TypeParameterElementImpl.synthetic(String name) : super(name, -1) {
@@ -5805,13 +5636,6 @@
   }
 
   DartType? get boundInternal {
-    if (_bound != null) return _bound;
-
-    final linkedNode = this.linkedNode;
-    if (linkedNode is TypeParameter) {
-      return _bound = linkedNode.bound?.type;
-    }
-
     return _bound;
   }
 
@@ -5830,22 +5654,9 @@
 
   @override
   String get name {
-    if (linkedNode != null) {
-      var node = linkedNode as TypeParameter;
-      return node.name.name;
-    }
     return super.name!;
   }
 
-  @override
-  int get nameOffset {
-    if (linkedNode != null) {
-      return enclosingUnit.linkedContext!.getNameOffset(linkedNode!);
-    }
-
-    return super.nameOffset;
-  }
-
   Variance get variance {
     return _variance ?? Variance.covariant;
   }
@@ -5889,35 +5700,15 @@
 /// Mixin representing an element which can have type parameters.
 mixin TypeParameterizedElementMixin
     implements _ExistingElementImpl, TypeParameterizedElement {
-  /// A cached list containing the type parameters declared by this element
-  /// directly, or `null` if the elements have not been created yet. This does
-  /// not include type parameters that are declared by any enclosing elements.
-  List<TypeParameterElement> _typeParameterElements =
-      _Sentinel.typeParameterElement;
+  /// The type parameters declared by this element directly. This does not
+  /// include type parameters that are declared by any enclosing elements.
+  List<TypeParameterElement> _typeParameterElements = const [];
 
   @override
   bool get isSimplyBounded => true;
 
   @override
   List<TypeParameterElement> get typeParameters {
-    if (!identical(_typeParameterElements, _Sentinel.typeParameterElement)) {
-      return _typeParameterElements;
-    }
-
-    if (linkedNode != null) {
-      var typeParameters = linkedContext!.getTypeParameters2(linkedNode!);
-      if (typeParameters == null) {
-        return _typeParameterElements = const [];
-      }
-      return _typeParameterElements = typeParameters.typeParameters
-          .cast<TypeParameterImpl>()
-          .map<TypeParameterElement>((node) {
-        var element = node.declaredElement;
-        element ??= TypeParameterElementImpl.forLinkedNode(this, node);
-        return element;
-      }).toList();
-    }
-
     return _typeParameterElements;
   }
 
@@ -6133,7 +5924,6 @@
   static final List<ElementAnnotation> elementAnnotation =
       List.unmodifiable([]);
   static final List<ExportElement> exportElement = List.unmodifiable([]);
-  static final List<ExtensionElement> extensionElement = List.unmodifiable([]);
   static final List<FieldElement> fieldElement = List.unmodifiable([]);
   @Deprecated('Use TypeAliasElement instead')
   static final List<FunctionTypeAliasElement> functionTypeAliasElement =
@@ -6142,7 +5932,4 @@
   static final List<MethodElement> methodElement = List.unmodifiable([]);
   static final List<PropertyAccessorElement> propertyAccessorElement =
       List.unmodifiable([]);
-  static final List<TypeAliasElement> typeAliasElement = List.unmodifiable([]);
-  static final List<TypeParameterElement> typeParameterElement =
-      List.unmodifiable([]);
 }
diff --git a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
index e4f5c28..c1c1a79 100644
--- a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
@@ -103,6 +103,7 @@
     }
 
     return NamedTypeBuilder(
+      type.linker,
       type.typeSystem,
       type.element,
       newTypeArguments ?? type.arguments,
diff --git a/pkg/analyzer/lib/src/dart/element/type_algebra.dart b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
index 4d72f96..326f73a 100644
--- a/pkg/analyzer/lib/src/dart/element/type_algebra.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
@@ -536,6 +536,7 @@
     }
 
     return NamedTypeBuilder(
+      type.linker,
       type.typeSystem,
       type.element,
       arguments,
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index ca2d949..c210b45 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -402,7 +402,6 @@
   int _classMembersLengthsIndex = 0;
 
   late List<Reference> exports;
-  var nextUnnamedExtensionId = 0;
 
   LibraryReader._({
     required LinkedElementFactory elementFactory,
@@ -655,7 +654,7 @@
   ) {
     var resolutionOffset = _baseResolutionOffset + _reader.readUInt30();
     var name = _reader.readOptionalStringReference();
-    var refName = name ?? 'extension-${nextUnnamedExtensionId++}';
+    var refName = _reader.readStringReference();
     var reference = unitReference.getChild('@extension').getChild(refName);
 
     var element = ExtensionElementImpl(name, -1);
@@ -1189,7 +1188,6 @@
     unitElement.uri = _reader.readOptionalStringReference();
     unitElement.isSynthetic = _reader.readBool();
 
-    nextUnnamedExtensionId = 0;
     _readClasses(unitElement, unitReference);
     _readEnums(unitElement, unitReference);
     _readExtensions(unitElement, unitReference);
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index e6ca6ed..769e3f2 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -195,9 +195,12 @@
   }
 
   void _writeExtensionElement(ExtensionElement element) {
+    element as ExtensionElementImpl;
     _sink.writeUInt30(_resolutionSink.offset);
 
     _sink._writeOptionalStringReference(element.name);
+    _sink._writeStringReference(element.reference!.name);
+
     _resolutionSink._writeAnnotationList(element.metadata);
 
     _writeTypeParameters(element.typeParameters, () {
@@ -790,16 +793,10 @@
 
   static FunctionType _toSyntheticFunctionType(FunctionType type) {
     var typeParameters = type.typeFormals;
-
     if (typeParameters.isEmpty) return type;
 
-    var onlySyntheticTypeParameters = typeParameters.every((e) {
-      return e is TypeParameterElementImpl && e.linkedNode == null;
-    });
-    if (onlySyntheticTypeParameters) return type;
-
-    var parameters = getFreshTypeParameters(typeParameters);
-    return parameters.applyToFunctionType(type);
+    var fresh = getFreshTypeParameters(typeParameters);
+    return fresh.applyToFunctionType(type);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 453957c..cdfde28 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -2,6 +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:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -22,6 +23,7 @@
   var _hasCoreImport = false;
 
   _EnclosingContext _enclosingContext;
+  var _nextUnnamedExtensionId = 0;
 
   ElementBuilder({
     required LibraryBuilder libraryBuilder,
@@ -31,6 +33,12 @@
         _unitElement = unitElement,
         _enclosingContext = _EnclosingContext(unitReference, unitElement);
 
+  bool get _isNonFunctionTypeAliasesEnabled {
+    return _libraryElement.featureSet.isEnabled(
+      Feature.nonfunction_type_aliases,
+    );
+  }
+
   LibraryElementImpl get _libraryElement => _libraryBuilder.element;
 
   Linker get _linker => _libraryBuilder.linker;
@@ -39,11 +47,13 @@
     unit.declarations.accept(this);
     _unitElement.accessors = _enclosingContext.propertyAccessors;
     _unitElement.enums = _enclosingContext.enums;
+    _unitElement.extensions = _enclosingContext.extensions;
     _unitElement.functions = _enclosingContext.functions;
     _unitElement.mixins = _enclosingContext.mixins;
     _unitElement.topLevelVariables = _enclosingContext.properties
         .whereType<TopLevelVariableElementImpl>()
         .toList();
+    _unitElement.typeAliases = _enclosingContext.typeAliases;
     _unitElement.types = _enclosingContext.classes;
   }
 
@@ -193,12 +203,40 @@
   }
 
   @override
-  void visitExtensionDeclaration(ExtensionDeclaration node) {
-    var element = node.declaredElement as ExtensionElementImpl;
-    var holder = _buildClassMembers(element, node.members);
-    element.accessors = holder.propertyAccessors;
-    element.fields = holder.properties.whereType<FieldElement>().toList();
-    element.methods = holder.methods;
+  void visitExtensionDeclaration(covariant ExtensionDeclarationImpl node) {
+    var nodeName = node.name;
+    var name = nodeName?.name;
+    var nameOffset = nodeName?.offset ?? -1;
+
+    var element = ExtensionElementImpl(name, nameOffset);
+    element.metadata = _buildAnnotations(node.metadata);
+    _setCodeRange(element, node);
+
+    node.declaredElement = element;
+    _linker.elementNodes[element] = node;
+
+    var refName = name ?? 'extension-${_nextUnnamedExtensionId++}';
+    var reference = _enclosingContext.addExtension(refName, element);
+
+    if (name != null) {
+      _libraryBuilder.localScope.declare(name, reference);
+    }
+
+    var holder = _EnclosingContext(reference, element);
+    _withEnclosing(holder, () {
+      var typeParameters = node.typeParameters;
+      if (typeParameters != null) {
+        typeParameters.accept(this);
+        element.typeParameters = holder.typeParameters;
+      }
+    });
+
+    {
+      var holder = _buildClassMembers(element, node.members);
+      element.accessors = holder.propertyAccessors;
+      element.fields = holder.properties.whereType<FieldElement>().toList();
+      element.methods = holder.methods;
+    }
 
     node.extendedType.accept(this);
   }
@@ -374,21 +412,35 @@
   }
 
   @override
-  void visitFunctionTypeAlias(FunctionTypeAlias node) {
-    node.returnType?.accept(this);
-    node.typeParameters?.accept(this);
-    node.parameters.accept(this);
+  void visitFunctionTypeAlias(covariant FunctionTypeAliasImpl node) {
+    var nameNode = node.name;
+    var name = nameNode.name;
 
-    var element = node.declaredElement as TypeAliasElementImpl;
+    // ignore: deprecated_member_use_from_same_package
+    var element = FunctionTypeAliasElementImpl(name, nameNode.offset);
+    element.isFunctionTypeAliasBased = true;
+    element.metadata = _buildAnnotations(node.metadata);
+    _setCodeRange(element, node);
+
+    nameNode.staticElement = element;
+    _linker.elementNodes[element] = node;
+
+    var reference = _enclosingContext.addTypeAlias(name, element);
+    _libraryBuilder.localScope.declare(name, reference);
+
+    var holder = _EnclosingContext(reference, element);
+    _withEnclosing(holder, () {
+      node.typeParameters?.accept(this);
+      node.returnType?.accept(this);
+      node.parameters.accept(this);
+    });
 
     var aliasedElement = GenericFunctionTypeElementImpl.forOffset(
       node.name.offset,
     );
-    // TODO(scheglov) Use enclosing context?
-    aliasedElement.parameters = node.parameters.parameters
-        .map((parameterNode) => parameterNode.declaredElement!)
-        .toList();
+    aliasedElement.parameters = holder.parameters;
 
+    element.typeParameters = holder.typeParameters;
     element.aliasedElement = aliasedElement;
   }
 
@@ -463,13 +515,38 @@
   }
 
   @override
-  void visitGenericTypeAlias(GenericTypeAlias node) {
-    node.typeParameters?.accept(this);
-    node.type.accept(this);
+  void visitGenericTypeAlias(covariant GenericTypeAliasImpl node) {
+    var nameNode = node.name;
+    var name = nameNode.name;
+
+    TypeAliasElementImpl element;
+    var aliasedType = node.type;
+    if (aliasedType is GenericFunctionType ||
+        !_isNonFunctionTypeAliasesEnabled) {
+      // ignore: deprecated_member_use_from_same_package
+      element = FunctionTypeAliasElementImpl(name, nameNode.offset);
+    } else {
+      element = TypeAliasElementImpl(name, nameNode.offset);
+    }
+    element.metadata = _buildAnnotations(node.metadata);
+    _setCodeRange(element, node);
+
+    nameNode.staticElement = element;
+    _linker.elementNodes[element] = node;
+
+    var reference = _enclosingContext.addTypeAlias(name, element);
+    _libraryBuilder.localScope.declare(name, reference);
+
+    var holder = _EnclosingContext(reference, element);
+    _withEnclosing(holder, () {
+      node.typeParameters?.accept(this);
+    });
+    element.typeParameters = holder.typeParameters;
 
     var typeNode = node.type;
+    typeNode.accept(this);
+
     if (typeNode is GenericFunctionTypeImpl) {
-      var element = node.declaredElement as TypeAliasElementImpl;
       element.aliasedElement =
           typeNode.declaredElement as GenericFunctionTypeElementImpl;
     }
@@ -1014,12 +1091,14 @@
   final List<ClassElementImpl> classes = [];
   final List<ConstructorElementImpl> constructors = [];
   final List<EnumElementImpl> enums = [];
+  final List<ExtensionElementImpl> extensions = [];
   final List<FunctionElementImpl> functions = [];
   final List<MethodElementImpl> methods = [];
   final List<MixinElementImpl> mixins = [];
   final List<ParameterElementImpl> parameters = [];
   final List<PropertyInducingElementImpl> properties = [];
   final List<PropertyAccessorElementImpl> propertyAccessors = [];
+  final List<TypeAliasElementImpl> typeAliases = [];
   final List<TypeParameterElementImpl> typeParameters = [];
   final bool hasConstConstructor;
 
@@ -1044,6 +1123,11 @@
     return _bindReference('@enum', name, element);
   }
 
+  Reference addExtension(String name, ExtensionElementImpl element) {
+    extensions.add(element);
+    return _bindReference('@extension', name, element);
+  }
+
   Reference addField(String name, FieldElementImpl element) {
     properties.add(element);
     return _bindReference('@field', name, element);
@@ -1087,6 +1171,11 @@
     return _bindReference('@variable', name, element);
   }
 
+  Reference addTypeAlias(String name, TypeAliasElementImpl element) {
+    typeAliases.add(element);
+    return _bindReference('@typeAlias', name, element);
+  }
+
   void addTypeParameter(String name, TypeParameterElementImpl element) {
     typeParameters.add(element);
     this.element.encloseElement(element);
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index be39cb7..318f25f 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -84,10 +84,6 @@
   /// Add top-level declaration of the library units to the local scope.
   void addLocalDeclarations() {
     for (var linkingUnit in context.units) {
-      var unitRef = reference.getChild('@unit').getChild(linkingUnit.uriStr);
-      var extensionRef = unitRef.getChild('@extension');
-      var typeAliasRef = unitRef.getChild('@typeAlias');
-      var nextUnnamedExtensionId = 0;
       for (var node in linkingUnit.unit.declarations) {
         if (node is ast.ClassDeclaration) {
           // Handled in ElementBuilder.
@@ -96,44 +92,13 @@
         } else if (node is ast.EnumDeclarationImpl) {
           // Handled in ElementBuilder.
         } else if (node is ast.ExtensionDeclarationImpl) {
-          var name = node.name?.name;
-          var refName = name ?? 'extension-${nextUnnamedExtensionId++}';
-
-          var reference = extensionRef.getChild(refName);
-          reference.node ??= node;
-
-          if (name != null) {
-            localScope.declare(name, reference);
-          }
-
-          ExtensionElementImpl.forLinkedNode(
-              linkingUnit.reference.element as CompilationUnitElementImpl,
-              reference,
-              node);
+          // Handled in ElementBuilder.
         } else if (node is ast.FunctionDeclarationImpl) {
           // Handled in ElementBuilder.
         } else if (node is ast.FunctionTypeAlias) {
-          var name = node.name.name;
-          var reference = typeAliasRef.getChild(name);
-          reference.node ??= node;
-          localScope.declare(name, reference);
-
-          var element = TypeAliasElementImpl.forLinkedNodeFactory(
-              linkingUnit.reference.element as CompilationUnitElementImpl,
-              reference,
-              node);
-          element.isFunctionTypeAliasBased = true;
+          // Handled in ElementBuilder.
         } else if (node is ast.GenericTypeAlias) {
-          var name = node.name.name;
-          var reference = typeAliasRef.getChild(name);
-          reference.node ??= node;
-
-          localScope.declare(name, reference);
-
-          TypeAliasElementImpl.forLinkedNodeFactory(
-              linkingUnit.reference.element as CompilationUnitElementImpl,
-              reference,
-              node);
+          // Handled in ElementBuilder.
         } else if (node is ast.MixinDeclarationImpl) {
           // Handled in ElementBuilder.
         } else if (node is ast.TopLevelVariableDeclaration) {
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 8987d12..65975220 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -216,7 +216,7 @@
     for (var library in builders.values) {
       library.resolveTypes(nodesToBuildType);
     }
-    VarianceBuilder().perform(this);
+    VarianceBuilder(this).perform();
     computeSimplyBounded(this);
     TypeAliasSelfReferenceFinder().perform(this);
     TypesBuilder(this).build(nodesToBuildType);
diff --git a/pkg/analyzer/lib/src/summary2/named_type_builder.dart b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
index 2e5eb2f..a7364a7 100644
--- a/pkg/analyzer/lib/src/summary2/named_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/element/type_visitor.dart';
+import 'package:analyzer/src/summary2/link.dart';
 import 'package:analyzer/src/summary2/type_builder.dart';
 
 /// The type builder for a [TypeName].
@@ -22,6 +23,9 @@
   static const _aliasedTypeKey = '_aliasedType';
   static DynamicTypeImpl get _dynamicType => DynamicTypeImpl.instance;
 
+  /// The linker that contains this type.
+  final Linker linker;
+
   /// The type system of the library with the type name.
   final TypeSystemImpl typeSystem;
 
@@ -44,11 +48,12 @@
   /// and set for the [node].
   DartType? _type;
 
-  NamedTypeBuilder(
-      this.typeSystem, this.element, this.arguments, this.nullabilitySuffix,
+  NamedTypeBuilder(this.linker, this.typeSystem, this.element, this.arguments,
+      this.nullabilitySuffix,
       {this.node});
 
   factory NamedTypeBuilder.of(
+    Linker linker,
     TypeSystemImpl typeSystem,
     TypeNameImpl node,
     Element element,
@@ -62,7 +67,8 @@
       arguments = <DartType>[];
     }
 
-    return NamedTypeBuilder(typeSystem, element, arguments, nullabilitySuffix,
+    return NamedTypeBuilder(
+        linker, typeSystem, element, arguments, nullabilitySuffix,
         node: node);
   }
 
@@ -147,7 +153,8 @@
       return this;
     }
 
-    return NamedTypeBuilder(typeSystem, element, arguments, nullabilitySuffix,
+    return NamedTypeBuilder(
+        linker, typeSystem, element, arguments, nullabilitySuffix,
         node: node);
   }
 
@@ -248,15 +255,13 @@
   }
 
   DartType _getAliasedType(TypeAliasElementImpl element) {
-    // If the element is not being linked, there is no reason (or a way,
-    // because the linked node might be read only partially) to go through
-    // its node - all its types have already been built.
-    if (element.linkedContext == null) {
+    var typedefNode = linker.getLinkingNode(element);
+
+    // If the element is not being linked, the types have already been built.
+    if (typedefNode == null) {
       return element.aliasedType;
     }
 
-    var typedefNode = element.linkedNode!;
-
     // Break a possible recursion.
     var existing = typedefNode.getProperty(_aliasedTypeKey) as DartType?;
     if (existing != null) {
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 150ac8d..9169ffb 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -140,7 +140,6 @@
 
     var element = node.declaredElement as ExtensionElementImpl;
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
 
     node.typeParameters?.accept(this);
@@ -167,7 +166,6 @@
     var element = node.declaredElement as FieldFormalParameterElementImpl;
     element.parameters; // create elements
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
 
     node.type?.accept(this);
@@ -190,10 +188,6 @@
     var element = node.declaredElement as ExecutableElementImpl;
     element.parameters; // create elements
 
-    _createTypeParameterElements(
-      element,
-      node.functionExpression.typeParameters,
-    );
     scope = TypeParameterScope(outerScope, element.typeParameters);
     LinkingNodeContext(node, scope);
 
@@ -216,7 +210,6 @@
 
     var element = node.declaredElement as TypeAliasElementImpl;
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(outerScope, element.typeParameters);
 
     node.returnType?.accept(this);
@@ -238,7 +231,6 @@
     var element = node.declaredElement as ParameterElementImpl;
     element.parameters; // create elements
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(scope, element.typeParameters);
 
     node.returnType?.accept(this);
@@ -275,7 +267,6 @@
 
     var element = node.declaredElement as TypeAliasElementImpl;
 
-    _createTypeParameterElements(element, node.typeParameters);
     scope = TypeParameterScope(outerScope, element.typeParameters);
 
     node.typeParameters?.accept(this);
@@ -304,8 +295,6 @@
     var element = node.declaredElement as ExecutableElementImpl;
     element.parameters; // create elements
 
-    _createTypeParameterElements(element, node.typeParameters);
-
     scope = TypeParameterScope(scope, element.typeParameters);
     LinkingNodeContext(node, scope);
 
@@ -405,6 +394,7 @@
       );
     } else {
       var builder = NamedTypeBuilder.of(
+        linker,
         _typeSystem,
         node,
         element,
@@ -422,9 +412,6 @@
       bound.accept(this);
       var element = node.declaredElement as TypeParameterElementImpl;
       element.bound = bound.type;
-      // TODO(scheglov) We should not need to do it here.
-      // Only in the element builder, eventually.z
-      linker.elementNodes[element] = node;
     }
   }
 
@@ -444,29 +431,6 @@
     node.mixinTypes.accept(this);
   }
 
-  void _createTypeParameterElement(
-    ElementImpl enclosingElement,
-    TypeParameterImpl node,
-  ) {
-    var element = TypeParameterElementImpl.forLinkedNode(
-      enclosingElement,
-      node,
-    );
-    node.name.staticElement = element;
-  }
-
-  void _createTypeParameterElements(
-    ElementImpl enclosingElement,
-    TypeParameterList? typeParameterList,
-  ) {
-    if (typeParameterList == null) return;
-
-    for (var typeParameter in typeParameterList.typeParameters) {
-      typeParameter as TypeParameterImpl;
-      _createTypeParameterElement(enclosingElement, typeParameter);
-    }
-  }
-
   NullabilitySuffix _getNullabilitySuffix(bool hasQuestion) {
     if (isNNBD) {
       if (hasQuestion) {
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 6023f77..4f9d087 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -81,10 +81,6 @@
       builder.build();
     }
 
-    for (var declaration in nodes.declarations) {
-      _declaration(declaration);
-    }
-
     // TODO(scheglov) generalize
     _linker.elementNodes.forEach((element, node) {
       if (element is GenericFunctionTypeElementImpl &&
@@ -96,6 +92,10 @@
       }
     });
 
+    for (var declaration in nodes.declarations) {
+      _declaration(declaration);
+    }
+
     _MixinsInference(_linker).perform(nodes.declarations);
   }
 
@@ -187,7 +187,7 @@
     } else if (node is FunctionTypedFormalParameter) {
       _functionTypedFormalParameter(node);
     } else if (node is GenericTypeAlias) {
-      // TODO(scheglov) ???
+      _genericTypeAlias(node);
     } else if (node is MethodDeclaration) {
       var returnType = node.returnType?.type;
       if (returnType == null) {
@@ -218,7 +218,10 @@
     }
   }
 
-  void _extensionDeclaration(ExtensionDeclaration node) {}
+  void _extensionDeclaration(ExtensionDeclaration node) {
+    var element = node.declaredElement as ExtensionElementImpl;
+    element.extendedType = node.extendedType.typeOrThrow;
+  }
 
   void _fieldFormalParameter(FieldFormalParameter node) {
     var element = node.declaredElement as FieldFormalParameterElementImpl;
@@ -243,10 +246,10 @@
   }
 
   void _functionTypeAlias(FunctionTypeAlias node) {
-    var returnTypeNode = node.returnType;
-    var element = node.declaredElement as TypeAliasElement;
+    var element = node.declaredElement as TypeAliasElementImpl;
     var function = element.aliasedElement as GenericFunctionTypeElementImpl;
-    function.returnType = returnTypeNode?.type ?? _dynamicType;
+    function.returnType = node.returnType?.type ?? _dynamicType;
+    element.aliasedType = function.type;
   }
 
   void _functionTypedFormalParameter(FunctionTypedFormalParameter node) {
@@ -260,6 +263,20 @@
     element.type = type;
   }
 
+  void _genericTypeAlias(GenericTypeAlias node) {
+    var element = node.declaredElement as TypeAliasElementImpl;
+    var featureSet = element.library.featureSet;
+
+    var typeNode = node.type;
+    if (featureSet.isEnabled(Feature.nonfunction_type_aliases)) {
+      element.aliasedType = typeNode.typeOrThrow;
+    } else if (typeNode is GenericFunctionType) {
+      element.aliasedType = typeNode.typeOrThrow;
+    } else {
+      element.aliasedType = _errorFunctionType();
+    }
+  }
+
   bool _isNonNullableByDefault(AstNode node) {
     var unit = node.thisOrAncestorOfType<CompilationUnit>();
     return unit!.featureSet.isEnabled(Feature.non_nullable);
@@ -303,6 +320,17 @@
         .toList();
   }
 
+  /// The [FunctionType] to use when a function type is expected for a type
+  /// alias, but the actual provided type annotation is not a function type.
+  static FunctionTypeImpl _errorFunctionType() {
+    return FunctionTypeImpl(
+      typeFormals: const [],
+      parameters: const [],
+      returnType: DynamicTypeImpl.instance,
+      nullabilitySuffix: NullabilitySuffix.none,
+    );
+  }
+
   static InterfaceType _objectType(ClassElementImpl element) {
     return element.library.typeProvider.objectType;
   }
diff --git a/pkg/analyzer/lib/src/summary2/variance_builder.dart b/pkg/analyzer/lib/src/summary2/variance_builder.dart
index 517aa4a..8d7438d 100644
--- a/pkg/analyzer/lib/src/summary2/variance_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/variance_builder.dart
@@ -13,11 +13,14 @@
 import 'package:analyzer/src/summary2/named_type_builder.dart';
 
 class VarianceBuilder {
+  final Linker _linker;
   final Set<TypeAlias> _pending = Set.identity();
   final Set<TypeAlias> _visit = Set.identity();
 
-  void perform(Linker linker) {
-    for (var builder in linker.builders.values) {
+  VarianceBuilder(this._linker);
+
+  void perform() {
+    for (var builder in _linker.builders.values) {
       for (var unitContext in builder.context.units) {
         for (var node in unitContext.unit.declarations) {
           if (node is FunctionTypeAlias) {
@@ -29,7 +32,7 @@
       }
     }
 
-    for (var builder in linker.builders.values) {
+    for (var builder in _linker.builders.values) {
       for (var unitContext in builder.context.units) {
         for (var node in unitContext.unit.declarations) {
           if (node is ClassTypeAlias) {
@@ -217,7 +220,7 @@
   }
 
   void _typeAliasElement(TypeAliasElementImpl element) {
-    var node = element.linkedNode;
+    var node = _linker.getLinkingNode(element);
     if (node == null) {
       // Not linking.
     } else if (node is GenericTypeAlias) {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 28eb94e..8707e64 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -65,6 +65,7 @@
 kernel/testcases/*: Skip # These are not tests but input for tests.
 vm/test/transformations/type_flow/transformer_test: Slow, Pass
 vm/testcases/*: SkipByDesign # These are not tests but input for tests.
+wasm/*: SkipByDesign # These can't be run without running wasm:setup first.
 
 [ $compiler == dart2analyzer ]
 dev_compiler/test/options/*: SkipByDesign
@@ -95,6 +96,7 @@
 telemetry/test/*: SkipByDesign # Only meant to run on vm
 test_runner/test/*: SkipByDesign # Only meant to run on vm
 testing/*: SkipByDesign # Only meant to run on vm
+wasm/*: SkipByDesign # Only meant to run on vm
 
 [ $mode == debug ]
 compiler/test/deferred/load_graph_segmentation_test: Slow, Pass
diff --git a/pkg/wasm/README.md b/pkg/wasm/README.md
index ce842cd..1fcab7e 100644
--- a/pkg/wasm/README.md
+++ b/pkg/wasm/README.md
@@ -6,3 +6,44 @@
 ## Setup
 
 Run `dart bin/setup.dart` to build the Wasmer runtime.
+
+## Basic Usage
+
+As a simple example, we'll try to call the following C function from Dart using
+`package:wasm`. For a more detailed example that uses WASI, check out the
+example directory.
+
+```c++
+extern "C" int square(int n) { return n * n; }
+```
+
+We can compile this C++ code to WASM using a recent version of clang:
+
+```bash
+clang --target=wasm32 -nostdlib -Wl,--export-all -Wl,--no-entry -o square.wasm square.cc
+```
+
+Then we can load and run it like this:
+
+```dart
+import "dart:io";
+import "package:wasm/wasm.dart";
+
+void main() {
+  final data = File("square.wasm").readAsBytesSync();
+  final mod = WasmModule(data);
+  print(mod.describe());
+  final inst = mod.instantiate().build();
+  final square = inst.lookupFunction("square");
+  print(square(12));
+}
+```
+
+This should print:
+
+```
+export memory: memory
+export function: int32 square(int32)
+
+144
+```
diff --git a/pkg/wasm/bin/setup.dart b/pkg/wasm/bin/setup.dart
index 2e8fcad..ad36423 100644
--- a/pkg/wasm/bin/setup.dart
+++ b/pkg/wasm/bin/setup.dart
@@ -14,7 +14,7 @@
   // The common case, and how cli_util.dart computes the Dart SDK directory,
   // path.dirname called twice on Platform.resolvedExecutable.
   final exe = Uri.file(Platform.resolvedExecutable);
-  final commonSdkDir = exe.resolve('../..');
+  final commonSdkDir = exe.resolve('../../dart-sdk/');
   if (Directory(commonSdkDir.path).existsSync()) {
     return commonSdkDir;
   }
@@ -22,7 +22,7 @@
   // This is the less common case where the user is in the checked out Dart
   // SDK, and is executing dart via:
   // ./out/ReleaseX64/dart ...
-  final checkedOutSdkDir = exe.resolve('../dart-sdk');
+  final checkedOutSdkDir = exe.resolve('../dart-sdk/');
   if (Directory(checkedOutSdkDir.path).existsSync()) {
     return checkedOutSdkDir;
   }
@@ -31,6 +31,17 @@
   return commonSdkDir;
 }
 
+Uri getOutDir(Uri root) {
+  // Traverse up until we see a `.dart_tool/package_config.json` file.
+  do {
+    if (File.fromUri(root.resolve('.dart_tool/package_config.json'))
+        .existsSync()) {
+      return root.resolve('.dart_tool/wasm/');
+    }
+  } while (root != (root = root.resolve('..')));
+  throw Exception(".dart_tool/package_config.json not found");
+}
+
 String getOutLib(String target) {
   final os = RegExp(r'^.*-.*-(.*)').firstMatch(target)?.group(1) ?? '';
   if (os == 'darwin' || os == 'ios') {
@@ -89,10 +100,12 @@
   final target = args.length >= 1 ? args[0] : await getTargetTriple();
   final sdkDir = getSdkDir();
   final binDir = Platform.script;
-  final outLib = binDir.resolve('out/' + getOutLib(target)).path;
+  final outDir = getOutDir(binDir);
+  final outLib = outDir.resolve(getOutLib(target)).path;
 
   print('Dart SDK directory: ${sdkDir.path}');
   print('Script directory: ${binDir.path}');
+  print('Output directory: ${outDir.path}');
   print('Target: $target');
   print('Output library: $outLib');
 
@@ -102,12 +115,21 @@
     '--target',
     target,
     '--target-dir',
-    binDir.resolve('out').path,
+    outDir.path,
     '--manifest-path',
     binDir.resolve('Cargo.toml').path,
     '--release'
   ]);
 
+  // Hack around a bug with dart_api_dl_impl.h include path in dart_api_dl.c.
+  if (!File.fromUri(sdkDir.resolve('include/internal/dart_api_dl_impl.h'))
+      .existsSync()) {
+    Directory(outDir.resolve('include/internal/').path)
+        .createSync(recursive: true);
+    File.fromUri(sdkDir.resolve('include/runtime/dart_api_dl_impl.h'))
+        .copy(outDir.resolve('include/internal/dart_api_dl_impl.h').path);
+  }
+
   // Build dart_api_dl.o.
   await run('clang', [
     '-DDART_SHARED_LIB',
@@ -117,10 +139,14 @@
     '-O3',
     '-target',
     target,
+    '-I',
+    sdkDir.resolve('include/').path,
+    '-I',
+    outDir.resolve('include/').path,
     '-c',
-    sdkDir.resolve('runtime/include/dart_api_dl.c').path,
+    sdkDir.resolve('include/dart_api_dl.c').path,
     '-o',
-    binDir.resolve('out/dart_api_dl.o').path
+    outDir.resolve('dart_api_dl.o').path
   ]);
 
   // Build finalizers.o.
@@ -135,11 +161,13 @@
     '-target',
     target,
     '-I',
-    sdkDir.resolve('runtime').path,
+    sdkDir.path,
+    '-I',
+    outDir.resolve('include/').path,
     '-c',
     binDir.resolve('finalizers.cc').path,
     '-o',
-    binDir.resolve('out/finalizers.o').path
+    outDir.resolve('finalizers.o').path
   ]);
 
   // Link wasmer, dart_api_dl, and finalizers to create the output library.
@@ -156,9 +184,9 @@
     '-Wl,--gc-sections',
     '-target',
     target,
-    binDir.resolve('out/dart_api_dl.o').path,
-    binDir.resolve('out/finalizers.o').path,
-    binDir.resolve('out/' + target + '/release/libwasmer.a').path,
+    outDir.resolve('dart_api_dl.o').path,
+    outDir.resolve('finalizers.o').path,
+    outDir.resolve('' + target + '/release/libwasmer.a').path,
     '-o',
     outLib
   ]);
diff --git a/pkg/wasm/lib/src/module.dart b/pkg/wasm/lib/src/module.dart
index 6eb4e12..305d239 100644
--- a/pkg/wasm/lib/src/module.dart
+++ b/pkg/wasm/lib/src/module.dart
@@ -109,6 +109,8 @@
   }
 }
 
+class _WasmImportOwner {}
+
 /// WasmInstanceBuilder is used collect all the imports that a WasmModule
 /// requires before it is instantiated.
 class WasmInstanceBuilder {
@@ -117,7 +119,7 @@
   Map<String, int> _importIndex;
   Pointer<WasmerExternVec> _imports = calloc<WasmerExternVec>();
   Pointer<WasmerWasiEnv> _wasiEnv = nullptr;
-  Object _importOwner = Object();
+  _WasmImportOwner _importOwner = _WasmImportOwner();
 
   WasmInstanceBuilder(this._module) : _importIndex = {} {
     _importDescs = WasmRuntime().importDescriptors(_module._module);
@@ -215,7 +217,7 @@
   Stream<List<int>>? _stdout;
   Stream<List<int>>? _stderr;
   Map<String, WasmFunction> _functions = {};
-  Object _importOwner;
+  _WasmImportOwner _importOwner;
 
   WasmInstance(this._module, Pointer<WasmerExternVec> imports, this._wasiEnv,
       this._importOwner) {
diff --git a/pkg/wasm/lib/src/runtime.dart b/pkg/wasm/lib/src/runtime.dart
index c543752..b8defab 100644
--- a/pkg/wasm/lib/src/runtime.dart
+++ b/pkg/wasm/lib/src/runtime.dart
@@ -12,7 +12,6 @@
 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 {
@@ -161,37 +160,28 @@
     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;
+  static String? _getLibPathFrom(Uri root) {
+    // The dynamic library created by pub run wasm:setup is located relative to
+    // the package_config.json file, so walk up from the script directory until
+    // we find it.
+    do {
+      if (File.fromUri(root.resolve('.dart_tool/package_config.json'))
+          .existsSync()) {
+        return root.resolve('.dart_tool/wasm/' + _getLibName()).path;
+      }
+    } while (root != (root = root.resolve('..')));
+    return null;
   }
 
-  WasmRuntime._init()
-      : _lib = DynamicLibrary.open(path.join(_getLibDir(), _getLibName())) {
+  static String _getLibPath() {
+    var path = _getLibPathFrom(Platform.script.resolve('./'));
+    if (path != null) return path;
+    path = _getLibPathFrom(Directory.current.uri);
+    if (path != null) return path;
+    throw Exception("Wasm library not found. Did you `pub run wasm:setup`?");
+  }
+
+  WasmRuntime._init() : _lib = DynamicLibrary.open(_getLibPath()) {
     _Dart_InitializeApiDL = _lib.lookupFunction<
         NativeWasmerDartInitializeApiDLFn,
         WasmerDartInitializeApiDLFn>('Dart_InitializeApiDL');
diff --git a/pkg/wasm/lib/src/tools/runtime_template.dart b/pkg/wasm/lib/src/tools/runtime_template.dart
index 2757504..0394c10 100644
--- a/pkg/wasm/lib/src/tools/runtime_template.dart
+++ b/pkg/wasm/lib/src/tools/runtime_template.dart
@@ -10,7 +10,6 @@
 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 {
@@ -76,37 +75,28 @@
     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;
+  static String? _getLibPathFrom(Uri root) {
+    // The dynamic library created by pub run wasm:setup is located relative to
+    // the package_config.json file, so walk up from the script directory until
+    // we find it.
+    do {
+      if (File.fromUri(root.resolve('.dart_tool/package_config.json'))
+          .existsSync()) {
+        return root.resolve('.dart_tool/wasm/' + _getLibName()).path;
+      }
+    } while (root != (root = root.resolve('..')));
+    return null;
   }
 
-  WasmRuntime._init()
-      : _lib = DynamicLibrary.open(path.join(_getLibDir(), _getLibName())) {
+  static String _getLibPath() {
+    var path = _getLibPathFrom(Platform.script.resolve('./'));
+    if (path != null) return path;
+    path = _getLibPathFrom(Directory.current.uri);
+    if (path != null) return path;
+    throw Exception("Wasm library not found. Did you `pub run wasm:setup`?");
+  }
+
+  WasmRuntime._init() : _lib = DynamicLibrary.open(_getLibPath()) {
 /* <RUNTIME_LOAD> */
 
     if (_Dart_InitializeApiDL(NativeApi.initializeApiDLData) != 0) {
diff --git a/pkg/wasm/pubspec.yaml b/pkg/wasm/pubspec.yaml
index 570631c..ef31927 100644
--- a/pkg/wasm/pubspec.yaml
+++ b/pkg/wasm/pubspec.yaml
@@ -3,10 +3,13 @@
 description: Load and run wasm bytecode.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/wasm
-# This package is not intended for consumption on pub.dev. DO NOT publish.
-publish_to: none
+
 environment:
-  sdk: '>=2.10.0-0 <2.10.0'
+  sdk: '>=2.12.0 <3.0.0'
+
 dependencies:
-  ffi: ^0.1.3
-  path: ^1.0.0
+  ffi: ^1.0.0
+
+dev_dependencies:
+  pedantic: ^1.10.0
+  test: ^1.16.0
diff --git a/pkg/wasm/test/basic_test.dart b/pkg/wasm/test/basic_test.dart
new file mode 100644
index 0000000..5986a34
--- /dev/null
+++ b/pkg/wasm/test/basic_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2021, 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 that we can load a wasm module, find a function, and call it.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("basics", () {
+    // int64_t square(int64_t n) { return n * n; }
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60,
+      0x01, 0x7e, 0x01, 0x7e, 0x03, 0x02, 0x01, 0x00, 0x04, 0x05, 0x01, 0x70,
+      0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00, 0x02, 0x06, 0x08, 0x01, 0x7f,
+      0x01, 0x41, 0x80, 0x88, 0x04, 0x0b, 0x07, 0x13, 0x02, 0x06, 0x6d, 0x65,
+      0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x06, 0x73, 0x71, 0x75, 0x61, 0x72,
+      0x65, 0x00, 0x00, 0x0a, 0x09, 0x01, 0x07, 0x00, 0x20, 0x00, 0x20, 0x00,
+      0x7e, 0x0b,
+    ]);
+
+    var inst = WasmModule(data).instantiate().build();
+    var fn = inst.lookupFunction("square");
+    int n = fn(1234);
+
+    expect(n, 1234 * 1234);
+
+    expect(inst.lookupFunction("not_a_function"), isNull);
+  });
+}
diff --git a/pkg/wasm/test/corrupted_error_test.dart b/pkg/wasm/test/corrupted_error_test.dart
new file mode 100644
index 0000000..ac94ae8
--- /dev/null
+++ b/pkg/wasm/test/corrupted_error_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2021, 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 error thrown when the wasm module is corrupted.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("corrupted module", () {
+    var data = Uint8List.fromList([
+      0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60, 0x01, 0x7e, 0x01, 0x7e,
+      0x07, 0x13, 0x02, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00,
+      0x06, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x00, 0x00, 0x00, 0x20, 0x00,
+      0x7e, 0x0b,
+    ]);
+
+    expect(() => WasmModule(data), throwsA(isException));
+  });
+}
diff --git a/pkg/wasm/test/fn_call_error_test.dart b/pkg/wasm/test/fn_call_error_test.dart
new file mode 100644
index 0000000..bcaf64c
--- /dev/null
+++ b/pkg/wasm/test/fn_call_error_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2021, 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 error thrown when a function is called with the wrong args.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("function with wrong arguments", () {
+    // int64_t square(int64_t n) { return n * n; }
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60,
+      0x01, 0x7e, 0x01, 0x7e, 0x03, 0x02, 0x01, 0x00, 0x04, 0x05, 0x01, 0x70,
+      0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00, 0x02, 0x06, 0x08, 0x01, 0x7f,
+      0x01, 0x41, 0x80, 0x88, 0x04, 0x0b, 0x07, 0x13, 0x02, 0x06, 0x6d, 0x65,
+      0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x06, 0x73, 0x71, 0x75, 0x61, 0x72,
+      0x65, 0x00, 0x00, 0x0a, 0x09, 0x01, 0x07, 0x00, 0x20, 0x00, 0x20, 0x00,
+      0x7e, 0x0b,
+    ]);
+
+    var inst = WasmModule(data).instantiate().build();
+    var fn = inst.lookupFunction("square");
+
+    expect(() => fn(), throwsA(isArgumentError));
+    expect(() => fn(1, 2, 3), throwsA(isArgumentError));
+    expect(() => fn(1.23), throwsA(isArgumentError));
+  });
+}
diff --git a/pkg/wasm/test/fn_import_error_test.dart b/pkg/wasm/test/fn_import_error_test.dart
new file mode 100644
index 0000000..71482bd
--- /dev/null
+++ b/pkg/wasm/test/fn_import_error_test.dart
@@ -0,0 +1,77 @@
+// Copyright (c) 2021, 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 errors thrown by function imports.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("bad function imports", () {
+    // This module expects a function import like:
+    // int64_t someFn(int32_t a, int64_t b, float c, double d);
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x02, 0x60,
+      0x04, 0x7f, 0x7e, 0x7d, 0x7c, 0x01, 0x7e, 0x60, 0x00, 0x00, 0x02, 0x0e,
+      0x01, 0x03, 0x65, 0x6e, 0x76, 0x06, 0x73, 0x6f, 0x6d, 0x65, 0x46, 0x6e,
+      0x00, 0x00, 0x03, 0x02, 0x01, 0x01, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01,
+      0x01, 0x05, 0x03, 0x01, 0x00, 0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41,
+      0x80, 0x88, 0x04, 0x0b, 0x07, 0x11, 0x02, 0x06, 0x6d, 0x65, 0x6d, 0x6f,
+      0x72, 0x79, 0x02, 0x00, 0x04, 0x62, 0x6c, 0x61, 0x68, 0x00, 0x01, 0x0a,
+      0x1d, 0x01, 0x1b, 0x00, 0x41, 0x01, 0x42, 0x02, 0x43, 0x00, 0x00, 0x40,
+      0x40, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x10, 0x80,
+      0x80, 0x80, 0x80, 0x00, 0x1a, 0x0b,
+    ]);
+
+    var mod = WasmModule(data);
+
+    // Valid instantiation.
+    var inst = mod
+        .instantiate()
+        .addFunction("env", "someFn", (int a, int b, num c, double d) => 123)
+        .build();
+
+    // Missing imports.
+    expect(() => mod.instantiate().build(),
+        throwsA(predicate((Exception e) => "$e".contains("Missing import"))));
+
+    // Wrong kind of import.
+    expect(
+        () =>
+            mod.instantiate().addMemory("env", "someFn", mod.createMemory(10)),
+        throwsA(predicate(
+            (Exception e) => "$e".contains("Import is not a memory"))));
+
+    // Wrong namespace.
+    expect(
+        () => mod
+            .instantiate()
+            .addFunction(
+                "foo", "someFn", (int a, int b, num c, double d) => 123)
+            .build(),
+        throwsA(predicate((Exception e) => "$e".contains("Import not found"))));
+
+    // Wrong name.
+    expect(
+        () => mod
+            .instantiate()
+            .addFunction(
+                "env", "otherFn", (int a, int b, num c, double d) => 123)
+            .build(),
+        throwsA(predicate((Exception e) => "$e".contains("Import not found"))));
+
+    // Already filled.
+    expect(
+        () => mod
+            .instantiate()
+            .addFunction(
+                "env", "someFn", (int a, int b, num c, double d) => 123)
+            .addFunction(
+                "env", "someFn", (int a, int b, num c, double d) => 456)
+            .build(),
+        throwsA(predicate(
+            (Exception e) => "$e".contains("Import already filled"))));
+  });
+}
diff --git a/pkg/wasm/test/fn_import_exception_test.dart b/pkg/wasm/test/fn_import_exception_test.dart
new file mode 100644
index 0000000..e9de6ca
--- /dev/null
+++ b/pkg/wasm/test/fn_import_exception_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2021, 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 throwing exceptions from an imported function.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("exception thrown from imported function", () {
+    // void fn() {
+    //   a();
+    //   b();
+    // }
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x60,
+      0x00, 0x00, 0x02, 0x11, 0x02, 0x03, 0x65, 0x6e, 0x76, 0x01, 0x61, 0x00,
+      0x00, 0x03, 0x65, 0x6e, 0x76, 0x01, 0x62, 0x00, 0x00, 0x03, 0x02, 0x01,
+      0x00, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00,
+      0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41, 0x80, 0x88, 0x04, 0x0b, 0x07,
+      0x0f, 0x02, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x02,
+      0x66, 0x6e, 0x00, 0x02, 0x0a, 0x10, 0x01, 0x0e, 0x00, 0x10, 0x80, 0x80,
+      0x80, 0x80, 0x00, 0x10, 0x81, 0x80, 0x80, 0x80, 0x00, 0x0b,
+    ]);
+
+    bool called_b = false;
+    var thrownException = Exception("Hello exception!");
+    var inst = WasmModule(data).instantiate().addFunction("env", "a", () {
+      throw thrownException;
+    }).addFunction("env", "b", () {
+      called_b = true;
+    }).build();
+    var fn = inst.lookupFunction("fn");
+    expect(() => fn(), throwsA(thrownException));
+    expect(called_b, isFalse);
+
+    bool called_a = false;
+    inst = WasmModule(data).instantiate().addFunction("env", "a", () {
+      called_a = true;
+    }).addFunction("env", "b", () {
+      called_b = true;
+    }).build();
+    fn = inst.lookupFunction("fn");
+    fn();
+    expect(called_a, isTrue);
+    expect(called_b, isTrue);
+  });
+}
diff --git a/pkg/wasm/test/fn_import_test.dart b/pkg/wasm/test/fn_import_test.dart
new file mode 100644
index 0000000..3543f0b
--- /dev/null
+++ b/pkg/wasm/test/fn_import_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, 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 that we can load a wasm module, find a function, and call it.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("function import", () {
+    // void reportStuff() { report(123, 456); }
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x02, 0x60,
+      0x02, 0x7e, 0x7e, 0x00, 0x60, 0x00, 0x00, 0x02, 0x0e, 0x01, 0x03, 0x65,
+      0x6e, 0x76, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x00, 0x00, 0x03,
+      0x02, 0x01, 0x01, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01, 0x01, 0x05, 0x03,
+      0x01, 0x00, 0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41, 0x80, 0x88, 0x04,
+      0x0b, 0x07, 0x18, 0x02, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02,
+      0x00, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x75, 0x66,
+      0x66, 0x00, 0x01, 0x0a, 0x10, 0x01, 0x0e, 0x00, 0x42, 0xfb, 0x00, 0x42,
+      0xc8, 0x03, 0x10, 0x80, 0x80, 0x80, 0x80, 0x00, 0x0b,
+    ]);
+
+    int report_x = -1;
+    int report_y = -1;
+
+    var inst = WasmModule(data).instantiate()
+      .addFunction("env", "report", (int x, int y) {
+        report_x = x;
+        report_y = y;
+      }).build();
+    var fn = inst.lookupFunction("reportStuff");
+    fn();
+    expect(123, report_x);
+    expect(456, report_y);
+  });
+}
diff --git a/pkg/wasm/test/hello_wasi_test.dart b/pkg/wasm/test/hello_wasi_test.dart
new file mode 100644
index 0000000..f41bd50
--- /dev/null
+++ b/pkg/wasm/test/hello_wasi_test.dart
@@ -0,0 +1,182 @@
+// Copyright (c) 2021, 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.
+
+// Variant of hello_world_test that uses the default WASI imports.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:convert";
+import "dart:typed_data";
+
+void main() {
+  test("hello wasi", () async {
+    // Hello world module generated by emscripten+WASI. Exports a function like
+    // `void _start()`, and prints using `int fd_write(int, int, int, int)`.
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x33, 0x09, 0x60,
+      0x03, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, 0x7f, 0x7f, 0x7f,
+      0x01, 0x7f, 0x60, 0x00, 0x00, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60,
+      0x01, 0x7f, 0x01, 0x7f, 0x60, 0x03, 0x7f, 0x7e, 0x7f, 0x01, 0x7e, 0x60,
+      0x00, 0x01, 0x7f, 0x60, 0x01, 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, 0x7f,
+      0x00, 0x02, 0x1a, 0x01, 0x0d, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x75, 0x6e,
+      0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x08, 0x66, 0x64, 0x5f, 0x77, 0x72,
+      0x69, 0x74, 0x65, 0x00, 0x01, 0x03, 0x0f, 0x0e, 0x03, 0x04, 0x00, 0x03,
+      0x02, 0x07, 0x05, 0x04, 0x03, 0x06, 0x02, 0x02, 0x08, 0x00, 0x04, 0x05,
+      0x01, 0x70, 0x01, 0x04, 0x04, 0x05, 0x06, 0x01, 0x01, 0x80, 0x02, 0x80,
+      0x02, 0x06, 0x09, 0x01, 0x7f, 0x01, 0x41, 0xc0, 0x95, 0xc0, 0x02, 0x0b,
+      0x07, 0x2e, 0x04, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00,
+      0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c,
+      0x5f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x00, 0x05, 0x04, 0x6d, 0x61, 0x69,
+      0x6e, 0x00, 0x04, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x0b,
+      0x09, 0x09, 0x01, 0x00, 0x41, 0x01, 0x0b, 0x03, 0x08, 0x0e, 0x07, 0x0a,
+      0xae, 0x0c, 0x0e, 0xbf, 0x01, 0x01, 0x05, 0x7f, 0x41, 0x80, 0x08, 0x21,
+      0x04, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x10, 0x22, 0x02, 0x04, 0x7f,
+      0x20, 0x02, 0x05, 0x20, 0x01, 0x10, 0x02, 0x0d, 0x01, 0x20, 0x01, 0x28,
+      0x02, 0x10, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x14, 0x22, 0x05, 0x6b, 0x20,
+      0x00, 0x49, 0x04, 0x40, 0x20, 0x01, 0x41, 0x80, 0x08, 0x20, 0x00, 0x20,
+      0x01, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x0f, 0x0b, 0x02, 0x40, 0x20,
+      0x01, 0x2c, 0x00, 0x4b, 0x41, 0x00, 0x48, 0x0d, 0x00, 0x20, 0x00, 0x21,
+      0x03, 0x03, 0x40, 0x20, 0x03, 0x22, 0x02, 0x45, 0x0d, 0x01, 0x20, 0x02,
+      0x41, 0x7f, 0x6a, 0x22, 0x03, 0x41, 0x80, 0x08, 0x6a, 0x2d, 0x00, 0x00,
+      0x41, 0x0a, 0x47, 0x0d, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x80, 0x08, 0x20,
+      0x02, 0x20, 0x01, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x22, 0x03, 0x20,
+      0x02, 0x49, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x02, 0x6b, 0x21, 0x00, 0x20,
+      0x02, 0x41, 0x80, 0x08, 0x6a, 0x21, 0x04, 0x20, 0x01, 0x28, 0x02, 0x14,
+      0x21, 0x05, 0x20, 0x02, 0x21, 0x06, 0x0b, 0x20, 0x05, 0x20, 0x04, 0x20,
+      0x00, 0x10, 0x03, 0x1a, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x14, 0x20,
+      0x00, 0x6a, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x06, 0x6a, 0x21, 0x03,
+      0x0b, 0x20, 0x03, 0x0b, 0x59, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x20, 0x00,
+      0x2d, 0x00, 0x4a, 0x22, 0x01, 0x41, 0x7f, 0x6a, 0x20, 0x01, 0x72, 0x3a,
+      0x00, 0x4a, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x08, 0x71,
+      0x04, 0x40, 0x20, 0x00, 0x20, 0x01, 0x41, 0x20, 0x72, 0x36, 0x02, 0x00,
+      0x41, 0x7f, 0x0f, 0x0b, 0x20, 0x00, 0x42, 0x00, 0x37, 0x02, 0x04, 0x20,
+      0x00, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x22, 0x01, 0x36, 0x02, 0x1c, 0x20,
+      0x00, 0x20, 0x01, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x01, 0x20, 0x00,
+      0x28, 0x02, 0x30, 0x6a, 0x36, 0x02, 0x10, 0x41, 0x00, 0x0b, 0x82, 0x04,
+      0x01, 0x03, 0x7f, 0x20, 0x02, 0x41, 0x80, 0xc0, 0x00, 0x4f, 0x04, 0x40,
+      0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, 0x0d, 0x20, 0x00, 0x0f, 0x0b,
+      0x20, 0x00, 0x20, 0x02, 0x6a, 0x21, 0x03, 0x02, 0x40, 0x20, 0x00, 0x20,
+      0x01, 0x73, 0x41, 0x03, 0x71, 0x45, 0x04, 0x40, 0x02, 0x40, 0x20, 0x02,
+      0x41, 0x01, 0x48, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b,
+      0x20, 0x00, 0x41, 0x03, 0x71, 0x45, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02,
+      0x0c, 0x01, 0x0b, 0x20, 0x00, 0x21, 0x02, 0x03, 0x40, 0x20, 0x02, 0x20,
+      0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a,
+      0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x03, 0x4f,
+      0x0d, 0x01, 0x20, 0x02, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x0b, 0x0b, 0x02,
+      0x40, 0x20, 0x03, 0x41, 0x7c, 0x71, 0x22, 0x04, 0x41, 0xc0, 0x00, 0x49,
+      0x0d, 0x00, 0x20, 0x02, 0x20, 0x04, 0x41, 0x40, 0x6a, 0x22, 0x05, 0x4b,
+      0x0d, 0x00, 0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36,
+      0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x04, 0x36, 0x02, 0x04,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x08, 0x36, 0x02, 0x08, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x0c, 0x20, 0x02, 0x20, 0x01,
+      0x28, 0x02, 0x10, 0x36, 0x02, 0x10, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02,
+      0x14, 0x36, 0x02, 0x14, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x18, 0x36,
+      0x02, 0x18, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x1c, 0x36, 0x02, 0x1c,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x20, 0x36, 0x02, 0x20, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x24, 0x36, 0x02, 0x24, 0x20, 0x02, 0x20, 0x01,
+      0x28, 0x02, 0x28, 0x36, 0x02, 0x28, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02,
+      0x2c, 0x36, 0x02, 0x2c, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x30, 0x36,
+      0x02, 0x30, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x34, 0x36, 0x02, 0x34,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x38, 0x36, 0x02, 0x38, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x3c, 0x36, 0x02, 0x3c, 0x20, 0x01, 0x41, 0x40,
+      0x6b, 0x21, 0x01, 0x20, 0x02, 0x41, 0x40, 0x6b, 0x22, 0x02, 0x20, 0x05,
+      0x4d, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x4f, 0x0d, 0x01,
+      0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00,
+      0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x04, 0x6a,
+      0x22, 0x02, 0x20, 0x04, 0x49, 0x0d, 0x00, 0x0b, 0x0c, 0x01, 0x0b, 0x20,
+      0x03, 0x41, 0x04, 0x49, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01,
+      0x0b, 0x20, 0x03, 0x41, 0x7c, 0x6a, 0x22, 0x04, 0x20, 0x00, 0x49, 0x04,
+      0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x21, 0x02,
+      0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00,
+      0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, 0x20, 0x02,
+      0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, 0x00, 0x02, 0x20, 0x02, 0x20, 0x01,
+      0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21,
+      0x01, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x22, 0x02, 0x20, 0x04, 0x4d, 0x0d,
+      0x00, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x03, 0x49, 0x04, 0x40, 0x03, 0x40,
+      0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01,
+      0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x02,
+      0x20, 0x03, 0x47, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x00, 0x0b, 0x06, 0x00,
+      0x10, 0x0c, 0x41, 0x00, 0x0b, 0x03, 0x00, 0x01, 0x0b, 0x7e, 0x01, 0x03,
+      0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01,
+      0x41, 0x0a, 0x3a, 0x00, 0x0f, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, 0x10,
+      0x22, 0x02, 0x45, 0x04, 0x40, 0x20, 0x00, 0x10, 0x02, 0x0d, 0x01, 0x20,
+      0x00, 0x28, 0x02, 0x10, 0x21, 0x02, 0x0b, 0x02, 0x40, 0x20, 0x00, 0x28,
+      0x02, 0x14, 0x22, 0x03, 0x20, 0x02, 0x4f, 0x0d, 0x00, 0x20, 0x00, 0x2c,
+      0x00, 0x4b, 0x41, 0x0a, 0x46, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x03, 0x41,
+      0x01, 0x6a, 0x36, 0x02, 0x14, 0x20, 0x03, 0x41, 0x0a, 0x3a, 0x00, 0x00,
+      0x0c, 0x01, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x41, 0x0f, 0x6a, 0x41, 0x01,
+      0x20, 0x00, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x41, 0x01, 0x47, 0x0d,
+      0x00, 0x20, 0x01, 0x2d, 0x00, 0x0f, 0x1a, 0x0b, 0x20, 0x01, 0x41, 0x10,
+      0x6a, 0x24, 0x00, 0x0b, 0x04, 0x00, 0x42, 0x00, 0x0b, 0x04, 0x00, 0x41,
+      0x00, 0x0b, 0x31, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x21, 0x02, 0x20, 0x02,
+      0x02, 0x7f, 0x20, 0x01, 0x28, 0x02, 0x4c, 0x41, 0x7f, 0x4c, 0x04, 0x40,
+      0x20, 0x02, 0x20, 0x01, 0x10, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20,
+      0x01, 0x10, 0x01, 0x0b, 0x22, 0x01, 0x46, 0x04, 0x40, 0x20, 0x00, 0x0f,
+      0x0b, 0x20, 0x01, 0x0b, 0x62, 0x01, 0x03, 0x7f, 0x41, 0x80, 0x08, 0x21,
+      0x00, 0x03, 0x40, 0x20, 0x00, 0x22, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x00,
+      0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x7f, 0x73, 0x20, 0x02,
+      0x41, 0xff, 0xfd, 0xfb, 0x77, 0x6a, 0x71, 0x41, 0x80, 0x81, 0x82, 0x84,
+      0x78, 0x71, 0x45, 0x0d, 0x00, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x41, 0xff,
+      0x01, 0x71, 0x45, 0x04, 0x40, 0x20, 0x01, 0x21, 0x00, 0x0c, 0x01, 0x0b,
+      0x03, 0x40, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x21, 0x02, 0x20, 0x01, 0x41,
+      0x01, 0x6a, 0x22, 0x00, 0x21, 0x01, 0x20, 0x02, 0x0d, 0x00, 0x0b, 0x0b,
+      0x20, 0x00, 0x41, 0x80, 0x08, 0x6b, 0x0b, 0x0c, 0x00, 0x02, 0x7f, 0x41,
+      0x00, 0x41, 0x00, 0x10, 0x04, 0x0b, 0x1a, 0x0b, 0x66, 0x01, 0x02, 0x7f,
+      0x41, 0x90, 0x08, 0x28, 0x02, 0x00, 0x22, 0x00, 0x28, 0x02, 0x4c, 0x41,
+      0x00, 0x4e, 0x04, 0x7f, 0x41, 0x01, 0x05, 0x20, 0x01, 0x0b, 0x1a, 0x02,
+      0x40, 0x41, 0x7f, 0x41, 0x00, 0x10, 0x0a, 0x22, 0x01, 0x20, 0x01, 0x20,
+      0x00, 0x10, 0x09, 0x47, 0x1b, 0x41, 0x00, 0x48, 0x0d, 0x00, 0x02, 0x40,
+      0x20, 0x00, 0x2d, 0x00, 0x4b, 0x41, 0x0a, 0x46, 0x0d, 0x00, 0x20, 0x00,
+      0x28, 0x02, 0x14, 0x22, 0x01, 0x20, 0x00, 0x28, 0x02, 0x10, 0x4f, 0x0d,
+      0x00, 0x20, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x36, 0x02, 0x14, 0x20,
+      0x01, 0x41, 0x0a, 0x3a, 0x00, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x10,
+      0x06, 0x0b, 0x0b, 0x3d, 0x01, 0x01, 0x7f, 0x20, 0x02, 0x04, 0x40, 0x03,
+      0x40, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x41, 0x80, 0xc0, 0x00, 0x20,
+      0x02, 0x41, 0x80, 0xc0, 0x00, 0x49, 0x1b, 0x22, 0x03, 0x10, 0x03, 0x21,
+      0x00, 0x20, 0x01, 0x41, 0x80, 0x40, 0x6b, 0x21, 0x01, 0x20, 0x00, 0x41,
+      0x80, 0x40, 0x6b, 0x21, 0x00, 0x20, 0x02, 0x20, 0x03, 0x6b, 0x22, 0x02,
+      0x0d, 0x00, 0x0b, 0x0b, 0x0b, 0xb1, 0x02, 0x01, 0x06, 0x7f, 0x23, 0x00,
+      0x41, 0x20, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x20, 0x03, 0x20, 0x00, 0x28,
+      0x02, 0x1c, 0x22, 0x04, 0x36, 0x02, 0x10, 0x20, 0x00, 0x28, 0x02, 0x14,
+      0x21, 0x05, 0x20, 0x03, 0x20, 0x02, 0x36, 0x02, 0x1c, 0x20, 0x03, 0x20,
+      0x01, 0x36, 0x02, 0x18, 0x20, 0x03, 0x20, 0x05, 0x20, 0x04, 0x6b, 0x22,
+      0x01, 0x36, 0x02, 0x14, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x21, 0x06, 0x41,
+      0x02, 0x21, 0x05, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x21, 0x01, 0x03, 0x40,
+      0x02, 0x40, 0x02, 0x7f, 0x20, 0x06, 0x02, 0x7f, 0x20, 0x00, 0x28, 0x02,
+      0x3c, 0x20, 0x01, 0x20, 0x05, 0x20, 0x03, 0x41, 0x0c, 0x6a, 0x10, 0x00,
+      0x04, 0x40, 0x20, 0x03, 0x41, 0x7f, 0x36, 0x02, 0x0c, 0x41, 0x7f, 0x0c,
+      0x01, 0x0b, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x0b, 0x22, 0x04, 0x46, 0x04,
+      0x40, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x22, 0x01, 0x36, 0x02,
+      0x1c, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x01,
+      0x20, 0x00, 0x28, 0x02, 0x30, 0x6a, 0x36, 0x02, 0x10, 0x20, 0x02, 0x0c,
+      0x01, 0x0b, 0x20, 0x04, 0x41, 0x7f, 0x4a, 0x0d, 0x01, 0x20, 0x00, 0x41,
+      0x00, 0x36, 0x02, 0x1c, 0x20, 0x00, 0x42, 0x00, 0x37, 0x03, 0x10, 0x20,
+      0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x20, 0x72, 0x36, 0x02, 0x00,
+      0x41, 0x00, 0x20, 0x05, 0x41, 0x02, 0x46, 0x0d, 0x00, 0x1a, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x04, 0x6b, 0x0b, 0x21, 0x04, 0x20, 0x03, 0x41,
+      0x20, 0x6a, 0x24, 0x00, 0x20, 0x04, 0x0f, 0x0b, 0x20, 0x01, 0x41, 0x08,
+      0x6a, 0x20, 0x01, 0x20, 0x04, 0x20, 0x01, 0x28, 0x02, 0x04, 0x22, 0x07,
+      0x4b, 0x22, 0x08, 0x1b, 0x22, 0x01, 0x20, 0x04, 0x20, 0x07, 0x41, 0x00,
+      0x20, 0x08, 0x1b, 0x6b, 0x22, 0x07, 0x20, 0x01, 0x28, 0x02, 0x00, 0x6a,
+      0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x04, 0x20, 0x07,
+      0x6b, 0x36, 0x02, 0x04, 0x20, 0x06, 0x20, 0x04, 0x6b, 0x21, 0x06, 0x20,
+      0x05, 0x20, 0x08, 0x6b, 0x21, 0x05, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x0b,
+      0x0b, 0x4d, 0x06, 0x00, 0x41, 0x80, 0x08, 0x0b, 0x12, 0x68, 0x65, 0x6c,
+      0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00, 0x00,
+      0x00, 0x18, 0x04, 0x00, 0x41, 0x98, 0x08, 0x0b, 0x01, 0x05, 0x00, 0x41,
+      0xa4, 0x08, 0x0b, 0x01, 0x01, 0x00, 0x41, 0xbc, 0x08, 0x0b, 0x0e, 0x02,
+      0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb8, 0x04, 0x00, 0x00, 0x00,
+      0x04, 0x00, 0x41, 0xd4, 0x08, 0x0b, 0x01, 0x01, 0x00, 0x41, 0xe3, 0x08,
+      0x0b, 0x05, 0x0a, 0xff, 0xff, 0xff, 0xff,
+    ]);
+
+    var inst =
+        WasmModule(data).instantiate().enableWasi(captureStdout: true).build();
+
+    var fn = inst.lookupFunction("_start");
+    fn();
+    var out = utf8.decode(await inst.stdout.first);
+    expect(out, "hello, world!\n");
+  });
+}
diff --git a/pkg/wasm/test/hello_world_test.dart b/pkg/wasm/test/hello_world_test.dart
new file mode 100644
index 0000000..8a49ae2
--- /dev/null
+++ b/pkg/wasm/test/hello_world_test.dart
@@ -0,0 +1,209 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.12
+
+// Test for hello world built using emscripten with WASI.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("hello world", () {
+    // Hello world module generated by emscripten+WASI. Exports a function like
+    // `void _start()`, and prints using `int fd_write(int, int, int, int)`.
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x33, 0x09, 0x60,
+      0x03, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, 0x7f, 0x7f, 0x7f,
+      0x01, 0x7f, 0x60, 0x00, 0x00, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60,
+      0x01, 0x7f, 0x01, 0x7f, 0x60, 0x03, 0x7f, 0x7e, 0x7f, 0x01, 0x7e, 0x60,
+      0x00, 0x01, 0x7f, 0x60, 0x01, 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, 0x7f,
+      0x00, 0x02, 0x1a, 0x01, 0x0d, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x75, 0x6e,
+      0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x08, 0x66, 0x64, 0x5f, 0x77, 0x72,
+      0x69, 0x74, 0x65, 0x00, 0x01, 0x03, 0x0f, 0x0e, 0x03, 0x04, 0x00, 0x03,
+      0x02, 0x07, 0x05, 0x04, 0x03, 0x06, 0x02, 0x02, 0x08, 0x00, 0x04, 0x05,
+      0x01, 0x70, 0x01, 0x04, 0x04, 0x05, 0x06, 0x01, 0x01, 0x80, 0x02, 0x80,
+      0x02, 0x06, 0x09, 0x01, 0x7f, 0x01, 0x41, 0xc0, 0x95, 0xc0, 0x02, 0x0b,
+      0x07, 0x2e, 0x04, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00,
+      0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c,
+      0x5f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x00, 0x05, 0x04, 0x6d, 0x61, 0x69,
+      0x6e, 0x00, 0x04, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x0b,
+      0x09, 0x09, 0x01, 0x00, 0x41, 0x01, 0x0b, 0x03, 0x08, 0x0e, 0x07, 0x0a,
+      0xae, 0x0c, 0x0e, 0xbf, 0x01, 0x01, 0x05, 0x7f, 0x41, 0x80, 0x08, 0x21,
+      0x04, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x10, 0x22, 0x02, 0x04, 0x7f,
+      0x20, 0x02, 0x05, 0x20, 0x01, 0x10, 0x02, 0x0d, 0x01, 0x20, 0x01, 0x28,
+      0x02, 0x10, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x14, 0x22, 0x05, 0x6b, 0x20,
+      0x00, 0x49, 0x04, 0x40, 0x20, 0x01, 0x41, 0x80, 0x08, 0x20, 0x00, 0x20,
+      0x01, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x0f, 0x0b, 0x02, 0x40, 0x20,
+      0x01, 0x2c, 0x00, 0x4b, 0x41, 0x00, 0x48, 0x0d, 0x00, 0x20, 0x00, 0x21,
+      0x03, 0x03, 0x40, 0x20, 0x03, 0x22, 0x02, 0x45, 0x0d, 0x01, 0x20, 0x02,
+      0x41, 0x7f, 0x6a, 0x22, 0x03, 0x41, 0x80, 0x08, 0x6a, 0x2d, 0x00, 0x00,
+      0x41, 0x0a, 0x47, 0x0d, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x80, 0x08, 0x20,
+      0x02, 0x20, 0x01, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x22, 0x03, 0x20,
+      0x02, 0x49, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x02, 0x6b, 0x21, 0x00, 0x20,
+      0x02, 0x41, 0x80, 0x08, 0x6a, 0x21, 0x04, 0x20, 0x01, 0x28, 0x02, 0x14,
+      0x21, 0x05, 0x20, 0x02, 0x21, 0x06, 0x0b, 0x20, 0x05, 0x20, 0x04, 0x20,
+      0x00, 0x10, 0x03, 0x1a, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x14, 0x20,
+      0x00, 0x6a, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x06, 0x6a, 0x21, 0x03,
+      0x0b, 0x20, 0x03, 0x0b, 0x59, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x20, 0x00,
+      0x2d, 0x00, 0x4a, 0x22, 0x01, 0x41, 0x7f, 0x6a, 0x20, 0x01, 0x72, 0x3a,
+      0x00, 0x4a, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x08, 0x71,
+      0x04, 0x40, 0x20, 0x00, 0x20, 0x01, 0x41, 0x20, 0x72, 0x36, 0x02, 0x00,
+      0x41, 0x7f, 0x0f, 0x0b, 0x20, 0x00, 0x42, 0x00, 0x37, 0x02, 0x04, 0x20,
+      0x00, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x22, 0x01, 0x36, 0x02, 0x1c, 0x20,
+      0x00, 0x20, 0x01, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x01, 0x20, 0x00,
+      0x28, 0x02, 0x30, 0x6a, 0x36, 0x02, 0x10, 0x41, 0x00, 0x0b, 0x82, 0x04,
+      0x01, 0x03, 0x7f, 0x20, 0x02, 0x41, 0x80, 0xc0, 0x00, 0x4f, 0x04, 0x40,
+      0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, 0x0d, 0x20, 0x00, 0x0f, 0x0b,
+      0x20, 0x00, 0x20, 0x02, 0x6a, 0x21, 0x03, 0x02, 0x40, 0x20, 0x00, 0x20,
+      0x01, 0x73, 0x41, 0x03, 0x71, 0x45, 0x04, 0x40, 0x02, 0x40, 0x20, 0x02,
+      0x41, 0x01, 0x48, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b,
+      0x20, 0x00, 0x41, 0x03, 0x71, 0x45, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02,
+      0x0c, 0x01, 0x0b, 0x20, 0x00, 0x21, 0x02, 0x03, 0x40, 0x20, 0x02, 0x20,
+      0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a,
+      0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x03, 0x4f,
+      0x0d, 0x01, 0x20, 0x02, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x0b, 0x0b, 0x02,
+      0x40, 0x20, 0x03, 0x41, 0x7c, 0x71, 0x22, 0x04, 0x41, 0xc0, 0x00, 0x49,
+      0x0d, 0x00, 0x20, 0x02, 0x20, 0x04, 0x41, 0x40, 0x6a, 0x22, 0x05, 0x4b,
+      0x0d, 0x00, 0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36,
+      0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x04, 0x36, 0x02, 0x04,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x08, 0x36, 0x02, 0x08, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x0c, 0x20, 0x02, 0x20, 0x01,
+      0x28, 0x02, 0x10, 0x36, 0x02, 0x10, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02,
+      0x14, 0x36, 0x02, 0x14, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x18, 0x36,
+      0x02, 0x18, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x1c, 0x36, 0x02, 0x1c,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x20, 0x36, 0x02, 0x20, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x24, 0x36, 0x02, 0x24, 0x20, 0x02, 0x20, 0x01,
+      0x28, 0x02, 0x28, 0x36, 0x02, 0x28, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02,
+      0x2c, 0x36, 0x02, 0x2c, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x30, 0x36,
+      0x02, 0x30, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x34, 0x36, 0x02, 0x34,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x38, 0x36, 0x02, 0x38, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x3c, 0x36, 0x02, 0x3c, 0x20, 0x01, 0x41, 0x40,
+      0x6b, 0x21, 0x01, 0x20, 0x02, 0x41, 0x40, 0x6b, 0x22, 0x02, 0x20, 0x05,
+      0x4d, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x4f, 0x0d, 0x01,
+      0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00,
+      0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x04, 0x6a,
+      0x22, 0x02, 0x20, 0x04, 0x49, 0x0d, 0x00, 0x0b, 0x0c, 0x01, 0x0b, 0x20,
+      0x03, 0x41, 0x04, 0x49, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01,
+      0x0b, 0x20, 0x03, 0x41, 0x7c, 0x6a, 0x22, 0x04, 0x20, 0x00, 0x49, 0x04,
+      0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x21, 0x02,
+      0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00,
+      0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, 0x20, 0x02,
+      0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, 0x00, 0x02, 0x20, 0x02, 0x20, 0x01,
+      0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21,
+      0x01, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x22, 0x02, 0x20, 0x04, 0x4d, 0x0d,
+      0x00, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x03, 0x49, 0x04, 0x40, 0x03, 0x40,
+      0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01,
+      0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x02,
+      0x20, 0x03, 0x47, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x00, 0x0b, 0x06, 0x00,
+      0x10, 0x0c, 0x41, 0x00, 0x0b, 0x03, 0x00, 0x01, 0x0b, 0x7e, 0x01, 0x03,
+      0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01,
+      0x41, 0x0a, 0x3a, 0x00, 0x0f, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, 0x10,
+      0x22, 0x02, 0x45, 0x04, 0x40, 0x20, 0x00, 0x10, 0x02, 0x0d, 0x01, 0x20,
+      0x00, 0x28, 0x02, 0x10, 0x21, 0x02, 0x0b, 0x02, 0x40, 0x20, 0x00, 0x28,
+      0x02, 0x14, 0x22, 0x03, 0x20, 0x02, 0x4f, 0x0d, 0x00, 0x20, 0x00, 0x2c,
+      0x00, 0x4b, 0x41, 0x0a, 0x46, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x03, 0x41,
+      0x01, 0x6a, 0x36, 0x02, 0x14, 0x20, 0x03, 0x41, 0x0a, 0x3a, 0x00, 0x00,
+      0x0c, 0x01, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x41, 0x0f, 0x6a, 0x41, 0x01,
+      0x20, 0x00, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x41, 0x01, 0x47, 0x0d,
+      0x00, 0x20, 0x01, 0x2d, 0x00, 0x0f, 0x1a, 0x0b, 0x20, 0x01, 0x41, 0x10,
+      0x6a, 0x24, 0x00, 0x0b, 0x04, 0x00, 0x42, 0x00, 0x0b, 0x04, 0x00, 0x41,
+      0x00, 0x0b, 0x31, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x21, 0x02, 0x20, 0x02,
+      0x02, 0x7f, 0x20, 0x01, 0x28, 0x02, 0x4c, 0x41, 0x7f, 0x4c, 0x04, 0x40,
+      0x20, 0x02, 0x20, 0x01, 0x10, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20,
+      0x01, 0x10, 0x01, 0x0b, 0x22, 0x01, 0x46, 0x04, 0x40, 0x20, 0x00, 0x0f,
+      0x0b, 0x20, 0x01, 0x0b, 0x62, 0x01, 0x03, 0x7f, 0x41, 0x80, 0x08, 0x21,
+      0x00, 0x03, 0x40, 0x20, 0x00, 0x22, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x00,
+      0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x7f, 0x73, 0x20, 0x02,
+      0x41, 0xff, 0xfd, 0xfb, 0x77, 0x6a, 0x71, 0x41, 0x80, 0x81, 0x82, 0x84,
+      0x78, 0x71, 0x45, 0x0d, 0x00, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x41, 0xff,
+      0x01, 0x71, 0x45, 0x04, 0x40, 0x20, 0x01, 0x21, 0x00, 0x0c, 0x01, 0x0b,
+      0x03, 0x40, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x21, 0x02, 0x20, 0x01, 0x41,
+      0x01, 0x6a, 0x22, 0x00, 0x21, 0x01, 0x20, 0x02, 0x0d, 0x00, 0x0b, 0x0b,
+      0x20, 0x00, 0x41, 0x80, 0x08, 0x6b, 0x0b, 0x0c, 0x00, 0x02, 0x7f, 0x41,
+      0x00, 0x41, 0x00, 0x10, 0x04, 0x0b, 0x1a, 0x0b, 0x66, 0x01, 0x02, 0x7f,
+      0x41, 0x90, 0x08, 0x28, 0x02, 0x00, 0x22, 0x00, 0x28, 0x02, 0x4c, 0x41,
+      0x00, 0x4e, 0x04, 0x7f, 0x41, 0x01, 0x05, 0x20, 0x01, 0x0b, 0x1a, 0x02,
+      0x40, 0x41, 0x7f, 0x41, 0x00, 0x10, 0x0a, 0x22, 0x01, 0x20, 0x01, 0x20,
+      0x00, 0x10, 0x09, 0x47, 0x1b, 0x41, 0x00, 0x48, 0x0d, 0x00, 0x02, 0x40,
+      0x20, 0x00, 0x2d, 0x00, 0x4b, 0x41, 0x0a, 0x46, 0x0d, 0x00, 0x20, 0x00,
+      0x28, 0x02, 0x14, 0x22, 0x01, 0x20, 0x00, 0x28, 0x02, 0x10, 0x4f, 0x0d,
+      0x00, 0x20, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x36, 0x02, 0x14, 0x20,
+      0x01, 0x41, 0x0a, 0x3a, 0x00, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x10,
+      0x06, 0x0b, 0x0b, 0x3d, 0x01, 0x01, 0x7f, 0x20, 0x02, 0x04, 0x40, 0x03,
+      0x40, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x41, 0x80, 0xc0, 0x00, 0x20,
+      0x02, 0x41, 0x80, 0xc0, 0x00, 0x49, 0x1b, 0x22, 0x03, 0x10, 0x03, 0x21,
+      0x00, 0x20, 0x01, 0x41, 0x80, 0x40, 0x6b, 0x21, 0x01, 0x20, 0x00, 0x41,
+      0x80, 0x40, 0x6b, 0x21, 0x00, 0x20, 0x02, 0x20, 0x03, 0x6b, 0x22, 0x02,
+      0x0d, 0x00, 0x0b, 0x0b, 0x0b, 0xb1, 0x02, 0x01, 0x06, 0x7f, 0x23, 0x00,
+      0x41, 0x20, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x20, 0x03, 0x20, 0x00, 0x28,
+      0x02, 0x1c, 0x22, 0x04, 0x36, 0x02, 0x10, 0x20, 0x00, 0x28, 0x02, 0x14,
+      0x21, 0x05, 0x20, 0x03, 0x20, 0x02, 0x36, 0x02, 0x1c, 0x20, 0x03, 0x20,
+      0x01, 0x36, 0x02, 0x18, 0x20, 0x03, 0x20, 0x05, 0x20, 0x04, 0x6b, 0x22,
+      0x01, 0x36, 0x02, 0x14, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x21, 0x06, 0x41,
+      0x02, 0x21, 0x05, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x21, 0x01, 0x03, 0x40,
+      0x02, 0x40, 0x02, 0x7f, 0x20, 0x06, 0x02, 0x7f, 0x20, 0x00, 0x28, 0x02,
+      0x3c, 0x20, 0x01, 0x20, 0x05, 0x20, 0x03, 0x41, 0x0c, 0x6a, 0x10, 0x00,
+      0x04, 0x40, 0x20, 0x03, 0x41, 0x7f, 0x36, 0x02, 0x0c, 0x41, 0x7f, 0x0c,
+      0x01, 0x0b, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x0b, 0x22, 0x04, 0x46, 0x04,
+      0x40, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x22, 0x01, 0x36, 0x02,
+      0x1c, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x01,
+      0x20, 0x00, 0x28, 0x02, 0x30, 0x6a, 0x36, 0x02, 0x10, 0x20, 0x02, 0x0c,
+      0x01, 0x0b, 0x20, 0x04, 0x41, 0x7f, 0x4a, 0x0d, 0x01, 0x20, 0x00, 0x41,
+      0x00, 0x36, 0x02, 0x1c, 0x20, 0x00, 0x42, 0x00, 0x37, 0x03, 0x10, 0x20,
+      0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x20, 0x72, 0x36, 0x02, 0x00,
+      0x41, 0x00, 0x20, 0x05, 0x41, 0x02, 0x46, 0x0d, 0x00, 0x1a, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x04, 0x6b, 0x0b, 0x21, 0x04, 0x20, 0x03, 0x41,
+      0x20, 0x6a, 0x24, 0x00, 0x20, 0x04, 0x0f, 0x0b, 0x20, 0x01, 0x41, 0x08,
+      0x6a, 0x20, 0x01, 0x20, 0x04, 0x20, 0x01, 0x28, 0x02, 0x04, 0x22, 0x07,
+      0x4b, 0x22, 0x08, 0x1b, 0x22, 0x01, 0x20, 0x04, 0x20, 0x07, 0x41, 0x00,
+      0x20, 0x08, 0x1b, 0x6b, 0x22, 0x07, 0x20, 0x01, 0x28, 0x02, 0x00, 0x6a,
+      0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x04, 0x20, 0x07,
+      0x6b, 0x36, 0x02, 0x04, 0x20, 0x06, 0x20, 0x04, 0x6b, 0x21, 0x06, 0x20,
+      0x05, 0x20, 0x08, 0x6b, 0x21, 0x05, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x0b,
+      0x0b, 0x4d, 0x06, 0x00, 0x41, 0x80, 0x08, 0x0b, 0x12, 0x68, 0x65, 0x6c,
+      0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00, 0x00,
+      0x00, 0x18, 0x04, 0x00, 0x41, 0x98, 0x08, 0x0b, 0x01, 0x05, 0x00, 0x41,
+      0xa4, 0x08, 0x0b, 0x01, 0x01, 0x00, 0x41, 0xbc, 0x08, 0x0b, 0x0e, 0x02,
+      0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb8, 0x04, 0x00, 0x00, 0x00,
+      0x04, 0x00, 0x41, 0xd4, 0x08, 0x0b, 0x01, 0x01, 0x00, 0x41, 0xe3, 0x08,
+      0x0b, 0x05, 0x0a, 0xff, 0xff, 0xff, 0xff,
+    ]);
+
+    late WasmMemory mem;
+    String out = "";
+    var getI32 = (int p) {
+      // Read a little-endian I32.
+      int n = 0;
+      for (var i = p + 3; i >= p; --i) {
+        n *= 256;
+        n += mem[i];
+      }
+      return n;
+    };
+    var inst = WasmModule(data)
+        .instantiate()
+        .addFunction("wasi_unstable", "fd_write",
+            (int fd, int iovs, int iovs_len, int unused) {
+      // iovs points to an array of length iovs_len. Each element is two I32s,
+      // a char* and a length.
+      String o = "";
+      for (var i = 0; i < iovs_len; ++i) {
+        var str = getI32(iovs + 8 * i);
+        var len = getI32(iovs + 4 + 8 * i);
+        for (var j = 0; j < len; ++j) {
+          o += String.fromCharCode(mem[str + j]);
+        }
+      }
+      out += o;
+      return o.length;
+    }).build();
+    mem = inst.memory;
+
+    var fn = inst.lookupFunction("_start");
+    fn();
+    expect(out, "hello, world!\n");
+  });
+}
diff --git a/pkg/wasm/test/memory_error_test.dart b/pkg/wasm/test/memory_error_test.dart
new file mode 100644
index 0000000..6409022
--- /dev/null
+++ b/pkg/wasm/test/memory_error_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, 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 errors thrown by WasmMemory.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("memory errors", () {
+    // Empty wasm module.
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0x00, 0x00,
+    ]);
+    var module = WasmModule(data);
+
+    expect(() => module.createMemory(1000000000), throwsA(isException));
+    var mem = module.createMemory(100);
+    expect(() => mem.grow(1000000000), throwsA(isException));
+    mem = module.createMemory(100, 200);
+    expect(() => mem.grow(300), throwsA(isException));
+  });
+}
diff --git a/pkg/wasm/test/memory_test.dart b/pkg/wasm/test/memory_test.dart
new file mode 100644
index 0000000..95ea288
--- /dev/null
+++ b/pkg/wasm/test/memory_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2021, 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 that we can create a WasmMemory, edit it, and grow it.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("memory", () {
+    // 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(mem.lengthInPages, 100);
+    expect(mem.lengthInBytes, 100 * WasmMemory.kPageSizeInBytes);
+
+    mem[123] = 45;
+    expect(mem[123], 45);
+
+    mem.grow(10);
+    expect(mem.lengthInPages, 110);
+    expect(mem.lengthInBytes, 110 * WasmMemory.kPageSizeInBytes);
+    expect(mem[123], 45);
+  });
+}
diff --git a/pkg/wasm/test/numerics_test.dart b/pkg/wasm/test/numerics_test.dart
new file mode 100644
index 0000000..5fa19d0
--- /dev/null
+++ b/pkg/wasm/test/numerics_test.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2021, 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 numeric types.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("numerics", () {
+    // int64_t addI64(int64_t x, int64_t y) { return x + y; }
+    // int32_t addI32(int32_t x, int32_t y) { return x + y; }
+    // double addF64(double x, double y) { return x + y; }
+    // float addF32(float x, float y) { return x + y; }
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x19, 0x04, 0x60,
+      0x02, 0x7e, 0x7e, 0x01, 0x7e, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60,
+      0x02, 0x7c, 0x7c, 0x01, 0x7c, 0x60, 0x02, 0x7d, 0x7d, 0x01, 0x7d, 0x03,
+      0x05, 0x04, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01,
+      0x01, 0x05, 0x03, 0x01, 0x00, 0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41,
+      0x80, 0x88, 0x04, 0x0b, 0x07, 0x2e, 0x05, 0x06, 0x6d, 0x65, 0x6d, 0x6f,
+      0x72, 0x79, 0x02, 0x00, 0x06, 0x61, 0x64, 0x64, 0x49, 0x36, 0x34, 0x00,
+      0x00, 0x06, 0x61, 0x64, 0x64, 0x49, 0x33, 0x32, 0x00, 0x01, 0x06, 0x61,
+      0x64, 0x64, 0x46, 0x36, 0x34, 0x00, 0x02, 0x06, 0x61, 0x64, 0x64, 0x46,
+      0x33, 0x32, 0x00, 0x03, 0x0a, 0x21, 0x04, 0x07, 0x00, 0x20, 0x01, 0x20,
+      0x00, 0x7c, 0x0b, 0x07, 0x00, 0x20, 0x01, 0x20, 0x00, 0x6a, 0x0b, 0x07,
+      0x00, 0x20, 0x00, 0x20, 0x01, 0xa0, 0x0b, 0x07, 0x00, 0x20, 0x00, 0x20,
+      0x01, 0x92, 0x0b,
+    ]);
+
+    var inst = WasmModule(data).instantiate().build();
+    var addI64 = inst.lookupFunction("addI64");
+    var addI32 = inst.lookupFunction("addI32");
+    var addF64 = inst.lookupFunction("addF64");
+    var addF32 = inst.lookupFunction("addF32");
+
+    int i64 = addI64(0x123456789ABCDEF, 0xFEDCBA987654321);
+    expect(i64, 0x1111111111111110);
+
+    int i32 = addI32(0xABCDEF, 0xFEDCBA);
+    expect(i32, 0x1aaaaa9);
+
+    double f64 = addF64(1234.5678, 8765.4321);
+    expect(f64, closeTo(9999.9999, 1e-6));
+
+    double f32 = addF32(1234.5678, 8765.4321);
+    expect(f32, closeTo(9999.9999, 1e-3));
+  });
+}
diff --git a/pkg/wasm/test/test_all.dart b/pkg/wasm/test/test_all.dart
new file mode 100644
index 0000000..edf3850
--- /dev/null
+++ b/pkg/wasm/test/test_all.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2021, 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 'package:test/test.dart';
+
+import 'basic_test.dart' as basic;
+import 'corrupted_error_test.dart' as corrupted_error;
+import 'fn_call_error_test.dart' as fn_call_error;
+import 'fn_import_error_test.dart' as fn_import_error;
+import 'fn_import_exception_test.dart' as fn_import_exception;
+import 'fn_import_test.dart' as fn_import;
+import 'hello_wasi_test.dart' as hello_wasi;
+import 'hello_world_test.dart' as hello_world;
+import 'memory_error_test.dart' as memory_error;
+import 'memory_test.dart' as memory;
+import 'numerics_test.dart' as numerics;
+import 'void_test.dart' as void_;
+import 'wasi_error_test.dart' as wasi_error;
+
+void main() {
+  group('basic', basic.main);
+  group('corrupted_error', corrupted_error.main);
+  group('fn_call_error', fn_call_error.main);
+  group('fn_import_error', fn_import_error.main);
+  group('fn_import_exception', fn_import_exception.main);
+  group('fn_import', fn_import.main);
+  group('hello_wasi', hello_wasi.main);
+  group('hello_world', hello_world.main);
+  group('memory_error', memory_error.main);
+  group('memory', memory.main);
+  group('numerics', numerics.main);
+  group('void', void_.main);
+  group('wasi_error', wasi_error.main);
+}
diff --git a/pkg/wasm/test/void_test.dart b/pkg/wasm/test/void_test.dart
new file mode 100644
index 0000000..d1804eb
--- /dev/null
+++ b/pkg/wasm/test/void_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2021, 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 functions with void return type, and functions that take no args.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("void return type", () {
+    // int64_t x = 0;
+    // void set(int64_t a, int64_t b) { x = a + b; }
+    // int64_t get() { return x; }
+    var data = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x02, 0x60,
+      0x02, 0x7e, 0x7e, 0x00, 0x60, 0x00, 0x01, 0x7e, 0x03, 0x03, 0x02, 0x00,
+      0x01, 0x04, 0x05, 0x01, 0x70, 0x01, 0x01, 0x01, 0x05, 0x03, 0x01, 0x00,
+      0x02, 0x06, 0x08, 0x01, 0x7f, 0x01, 0x41, 0x90, 0x88, 0x04, 0x0b, 0x07,
+      0x16, 0x03, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x03,
+      0x73, 0x65, 0x74, 0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, 0x01, 0x0a,
+      0x1e, 0x02, 0x10, 0x00, 0x41, 0x00, 0x20, 0x01, 0x20, 0x00, 0x7c, 0x37,
+      0x03, 0x80, 0x88, 0x80, 0x80, 0x00, 0x0b, 0x0b, 0x00, 0x41, 0x00, 0x29,
+      0x03, 0x80, 0x88, 0x80, 0x80, 0x00, 0x0b, 0x0b, 0x0f, 0x01, 0x00, 0x41,
+      0x80, 0x08, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    ]);
+
+    var inst = WasmModule(data).instantiate().build();
+    var setFn = inst.lookupFunction("set");
+    var getFn = inst.lookupFunction("get");
+    expect(setFn(123, 456), isNull);
+    int n = getFn();
+    expect(n, 123 + 456);
+  });
+}
diff --git a/pkg/wasm/test/wasi_error_test.dart b/pkg/wasm/test/wasi_error_test.dart
new file mode 100644
index 0000000..3c6f46d
--- /dev/null
+++ b/pkg/wasm/test/wasi_error_test.dart
@@ -0,0 +1,209 @@
+// Copyright (c) 2021, 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 the errors that can be thrown by WASI.
+
+import "package:test/test.dart";
+import "package:wasm/wasm.dart";
+import "dart:typed_data";
+
+void main() {
+  test("wasi error", () {
+    // Empty wasm module.
+    var emptyModuleData = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0x00, 0x00,
+    ]);
+
+    // Failed to fill WASI imports (the empty module was not built with WASI).
+    expect(() => WasmModule(emptyModuleData).instantiate().enableWasi(),
+        throwsA(predicate(
+            (Exception e) => "$e".contains("Failed to fill WASI imports"))));
+
+    // Hello world module generated by emscripten+WASI. Exports a function like
+    // `void _start()`, and prints using `int fd_write(int, int, int, int)`.
+    var helloWorldData = Uint8List.fromList([
+      0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x33, 0x09, 0x60,
+      0x03, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, 0x7f, 0x7f, 0x7f,
+      0x01, 0x7f, 0x60, 0x00, 0x00, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60,
+      0x01, 0x7f, 0x01, 0x7f, 0x60, 0x03, 0x7f, 0x7e, 0x7f, 0x01, 0x7e, 0x60,
+      0x00, 0x01, 0x7f, 0x60, 0x01, 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, 0x7f,
+      0x00, 0x02, 0x1a, 0x01, 0x0d, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x75, 0x6e,
+      0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x08, 0x66, 0x64, 0x5f, 0x77, 0x72,
+      0x69, 0x74, 0x65, 0x00, 0x01, 0x03, 0x0f, 0x0e, 0x03, 0x04, 0x00, 0x03,
+      0x02, 0x07, 0x05, 0x04, 0x03, 0x06, 0x02, 0x02, 0x08, 0x00, 0x04, 0x05,
+      0x01, 0x70, 0x01, 0x04, 0x04, 0x05, 0x06, 0x01, 0x01, 0x80, 0x02, 0x80,
+      0x02, 0x06, 0x09, 0x01, 0x7f, 0x01, 0x41, 0xc0, 0x95, 0xc0, 0x02, 0x0b,
+      0x07, 0x2e, 0x04, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00,
+      0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c,
+      0x5f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x00, 0x05, 0x04, 0x6d, 0x61, 0x69,
+      0x6e, 0x00, 0x04, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x0b,
+      0x09, 0x09, 0x01, 0x00, 0x41, 0x01, 0x0b, 0x03, 0x08, 0x0e, 0x07, 0x0a,
+      0xae, 0x0c, 0x0e, 0xbf, 0x01, 0x01, 0x05, 0x7f, 0x41, 0x80, 0x08, 0x21,
+      0x04, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x10, 0x22, 0x02, 0x04, 0x7f,
+      0x20, 0x02, 0x05, 0x20, 0x01, 0x10, 0x02, 0x0d, 0x01, 0x20, 0x01, 0x28,
+      0x02, 0x10, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x14, 0x22, 0x05, 0x6b, 0x20,
+      0x00, 0x49, 0x04, 0x40, 0x20, 0x01, 0x41, 0x80, 0x08, 0x20, 0x00, 0x20,
+      0x01, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x0f, 0x0b, 0x02, 0x40, 0x20,
+      0x01, 0x2c, 0x00, 0x4b, 0x41, 0x00, 0x48, 0x0d, 0x00, 0x20, 0x00, 0x21,
+      0x03, 0x03, 0x40, 0x20, 0x03, 0x22, 0x02, 0x45, 0x0d, 0x01, 0x20, 0x02,
+      0x41, 0x7f, 0x6a, 0x22, 0x03, 0x41, 0x80, 0x08, 0x6a, 0x2d, 0x00, 0x00,
+      0x41, 0x0a, 0x47, 0x0d, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x80, 0x08, 0x20,
+      0x02, 0x20, 0x01, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x22, 0x03, 0x20,
+      0x02, 0x49, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x02, 0x6b, 0x21, 0x00, 0x20,
+      0x02, 0x41, 0x80, 0x08, 0x6a, 0x21, 0x04, 0x20, 0x01, 0x28, 0x02, 0x14,
+      0x21, 0x05, 0x20, 0x02, 0x21, 0x06, 0x0b, 0x20, 0x05, 0x20, 0x04, 0x20,
+      0x00, 0x10, 0x03, 0x1a, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x14, 0x20,
+      0x00, 0x6a, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x06, 0x6a, 0x21, 0x03,
+      0x0b, 0x20, 0x03, 0x0b, 0x59, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x20, 0x00,
+      0x2d, 0x00, 0x4a, 0x22, 0x01, 0x41, 0x7f, 0x6a, 0x20, 0x01, 0x72, 0x3a,
+      0x00, 0x4a, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x08, 0x71,
+      0x04, 0x40, 0x20, 0x00, 0x20, 0x01, 0x41, 0x20, 0x72, 0x36, 0x02, 0x00,
+      0x41, 0x7f, 0x0f, 0x0b, 0x20, 0x00, 0x42, 0x00, 0x37, 0x02, 0x04, 0x20,
+      0x00, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x22, 0x01, 0x36, 0x02, 0x1c, 0x20,
+      0x00, 0x20, 0x01, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x01, 0x20, 0x00,
+      0x28, 0x02, 0x30, 0x6a, 0x36, 0x02, 0x10, 0x41, 0x00, 0x0b, 0x82, 0x04,
+      0x01, 0x03, 0x7f, 0x20, 0x02, 0x41, 0x80, 0xc0, 0x00, 0x4f, 0x04, 0x40,
+      0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, 0x0d, 0x20, 0x00, 0x0f, 0x0b,
+      0x20, 0x00, 0x20, 0x02, 0x6a, 0x21, 0x03, 0x02, 0x40, 0x20, 0x00, 0x20,
+      0x01, 0x73, 0x41, 0x03, 0x71, 0x45, 0x04, 0x40, 0x02, 0x40, 0x20, 0x02,
+      0x41, 0x01, 0x48, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b,
+      0x20, 0x00, 0x41, 0x03, 0x71, 0x45, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02,
+      0x0c, 0x01, 0x0b, 0x20, 0x00, 0x21, 0x02, 0x03, 0x40, 0x20, 0x02, 0x20,
+      0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a,
+      0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x03, 0x4f,
+      0x0d, 0x01, 0x20, 0x02, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x0b, 0x0b, 0x02,
+      0x40, 0x20, 0x03, 0x41, 0x7c, 0x71, 0x22, 0x04, 0x41, 0xc0, 0x00, 0x49,
+      0x0d, 0x00, 0x20, 0x02, 0x20, 0x04, 0x41, 0x40, 0x6a, 0x22, 0x05, 0x4b,
+      0x0d, 0x00, 0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36,
+      0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x04, 0x36, 0x02, 0x04,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x08, 0x36, 0x02, 0x08, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x0c, 0x20, 0x02, 0x20, 0x01,
+      0x28, 0x02, 0x10, 0x36, 0x02, 0x10, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02,
+      0x14, 0x36, 0x02, 0x14, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x18, 0x36,
+      0x02, 0x18, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x1c, 0x36, 0x02, 0x1c,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x20, 0x36, 0x02, 0x20, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x24, 0x36, 0x02, 0x24, 0x20, 0x02, 0x20, 0x01,
+      0x28, 0x02, 0x28, 0x36, 0x02, 0x28, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02,
+      0x2c, 0x36, 0x02, 0x2c, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x30, 0x36,
+      0x02, 0x30, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x34, 0x36, 0x02, 0x34,
+      0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x38, 0x36, 0x02, 0x38, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x3c, 0x36, 0x02, 0x3c, 0x20, 0x01, 0x41, 0x40,
+      0x6b, 0x21, 0x01, 0x20, 0x02, 0x41, 0x40, 0x6b, 0x22, 0x02, 0x20, 0x05,
+      0x4d, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x4f, 0x0d, 0x01,
+      0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00,
+      0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x04, 0x6a,
+      0x22, 0x02, 0x20, 0x04, 0x49, 0x0d, 0x00, 0x0b, 0x0c, 0x01, 0x0b, 0x20,
+      0x03, 0x41, 0x04, 0x49, 0x04, 0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01,
+      0x0b, 0x20, 0x03, 0x41, 0x7c, 0x6a, 0x22, 0x04, 0x20, 0x00, 0x49, 0x04,
+      0x40, 0x20, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x21, 0x02,
+      0x03, 0x40, 0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00,
+      0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, 0x20, 0x02,
+      0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, 0x00, 0x02, 0x20, 0x02, 0x20, 0x01,
+      0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21,
+      0x01, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x22, 0x02, 0x20, 0x04, 0x4d, 0x0d,
+      0x00, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x03, 0x49, 0x04, 0x40, 0x03, 0x40,
+      0x20, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01,
+      0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x02,
+      0x20, 0x03, 0x47, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x00, 0x0b, 0x06, 0x00,
+      0x10, 0x0c, 0x41, 0x00, 0x0b, 0x03, 0x00, 0x01, 0x0b, 0x7e, 0x01, 0x03,
+      0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01,
+      0x41, 0x0a, 0x3a, 0x00, 0x0f, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, 0x10,
+      0x22, 0x02, 0x45, 0x04, 0x40, 0x20, 0x00, 0x10, 0x02, 0x0d, 0x01, 0x20,
+      0x00, 0x28, 0x02, 0x10, 0x21, 0x02, 0x0b, 0x02, 0x40, 0x20, 0x00, 0x28,
+      0x02, 0x14, 0x22, 0x03, 0x20, 0x02, 0x4f, 0x0d, 0x00, 0x20, 0x00, 0x2c,
+      0x00, 0x4b, 0x41, 0x0a, 0x46, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x03, 0x41,
+      0x01, 0x6a, 0x36, 0x02, 0x14, 0x20, 0x03, 0x41, 0x0a, 0x3a, 0x00, 0x00,
+      0x0c, 0x01, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x41, 0x0f, 0x6a, 0x41, 0x01,
+      0x20, 0x00, 0x28, 0x02, 0x24, 0x11, 0x00, 0x00, 0x41, 0x01, 0x47, 0x0d,
+      0x00, 0x20, 0x01, 0x2d, 0x00, 0x0f, 0x1a, 0x0b, 0x20, 0x01, 0x41, 0x10,
+      0x6a, 0x24, 0x00, 0x0b, 0x04, 0x00, 0x42, 0x00, 0x0b, 0x04, 0x00, 0x41,
+      0x00, 0x0b, 0x31, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x21, 0x02, 0x20, 0x02,
+      0x02, 0x7f, 0x20, 0x01, 0x28, 0x02, 0x4c, 0x41, 0x7f, 0x4c, 0x04, 0x40,
+      0x20, 0x02, 0x20, 0x01, 0x10, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20,
+      0x01, 0x10, 0x01, 0x0b, 0x22, 0x01, 0x46, 0x04, 0x40, 0x20, 0x00, 0x0f,
+      0x0b, 0x20, 0x01, 0x0b, 0x62, 0x01, 0x03, 0x7f, 0x41, 0x80, 0x08, 0x21,
+      0x00, 0x03, 0x40, 0x20, 0x00, 0x22, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x00,
+      0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x7f, 0x73, 0x20, 0x02,
+      0x41, 0xff, 0xfd, 0xfb, 0x77, 0x6a, 0x71, 0x41, 0x80, 0x81, 0x82, 0x84,
+      0x78, 0x71, 0x45, 0x0d, 0x00, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x41, 0xff,
+      0x01, 0x71, 0x45, 0x04, 0x40, 0x20, 0x01, 0x21, 0x00, 0x0c, 0x01, 0x0b,
+      0x03, 0x40, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x21, 0x02, 0x20, 0x01, 0x41,
+      0x01, 0x6a, 0x22, 0x00, 0x21, 0x01, 0x20, 0x02, 0x0d, 0x00, 0x0b, 0x0b,
+      0x20, 0x00, 0x41, 0x80, 0x08, 0x6b, 0x0b, 0x0c, 0x00, 0x02, 0x7f, 0x41,
+      0x00, 0x41, 0x00, 0x10, 0x04, 0x0b, 0x1a, 0x0b, 0x66, 0x01, 0x02, 0x7f,
+      0x41, 0x90, 0x08, 0x28, 0x02, 0x00, 0x22, 0x00, 0x28, 0x02, 0x4c, 0x41,
+      0x00, 0x4e, 0x04, 0x7f, 0x41, 0x01, 0x05, 0x20, 0x01, 0x0b, 0x1a, 0x02,
+      0x40, 0x41, 0x7f, 0x41, 0x00, 0x10, 0x0a, 0x22, 0x01, 0x20, 0x01, 0x20,
+      0x00, 0x10, 0x09, 0x47, 0x1b, 0x41, 0x00, 0x48, 0x0d, 0x00, 0x02, 0x40,
+      0x20, 0x00, 0x2d, 0x00, 0x4b, 0x41, 0x0a, 0x46, 0x0d, 0x00, 0x20, 0x00,
+      0x28, 0x02, 0x14, 0x22, 0x01, 0x20, 0x00, 0x28, 0x02, 0x10, 0x4f, 0x0d,
+      0x00, 0x20, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x36, 0x02, 0x14, 0x20,
+      0x01, 0x41, 0x0a, 0x3a, 0x00, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x10,
+      0x06, 0x0b, 0x0b, 0x3d, 0x01, 0x01, 0x7f, 0x20, 0x02, 0x04, 0x40, 0x03,
+      0x40, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x41, 0x80, 0xc0, 0x00, 0x20,
+      0x02, 0x41, 0x80, 0xc0, 0x00, 0x49, 0x1b, 0x22, 0x03, 0x10, 0x03, 0x21,
+      0x00, 0x20, 0x01, 0x41, 0x80, 0x40, 0x6b, 0x21, 0x01, 0x20, 0x00, 0x41,
+      0x80, 0x40, 0x6b, 0x21, 0x00, 0x20, 0x02, 0x20, 0x03, 0x6b, 0x22, 0x02,
+      0x0d, 0x00, 0x0b, 0x0b, 0x0b, 0xb1, 0x02, 0x01, 0x06, 0x7f, 0x23, 0x00,
+      0x41, 0x20, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x20, 0x03, 0x20, 0x00, 0x28,
+      0x02, 0x1c, 0x22, 0x04, 0x36, 0x02, 0x10, 0x20, 0x00, 0x28, 0x02, 0x14,
+      0x21, 0x05, 0x20, 0x03, 0x20, 0x02, 0x36, 0x02, 0x1c, 0x20, 0x03, 0x20,
+      0x01, 0x36, 0x02, 0x18, 0x20, 0x03, 0x20, 0x05, 0x20, 0x04, 0x6b, 0x22,
+      0x01, 0x36, 0x02, 0x14, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x21, 0x06, 0x41,
+      0x02, 0x21, 0x05, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x21, 0x01, 0x03, 0x40,
+      0x02, 0x40, 0x02, 0x7f, 0x20, 0x06, 0x02, 0x7f, 0x20, 0x00, 0x28, 0x02,
+      0x3c, 0x20, 0x01, 0x20, 0x05, 0x20, 0x03, 0x41, 0x0c, 0x6a, 0x10, 0x00,
+      0x04, 0x40, 0x20, 0x03, 0x41, 0x7f, 0x36, 0x02, 0x0c, 0x41, 0x7f, 0x0c,
+      0x01, 0x0b, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x0b, 0x22, 0x04, 0x46, 0x04,
+      0x40, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x22, 0x01, 0x36, 0x02,
+      0x1c, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x14, 0x20, 0x00, 0x20, 0x01,
+      0x20, 0x00, 0x28, 0x02, 0x30, 0x6a, 0x36, 0x02, 0x10, 0x20, 0x02, 0x0c,
+      0x01, 0x0b, 0x20, 0x04, 0x41, 0x7f, 0x4a, 0x0d, 0x01, 0x20, 0x00, 0x41,
+      0x00, 0x36, 0x02, 0x1c, 0x20, 0x00, 0x42, 0x00, 0x37, 0x03, 0x10, 0x20,
+      0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x20, 0x72, 0x36, 0x02, 0x00,
+      0x41, 0x00, 0x20, 0x05, 0x41, 0x02, 0x46, 0x0d, 0x00, 0x1a, 0x20, 0x02,
+      0x20, 0x01, 0x28, 0x02, 0x04, 0x6b, 0x0b, 0x21, 0x04, 0x20, 0x03, 0x41,
+      0x20, 0x6a, 0x24, 0x00, 0x20, 0x04, 0x0f, 0x0b, 0x20, 0x01, 0x41, 0x08,
+      0x6a, 0x20, 0x01, 0x20, 0x04, 0x20, 0x01, 0x28, 0x02, 0x04, 0x22, 0x07,
+      0x4b, 0x22, 0x08, 0x1b, 0x22, 0x01, 0x20, 0x04, 0x20, 0x07, 0x41, 0x00,
+      0x20, 0x08, 0x1b, 0x6b, 0x22, 0x07, 0x20, 0x01, 0x28, 0x02, 0x00, 0x6a,
+      0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x04, 0x20, 0x07,
+      0x6b, 0x36, 0x02, 0x04, 0x20, 0x06, 0x20, 0x04, 0x6b, 0x21, 0x06, 0x20,
+      0x05, 0x20, 0x08, 0x6b, 0x21, 0x05, 0x0c, 0x00, 0x00, 0x0b, 0x00, 0x0b,
+      0x0b, 0x4d, 0x06, 0x00, 0x41, 0x80, 0x08, 0x0b, 0x12, 0x68, 0x65, 0x6c,
+      0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00, 0x00,
+      0x00, 0x18, 0x04, 0x00, 0x41, 0x98, 0x08, 0x0b, 0x01, 0x05, 0x00, 0x41,
+      0xa4, 0x08, 0x0b, 0x01, 0x01, 0x00, 0x41, 0xbc, 0x08, 0x0b, 0x0e, 0x02,
+      0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb8, 0x04, 0x00, 0x00, 0x00,
+      0x04, 0x00, 0x41, 0xd4, 0x08, 0x0b, 0x01, 0x01, 0x00, 0x41, 0xe3, 0x08,
+      0x0b, 0x05, 0x0a, 0xff, 0xff, 0xff, 0xff,
+    ]);
+
+    // Trying to import WASI twice.
+    expect(
+        () => WasmModule(helloWorldData).instantiate().enableWasi().enableWasi(),
+        throwsA(predicate(
+            (Exception e) => "$e".contains("WASI is already enabled"))));
+
+    // Missing imports due to not enabling WASI.
+    expect(() => WasmModule(helloWorldData).instantiate().build(),
+        throwsA(predicate((Exception e) => "$e".contains("Missing import"))));
+
+    // Trying to get stdout/stderr without WASI enabled (WASI function import has
+    // been manually filled).
+    var inst = WasmModule(helloWorldData)
+        .instantiate()
+        .addFunction("wasi_unstable", "fd_write",
+            (int fd, int iovs, int iovs_len, int unused) => 0)
+        .build();
+    expect(
+        () => inst.stdout,
+        throwsA(predicate((Exception e) =>
+            "$e".contains("Can't capture stdout without WASI enabled"))));
+    expect(
+        () => inst.stderr,
+        throwsA(predicate((Exception e) =>
+            "$e".contains("Can't capture stderr without WASI enabled"))));
+  });
+}
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index a97d6bd..be649ed 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.h
@@ -182,7 +182,7 @@
   // Returns true if these roots are the first snapshot loaded into a heap, and
   // so can assume any canonical objects don't already exist. Returns false if
   // some other snapshot may be loaded before these roots, and so written
-  // canonical objects need to run canoncalization during load.
+  // canonical objects need to run canonicalization during load.
   virtual bool AddBaseObjects(Deserializer* deserializer) = 0;
   virtual void ReadRoots(Deserializer* deserializer) = 0;
   virtual void PostLoad(Deserializer* deserializer, const Array& refs) = 0;
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 512db83..1011d8c 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -1201,11 +1201,6 @@
   // them here.
   if (!value.IsNull() && !value.IsSmi() && value.IsInstance() &&
       !value.IsCanonical() && (value.ptr() != Object::sentinel().ptr())) {
-    // The only allowed type for which IsCanonical() never answers true is
-    // TypeParameter. (They are treated as canonical due to how they are
-    // created, but there is no way to canonicalize a new TypeParameter
-    // instance containing the same information as an existing instance.)
-    //
     // Arrays in ConstantInstrs are usually immutable and canonicalized, but
     // there are at least a couple of cases where one or both is not true:
     //
@@ -1224,8 +1219,7 @@
     //
     // LibraryPrefixes are also never canonicalized since their equality is
     // their identity.
-    ASSERT(value.IsTypeParameter() || value.IsArray() || value.IsTypedData() ||
-           value.IsLibraryPrefix());
+    ASSERT(value.IsArray() || value.IsTypedData() || value.IsLibraryPrefix());
   }
 #endif
 }
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 491e59f..32cbeee 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -1268,7 +1268,7 @@
   static word cache_offset();
 
   static const word kTestEntryLength;
-  static const word kInstanceClassIdOrFunction;
+  static const word kInstanceCidOrSignature;
   static const word kDestinationType;
   static const word kInstanceTypeArguments;
   static const word kInstantiatorTypeArguments;
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 91374ad..95c2e89 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -77,7 +77,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -616,7 +616,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -1160,7 +1160,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -1696,7 +1696,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -2241,7 +2241,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -2785,7 +2785,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -3329,7 +3329,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -3862,7 +3862,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -4400,7 +4400,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -4930,7 +4930,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -5469,7 +5469,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -6007,7 +6007,7 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -6559,7 +6559,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -7163,7 +7163,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -7773,7 +7773,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -8381,7 +8381,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -8988,7 +8988,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -9594,7 +9594,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -10191,7 +10191,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -10794,7 +10794,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -11395,7 +11395,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
@@ -11995,7 +11995,7 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
-    AOT_SubtypeTestCache_kInstanceClassIdOrFunction = 1;
+    AOT_SubtypeTestCache_kInstanceCidOrSignature = 1;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kDestinationType = 2;
 static constexpr dart::compiler::target::word
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index fe34979..08f4fe7 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -78,7 +78,7 @@
   CONSTANT(NativeEntry, kNumCallWrapperArguments)                              \
   CONSTANT(String, kMaxElements)                                               \
   CONSTANT(SubtypeTestCache, kFunctionTypeArguments)                           \
-  CONSTANT(SubtypeTestCache, kInstanceClassIdOrFunction)                       \
+  CONSTANT(SubtypeTestCache, kInstanceCidOrSignature)                          \
   CONSTANT(SubtypeTestCache, kDestinationType)                                 \
   CONSTANT(SubtypeTestCache, kInstanceDelayedFunctionTypeArguments)            \
   CONSTANT(SubtypeTestCache, kInstanceParentFunctionTypeArguments)             \
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index ea32cf7..0045e4e 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -2676,20 +2676,23 @@
 
   Label loop, not_closure;
   if (n >= 5) {
-    __ LoadClassIdMayBeSmi(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ LoadClassIdMayBeSmi(STCInternalRegs::kInstanceCidOrSignatureReg,
                            TypeTestABI::kInstanceReg);
   } else {
-    __ LoadClassId(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ LoadClassId(STCInternalRegs::kInstanceCidOrSignatureReg,
                    TypeTestABI::kInstanceReg);
   }
-  __ CompareImmediate(STCInternalRegs::kInstanceCidOrFunctionReg, kClosureCid);
+  __ CompareImmediate(STCInternalRegs::kInstanceCidOrSignatureReg, kClosureCid);
   __ b(&not_closure, NE);
 
   // Closure handling.
   {
-    __ ldr(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ ldr(STCInternalRegs::kInstanceCidOrSignatureReg,
            FieldAddress(TypeTestABI::kInstanceReg,
                         target::Closure::function_offset()));
+    __ ldr(STCInternalRegs::kInstanceCidOrSignatureReg,
+           FieldAddress(STCInternalRegs::kInstanceCidOrSignatureReg,
+                        target::Function::signature_offset()));
     if (n >= 3) {
       __ ldr(
           kInstanceInstantiatorTypeArgumentsReg,
@@ -2713,7 +2716,8 @@
     __ Bind(&not_closure);
     if (n >= 3) {
       Label has_no_type_arguments;
-      __ LoadClassById(kScratchReg, STCInternalRegs::kInstanceCidOrFunctionReg);
+      __ LoadClassById(kScratchReg,
+                       STCInternalRegs::kInstanceCidOrSignatureReg);
       __ mov(kInstanceInstantiatorTypeArgumentsReg, Operand(kNullReg));
       __ ldr(
           kScratchReg,
@@ -2733,7 +2737,7 @@
         __ PushRegister(kNullReg);
       }
     }
-    __ SmiTag(STCInternalRegs::kInstanceCidOrFunctionReg);
+    __ SmiTag(STCInternalRegs::kInstanceCidOrSignatureReg);
   }
 
   const intptr_t kNoDepth = -1;
@@ -2747,10 +2751,10 @@
   __ ldr(kScratchReg,
          Address(kCacheArrayReg,
                  target::kWordSize *
-                     target::SubtypeTestCache::kInstanceClassIdOrFunction));
+                     target::SubtypeTestCache::kInstanceCidOrSignature));
   __ cmp(kScratchReg, Operand(kNullReg));
   __ b(&not_found, EQ);
-  __ cmp(kScratchReg, Operand(STCInternalRegs::kInstanceCidOrFunctionReg));
+  __ cmp(kScratchReg, Operand(STCInternalRegs::kInstanceCidOrSignatureReg));
   if (n == 1) {
     __ b(&found, EQ);
   } else {
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index ef37b4e..428b5df 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -2829,20 +2829,23 @@
 
   Label loop, not_closure;
   if (n >= 5) {
-    __ LoadClassIdMayBeSmi(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ LoadClassIdMayBeSmi(STCInternalRegs::kInstanceCidOrSignatureReg,
                            TypeTestABI::TypeTestABI::kInstanceReg);
   } else {
-    __ LoadClassId(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ LoadClassId(STCInternalRegs::kInstanceCidOrSignatureReg,
                    TypeTestABI::kInstanceReg);
   }
-  __ CompareImmediate(STCInternalRegs::kInstanceCidOrFunctionReg, kClosureCid);
+  __ CompareImmediate(STCInternalRegs::kInstanceCidOrSignatureReg, kClosureCid);
   __ b(&not_closure, NE);
 
   // Closure handling.
   {
-    __ ldr(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ ldr(STCInternalRegs::kInstanceCidOrSignatureReg,
            FieldAddress(TypeTestABI::kInstanceReg,
                         target::Closure::function_offset()));
+    __ LoadCompressed(STCInternalRegs::kInstanceCidOrSignatureReg,
+                      FieldAddress(STCInternalRegs::kInstanceCidOrSignatureReg,
+                                   target::Function::signature_offset()));
     if (n >= 3) {
       __ ldr(
           STCInternalRegs::kInstanceInstantiatorTypeArgumentsReg,
@@ -2865,7 +2868,8 @@
     __ Bind(&not_closure);
     if (n >= 3) {
       Label has_no_type_arguments;
-      __ LoadClassById(kScratchReg, STCInternalRegs::kInstanceCidOrFunctionReg);
+      __ LoadClassById(kScratchReg,
+                       STCInternalRegs::kInstanceCidOrSignatureReg);
       __ mov(STCInternalRegs::kInstanceInstantiatorTypeArgumentsReg, kNullReg);
       __ LoadFieldFromOffset(
           kScratchReg, kScratchReg,
@@ -2886,7 +2890,7 @@
                kNullReg);
       }
     }
-    __ SmiTag(STCInternalRegs::kInstanceCidOrFunctionReg);
+    __ SmiTag(STCInternalRegs::kInstanceCidOrSignatureReg);
   }
 
   Label found, done, next_iteration;
@@ -2896,10 +2900,10 @@
   __ ldr(kScratchReg,
          Address(kCacheArrayReg,
                  target::kWordSize *
-                     target::SubtypeTestCache::kInstanceClassIdOrFunction));
+                     target::SubtypeTestCache::kInstanceCidOrSignature));
   __ cmp(kScratchReg, Operand(kNullReg));
   __ b(&done, EQ);
-  __ cmp(kScratchReg, Operand(STCInternalRegs::kInstanceCidOrFunctionReg));
+  __ cmp(kScratchReg, Operand(STCInternalRegs::kInstanceCidOrSignatureReg));
   if (n == 1) {
     __ b(&found, EQ);
   } else {
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index 7e7e6da..940b20f 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -2252,7 +2252,7 @@
   // Other values are stored in non-kInstanceReg registers from TypeTestABI.
   const Register kCacheArrayReg = TypeTestABI::kInstantiatorTypeArgumentsReg;
   const Register kScratchReg = TypeTestABI::kSubtypeTestCacheReg;
-  const Register kInstanceCidOrFunction =
+  const Register kInstanceCidOrSignature =
       TypeTestABI::kFunctionTypeArgumentsReg;
   const Register kInstanceInstantiatorTypeArgumentsReg =
       TypeTestABI::kDstTypeReg;
@@ -2286,18 +2286,21 @@
 
   Label loop, not_closure;
   if (n >= 5) {
-    __ LoadClassIdMayBeSmi(kInstanceCidOrFunction, TypeTestABI::kInstanceReg);
+    __ LoadClassIdMayBeSmi(kInstanceCidOrSignature, TypeTestABI::kInstanceReg);
   } else {
-    __ LoadClassId(kInstanceCidOrFunction, TypeTestABI::kInstanceReg);
+    __ LoadClassId(kInstanceCidOrSignature, TypeTestABI::kInstanceReg);
   }
-  __ cmpl(kInstanceCidOrFunction, Immediate(kClosureCid));
+  __ cmpl(kInstanceCidOrSignature, Immediate(kClosureCid));
   __ j(NOT_EQUAL, &not_closure, Assembler::kNearJump);
 
   // Closure handling.
   {
-    __ movl(kInstanceCidOrFunction,
+    __ movl(kInstanceCidOrSignature,
             FieldAddress(TypeTestABI::kInstanceReg,
                          target::Closure::function_offset()));
+    __ movl(kInstanceCidOrSignature,
+            FieldAddress(kInstanceCidOrSignature,
+                         target::Function::signature_offset()));
     if (n >= 3) {
       __ movl(
           kInstanceInstantiatorTypeArgumentsReg,
@@ -2320,7 +2323,7 @@
     __ Bind(&not_closure);
     if (n >= 3) {
       Label has_no_type_arguments;
-      __ LoadClassById(kScratchReg, kInstanceCidOrFunction);
+      __ LoadClassById(kScratchReg, kInstanceCidOrSignature);
       __ movl(kInstanceInstantiatorTypeArgumentsReg, raw_null);
       __ movl(
           kScratchReg,
@@ -2338,7 +2341,7 @@
         __ pushl(raw_null);  // function.
       }
     }
-    __ SmiTag(kInstanceCidOrFunction);
+    __ SmiTag(kInstanceCidOrSignature);
   }
 
   if (n >= 7) {
@@ -2358,10 +2361,10 @@
   __ movl(kScratchReg,
           Address(kCacheArrayReg,
                   target::kWordSize *
-                      target::SubtypeTestCache::kInstanceClassIdOrFunction));
+                      target::SubtypeTestCache::kInstanceCidOrSignature));
   __ cmpl(kScratchReg, raw_null);
   __ j(EQUAL, &done, Assembler::kNearJump);
-  __ cmpl(kScratchReg, kInstanceCidOrFunction);
+  __ cmpl(kScratchReg, kInstanceCidOrSignature);
   if (n == 1) {
     __ j(EQUAL, &done, Assembler::kNearJump);
   } else {
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index 9aa8e8c..6b0782f 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -2791,20 +2791,23 @@
 
   Label loop, not_closure;
   if (n >= 5) {
-    __ LoadClassIdMayBeSmi(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ LoadClassIdMayBeSmi(STCInternalRegs::kInstanceCidOrSignatureReg,
                            TypeTestABI::kInstanceReg);
   } else {
-    __ LoadClassId(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ LoadClassId(STCInternalRegs::kInstanceCidOrSignatureReg,
                    TypeTestABI::kInstanceReg);
   }
-  __ cmpq(STCInternalRegs::kInstanceCidOrFunctionReg, Immediate(kClosureCid));
+  __ cmpq(STCInternalRegs::kInstanceCidOrSignatureReg, Immediate(kClosureCid));
   __ j(NOT_EQUAL, &not_closure, Assembler::kNearJump);
 
   // Closure handling.
   {
-    __ movq(STCInternalRegs::kInstanceCidOrFunctionReg,
+    __ movq(STCInternalRegs::kInstanceCidOrSignatureReg,
             FieldAddress(TypeTestABI::kInstanceReg,
                          target::Closure::function_offset()));
+    __ LoadCompressed(STCInternalRegs::kInstanceCidOrSignatureReg,
+                      FieldAddress(STCInternalRegs::kInstanceCidOrSignatureReg,
+                                   target::Function::signature_offset()));
     if (n >= 3) {
       __ movq(
           STCInternalRegs::kInstanceInstantiatorTypeArgumentsReg,
@@ -2828,7 +2831,8 @@
     __ Bind(&not_closure);
     if (n >= 3) {
       Label has_no_type_arguments;
-      __ LoadClassById(kScratchReg, STCInternalRegs::kInstanceCidOrFunctionReg);
+      __ LoadClassById(kScratchReg,
+                       STCInternalRegs::kInstanceCidOrSignatureReg);
       __ movq(STCInternalRegs::kInstanceInstantiatorTypeArgumentsReg, kNullReg);
       __ movl(
           kScratchReg,
@@ -2846,7 +2850,7 @@
         __ movq(kInstanceDelayedFunctionTypeArgumentsReg, kNullReg);
       }
     }
-    __ SmiTag(STCInternalRegs::kInstanceCidOrFunctionReg);
+    __ SmiTag(STCInternalRegs::kInstanceCidOrSignatureReg);
   }
 
   Label found, not_found, next_iteration;
@@ -2856,10 +2860,10 @@
   __ movq(kScratchReg,
           Address(STCInternalRegs::kCacheEntryReg,
                   target::kWordSize *
-                      target::SubtypeTestCache::kInstanceClassIdOrFunction));
+                      target::SubtypeTestCache::kInstanceCidOrSignature));
   __ cmpq(kScratchReg, kNullReg);
   __ j(EQUAL, &not_found, Assembler::kNearJump);
-  __ cmpq(kScratchReg, STCInternalRegs::kInstanceCidOrFunctionReg);
+  __ cmpq(kScratchReg, STCInternalRegs::kInstanceCidOrSignatureReg);
   if (n == 1) {
     __ j(EQUAL, &found, Assembler::kNearJump);
   } else {
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index f638186..5ef978d 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -350,9 +350,9 @@
 // Registers in addition to those listed in TypeTestABI used inside the
 // implementation of subtype test cache stubs that are _not_ preserved.
 struct STCInternalRegs {
-  static const Register kInstanceCidOrFunctionReg = R9;
+  static const Register kInstanceCidOrSignatureReg = R9;
 
-  static const intptr_t kInternalRegisters = (1 << kInstanceCidOrFunctionReg);
+  static const intptr_t kInternalRegisters = (1 << kInstanceCidOrSignatureReg);
 };
 
 // Calling convention when calling TypeTestingStub and SubtypeTestCacheStub.
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 8abe440..69f5cf0 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -183,13 +183,13 @@
 // Registers in addition to those listed in TypeTestABI used inside the
 // implementation of subtype test cache stubs that are _not_ preserved.
 struct STCInternalRegs {
-  static const Register kInstanceCidOrFunctionReg = R6;
+  static const Register kInstanceCidOrSignatureReg = R6;
   static const Register kInstanceInstantiatorTypeArgumentsReg = R5;
   static const Register kInstanceParentFunctionTypeArgumentsReg = R9;
   static const Register kInstanceDelayedFunctionTypeArgumentsReg = R10;
 
   static const intptr_t kInternalRegisters =
-      (1 << kInstanceCidOrFunctionReg) |
+      (1 << kInstanceCidOrSignatureReg) |
       (1 << kInstanceInstantiatorTypeArgumentsReg) |
       (1 << kInstanceParentFunctionTypeArgumentsReg) |
       (1 << kInstanceDelayedFunctionTypeArgumentsReg);
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 469b90b..953c2ce 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -160,11 +160,11 @@
 // implementation of subtype test cache stubs that are _not_ preserved.
 struct STCInternalRegs {
   static const Register kCacheEntryReg = RDI;
-  static const Register kInstanceCidOrFunctionReg = R10;
+  static const Register kInstanceCidOrSignatureReg = R10;
   static const Register kInstanceInstantiatorTypeArgumentsReg = R13;
 
   static const intptr_t kInternalRegisters =
-      (1 << kCacheEntryReg) | (1 << kInstanceCidOrFunctionReg) |
+      (1 << kCacheEntryReg) | (1 << kInstanceCidOrSignatureReg) |
       (1 << kInstanceInstantiatorTypeArgumentsReg);
 };
 
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index f5cc809..46124a8 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -2116,7 +2116,7 @@
         entries_(Array::Handle(zone)),
         instantiator_type_arguments_(TypeArguments::Handle(zone)),
         function_type_arguments_(TypeArguments::Handle(zone)),
-        instance_cid_or_function_(Object::Handle(zone)),
+        instance_cid_or_signature_(Object::Handle(zone)),
         instance_type_arguments_(TypeArguments::Handle(zone)),
         parent_function_type_arguments_(TypeArguments::Handle(zone)),
         delayed_function_type_arguments_(TypeArguments::Handle(zone)) {}
@@ -2215,7 +2215,7 @@
     cls_ = value.clazz();
     const intptr_t cid = cls_.id();
     if (cid == kClosureCid) {
-      instance_cid_or_function_ = Closure::Cast(value).function();
+      instance_cid_or_signature_ = Closure::Cast(value).signature();
       instance_type_arguments_ =
           Closure::Cast(value).instantiator_type_arguments();
       parent_function_type_arguments_ =
@@ -2223,7 +2223,7 @@
       delayed_function_type_arguments_ =
           Closure::Cast(value).delayed_type_arguments();
     } else {
-      instance_cid_or_function_ = Smi::New(cid);
+      instance_cid_or_signature_ = Smi::New(cid);
       if (cls_.NumTypeArguments() > 0) {
         instance_type_arguments_ = value_.GetTypeArguments();
       } else {
@@ -2243,8 +2243,8 @@
     bool cache_hit = false;
     for (intptr_t i = 0; entries_.At(i) != Object::null();
          i += SubtypeTestCache::kTestEntryLength) {
-      if ((entries_.At(i + SubtypeTestCache::kInstanceClassIdOrFunction) ==
-           instance_cid_or_function_.ptr()) &&
+      if ((entries_.At(i + SubtypeTestCache::kInstanceCidOrSignature) ==
+           instance_cid_or_signature_.ptr()) &&
           (entries_.At(i + SubtypeTestCache::kDestinationType) ==
            type_.ptr()) &&
           (entries_.At(i + SubtypeTestCache::kInstanceTypeArguments) ==
@@ -2275,7 +2275,7 @@
         ASSERT(!FLAG_identity_reload);
         field.set_needs_load_guard(true);
       } else {
-        cache_.AddCheck(instance_cid_or_function_, type_,
+        cache_.AddCheck(instance_cid_or_signature_, type_,
                         instance_type_arguments_, instantiator_type_arguments_,
                         function_type_arguments_,
                         parent_function_type_arguments_,
@@ -2293,7 +2293,7 @@
   Array& entries_;
   TypeArguments& instantiator_type_arguments_;
   TypeArguments& function_type_arguments_;
-  Object& instance_cid_or_function_;
+  Object& instance_cid_or_signature_;
   TypeArguments& instance_type_arguments_;
   TypeArguments& parent_function_type_arguments_;
   TypeArguments& delayed_function_type_arguments_;
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 0834a41..7a61184 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -9367,7 +9367,11 @@
   PrintParameters(thread, zone, name_visibility, printer);
   printer->AddString(") => ");
   const AbstractType& res_type = AbstractType::Handle(zone, result_type());
-  res_type.PrintName(name_visibility, printer);
+  if (!res_type.IsNull()) {
+    res_type.PrintName(name_visibility, printer);
+  } else {
+    printer->AddString("null");
+  }
 }
 
 bool Function::HasInstantiatedSignature(Genericity genericity,
@@ -17953,7 +17957,7 @@
 }
 
 void SubtypeTestCache::AddCheck(
-    const Object& instance_class_id_or_function,
+    const Object& instance_class_id_or_signature,
     const AbstractType& destination_type,
     const TypeArguments& instance_type_arguments,
     const TypeArguments& instantiator_type_arguments,
@@ -17973,8 +17977,8 @@
 
   SubtypeTestCacheTable entries(data);
   auto entry = entries[old_num];
-  ASSERT(entry.Get<kInstanceClassIdOrFunction>() == Object::null());
-  entry.Set<kInstanceClassIdOrFunction>(instance_class_id_or_function);
+  ASSERT(entry.Get<kInstanceCidOrSignature>() == Object::null());
+  entry.Set<kInstanceCidOrSignature>(instance_class_id_or_signature);
   entry.Set<kDestinationType>(destination_type);
   entry.Set<kInstanceTypeArguments>(instance_type_arguments);
   entry.Set<kInstantiatorTypeArguments>(instantiator_type_arguments);
@@ -17992,7 +17996,7 @@
 
 void SubtypeTestCache::GetCheck(
     intptr_t ix,
-    Object* instance_class_id_or_function,
+    Object* instance_class_id_or_signature,
     AbstractType* destination_type,
     TypeArguments* instance_type_arguments,
     TypeArguments* instantiator_type_arguments,
@@ -18004,7 +18008,7 @@
              ->isolate_group()
              ->subtype_test_cache_mutex()
              ->IsOwnedByCurrentThread());
-  GetCurrentCheck(ix, instance_class_id_or_function, destination_type,
+  GetCurrentCheck(ix, instance_class_id_or_signature, destination_type,
                   instance_type_arguments, instantiator_type_arguments,
                   function_type_arguments,
                   instance_parent_function_type_arguments,
@@ -18013,7 +18017,7 @@
 
 void SubtypeTestCache::GetCurrentCheck(
     intptr_t ix,
-    Object* instance_class_id_or_function,
+    Object* instance_class_id_or_signature,
     AbstractType* destination_type,
     TypeArguments* instance_type_arguments,
     TypeArguments* instantiator_type_arguments,
@@ -18024,7 +18028,7 @@
   Array& data = Array::Handle(cache());
   SubtypeTestCacheTable entries(data);
   auto entry = entries[ix];
-  *instance_class_id_or_function = entry.Get<kInstanceClassIdOrFunction>();
+  *instance_class_id_or_signature = entry.Get<kInstanceCidOrSignature>();
   *destination_type = entry.Get<kDestinationType>();
   *instance_type_arguments = entry.Get<kInstanceTypeArguments>();
   *instantiator_type_arguments = entry.Get<kInstantiatorTypeArguments>();
@@ -18037,7 +18041,7 @@
 }
 
 bool SubtypeTestCache::HasCheck(
-    const Object& instance_class_id_or_function,
+    const Object& instance_class_id_or_signature,
     const AbstractType& destination_type,
     const TypeArguments& instance_type_arguments,
     const TypeArguments& instantiator_type_arguments,
@@ -18056,8 +18060,8 @@
   SubtypeTestCacheTable entries(data);
   for (intptr_t i = 0; i < last_index; i++) {
     const auto entry = entries[i];
-    if (entry.Get<kInstanceClassIdOrFunction>() ==
-            instance_class_id_or_function.ptr() &&
+    if (entry.Get<kInstanceCidOrSignature>() ==
+            instance_class_id_or_signature.ptr() &&
         entry.Get<kDestinationType>() == destination_type.ptr() &&
         entry.Get<kInstanceTypeArguments>() == instance_type_arguments.ptr() &&
         entry.Get<kInstantiatorTypeArguments>() ==
@@ -18097,7 +18101,7 @@
     const char* line_prefix) const {
   const char* separator =
       line_prefix == nullptr ? ", " : OS::SCreate(zone, "\n%s", line_prefix);
-  auto& instance_class_id_or_function = Object::Handle(zone);
+  auto& instance_class_id_or_signature = Object::Handle(zone);
   auto& destination_type = AbstractType::Handle(zone);
   auto& instance_type_arguments = TypeArguments::Handle(zone);
   auto& instantiator_type_arguments = TypeArguments::Handle(zone);
@@ -18105,7 +18109,7 @@
   auto& instance_parent_function_type_arguments = TypeArguments::Handle(zone);
   auto& instance_delayed_type_arguments = TypeArguments::Handle(zone);
   auto& result = Bool::Handle(zone);
-  GetCurrentCheck(index, &instance_class_id_or_function, &destination_type,
+  GetCurrentCheck(index, &instance_class_id_or_signature, &destination_type,
                   &instance_type_arguments, &instantiator_type_arguments,
                   &function_type_arguments,
                   &instance_parent_function_type_arguments,
@@ -18114,7 +18118,7 @@
   buffer->Printf(
       "[ %#" Px ", %#" Px ", %#" Px ", %#" Px ", %#" Px ", %#" Px ", %#" Px
       ", %#" Px " ]",
-      static_cast<uword>(instance_class_id_or_function.ptr()),
+      static_cast<uword>(instance_class_id_or_signature.ptr()),
       static_cast<uword>(destination_type.ptr()),
       static_cast<uword>(instance_type_arguments.ptr()),
       static_cast<uword>(instantiator_type_arguments.ptr()),
@@ -18122,14 +18126,14 @@
       static_cast<uword>(instance_parent_function_type_arguments.ptr()),
       static_cast<uword>(instance_delayed_type_arguments.ptr()),
       static_cast<uword>(result.ptr()));
-  if (instance_class_id_or_function.IsSmi()) {
+  if (instance_class_id_or_signature.IsSmi()) {
     buffer->Printf("%sclass id: %" Pd "", separator,
-                   Smi::Cast(instance_class_id_or_function).Value());
+                   Smi::Cast(instance_class_id_or_signature).Value());
   } else {
-    ASSERT(instance_class_id_or_function.IsFunction());
-    buffer->Printf("%sfunction: %s", separator,
-                   Function::Cast(instance_class_id_or_function)
-                       .ToFullyQualifiedCString());
+    ASSERT(instance_class_id_or_signature.IsFunctionType());
+    buffer->Printf(
+        "%sfunction: %s", separator,
+        FunctionType::Cast(instance_class_id_or_signature).ToCString());
   }
   if (!destination_type.IsNull()) {
     buffer->Printf("%sdestination type: %s", separator,
@@ -18147,11 +18151,11 @@
     }
   }
   if (!instance_type_arguments.IsNull()) {
-    if (instance_class_id_or_function.IsSmi()) {
+    if (instance_class_id_or_signature.IsSmi()) {
       buffer->Printf("%sinstance type arguments: %s", separator,
                      instance_type_arguments.ToCString());
     } else {
-      ASSERT(instance_class_id_or_function.IsFunction());
+      ASSERT(instance_class_id_or_signature.IsFunctionType());
       buffer->Printf("%sclosure instantiator function type arguments: %s",
                      separator, instance_type_arguments.ToCString());
     }
@@ -18165,12 +18169,12 @@
                    function_type_arguments.ToCString());
   }
   if (!instance_parent_function_type_arguments.IsNull()) {
-    ASSERT(instance_class_id_or_function.IsFunction());
+    ASSERT(instance_class_id_or_signature.IsFunctionType());
     buffer->Printf("%sclosure parent function type arguments: %s", separator,
                    instance_parent_function_type_arguments.ToCString());
   }
   if (!instance_delayed_type_arguments.IsNull()) {
-    ASSERT(instance_class_id_or_function.IsFunction());
+    ASSERT(instance_class_id_or_signature.IsFunctionType());
     buffer->Printf("%sclosure delayed function type arguments: %s", separator,
                    instance_delayed_type_arguments.ToCString());
   }
@@ -24972,6 +24976,10 @@
                         const Function& function,
                         const Context& context,
                         Heap::Space space) {
+  ASSERT(instantiator_type_arguments.IsCanonical());
+  ASSERT(function_type_arguments.IsCanonical());
+  ASSERT(delayed_type_arguments.IsCanonical());
+  ASSERT(FunctionType::Handle(function.signature()).IsCanonical());
   Closure& result = Closure::Handle();
   {
     ObjectPtr raw =
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 4766260..a04f9b1 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -6940,7 +6940,7 @@
  public:
   enum Entries {
     kTestResult = 0,
-    kInstanceClassIdOrFunction = 1,
+    kInstanceCidOrSignature = 1,
     kDestinationType = 2,
     kInstanceTypeArguments = 3,
     kInstantiatorTypeArguments = 4,
@@ -6951,7 +6951,7 @@
   };
 
   virtual intptr_t NumberOfChecks() const;
-  void AddCheck(const Object& instance_class_id_or_function,
+  void AddCheck(const Object& instance_class_id_or_signature,
                 const AbstractType& destination_type,
                 const TypeArguments& instance_type_arguments,
                 const TypeArguments& instantiator_type_arguments,
@@ -6960,7 +6960,7 @@
                 const TypeArguments& instance_delayed_type_arguments,
                 const Bool& test_result) const;
   void GetCheck(intptr_t ix,
-                Object* instance_class_id_or_function,
+                Object* instance_class_id_or_signature,
                 AbstractType* destination_type,
                 TypeArguments* instance_type_arguments,
                 TypeArguments* instantiator_type_arguments,
@@ -6972,7 +6972,7 @@
   // Like GetCheck(), but does not require the subtype test cache mutex and so
   // may see an outdated view of the cache.
   void GetCurrentCheck(intptr_t ix,
-                       Object* instance_class_id_or_function,
+                       Object* instance_class_id_or_signature,
                        AbstractType* destination_type,
                        TypeArguments* instance_type_arguments,
                        TypeArguments* instantiator_type_arguments,
@@ -6987,7 +6987,7 @@
   //
   // If [index] is not nullptr, then it is set to the matching entry's index.
   // If [result] is not nullptr, then it is set to the matching entry's result.
-  bool HasCheck(const Object& instance_class_id_or_function,
+  bool HasCheck(const Object& instance_class_id_or_signature,
                 const AbstractType& destination_type,
                 const TypeArguments& instance_type_arguments,
                 const TypeArguments& instantiator_type_arguments,
@@ -10982,6 +10982,10 @@
     return OFFSET_OF(UntaggedClosure, function_);
   }
 
+  FunctionTypePtr signature() const {
+    return untag()->function()->untag()->signature();
+  }
+
   ContextPtr context() const { return untag()->context(); }
   static intptr_t context_offset() {
     return OFFSET_OF(UntaggedClosure, context_);
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 324a031..d119a05 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -2644,7 +2644,7 @@
   const Context& context = Context::Handle(Context::New(0));
   Function& parent = Function::Handle();
   const String& parent_name = String::Handle(Symbols::New(thread, "foo_papa"));
-  const FunctionType& signature = FunctionType::ZoneHandle(FunctionType::New());
+  FunctionType& signature = FunctionType::ZoneHandle(FunctionType::New());
   parent = Function::New(signature, parent_name,
                          UntaggedFunction::kRegularFunction, false, false,
                          false, false, false, cls, TokenPosition::kMinSource);
@@ -2652,12 +2652,17 @@
   {
     SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
     cls.SetFunctions(functions);
+    cls.Finalize();
   }
 
   Function& function = Function::Handle();
   const String& function_name = String::Handle(Symbols::New(thread, "foo"));
   function = Function::NewClosureFunction(function_name, parent,
                                           TokenPosition::kMinSource);
+  signature = function.signature();
+  signature.set_result_type(Object::dynamic_type());
+  signature ^= ClassFinalizer::FinalizeType(signature);
+  function.set_signature(signature);
   const Closure& closure = Closure::Handle(
       Closure::New(Object::null_type_arguments(), Object::null_type_arguments(),
                    function, context));
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index e420a88..7584d90 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -736,6 +736,9 @@
     const Bool& result,
     const SubtypeTestCache& new_cache) {
   ASSERT(!new_cache.IsNull());
+  ASSERT(destination_type.IsCanonical());
+  ASSERT(instantiator_type_arguments.IsCanonical());
+  ASSERT(function_type_arguments.IsCanonical());
   Class& instance_class = Class::Handle(zone);
   if (instance.IsSmi()) {
     instance_class = Smi::Class();
@@ -745,23 +748,26 @@
   // If the type is uninstantiated and refers to parent function type
   // parameters, the function_type_arguments have been canonicalized
   // when concatenated.
-  ASSERT(function_type_arguments.IsNull() ||
-         function_type_arguments.IsCanonical());
-  auto& instance_class_id_or_function = Object::Handle(zone);
+  auto& instance_class_id_or_signature = Object::Handle(zone);
   auto& instance_type_arguments = TypeArguments::Handle(zone);
   auto& instance_parent_function_type_arguments = TypeArguments::Handle(zone);
   auto& instance_delayed_type_arguments = TypeArguments::Handle(zone);
   if (instance_class.IsClosureClass()) {
     const auto& closure = Closure::Cast(instance);
     const auto& closure_function = Function::Handle(zone, closure.function());
-    instance_class_id_or_function = closure_function.ptr();
+    instance_class_id_or_signature = closure_function.signature();
     instance_type_arguments = closure.instantiator_type_arguments();
     instance_parent_function_type_arguments = closure.function_type_arguments();
     instance_delayed_type_arguments = closure.delayed_type_arguments();
+    ASSERT(instance_class_id_or_signature.IsCanonical());
+    ASSERT(instance_type_arguments.IsCanonical());
+    ASSERT(instance_parent_function_type_arguments.IsCanonical());
+    ASSERT(instance_delayed_type_arguments.IsCanonical());
   } else {
-    instance_class_id_or_function = Smi::New(instance_class.id());
+    instance_class_id_or_signature = Smi::New(instance_class.id());
     if (instance_class.NumTypeArguments() > 0) {
       instance_type_arguments = instance.GetTypeArguments();
+      ASSERT(instance_type_arguments.IsCanonical());
     }
   }
   if (FLAG_trace_type_checks) {
@@ -780,7 +786,7 @@
     buffer.Printf(
         "    raw entry: [ %#" Px ", %#" Px ", %#" Px ", %#" Px ", %#" Px
         ", %#" Px ", %#" Px ", %#" Px " ]\n",
-        static_cast<uword>(instance_class_id_or_function.ptr()),
+        static_cast<uword>(instance_class_id_or_signature.ptr()),
         static_cast<uword>(destination_type.ptr()),
         static_cast<uword>(instance_type_arguments.ptr()),
         static_cast<uword>(instantiator_type_arguments.ptr()),
@@ -803,20 +809,10 @@
       }
       return;
     }
-    ASSERT(instance_type_arguments.IsNull() ||
-           instance_type_arguments.IsCanonical());
-    ASSERT(instantiator_type_arguments.IsNull() ||
-           instantiator_type_arguments.IsCanonical());
-    ASSERT(function_type_arguments.IsNull() ||
-           function_type_arguments.IsCanonical());
-    ASSERT(instance_parent_function_type_arguments.IsNull() ||
-           instance_parent_function_type_arguments.IsCanonical());
-    ASSERT(instance_delayed_type_arguments.IsNull() ||
-           instance_delayed_type_arguments.IsCanonical());
     intptr_t colliding_index = -1;
     auto& old_result = Bool::Handle(zone);
     if (new_cache.HasCheck(
-            instance_class_id_or_function, destination_type,
+            instance_class_id_or_signature, destination_type,
             instance_type_arguments, instantiator_type_arguments,
             function_type_arguments, instance_parent_function_type_arguments,
             instance_delayed_type_arguments, &colliding_index, &old_result)) {
@@ -839,7 +835,7 @@
       // found missing and now.
       return;
     }
-    new_cache.AddCheck(instance_class_id_or_function, destination_type,
+    new_cache.AddCheck(instance_class_id_or_signature, destination_type,
                        instance_type_arguments, instantiator_type_arguments,
                        function_type_arguments,
                        instance_parent_function_type_arguments,
diff --git a/tools/VERSION b/tools/VERSION
index b260b95..9e20aca 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 134
+PRERELEASE 135
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/flutter/analyze_flutter_flutter.sh b/tools/bots/flutter/analyze_flutter_flutter.sh
index 4ec83ad..d040021 100755
--- a/tools/bots/flutter/analyze_flutter_flutter.sh
+++ b/tools/bots/flutter/analyze_flutter_flutter.sh
@@ -39,3 +39,6 @@
 pushd packages/flutter/test_fixes
 ../../../bin/dart fix --compare-to-golden
 popd
+
+# Analyze the sample code in dartdoc snippets.
+./bin/dart dev/bots/analyze_sample_code.dart
