aboutsummaryrefslogtreecommitdiff
path: root/build/parser
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-03-03 11:43:03 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-03-03 11:43:03 +0200
commit17287b34a8090d381278c02b7bc6676669968099 (patch)
tree276fb40c1a06b0b3683b0dcad24e92f59cecce9f /build/parser
parentd4a6fb02ab5741aa41251653f0be3feb4594e553 (diff)
Implement new default target logic, canonical directory name (empty value)
The logic is as follows: if we have an explicit current directory target, then that's the default target. Otherwise, we take the first target and use it as a prerequisite to create an implicit current directory target, effectively making it the default target via an alias. If there are no targets in this buildfile, then we don't do anything.
Diffstat (limited to 'build/parser')
-rw-r--r--build/parser8
1 files changed, 8 insertions, 0 deletions
diff --git a/build/parser b/build/parser
index 2e399c9..e5aeb60 100644
--- a/build/parser
+++ b/build/parser
@@ -17,6 +17,7 @@
namespace build
{
class scope;
+ class target;
class lexer;
class parser
@@ -61,6 +62,12 @@ namespace build
// Utilities.
//
private:
+ void
+ process_default_target (token&);
+
+ // Lexer.
+ //
+ private:
token_type
next (token&, token_type&);
@@ -83,6 +90,7 @@ namespace build
const std::string* path_; // Path processed by diagnostic_string().
lexer* lexer_;
scope* scope_;
+ target* default_target_;
token peek_ {token_type::eos, false, 0, 0};
bool peeked_ {false};