aboutsummaryrefslogtreecommitdiff
path: root/build2/parser.cxx
AgeCommit message (Collapse)AuthorFilesLines
2016-12-07Make use of butl::path::current(), butl::path::parent()Karen Arutyunov1-2/+2
2016-12-06Work around wrong static initialization order in VCBoris Kolpackov1-11/+13
2016-12-05Eliminate the use of '/...' paths on WindowsKaren Arutyunov1-22/+14
2016-12-05Use empty path for root scopeKaren Arutyunov1-6/+3
2016-12-05Adapt to semantics change of path::normalize()Karen Arutyunov1-1/+3
2016-12-05Use new convert() in if-else, assert parsingBoris Kolpackov1-27/+16
2016-12-05Add comma, ternary, logical operators support in eval contextBoris Kolpackov1-149/+340
2016-12-01Allow implicit (lexical) typed-to-typed conversionBoris Kolpackov1-22/+32
2016-11-30Add support for typed/untyped concatenated expansionBoris Kolpackov1-224/+438
2016-11-25Distinguish token quoting type and completenessBoris Kolpackov1-2/+5
2016-11-23Implement value type propagation on expansionBoris Kolpackov1-56/+76
Currently, we only propagate types of sole, unquoted expansions (variable, function call, or eval context), similar to NULL. To untypify the value, simply quote it.
2016-11-23Implement assert directiveBoris Kolpackov1-23/+70
The grammar is as follows: assert <expression> [<description>] assert! <expression> [<description>] The expression must evaluate to 'true' or 'false', just like in if-else.
2016-11-22Minor fixBoris Kolpackov1-7/+7
2016-11-22Use diagnostics facility from libbutlBoris Kolpackov1-2/+1
2016-11-18Add function machinery, implement path.normalize()Boris Kolpackov1-26/+20
Note that multi-argument functions are not yet "callable" since there is no support for value packs.
2016-11-18Make names and vector<name> different types, add typed value constructorBoris Kolpackov1-1/+1
2016-11-11Get rid of lexer modes overriding pair separatorsBoris Kolpackov1-8/+8
2016-11-04Handle explicit test scopesBoris Kolpackov1-1/+1
2016-11-04Handle pre-parsing of simple pairs in parse_names()Boris Kolpackov1-38/+51
2016-11-04Use special mode for attribute lexingBoris Kolpackov1-9/+3
2016-11-04Add support for ignoring separators inside namesBoris Kolpackov1-11/+19
2016-11-04When assigning always ignore existing value typeBoris Kolpackov1-20/+22
For example: x = [uint64] 1 x = a # Ok.
2016-11-04Minor cleanupBoris Kolpackov1-7/+7
2016-11-04Implement pre-parsing mode for subset of buildfile parsing functionsBoris Kolpackov1-190/+243
2016-11-04Various minor buildfile lexer/parser changesBoris Kolpackov1-18/+27
2016-11-04Keep track of lexer mode in parser replay mechanismBoris Kolpackov1-8/+11
2016-11-04Change token type 'name' to more general 'word'Boris Kolpackov1-21/+21
2016-11-04Add support for lexer name scanning customizationBoris Kolpackov1-2/+1
2016-11-04Use parse_* naming for parsing functionsBoris Kolpackov1-133/+133
2016-11-04Add variable lookup hook to parserBoris Kolpackov1-39/+48
2016-11-04Allow customizing names parsing diagnosticsBoris Kolpackov1-7/+11
2016-11-04Minor fixesBoris Kolpackov1-2/+2
2016-11-04Handle printing of extended tokensBoris Kolpackov1-7/+8
2016-11-04Various design/implementation cleanupsBoris Kolpackov1-38/+26
2016-09-15Add io_error alias for std::ios_base::failureKaren Arutyunov1-3/+3
2016-08-30Add support for target visibility, use for dist, test, installBoris Kolpackov1-7/+15
This means we can no longer write: install = false Now it should be: *: install = false
2016-08-30Add support for using '*' as target type in variable assignmentBoris Kolpackov1-3/+8
So these three are equivalent: *: foo = 1 {*}: foo = 2 *{*}: foo = 3
2016-08-17Allow expansion of undefined/NULL namespace variablesBoris Kolpackov1-2/+4
This restriction is not proving to get in the way.
2016-08-10Add ignore case support for find_option()Karen Arutyunov1-2/+1
2016-08-05Implement out-qualified target syntax for setting target-specific varsBoris Kolpackov1-17/+54
So now we can do: doc{INSTALL}@./: install = false Note that so far that's the only place where we support out-qualification. Grep for @@ OUT to see other places.
2016-08-05Merge 'value' and 'pairs' lexer_mode, call it 'value'Boris Kolpackov1-24/+24
We only really used pairs.
2016-08-02Optimize out path::normalize() callsBoris Kolpackov1-7/+24
2016-07-28Adjust to new path implementation, use to support reversibilityBoris Kolpackov1-34/+21
2016-07-25Only do "effective escaping" (['"\$(]) on the command lineBoris Kolpackov1-1/+4
This will make things more convenient on Windows provided we use "sane" paths (no spaces, no (), etc).
2016-07-23Adapt to fdstream extensionKaren Arutyunov1-17/+6
2016-07-21Add support for single line if-blocksBoris Kolpackov1-23/+50
So now we can do: if true print true else print false Instead having to do: if true { print true } else { print false }
2016-07-20Switch to dynamic empty() implementation in variable valueBoris Kolpackov1-16/+20
The current model fell apart when we modified values directly.
2016-07-20Implement support for <, >, <=, >= in eval contextBoris Kolpackov1-16/+60
Now can write: if ($build.version > 30000)
2016-07-16Add support for prepend/append in target type/pattern-specific varsBoris Kolpackov1-12/+84
Semantically, these are similar to variable overrides and are essentially treated as "templates" that are applied on lookup to the "stem" value that is specific to the target type/name. For example: x = [string] a file{f*}: x =+ b sub/: { file{*}: x += c print $(file{foo}:x) # abc print $(file{bar}:x) # ac }
2016-06-27Add config.bin.target var/hint, use to decide libso{} install modeBoris Kolpackov1-2/+2
Normally the user doesn't need to specify config.bin.target explicitly since the cxx module will hint it. We now also have the whole set of target's components: bin.target.{cpu,vendor,system,version,class}