mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
93 lines
1.6 KiB
D
93 lines
1.6 KiB
D
module parser.visibilitydeclaration_location;
|
|
|
|
import dmd.frontend : parseModule;
|
|
import support : afterEach, beforeEach;
|
|
import dmd.attrib : VisibilityDeclaration;
|
|
import dmd.location;
|
|
import dmd.visitor : SemanticTimeTransitiveVisitor;
|
|
|
|
@beforeEach
|
|
void initializeFrontend()
|
|
{
|
|
import dmd.frontend : initDMD;
|
|
|
|
initDMD();
|
|
}
|
|
|
|
@afterEach
|
|
void deinitializeFrontend()
|
|
{
|
|
import dmd.frontend : deinitializeDMD;
|
|
deinitializeDMD();
|
|
}
|
|
|
|
extern (C++) class Visitor : SemanticTimeTransitiveVisitor
|
|
{
|
|
alias visit = typeof(super).visit;
|
|
Loc l;
|
|
|
|
override void visit(VisibilityDeclaration vd)
|
|
{
|
|
l = vd.loc;
|
|
}
|
|
}
|
|
|
|
immutable struct Test
|
|
{
|
|
/*
|
|
* The description of the unit test.
|
|
*
|
|
* This will go into the UDA attached to the `unittest` block.
|
|
*/
|
|
string description_;
|
|
|
|
/*
|
|
* The code to parse.
|
|
*
|
|
*/
|
|
string code_;
|
|
|
|
string code()
|
|
{
|
|
return code_;
|
|
}
|
|
|
|
string description()
|
|
{
|
|
return description_;
|
|
}
|
|
}
|
|
|
|
enum tests = [
|
|
Test("`public` symbol and curly braces on the next line", q{class C
|
|
{
|
|
public
|
|
{
|
|
void foo() {}
|
|
}
|
|
}}),
|
|
Test("`public` symbol and colon on the same line", q{class C
|
|
{
|
|
public:
|
|
void foo() {}
|
|
}}),
|
|
Test("`public` symbol and function declaration on the same line", q{class C
|
|
{
|
|
public void foo() {}
|
|
}}),
|
|
];
|
|
|
|
static foreach (test; tests)
|
|
{
|
|
@(test.description)
|
|
unittest
|
|
{
|
|
auto t = parseModule("test.d", test.code);
|
|
|
|
scope visitor = new Visitor;
|
|
t.module_.accept(visitor);
|
|
|
|
assert(visitor.l.linnum == 3);
|
|
assert(visitor.l.charnum == 5);
|
|
}
|
|
}
|