summaryrefslogtreecommitdiffstats
path: root/src/lexer.in.cc
Commit message (Collapse)AuthorAgeFilesLines
* Add validation nodes to ninjaColin Cross2021-10-121-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A common problem in the Android build is inserting rules that perform some sort of error checking that doesn't produce any artifacts needed by the build, for example static analysis tools. There are a few patterns currently used, both of which have downsides. The first is to have a rule that depends on all of the static analysis results. This ensures they run, but requires running static analysis over everything, and not just the active parts of the build graph. The second is to insert the static analysis rule into the build graph between the artifact producing rule and anything that depends on it, often copying the artifact as the output of the static analysis rule. This increases the critical path of the build, often reducing parallelism. In the case of copying the artifact, it also wastes disk space. This patch adds "validation nodes" to edges in Ninja. A build statement can specify validation nodes using "|@" in the edge inputs. The validation nodes are not used as an input to the edge (the edge can run before the validation node is ready), but are added to the initial nodes of the build graph whenever the edge is part of the build graph. The edge that outputs the validation node can depend on the output of the edge that is being validated if desired. Test: ninja_test Change-Id: Ife27086c50c1b257a26509373199664680b2b247
* Add 'using namespace std;' to all cc files to prepare for removing it from ↵Michael Jones2020-09-301-0/+2
| | | | header files
* rename a variableNico Weber2018-04-061-5/+5
|
* Improve location of error messages around identifiers.Nico Weber2018-04-061-2/+7
| | | | | | | | | | Lexer::ReadIdent() now sets last_token_ before returning, like Lexer::ReadEvalString() does. So all "expected identifiers" and things that call ReadIdent (pool parser, rule parser, let parser, code parsing the rule name after a : in a build line) now point the "^ near here" at what was there instead of the previous last_token According to manifest_parser_perftest, this is perf-neutral.
* CanonicalizePath handles \ on WindowsScott Graham2014-10-301-8/+17
|
* block parse method doneRobert Iannucci2012-11-101-0/+2
|
* windows: fix size_t<->int conversions in ninja.exeEvan Martin2012-08-101-1/+1
|
* reject tabs (and CRs) in input files more aggressivelyEvan Martin2012-08-021-18/+19
|
* disallow crlf in manifest filesEvan Martin2012-07-181-2/+2
| | | | | | | | | | | | | | | It turns out to be trickier than expected to process these correctly. It turns out to also be trickier than expected to give a nice error message on encountering these. But the behavior prior to this patch would just be silent failures where we attempted to examine paths that accidentally contained embedded \r. For now, fix all regexes of the form [^...] to include \r in the excluded block, then assert that we get a vague lexer error near the problem. In the future perhaps we can open manifest files in text mode on Windows or just disallow Windows-style CRLF in the manual.
* allow UTF-8 in rule descriptionsEvan Martin2012-04-261-1/+1
| | | | | The lexer already mostly allowed this, except that chars >127 were being interpreted as negative indexes into the lexer table.
* parse $:Peter Kuemmel2012-01-291-0/+20
| | | | | '$:' is a valid string now, it expands to ':' update error messages and show a hint when something went wrong.
* add colon escapingPeter Kuemmel2012-01-291-0/+4
| | | | | | | | Needed for Windows drive names. For instance configure with gtest: python configure.py --with-gtest=c$:\gtest-1.6.0
* Merge pull request #194 from evanj/newline_spacesEvan Martin2012-01-051-1/+1
|\ | | | | Lexer: include leading spaces in the newline token.
| * Lexer: include leading spaces in the newline token.Evan Jones2012-01-051-1/+1
| | | | | | | | This means that indented blank lines are skipped without causing errors.
* | Lexer: Remove the trailing newline from lexer.in.cc not just lexer.ccEvan Jones2012-01-051-1/+1
|/ | | | This probably should have been part of commit eeed7241
* Lexer: include leading whitespace in the comment token.Evan Jones2012-01-051-1/+1
| | | | Indented comments are ignored rather than causing errors.
* windows: more build fixesScott Graham2012-01-041-0/+1
|
* allow hyphen in variable namesEvan Martin2011-12-301-2/+2
|
* make evalstring internals privateEvan Martin2011-12-301-6/+6
|
* build fixEvan Martin2011-12-301-0/+2
|
* switch the core ninja parser to use re2c for the lexerEvan Martin2011-12-291-0/+234
- Delete the old "Tokenizer" code. - Write separate tests for the lexer distinct from the parser. - Switch the parser to use the new code. - New lexer error output has file:line numbers so e.g. Emacs can jump your editor to the syntax error. - The EvalEnv ($-interpolation) code is now part of the lexer as well.