[PATCH] YAML: Assign a value returned by the default constructor to the value in an optional mapping.

Duncan P. N. Exon Smith dexonsmith at apple.com
Wed Jun 17 14:45:40 PDT 2015


> On 2015 Jun 16, at 16:37, Alex Lorenz <arphaman at gmail.com> wrote:
> 
> Hi dexonsmith, bob.wilson, bogner,
> 
> This patch ensures that a value that's passed into YAML's IO mapOptional method is going to be assigned a value returned by the default constructor when the appropriate key is not present in the YAML mapping. 
> 
> The current YAML documentation specifies that this should happen: http://llvm.org/docs/YamlIO.html#default-values

LGTM.

> 
> REPOSITORY
>  rL LLVM
> 
> http://reviews.llvm.org/D10492
> 
> Files:
>  include/llvm/Support/YAMLTraits.h
>  unittests/Support/YAMLIOTest.cpp
> 
> Index: include/llvm/Support/YAMLTraits.h
> ===================================================================
> --- include/llvm/Support/YAMLTraits.h
> +++ include/llvm/Support/YAMLTraits.h
> @@ -647,6 +647,8 @@
>     if ( this->preflightKey(Key, Required, false, UseDefault, SaveInfo) ) {
>       yamlize(*this, Val, Required);
>       this->postflightKey(SaveInfo);
> +    } else if (UseDefault) {
> +      Val = T();
>     }
>   }
> 
> Index: unittests/Support/YAMLIOTest.cpp
> ===================================================================
> --- unittests/Support/YAMLIOTest.cpp
> +++ unittests/Support/YAMLIOTest.cpp
> @@ -68,6 +68,21 @@
> }
> }
> 
> +struct FooBarOptional {
> +  int Foo;
> +  int Bar;
> +};
> +
> +namespace llvm {
> +namespace yaml {
> +template <> struct MappingTraits<FooBarOptional> {
> +  static void mapping(IO &YamlIO, FooBarOptional &Obj) {
> +    YamlIO.mapRequired("foo", Obj.Foo);
> +    YamlIO.mapOptional("bar", Obj.Bar);
> +  }
> +};
> +}
> +}
> 
> //
> // Test the reading of a yaml mapping
> @@ -93,6 +108,19 @@
>   }
> }
> 
> +TEST(YAMLIO, TestMapReadOptional) {
> +  FooBarOptional Doc;
> +  Doc.Bar = 42;
> +  {
> +    Input In("---\nfoo:  3\n...\n");
> +    In >> Doc;
> +
> +    EXPECT_FALSE(In.error());
> +    EXPECT_EQ(Doc.Foo, 3);
> +    EXPECT_EQ(Doc.Bar, 0);
> +  }
> +}
> +
> TEST(YAMLIO, TestMalformedMapRead) {
>   FooBar doc;
>   Input yin("{foo: 3; bar: 5}", nullptr, suppressErrorMessages);
> 
> EMAIL PREFERENCES
>  http://reviews.llvm.org/settings/panel/emailpreferences/
> <D10492.27793.patch>





More information about the llvm-commits mailing list