1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
//! Data structures representing a parsed test file. //! //! A test file is a `.clif` file which contains test commands and settings for running a //! file-based test case. //! use crate::error::Location; use crate::isaspec::IsaSpec; use crate::sourcemap::SourceMap; use crate::testcommand::TestCommand; use cranelift_codegen::ir::entities::AnyEntity; use cranelift_codegen::ir::Function; /// A parsed test case. /// /// This is the result of parsing a `.clif` file which contains a number of test commands and ISA /// specs followed by the functions that should be tested. pub struct TestFile<'a> { /// `test foo ...` lines. pub commands: Vec<TestCommand<'a>>, /// `isa bar ...` lines. pub isa_spec: IsaSpec, /// Comments appearing before the first function. /// These are all tagged as 'Function' scope for lack of a better entity. pub preamble_comments: Vec<Comment<'a>>, /// Parsed functions and additional details about each function. pub functions: Vec<(Function, Details<'a>)>, } /// Additional details about a function parsed from a text string. /// These are useful for detecting test commands embedded in comments etc. /// The details to not affect the semantics of the function. #[derive(Debug)] pub struct Details<'a> { /// Location of the `function` keyword that begins this function. pub location: Location, /// Annotation comments that appeared inside or after the function. pub comments: Vec<Comment<'a>>, /// Mapping of entity numbers to source locations. pub map: SourceMap, } /// A comment in a parsed function. /// /// The comment belongs to the immediately preceding entity, whether that is an EBB header, and /// instruction, or one of the preamble declarations. /// /// Comments appearing inside the function but before the preamble, as well as comments appearing /// after the function are tagged as `AnyEntity::Function`. #[derive(Clone, PartialEq, Eq, Debug)] pub struct Comment<'a> { /// The entity this comment is attached to. /// Comments always follow their entity. pub entity: AnyEntity, /// Text of the comment, including the leading `;`. pub text: &'a str, }