Add a utility read_to_string() function.
This commit is contained in:
@@ -3,11 +3,9 @@
|
|||||||
//! Read a sequence of Cretonne IL files and print them again to stdout. This has the effect of
|
//! Read a sequence of Cretonne IL files and print them again to stdout. This has the effect of
|
||||||
//! normalizing formatting and removing comments.
|
//! normalizing formatting and removing comments.
|
||||||
|
|
||||||
use std::fs::File;
|
use std::io;
|
||||||
use std::io::{self, Read};
|
|
||||||
|
|
||||||
use CommandResult;
|
use CommandResult;
|
||||||
|
use utils::read_to_string;
|
||||||
use cton_reader::parse_functions;
|
use cton_reader::parse_functions;
|
||||||
use cretonne::write::write_function;
|
use cretonne::write::write_function;
|
||||||
|
|
||||||
@@ -22,10 +20,7 @@ pub fn run(files: Vec<String>) -> CommandResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn cat_one(filename: String) -> CommandResult {
|
fn cat_one(filename: String) -> CommandResult {
|
||||||
let mut file = try!(File::open(&filename).map_err(|e| format!("{}: {}", filename, e)));
|
let buffer = try!(read_to_string(&filename).map_err(|e| format!("{}: {}", filename, e)));
|
||||||
let mut buffer = String::new();
|
|
||||||
try!(file.read_to_string(&mut buffer)
|
|
||||||
.map_err(|e| format!("Couldn't read {}: {}", filename, e)));
|
|
||||||
let items = try!(parse_functions(&buffer).map_err(|e| format!("{}: {}", filename, e)));
|
let items = try!(parse_functions(&buffer).map_err(|e| format!("{}: {}", filename, e)));
|
||||||
|
|
||||||
for (idx, func) in items.into_iter().enumerate() {
|
for (idx, func) in items.into_iter().enumerate() {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ use docopt::Docopt;
|
|||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
|
mod utils;
|
||||||
mod filetest;
|
mod filetest;
|
||||||
mod cat;
|
mod cat;
|
||||||
mod print_cfg;
|
mod print_cfg;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
//!
|
//!
|
||||||
//! Read a series of Cretonne IL files and print their control flow graphs
|
//! Read a series of Cretonne IL files and print their control flow graphs
|
||||||
//! in graphviz format.
|
//! in graphviz format.
|
||||||
use std::fs::File;
|
use std::io::{Write, stdout};
|
||||||
use std::io::{Read, Write, stdout};
|
|
||||||
|
|
||||||
use CommandResult;
|
use CommandResult;
|
||||||
|
use utils::read_to_string;
|
||||||
use cretonne::ir::Function;
|
use cretonne::ir::Function;
|
||||||
use cretonne::cfg::ControlFlowGraph;
|
use cretonne::cfg::ControlFlowGraph;
|
||||||
use cretonne::ir::instructions::InstructionData;
|
use cretonne::ir::instructions::InstructionData;
|
||||||
@@ -156,10 +156,7 @@ impl<T: Write> CFGPrinter<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn print_cfg(filename: String) -> CommandResult {
|
fn print_cfg(filename: String) -> CommandResult {
|
||||||
let mut file = try!(File::open(&filename).map_err(|e| format!("{}: {}", filename, e)));
|
let buffer = try!(read_to_string(&filename).map_err(|e| format!("{}: {}", filename, e)));
|
||||||
let mut buffer = String::new();
|
|
||||||
try!(file.read_to_string(&mut buffer)
|
|
||||||
.map_err(|e| format!("Couldn't read {}: {}", filename, e)));
|
|
||||||
let items = try!(parse_functions(&buffer).map_err(|e| format!("{}: {}", filename, e)));
|
let items = try!(parse_functions(&buffer).map_err(|e| format!("{}: {}", filename, e)));
|
||||||
|
|
||||||
let mut cfg_printer = CFGPrinter::new(stdout());
|
let mut cfg_printer = CFGPrinter::new(stdout());
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use CommandResult;
|
use CommandResult;
|
||||||
|
use utils::read_to_string;
|
||||||
use filecheck::{CheckerBuilder, Checker, NO_VARIABLES};
|
use filecheck::{CheckerBuilder, Checker, NO_VARIABLES};
|
||||||
use std::fs::File;
|
|
||||||
use std::io::{self, Read};
|
use std::io::{self, Read};
|
||||||
|
|
||||||
pub fn run(files: Vec<String>, verbose: bool) -> CommandResult {
|
pub fn run(files: Vec<String>, verbose: bool) -> CommandResult {
|
||||||
@@ -40,11 +40,7 @@ pub fn run(files: Vec<String>, verbose: bool) -> CommandResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn read_checkfile(filename: &str) -> Result<Checker, String> {
|
fn read_checkfile(filename: &str) -> Result<Checker, String> {
|
||||||
let mut file = try!(File::open(&filename).map_err(|e| format!("{}: {}", filename, e)));
|
let buffer = try!(read_to_string(&filename).map_err(|e| format!("{}: {}", filename, e)));
|
||||||
let mut buffer = String::new();
|
|
||||||
try!(file.read_to_string(&mut buffer)
|
|
||||||
.map_err(|e| format!("Couldn't read {}: {}", filename, e)));
|
|
||||||
|
|
||||||
let mut builder = CheckerBuilder::new();
|
let mut builder = CheckerBuilder::new();
|
||||||
try!(builder.text(&buffer).map_err(|e| format!("{}: {}", filename, e)));
|
try!(builder.text(&buffer).map_err(|e| format!("{}: {}", filename, e)));
|
||||||
Ok(builder.finish())
|
Ok(builder.finish())
|
||||||
|
|||||||
13
src/tools/utils.rs
Normal file
13
src/tools/utils.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//! Utility functions.
|
||||||
|
|
||||||
|
use std::path::Path;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{Result, Read};
|
||||||
|
|
||||||
|
/// Read an entire file into a string.
|
||||||
|
pub fn read_to_string<P: AsRef<Path>>(path: P) -> Result<String> {
|
||||||
|
let mut file = try!(File::open(path));
|
||||||
|
let mut buffer = String::new();
|
||||||
|
try!(file.read_to_string(&mut buffer));
|
||||||
|
Ok(buffer)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user