You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
614 B
24 lines
614 B
use std::sync::atomic::AtomicU32;
|
|
|
|
pub use parse_instr::parse_instructions;
|
|
|
|
use crate::asm::error::CrsnError;
|
|
use crate::asm::instr::Op;
|
|
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<dyn CrsnExtension>]) -> Result<Vec<Op>, 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)
|
|
}
|
|
|