[codeview] Make FieldList records print as a yaml sequence.
authorZachary Turner <zturner@google.com>
Fri, 2 Sep 2016 22:19:01 +0000 (22:19 +0000)
committerZachary Turner <zturner@google.com>
Fri, 2 Sep 2016 22:19:01 +0000 (22:19 +0000)
Before we were kind of imitating the behavior of a Yaml sequence
by outputting each record one after the other.  This makes it a
little cumbersome when we want to go the other direction -- from
Yaml to Pdb.  So this treats FieldList records as no different than
any other list of records, by printing them as a Yaml sequence with
the exact same format.

llvm-svn: 280549

llvm/test/DebugInfo/PDB/pdbdump-yaml-types.test
llvm/tools/llvm-pdbdump/CodeViewYaml.cpp
llvm/tools/llvm-pdbdump/CodeViewYaml.h

index 0ad407a..1e97725 100644 (file)
@@ -29,31 +29,31 @@ YAML:         ParameterCount:  0
 YAML:         ArgumentList:    4096\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1\r
-YAML:           Name:            apartment\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2\r
-YAML:           Name:            single\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           3\r
-YAML:           Name:            free\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           4\r
-YAML:           Name:            neutral\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           5\r
-YAML:           Name:            both\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1\r
+YAML:             Name:            apartment\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2\r
+YAML:             Name:            single\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           3\r
+YAML:             Name:            free\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           4\r
+YAML:             Name:            neutral\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           5\r
+YAML:             Name:            both\r
 YAML:     - Kind:            LF_ENUM\r
 YAML:       Enum:            \r
 YAML:         NumEnumerators:  5\r
@@ -121,21 +121,21 @@ YAML:             VFTableOffset:   -1
 YAML:             Name:            ''\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4099\r
-YAML:           Name:            threading_e\r
-YAML:         Kind:            LF_METHOD\r
-YAML:         OverloadedMethod: \r
-YAML:           NumOverloads:    2\r
-YAML:           MethodList:      4105\r
-YAML:           Name:            threadingAttribute\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4099\r
-YAML:           FieldOffset:     0\r
-YAML:           Name:            value\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4099\r
+YAML:             Name:            threading_e\r
+YAML:         Kind:            LF_METHOD\r
+YAML:           OverloadedMethod: \r
+YAML:             NumOverloads:    2\r
+YAML:             MethodList:      4105\r
+YAML:             Name:            threadingAttribute\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4099\r
+YAML:             FieldOffset:     0\r
+YAML:             Name:            value\r
 YAML:     - Kind:            LF_STRUCTURE\r
 YAML:       Class:           \r
 YAML:         MemberCount:     4\r
@@ -150,21 +150,21 @@ YAML:         VTableShape:     0
 YAML:         Size:            4\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           0\r
-YAML:           Name:            native\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1\r
-YAML:           Name:            com\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2\r
-YAML:           Name:            managed\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           0\r
+YAML:             Name:            native\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1\r
+YAML:             Name:            com\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2\r
+YAML:             Name:            managed\r
 YAML:     - Kind:            LF_ENUM\r
 YAML:       Enum:            \r
 YAML:         NumEnumerators:  3\r
@@ -251,27 +251,27 @@ YAML:             VFTableOffset:   -1
 YAML:             Name:            ''\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4109\r
-YAML:           Name:            type_e\r
-YAML:         Kind:            LF_METHOD\r
-YAML:         OverloadedMethod: \r
-YAML:           NumOverloads:    3\r
-YAML:           MethodList:      4117\r
-YAML:           Name:            event_receiverAttribute\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4109\r
-YAML:           FieldOffset:     0\r
-YAML:           Name:            type\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            48\r
-YAML:           FieldOffset:     4\r
-YAML:           Name:            layout_dependent\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4109\r
+YAML:             Name:            type_e\r
+YAML:         Kind:            LF_METHOD\r
+YAML:           OverloadedMethod: \r
+YAML:             NumOverloads:    3\r
+YAML:             MethodList:      4117\r
+YAML:             Name:            event_receiverAttribute\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4109\r
+YAML:             FieldOffset:     0\r
+YAML:             Name:            type\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            48\r
+YAML:             FieldOffset:     4\r
+YAML:             Name:            layout_dependent\r
 YAML:     - Kind:            LF_STRUCTURE\r
 YAML:       Class:           \r
 YAML:         MemberCount:     6\r
