summaryrefslogtreecommitdiffstats
path: root/llvm/docs/YamlIO.rst
diff options
context:
space:
mode:
authorNick Kledzik <kledzik@apple.com>2013-11-21 00:28:07 +0000
committerNick Kledzik <kledzik@apple.com>2013-11-21 00:28:07 +0000
commit7cd45f29b26b6cb4e0019b7355ed69db9ab55992 (patch)
treeaa298a7035d484dcec1ef66cdef4aaec18afe467 /llvm/docs/YamlIO.rst
parent4761c60eef46a9916b964395c0c68d51da7d3ae0 (diff)
downloadbcm5719-llvm-7cd45f29b26b6cb4e0019b7355ed69db9ab55992.tar.gz
bcm5719-llvm-7cd45f29b26b6cb4e0019b7355ed69db9ab55992.zip
YAML I/O add support for validate()
MappingTrait template specializations can now have a validate() method which performs semantic checking. For details, see <http://llvm.org/docs/YamlIO.html>. llvm-svn: 195286
Diffstat (limited to 'llvm/docs/YamlIO.rst')
-rw-r--r--llvm/docs/YamlIO.rst38
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/docs/YamlIO.rst b/llvm/docs/YamlIO.rst
index 5ec0a01f8d8..46609a3acd6 100644
--- a/llvm/docs/YamlIO.rst
+++ b/llvm/docs/YamlIO.rst
@@ -647,6 +647,44 @@ mappings, as long as they are convertable.
To check a tag, inside your mapping() method you can use io.mapTag() to specify
what the tag should be. This will also add that tag when writing yaml.
+Validation
+----------
+
+Sometimes in a yaml map, each key/value pair is valid, but the combination is
+not. This is similar to something having no syntax errors, but still having
+semantic errors. To support semantic level checking, YAML I/O allows
+an optional ``validate()`` method in a MappingTraits template specialization.
+
+When parsing yaml, the ``validate()`` method is call *after* all key/values in
+the map have been processed. Any error message returned by the ``validate()``
+method during input will be printed just a like a syntax error would be printed.
+When writing yaml, the ``validate()`` method is called *before* the yaml
+key/values are written. Any error during output will trigger an ``assert()``
+because it is a programming error to have invalid struct values.
+
+
+.. code-block:: c++
+
+ using llvm::yaml::MappingTraits;
+ using llvm::yaml::IO;
+
+ struct Stuff {
+ ...
+ };
+
+ template <>
+ struct MappingTraits<Stuff> {
+ static void mapping(IO &io, Stuff &stuff) {
+ ...
+ }
+ static StringRef validate(IO &io, Stuff &stuff) {
+ // Look at all fields in 'stuff' and if there
+ // are any bad values return a string describing
+ // the error. Otherwise return an empty string.
+ return StringRef();
+ }
+ };
+
Sequence
========
OpenPOWER on IntegriCloud