I have created library/ framework to handle JSON-RPC requests
using D methods. I use some *template magic* to translate
JSON-RPC parameters and return values from/ and to JSON. And I
have encountered funny bug that at first was hard to find. My
programme just segfaulted when call to this method occured:
void getCompiledTemplate(HTTPContext ctx)
{
import std.exception: enforce;
enforce(ctx, `ctx is null`);
enforce(ctx.request, `ctx.request is null`);
enforce(ctx.request.form, `ctx.request is null`);
enforce(ivyEngine !is null, `ivyEngine is null`);
string moduleName = ctx.request.form[`moduleName`];
auto mod = ivyEngine.getByModuleName(moduleName);
return ctx.response.write(mod.toStdJSON().toString());
}
So as you see I have added a lot of enforce to test if all
variables are not null. But nothing was null and the reason of
segfault were unclear.
Today I just went home. Opened a bottle of beer. And have noticed
that function is marked as returning `void`, but in fact it
doesn't. When I fixed this segfault have gone. But why this even
compiled?! Interesting...