* builtins.toXML: propagate the string context. This is a regression
from the old ATerm-based evaluator.
This commit is contained in:
		
							parent
							
								
									07ca66cf24
								
							
						
					
					
						commit
						f16fe2af8d
					
				
					 3 changed files with 12 additions and 5 deletions
				
			
		|  | @ -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; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue