+ out << *name_ << ':';
+ statement_->Single(out, CYRight(flags), CYCompactShort);
+}
+
+void CYParenthetical::Output(CYOutput &out, CYFlags flags) const {
+ out << '(';
+ expression_->Output(out, CYCompound::Precedence_, CYNoFlags);
+ out << ')';
+}
+
+void CYStatement::Output(CYOutput &out) const {
+ Multiple(out);
+}
+
+void CYTemplate::Output(CYOutput &out, CYFlags flags) const {
+ _assert(false);
+}
+
+void CYTypeArrayOf::Output(CYOutput &out, CYPropertyName *name) const {
+ next_->Output(out, Precedence(), name, false);
+ out << '[';
+ out << size_;
+ out << ']';
+}
+
+void CYTypeBlockWith::Output(CYOutput &out, CYPropertyName *name) const {
+ out << '(' << '^';
+ next_->Output(out, Precedence(), name, false);
+ out << ')' << '(' << parameters_ << ')';
+}
+
+void CYTypeConstant::Output(CYOutput &out, CYPropertyName *name) const {
+ out << "const";
+ next_->Output(out, Precedence(), name, false);
+}
+
+void CYTypeFunctionWith::Output(CYOutput &out, CYPropertyName *name) const {
+ next_->Output(out, Precedence(), name, false);
+ out << '(' << parameters_;
+ if (variadic_) {
+ if (parameters_ != NULL)
+ out << ',' << ' ';
+ out << "...";
+ }
+ out << ')';
+}
+
+void CYTypePointerTo::Output(CYOutput &out, CYPropertyName *name) const {
+ out << '*';
+ next_->Output(out, Precedence(), name, false);
+}
+
+void CYTypeVolatile::Output(CYOutput &out, CYPropertyName *name) const {
+ out << "volatile";
+ next_->Output(out, Precedence(), name, true);
+}
+
+void CYTypeModifier::Output(CYOutput &out, int precedence, CYPropertyName *name, bool space) const {
+ if (this == NULL && name == NULL)
+ return;
+ else if (space)
+ out << ' ';
+
+ if (this == NULL) {
+ name->PropertyName(out);
+ return;
+ }
+
+ bool protect(precedence > Precedence());
+
+ if (protect)
+ out << '(';
+ Output(out, name);
+ if (protect)
+ out << ')';
+}
+
+void CYType::Output(CYOutput &out, CYPropertyName *name) const {
+ out << *specifier_;
+ modifier_->Output(out, 0, name, true);
+}
+
+void CYType::Output(CYOutput &out) const {
+ Output(out, NULL);