mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:47:44 +00:00
IPCCompiler: Emit message constructors + include ID in serialization
This commit is contained in:
parent
05e08afcd8
commit
36b352554e
1 changed files with 42 additions and 11 deletions
|
@ -201,28 +201,59 @@ int main(int argc, char** argv)
|
||||||
dbg() << "};";
|
dbg() << "};";
|
||||||
dbg();
|
dbg();
|
||||||
|
|
||||||
|
auto constructor_for_message = [&](const String& name, const Vector<Parameter>& parameters) {
|
||||||
|
StringBuilder builder;
|
||||||
|
builder.append(name);
|
||||||
|
|
||||||
|
if (parameters.is_empty()) {
|
||||||
|
builder.append("() {}");
|
||||||
|
return builder.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.append('(');
|
||||||
|
for (int i = 0; i < parameters.size(); ++i) {
|
||||||
|
auto& parameter = parameters[i];
|
||||||
|
builder.append(parameter.type);
|
||||||
|
builder.append(' ');
|
||||||
|
builder.append(parameter.name);
|
||||||
|
if (i != parameters.size() - 1)
|
||||||
|
builder.append(", ");
|
||||||
|
}
|
||||||
|
builder.append(") : ");
|
||||||
|
for (int i = 0; i < parameters.size(); ++i) {
|
||||||
|
auto& parameter = parameters[i];
|
||||||
|
builder.append("m_");
|
||||||
|
builder.append(parameter.name);
|
||||||
|
builder.append("(");
|
||||||
|
builder.append(parameter.name);
|
||||||
|
builder.append(")");
|
||||||
|
if (i != parameters.size() - 1)
|
||||||
|
builder.append(", ");
|
||||||
|
}
|
||||||
|
builder.append(" {}");
|
||||||
|
return builder.to_string();
|
||||||
|
};
|
||||||
|
|
||||||
auto do_message = [&](const String& name, const Vector<Parameter>& parameters, String response_type = {}) {
|
auto do_message = [&](const String& name, const Vector<Parameter>& parameters, String response_type = {}) {
|
||||||
dbg() << "class " << name << " final : public IMessage {";
|
dbg() << "class " << name << " final : public IMessage {";
|
||||||
dbg() << "public:";
|
dbg() << "public:";
|
||||||
if (!response_type.is_null())
|
if (!response_type.is_null())
|
||||||
dbg() << " typedef class " << response_type << " ResponseType;";
|
dbg() << " typedef class " << response_type << " ResponseType;";
|
||||||
|
dbg() << " " << constructor_for_message(name, parameters);
|
||||||
dbg() << " virtual ~" << name << "() override {}";
|
dbg() << " virtual ~" << name << "() override {}";
|
||||||
dbg() << " virtual int id() const override { return (int)MessageID::" << name << "; }";
|
dbg() << " virtual int id() const override { return (int)MessageID::" << name << "; }";
|
||||||
dbg() << " virtual String name() const override { return \"" << endpoint.name << "::" << name << "\"; }";
|
dbg() << " virtual String name() const override { return \"" << endpoint.name << "::" << name << "\"; }";
|
||||||
dbg() << " virtual ByteBuffer encode() override";
|
dbg() << " virtual ByteBuffer encode() override";
|
||||||
dbg() << " {";
|
dbg() << " {";
|
||||||
if (parameters.is_empty()) {
|
// FIXME: Support longer messages:
|
||||||
dbg() << " return {};";
|
dbg() << " auto buffer = ByteBuffer::create_uninitialized(1024);";
|
||||||
} else {
|
dbg() << " BufferStream stream(buffer);";
|
||||||
// FIXME: Support longer messages:
|
dbg() << " stream << (int)MessageID::" << name << ";";
|
||||||
dbg() << " auto buffer = ByteBuffer::create_uninitialized(1024);";
|
for (auto& parameter : parameters) {
|
||||||
dbg() << " BufferStream stream(buffer);";
|
dbg() << " stream << m_" << parameter.name << ";";
|
||||||
for (auto& parameter : parameters) {
|
|
||||||
dbg() << " stream << m_" << parameter.name << ";";
|
|
||||||
}
|
|
||||||
dbg() << " stream.snip();";
|
|
||||||
dbg() << " return buffer;";
|
|
||||||
}
|
}
|
||||||
|
dbg() << " stream.snip();";
|
||||||
|
dbg() << " return buffer;";
|
||||||
dbg() << " }";
|
dbg() << " }";
|
||||||
dbg() << "private:";
|
dbg() << "private:";
|
||||||
for (auto& parameter : parameters) {
|
for (auto& parameter : parameters) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue