WIP commit:

* Fix up project structures
* combine vars and funcs table
* make a place for old code that may be useful to reference
* singleton pattern for sym table

Commentary:
When this change is finally finished I promise to use feature branches
from here on out
This commit is contained in:
Ava Hahn 2023-02-15 23:27:00 -08:00
parent b680e3ca9a
commit ca4c557d95
Signed by untrusted user who does not match committer: affine
GPG key ID: 3A4645B8CF806069
32 changed files with 1092 additions and 616 deletions

View file

@ -3,10 +3,10 @@ mod lex_tests {
#[test]
fn test_lex_basic_pair() {
let document: &str = "(hello 'world')";
match lex(document) {
let document = String::from("(hello 'world')");
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, document);
assert_eq!(tree.to_string(), document);
}
Err(s) => {
print!("{}\n", s);
@ -17,10 +17,10 @@ mod lex_tests {
#[test]
fn test_lex_basic_list() {
let document: &str = "(hello 'world' 1 2 3)";
match lex(document) {
let document = String::from("(hello 'world' 1 2 3)");
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, document);
assert_eq!(tree.to_string(), document);
}
Err(s) => {
print!("{}\n", s);
@ -31,10 +31,10 @@ mod lex_tests {
#[test]
fn test_lex_complex_list() {
let document: &str = "(hello 'world' (1 2 (1 2 3)) 1 2 3)";
match lex(document) {
let document = String::from("(hello 'world' (1 2 (1 2 3)) 1 2 3)");
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, document);
assert_eq!(tree.to_string(), document);
}
Err(s) => {
print!("{}\n", s);
@ -45,11 +45,11 @@ mod lex_tests {
#[test]
fn test_bad_symbol() {
let document: &str = "(as;dd)";
let document = String::from("(as;dd)");
let output: &str = "Problem lexing document: \"Unparsable token: as;dd\"";
match lex(document) {
match lex(&document) {
Ok(tree) => {
print!("Bad token yielded: {}\n", tree);
print!("Bad token yielded: {}\n", tree.to_string());
assert!(false);
}
Err(s) => {
@ -60,10 +60,10 @@ mod lex_tests {
#[test]
fn test_list_delim_in_str() {
let document: &str = "('(')";
match lex(document) {
let document = String::from("('(')");
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, document);
assert_eq!(tree.to_string(), document);
}
Err(s) => {
print!("{}\n", s);
@ -74,10 +74,10 @@ mod lex_tests {
#[test]
fn test_empty_string() {
let document: &str = "('')";
match lex(document) {
let document = String::from("('')");
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, document);
assert_eq!(tree.to_string(), document);
}
Err(s) => {
print!("{}\n", s);
@ -88,11 +88,11 @@ mod lex_tests {
#[test]
fn test_unmatched_list_delim_flat() {
let document: &str = "(one two";
let document = String::from("(one two");
let output: &str = "Problem lexing document: \"Unmatched list delimiter in input\"";
match lex(document) {
match lex(&document) {
Ok(tree) => {
print!("Bad token yielded: {}\n", tree);
print!("Bad token yielded: {}\n", tree.to_string());
assert!(false);
}
Err(s) => {
@ -103,9 +103,9 @@ mod lex_tests {
#[test]
fn test_unmatched_list_delim_complex() {
let document: &str = "(one two (three)";
let document = String::from("(one two (three)");
let output: &str = "Problem lexing document: \"Unmatched list delimiter in input\"";
match lex(document) {
match lex(&document) {
Ok(tree) => {
print!("Bad token yielded: {}\n", tree);
assert!(false);
@ -118,11 +118,11 @@ mod lex_tests {
#[test]
fn test_comment() {
let document: &str = "#!/bin/relish\n(one two)";
let document = String::from("#!/bin/relish\n(one two)");
let output: &str = "(one two)";
match lex(document) {
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, output);
assert_eq!(tree.to_string(), output);
}
Err(s) => {
print!("{}\n", s);
@ -133,11 +133,11 @@ mod lex_tests {
#[test]
fn test_postline_comment() {
let document: &str = "#!/bin/relish\n((one two)# another doc comment\n(three four))";
let document = String::from("#!/bin/relish\n((one two)# another doc comment\n(three four))");
let output: &str = "((one two) (three four))";
match lex(document) {
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, output.to_string());
assert_eq!(tree.to_string(), output.to_string());
}
Err(s) => {
print!("{}\n", s);
@ -148,11 +148,11 @@ mod lex_tests {
#[test]
fn test_inline_comment() {
let document: &str = "#!/bin/relish\n((one two)\n# another doc comment\nthree)";
let document = String::from("#!/bin/relish\n((one two)\n# another doc comment\nthree)");
let output: &str = "((one two) three)";
match lex(document) {
match lex(&document) {
Ok(tree) => {
assert_eq!(tree, output);
assert_eq!(tree.to_string(), output.to_string());
}
Err(s) => {
print!("{}\n", s);
@ -163,9 +163,9 @@ mod lex_tests {
#[test]
fn test_bad_token_list() {
let document: &str = "(one t(wo)";
let document = String::from("(one t(wo)");
let output: &str = "Problem lexing document: \"list started in middle of another token\"";
match lex(document) {
match lex(&document) {
Ok(tree) => {
print!("Bad token yielded: {}\n", tree);
assert!(false);