aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
AgeCommit message (Collapse)Author
2018-07-21prim_foldlStrict: call forceValue() before value is copiedvolth
forceValue() were called after a value is copied effectively forcing only one of the copies keeping another copy not evaluated. This resulted in its evaluation of the same lazy value more than once (the number of hits is not big though)
2018-07-11Fix build on 32-bit systems and macOSEelco Dolstra
Apparently, on macOS, 'long' != 'int64_t'. https://hydra.nixos.org/build/77100756
2018-07-11Shup up a warningEelco Dolstra
2018-07-11Remove unused function printStats2()Eelco Dolstra
Closes #2282.
2018-07-07prim_map, prim_genList: no need to force function argument which will be ↵volth
stored in mkApp
2018-07-06prim_mapAttrs: `f' must be evaluated lazily to avoid infinite recursionvolth
2018-07-05prim_concatMap: no need to force valuevolth
2018-07-05prim_mapAttrs: must be lazy to avoid infinite recursionvolth
2018-07-05prim_concatMap: allocate intermediate list on stackvolth
2018-07-05primops.cc: fix commentvolth
2018-07-05lib.concatMap and lib.mapAttrs to be builtinsvolth
2018-07-03Include cpptoml for build simplicityEelco Dolstra
2018-07-03Add a fromTOML primopEelco Dolstra
This is primarily useful for processing Cargo.lock files.
2018-07-03Store floating point numbers in double precisionEelco Dolstra
Even on 32-bit systems, Value has enough space to hold a double.
2018-06-12GC_malloc -> GC_MALLOCEelco Dolstra
This makes it possible to build with -DGC_DEBUG.
2018-06-12Don't scan for roots in dynamic librariesEelco Dolstra
This reduces the risk of object liveness misdetection. For example, Glibc has an internal variable "mp_" that often points to a Boehm object, keeping it alive unnecessarily. Since we don't store any actual roots in global variables, we can just disable data segment scanning. With this, the max RSS doing 100 evaluations of nixos.tests.firefox.x86_64-linux.drvPath went from 718 MiB to 455 MiB.
2018-06-12Add temporary statsEelco Dolstra
2018-06-12Cache parse treesEelco Dolstra
This prevents EvalState::resetFileCache() from parsing everything all over again.
2018-06-12Remove duplicate definition of allocBytes()Eelco Dolstra
2018-05-30Fix static assertion failure on 32-bit systemsEelco Dolstra
2018-05-30Move evaluator-specific settings out of libstoreEelco Dolstra
2018-05-28Merge pull request #2187 from bgamari/stoi-exceptionsEelco Dolstra
json-to-value: Use strtol instead of strtoi
2018-05-26json-to-value: Use strtol instead of strtoiBen Gamari
NixInt is long, so strtoi is too restrictive.
2018-05-26eval.cc: add message to static_assert, message can be omitted w/c++17Will Dietz
2018-05-24Merge pull request #2157 from volth/bitwiseEelco Dolstra
add builtins: __bitAnd, __bitOr, __bitXor
2018-05-22Make Env self-describingEelco Dolstra
If the Env denotes a 'with', then values[0] may be an Expr* cast to a Value*. For code that generically traverses Values/Envs, it's useful to know this.
2018-05-22Memoise checkSourcePath()Eelco Dolstra
This prevents hydra-eval-jobs from statting the same files over and over again.
2018-05-16add `mod' and bitwise builtins: camel-case function namesvolth
2018-05-16add `mod' and bitwise builtins: remove `mod' and shiftsvolth
2018-05-16add `mod' and bitwise builtins: remove infix functionsvolth
2018-05-12add `mod' and bitwise builtinsvolth
2018-05-11Don't return negative numbers from the flex tokenizerEelco Dolstra
Fixes #1374. Closes #2129.
2018-05-11Revert "Throw a specific error for incomplete parse errors."Eelco Dolstra
This reverts commit 6498adb002bcf7e715afe46c23b8635d4592c156. We don't actually use IncompleteParseError in 'nix repl'.
2018-05-09In restricted eval mode, allow access to the closure of store pathsEelco Dolstra
E.g. this makes nix eval --restrict-eval -I /nix/store/foo '(builtins.readFile "/nix/store/foo/symlink/bla")' (where /nix/store/foo/symlink is a symlink to another path in the closure of /nix/store/foo) succeed. This fixes a regression in Hydra compared to Nix 1.x (where there were no restrictions at all on access to the Nix store).
2018-05-02Fix some random -Wconversion warningsEelco Dolstra
2018-04-23Merge branch 'pos-crash-fix' of git://github.com/dezgeg/nixShea Levy
2018-04-18parser: Allow mixed nested and top-level attrpathsFélix Baylac-Jacqué
Fixes #2077.
2018-04-17isFunction: True on primops.Shea Levy
Fixes #2073
2018-04-09Export required C++ version in pkgconfig.Shea Levy
2018-04-09Make prim_exec and prim_importNative available to pluginsShea Levy
2018-04-03libexpr: Make unsafeGetAttrPos not crash on noPosTuomas Tynkkynen
Currently e.g. `builtins.unsafeGetAttrPos "abort" builtins` will eventually segfault because pos->file is an unset Symbol. Found by afl-fuzz.
2018-03-19Shut up signedness warningEelco Dolstra
2018-03-16Merge pull request #1939 from dezgeg/lexer-fixEelco Dolstra
libexpr: Recognize newline in more places in lexer
2018-03-14Catch more possible instances of passing NULL to memcpy.Shea Levy
Actually fixes #1976.
2018-03-14concatLists: Don't pass NULL pointers to memcpy.Shea Levy
This is UB, even if the size is 0. See #1976. Fixes #1976.
2018-03-14Fix compatibility with latest boost::formatEelco Dolstra
2018-03-13fetchGit: Fix debug messageGuillaume Maudoux
2018-03-09Modified MakeBinOp to no longer produce its name using concatenation and "##".Tim Engler
Doing so prevents emacs tags from working, as well as makes the code extremely confusing for a newbie. In the prior state, if someone wants to find the definition of "ExprApp" for example, a grep through the code reveals nothing. Since the definition could be hiding in numerous ".h" files, it's really difficult to find. This personally took me several hours to figure out.
2018-03-02libexpr: Recognize newline in more places in lexerTuomas Tynkkynen
Flex's regexes have an annoying feature: the dot matches everything except a newline. This causes problems for expressions like: "${0}\ " where the backslash-newline combination matches this rule instead of the intended one mentioned in the comment: <STRING>\$|\\|\$\\ { /* This can only occur when we reach EOF, otherwise the above (...|\$[^\{\"\\]|\\.|\$\\.)+ would have triggered. This is technically invalid, but we leave the problem to the parser who fails with exact location. */ return STR; } However, the parser actually accepts the resulting token sequence ('"' DOLLAR_CURLY 0 '}' STR '"'), which is a problem because the lexer rule didn't assign anything to yylval. Ultimately this leads to a crash when dereferencing a NULL pointer in ExprConcatStrings::bindVars(). The fix does change the syntax of the language in some corner cases but I think it's only turning previously invalid (or crashing) syntax to valid syntax. E.g. "a\ b" and ''a''\ b'' were previously syntax errors but now both result in "a\nb". Found by afl-fuzz.
2018-02-28fetchGit: use "HEAD" as default refWill Dietz