mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
87 lines
1.6 KiB
D
87 lines
1.6 KiB
D
// https://issues.dlang.org/show_bug.cgi?id=18199
|
|
|
|
//
|
|
// struct initializer cases
|
|
//
|
|
|
|
// original error report
|
|
struct Bla
|
|
{
|
|
int delegate(int, int) fun;
|
|
}
|
|
Bla bla1 = Bla((int a, int b) { return a + b; });
|
|
Bla bla2 = {(int a, int b) { return a + b; }}; // yielded error
|
|
|
|
// additional error report with memberName:expression syntax
|
|
struct Foo
|
|
{
|
|
int function(int) bar;
|
|
int function(int) bar2;
|
|
}
|
|
Foo foo =
|
|
{
|
|
bar : function(x) { return 2 * x; }, // yielded error
|
|
bar2 : (x) => 2 * x,
|
|
};
|
|
|
|
struct MyStruct
|
|
{
|
|
int function() f;
|
|
int delegate() d;
|
|
}
|
|
|
|
// confirm that ambiguous cases assume struct initializer
|
|
MyStruct ambiguous_1 = {};
|
|
MyStruct ambiguous_2 =
|
|
{
|
|
{ return 1 + 1; }
|
|
};
|
|
|
|
// statement-holding function literal variants not covered above
|
|
static MyStruct function_and_delegate_keywords =
|
|
{
|
|
function () { return 1 + 1; },
|
|
delegate () { return 1 + 1; }
|
|
};
|
|
|
|
//
|
|
// function literal initializer cases
|
|
//
|
|
|
|
alias IntFun = int function();
|
|
alias VoidFun = void function();
|
|
|
|
IntFun colon_at_top_level =
|
|
{
|
|
return 1 + 1;
|
|
};
|
|
|
|
IntFun block_statement_only_with_nested_statement =
|
|
{
|
|
if (true)
|
|
{
|
|
return 1 + 1;
|
|
}
|
|
};
|
|
|
|
struct SomeStruct {}
|
|
|
|
// previously these cases were incorrectly parsed as struct initializer
|
|
VoidFun[] no_semicolon_statements = [
|
|
{ asm {} },
|
|
{ class Foo {} },
|
|
{ debug(foo) {} },
|
|
{ enum Foo { A } },
|
|
{ final switch(5) {} },
|
|
{ if (true) {} },
|
|
{ interface Foo {} },
|
|
{ pragma(inline) {} },
|
|
{ scope(exit) {} },
|
|
{ struct Foo {} },
|
|
{ synchronized {} },
|
|
{ try {} finally {} },
|
|
{ union Foo {} },
|
|
{ version(foo) {} },
|
|
{ while (false) {} },
|
|
{ with (SomeStruct) {} },
|
|
];
|