forked from lix-project/lix
6d6c68c0d2
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.
96 lines
2.9 KiB
Modula-2
96 lines
2.9 KiB
Modula-2
init initNixExprHelpers
|
|
|
|
Pos | string int int | Pos |
|
|
NoPos | | Pos |
|
|
|
|
Function | ATermList Expr Pos | Expr |
|
|
Function1 | string Expr Pos | Expr |
|
|
Assert | Expr Expr Pos | Expr |
|
|
With | Expr Expr Pos | Expr |
|
|
If | Expr Expr Expr | Expr |
|
|
OpNot | Expr | Expr |
|
|
OpEq | Expr Expr | Expr |
|
|
OpNEq | Expr Expr | Expr |
|
|
OpAnd | Expr Expr | Expr |
|
|
OpOr | Expr Expr | Expr |
|
|
OpImpl | Expr Expr | Expr |
|
|
OpUpdate | Expr Expr | Expr |
|
|
SubPath | Expr Expr | Expr |
|
|
OpHasAttr | Expr string | Expr |
|
|
OpPlus | Expr Expr | Expr |
|
|
OpConcat | Expr Expr | Expr |
|
|
ConcatStrings | ATermList | Expr |
|
|
Call | Expr Expr | Expr |
|
|
Select | Expr string | Expr |
|
|
Var | string | Expr |
|
|
Int | int | Expr |
|
|
|
|
# Strings in the evaluator carry a so-called `context' (the ATermList)
|
|
# which is a list of strings representing store paths. This is to
|
|
# allow users to write things like
|
|
#
|
|
# "--with-freetype2-library=" + freetype + "/lib"
|
|
#
|
|
# where `freetype' is a derivation (or a source to be copied to the
|
|
# store). If we just concatenated the strings without keeping track
|
|
# of the referenced store paths, then if the string is used as a
|
|
# derivation attribute, the derivation will not have the correct
|
|
# dependencies in its inputDrvs and inputSrcs.
|
|
#
|
|
# The semantics of the context is as follows: when a string with
|
|
# context C is used as a derivation attribute, then the derivations in
|
|
# C will be added to the inputDrvs of the derivation, and the other
|
|
# store paths in C will be added to the inputSrcs of the derivations.
|
|
#
|
|
# For canonicity, the store paths should be in sorted order.
|
|
Str | string ATermList | Expr |
|
|
Str | string | Expr | ObsoleteStr
|
|
|
|
# Internal to the parser, doesn't occur in ASTs.
|
|
IndStr | string | Expr |
|
|
|
|
# A path is a reference to a file system object that is to be copied
|
|
# to the Nix store when used as a derivation attribute. When it is
|
|
# concatenated to a string (i.e., `str + path'), it is also copied and
|
|
# the resulting store path is concatenated to the string (with the
|
|
# store path in the context). If a string or path is concatenated to
|
|
# a path (i.e., `path + str' or `path + path'), the result is a new
|
|
# path (if the right-hand side is a string, the context must be
|
|
# empty).
|
|
Path | string | Expr |
|
|
|
|
List | ATermList | Expr |
|
|
BlackHole | | Expr |
|
|
Undefined | | Expr |
|
|
Removed | | Expr |
|
|
PrimOp | int ATermBlob ATermList | Expr |
|
|
Attrs | ATermList | Expr |
|
|
Closed | Expr | Expr |
|
|
Rec | ATermList ATermList | Expr |
|
|
Bool | ATerm | Expr |
|
|
Null | | Expr |
|
|
|
|
Bind | string Expr Pos | ATerm |
|
|
Bind | string Expr | ATerm | ObsoleteBind
|
|
Inherit | Expr ATermList Pos | ATerm |
|
|
|
|
Scope | | Expr |
|
|
|
|
Formal | string ValidValues DefaultValue | ATerm |
|
|
|
|
ValidValues | ATermList | ValidValues |
|
|
UnrestrictedValues | | ValidValues |
|
|
|
|
DefaultValue | Expr | DefaultValue |
|
|
NoDefaultValue | | DefaultValue |
|
|
|
|
True | | ATerm |
|
|
False | | ATerm |
|
|
|
|
PrimOpDef | int ATermBlob | ATerm |
|
|
|
|
AttrRHS | Expr Pos | ATerm |
|
|
|
|
eTrue = makeBool(makeTrue())
|
|
eFalse = makeBool(makeFalse())
|