~sircmpwn/ipcgen

2f0725219283110c83e4cbc99fad9f058dfab032 — Drew DeVault 2 months ago 37c690a
gen/client: implement enums
1 files changed, 24 insertions(+), 1 deletions(-)

M gen/client.ha
M gen/client.ha => gen/client.ha +24 -1
@@ 166,10 166,33 @@ fn c_meth(
	fmt::fprintln(out)?;
};

const c_enum_head_src: str = `export type $name = enum uint {`;
let ct_enum_head: tmpl::template = [];

@init fn c_enum() void = {
	ct_enum_head = tmpl::compile(c_enum_head_src)!;
};

fn c_enum(
	out: io::handle,
	doc: *ast::document,
	em: *ast::enum_,
) (void | io::error) = {
	abort(); // TODO
	tmpl::execute(&ct_enum_head, out, ("name", em.name))?;

	for (let i = 0z; i < len(em.membs); i += 1) {
		const memb = &em.membs[i];
		fmt::fprintf(out, "\n\t{}", memb.name)?;

		match (memb.val) {
		case void =>
			yield;
		case let val: uint =>
			fmt::fprintf(out, " = {}", val)?;
		};

		fmt::fprintf(out, ",")?;
	};

	fmt::fprintfln(out, "\n}};\n")?;
};