37 lines
981 B
Rust
37 lines
981 B
Rust
//! AST types and walkers generated from the single Endor.asdl schema.
|
|
//! Runtime objects remain in the objects crate.
|
|
|
|
mod generated;
|
|
pub mod visitor;
|
|
mod wire;
|
|
|
|
pub use generated::*;
|
|
pub use wire::AstError;
|
|
|
|
use crate::{SourceLocation, Span};
|
|
|
|
/// A syntax node's half-open byte range in its original UTF-8 source.
|
|
pub trait Spanned {
|
|
fn span(&self) -> Span;
|
|
|
|
fn source_text<'a>(&self, source: &'a str) -> Option<&'a str> {
|
|
self.span().slice(source)
|
|
}
|
|
|
|
fn location(&self, source: &str) -> Option<SourceLocation> {
|
|
self.span().location(source)
|
|
}
|
|
}
|
|
|
|
impl Program {
|
|
/// Iterate the currently supported top-level function declarations.
|
|
pub fn functions(&self) -> impl Iterator<Item = &Function> {
|
|
self.declarations
|
|
.iter()
|
|
.filter_map(|declaration| match &declaration.kind {
|
|
DeclKind::Function(function) => Some(function),
|
|
DeclKind::Class(_) => None,
|
|
})
|
|
}
|
|
}
|