diff --git a/posix.mak b/posix.mak index c7d73baa1eea..0cb1f032b1f5 100644 --- a/posix.mak +++ b/posix.mak @@ -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 diff --git a/src/examples/.gitignore b/src/examples/.gitignore new file mode 100644 index 000000000000..fc66ac17e297 --- /dev/null +++ b/src/examples/.gitignore @@ -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 diff --git a/src/examples/avg.d b/src/examples/avg.d old mode 100644 new mode 100755 index 4eb32f5c891f..8677a2a66a9a --- a/src/examples/avg.d +++ b/src/examples/avg.d @@ -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. diff --git a/src/examples/impvisitor.d b/src/examples/impvisitor.d old mode 100644 new mode 100755 index 4c34dbb30f84..edaf3eee9156 --- a/src/examples/impvisitor.d +++ b/src/examples/impvisitor.d @@ -1,4 +1,7 @@ -module examples.impvisitor; +#!/usr/bin/env dub +/+dub.sdl: +dependency "dmd" path="../.." ++/ import ddmd.permissivevisitor; import ddmd.transitivevisitor; @@ -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!"); + } +} diff --git a/src/examples/test_parser.d b/src/examples/test_parser.d deleted file mode 100644 index 02a291c754b5..000000000000 --- a/src/examples/test_parser.d +++ /dev/null @@ -1,50 +0,0 @@ -import std.stdio; -import std.file; - -import ddmd.parse; -import ddmd.astbase; - -import examples.impvisitor; - -import ddmd.id; -import ddmd.globals; -import ddmd.identifier; - -import core.memory; - -void main() -{ - - GC.disable(); - string path = "../../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!"); - } -} diff --git a/src/posix.mak b/src/posix.mak index 1ce77a87b784..dffd5c49fa5e 100644 --- a/src/posix.mak +++ b/src/posix.mak @@ -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)) @@ -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 @@ -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}