@@ -286,21 +286,21 @@ YAML:         VTableShape:     0
 YAML:         Size:            8\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           0\r
-YAML:           Name:            never\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1\r
-YAML:           Name:            allowed\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2\r
-YAML:           Name:            always\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           0\r
+YAML:             Name:            never\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1\r
+YAML:             Name:            allowed\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2\r
+YAML:             Name:            always\r
 YAML:     - Kind:            LF_ENUM\r
 YAML:       Enum:            \r
 YAML:         NumEnumerators:  3\r
@@ -368,21 +368,21 @@ YAML:             VFTableOffset:   -1
 YAML:             Name:            ''\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4121\r
-YAML:           Name:            type_e\r
-YAML:         Kind:            LF_METHOD\r
-YAML:         OverloadedMethod: \r
-YAML:           NumOverloads:    2\r
-YAML:           MethodList:      4127\r
-YAML:           Name:            aggregatableAttribute\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4121\r
-YAML:           FieldOffset:     0\r
-YAML:           Name:            type\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4121\r
+YAML:             Name:            type_e\r
+YAML:         Kind:            LF_METHOD\r
+YAML:           OverloadedMethod: \r
+YAML:             NumOverloads:    2\r
+YAML:             MethodList:      4127\r
+YAML:             Name:            aggregatableAttribute\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4121\r
+YAML:             FieldOffset:     0\r
+YAML:             Name:            type\r
 YAML:     - Kind:            LF_STRUCTURE\r
 YAML:       Class:           \r
 YAML:         MemberCount:     4\r
@@ -405,16 +405,16 @@ YAML:         UniqueName:      '.?AW4type_e@event_sourceAttribute@__vc_attribute
 YAML:         UnderlyingType:  116\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           0\r
-YAML:           Name:            speed\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1\r
-YAML:           Name:            size\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           0\r
+YAML:             Name:            speed\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1\r
+YAML:             Name:            size\r
 YAML:     - Kind:            LF_ENUM\r
 YAML:       Enum:            \r
 YAML:         NumEnumerators:  2\r
@@ -482,37 +482,37 @@ YAML:             VFTableOffset:   -1
 YAML:             Name:            ''\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4130\r
-YAML:           Name:            type_e\r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4132\r
-YAML:           Name:            optimize_e\r
-YAML:         Kind:            LF_METHOD\r
-YAML:         OverloadedMethod: \r
-YAML:           NumOverloads:    2\r
-YAML:           MethodList:      4138\r
-YAML:           Name:            event_sourceAttribute\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4130\r
-YAML:           FieldOffset:     0\r
-YAML:           Name:            type\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4132\r
-YAML:           FieldOffset:     4\r
-YAML:           Name:            optimize\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            48\r
-YAML:           FieldOffset:     8\r
-YAML:           Name:            decorate\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4130\r
+YAML:             Name:            type_e\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4132\r
+YAML:             Name:            optimize_e\r
+YAML:         Kind:            LF_METHOD\r
+YAML:           OverloadedMethod: \r
+YAML:             NumOverloads:    2\r
+YAML:             MethodList:      4138\r
+YAML:             Name:            event_sourceAttribute\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4130\r
+YAML:             FieldOffset:     0\r
+YAML:             Name:            type\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4132\r
+YAML:             FieldOffset:     4\r
+YAML:             Name:            optimize\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            48\r
+YAML:             FieldOffset:     8\r
+YAML:             Name:            decorate\r
 YAML:     - Kind:            LF_STRUCTURE\r
 YAML:       Class:           \r
 YAML:         MemberCount:     7\r
