@@ 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")?;
};