diff --git a/capnpc-csharp.tests/Properties/Resources.Designer.cs b/capnpc-csharp.tests/Properties/Resources.Designer.cs index 0f7df65..5148dec 100644 --- a/capnpc-csharp.tests/Properties/Resources.Designer.cs +++ b/capnpc-csharp.tests/Properties/Resources.Designer.cs @@ -129,5 +129,15 @@ namespace capnpc_csharp.Tests.Properties { return ((byte[])(obj)); } } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] UnitTest4_capnp { + get { + object obj = ResourceManager.GetObject("UnitTest4_capnp", resourceCulture); + return ((byte[])(obj)); + } + } } } diff --git a/capnpc-csharp.tests/Properties/Resources.resx b/capnpc-csharp.tests/Properties/Resources.resx index 2404b46..b4ecfef 100644 --- a/capnpc-csharp.tests/Properties/Resources.resx +++ b/capnpc-csharp.tests/Properties/Resources.resx @@ -139,4 +139,7 @@ ..\Resources\UnitTest11.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\UnitTest4.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/capnpc-csharp.tests/Resources/UnitTest4.capnp.bin b/capnpc-csharp.tests/Resources/UnitTest4.capnp.bin new file mode 100644 index 0000000..f93feb2 Binary files /dev/null and b/capnpc-csharp.tests/Resources/UnitTest4.capnp.bin differ diff --git a/capnpc-csharp.tests/UnitTest4.capnp b/capnpc-csharp.tests/UnitTest4.capnp new file mode 100644 index 0000000..edfb8c7 --- /dev/null +++ b/capnpc-csharp.tests/UnitTest4.capnp @@ -0,0 +1,16 @@ +@0xf463d204f5208b43; +$import "/capnp/c++.capnp".namespace("UnitTest4"); + +interface Node { + getInfo @0 () -> Info; +} + +struct Info { + node @0 :Node; + classes @1 :Classes; +} + +struct Classes { + i1 @0 :import "UnitTest4b.capnp".I1.Classes; + i2 @1: Void; +} \ No newline at end of file diff --git a/capnpc-csharp.tests/UnitTest4b.capnp b/capnpc-csharp.tests/UnitTest4b.capnp new file mode 100644 index 0000000..3bfe83a --- /dev/null +++ b/capnpc-csharp.tests/UnitTest4b.capnp @@ -0,0 +1,15 @@ +@0x8151238e9f9884c8; +$import "/capnp/c++.capnp".namespace("UnitTest4"); + +using Base = import "UnitTest4.capnp"; + +interface I1 { + interface Node extends (Base.Node) {} + struct Classes { + sub @0: Sub; + } + struct Sub { + const prototype :Base.Classes = ( i1 = (sub = ()) ); + data @0: Bool; + } +} diff --git a/capnpc-csharp.tests/UnitTests.cs b/capnpc-csharp.tests/UnitTests.cs index 0211867..f7d59fd 100644 --- a/capnpc-csharp.tests/UnitTests.cs +++ b/capnpc-csharp.tests/UnitTests.cs @@ -45,6 +45,13 @@ namespace CapnpC // Should not throw } + [TestMethod] + public void Test04MutualDependencies() + { + LoadAndGenerate(Resources.UnitTest4_capnp, 4); + // Should not throw + } + [TestMethod] public void Test10ImportedNamespaces() { diff --git a/capnpc-csharp/Model/SchemaModel.cs b/capnpc-csharp/Model/SchemaModel.cs index 8d0a9fd..bd758c6 100644 --- a/capnpc-csharp/Model/SchemaModel.cs +++ b/capnpc-csharp/Model/SchemaModel.cs @@ -688,7 +688,7 @@ namespace CapnpC.Model { var def = ProcessNode(id, state, true, tag); var typeDef = def as TypeDefinition; - if (def == null) + if (typeDef == null) throw new ArgumentException( $"Expected node {id.StrId()} to be a TypeDefinition but got {def.GetType().Name} instead.", nameof(id)); @@ -748,10 +748,10 @@ namespace CapnpC.Model => node.DisplayName.Substring((int)node.DisplayNamePrefixLength); public static string StrId(this Schema.Node.Reader node) - => $"0x{node.Id.ToString("X")}"; + => $"0x{node.Id:X}"; public static string StrId(this ulong nodeId) - => $"0x{nodeId.ToString("X")}"; + => $"0x{nodeId:X}"; public static NodeKind GetKind(this Schema.Node.Reader node) {