Files
aho_corasick
atty
beef
bitflags
bstr
byteorder
cfg_if
clap
clap_derive
codespan
codespan_reporting
crc_any
crypto_hash
csv
csv_core
debug_helper
filepath
fixed
fixed_macro
fixed_macro_impl
fixed_macro_types
fnv
foreign_types
foreign_types_shared
getrandom
glob
hashbrown
heck
hex
indexmap
itoa
lazy_static
libc
linked_hash_map
linked_hash_set
logos
logos_derive
lrl_test_compiler
maplit
memchr
memoffset
once_cell
openssl
openssl_sys
os_str_bytes
paste
pest
pest_derive
pest_generator
pest_meta
phf
phf_generator
phf_macros
phf_shared
ppv_lite86
proc_macro2
proc_macro_error
proc_macro_error_attr
proc_macro_hack
quote
rand
rand_chacha
rand_core
regex
regex_automata
regex_syntax
remove_dir_all
ring
rowan
rustc_hash
ryu
semver
semver_parser
serde
serde_derive
serde_json
siphasher
smallvec
smawk
smol_str
spin
stable_deref_trait
strsim
syn
taplo
tempfile
termcolor
text_size
textwrap
toml
triomphe
typenum
ucd_trie
unicode_linebreak
unicode_segmentation
unicode_width
unicode_xid
untrusted
utf8_ranges
vec_map
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#![allow(dead_code)]

extern crate pest;
#[macro_use]
extern crate pest_derive;

extern crate byteorder;

mod config;
mod test_assembly;
mod test_binary;
mod test_descriptor;

mod bits;
mod task;
mod lookup_table;

use std::fs;
use std::env;
use task::TaskHandle;

fn main() {
    let args: Vec<String> = env::args().collect();
    let in_file_name = args.get(1).expect("Expected one command line argument with file name");

    println!("Assembler Started\n");

    let root_task = TaskHandle::new("Assembler");

    let input_path  = format!("./examples/assembly/{}.taf", in_file_name);
    let output_path = format!("./examples/target/{}.tbf", in_file_name);

    let _a = assemble(root_task.clone(), input_path, output_path);
    
    root_task.report_results();
}

fn assemble(task: TaskHandle, input_path: String, output_path: String) -> Option<()> {
    let file_read_task = task.sub_task("read", Some(input_path.clone()));
    file_read_task.print_starting();
    let input_text = file_read_task.res_error(fs::read_to_string(&input_path))?;
    file_read_task.print_finished();

    let file_parse_task = task.sub_task("parse", Some(input_path));
    file_parse_task.print_starting();
    let test = test_assembly::parse(file_parse_task.clone(), input_text)?;
    file_parse_task.print_finished();
    
    let binary_emit_task = task.sub_task("emit_binary", Some(output_path.clone()));
    binary_emit_task.print_starting();
    test_binary::emit(binary_emit_task.clone(), test, output_path);
    binary_emit_task.print_finished();
    
    Some(())
}