Print syntactially invalid attribute names as strings.
This commit is contained in:
		
							parent
							
								
									a52fd0dbd0
								
							
						
					
					
						commit
						97da6d62f2
					
				
					 1 changed files with 19 additions and 9 deletions
				
			
		
							
								
								
									
										28
									
								
								nix-repl.cc
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								nix-repl.cc
									
										
									
									
									
								
							| 
						 | 
					@ -472,6 +472,19 @@ std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int m
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::ostream & printStringValue(std::ostream & str, const char * string) {
 | 
				
			||||||
 | 
					    str << "\"";
 | 
				
			||||||
 | 
					    for (const char * i = string; *i; i++)
 | 
				
			||||||
 | 
					        if (*i == '\"' || *i == '\\') str << "\\" << *i;
 | 
				
			||||||
 | 
					        else if (*i == '\n') str << "\\n";
 | 
				
			||||||
 | 
					        else if (*i == '\r') str << "\\r";
 | 
				
			||||||
 | 
					        else if (*i == '\t') str << "\\t";
 | 
				
			||||||
 | 
					        else str << *i;
 | 
				
			||||||
 | 
					    str << "\"";
 | 
				
			||||||
 | 
					    return str;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FIXME: lot of cut&paste from Nix's eval.cc.
 | 
					// FIXME: lot of cut&paste from Nix's eval.cc.
 | 
				
			||||||
std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int maxDepth, ValuesSeen & seen)
 | 
					std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int maxDepth, ValuesSeen & seen)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -491,14 +504,7 @@ std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int m
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case tString:
 | 
					    case tString:
 | 
				
			||||||
        str << "\"";
 | 
					        printStringValue(str, v.string.s);
 | 
				
			||||||
        for (const char * i = v.string.s; *i; i++)
 | 
					 | 
				
			||||||
            if (*i == '\"' || *i == '\\') str << "\\" << *i;
 | 
					 | 
				
			||||||
            else if (*i == '\n') str << "\\n";
 | 
					 | 
				
			||||||
            else if (*i == '\r') str << "\\r";
 | 
					 | 
				
			||||||
            else if (*i == '\t') str << "\\t";
 | 
					 | 
				
			||||||
            else str << *i;
 | 
					 | 
				
			||||||
        str << "\"";
 | 
					 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case tPath:
 | 
					    case tPath:
 | 
				
			||||||
| 
						 | 
					@ -546,7 +552,11 @@ std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int m
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (auto & i : sorted) {
 | 
					            for (auto & i : sorted) {
 | 
				
			||||||
                str << i.first << " = ";
 | 
					                if (isVarName(i.first))
 | 
				
			||||||
 | 
					                    str << i.first;
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    printStringValue(str, i.first.c_str());
 | 
				
			||||||
 | 
					                str << " = ";
 | 
				
			||||||
                if (hidden.find(i.first) != hidden.end())
 | 
					                if (hidden.find(i.first) != hidden.end())
 | 
				
			||||||
                    str << "«...»";
 | 
					                    str << "«...»";
 | 
				
			||||||
                else if (seen.find(i.second) != seen.end())
 | 
					                else if (seen.find(i.second) != seen.end())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue