Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/reader/src/testfile.rs
2450 views
1
//! Data structures representing a parsed test file.
2
//!
3
//! A test file is a `.clif` file which contains test commands and settings for running a
4
//! file-based test case.
5
//!
6
7
use crate::error::Location;
8
use crate::isaspec::IsaSpec;
9
use crate::sourcemap::SourceMap;
10
use crate::testcommand::TestCommand;
11
use cranelift_codegen::ir::Function;
12
use cranelift_codegen::ir::entities::AnyEntity;
13
14
/// A parsed test case.
15
///
16
/// This is the result of parsing a `.clif` file which contains a number of test commands and ISA
17
/// specs followed by the functions that should be tested.
18
pub struct TestFile<'a> {
19
/// `test foo ...` lines.
20
pub commands: Vec<TestCommand<'a>>,
21
/// `isa bar ...` lines.
22
pub isa_spec: IsaSpec,
23
/// `feature ...` lines
24
pub features: Vec<Feature<'a>>,
25
/// Comments appearing before the first function.
26
/// These are all tagged as 'Function' scope for lack of a better entity.
27
pub preamble_comments: Vec<Comment<'a>>,
28
/// Parsed functions and additional details about each function.
29
pub functions: Vec<(Function, Details<'a>)>,
30
}
31
32
/// Additional details about a function parsed from a text string.
33
/// These are useful for detecting test commands embedded in comments etc.
34
/// The details to not affect the semantics of the function.
35
#[derive(Debug)]
36
pub struct Details<'a> {
37
/// Location of the `function` keyword that begins this function.
38
pub location: Location,
39
/// Annotation comments that appeared inside or after the function.
40
pub comments: Vec<Comment<'a>>,
41
/// Mapping of entity numbers to source locations.
42
pub map: SourceMap,
43
}
44
45
/// A comment in a parsed function.
46
///
47
/// The comment belongs to the immediately preceding entity, whether that is a block header, and
48
/// instruction, or one of the preamble declarations.
49
///
50
/// Comments appearing inside the function but before the preamble, as well as comments appearing
51
/// after the function are tagged as `AnyEntity::Function`.
52
#[derive(Clone, PartialEq, Eq, Debug)]
53
pub struct Comment<'a> {
54
/// The entity this comment is attached to.
55
/// Comments always follow their entity.
56
pub entity: AnyEntity,
57
/// Text of the comment, including the leading `;`.
58
pub text: &'a str,
59
}
60
61
/// A cranelift feature in a test file preamble.
62
///
63
/// This represents the expectation of the test case. Before running any of the
64
/// functions of the test file, the feature set should be compared with the
65
/// feature set used to compile Cranelift. If there is any differences, then the
66
/// test file should be skipped.
67
#[derive(PartialEq, Eq, Debug)]
68
pub enum Feature<'a> {
69
/// `feature "..."` lines
70
With(&'a str),
71
/// `feature ! "..."` lines.
72
Without(&'a str),
73
}
74
75