Path: blob/main/cranelift/codegen/meta/src/cdsl/mod.rs
1693 views
//! Cranelift DSL classes.1//!2//! This module defines the classes that are used to define Cranelift3//! instructions and other entities.45pub mod formats;6pub mod instructions;7pub mod isa;8pub mod operands;9pub mod settings;10pub mod types;11pub mod typevar;1213/// A macro that converts boolean settings into predicates to look more natural.14#[macro_export]15macro_rules! predicate {16($a:ident && $($b:tt)*) => {17PredicateNode::And(Box::new($a.into()), Box::new(predicate!($($b)*)))18};19($a:ident) => {20$a.into()21};22}2324/// A macro that joins boolean settings into a list (e.g. `preset!(feature_a && feature_b)`).25#[macro_export]26macro_rules! preset {27() => {28vec![]29};30($($x:tt)&&*) => {31{32let mut v = Vec::new();33$(34v.push($x.into());35)*36v37}38};39}4041/// Convert the string `s` to CamelCase.42pub fn camel_case(s: &str) -> String {43let mut output_chars = String::with_capacity(s.len());4445let mut capitalize = true;46for curr_char in s.chars() {47if curr_char == '_' {48capitalize = true;49} else {50if capitalize {51output_chars.extend(curr_char.to_uppercase());52} else {53output_chars.push(curr_char);54}55capitalize = false;56}57}5859output_chars60}6162#[cfg(test)]63mod tests {64use super::camel_case;6566#[test]67fn camel_case_works() {68assert_eq!(camel_case("x"), "X");69assert_eq!(camel_case("camel_case"), "CamelCase");70}71}727374