blob: 4831cad2f03dc4f7dfc23923f823407b7d549a1a [file] [log] [blame]
#include <cstdarg>
#include <cstdint>
#include <cstdlib>
#include <ostream>
#include <new>
enum class C : uint32_t {
X = 2,
Y,
};
inline std::ostream& operator<<(std::ostream& stream, const C& instance) {
switch (instance) {
case C::X: stream << "X"; break;
case C::Y: stream << "Y"; break;
}
return stream;
}
struct A {
int32_t _0;
friend std::ostream& operator<<(std::ostream& stream, const A& instance) {
return stream << "{ " << "_0=" << instance._0 << " }";
}
};
struct B {
int32_t x;
float y;
friend std::ostream& operator<<(std::ostream& stream, const B& instance) {
return stream << "{ " << "x=" << instance.x << ", "
<< "y=" << instance.y << " }";
}
};
struct D {
uint8_t List;
uintptr_t Of;
B Things;
friend std::ostream& operator<<(std::ostream& stream, const D& instance) {
return stream << "{ " << "List=" << instance.List << ", "
<< "Of=" << instance.Of << ", "
<< "Things=" << instance.Things << " }";
}
};
union F {
enum class Tag : uint8_t {
Foo,
Bar,
Baz,
};
friend std::ostream& operator<<(std::ostream& stream, const Tag& instance) {
using Tag = F::Tag;
switch (instance) {
case Tag::Foo: stream << "Foo"; break;
case Tag::Bar: stream << "Bar"; break;
case Tag::Baz: stream << "Baz"; break;
}
return stream;
}
friend std::ostream& operator<<(std::ostream& stream, const F& instance) {
using Tag = F::Tag;
switch (instance.tag) {
case Tag::Foo: stream << instance.foo; break;
case Tag::Bar: stream << instance.bar; break;
case Tag::Baz: stream << "Baz"; break;
}
return stream;
}
struct Foo_Body {
Tag tag;
int16_t _0;
friend std::ostream& operator<<(std::ostream& stream, const Foo_Body& instance) {
return stream << "{ " << "tag=" << instance.tag << ", "
<< "_0=" << instance._0 << " }";
}
};
struct Bar_Body {
Tag tag;
uint8_t x;
int16_t y;
friend std::ostream& operator<<(std::ostream& stream, const Bar_Body& instance) {
return stream << "{ " << "tag=" << instance.tag << ", "
<< "x=" << instance.x << ", "
<< "y=" << instance.y << " }";
}
};
struct {
Tag tag;
};
Foo_Body foo;
Bar_Body bar;
};
struct H {
enum class Tag : uint8_t {
Hello,
There,
Everyone,
};
friend std::ostream& operator<<(std::ostream& stream, const Tag& instance) {
using Tag = H::Tag;
switch (instance) {
case Tag::Hello: stream << "Hello"; break;
case Tag::There: stream << "There"; break;
case Tag::Everyone: stream << "Everyone"; break;
}
return stream;
}
friend std::ostream& operator<<(std::ostream& stream, const H& instance) {
using Tag = H::Tag;
switch (instance.tag) {
case Tag::Hello: stream << "Hello" << instance.hello; break;
case Tag::There: stream << "There" << instance.there; break;
case Tag::Everyone: stream << "Everyone"; break;
}
return stream;
}
struct Hello_Body {
int16_t _0;
friend std::ostream& operator<<(std::ostream& stream, const Hello_Body& instance) {
return stream << "{ " << "_0=" << instance._0 << " }";
}
};
struct There_Body {
uint8_t x;
int16_t y;
friend std::ostream& operator<<(std::ostream& stream, const There_Body& instance) {
return stream << "{ " << "x=" << instance.x << ", "
<< "y=" << instance.y << " }";
}
};
Tag tag;
union {
Hello_Body hello;
There_Body there;
};
};
struct I {
enum class Tag : uint8_t {
ThereAgain,
SomethingElse,
};
struct ThereAgain_Body {
uint8_t x;
int16_t y;
friend std::ostream& operator<<(std::ostream& stream, const ThereAgain_Body& instance) {
return stream << "{ " << "x=" << instance.x << ", "
<< "y=" << instance.y << " }";
}
};
Tag tag;
union {
ThereAgain_Body there_again;
};
};
extern "C" {
void root(A a, B b, C c, D d, F f, H h, I i);
} // extern "C"