Skip to content

Commit

Permalink
Version 3.1.0-216.0.dev
Browse files Browse the repository at this point in the history
Merge 1864b7f into dev
  • Loading branch information
Dart CI committed Jun 15, 2023
2 parents 9175b5c + 1864b7f commit 5bf5873
Show file tree
Hide file tree
Showing 14 changed files with 496 additions and 47 deletions.
12 changes: 10 additions & 2 deletions pkg/front_end/lib/src/fasta/kernel/body_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5909,8 +5909,16 @@ class BodyBuilder extends StackListenerImpl
addProblem(fasta.messageMissingExplicitConst, charOffset, charLength);
}
if (isConst && !procedure.isConst) {
return buildProblem(
fasta.messageNonConstFactory, charOffset, charLength);
if (procedure.isInlineClassMember) {
// Both generative constructors and factory constructors from
// inline classes are encoded as procedures so we use the message
// for non-const constructors here.
return buildProblem(
fasta.messageNonConstConstructor, charOffset, charLength);
} else {
return buildProblem(
fasta.messageNonConstFactory, charOffset, charLength);
}
}
StaticInvocation node;
if (typeAliasBuilder == null) {
Expand Down
15 changes: 15 additions & 0 deletions pkg/front_end/testcases/inline_class/const_constructor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,25 @@ inline class Class {
final int i;

const Class(this.i);

Class.named(this.i);

const factory Class.redirect(int i) = Class;

factory Class.fact(int i) => Class(i);

factory Class.redirect2(int i) = Class;
}

test() {
const Class.named(42);
const Class.fact(87);
const Class.redirect2(87);
}

main() {
expect(42, const Class(42));
expect(87, const Class.redirect(87));
}

expect(expected, actual) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,76 @@
library;
//
// Problems in library:
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:20:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.named(42);
// ^^^^^
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:21:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.fact(87);
// ^^^^^
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:22:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.redirect2(87);
// ^^^^^
//
import self as self;
import "dart:core" as core;

inline class Class /* declaredRepresentationType = core::int */ {
constructor • = self::Class|;
tearoff • = self::Class|_#new#tearOff;
constructor named = self::Class|named;
tearoff named = self::Class|_#named#tearOff;
static redirecting-factory redirect = self::Class|redirect;
static tearoff redirect = self::Class|_#redirect#tearOff;
static factory fact = self::Class|fact;
static tearoff fact = self::Class|_#fact#tearOff;
static redirecting-factory redirect2 = self::Class|redirect2;
static tearoff redirect2 = self::Class|_#redirect2#tearOff;
}
static inline-class-member method Class|(core::int i) → self::Class {
lowered final self::Class #this = i;
return #this;
}
static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class
return self::Class|(i);
static inline-class-member method Class|named(core::int i) → self::Class {
lowered final self::Class #this = i;
return #this;
}
static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
return self::Class|named(i);
static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
return self::Class|(i);
static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
static inline-class-member method Class|fact(core::int i) → self::Class
return self::Class|(i);
static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
return self::Class|fact(i);
static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
return self::Class|(i);
static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:20:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.named(42);
^^^^^";
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:21:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.fact(87);
^^^^^";
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:22:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.redirect2(87);
^^^^^";
}
static method main() → dynamic {
self::expect(42, #C1);
self::expect(87, #C2);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
Expand All @@ -22,4 +79,5 @@ static method expect(dynamic expected, dynamic actual) → dynamic {

constants {
#C1 = 42
#C2 = 87
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,76 @@
library;
//
// Problems in library:
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:20:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.named(42);
// ^^^^^
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:21:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.fact(87);
// ^^^^^
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:22:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.redirect2(87);
// ^^^^^
//
import self as self;
import "dart:core" as core;

inline class Class /* declaredRepresentationType = core::int */ {
constructor • = self::Class|;
tearoff • = self::Class|_#new#tearOff;
constructor named = self::Class|named;
tearoff named = self::Class|_#named#tearOff;
static redirecting-factory redirect = self::Class|redirect;
static tearoff redirect = self::Class|_#redirect#tearOff;
static factory fact = self::Class|fact;
static tearoff fact = self::Class|_#fact#tearOff;
static redirecting-factory redirect2 = self::Class|redirect2;
static tearoff redirect2 = self::Class|_#redirect2#tearOff;
}
static inline-class-member method Class|(core::int i) → self::Class {
lowered final self::Class #this = i;
return #this;
}
static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class
return self::Class|(i);
static inline-class-member method Class|named(core::int i) → self::Class {
lowered final self::Class #this = i;
return #this;
}
static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
return self::Class|named(i);
static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
return self::Class|(i);
static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
static inline-class-member method Class|fact(core::int i) → self::Class
return self::Class|(i);
static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
return self::Class|fact(i);
static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
return self::Class|(i);
static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:20:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.named(42);
^^^^^";
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:21:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.fact(87);
^^^^^";
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:22:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.redirect2(87);
^^^^^";
}
static method main() → dynamic {
self::expect(42, #C1);
self::expect(87, #C2);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
Expand All @@ -22,4 +79,5 @@ static method expect(dynamic expected, dynamic actual) → dynamic {

constants {
#C1 = 42
#C2 = 87
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
inline class Class {
final int i;
const Class(this.i);
Class.named(this.i);
const factory Class.redirect(int i) = Class;
factory Class.fact(int i) => Class(i);
factory Class.redirect2(int i) = Class;
}

test() {}
main() {}
expect(expected, actual) {}
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
expect(expected, actual) {}

inline class Class {
Class.named(this.i);
const Class(this.i);
const factory Class.redirect(int i) = Class;
factory Class.fact(int i) => Class(i);
factory Class.redirect2(int i) = Class;
final int i;
}

main() {}
test() {}
Original file line number Diff line number Diff line change
@@ -1,19 +1,76 @@
library;
//
// Problems in library:
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:20:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.named(42);
// ^^^^^
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:21:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.fact(87);
// ^^^^^
//
// pkg/front_end/testcases/inline_class/const_constructor.dart:22:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const Class.redirect2(87);
// ^^^^^
//
import self as self;
import "dart:core" as core;

inline class Class /* declaredRepresentationType = core::int */ {
constructor • = self::Class|;
tearoff • = self::Class|_#new#tearOff;
constructor named = self::Class|named;
tearoff named = self::Class|_#named#tearOff;
static redirecting-factory redirect = self::Class|redirect;
static tearoff redirect = self::Class|_#redirect#tearOff;
static factory fact = self::Class|fact;
static tearoff fact = self::Class|_#fact#tearOff;
static redirecting-factory redirect2 = self::Class|redirect2;
static tearoff redirect2 = self::Class|_#redirect2#tearOff;
}
static inline-class-member method Class|(core::int i) → self::Class {
lowered final self::Class #this = i;
return #this;
}
static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class
return self::Class|(i);
static inline-class-member method Class|named(core::int i) → self::Class {
lowered final self::Class #this = i;
return #this;
}
static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
return self::Class|named(i);
static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
return self::Class|(i);
static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
static inline-class-member method Class|fact(core::int i) → self::Class
return self::Class|(i);
static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
return self::Class|fact(i);
static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
return self::Class|(i);
static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:20:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.named(42);
^^^^^";
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:21:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.fact(87);
^^^^^";
invalid-expression "pkg/front_end/testcases/inline_class/const_constructor.dart:22:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const Class.redirect2(87);
^^^^^";
}
static method main() → dynamic {
self::expect(42, #C1);
self::expect(87, #C2);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
Expand All @@ -22,4 +79,5 @@ static method expect(dynamic expected, dynamic actual) → dynamic {

constants {
#C1 = 42
#C2 = 87
}
Loading

0 comments on commit 5bf5873

Please sign in to comment.