diff --git a/src/protocol/ast.rs b/src/protocol/ast.rs index c119e5ed087671302601906a25c5e0eff565789d..5800b6a77377c7065d6a1b62f336f81296b253c5 100644 --- a/src/protocol/ast.rs +++ b/src/protocol/ast.rs @@ -1170,30 +1170,35 @@ impl Statement { } } - pub fn span(&self) -> InputSpan { + pub fn maybe_span(&self) -> Option { match self { - Statement::Block(v) => v.span, - Statement::Local(v) => v.span(), - Statement::Labeled(v) => v.label.span, - Statement::If(v) => v.span, - Statement::While(v) => v.span, - Statement::Break(v) => v.span, - Statement::Continue(v) => v.span, - Statement::Synchronous(v) => v.span, - Statement::Fork(v) => v.span, - Statement::Select(v) => v.span, - Statement::Return(v) => v.span, - Statement::Goto(v) => v.span, - Statement::New(v) => v.span, - Statement::Expression(v) => v.span, + Statement::Block(v) => Some(v.span), + Statement::Local(v) => Some(v.span()), + Statement::Labeled(v) => Some(v.label.span), + Statement::If(v) => Some(v.span), + Statement::While(v) => Some(v.span), + Statement::Break(v) => Some(v.span), + Statement::Continue(v) => Some(v.span), + Statement::Synchronous(v) => Some(v.span), + Statement::Fork(v) => Some(v.span), + Statement::Select(v) => Some(v.span), + Statement::Return(v) => Some(v.span), + Statement::Goto(v) => Some(v.span), + Statement::New(v) => Some(v.span), + Statement::Expression(v) => Some(v.span), Statement::EndBlock(_) | Statement::EndIf(_) | Statement::EndWhile(_) | Statement::EndSynchronous(_) | Statement::EndFork(_) - | Statement::EndSelect(_) => unreachable!(), + | Statement::EndSelect(_) => None, } } + + pub fn span(&self) -> InputSpan { + return self.maybe_span().unwrap(); + } + pub fn link_next(&mut self, next: StatementId) { match self { Statement::Block(stmt) => stmt.next = next,