Skip to content

Commit b21cb09

Browse files
authored
Allow multiple typedefs for same type (#950)
* Allow multiple typedefs for same type
1 parent 626d7f7 commit b21cb09

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

Cesium.CodeGen.Tests/CodeGenTypeTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,4 +466,13 @@ void foo(foo* p1, foo* p2) {
466466
*p1 = *p2;
467467
}
468468
""");
469+
470+
[Fact]
471+
public Task TypeDefTwice() => DoTest(@"typedef struct Token Token;
472+
typedef struct Token Token;
473+
474+
struct Token {
475+
int x;
476+
};
477+
");
469478
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Module: Primary
2+
Type: <Module>
3+
4+
Type: Token
5+
Fields:
6+
System.Int32 Token::x

Cesium.CodeGen/Contexts/TranslationUnitContext.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,16 @@ internal void GenerateType(string name, StructType type)
132132
internal void AddTypeDefinition(string name, IType type)
133133
{
134134
if (_types.ContainsKey(name))
135+
{
136+
if (type is StructType newStructType && newStructType.Members.Count == 0)
137+
{
138+
if (_types[name] is StructType existingStructType && existingStructType.Members.Count == 0 && existingStructType.Identifier == newStructType.Identifier)
139+
{
140+
return;
141+
}
142+
}
135143
throw new CompilationException($"Type definition {name} was already defined.");
144+
}
136145

137146
_types.Add(name, type);
138147
}

0 commit comments

Comments
 (0)