about summary refs log tree commit diff
path: root/src/libexpr/lexer.l
AgeCommit message (Collapse)AuthorFilesLines
2010-05-06 * Store attribute positions in the AST and report duplicate attributeEelco Dolstra1-5/+8
errors with position info. * For all positions, use the position of the first character of the first token, rather than the last character of the first token plus one.
2010-04-21 * Fix the interpretation of ''\<character> in indented strings.Eelco Dolstra1-1/+1
2010-04-12 * Indented strings.Eelco Dolstra1-9/+10
2010-04-12 * More missing constructs.Eelco Dolstra1-3/+1
2010-04-12 * Don't use ATerms for the abstract syntax trees anymore. NotEelco Dolstra1-12/+12
finished yet.
2010-04-12 * Don't use ATerms to represent integers in the lexer.Eelco Dolstra1-1/+1
2008-08-14 * Added an experimental feature suggested by Andres: ellipses ("...")Eelco Dolstra1-0/+1
in attribute set pattern matches. This allows defining a function that takes *at least* the listed attributes, while ignoring additional attributes. For instance, {stdenv, fetchurl, fuse, ...}: stdenv.mkDerivation { ... }; defines a function that requires an attribute set that contains the specified attributes but ignores others. The main advantage is that we can then write in all-packages.nix aefs = import ../bla/aefs pkgs; instead of aefs = import ../bla/aefs { inherit stdenv fetchurl fuse; }; This saves a lot of typing (not to mention not having to update all-packages.nix with purely mechanical changes). It saves as much typing as the "args: with args;" style, but has the advantage that the function arguments are properly declared (not implicit in what the body of the "with" uses).
2008-02-05 * Fix the parsing ofEelco Dolstra1-1/+5
'' '${foo}' '' where the antiquote should work as expected, instead of giving the string "'${foo}'".
2007-12-06 * Syntax to escape '', ${.Eelco Dolstra1-0/+12
2007-11-30 * Added a new kind of multi-line string literal delimited by twoEelco Dolstra1-0/+15
single quotes. Example (from NixOS): job = '' start on network-interfaces start script rm -f /var/run/opengl-driver ${if videoDriver == "nvidia" then "ln -sf ${nvidiaDrivers} /var/run/opengl-driver" else if cfg.driSupport then "ln -sf ${mesa} /var/run/opengl-driver" else "" } rm -f /var/log/slim.log end script ''; This style has two big advantages: - \, ' and " aren't special, only '' and ${. So you get a lot less escaping in shell scripts / configuration files in Nixpkgs/NixOS. The delimiter '' is rare in scripts (and can usually be written as ""). ${ is also fairly rare. Other delimiters such as <<...>>, {{...}} and <|...|> were also considered but this one appears to have the fewest drawbacks (thanks Martin). - Indentation is intelligently stripped so that multi-line strings can follow the nesting structure of the containing Nix expression. E.g. in the example above 6 spaces are stripped from the start of each line. This prevents unnecessary indentation in generated files (which sometimes even breaks things). See tests/lang/eval-okay-ind-string.nix for some examples.
2006-10-16 * Big cleanup of the semantics of paths, strings, contexts, stringEelco Dolstra1-1/+1
concatenation and string coercion. This was a big mess (see e.g. NIX-67). Contexts are now folded into strings, so that they don't cause evaluation errors when they're not expected. The semantics of paths has been clarified (see nixexpr-ast.def). toString() and coerceToString() have been merged. Semantic change: paths are now copied to the store when they're in a concatenation (and in most other situations - that's the formalisation of the meaning of a path). So "foo " + ./bla evaluates to "foo /nix/store/hash...-bla", not "foo /path/to/current-dir/bla". This prevents accidental impurities, and is more consistent with the treatment of derivation outputs, e.g., `"foo " + bla' where `bla' is a derivation. (Here `bla' would be replaced by the output path of `bla'.)
2006-10-02 * Finally, a real "let" syntax: `let x = ...; ... z = ...; in ...'.Eelco Dolstra1-0/+1
2006-10-02 * Hack for Bison 2.3 compatability.Eelco Dolstra1-0/+1
2006-09-04 * Compile the lexer as C++ code. Remove all the redundant C/C++Eelco Dolstra1-6/+38
marshalling code.
2006-09-04 * Use a proper namespace.Eelco Dolstra1-2/+6
* Optimise header file usage a bit. * Compile the parser as C++.
2006-09-01 * Allow "$" in strings as long as they are not followed by "{". (TooEelco Dolstra1-1/+5
bad flex doesn't have lexical restrictions, the current solution isn't quite right...)
2006-08-16 * Handle carriage returns. Fixes NIX-53.Eelco Dolstra1-2/+6
2006-05-01 * Disallow unescaped $ in string literals.Eelco Dolstra1-4/+1
2006-05-01 * String interpolation. Expressions likeEelco Dolstra1-9/+32
"--with-freetype2-library=" + freetype + "/lib" can now be written as "--with-freetype2-library=${freetype}/lib" An arbitrary expression can be enclosed within ${...}, not just identifiers. * Escaping in string literals: \n, \r, \t interpreted as in C, any other character following \ is interpreted as-is. * Newlines are now allowed in string literals.
2005-07-25 * Added a list concatenation operator:Eelco Dolstra1-0/+1
[1 2 3] ++ [4 5 6] => [1 2 3 4 5 6]
2004-10-27 * Bug fix in parsing of /* ... */ comments; due to longest matchEelco Dolstra1-1/+1
regexp there could be only one such comment per file.
2004-10-25 * New language feature: with expressions.Eelco Dolstra1-0/+1
The expression `with E1; E2' evaluates to E2 with all bindings in the attribute set E1 substituted. E.g., with {x = 123;}; x evaluates to 123. That is, the attribute set E1 is in scope in E2. This is particularly useful when importing files containing lots definitions. E.g., instead of let { inherit (import ./foo.nix) a b c d e f; body = ... a ... f ...; } we can now say with import ./foo.nix; ... a ... f ... I.e., we don't have to say what variables should be brought into scope.
2004-03-28 * Added plain lambdas, e.g., `let { id = x: x; const = x: y: x; }'.Eelco Dolstra1-1/+1
`bla:' is now no longer parsed as a URL. * Re-enabled support for the `args' attribute in derivations to specify command line arguments to the builder, e.g., ... builder = /usr/bin/python; args = ["-c" ./builder.py]; ...
2004-02-04 * An attribute set update operator (//). E.g.,Eelco Dolstra1-0/+1
{x=1; y=2; z=3;} // {y=4;} => {x=1; y=4; z=3;}
2004-02-02 * Added syntactic sugar to the construction of attribute sets toEelco Dolstra1-0/+1
`inherit' variables from the surrounding lexical scope. E.g., {stdenv, libfoo}: derivation { builder = ./bla; inherit stdenv libfoo; xyzzy = 1; } is equivalent to {stdenv, libfoo}: derivation { builder = ./bla; stdenv = stdenv; libfoo = libfoo; xyzzy = 1; } Note that for mutually recursive attribute set definitions (`rec {...}'), this also works, that is, `rec {inherit x;}' is equivalent to `let {fresh = x; body = rec {x = fresh;};}', *not* `rec {x = x}'.
2004-01-30 * Parser numbers again.Eelco Dolstra1-1/+4
* Include missing files in distributions.
2004-01-30 * Replaced the SDF parser by a substantially faster Bison/FlexEelco Dolstra1-0/+78
parser (roughly 80x faster). The absolutely latest version of Bison (1.875c) is required for reentrant GLR support, as well as a recent version of Flex (say, 2.5.31). Note that most Unix distributions ship with the prehistoric Flex 2.5.4, which doesn't support reentrancy.