@@ -527,36 +527,36 @@ YAML:         VTableShape:     0
 YAML:         Size:            12\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1\r
-YAML:           Name:            dll\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2\r
-YAML:           Name:            exe\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           3\r
-YAML:           Name:            service\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           4\r
-YAML:           Name:            unspecified\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2\r
-YAML:           Name:            EXE\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           3\r
-YAML:           Name:            SERVICE\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1\r
+YAML:             Name:            dll\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2\r
+YAML:             Name:            exe\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           3\r
+YAML:             Name:            service\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           4\r
+YAML:             Name:            unspecified\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2\r
+YAML:             Name:            EXE\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           3\r
+YAML:             Name:            SERVICE\r
 YAML:     - Kind:            LF_ENUM\r
 YAML:       Enum:            \r
 YAML:         NumEnumerators:  6\r
@@ -655,105 +655,105 @@ YAML:             VFTableOffset:   -1
 YAML:             Name:            ''\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4142\r
-YAML:           Name:            type_e\r
-YAML:         Kind:            LF_METHOD\r
-YAML:         OverloadedMethod: \r
-YAML:           NumOverloads:    3\r
-YAML:           MethodList:      4152\r
-YAML:           Name:            moduleAttribute\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4142\r
-YAML:           FieldOffset:     0\r
-YAML:           Name:            type\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     4\r
-YAML:           Name:            name\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     8\r
-YAML:           Name:            version\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     12\r
-YAML:           Name:            uuid\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            116\r
-YAML:           FieldOffset:     16\r
-YAML:           Name:            lcid\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            48\r
-YAML:           FieldOffset:     20\r
-YAML:           Name:            control\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     24\r
-YAML:           Name:            helpstring\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            116\r
-YAML:           FieldOffset:     28\r
-YAML:           Name:            helpstringcontext\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     32\r
-YAML:           Name:            helpstringdll\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     36\r
-YAML:           Name:            helpfile\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            116\r
-YAML:           FieldOffset:     40\r
-YAML:           Name:            helpcontext\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            48\r
-YAML:           FieldOffset:     44\r
-YAML:           Name:            hidden\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            48\r
-YAML:           FieldOffset:     45\r
-YAML:           Name:            restricted\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     48\r
-YAML:           Name:            custom\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4146\r
-YAML:           FieldOffset:     52\r
-YAML:           Name:            resource_name\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4142\r
+YAML:             Name:            type_e\r
+YAML:         Kind:            LF_METHOD\r
+YAML:           OverloadedMethod: \r
+YAML:             NumOverloads:    3\r
+YAML:             MethodList:      4152\r
+YAML:             Name:            moduleAttribute\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4142\r
+YAML:             FieldOffset:     0\r
+YAML:             Name:            type\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     4\r
+YAML:             Name:            name\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     8\r
+YAML:             Name:            version\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     12\r
+YAML:             Name:            uuid\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            116\r
+YAML:             FieldOffset:     16\r
+YAML:             Name:            lcid\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            48\r
+YAML:             FieldOffset:     20\r
+YAML:             Name:            control\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     24\r
+YAML:             Name:            helpstring\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            116\r
+YAML:             FieldOffset:     28\r
+YAML:             Name:            helpstringcontext\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     32\r
+YAML:             Name:            helpstringdll\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     36\r
+YAML:             Name:            helpfile\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            116\r
+YAML:             FieldOffset:     40\r
+YAML:             Name:            helpcontext\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            48\r
+YAML:             FieldOffset:     44\r
+YAML:             Name:            hidden\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            48\r
+YAML:             FieldOffset:     45\r
+YAML:             Name:            restricted\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     48\r
+YAML:             Name:            custom\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4146\r
+YAML:             FieldOffset:     52\r
+YAML:             Name:            resource_name\r
 YAML:     - Kind:            LF_STRUCTURE\r
 YAML:       Class:           \r
 YAML:         MemberCount:     19\r
