Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions posix.mak
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ clean:
$(RM) tags

test:
$(QUIET)$(MAKE) -C src -f posix.mak build-examples
$(QUIET)$(MAKE) -C src -f posix.mak unittest
$(QUIET)$(MAKE) -C test -f Makefile

Expand Down
10 changes: 10 additions & 0 deletions src/examples/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Ignore all binary files (files without an extension)
# Start: Ignore everything
*
# Include directories
!*/
# Include all files with extensions
!*.*

# Ignore DUB files
.dub
4 changes: 4 additions & 0 deletions src/examples/avg.d
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#!/usr/bin/env dub
/+dub.sdl:
dependency "dmd" path="../.."
+/
/* This file contains an example on how to use the transitive visitor.
It implements a visitor which computes the average function length from
a *.d file.
Expand Down
54 changes: 53 additions & 1 deletion src/examples/impvisitor.d
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
module examples.impvisitor;
#!/usr/bin/env dub
/+dub.sdl:
dependency "dmd" path="../.."
+/

import ddmd.permissivevisitor;
import ddmd.transitivevisitor;
Expand Down Expand Up @@ -67,3 +70,52 @@ extern(C++) class ImportVisitor(AST) : PermissiveVisitor!AST
}
}
}

void main()
{
import std.stdio;
import std.file;
import std.path : buildPath, dirName;

import ddmd.parse;
import ddmd.astbase;

import ddmd.id;
import ddmd.globals;
import ddmd.identifier;

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();
global.params.isLinux = true;
global.params.is64bit = (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);

//writeln("Started parsing...");
scope p = new Parser!ASTBase(m, input, false);
p.nextToken();
m.members = p.parseModule();
//writeln("Finished parsing. Starting transitive visitor");

scope vis = new ImportVisitor2!ASTBase();
m.accept(vis);

//writeln("Finished!");
}
}
50 changes: 0 additions & 50 deletions src/examples/test_parser.d

This file was deleted.

27 changes: 15 additions & 12 deletions src/posix.mak
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,6 @@ ROOT_SRCS = $(addsuffix .d,$(addprefix $(ROOT)/,aav array ctfloat file \
filename man outbuffer port response rmem rootobject speller \
stringtable hash))

PARSER_SRCS=$(addsuffix .d, $(addprefix $D/,parse astbase parsetimevisitor transitivevisitor permissivevisitor strictvisitor))

GLUE_OBJS =

ifeq (osx,$(OS))
Expand Down Expand Up @@ -438,15 +436,6 @@ $G/backend.a: $(G_OBJS) $(SRC_MAKE)
$G/lexer.a: $(LEXER_SRCS) $(LEXER_ROOT) $(HOST_DMD_PATH) $(SRC_MAKE)
CC="$(HOST_CXX)" $(HOST_DMD_RUN) -lib -of$@ $(MODEL_FLAG) -J$G -L-lstdc++ $(DFLAGS) $(LEXER_SRCS) $(LEXER_ROOT)

$G/parser.a: $(PARSER_SRCS) $G/lexer.a $(ROOT_SRCS) $(HOST_DMD_PATH) $(SRC_MAKE)
CC="$(HOST_CXX)" $(HOST_DMD_RUN) -lib -of$@ $(MODEL_FLAG) -L-lstdc++ $(DFLAGS) $(PARSER_SRCS) $G/lexer.a $(ROOT_SRCS)

parser_test: $G/parser.a $(EX)/test_parser.d $(HOST_DMD_PATH)
CC="$(HOST_CXX)" $(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -L-lstdc++ $(DFLAGS) $G/parser.a $(EX)/test_parser.d $(EX)/impvisitor.d

example_avg: $G/parser.a $(EX)/avg.d $(HOST_DMD_PATH)
CC="$(HOST_CXX)" $(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -L-lstdc++ $(DFLAGS) $G/parser.a $(EX)/avg.d

$G/dmd_frontend: $(FRONT_SRCS) $D/gluelayer.d $(ROOT_SRCS) $G/newdelete.o $G/lexer.a $(STRING_IMPORT_FILES) $(HOST_DMD_PATH)
CC="$(HOST_CXX)" $(HOST_DMD_RUN) -of$@ $(MODEL_FLAG) -vtls -J$G -J../res -L-lstdc++ $(DFLAGS) $(filter-out $(STRING_IMPORT_FILES) $(HOST_DMD_PATH),$^) -version=NoBackend

Expand All @@ -467,9 +456,23 @@ $G/dmd-unittest: $(DMD_SRCS) $(ROOT_SRCS) $G/newdelete.o $G/lexer.a $(G_GLUE_OBJ
unittest: $G/dmd-unittest
$<

######## DMD as a library examples

EXAMPLES=$(addprefix $G/examples/, avg impvisitor)
PARSER_SRCS=$(addsuffix .d, $(addprefix $D/,parse astbase parsetimevisitor transitivevisitor permissivevisitor strictvisitor))

$G/parser.a: $(PARSER_SRCS) $(LEXER_SRCS) $(ROOT_SRCS) $G/dmd $G/dmd.conf $(SRC_MAKE)
CC="$(HOST_CXX)" $G/dmd -lib -of$@ $(MODEL_FLAG) -L-lstdc++ -J$G $(DFLAGS) $(PARSER_SRCS) $(LEXER_SRCS) $(ROOT_SRCS)

$G/examples/%: $(EX)/%.d $G/parser.a $G/dmd
CC="$(HOST_CXX)" $G/dmd -of$@ $(MODEL_FLAG) $(DFLAGS) $G/parser.a $<

build-examples: $(EXAMPLES)

######## Manual cleanup

clean:
rm -R $(GENERATED)
rm -f parser_test parser_test.o example_avg example_avg.o
rm -f dmd
rm -f $(addprefix $D/backend/, $(optabgen_output))
@[ ! -d ${PGO_DIR} ] || echo You should issue manually: rm -rf ${PGO_DIR}
Expand Down