Move error collection one level out of type checker
diff --git a/gen/src/mod.rs b/gen/src/mod.rs
index c7b3c3c..0cfdc59 100644
--- a/gen/src/mod.rs
+++ b/gen/src/mod.rs
@@ -8,6 +8,7 @@
 
 use self::error::{format_err, Error, Result};
 use crate::syntax::namespace::Namespace;
+use crate::syntax::report::Errors;
 use crate::syntax::{self, check, Types};
 use quote::quote;
 use std::fs;
@@ -42,12 +43,14 @@
     };
     match (|| -> Result<_> {
         proc_macro2::fallback::force();
+        let ref mut errors = Errors::new();
         let syntax = syn::parse_file(&source)?;
         let bridge = find_bridge_mod(syntax)?;
         let ref namespace = bridge.namespace;
         let ref apis = syntax::parse_items(bridge.module)?;
         let ref types = Types::collect(apis)?;
-        check::typecheck(namespace, apis, types)?;
+        check::typecheck(errors, namespace, apis, types);
+        errors.propagate()?;
         let out = write::gen(namespace, apis, types, opt, header);
         Ok(out)
     })() {