<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 13px/normal Monaco; min-height: 17px; "><font class="Apple-style-span" face="Times">I've been working on reading and writing yaml encoded documents for the lld project. Michael Spencer added the YAMLParser.h functionality to llvm/Support to help in parsing yaml documents. That parser greatly helps at the syntax level, but you still need to hand write a lot of semantic checking and then convert the various node types in to something usable. </font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 13px/normal Monaco; min-height: 17px; "><font class="Apple-style-span" face="Times"><br></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 13px/normal Monaco; min-height: 17px; "><font class="Apple-style-span" face="Times">I've developed a layer on top of YAMLParser.h I'm calling YAMLIO.h (yaml I/O) which unifies parsing and writing yaml documents and handles most semantic checking, and is very easy to use! Basically, you define your yaml document schema as a mix of C++ structs and vectors, and YAMLIO does the rest. Lets look at a quick example first. Suppose this is your yaml document:</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 13px/normal Monaco; min-height: 17px; "><font class="Apple-style-span" face="Times"><br></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">- name: Tom</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> age: 20</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">- name: Richard</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> age: 27</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> speaks-french: true</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">- name: Harry</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> age: 23</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 13px/normal Monaco; min-height: 17px; "><br class=""></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 13px/normal Times; ">To read or write such yaml data you would define a C++ type: for the mapping (a struct), one for the sequence of those mappings (a typedef). In the struct you add a yamlMapping() method which associates mapping keys with field names and the fields's type. (Note: the yamlMapping() method was inspired by the boost serialize() method).</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 13px/normal Times; min-height: 16px; "><br class=""></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::Sequence;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::DocumentList;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::IO;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::Input;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::Output;</span></div><div class=""><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::YamlMap;</span></div><div><br></div></div><div class="">struct Person : public YamlMap {</div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> StringRef name;</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> uint8_t age;</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> bool speaks_french;</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br class=""></span></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> void yamlMapping(IO &io) {</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> requiredKey(io, </span><span class="Apple-style-span" style="font-size: 12px; ">name</span><span class="Apple-style-span" style="font-size: 12px; ">, "</span><span class="Apple-style-span" style="font-size: 12px; ">name</span><span class="Apple-style-span" style="font-size: 12px; ">");</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> </span><span class="Apple-style-span" style="font-size: 12px; ">requiredKey(io, </span><span class="Apple-style-span" style="font-size: 12px; ">age</span><span class="Apple-style-span" style="font-size: 12px; ">, "age");</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> </span><span class="Apple-style-span" style="font-size: 12px; ">optionalKey(io, </span><span class="Apple-style-span" style="font-size: 12px; ">speaks_french</span><span class="Apple-style-span" style="font-size: 12px; ">, "</span><span class="Apple-style-span" style="font-size: 12px; ">speaks-french</span><span class="Apple-style-span" style="font-size: 12px; ">");</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> }</span></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">};</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br class=""></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">typedef Sequence<Person> </span><span class="Apple-style-span" style="font-size: 12px; ">Person</span><span class="Apple-style-span" style="font-size: 12px; ">List;</span></div><div class="" style="font-size: 12px; "><span class="Apple-style-span" style="font-size: 8px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">typedef DocumentList<<span class="Apple-style-span" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">Person</span><span class="Apple-style-span" style="font-size: 12px; ">List</span></span>> PersonDocumentList</span><span class="Apple-style-span" style="font-size: 12px; ">;</span></div><div style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br></span></div></span></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">That's it. The yamlMapping() method is processed by both the Input and Output to properly handle key-values in a yaml mapping. The Sequence and DocumentList templates are subclasses of std::vector<>. </span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "><br class=""></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">The data structures are regular structs and vectors. An example of creating them:</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "><br></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> // build a person</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><span class="Apple-style-span" style="font-family: Times; "><span class="Apple-style-span" style="font-family: Monaco; "><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "> </font><span class="Apple-style-span" style="font-size: 12px; ">Person a;</span></div><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "> a.name = "Tom";</font></div><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "> a.age = 27;</font></div><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "> a.speaks_french = false;</font></div><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "> // build sequence of persons</font></div><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "> </font><span class="Apple-style-span" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">Person</span><span class="Apple-style-span" style="font-size: 12px; ">List persons.</span></span></div><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "> persons.push_back(a);</font></div><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; "><br></font></div></span></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">To write a yaml documents your code looks like:</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "><br class=""></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class="" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">void dump(</span><span class="Apple-style-span" style="font-size: 10px; "><span class="Apple-style-span" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">Person</span><span class="Apple-style-span" style="font-size: 12px; ">List &persons,</span></span> </span><span class="Apple-style-span" style="font-size: 12px; ">raw_ostream &out) {</span></div><div class=""><span class="Apple-style-span" style="font-size: 12px; "> Output yout(out);</span></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> </span><span class="Apple-style-span" style="font-size: 12px; ">yout</span><span class="Apple-style-span" style="font-size: 12px; "> << persons</span><span class="Apple-style-span" style="font-size: 12px; ">;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">}</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><span class="Apple-style-span" style="font-size: 12px; "><span class="Apple-style-span" style="font-size: 8px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">To read a yaml document your code looks like:</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "><br class=""></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><div class="" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">void readYaml(StringRef filePath) {</span></div><div class="" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> Input yin(filePath);</span></div></div></div></span></span><span class="Apple-style-span" style="font-size: 12px; "> DocumentList<PersonList> docList;</span><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> yin >> docList; </span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> // if there was an error parsing, message already printed out</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> if ( </span><span class="Apple-style-span" style="font-size: 12px; ">yin</span><span class="Apple-style-span" style="font-size: 12px; ">.error() ) </span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> return;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> </span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> for(</span><span class="Apple-style-span" style="font-size: 12px; ">PersonList</span><span class="Apple-style-span" style="font-size: 12px; "> &pl : </span><span class="Apple-style-span" style="font-size: 12px; ">docList</span><span class="Apple-style-span" style="font-size: 12px; ">) {</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> for(</span><span class="Apple-style-span" style="font-size: 12px; ">Person</span><span class="Apple-style-span" style="font-size: 12px; "> &person : </span><span class="Apple-style-span" style="font-size: 12px; ">pl</span><span class="Apple-style-span" style="font-size: 12px; ">) {</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> // process each Person</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> }</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> }</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">}</span></div><div style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br></span></div></div></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px;">YAMLIO also handles semantic error checking for you. For instance if your document contained an illegal value for a key like:</span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px;"><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span">- name: Richard</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> age: 27</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> speaks-french: oui</div><div class="" style="font-family: Times; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div><div class="" style="font-family: Times; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; ">You would get an error like:</span></font></div><div class="" style="font-family: Times; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div>YAML:6:18: error: invalid boolean<font class="Apple-style-span"><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> speaks-french: oui</div></font><div class="" style="font-family: Times; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> ^~~~</div><div><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div><div style="font-family: Times; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; ">If the document has an key not in your schema like:</span></font></div><div class="" style="font-family: Times; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span">- name: Tom</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> pets: true</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> age: 20</div><div><br></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; ">You would get an error like:</span></font></div><div style="font-family: Times; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div><font class="Apple-style-span" face="Times"></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">YAML:3:18: error: unknown key 'pets'</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> pets: true</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> ^~~~</div><div style="font-size: 13px; "><br></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><div class="" style="font-size: 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; ">As you see, the model of YAMLIO is that you define intermediate data structures which define your yaml schema. The job of YAML IO is to convert between those intermediate data structures and yaml documents. YAMLIO most likely won't be able to convert between your existing native data structures and yaml. You will probably need to define new intermediate data structures (the schema) and then write code to convert between your native data structures and the intermediate ones. But that glue code is super simple, mostly just copying fields and iterating lists. All the yaml specific work (formatting and semantic checking) is done by YAMLIO.</span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px;"><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><font class="Apple-style-span" face="Times" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><font class="Apple-style-span" face="Times" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 13px; ">In the example above the scalar types </span></font><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">(strings, integers, booleans) </span><font class="Apple-style-span" face="Times" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 13px; ">were all built-in types . YAMLIO also has support for enumerations and bit masks. </span></font><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">Here is an example of a simple enumeration (color) and a bit mask set (flags). Suppose your data structures already defines Colors and Flags:</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><font class="Apple-style-span" face="Times" style="font-size: 8px; "><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-style-span" style="font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> enum Colors {</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> cRed,</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> cBlue,</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> cGreen</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> };</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> #define FlagBig 1</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><span class="Apple-style-span" style="font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> #define FlagLittle 2</span></div></span></span><span class="Apple-style-span" style="font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> #define FlagRound 4</span></div></span><span class="Apple-style-span" style="font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> #define FlagPointy 8</span></div></span></div></span><span class="Apple-style-span" style="font-size: 12px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br></span></div></span><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">And you want the yaml documents to use human readable values for colors and flags, rather than just the integer value used internally. To handle that, you define conversion tables and hand them to YAMLIO. For instance: </span><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> </span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::IO;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::Input;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::Output;</span></div><div class="" style="font-size: 12px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::YamlMap;</span></div></div><span class="Apple-style-span" style="font-size: 12px; "><div class=""><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::UniqueValue;</span></div></div></span><span class="Apple-style-span" style="font-size: 12px; "><div class=""><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-family: Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">using llvm::yaml::BitValue;</span></div></div></span><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><br></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; ">static const UniqueValue<Colors> colorConversions[] = {</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {</span><span class="Apple-style-span" style="font-size: 12px; ">cRed</span><span class="Apple-style-span" style="font-size: 12px; ">, "red"},</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {cBlue, "blue"},</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {cGreen, "green"},</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {cRed, NULL} // default value for optional keys</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">};</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><span class="Apple-style-span" style="font-size: 12px; "><span class="Apple-style-span" style="font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; ">static const BitValue<uint32_t> flagConversions[] = {</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {</span><span class="Apple-style-span" style="font-size: 12px; ">FlagBig</span><span class="Apple-style-span" style="font-size: 12px; ">, "big"},</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {FlagLittle, "little"},</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {FlagRound, "round"},</span></div></span></span><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {FlagPointy, "pointy"},</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "> {0, NULL}</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; ">};</span></div><div><font class="Apple-style-span" size="4" style="font-size: 12px; "><br></font></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class=""><font class="Apple-style-span" size="4" style="font-size: 12px; ">struct Test : public YamlMap {</font></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "> </font><span class="Apple-style-span" style="font-size: 12px; "> StringRef name;</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "> Color color;</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "> uint32_t flags;</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "><br></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "> void yamlMapping(IO &io) {</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "> requiredKey(io, name, "name");</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "> optionalKey(io, </font><span class="Apple-style-span" style="font-size: 12px; ">color</span><font class="Apple-style-span" size="4" style="font-size: 12px; ">, "color", </font><span class="Apple-style-span" style="font-size: 12px; ">colorConversions</span><span class="Apple-style-span" style="font-size: 12px; ">);</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "> requiredKey(io, </font><span class="Apple-style-span" style="font-size: 12px; ">flags</span><font class="Apple-style-span" size="4" style="font-size: 12px; ">, "</font><span class="Apple-style-span" style="font-size: 12px; ">flags</span><font class="Apple-style-span" size="4" style="font-size: 12px; ">", </font><span class="Apple-style-span" style="font-size: 12px; ">flagConversions</span><span class="Apple-style-span" style="font-size: 12px; ">);</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><span class="Apple-style-span" style="font-size: 12px; "> }</span></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; ">};</font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "></div></div></div></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "><br></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">The above defines a yaml mapping with three keys: name, color, and flags. When writing the color value out, the table colorConversions is used to map the in memory value to a string. In this case, the color field is marked as optional. That means when reading the yaml document, if there is no "color:" key, the struct's color field will be filled in with the last value (the one with the NULL string pointer) in the table, in this case the value red.</span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">When writing the flags value out, the table flagConversion is used to convert the bits in the flags field to a sequence of flag values. </span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" size="4" style="font-size: 12px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">A valid yaml document for this schema is:</span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 10px; "><font class="Apple-style-span" face="Times"><span class="Apple-style-span" style="font-size: 13px; "><br></span></font></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">- name: Tom</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> color: blue</div></span><span class="Apple-style-span" style="font-size: 12px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> flags: [ big ]</div></span><span class="Apple-style-span" style="font-size: 12px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">- name: Richard</div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> color: red</div></span><span class="Apple-style-span" style="font-size: 12px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> flags: [ little, pointy ]</div></span><span class="Apple-style-span" style="font-size: 12px; "></span><span class="Apple-style-span" style="font-size: 12px; ">- name: Harry</span><span class="Apple-style-span" style="font-size: 12px; "></span><span class="Apple-style-span" style="font-size: 12px; "><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "> flags: [ little, round ]</div><div><br></div></span><span class="Apple-style-span" style="font-size: 12px; "></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-size: 12px; "><br></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">My initial plan was to add YAMLIO to lld and let it mature there, but a got a request to move this down into llvm for another llvm client to use. So, I thought I'd see what llvm community thought of this support.</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "><br></span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; ">To see a larger example, attached is a sample mach-o object file (for hello world) encoded in yaml along with the YAMLIO based schema for reading or writing those documents.</span></div><div class="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; font-size: 8px; "><span class="Apple-style-span" style="font-family: Times; font-size: 13px; "></span></div></div></div></body></html>