From e153fa3e1c23545f61af3ef0603ba0d2045e70be Mon Sep 17 00:00:00 2001 From: imaqtkatt Date: Thu, 12 Oct 2023 11:59:57 -0300 Subject: [PATCH] WIP reorganization --- src/ast/core.rs | 3 ++- src/ast/mod.rs | 4 +--- src/from_core/mod.rs | 10 +++++----- src/lib.rs | 9 +++++---- src/{ast/compat.rs => net/inter_net.rs} | 2 +- src/net/mod.rs | 1 + src/semantic/mod.rs | 2 -- src/semantic/pattern/flatten.rs | 6 +++--- src/semantic/pattern/type_inference.rs | 5 ++++- src/semantic/vars.rs | 5 ++++- src/{loader/mod.rs => term/load_book.rs} | 3 ++- src/{ast/hvm_lang.rs => term/mod.rs} | 6 +++++- src/term/net_to_term/.gitkeep | 0 src/{ => term}/parser/lexer.rs | 0 src/{ => term}/parser/mod.rs | 4 ++-- src/{ => term}/parser/parser.rs | 8 ++++---- src/term/sanitize/.gitkeep | 0 src/term/term_to_net/.gitkeep | 0 .../transform/detach_combinators.rs} | 6 +++--- .../transform/detach_supercombinators.rs} | 5 ++++- src/term/transform/mod.rs | 2 ++ src/term/unsanitize/.gitkeep | 0 src/to_core/compat_net.rs | 8 ++++---- src/to_core/mod.rs | 1 - tests/golden_tests.rs | 6 ++++-- 25 files changed, 56 insertions(+), 40 deletions(-) rename src/{ast/compat.rs => net/inter_net.rs} (99%) create mode 100644 src/net/mod.rs rename src/{loader/mod.rs => term/load_book.rs} (97%) rename src/{ast/hvm_lang.rs => term/mod.rs} (98%) create mode 100644 src/term/net_to_term/.gitkeep rename src/{ => term}/parser/lexer.rs (100%) rename src/{ => term}/parser/mod.rs (63%) rename src/{ => term}/parser/parser.rs (98%) create mode 100644 src/term/sanitize/.gitkeep create mode 100644 src/term/term_to_net/.gitkeep rename src/{semantic/combinators.rs => term/transform/detach_combinators.rs} (99%) rename src/{semantic/supercombinators.rs => term/transform/detach_supercombinators.rs} (97%) create mode 100644 src/term/transform/mod.rs create mode 100644 src/term/unsanitize/.gitkeep diff --git a/src/ast/core.rs b/src/ast/core.rs index d30749c2..b87a065a 100644 --- a/src/ast/core.rs +++ b/src/ast/core.rs @@ -1,4 +1,5 @@ -use super::{hvm_lang::DefNames, DefId}; +use super::DefId; +use crate::term::DefNames; use hvmc::{show_lnet, val_to_name, LNet}; use itertools::Itertools; use std::collections::HashMap; diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 232c2bee..e4287757 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -1,8 +1,6 @@ -pub mod compat; pub mod core; -pub mod hvm_lang; -pub use hvm_lang::{Definition, DefinitionBook, Rule, Term}; +pub use crate::term::{Definition, DefinitionBook, Rule, Term}; use derive_more::{Display, From, Into}; use hvmc::Val; diff --git a/src/from_core/mod.rs b/src/from_core/mod.rs index a212fcb5..a1cdf711 100644 --- a/src/from_core/mod.rs +++ b/src/from_core/mod.rs @@ -1,15 +1,15 @@ -use crate::ast::{ - compat::{ +use crate::{ + ast::{var_id_to_name, DefId, Name, Term}, + net::inter_net::{ addr, enter, kind, link, new_inet, new_node, port, slot, INet, INode, INodes, NodeId, NodeKind, Port, SlotId, CON, DUP, ERA, ITE, LABEL_MASK, REF, ROOT, TAG_MASK, }, - hvm_lang::Op, - var_id_to_name, DefId, DefinitionBook, Name, Term, + term::{DefinitionBook, Op}, }; use hvmc::{LNet, LTree, Val}; use std::collections::{HashMap, HashSet}; -use crate::ast::compat::{label_to_op, NUM, OP2}; +use crate::net::inter_net::{label_to_op, NUM, OP2}; pub fn readback_net(net: &LNet, book: &DefinitionBook) -> anyhow::Result<(Term, bool)> { /* check_lnet_valid(net)?; */ diff --git a/src/lib.rs b/src/lib.rs index 906b8d61..59dc01ca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,19 +3,20 @@ pub mod ast; pub mod from_core; -pub mod loader; -pub mod parser; +pub mod net; pub mod semantic; +pub mod term; pub mod to_core; -use ast::{core::Book, hvm_lang::DefNames, DefinitionBook, Term}; +use ast::{core::Book, DefinitionBook, Term}; use from_core::readback_net; use hvmc::{readback_lnet, LNet}; use semantic::check_main; use std::time::Instant; +use term::DefNames; use to_core::{book_to_hvm_core, book_to_hvm_internal}; -pub use loader::load_file_to_book; +pub use crate::term::load_book::load_file_to_book; pub fn check_book(mut book: DefinitionBook) -> anyhow::Result<()> { // TODO: Do the checks without having to do full compilation diff --git a/src/ast/compat.rs b/src/net/inter_net.rs similarity index 99% rename from src/ast/compat.rs rename to src/net/inter_net.rs index 3f6ffe81..c6a6d60f 100644 --- a/src/ast/compat.rs +++ b/src/net/inter_net.rs @@ -1,6 +1,6 @@ // TODO: Refactor to not use this intermediate form -use super::hvm_lang::Op; +use crate::term::Op; use hvmc::Val; #[derive(Clone, Debug)] diff --git a/src/net/mod.rs b/src/net/mod.rs new file mode 100644 index 00000000..d98332ba --- /dev/null +++ b/src/net/mod.rs @@ -0,0 +1 @@ +pub mod inter_net; diff --git a/src/semantic/mod.rs b/src/semantic/mod.rs index 6a3a942a..2ef8447f 100644 --- a/src/semantic/mod.rs +++ b/src/semantic/mod.rs @@ -1,11 +1,9 @@ /// Semantic checking use crate::ast::{DefinitionBook, Name}; -pub mod combinators; /// Semantic passes for pattern matching on defiinition rules. /// Extract ADTs from patterns in a book, then convert them into lambda calculus. pub mod pattern; -pub mod supercombinators; pub mod vars; pub fn check_main(book: &DefinitionBook) -> anyhow::Result<()> { diff --git a/src/semantic/pattern/flatten.rs b/src/semantic/pattern/flatten.rs index 70a7756e..917bcbc7 100644 --- a/src/semantic/pattern/flatten.rs +++ b/src/semantic/pattern/flatten.rs @@ -1,6 +1,6 @@ -use crate::ast::{ - hvm_lang::{DefNames, Pattern}, - DefId, Definition, DefinitionBook, Name, Rule, Term, +use crate::{ + ast::{DefId, Definition, DefinitionBook, Name, Rule, Term}, + term::{DefNames, Pattern}, }; use hvmc::Val; use std::collections::HashSet; diff --git a/src/semantic/pattern/type_inference.rs b/src/semantic/pattern/type_inference.rs index 793f06ac..0324625b 100644 --- a/src/semantic/pattern/type_inference.rs +++ b/src/semantic/pattern/type_inference.rs @@ -1,5 +1,8 @@ use super::{Adt, AdtId, Type}; -use crate::ast::{hvm_lang::Pattern, DefId, Definition, DefinitionBook, Name}; +use crate::{ + ast::{DefId, Definition, DefinitionBook, Name}, + term::Pattern, +}; use anyhow::anyhow; use itertools::Itertools; use std::collections::HashMap; diff --git a/src/semantic/vars.rs b/src/semantic/vars.rs index 99eea347..6e01f2f7 100644 --- a/src/semantic/vars.rs +++ b/src/semantic/vars.rs @@ -1,4 +1,7 @@ -use crate::ast::{hvm_lang::DefNames, var_id_to_name, DefinitionBook, Name, Term}; +use crate::{ + ast::{var_id_to_name, DefinitionBook, Name, Term}, + term::DefNames, +}; use hvmc::Val; use std::collections::HashMap; diff --git a/src/loader/mod.rs b/src/term/load_book.rs similarity index 97% rename from src/loader/mod.rs rename to src/term/load_book.rs index 3d37a9fc..64252dc4 100644 --- a/src/loader/mod.rs +++ b/src/term/load_book.rs @@ -1,4 +1,5 @@ -use crate::{ast::DefinitionBook, parser::parse_definition_book}; +use super::parser::parse_definition_book; +use crate::ast::DefinitionBook; use ariadne::{Color, Label, Report, ReportKind, Source}; use chumsky::prelude::Rich; use itertools::Itertools; diff --git a/src/ast/hvm_lang.rs b/src/term/mod.rs similarity index 98% rename from src/ast/hvm_lang.rs rename to src/term/mod.rs index 981cb8e6..a7099c33 100644 --- a/src/ast/hvm_lang.rs +++ b/src/term/mod.rs @@ -1,4 +1,8 @@ -use super::{DefId, Name}; +pub mod load_book; +pub mod parser; +pub mod transform; + +use crate::ast::{DefId, Name}; use bimap::{BiHashMap, Overwritten}; use itertools::Itertools; use std::fmt; diff --git a/src/term/net_to_term/.gitkeep b/src/term/net_to_term/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/parser/lexer.rs b/src/term/parser/lexer.rs similarity index 100% rename from src/parser/lexer.rs rename to src/term/parser/lexer.rs diff --git a/src/parser/mod.rs b/src/term/parser/mod.rs similarity index 63% rename from src/parser/mod.rs rename to src/term/parser/mod.rs index dbf61e50..94d41d36 100644 --- a/src/parser/mod.rs +++ b/src/term/parser/mod.rs @@ -1,4 +1,4 @@ -mod lexer; -mod parser; +pub mod lexer; +pub mod parser; pub use parser::{parse_definition_book, parse_term}; diff --git a/src/parser/parser.rs b/src/term/parser/parser.rs similarity index 98% rename from src/parser/parser.rs rename to src/term/parser/parser.rs index 127e2558..281b266e 100644 --- a/src/parser/parser.rs +++ b/src/term/parser/parser.rs @@ -1,7 +1,7 @@ -use super::lexer::LexingError; +use super::lexer::{LexingError, Token}; use crate::{ - ast::{hvm_lang::Pattern, DefId, Definition, DefinitionBook, Name, Rule, Term}, - parser::lexer::Token, + ast::{DefId, Definition, DefinitionBook, Name, Rule, Term}, + term::{Op, Pattern}, }; use chumsky::{ extra, @@ -17,7 +17,7 @@ use itertools::Itertools; use logos::{Logos, SpannedIter}; use std::{iter::Map, ops::Range}; -use crate::ast::hvm_lang::Op; +// use crate::ast::hvm_lang::Op; // TODO: Pattern matching on rules // TODO: Other types of numbers diff --git a/src/term/sanitize/.gitkeep b/src/term/sanitize/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/term/term_to_net/.gitkeep b/src/term/term_to_net/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/semantic/combinators.rs b/src/term/transform/detach_combinators.rs similarity index 99% rename from src/semantic/combinators.rs rename to src/term/transform/detach_combinators.rs index f0b0feb5..eda43b19 100644 --- a/src/semantic/combinators.rs +++ b/src/term/transform/detach_combinators.rs @@ -1,6 +1,6 @@ -use crate::ast::{ - hvm_lang::{DefNames, Op}, - Definition, DefinitionBook, Name, Rule, Term, +use crate::{ + ast::{Definition, DefinitionBook, Name, Rule, Term}, + term::{DefNames, Op}, }; impl DefinitionBook { diff --git a/src/semantic/supercombinators.rs b/src/term/transform/detach_supercombinators.rs similarity index 97% rename from src/semantic/supercombinators.rs rename to src/term/transform/detach_supercombinators.rs index 19cee2c5..8adecf0c 100644 --- a/src/semantic/supercombinators.rs +++ b/src/term/transform/detach_supercombinators.rs @@ -1,4 +1,7 @@ -use crate::ast::{hvm_lang::DefNames, DefId, Definition, DefinitionBook, Name, Rule, Term}; +use crate::{ + ast::{DefId, Definition, DefinitionBook, Name, Rule, Term}, + term::DefNames, +}; use std::collections::HashSet; /// Replaces closed Terms (i.e. without free variables) with a Ref to the extracted term diff --git a/src/term/transform/mod.rs b/src/term/transform/mod.rs new file mode 100644 index 00000000..9dc006ae --- /dev/null +++ b/src/term/transform/mod.rs @@ -0,0 +1,2 @@ +pub mod detach_combinators; +pub mod detach_supercombinators; diff --git a/src/term/unsanitize/.gitkeep b/src/term/unsanitize/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/to_core/compat_net.rs b/src/to_core/compat_net.rs index 0e263bba..7d5e6066 100644 --- a/src/to_core/compat_net.rs +++ b/src/to_core/compat_net.rs @@ -1,14 +1,14 @@ -use crate::ast::{ - compat::{ +use crate::{ + ast::{var_id_to_name, DefId, Name, Term}, + net::inter_net::{ addr, enter, kind, link, new_inet, new_node, port, slot, INet, NodeId, Port, CON, DUP, ERA, ITE, LABEL_MASK, REF, ROOT, TAG_MASK, }, - var_id_to_name, DefId, Name, Term, }; use hvmc::{LNet, LTree, Tag}; use std::collections::{HashMap, HashSet}; -use crate::ast::compat::{op_to_label, NodeKind, NUM, OP2}; +use crate::net::inter_net::{op_to_label, NodeKind, NUM, OP2}; /// Converts an IC term into an IC net. pub fn term_to_compat_net(term: &Term) -> anyhow::Result { diff --git a/src/to_core/mod.rs b/src/to_core/mod.rs index b4e592fa..1e49918b 100644 --- a/src/to_core/mod.rs +++ b/src/to_core/mod.rs @@ -27,7 +27,6 @@ pub fn term_to_hvm_core(term: &Term) -> anyhow::Result { } pub fn book_to_hvm_internal(book: &Book, mem_size: usize) -> anyhow::Result<(hvmc::Net, hvmc::Book)> { - // TODO: Don't try to preallocate a huge buffer let mut root = hvmc::Net::new(mem_size); root.boot(book.main.to_internal()); // TODO: Don't use this workaround diff --git a/tests/golden_tests.rs b/tests/golden_tests.rs index 6d885551..80dce336 100644 --- a/tests/golden_tests.rs +++ b/tests/golden_tests.rs @@ -2,9 +2,11 @@ use hvm_lang::{ ast::{DefId, DefinitionBook}, compile_book, from_core::readback_net, - loader::{display_err_for_text, display_miette_err}, - parser::{parse_definition_book, parse_term}, run_book, + term::{ + load_book::{display_err_for_text, display_miette_err}, + parser::{parse_definition_book, parse_term}, + }, to_core::term_to_hvm_core, }; use hvmc::{parse_lnet, show_lnet, Val};