[fidl][dart] Allow recursive xunions This adds a missing "ignore: recursive_compile_time_constant" It leaves open the greater question of how to move away from recursive compile time constants in Dart. Bug: fxb/7644 Change-Id: I56495f4e1954d738fc4c6038b893f68b956b2bad
diff --git a/bin/fidlgen_dart/backend/templates/xunion.tmpl.go b/bin/fidlgen_dart/backend/templates/xunion.tmpl.go index f70ffda..e913c83 100644 --- a/bin/fidlgen_dart/backend/templates/xunion.tmpl.go +++ b/bin/fidlgen_dart/backend/templates/xunion.tmpl.go
@@ -72,6 +72,8 @@ // See FIDL-308: // ignore: recursive_compile_time_constant const $fidl.XUnionType<{{ .Name }}> {{ .TypeSymbol }} = {{ .TypeExpr }}; +// See FIDL-308: +// ignore: recursive_compile_time_constant const $fidl.XUnionType<{{ .Name }}> {{ .OptTypeSymbol }} = {{ .OptTypeExpr }}; {{ end }} `
diff --git a/bin/fidlgen_dart/goldens/bits.test.test.fidl.json b/bin/fidlgen_dart/goldens/bits.test.test.fidl.json index 3a69e93..30b6748 100644 --- a/bin/fidlgen_dart/goldens/bits.test.test.fidl.json +++ b/bin/fidlgen_dart/goldens/bits.test.test.fidl.json
@@ -49,7 +49,7 @@ } } ], - "strict": false + "strict": true } ], "const_declarations": [],
diff --git a/bin/fidlgen_dart/goldens/consts.test.fidl.json b/bin/fidlgen_dart/goldens/consts.test.fidl.json index 8497d51..a5e70f7 100644 --- a/bin/fidlgen_dart/goldens/consts.test.fidl.json +++ b/bin/fidlgen_dart/goldens/consts.test.fidl.json
@@ -298,7 +298,7 @@ } } ], - "strict": false + "strict": true }, { "name": "test.name/BitsType", @@ -326,7 +326,7 @@ } } ], - "strict": false + "strict": true } ], "interface_declarations": [],
diff --git a/bin/fidlgen_dart/goldens/enum.test.fidl.json b/bin/fidlgen_dart/goldens/enum.test.fidl.json index 463cfe7..f127b13 100644 --- a/bin/fidlgen_dart/goldens/enum.test.fidl.json +++ b/bin/fidlgen_dart/goldens/enum.test.fidl.json
@@ -10,7 +10,7 @@ "location": { "filename": "garnet/go/src/fidl/compiler/backend/typestest/enum.test.fidl", "line": 3, - "column": 6 + "column": 28 }, "type": "uint32", "members": [ @@ -54,7 +54,7 @@ "location": { "filename": "garnet/go/src/fidl/compiler/backend/typestest/enum.test.fidl", "line": 8, - "column": 13 + "column": 6 }, "type": "uint32", "members": [
diff --git a/bin/fidlgen_dart/goldens/protocols.test.fidl.json b/bin/fidlgen_dart/goldens/protocols.test.fidl.json index 99d11e7..03df244 100644 --- a/bin/fidlgen_dart/goldens/protocols.test.fidl.json +++ b/bin/fidlgen_dart/goldens/protocols.test.fidl.json
@@ -47,7 +47,7 @@ } } ], - "strict": false + "strict": true } ], "interface_declarations": [
diff --git a/bin/fidlgen_dart/goldens/union.test.fidl.json b/bin/fidlgen_dart/goldens/union.test.fidl.json index 5ba5522..9bf296e 100644 --- a/bin/fidlgen_dart/goldens/union.test.fidl.json +++ b/bin/fidlgen_dart/goldens/union.test.fidl.json
@@ -75,14 +75,46 @@ "max_out_of_line": 4294967295, "alignment": 8, "max_handles": 0 + }, + { + "name": "test.name/FieldCollision", + "location": { + "filename": "garnet/go/src/fidl/compiler/backend/typestest/union.test.fidl", + "line": 9, + "column": 7 + }, + "members": [ + { + "type": { + "kind": "primitive", + "subtype": "int32" + }, + "name": "field_collision_tag", + "location": { + "filename": "garnet/go/src/fidl/compiler/backend/typestest/union.test.fidl", + "line": 10, + "column": 11 + }, + "size": 4, + "max_out_of_line": 0, + "alignment": 4, + "offset": 4 + } + ], + "size": 8, + "max_out_of_line": 0, + "alignment": 4, + "max_handles": 0 } ], "xunion_declarations": [], "type_alias_declarations": [], "declaration_order": [ - "test.name/Union" + "test.name/Union", + "test.name/FieldCollision" ], "declarations": { - "test.name/Union": "union" + "test.name/Union": "union", + "test.name/FieldCollision": "union" } }
diff --git a/bin/fidlgen_dart/goldens/union.test.fidl.json_async.dart.golden b/bin/fidlgen_dart/goldens/union.test.fidl.json_async.dart.golden index 87e7467..7c89bcb 100644 --- a/bin/fidlgen_dart/goldens/union.test.fidl.json_async.dart.golden +++ b/bin/fidlgen_dart/goldens/union.test.fidl.json_async.dart.golden
@@ -130,5 +130,63 @@ ctor: Union._ctor, ); +enum FieldCollisionTag { + fieldCollisionTag, +} + +class FieldCollision extends $fidl.Union { + const FieldCollision.withFieldCollisionTag(int value) + : _data = value, + _tag = FieldCollisionTag.fieldCollisionTag; + + FieldCollision._(FieldCollisionTag tag, Object data) + : _tag = tag, + _data = data; + + final FieldCollisionTag _tag; + final _data; + int get fieldCollisionTag { + if (_tag != FieldCollisionTag.fieldCollisionTag) { + return null; + } + return _data; + } + + @override + String toString() { + switch (_tag) { + case FieldCollisionTag.fieldCollisionTag: + return r'FieldCollision.fieldCollisionTag($fieldCollisionTag)'; + default: + return null; + } + } + + FieldCollisionTag get $tag => _tag; + // TODO: remove, see: FIDL-587 + FieldCollisionTag get tag => _tag; + + @override + int get $index => _tag.index; + + @override + Object get $data => _data; + + static FieldCollision _ctor(int index, Object data) { + return FieldCollision._(FieldCollisionTag.values[index], data); + } +} + +// See FIDL-308: +// ignore: recursive_compile_time_constant +const $fidl.UnionType<FieldCollision> kFieldCollision_Type = + $fidl.UnionType<FieldCollision>( + encodedSize: 8, + members: <$fidl.MemberType>[ + $fidl.MemberType<int>(type: $fidl.Int32Type(), offset: 4), + ], + ctor: FieldCollision._ctor, +); + // ignore: unused_element, avoid_private_typedef_functions typedef _VoidCallback = void Function();
diff --git a/bin/fidlgen_dart/goldens/xunion.test.fidl.json_async.dart.golden b/bin/fidlgen_dart/goldens/xunion.test.fidl.json_async.dart.golden index b45caae..ba2b94d 100644 --- a/bin/fidlgen_dart/goldens/xunion.test.fidl.json_async.dart.golden +++ b/bin/fidlgen_dart/goldens/xunion.test.fidl.json_async.dart.golden
@@ -112,6 +112,8 @@ }, ctor: OlderSimpleUnion._ctor, ); +// See FIDL-308: +// ignore: recursive_compile_time_constant const $fidl.XUnionType<OlderSimpleUnion> kOlderSimpleUnion_OptType = $fidl.XUnionType<OlderSimpleUnion>( encodedSize: 24, @@ -218,6 +220,8 @@ }, ctor: NewerSimpleUnion._ctor, ); +// See FIDL-308: +// ignore: recursive_compile_time_constant const $fidl.XUnionType<NewerSimpleUnion> kNewerSimpleUnion_OptType = $fidl.XUnionType<NewerSimpleUnion>( encodedSize: 24, @@ -325,6 +329,8 @@ }, ctor: StrictSimpleXUnion._ctor, ); +// See FIDL-308: +// ignore: recursive_compile_time_constant const $fidl.XUnionType<StrictSimpleXUnion> kStrictSimpleXUnion_OptType = $fidl.XUnionType<StrictSimpleXUnion>( encodedSize: 24, @@ -400,6 +406,8 @@ }, ctor: XUnionContainingEmptyStruct._ctor, ); +// See FIDL-308: +// ignore: recursive_compile_time_constant const $fidl.XUnionType<XUnionContainingEmptyStruct> kXUnionContainingEmptyStruct_OptType = $fidl.XUnionType<XUnionContainingEmptyStruct>( @@ -472,6 +480,8 @@ }, ctor: StrictBoundedXUnion._ctor, ); +// See FIDL-308: +// ignore: recursive_compile_time_constant const $fidl.XUnionType<StrictBoundedXUnion> kStrictBoundedXUnion_OptType = $fidl.XUnionType<StrictBoundedXUnion>( encodedSize: 24,