+struct CYComprehension :
+ CYNext<CYComprehension>
+{
+ void Output(std::ostream &out) const;
+ virtual const char *Name() const = 0;
+
+ virtual void Begin_(std::ostream &out) const = 0;
+
+ virtual void End_(std::ostream &out) const {
+ }
+};
+
+struct CYForInComprehension :
+ CYComprehension
+{
+ CYIdentifier *name_;
+ CYExpression *set_;
+
+ CYForInComprehension(CYIdentifier *name, CYExpression *set) :
+ name_(name),
+ set_(set)
+ {
+ }
+
+ virtual const char *Name() const {
+ return name_->Value();
+ }
+
+ virtual void Begin_(std::ostream &out) const;
+};
+
+struct CYForEachInComprehension :
+ CYComprehension
+{
+ CYIdentifier *name_;
+ CYExpression *set_;
+
+ CYForEachInComprehension(CYIdentifier *name, CYExpression *set) :
+ name_(name),
+ set_(set)
+ {
+ }
+
+ virtual const char *Name() const {
+ return name_->Value();
+ }
+
+ virtual void Begin_(std::ostream &out) const;
+ virtual void End_(std::ostream &out) const;
+};
+
+struct CYIfComprehension :
+ CYComprehension
+{
+ CYExpression *test_;
+
+ CYIfComprehension(CYExpression *test) :
+ test_(test)
+ {
+ }
+
+ virtual const char *Name() const {
+ return NULL;
+ }
+
+ virtual void Begin_(std::ostream &out) const;
+};
+
+struct CYArrayComprehension :
+ CYExpression
+{
+ CYExpression *expression_;
+ CYComprehension *comprehensions_;
+
+ CYArrayComprehension(CYExpression *expression, CYComprehension *comprehensions) :
+ expression_(expression),
+ comprehensions_(comprehensions)
+ {
+ }
+
+ CYPrecedence(0)
+
+ virtual void Output(std::ostream &out, CYFlags flags) const;
+};
+