@@ -768,156 +768,156 @@ YAML:         VTableShape:     0
 YAML:         Size:            56\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           0\r
-YAML:           Name:            eAnyUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1\r
-YAML:           Name:            eCoClassUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2\r
-YAML:           Name:            eCOMInterfaceUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           6\r
-YAML:           Name:            eInterfaceUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           8\r
-YAML:           Name:            eMemberUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           16\r
-YAML:           Name:            eMethodUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           32\r
-YAML:           Name:            eInterfaceMethodUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           64\r
-YAML:           Name:            eInterfaceMemberUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           128\r
-YAML:           Name:            eCoClassMemberUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           256\r
-YAML:           Name:            eCoClassMethodUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           768\r
-YAML:           Name:            eGlobalMethodUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1024\r
-YAML:           Name:            eGlobalDataUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2048\r
-YAML:           Name:            eClassUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           4096\r
-YAML:           Name:            eInterfaceParameterUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           12288\r
-YAML:           Name:            eMethodParameterUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           16384\r
-YAML:           Name:            eIDLModuleUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           -32768\r
-YAML:           Name:            eAnonymousUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           65536\r
-YAML:           Name:            eTypedefUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           131072\r
-YAML:           Name:            eUnionUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           262144\r
-YAML:           Name:            eEnumUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           524288\r
-YAML:           Name:            eDefineTagUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1048576\r
-YAML:           Name:            eStructUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2097152\r
-YAML:           Name:            eLocalUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           4194304\r
-YAML:           Name:            ePropertyUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           8388608\r
-YAML:           Name:            eEventUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           16777216\r
-YAML:           Name:            eTemplateUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           16777216\r
-YAML:           Name:            eModuleUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           33554432\r
-YAML:           Name:            eIllegalUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           67108864\r
-YAML:           Name:            eAsynchronousUsage\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           4161535\r
-YAML:           Name:            eAnyIDLUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           0\r
+YAML:             Name:            eAnyUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1\r
+YAML:             Name:            eCoClassUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2\r
+YAML:             Name:            eCOMInterfaceUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           6\r
+YAML:             Name:            eInterfaceUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           8\r
+YAML:             Name:            eMemberUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           16\r
+YAML:             Name:            eMethodUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           32\r
+YAML:             Name:            eInterfaceMethodUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           64\r
+YAML:             Name:            eInterfaceMemberUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           128\r
+YAML:             Name:            eCoClassMemberUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           256\r
+YAML:             Name:            eCoClassMethodUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           768\r
+YAML:             Name:            eGlobalMethodUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1024\r
+YAML:             Name:            eGlobalDataUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2048\r
+YAML:             Name:            eClassUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           4096\r
+YAML:             Name:            eInterfaceParameterUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           12288\r
+YAML:             Name:            eMethodParameterUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           16384\r
+YAML:             Name:            eIDLModuleUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           -32768\r
+YAML:             Name:            eAnonymousUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           65536\r
+YAML:             Name:            eTypedefUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           131072\r
+YAML:             Name:            eUnionUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           262144\r
+YAML:             Name:            eEnumUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           524288\r
+YAML:             Name:            eDefineTagUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1048576\r
+YAML:             Name:            eStructUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2097152\r
+YAML:             Name:            eLocalUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           4194304\r
+YAML:             Name:            ePropertyUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           8388608\r
+YAML:             Name:            eEventUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           16777216\r
+YAML:             Name:            eTemplateUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           16777216\r
+YAML:             Name:            eModuleUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           33554432\r
+YAML:             Name:            eIllegalUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           67108864\r
+YAML:             Name:            eAsynchronousUsage\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           4161535\r
+YAML:             Name:            eAnyIDLUsage\r
 YAML:     - Kind:            LF_ENUM\r
 YAML:       Enum:            \r
 YAML:         NumEnumerators:  30\r
@@ -960,24 +960,24 @@ YAML:         ArgumentList:    4159
 YAML:         ThisPointerAdjustment: 0\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4156\r
