Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/codegen/meta/src/cdsl/mod.rs
1693 views
1
//! Cranelift DSL classes.
2
//!
3
//! This module defines the classes that are used to define Cranelift
4
//! instructions and other entities.
5
6
pub mod formats;
7
pub mod instructions;
8
pub mod isa;
9
pub mod operands;
10
pub mod settings;
11
pub mod types;
12
pub mod typevar;
13
14
/// A macro that converts boolean settings into predicates to look more natural.
15
#[macro_export]
16
macro_rules! predicate {
17
($a:ident && $($b:tt)*) => {
18
PredicateNode::And(Box::new($a.into()), Box::new(predicate!($($b)*)))
19
};
20
($a:ident) => {
21
$a.into()
22
};
23
}
24
25
/// A macro that joins boolean settings into a list (e.g. `preset!(feature_a && feature_b)`).
26
#[macro_export]
27
macro_rules! preset {
28
() => {
29
vec![]
30
};
31
($($x:tt)&&*) => {
32
{
33
let mut v = Vec::new();
34
$(
35
v.push($x.into());
36
)*
37
v
38
}
39
};
40
}
41
42
/// Convert the string `s` to CamelCase.
43
pub fn camel_case(s: &str) -> String {
44
let mut output_chars = String::with_capacity(s.len());
45
46
let mut capitalize = true;
47
for curr_char in s.chars() {
48
if curr_char == '_' {
49
capitalize = true;
50
} else {
51
if capitalize {
52
output_chars.extend(curr_char.to_uppercase());
53
} else {
54
output_chars.push(curr_char);
55
}
56
capitalize = false;
57
}
58
}
59
60
output_chars
61
}
62
63
#[cfg(test)]
64
mod tests {
65
use super::camel_case;
66
67
#[test]
68
fn camel_case_works() {
69
assert_eq!(camel_case("x"), "X");
70
assert_eq!(camel_case("camel_case"), "CamelCase");
71
}
72
}
73
74