use std::sync::atomic::{AtomicU32, AtomicU64}; pub use parse_instr::parse_instructions; use crate::asm::error::CrsnError; use crate::asm::instr::{Flatten, Op, Routine}; use crate::asm::parse::sexp_expect::expect_list; use crate::module::CrsnExtension; mod parse_cond; mod parse_instr; pub mod parse_data; pub mod sexp_expect; mod parse_op; pub mod arg_parser; pub fn parse(source: &str, parsers: &[Box]) -> Result, CrsnError> { let items = expect_list(Some(sexp::parse(source)?), true)?; let label_num = AtomicU32::new(0); parse_instructions(items.into_iter(), parsers)? .flatten(&label_num) }