-YAML:           Name:            usage_e\r
-YAML:         Kind:            LF_ONEMETHOD\r
-YAML:         OneMethod:       \r
-YAML:           Type:            4160\r
-YAML:           Kind:            Vanilla\r
-YAML:           Options:         [ None ]\r
-YAML:           Access:          Public\r
-YAML:           VFTableOffset:   -1\r
-YAML:           Name:            usageAttribute\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            117\r
-YAML:           FieldOffset:     0\r
-YAML:           Name:            value\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4156\r
+YAML:             Name:            usage_e\r
+YAML:         Kind:            LF_ONEMETHOD\r
+YAML:           OneMethod:       \r
+YAML:             Type:            4160\r
+YAML:             Kind:            Vanilla\r
+YAML:             Options:         [ None ]\r
+YAML:             Access:          Public\r
+YAML:             VFTableOffset:   -1\r
+YAML:             Name:            usageAttribute\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            117\r
+YAML:             FieldOffset:     0\r
+YAML:             Name:            value\r
 YAML:     - Kind:            LF_STRUCTURE\r
 YAML:       Class:           \r
 YAML:         MemberCount:     3\r
@@ -992,26 +992,26 @@ YAML:         VTableShape:     0
 YAML:         Size:            4\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           0\r
-YAML:           Name:            eBoolean\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           1\r
-YAML:           Name:            eInteger\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           2\r
-YAML:           Name:            eFloat\r
-YAML:         Kind:            LF_ENUMERATE\r
-YAML:         Enumerator:      \r
-YAML:           Access:          Public\r
-YAML:           Value:           3\r
-YAML:           Name:            eDouble\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           0\r
+YAML:             Name:            eBoolean\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           1\r
+YAML:             Name:            eInteger\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           2\r
+YAML:             Name:            eFloat\r
+YAML:         Kind:            LF_ENUMERATE\r
+YAML:           Enumerator:      \r
+YAML:             Access:          Public\r
+YAML:             Value:           3\r
+YAML:             Name:            eDouble\r
 YAML:     - Kind:            LF_ENUM\r
 YAML:       Enum:            \r
 YAML:         NumEnumerators:  4\r
@@ -1054,24 +1054,24 @@ YAML:         ArgumentList:    4167
 YAML:         ThisPointerAdjustment: 0\r
 YAML:     - Kind:            LF_FIELDLIST\r
 YAML:       FieldList:       \r
-YAML:         Kind:            LF_NESTTYPE\r
-YAML:         NestedType:      \r
-YAML:           Type:            4164\r
-YAML:           Name:            type_e\r
-YAML:         Kind:            LF_ONEMETHOD\r
-YAML:         OneMethod:       \r
-YAML:           Type:            4168\r
-YAML:           Kind:            Vanilla\r
-YAML:           Options:         [ None ]\r
-YAML:           Access:          Public\r
-YAML:           VFTableOffset:   -1\r
-YAML:           Name:            v1_alttypeAttribute\r
-YAML:         Kind:            LF_MEMBER\r
-YAML:         DataMember:      \r
-YAML:           Access:          Public\r
-YAML:           Type:            4164\r
-YAML:           FieldOffset:     0\r
-YAML:           Name:            type\r
+YAML:         Kind:            LF_NESTTYPE\r
+YAML:           NestedType:      \r
+YAML:             Type:            4164\r
+YAML:             Name:            type_e\r
+YAML:         Kind:            LF_ONEMETHOD\r
+YAML:           OneMethod:       \r
+YAML:             Type:            4168\r
+YAML:             Kind:            Vanilla\r
+YAML:             Options:         [ None ]\r
+YAML:             Access:          Public\r
+YAML:             VFTableOffset:   -1\r
+YAML:             Name:            v1_alttypeAttribute\r
+YAML:         Kind:            LF_MEMBER\r
+YAML:           DataMember:      \r
+YAML:             Access:          Public\r
+YAML:             Type:            4164\r
+YAML:             FieldOffset:     0\r
+YAML:             Name:            type\r
 YAML:     - Kind:            LF_STRUCTURE\r
 YAML:       Class:           \r
 YAML:         MemberCount:     3\r
