Skip to content

[dart2js/Dart 2.0] Fix behavior of type errors on partial instantiation in dart2js #34295

Closed
@sjindel-google

Description

@sjindel-google

It was decided in #31953 that the partial instantiation operator needs to check the bounds of type arguments at the point of partial instantiation, rather than waiting until the resulting closure is called. The VM is currently being updated with the correct behavior, but dart2js also has the incorrect behavior. For example, the following test should pass:

// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// This test checks that necessary type argument bounds checks are performed
// eagerly during partial instantiation, rather than being delayed until the
// partially instantiated closure is invoked.

import "package:expect/expect.dart";

class C<T> {
  void foo<S extends T>(S x) {}
}

void main() {
  C<Object> c = C<int>();
  void Function(String) fn;
  Expect.throwsTypeError(() {
    fn = c.foo;
  });
}

I've suggested P1 priority for this issue because fixing the semantics here is a breaking change.

Metadata

Metadata

Assignees

Labels

area-web-jsIssues related to JavaScript support for Dart Web, including DDC, dart2js, and JS interop.type-bugIncorrect behavior (everything from a crash to more subtle misbehavior)web-dart2js

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions