about summary refs log tree commit diff
path: root/src/libexpr/eval.cc
AgeCommit message (Collapse)AuthorFilesLines
2010-04-16 * Updated some more primops.Eelco Dolstra1-10/+13
2010-04-16 * Improve sharing a bit.Eelco Dolstra1-4/+7
2010-04-16 * Remove some redundant tests.Eelco Dolstra1-3/+3
2010-04-16 * In an nested `with' where the inner with is a variable (`with ...;Eelco Dolstra1-1/+7
with someVar; ...'), the contents of the variable would be clobbered. (The attributes in the outer `with' were added to the variable.)
2010-04-15 * Store lists as lists of pointers to values rather than as lists ofEelco Dolstra1-16/+17
values. This improves sharing and gives another speed up. Evaluation of the NixOS system attribute is now almost 7 times faster than the old evaluator.
2010-04-14 * Better stats.Eelco Dolstra1-4/+13
2010-04-14 * Implemented inherit.Eelco Dolstra1-18/+12
2010-04-14 * Fix builtins.Eelco Dolstra1-11/+9
2010-04-14 * Refactoring: move variable uses to a separate class.Eelco Dolstra1-29/+13
2010-04-14 * Implemented withs.Eelco Dolstra1-14/+23
2010-04-14 * After parsing, compute level/displacement pairs for each variableEelco Dolstra1-36/+55
use site, allowing environments to be stores as vectors of values rather than maps. This should speed up evaluation and reduce the number of allocations.
2010-04-14 * Change the semantics of "with" so that inner "withs" takeEelco Dolstra1-23/+2
precedence, i.e. `with {x=1;}; with {x=2;}; x' evaluates to 2'. This has a simpler implementation and seems more natural. There doesn't seem to be any code in Nixpkgs or NixOS that relies on the old behaviour.
2010-04-13 * Use std::tr1::unordered_set instead of std::set for the symbolEelco Dolstra1-0/+1
table. This gives a 10% speed increase on `nix-instantiate /etc/nixos/nixos -A system --readonly-mode'.
2010-04-13 * Evaluate lets directly (i.e. without desugaring to `rec { attrs...;Eelco Dolstra1-0/+25
<let-body> = e; }.<let-body>). This prevents the unnecessary allocation of an attribute set.
2010-04-13 * Use a symbol table to represent identifiers and attribute namesEelco Dolstra1-19/+26
efficiently. The symbol table ensures that there is only one copy of each symbol, thus allowing symbols to be compared efficiently using a pointer equality test.
2010-04-12 * Finished the ATerm-less parser.Eelco Dolstra1-3/+30
2010-04-12 * Indented strings.Eelco Dolstra1-0/+6
2010-04-12 * More missing constructs.Eelco Dolstra1-69/+59
2010-04-12 * Don't use ATerms for the abstract syntax trees anymore. NotEelco Dolstra1-223/+244
finished yet.
2010-04-12 * Hack to support builderDefs expressions.Eelco Dolstra1-1/+7
2010-04-12 * Doh.Eelco Dolstra1-1/+1
2010-04-09 * Keep more statistics about stack space usage.Eelco Dolstra1-39/+66
* Reduce stack space usage.
2010-04-08 * Remove a lot of dead code.Eelco Dolstra1-492/+8
2010-04-08 * Fix blackholing. If evaluation fails due to an assertion failure,Eelco Dolstra1-2/+8
then the blackhole has to be removed to ensure that repeated evaluation of the same value gives an assertion failure again rather than an "infinite recursion" error.
2010-04-07 * Update autoCallFunction() and findAlongAttrPath().Eelco Dolstra1-27/+37
2010-04-07 * Implemented the primops necessary for generating the NixOS manual.Eelco Dolstra1-24/+28
2010-04-06 * In eval(), don't use the target value `v' as a temporary.Eelco Dolstra1-13/+17
Overwriting `v' breaks when the expression evaluation to an assertion failure or throw.
2010-04-01 * Quick hack to make coerceToString work more or less correctly onEelco Dolstra1-1/+4
nested lists. `nix-instantiate' can now evaluate the NixOS system derivation attribute correctly (in 2.1s on my laptop vs. 6.2s for the trunk).
2010-04-01 * Improve sharing.Eelco Dolstra1-3/+2
2010-04-01 * Functions are incomparable.Eelco Dolstra1-6/+13
2010-04-01 * Make `derivation' lazy again for performance. It also turns outEelco Dolstra1-9/+1
that there are some places in Nixpkgs (php_configurable / composableDerivation, it seems) that call `derivation' with incorrect arguments (namely, the `name' attribute missing) but get away with it because of laziness.
2010-03-31 * Fixed the trace primop and path comparison.Eelco Dolstra1-0/+3
* Removed exprToString and stringToExpr because there is no ATerm representation to work on anymore (and exposing the internals of the evaluator like this is not a good idea anyway).
2010-03-31 * Handle string contexts. `nix-instantiate' can now correctly computeEelco Dolstra1-63/+25
the `firefoxWrapper' attribute in Nixpkgs, and it's about 3 times faster than the trunk :-)
2010-03-31 * Cache parse trees to prevent repeated parsing of imported NixEelco Dolstra1-1/+8
expressions.
2010-03-31 * Implemented derivations.Eelco Dolstra1-10/+31
2010-03-31 * Implemented `rec { inherit ...; }'.Eelco Dolstra1-0/+14
2010-03-31 * Compare nulls.Eelco Dolstra1-2/+5
2010-03-30 * More primops.Eelco Dolstra1-4/+9
2010-03-30 * More operators / primops.Eelco Dolstra1-143/+105
2010-03-30 * More primops.Eelco Dolstra1-128/+32
2010-03-30 * More primops.Eelco Dolstra1-8/+24
2010-03-30 * Implemented `map'.Eelco Dolstra1-100/+110
2010-03-30 * Make `import' work.Eelco Dolstra1-33/+105
2010-03-29 * Started integrating the new evaluator.Eelco Dolstra1-19/+545
2010-03-25 * Simplify @-patterns: only `{attrs}@name' or `name@{attrs}' are nowEelco Dolstra1-10/+5
allowed. So `name1@name2', `{attrs1}@{attrs2}' and so on are now no longer legal. This is no big loss because they were not useful anyway. This also changes the output of builtins.toXML for @-patterns slightly.
2009-05-12 * Allow unsafe (unspecified) comparisons between attrsets unlessEelco Dolstra1-1/+7
NIX_NO_UNSAFE_EQ is set, for now.
2009-05-11 * Disallow equality tests between attribute sets. This was alwaysEelco Dolstra1-6/+42
broken, but now the evaluator checks for it to prevent Nix expressions from relying on undefined behaviour. Equality tests are implemented using a shallow pointer equality test between ATerms. However, because attribute sets are lazy and contain position information, this can give false positives. For instance, previously let y = {x = 1;}; in y == y evaluated to true, while the equivalent expression {x = 1;} == {x = 1;} evaluated to false. So disallow these tests for now. (Eventually we may want to implement deep equality tests for attribute sets, like lib.eqStrict.) * Idem: disallow comparisons between functions. * Implemented deep comparisons of lists. This had the same problem as attribute sets - the elements in the list weren't evaluated. For instance, ["xy"] == [("x" + "y")] evaluated to false. Now it works properly.
2008-08-26 * Require that __overrides is defined as a non-recursive attributeEelco Dolstra1-1/+1
(which means it can only be defined via "inherit"), otherwise we get scoping bugs, since __overrides can't be recursive (or at least, it would be hard).
2008-08-14 Fixing an obvious typo in override code. I do not know whether it works ↵Michael Raskin1-1/+1
correctly after the change, but at least it ca nbe compiled now.
2008-08-14 * Another experimental feature: a way to truly override attributes inEelco Dolstra1-2/+24
a rec. This will be very useful to allow end-user customisation of all-packages.nix, for instance globally overriding GCC or some other dependency. The // operator doesn't cut it: you could replace the "gcc" attribute, but all other attributes would continue to reference the original value due to the substitution semantics of rec. The syntax is a bit hacky but this is to allow backwards compatibility.