aboutsummaryrefslogtreecommitdiff
path: root/build2/parser.cxx
AgeCommit message (Collapse)AuthorFilesLines
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}
2016-06-26Minor module interface cleanupsBoris Kolpackov1-1/+1
2016-06-26Add notion of ad hoc group, use to handle DLL/import libraryBoris Kolpackov1-46/+1
2016-06-18Port to MinGWKaren Arutyunov1-7/+20
2016-06-03Treat trailing backslash as directory indicatorBoris Kolpackov1-13/+36
Note that with this change we broke reversibility for such names, i.e., 'foo\' name will be reversed to 'foo/'.
2016-04-23Revert back to using root scope in src_out()/out_src()Boris Kolpackov1-1/+1
Relaxing it to base was not wise since we can have "sideways" prerequisites (those from parallel directories such as brep's ../web/*).
2016-04-19Redesign src/out scopingBoris Kolpackov1-19/+54
We no longer enter paths from the src tree into scope map. Instead, targets from the src tree now include their out tree directory (in essence their "configuration"). This is then used to find a target's scope. See the comment in class target for details. The result of this change is that we can now again build multiple configurations (out trees) for same project at once.
2016-04-18Add support for using value attributes in eval contextBoris Kolpackov1-174/+271
For example: if ($x == [null]) Or: if ([uint64] 01 == [uint64] 1)
2016-04-11New configuration logic, iteration 1Boris Kolpackov1-3/+2
2016-04-09Add abs_dir_path type, auto-complete if initialized from namesBoris Kolpackov1-10/+11
2016-04-05Add support for scope/target-qualified variable expansionBoris Kolpackov1-91/+160
For example: print $(dir/:var) print $(file{target}:var) print $(dir/file{target}:var) Note that if the scope/target does not (yet) exists, it will be created.