From 70256514a09e4692c6839f5c2b21b7ec9c1055bd Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 30 Mar 2015 12:19:44 +0200 Subject: Add support for configurable pair separator, use @ instead of = in buildspec --- build/parser.cxx | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'build/parser.cxx') diff --git a/build/parser.cxx b/build/parser.cxx index b21dd6f..617f22b 100644 --- a/build/parser.cxx +++ b/build/parser.cxx @@ -976,7 +976,7 @@ namespace build // A pair separator (only in the pair mode). // - if (tt == type::equal && lexer_->mode () == lexer_mode::pairs) + if (tt == type::pair_separator) { if (pair != 0) fail (t) << "nested pair on the right hand side of a pair"; @@ -1043,9 +1043,10 @@ namespace build lexer_ = &l; scope_ = root_ = root_scope; - // Turn on pairs recognition (e.g., src_root/=out_root/exe{foo bar}). + // Turn on pairs recognition with '@' as the pair separator (e.g., + // src_root/@out_root/exe{foo bar}). // - lexer_->mode (lexer_mode::pairs); + lexer_->mode (lexer_mode::pairs, '@'); token t (type::eos, false, 0, 0); type tt; @@ -1084,9 +1085,9 @@ namespace build // We always start with one or more names. // if (tt != type::name && - tt != type::lcbrace && // Untyped name group: '{foo ...' - tt != type::dollar && // Variable expansion: '$foo ...' - tt != type::equal) // Empty pair LHS: '=foo ...' + tt != type::lcbrace && // Untyped name group: '{foo ...' + tt != type::dollar && // Variable expansion: '$foo ...' + tt != type::pair_separator) // Empty pair LHS: '=foo ...' fail (t) << "operation or target expected instead of " << t; location l (get_location (t, &path_)); // Start of names. @@ -1296,17 +1297,18 @@ namespace build { switch (t.type ()) { - case token_type::eos: os << ""; break; - case token_type::newline: os << ""; break; - case token_type::colon: os << ":"; break; - case token_type::lcbrace: os << "{"; break; - case token_type::rcbrace: os << "}"; break; - case token_type::equal: os << "="; break; - case token_type::plus_equal: os << "+="; break; - case token_type::dollar: os << "$"; break; - case token_type::lparen: os << "("; break; - case token_type::rparen: os << ")"; break; - case token_type::name: os << t.name (); break; + case token_type::eos: os << ""; break; + case token_type::newline: os << ""; break; + case token_type::pair_separator: os << ""; break; + case token_type::colon: os << ":"; break; + case token_type::lcbrace: os << "{"; break; + case token_type::rcbrace: os << "}"; break; + case token_type::equal: os << "="; break; + case token_type::plus_equal: os << "+="; break; + case token_type::dollar: os << "$"; break; + case token_type::lparen: os << "("; break; + case token_type::rparen: os << ")"; break; + case token_type::name: os << t.name (); break; } return os; -- cgit v1.1