summaryrefslogtreecommitdiff
path: root/src/bin/tq.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/tq.rs')
-rw-r--r--src/bin/tq.rs32
1 files changed, 10 insertions, 22 deletions
diff --git a/src/bin/tq.rs b/src/bin/tq.rs
index ca8fc69..14459d6 100644
--- a/src/bin/tq.rs
+++ b/src/bin/tq.rs
@@ -1,11 +1,9 @@
use torque_asm::*;
-use assembler::FileError;
-use log::{info, fatal};
+use log::*;
use switchboard::*;
use std::io::{Read, Write};
-use std::path::Path;
fn main() {
@@ -29,6 +27,7 @@ fn main() {
|p| p.canonicalize().unwrap_or_else(|e| fatal!("{p:?}: {e:?}")));
let destination = args.get("destination").as_path_opt();
let extension = args.get("extension").as_string();
+ let opt_extension = Some(extension.as_str());
let no_libs = args.get("no-libs").as_bool();
let no_project_libs = args.get("no-project-libs").as_bool();
let no_env_libs = args.get("no-env-libs").as_bool();
@@ -98,39 +97,28 @@ Created by Ben Bridle.
// -----------------------------------------------------------------------
- let mut compiler = if let Some(path) = &source_path {
+ let mut compiler = new_compiler();
+
+ if let Some(path) = &source_path {
info!("Reading program source from {path:?}");
- Compiler::from_path(path).unwrap_or_else(|err| match err {
- FileError::InvalidExtension => fatal!(
- "File {path:?} has invalid extension, must be '.{extension}'"),
- FileError::NotFound => fatal!(
- "File {path:?} was not found"),
- FileError::InvalidUtf8 => fatal!(
- "File {path:?} does not contain valid UTF-8 text"),
- FileError::NotReadable => fatal!(
- "File {path:?} is not readable"),
- FileError::IsADirectory => fatal!(
- "File {path:?} is a directory"),
- FileError::Unknown => fatal!(
- "Unknown error while attempting to read from {path:?}")
- })
+ compiler.root_from_path(path).unwrap_or_else(|err| fatal!("{err:?}: {path:?}"))
} else {
let mut source_code = String::new();
info!("Reading program source from standard input");
if let Err(err) = std::io::stdin().read_to_string(&mut source_code) {
fatal!("Could not read from standard input\n{err:?}");
}
- Compiler::from_string(source_code, "<standard input>")
+ compiler.root_from_string(source_code, "<standard input>")
};
if compiler.error().is_some() && !no_libs && !no_project_libs {
- compiler.include_libs_from_parent(&extension);
+ compiler.include_libs_from_parent(opt_extension);
}
if compiler.error().is_some() && !no_libs && !no_env_libs {
- compiler.include_libs_from_path_variable("TORQUE_LIBS", &extension);
+ compiler.include_libs_from_path_variable("TORQUE_LIBS", opt_extension);
}
if print_tree {
- compiler.resolver.hierarchy().report()
+ compiler.hierarchy().report()
}
if let Some(error) = compiler.error() {
error.report();