summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsyn <isaqtm@gmail.com>2020-01-18 21:27:11 +0300
committersyn <isaqtm@gmail.com>2020-01-18 21:27:11 +0300
commit7af2343e276d3040937a6b2e075b4557b83aeb0e (patch)
treeb49cf9aa2fdd351312d788f1d3dd12284d4d4cdd /src
parent326eea2a59784deda086c851d5794a5eb534659b (diff)
downloadevr-7af2343e276d3040937a6b2e075b4557b83aeb0e.tar.gz
Extract 'stdin from file' & add to clang
Diffstat (limited to 'src')
-rw-r--r--src/backends/clang.rs5
-rw-r--r--src/backends/mod.rs19
-rw-r--r--src/backends/python.rs21
3 files changed, 26 insertions, 19 deletions
diff --git a/src/backends/clang.rs b/src/backends/clang.rs
index b732ed5..6248218 100644
--- a/src/backends/clang.rs
+++ b/src/backends/clang.rs
@@ -78,7 +78,10 @@ impl Backend for ClangBackend {
fn run(&self, fname: &Path) -> Result<RunStatus> {
let binary_fname = self.build(fname)?;
- let binary_proc = Command::new(&binary_fname).spawn()?;
+ let binary_proc = Command::new(&binary_fname)
+ .stdin(self.get_stdin(fname))
+ .spawn()?;
+
get_status(binary_proc)
}
}
diff --git a/src/backends/mod.rs b/src/backends/mod.rs
index 25ac164..010c4d9 100644
--- a/src/backends/mod.rs
+++ b/src/backends/mod.rs
@@ -3,6 +3,9 @@ use std::env::temp_dir;
use lazy_static::lazy_static;
use std::io::{ Error, ErrorKind, Result };
use nix::sys::signal::Signal as NixSignal;
+use std::process::Stdio;
+use std::fs::File;
+use log::warn;
pub mod python;
pub mod clang;
@@ -33,6 +36,22 @@ pub trait Backend {
}
None
}
+
+ fn get_stdin(&self, fname: &Path) -> Stdio {
+ match self.try_guess_test_file(fname) {
+ Some(test_filename) => match File::open(&test_filename) {
+ Ok(test_content) => {
+ println!("Using {}", test_filename.as_path().display());
+ Stdio::from(test_content)
+ },
+ Err(err) => {
+ warn!("Could not open test file. Fallback to piped: {}", err);
+ Stdio::piped()
+ }
+ },
+ None => Stdio::piped()
+ }
+ }
}
fn mk_tmp_dir() -> Result<&'static std::path::PathBuf> {
diff --git a/src/backends/python.rs b/src/backends/python.rs
index 8c95e2c..f1d0e4d 100644
--- a/src/backends/python.rs
+++ b/src/backends/python.rs
@@ -1,9 +1,8 @@
use serde_derive::{ Serialize, Deserialize };
use crate::backends::{ Backend, RunStatus };
-use std::process::{ Command, Stdio };
+use std::process::{ Command };
use std::path::Path;
-use std::fs::File;
-use log::{ warn, error };
+use log::error;
use wait_timeout::ChildExt;
#[derive(Debug, Serialize, Deserialize, Default)]
@@ -35,25 +34,11 @@ impl Backend for PythonBackend {
}
fn run(&self, fname: &Path) -> std::io::Result<RunStatus> {
- let stdio = match self.try_guess_test_file(fname) {
- Some(test_filename) => match File::open(&test_filename) {
- Ok(test_content) => {
- println!("Using {}", test_filename.as_path().display());
- Stdio::from(test_content)
- },
- Err(err) => {
- warn!("Could not open test file. Fallback to piped: {}", err);
- Stdio::piped()
- }
- },
- None => Stdio::piped()
- };
-
let timer = std::time::SystemTime::now();
let mut child = Command::new(self.get_interpreter())
.arg(fname.as_os_str())
- .stdin(stdio)
+ .stdin(self.get_stdin(fname))
.spawn()?;
let timeout = std::time::Duration::from_secs_f32(self.timeout.unwrap_or(1.0));