dart-lang / dart-lang/language
Constant constructor call should be legal in another constant constructor definition.
- Dominant language
- TeX
- Stars
- 2.9k
- Forks
- 239
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 14
Description
_This issue was originally filed by @Cat-sushi_
---
The code below is illegal with the current language specification.
class C {
final x;
const C(this.x);
}
class D {
final C c;
const D(x) : this.c = const C(x); // compile-time error!
}
I understand that 'x' in 'const C(x);' is not a compile-time constant, but a potentially constant expression, and this is the reason why the constructor call 'call C(x);' is illegal.
I also understand the reason why the 'x' is potentially constant, the constantivity of 'x' is depends on the call site which calls the constructor whether with 'const' or with 'new'.
On the other hand, with my understanding, the compiler evaluates the result of constant expressions at compile-time, and the compiler can check constantivity at compile-time with call site sequence.
At the same time, in run-time context, constructors are less constrained, and the language processor can simply regard 'const' of 'const C(x);' as 'new', and can call the prepared run-time constructor.
I think the disregard of keyword 'const' and the need for the run-time constructor of the constructor call 'const C(x);' in run-time context are kind of similar to those of constant constructor definition like 'const C(this.x);' or const 'D(x)...;'.
So, regardless of discussion in issue dart-lang/sdk#392 and issue dart-lang/sdk#19558, I think constant constructor calls in another constant constructor definition should be legal.
And, I feel it is more natural.
In addition, I think this proposal is upper compatible of the current language specification.
Contributor guide
Research direction
Start with the two constructor examples in the issue and review the referenced issues dart-lang/sdk#392 and dart-lang/sdk#19558. Determine whether the language specification should permit this constant-constructor call and document the compatibility and constant-expression consequences; done means the proposal has a resolved specification decision.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 20/100