From 6604a26e27ed714348cc6ed10f66ec5e7e2d2725 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Wed, 29 Sep 2021 13:18:30 -0700 Subject: [PATCH] Add a top-level parse function And make `parse_defs` take `self` by ownership. This avoids a couple `Vec` clones. --- cranelift/isle/fuzz/fuzz_targets/parse.rs | 4 +--- cranelift/isle/isle/src/parser.rs | 15 ++++++++++----- cranelift/isle/islec/src/main.rs | 3 +-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cranelift/isle/fuzz/fuzz_targets/parse.rs b/cranelift/isle/fuzz/fuzz_targets/parse.rs index 73cee40e87..67390f865c 100644 --- a/cranelift/isle/fuzz/fuzz_targets/parse.rs +++ b/cranelift/isle/fuzz/fuzz_targets/parse.rs @@ -9,9 +9,7 @@ fuzz_target!(|s: &str| { log::debug!("lexer = {:?}", lexer); if let Ok(lexer) = lexer { - let mut parser = isle::parser::Parser::new(lexer); - - let defs = parser.parse_defs(); + let defs = isle::parser::parse(lexer); log::debug!("defs = {:?}", defs); } }); diff --git a/cranelift/isle/isle/src/parser.rs b/cranelift/isle/isle/src/parser.rs index 1ad29881ec..8d8bbad5d8 100644 --- a/cranelift/isle/isle/src/parser.rs +++ b/cranelift/isle/isle/src/parser.rs @@ -4,11 +4,17 @@ use crate::ast::*; use crate::error::*; use crate::lexer::{Lexer, Pos, Token}; +/// Parse the top-level ISLE definitions and return their AST. +pub fn parse(lexer: Lexer) -> Result { + let parser = Parser::new(lexer); + parser.parse_defs() +} + /// The ISLE parser. /// /// Takes in a lexer and creates an AST. #[derive(Clone, Debug)] -pub struct Parser<'a> { +struct Parser<'a> { lexer: Lexer<'a>, } @@ -113,16 +119,15 @@ impl<'a> Parser<'a> { } } - /// Parse the top-level ISLE definitions and return their AST. - pub fn parse_defs(&mut self) -> Result { + fn parse_defs(mut self) -> Result { let mut defs = vec![]; while !self.lexer.eof() { defs.push(self.parse_def()?); } Ok(Defs { defs, - filenames: self.lexer.filenames.clone(), - file_texts: self.lexer.file_texts.clone(), + filenames: self.lexer.filenames, + file_texts: self.lexer.file_texts, }) } diff --git a/cranelift/isle/islec/src/main.rs b/cranelift/isle/islec/src/main.rs index 031c1769b8..c4e675d064 100644 --- a/cranelift/isle/islec/src/main.rs +++ b/cranelift/isle/islec/src/main.rs @@ -35,8 +35,7 @@ fn main() -> Result<()> { let opts = Opts::from_args(); let lexer = lexer::Lexer::from_files(opts.inputs)?; - let mut parser = parser::Parser::new(lexer); - let defs = parser.parse_defs()?; + let defs = parser::parse(lexer)?; let code = compile::compile(&defs)?; let stdout = io::stdout();