* builtins.toXML: propagate the string context. This is a regression

from the old ATerm-based evaluator.
This commit is contained in:
Eelco Dolstra 2010-06-10 10:29:50 +00:00
parent 07ca66cf24
commit f16fe2af8d
3 changed files with 12 additions and 5 deletions

View file

@ -902,12 +902,18 @@ string EvalState::forceString(Value & v)
} }
string EvalState::forceString(Value & v, PathSet & context) void copyContext(const Value & v, PathSet & context)
{ {
string s = forceString(v);
if (v.string.context) if (v.string.context)
for (const char * * p = v.string.context; *p; ++p) for (const char * * p = v.string.context; *p; ++p)
context.insert(*p); context.insert(*p);
}
string EvalState::forceString(Value & v, PathSet & context)
{
string s = forceString(v);
copyContext(v, context);
return s; return s;
} }
@ -938,9 +944,7 @@ string EvalState::coerceToString(Value & v, PathSet & context,
string s; string s;
if (v.type == tString) { if (v.type == tString) {
if (v.string.context) copyContext(v, context);
for (const char * * p = v.string.context; *p; ++p)
context.insert(*p);
return v.string.s; return v.string.s;
} }

View file

@ -161,6 +161,8 @@ void mkString(Value & v, const char * s);
void mkString(Value & v, const string & s, const PathSet & context = PathSet()); void mkString(Value & v, const string & s, const PathSet & context = PathSet());
void mkPath(Value & v, const char * s); void mkPath(Value & v, const char * s);
void copyContext(const Value & v, PathSet & context);
typedef std::map<Path, Hash> DrvHashes; typedef std::map<Path, Hash> DrvHashes;

View file

@ -69,6 +69,7 @@ static void printValueAsXML(EvalState & state, bool strict, bool location,
case tString: case tString:
/* !!! show the context? */ /* !!! show the context? */
copyContext(v, context);
doc.writeEmptyElement("string", singletonAttrs("value", v.string.s)); doc.writeEmptyElement("string", singletonAttrs("value", v.string.s));
break; break;