Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions src/idl_gen_ts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1120,18 +1120,18 @@ class TsGenerator : public BaseGenerator {
const auto enum_type = AddImport(imports, enum_def, enum_def).name;

const auto union_enum_loop = [&](const std::string& accessor_str) {
ret += " switch(" + enum_type + "[type]) {\n";
ret += " case 'NONE': return " + null_keyword_ + "; \n";
ret += " switch(type) {\n";

for (auto it = enum_def.Vals().begin(); it != enum_def.Vals().end();
++it) {
const auto& ev = **it;
const auto case_label = enum_type + "." + namer_.Variant(ev);
if (ev.IsZero()) {
ret +=
" case " + case_label + ": return " + null_keyword_ + ";\n";
continue;
}

ret += " case '" + namer_.Variant(ev) + "': ";

ret += " case " + case_label + ": ";
if (IsString(ev.union_type)) {
ret += "return " + accessor_str + "'') as string;";
} else if (ev.union_type.base_type == BASE_TYPE_STRUCT) {
Expand Down
20 changes: 10 additions & 10 deletions tests/ts/my-game/example/any-ambiguous-aliases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ export function unionToAnyAmbiguousAliases(
type: AnyAmbiguousAliases,
accessor: (obj:Monster) => Monster|null
): Monster|null {
switch(AnyAmbiguousAliases[type]) {
case 'NONE': return null;
case 'M1': return accessor(new Monster())! as Monster;
case 'M2': return accessor(new Monster())! as Monster;
case 'M3': return accessor(new Monster())! as Monster;
switch(type) {
case AnyAmbiguousAliases.NONE: return null;
case AnyAmbiguousAliases.M1: return accessor(new Monster())! as Monster;
case AnyAmbiguousAliases.M2: return accessor(new Monster())! as Monster;
case AnyAmbiguousAliases.M3: return accessor(new Monster())! as Monster;
default: return null;
}
}
Expand All @@ -30,11 +30,11 @@ export function unionListToAnyAmbiguousAliases(
accessor: (index: number, obj:Monster) => Monster|null,
index: number
): Monster|null {
switch(AnyAmbiguousAliases[type]) {
case 'NONE': return null;
case 'M1': return accessor(index, new Monster())! as Monster;
case 'M2': return accessor(index, new Monster())! as Monster;
case 'M3': return accessor(index, new Monster())! as Monster;
switch(type) {
case AnyAmbiguousAliases.NONE: return null;
case AnyAmbiguousAliases.M1: return accessor(index, new Monster())! as Monster;
case AnyAmbiguousAliases.M2: return accessor(index, new Monster())! as Monster;
case AnyAmbiguousAliases.M3: return accessor(index, new Monster())! as Monster;
default: return null;
}
}
20 changes: 10 additions & 10 deletions tests/ts/my-game/example/any-unique-aliases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ export function unionToAnyUniqueAliases(
type: AnyUniqueAliases,
accessor: (obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null
): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null {
switch(AnyUniqueAliases[type]) {
case 'NONE': return null;
case 'M': return accessor(new Monster())! as Monster;
case 'TS': return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case 'M2': return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
switch(type) {
case AnyUniqueAliases.NONE: return null;
case AnyUniqueAliases.M: return accessor(new Monster())! as Monster;
case AnyUniqueAliases.TS: return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case AnyUniqueAliases.M2: return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
default: return null;
}
}
Expand All @@ -32,11 +32,11 @@ export function unionListToAnyUniqueAliases(
accessor: (index: number, obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null,
index: number
): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null {
switch(AnyUniqueAliases[type]) {
case 'NONE': return null;
case 'M': return accessor(index, new Monster())! as Monster;
case 'TS': return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case 'M2': return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
switch(type) {
case AnyUniqueAliases.NONE: return null;
case AnyUniqueAliases.M: return accessor(index, new Monster())! as Monster;
case AnyUniqueAliases.TS: return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case AnyUniqueAliases.M2: return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
default: return null;
}
}
20 changes: 10 additions & 10 deletions tests/ts/my-game/example/any.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ export function unionToAny(
type: Any,
accessor: (obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null
): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null {
switch(Any[type]) {
case 'NONE': return null;
case 'Monster': return accessor(new Monster())! as Monster;
case 'TestSimpleTableWithEnum': return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case 'MyGame_Example2_Monster': return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
switch(type) {
case Any.NONE: return null;
case Any.Monster: return accessor(new Monster())! as Monster;
case Any.TestSimpleTableWithEnum: return accessor(new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case Any.MyGame_Example2_Monster: return accessor(new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
default: return null;
}
}
Expand All @@ -32,11 +32,11 @@ export function unionListToAny(
accessor: (index: number, obj:Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum) => Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null,
index: number
): Monster|MyGame_Example2_Monster|TestSimpleTableWithEnum|null {
switch(Any[type]) {
case 'NONE': return null;
case 'Monster': return accessor(index, new Monster())! as Monster;
case 'TestSimpleTableWithEnum': return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case 'MyGame_Example2_Monster': return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
switch(type) {
case Any.NONE: return null;
case Any.Monster: return accessor(index, new Monster())! as Monster;
case Any.TestSimpleTableWithEnum: return accessor(index, new TestSimpleTableWithEnum())! as TestSimpleTableWithEnum;
case Any.MyGame_Example2_Monster: return accessor(index, new MyGame_Example2_Monster())! as MyGame_Example2_Monster;
default: return null;
}
}
32 changes: 16 additions & 16 deletions tests/ts/union_vector/character.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ export function unionToCharacter(
type: Character,
accessor: (obj:Attacker|BookReader|Rapunzel|string) => Attacker|BookReader|Rapunzel|string|null
): Attacker|BookReader|Rapunzel|string|null {
switch(Character[type]) {
case 'NONE': return null;
case 'MuLan': return accessor(new Attacker())! as Attacker;
case 'Rapunzel': return accessor(new Rapunzel())! as Rapunzel;
case 'Belle': return accessor(new BookReader())! as BookReader;
case 'BookFan': return accessor(new BookReader())! as BookReader;
case 'Other': return accessor('') as string;
case 'Unused': return accessor('') as string;
switch(type) {
case Character.NONE: return null;
case Character.MuLan: return accessor(new Attacker())! as Attacker;
case Character.Rapunzel: return accessor(new Rapunzel())! as Rapunzel;
case Character.Belle: return accessor(new BookReader())! as BookReader;
case Character.BookFan: return accessor(new BookReader())! as BookReader;
case Character.Other: return accessor('') as string;
case Character.Unused: return accessor('') as string;
default: return null;
}
}
Expand All @@ -38,14 +38,14 @@ export function unionListToCharacter(
accessor: (index: number, obj:Attacker|BookReader|Rapunzel|string) => Attacker|BookReader|Rapunzel|string|null,
index: number
): Attacker|BookReader|Rapunzel|string|null {
switch(Character[type]) {
case 'NONE': return null;
case 'MuLan': return accessor(index, new Attacker())! as Attacker;
case 'Rapunzel': return accessor(index, new Rapunzel())! as Rapunzel;
case 'Belle': return accessor(index, new BookReader())! as BookReader;
case 'BookFan': return accessor(index, new BookReader())! as BookReader;
case 'Other': return accessor(index, '') as string;
case 'Unused': return accessor(index, '') as string;
switch(type) {
case Character.NONE: return null;
case Character.MuLan: return accessor(index, new Attacker())! as Attacker;
case Character.Rapunzel: return accessor(index, new Rapunzel())! as Rapunzel;
case Character.Belle: return accessor(index, new BookReader())! as BookReader;
case Character.BookFan: return accessor(index, new BookReader())! as BookReader;
case Character.Other: return accessor(index, '') as string;
case Character.Unused: return accessor(index, '') as string;
default: return null;
}
}
16 changes: 8 additions & 8 deletions tests/ts/union_vector/gadget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ export function unionToGadget(
type: Gadget,
accessor: (obj:FallingTub|HandFan) => FallingTub|HandFan|null
): FallingTub|HandFan|null {
switch(Gadget[type]) {
case 'NONE': return null;
case 'FallingTub': return accessor(new FallingTub())! as FallingTub;
case 'HandFan': return accessor(new HandFan())! as HandFan;
switch(type) {
case Gadget.NONE: return null;
case Gadget.FallingTub: return accessor(new FallingTub())! as FallingTub;
case Gadget.HandFan: return accessor(new HandFan())! as HandFan;
default: return null;
}
}
Expand All @@ -29,10 +29,10 @@ export function unionListToGadget(
accessor: (index: number, obj:FallingTub|HandFan) => FallingTub|HandFan|null,
index: number
): FallingTub|HandFan|null {
switch(Gadget[type]) {
case 'NONE': return null;
case 'FallingTub': return accessor(index, new FallingTub())! as FallingTub;
case 'HandFan': return accessor(index, new HandFan())! as HandFan;
switch(type) {
case Gadget.NONE: return null;
case Gadget.FallingTub: return accessor(index, new FallingTub())! as FallingTub;
case Gadget.HandFan: return accessor(index, new HandFan())! as HandFan;
default: return null;
}
}