mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
123 lines
2.7 KiB
D
Executable file
123 lines
2.7 KiB
D
Executable file
#!/usr/bin/env dub
|
|
/+dub.sdl:
|
|
dependency "dmd" path="../../.."
|
|
+/
|
|
|
|
import dmd.visitor.permissive;
|
|
import dmd.visitor.transitive;
|
|
|
|
import dmd.tokens;
|
|
import dmd.common.outbuffer;
|
|
|
|
import core.stdc.stdio;
|
|
|
|
extern(C++) class ImportVisitor2(AST) : ParseTimeTransitiveVisitor!AST
|
|
{
|
|
alias visit = ParseTimeTransitiveVisitor!AST.visit;
|
|
|
|
override void visit(AST.Import imp)
|
|
{
|
|
if (imp.isstatic)
|
|
printf("static ");
|
|
|
|
printf("import ");
|
|
|
|
foreach (const pid; imp.packages)
|
|
printf("%s.", pid.toChars());
|
|
|
|
printf("%s", imp.id.toChars());
|
|
|
|
if (imp.names.length)
|
|
{
|
|
printf(" : ");
|
|
foreach (const i, const name; imp.names)
|
|
{
|
|
if (i)
|
|
printf(", ");
|
|
printf("%s", name.toChars());
|
|
}
|
|
}
|
|
|
|
printf(";");
|
|
printf("\n");
|
|
|
|
}
|
|
}
|
|
|
|
extern(C++) class ImportVisitor(AST) : PermissiveVisitor!AST
|
|
{
|
|
alias visit = PermissiveVisitor!AST.visit;
|
|
|
|
override void visit(AST.Module m)
|
|
{
|
|
foreach (s; *m.members)
|
|
{
|
|
s.accept(this);
|
|
}
|
|
}
|
|
|
|
override void visit(AST.Import i)
|
|
{
|
|
printf("import %s", i.toChars());
|
|
}
|
|
|
|
override void visit(AST.ImportStatement s)
|
|
{
|
|
foreach (imp; *s.imports)
|
|
{
|
|
imp.accept(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
import std.stdio;
|
|
import std.file;
|
|
import std.path : buildPath, dirName;
|
|
|
|
import dmd.parse;
|
|
import dmd.astbase;
|
|
|
|
import dmd.id;
|
|
import dmd.globals;
|
|
import dmd.identifier;
|
|
import dmd.errorsink;
|
|
import dmd.target;
|
|
|
|
import core.memory;
|
|
|
|
GC.disable();
|
|
string path = __FILE_FULL_PATH__.dirName.buildPath("../../../../phobos/std/");
|
|
string regex = "*.d";
|
|
|
|
auto dFiles = dirEntries(path, regex, SpanMode.depth);
|
|
foreach (f; dFiles)
|
|
{
|
|
string fn = f.name;
|
|
//writeln("Processing ", fn);
|
|
|
|
Id.initialize();
|
|
global._init();
|
|
target.os = Target.OS.linux;
|
|
target.isX86_64 = (size_t.sizeof == 8);
|
|
global.params.useUnitTests = true;
|
|
ASTBase.Type._init();
|
|
|
|
auto id = Identifier.idPool(fn);
|
|
auto m = new ASTBase.Module(&(fn.dup)[0], id, false, false);
|
|
auto input = readText(fn);
|
|
input ~= '\0';
|
|
|
|
//writeln("Started parsing...");
|
|
scope p = new Parser!ASTBase(m, input, false, new ErrorSinkStderr(), null, false);
|
|
p.nextToken();
|
|
m.members = p.parseModule();
|
|
//writeln("Finished parsing. Starting transitive visitor");
|
|
|
|
scope vis = new ImportVisitor2!ASTBase();
|
|
m.accept(vis);
|
|
|
|
//writeln("Finished!");
|
|
}
|
|
}
|