Skip to content

Commit 733faff

Browse files
committed
[c] Handle classes with public fields and non-public enum fields.
#191
1 parent 8ce4f5f commit 733faff

File tree

6 files changed

+32
-4
lines changed

6 files changed

+32
-4
lines changed

GenC.fu

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3096,7 +3096,7 @@ public class GenC : GenCCpp
30963096
WriteTypedef(klass);
30973097
break;
30983098
case FuEnum enu:
3099-
if (enu.IsPublic == pub)
3099+
if ((enu.IsPublic || this.WrittenTypes.Contains(enu)) == pub)
31003100
WriteEnum(enu);
31013101
break;
31023102
default:
@@ -3274,6 +3274,8 @@ public class GenC : GenCCpp
32743274
for (FuSymbol? symbol = klass.First; symbol != null; symbol = symbol.Next) {
32753275
switch (symbol) {
32763276
case FuField field:
3277+
if (this.InHeaderFile && field.Type is FuEnum enu)
3278+
this.WrittenTypes.Add(enu);
32773279
WriteDoc(field.Documentation);
32783280
WriteTypeAndName(field);
32793281
WriteCharLine(';');

libfut.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12637,7 +12637,7 @@ void GenC::writeTypedefs(const FuProgram * program, bool pub)
1263712637
writeTypedef(klass);
1263812638
}
1263912639
else if (const FuEnum *enu = dynamic_cast<const FuEnum *>(type)) {
12640-
if (enu->isPublic == pub)
12640+
if ((enu->isPublic || this->writtenTypes.contains(enu)) == pub)
1264112641
writeEnum(enu);
1264212642
}
1264312643
else
@@ -12813,6 +12813,9 @@ void GenC::writeClassInternal(const FuClass * klass)
1281312813
}
1281412814
for (const FuSymbol * symbol = klass->first; symbol != nullptr; symbol = symbol->next) {
1281512815
if (const FuField *field = dynamic_cast<const FuField *>(symbol)) {
12816+
const FuEnum * enu;
12817+
if (this->inHeaderFile && (enu = dynamic_cast<const FuEnum *>(field->type.get())))
12818+
this->writtenTypes.insert(enu);
1281612819
writeDoc(field->documentation.get());
1281712820
writeTypeAndName(field);
1281812821
writeCharLine(';');

libfut.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12851,7 +12851,7 @@ protected void WriteTypedefs(FuProgram program, bool pub)
1285112851
WriteTypedef(klass);
1285212852
break;
1285312853
case FuEnum enu:
12854-
if (enu.IsPublic == pub)
12854+
if ((enu.IsPublic || this.WrittenTypes.Contains(enu)) == pub)
1285512855
WriteEnum(enu);
1285612856
break;
1285712857
default:
@@ -13026,6 +13026,8 @@ protected override void WriteClassInternal(FuClass klass)
1302613026
for (FuSymbol symbol = klass.First; symbol != null; symbol = symbol.Next) {
1302713027
switch (symbol) {
1302813028
case FuField field:
13029+
if (this.InHeaderFile && field.Type is FuEnum enu)
13030+
this.WrittenTypes.Add(enu);
1302913031
WriteDoc(field.Documentation);
1303013032
WriteTypeAndName(field);
1303113033
WriteCharLine(';');

libfut.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13338,7 +13338,7 @@ export class GenC extends GenCCpp
1333813338
}
1333913339
else if (type instanceof FuEnum) {
1334013340
const enu = type;
13341-
if (enu.isPublic == pub)
13341+
if ((enu.isPublic || this.writtenTypes.has(enu)) == pub)
1334213342
this.writeEnum(enu);
1334313343
}
1334413344
else
@@ -13518,6 +13518,9 @@ export class GenC extends GenCCpp
1351813518
for (let symbol = klass.first; symbol != null; symbol = symbol.next) {
1351913519
if (symbol instanceof FuField) {
1352013520
const field = symbol;
13521+
let enu;
13522+
if (this.inHeaderFile && (enu = field.type) instanceof FuEnum)
13523+
this.writtenTypes.add(enu);
1352113524
this.writeDoc(field.documentation);
1352213525
this.writeTypeAndName(field);
1352313526
this.writeCharLine(59);

test/Enum.fu

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,18 @@ public enum DayOfWeek
99
Saturday
1010
}
1111

12+
enum Season
13+
{
14+
Spring,
15+
Summer,
16+
Fall,
17+
Winter
18+
}
19+
1220
public class Test
1321
{
1422
DayOfWeek Day;
23+
Season Seas;
1524

1625
public static bool Run()
1726
{

test/ObjectFieldPublic.fu

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1+
enum Season
2+
{
3+
Spring,
4+
Summer,
5+
Fall,
6+
Winter
7+
}
8+
19
public class Foo
210
{
311
public long Bar;
12+
Season Fav;
413
}
514

615
public static class Test

0 commit comments

Comments
 (0)