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)
{