index e75f454..e9dcade 100644 (file)
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "CodeViewYaml.h"
+#include "PdbYaml.h"
 
 #include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
 #include "llvm/DebugInfo/CodeView/EnumTables.h"
@@ -25,6 +26,38 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(OneMethodRecord)
 LLVM_YAML_IS_SEQUENCE_VECTOR(VFTableSlotKind)
 LLVM_YAML_IS_SEQUENCE_VECTOR(StringRef)
 LLVM_YAML_IS_SEQUENCE_VECTOR(CVType)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::pdb::yaml::PdbTpiRecord)
+
+namespace {
+struct FieldListRecordSplitter : public TypeVisitorCallbacks {
+public:
+  explicit FieldListRecordSplitter(
+      std::vector<llvm::pdb::yaml::PdbTpiRecord> &Records)
+      : Records(Records) {}
+
+#define TYPE_RECORD(EnumName, EnumVal, Name)
+#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
+#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
+#define MEMBER_RECORD(EnumName, EnumVal, Name)                                 \
+  Error visitKnownRecord(const CVType &CVT, Name##Record &Record) override {   \
+    visitKnownRecordImpl(CVT);                                                 \
+    return Error::success();                                                   \
+  }
+#include "llvm/DebugInfo/CodeView/TypeRecords.def"
+
+private:
+  void visitKnownRecordImpl(const CVType &CVT) {
+    llvm::pdb::yaml::PdbTpiRecord R;
+    R.Record = CVT;
+    R.RecordData.assign(CVT.RawData.begin(), CVT.RawData.end());
+    R.Record.Data = R.RecordData;
+    R.Record.RawData = R.RecordData;
+    Records.push_back(std::move(R));
+  }
+
+  std::vector<llvm::pdb::yaml::PdbTpiRecord> &Records;
+};
+}
 
 namespace llvm {
 namespace yaml {
@@ -518,3 +551,15 @@ llvm::codeview::yaml::YamlTypeDumperCallbacks::visitTypeBegin(
   YamlIO.mapRequired("Kind", K);
   return K;
 }
+
+void llvm::codeview::yaml::YamlTypeDumperCallbacks::visitKnownRecordImpl(
+    const char *Name, const CVType &Type, FieldListRecord &FieldList) {
+
+  std::vector<llvm::pdb::yaml::PdbTpiRecord> Records;
+  if (YamlIO.outputting()) {
+    FieldListRecordSplitter Splitter(Records);
+    CVTypeVisitor V(Splitter);
+    consumeError(V.visitFieldListMemberStream(FieldList.Data));
+  }
+  YamlIO.mapRequired(Name, Records);
+}
index 8932d00..ccf7e40 100644 (file)
@@ -27,7 +27,7 @@ public:
 #define TYPE_RECORD(EnumName, EnumVal, Name)                                   \
   Error visitKnownRecord(const CVRecord<TypeLeafKind> &CVR,                    \
                          Name##Record &Record) override {                      \
-    YamlIO.mapRequired(#Name, Record);                                         \
+    visitKnownRecordImpl(#Name, CVR, Record);                                  \
     return Error::success();                                                   \
   }
 #define MEMBER_RECORD(EnumName, EnumVal, Name)                                 \
@@ -37,6 +37,14 @@ public:
 #include "llvm/DebugInfo/CodeView/TypeRecords.def"
 
 private:
+  template <typename T>
+  void visitKnownRecordImpl(const char *Name, const CVType &Type, T &Record) {
+    YamlIO.mapRequired(Name, Record);
+  }
+
+  void visitKnownRecordImpl(const char *Name, const CVType &Type,
+                            FieldListRecord &FieldList);
+
   llvm::yaml::IO &YamlIO;
 };
 }