Skip to content

Commit

Permalink
Version 3.1.0-111.0.dev
Browse files Browse the repository at this point in the history
Merge 0767670 into dev
  • Loading branch information
Dart CI committed May 15, 2023
2 parents 7d6324d + 0767670 commit c777d54
Show file tree
Hide file tree
Showing 12 changed files with 188 additions and 6 deletions.
8 changes: 4 additions & 4 deletions pkg/front_end/lib/src/fasta/source/outline_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ class OutlineBuilder extends StackListenerImpl {

final bool enableNative;
final bool stringExpectedAfterNative;
bool inAbstractClass = false;
bool inAbstractOrSealedClass = false;
bool inConstructor = false;
bool inConstructorName = false;
int importIndex = 0;
Expand Down Expand Up @@ -932,7 +932,7 @@ class OutlineBuilder extends StackListenerImpl {
.markAsClassDeclaration(name.lexeme, name.charOffset, typeVariables);
}
libraryBuilder.setCurrentClassName(name.lexeme);
inAbstractClass = abstractToken != null;
inAbstractOrSealedClass = abstractToken != null || sealedToken != null;
push(abstractToken != null ? abstractMask : 0);
push(macroToken ?? NullValues.Token);
push(inlineToken ?? NullValues.Token);
Expand Down Expand Up @@ -1287,7 +1287,7 @@ class OutlineBuilder extends StackListenerImpl {
mixinApplication.typeVariables = typeVariables;
}
List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
inAbstractClass = false;
inAbstractOrSealedClass = false;
checkEmpty(beginToken.charOffset);
if (name is ParserRecovery) {
libraryBuilder
Expand Down Expand Up @@ -2135,7 +2135,7 @@ class OutlineBuilder extends StackListenerImpl {
endToken.charOffset,
nativeMethodName,
beginInitializers: beginInitializers,
forAbstractClass: inAbstractClass);
forAbstractClass: inAbstractOrSealedClass);
} else {
if (isConst) {
// TODO(danrubel): consider removing this
Expand Down
17 changes: 17 additions & 0 deletions pkg/front_end/testcases/dart2js/sealed_class.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright (c) 2023, 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.

sealed class Class {
final int value;

Class(this.value);
}

class A extends Class {
A(super.value);
}

class B extends Class {
B(super.value);
}
24 changes: 24 additions & 0 deletions pkg/front_end/testcases/dart2js/sealed_class.dart.strong.expect
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract sealed class Class extends core::Object {
final field core::int value;
constructor •(core::int value) → self::Class
: self::Class::value = value, super core::Object::•()
;
}
class A extends self::Class {
constructor •(core::int value) → self::A
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::A
return new self::A::•(value);
}
class B extends self::Class {
constructor •(core::int value) → self::B
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::B
return new self::B::•(value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract sealed class Class extends core::Object {
final field core::int value;
constructor •(core::int value) → self::Class
: self::Class::value = value, super core::Object::•()
;
}
class A extends self::Class {
constructor •(core::int value) → self::A
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::A
return new self::A::•(value);
}
class B extends self::Class {
constructor •(core::int value) → self::B
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::B
return new self::B::•(value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
sealed class Class {
final int value;
Class(this.value);
}

class A extends Class {
A(super.value);
}

class B extends Class {
B(super.value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class A extends Class {
A(super.value);
}

class B extends Class {
B(super.value);
}

sealed class Class {
Class(this.value);
final int value;
}
24 changes: 24 additions & 0 deletions pkg/front_end/testcases/dart2js/sealed_class.dart.weak.expect
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract sealed class Class extends core::Object {
final field core::int value;
constructor •(core::int value) → self::Class
: self::Class::value = value, super core::Object::•()
;
}
class A extends self::Class {
constructor •(core::int value) → self::A
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::A
return new self::A::•(value);
}
class B extends self::Class {
constructor •(core::int value) → self::B
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::B
return new self::B::•(value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract sealed class Class extends core::Object {
final field core::int value;
constructor •(core::int value) → self::Class
: self::Class::value = value, super core::Object::•()
;
}
class A extends self::Class {
constructor •(core::int value) → self::A
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::A
return new self::A::•(value);
}
class B extends self::Class {
constructor •(core::int value) → self::B
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::B
return new self::B::•(value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract sealed class Class extends core::Object {
final field core::int value;
constructor •(core::int value) → self::Class
;
}
class A extends self::Class {
constructor •(core::int value) → self::A
;
static method _#new#tearOff(core::int value) → self::A
return new self::A::•(value);
}
class B extends self::Class {
constructor •(core::int value) → self::B
;
static method _#new#tearOff(core::int value) → self::B
return new self::B::•(value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract sealed class Class extends core::Object {
final field core::int value;
constructor •(core::int value) → self::Class
: self::Class::value = value, super core::Object::•()
;
}
class A extends self::Class {
constructor •(core::int value) → self::A
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::A
return new self::A::•(value);
}
class B extends self::Class {
constructor •(core::int value) → self::B
: super self::Class::•(value)
;
static method _#new#tearOff(core::int value) → self::B
return new self::B::•(value);
}
2 changes: 1 addition & 1 deletion pkg/kernel/lib/verifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -925,7 +925,7 @@ class VerifyingVisitor extends RecursiveResultVisitor<void> {
enterTreeNode(node);
checkTargetedInvocation(node.target, node);
if (node.target.enclosingClass.isAbstract) {
problem(node, "ConstructorInvocation of abstract class.");
problem(node, "$node of abstract class ${node.target.enclosingClass}.");
}
if (node.isConst && !node.target.isConst) {
problem(
Expand Down
2 changes: 1 addition & 1 deletion tools/VERSION
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ CHANNEL dev
MAJOR 3
MINOR 1
PATCH 0
PRERELEASE 110
PRERELEASE 111
PRERELEASE_PATCH 0

0 comments on commit c777d54

Please sign in to comment.