}
 
 void CYExternal::Output(CYOutput &out, CYFlags flags) const {
-    out << "extern" << abi_ << typed_ << ';';
+    out << "extern" << abi_ << typed_;
+    out.Terminate();
 }
 
 void CYFatArrow::Output(CYOutput &out, CYFlags flags) const {
 
 void CYTypeDefinition::Output(CYOutput &out, CYFlags flags) const {
     out << "typedef" << ' ' << *typed_;
+    out.Terminate();
 }
 
 void CYTypeExpression::Output(CYOutput &out, CYFlags flags) const {
     out << "signed" << specifier_;
 }
 
+void CYTypeStruct::Output(CYOutput &out) const {
+    out << "struct" << ' ';
+    if (name_ != NULL)
+        out << *name_ << ' ';
+    out << '{' << '\n';
+    ++out.indent_;
+    CYForEach (field, fields_) {
+        out << '\t' << *field->typed_;
+        out.Terminate();
+        out << '\n';
+    }
+    --out.indent_;
+    out << '}';
+}
+
 void CYTypeUnsigned::Output(CYOutput &out) const {
     out << "unsigned" << specifier_;
 }