* New primop `unsafeDiscardStringContext' to get rid of string

contexts.  Needed to prevent unnecessary dependencies when building
  the NixOS manual.
This commit is contained in:
Eelco Dolstra 2008-01-04 14:22:49 +00:00
parent 895c953817
commit 7d0f6aed59
3 changed files with 17 additions and 0 deletions

View file

@ -942,6 +942,14 @@ static Expr prim_stringLength(EvalState & state, const ATermVector & args)
} }
static Expr prim_unsafeDiscardStringContext(EvalState & state, const ATermVector & args)
{
PathSet context;
string s = coerceToString(state, args[0], context);
return makeStr(s, PathSet());
}
/************************************************************* /*************************************************************
* Primop registration * Primop registration
*************************************************************/ *************************************************************/
@ -1009,6 +1017,8 @@ void EvalState::addPrimOps()
addPrimOp("toString", 1, prim_toString); addPrimOp("toString", 1, prim_toString);
addPrimOp("__substring", 3, prim_substring); addPrimOp("__substring", 3, prim_substring);
addPrimOp("__stringLength", 1, prim_stringLength); addPrimOp("__stringLength", 1, prim_stringLength);
addPrimOp("__unsafeDiscardStringContext", 1, prim_unsafeDiscardStringContext);
} }

View file

@ -0,0 +1 @@
Str("foo eval-okay-context.nix bar",[])

View file

@ -0,0 +1,6 @@
let s = "foo ${builtins.substring 33 100 (baseNameOf ./eval-okay-context.nix)} bar";
in
if s == "foo eval-okay-context.nix bar"
then abort "context not discarded"
else builtins.unsafeDiscardStringContext s