if (parser.parse() != 0 || !driver.errors_.empty())
return NULL;
- CYExpress *express(dynamic_cast<CYExpress *>(driver.program_->statements_));
- _assert(express != NULL);
- return express->expression_;
+ CYOptions options;
+ CYContext context(options);
+
+ // XXX: this could be replaced with a CYStatement::Primitive()
+ if (CYExpress *express = dynamic_cast<CYExpress *>(driver.program_->statements_))
+ return express->expression_->Primitive(context);
+
+ return NULL;
}
static int client_;
virtual CYExpression *Replace(CYContext &context);
void Output(CYOutput &out, CYFlags flags) const;
+
+ virtual CYExpression *Primitive(CYContext &context);
};
struct CYDeclaration;
return this;
}
+CYExpression *CYCompound::Primitive(CYContext &context) {
+ CYExpression *expression(expressions_);
+ if (expression == NULL)
+ return NULL;
+ while (expression->next_ != NULL)
+ expression = expression->next_;
+ return expression->Primitive(context);
+}
+
CYFunctionParameter *CYComprehension::Parameters(CYContext &context) const { $T(NULL)
CYFunctionParameter *next(next_->Parameters(context));
if (CYFunctionParameter *parameter = Parameter(context)) {