mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
Allow shortened method syntax for constructors
This commit is contained in:
parent
f28b1a0f0a
commit
56eb579a45
3 changed files with 32 additions and 1 deletions
15
changelog/dmd.shortened-method-constructor.dd
Normal file
15
changelog/dmd.shortened-method-constructor.dd
Normal file
|
@ -0,0 +1,15 @@
|
|||
Shortened method syntax can now be used in constructors
|
||||
|
||||
This used to raise an error "cannot return expression from constructor", but it's now supported:
|
||||
|
||||
---
|
||||
struct Number
|
||||
{
|
||||
int x;
|
||||
|
||||
this(int x) => this.x = x;
|
||||
this(float x) => this(cast(int) x);
|
||||
}
|
||||
---
|
||||
|
||||
Postblits and destructors already supported shortened method syntax because they return `void`.
|
|
@ -5252,7 +5252,10 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer
|
|||
error("missing `do { ... }` after `in` or `out`");
|
||||
const returnloc = token.loc;
|
||||
nextToken();
|
||||
f.fbody = new AST.ReturnStatement(returnloc, parseExpression());
|
||||
if (f.isCtorDeclaration)
|
||||
f.fbody = new AST.ExpStatement(returnloc, parseExpression());
|
||||
else
|
||||
f.fbody = new AST.ReturnStatement(returnloc, parseExpression());
|
||||
f.endloc = token.loc;
|
||||
check(TOK.semicolon);
|
||||
break;
|
||||
|
|
|
@ -13,6 +13,10 @@ class A {
|
|||
|
||||
// or normal method defintions
|
||||
bool isNull() => this is null;
|
||||
|
||||
this() {}
|
||||
this(int x) => _x = x;
|
||||
this(float y) => this(cast(int) y);
|
||||
}
|
||||
|
||||
class B : A{
|
||||
|
@ -36,3 +40,12 @@ void func() {
|
|||
// Issue 24088 - https://issues.dlang.org/show_bug.cgi?id=24088
|
||||
S!int f() => S!int();
|
||||
}
|
||||
|
||||
struct T
|
||||
{
|
||||
void inc() {}
|
||||
this(this) => inc();
|
||||
|
||||
void free() {}
|
||||
~this() => free();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue