class BreakExpr : public ExprWithoutBlock
{
std::vector<Attribute> outer_attrs;
- Lifetime label;
+ LoopLabel label;
std::unique_ptr<Expr> break_expr;
location_t locus;
bool has_break_expr () const { return break_expr != nullptr; }
// Constructor for a break expression
- BreakExpr (Lifetime break_label, std::unique_ptr<Expr> expr_in_break,
+ BreakExpr (LoopLabel break_label, std::unique_ptr<Expr> expr_in_break,
std::vector<Attribute> outer_attribs, location_t locus)
: outer_attrs (std::move (outer_attribs)), label (std::move (break_label)),
break_expr (std::move (expr_in_break)), locus (locus)
outer_attrs = std::move (new_attrs);
}
- Lifetime &get_label () { return label; }
+ LoopLabel &get_label () { return label; }
protected:
/* Use covariance to implement clone function as returning this object rather
void
ASTLoweringExpr::visit (AST::BreakExpr &expr)
{
- HIR::Lifetime break_label = lower_lifetime (expr.get_label ());
+ HIR::Lifetime break_label
+ = lower_lifetime (expr.get_label ().get_lifetime ());
HIR::Expr *break_expr
= expr.has_break_expr ()
? ASTLoweringExpr::translate (expr.get_break_expr ().get ())
{
if (expr.has_label ())
{
- auto label = expr.get_label ();
+ auto label = expr.get_label ().get_lifetime ();
if (label.get_lifetime_type () != AST::Lifetime::LifetimeType::NAMED)
{
rust_error_at (label.get_locus (),
label.get_lifetime_name ()),
&resolved_node))
{
- rust_error_at (expr.get_label ().get_locus (), ErrorCode::E0426,
+ rust_error_at (label.get_locus (), ErrorCode::E0426,
"use of undeclared label %qs in %<break%>",
label.get_lifetime_name ().c_str ());
return;