Path: blob/main/cranelift/codegen/meta/src/cdsl/mod.rs
3079 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 joins boolean settings into a list (e.g. `preset!(feature_a && feature_b)`).14#[macro_export]15macro_rules! preset {16() => {17vec![]18};19($($x:tt)&&*) => {20{21let mut v = Vec::new();22$(23v.push($x.into());24)*25v26}27};28}2930/// Convert the string `s` to CamelCase.31pub fn camel_case(s: &str) -> String {32let mut output_chars = String::with_capacity(s.len());3334let mut capitalize = true;35for curr_char in s.chars() {36if curr_char == '_' {37capitalize = true;38} else {39if capitalize {40output_chars.extend(curr_char.to_uppercase());41} else {42output_chars.push(curr_char);43}44capitalize = false;45}46}4748output_chars49}5051#[cfg(test)]52mod tests {53use super::camel_case;5455#[test]56fn camel_case_works() {57assert_eq!(camel_case("x"), "X");58assert_eq!(camel_case("camel_case"), "CamelCase");59}60}616263