From 72ccca1b84d05b8624c2aeb72ec75c3a872fba4e Mon Sep 17 00:00:00 2001 From: Tim Fennis Date: Mon, 2 Mar 2026 21:43:55 +0100 Subject: [PATCH 1/3] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Rename=20ndc=5Flib=20t?= =?UTF-8?q?o=20ndc=5Finterpreter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 30 +-- Cargo.toml | 4 +- benches/Cargo.toml | 2 +- benches/src/benchmark.rs | 4 +- ndc_bin/Cargo.toml | 2 +- ndc_bin/src/diagnostic.rs | 2 +- ndc_bin/src/docs.rs | 4 +- ndc_bin/src/main.rs | 2 +- ndc_bin/src/repl.rs | 2 +- {ndc_lib => ndc_interpreter}/Cargo.toml | 2 +- {ndc_lib => ndc_interpreter}/src/compare.rs | 0 {ndc_lib => ndc_interpreter}/src/hash_map.rs | 0 .../src/interpreter/environment.rs | 0 .../src/interpreter/evaluate/index.rs | 0 .../src/interpreter/evaluate/mod.rs | 0 .../src/interpreter/function.rs | 0 .../src/interpreter/heap.rs | 0 .../src/interpreter/int.rs | 0 .../src/interpreter/iterator.rs | 0 .../src/interpreter/mod.rs | 0 .../src/interpreter/num.rs | 0 .../src/interpreter/semantic/analyser.rs | 0 .../src/interpreter/semantic/mod.rs | 0 .../src/interpreter/sequence.rs | 0 .../src/interpreter/value.rs | 0 {ndc_lib => ndc_interpreter}/src/lib.rs | 0 ndc_lsp/Cargo.toml | 2 +- ndc_lsp/src/backend.rs | 2 +- ndc_macros/src/convert.rs | 20 +- ndc_macros/src/function.rs | 178 +++++++++--------- ndc_macros/src/lib.rs | 2 +- ndc_stdlib/Cargo.toml | 2 +- ndc_stdlib/src/aoc.rs | 8 +- ndc_stdlib/src/cmp.rs | 4 +- ndc_stdlib/src/deque.rs | 4 +- ndc_stdlib/src/file.rs | 6 +- ndc_stdlib/src/hash_map.rs | 10 +- ndc_stdlib/src/heap.rs | 6 +- ndc_stdlib/src/lib.rs | 4 +- ndc_stdlib/src/list.rs | 6 +- ndc_stdlib/src/math.rs | 20 +- ndc_stdlib/src/rand.rs | 8 +- ndc_stdlib/src/regex.rs | 2 +- ndc_stdlib/src/sequence.rs | 16 +- ndc_stdlib/src/serde.rs | 20 +- ndc_stdlib/src/string.rs | 6 +- ndc_stdlib/src/value.rs | 8 +- tests/Cargo.toml | 2 +- tests/src/programs.rs | 2 +- 49 files changed, 196 insertions(+), 196 deletions(-) rename {ndc_lib => ndc_interpreter}/Cargo.toml (95%) rename {ndc_lib => ndc_interpreter}/src/compare.rs (100%) rename {ndc_lib => ndc_interpreter}/src/hash_map.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/environment.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/evaluate/index.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/evaluate/mod.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/function.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/heap.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/int.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/iterator.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/mod.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/num.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/semantic/analyser.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/semantic/mod.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/sequence.rs (100%) rename {ndc_lib => ndc_interpreter}/src/interpreter/value.rs (100%) rename {ndc_lib => ndc_interpreter}/src/lib.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index e5cafc1b..39da850d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -167,7 +167,7 @@ name = "benches" version = "0.0.0" dependencies = [ "criterion", - "ndc_lib", + "ndc_interpreter", "ndc_stdlib", "rand", "rand_chacha", @@ -1248,8 +1248,8 @@ dependencies = [ "clap", "itertools 0.14.0", "miette", + "ndc_interpreter", "ndc_lexer", - "ndc_lib", "ndc_lsp", "ndc_stdlib", "owo-colors", @@ -1261,16 +1261,7 @@ dependencies = [ ] [[package]] -name = "ndc_lexer" -version = "0.2.1" -dependencies = [ - "num", - "ryu", - "thiserror", -] - -[[package]] -name = "ndc_lib" +name = "ndc_interpreter" version = "0.2.1" dependencies = [ "ahash", @@ -1287,12 +1278,21 @@ dependencies = [ "thiserror", ] +[[package]] +name = "ndc_lexer" +version = "0.2.1" +dependencies = [ + "num", + "ryu", + "thiserror", +] + [[package]] name = "ndc_lsp" version = "0.2.1" dependencies = [ + "ndc_interpreter", "ndc_lexer", - "ndc_lib", "ndc_parser", "ndc_stdlib", "tokio", @@ -1328,7 +1328,7 @@ dependencies = [ "factorial", "itertools 0.14.0", "md5", - "ndc_lib", + "ndc_interpreter", "ndc_macros", "num", "once_cell", @@ -2063,7 +2063,7 @@ dependencies = [ name = "tests" version = "0.2.1" dependencies = [ - "ndc_lib", + "ndc_interpreter", "ndc_stdlib", "owo-colors", ] diff --git a/Cargo.toml b/Cargo.toml index 22e7b22a..d22d3ec4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "3" -members = ["ndc_macros", "ndc_bin", "ndc_lib", "ndc_lsp", "ndc_lexer", "ndc_parser", "ndc_stdlib", "benches", "tests"] +members = ["ndc_macros", "ndc_bin", "ndc_interpreter", "ndc_lsp", "ndc_lexer", "ndc_parser", "ndc_stdlib", "benches", "tests"] [workspace.package] edition = "2024" @@ -18,7 +18,7 @@ derive_more = { version = "2.1.1", features = ["deref", "deref_mut", "from", "di factorial = "0.4.0" itertools = "0.14.0" ndc_lexer = { path = "ndc_lexer" } -ndc_lib = { path = "ndc_lib" } +ndc_interpreter = { path = "ndc_interpreter" } ndc_parser = { path = "ndc_parser" } ndc_lsp = { path = "ndc_lsp" } ndc_macros = { path = "ndc_macros" } diff --git a/benches/Cargo.toml b/benches/Cargo.toml index 4c7ecc06..2750ec3c 100644 --- a/benches/Cargo.toml +++ b/benches/Cargo.toml @@ -4,7 +4,7 @@ edition.workspace = true license.workspace = true [dependencies] -ndc_lib.workspace = true +ndc_interpreter.workspace = true ndc_stdlib.workspace = true rand.workspace = true criterion.workspace = true diff --git a/benches/src/benchmark.rs b/benches/src/benchmark.rs index fba47fa5..48a55f2d 100644 --- a/benches/src/benchmark.rs +++ b/benches/src/benchmark.rs @@ -1,6 +1,6 @@ use criterion::{Criterion, criterion_group, criterion_main}; -use ndc_lib::interpreter::Interpreter; -use ndc_lib::interpreter::InterpreterError; +use ndc_interpreter::interpreter::Interpreter; +use ndc_interpreter::interpreter::InterpreterError; use ndc_stdlib::WithStdlib; use rand::{RngExt, SeedableRng}; use rand_chacha::ChaCha8Rng; diff --git a/ndc_bin/Cargo.toml b/ndc_bin/Cargo.toml index bdacdfcc..2cd5c4f4 100644 --- a/ndc_bin/Cargo.toml +++ b/ndc_bin/Cargo.toml @@ -15,7 +15,7 @@ itertools.workspace = true strsim.workspace = true miette = { version = "7.6.0", features = ["fancy"] } ndc_lexer.workspace = true -ndc_lib.workspace = true +ndc_interpreter.workspace = true ndc_stdlib.workspace = true ndc_lsp.workspace = true owo-colors.workspace = true diff --git a/ndc_bin/src/diagnostic.rs b/ndc_bin/src/diagnostic.rs index 5144dc89..a5a1da1e 100644 --- a/ndc_bin/src/diagnostic.rs +++ b/ndc_bin/src/diagnostic.rs @@ -1,6 +1,6 @@ use miette::{Diagnostic, LabeledSpan, SourceSpan}; use ndc_lexer::Span; -use ndc_lib::interpreter::InterpreterError; +use ndc_interpreter::interpreter::InterpreterError; use std::fmt; fn span_to_source_span(span: Span) -> SourceSpan { diff --git a/ndc_bin/src/docs.rs b/ndc_bin/src/docs.rs index 3cad915e..68cb7ade 100644 --- a/ndc_bin/src/docs.rs +++ b/ndc_bin/src/docs.rs @@ -1,5 +1,5 @@ -use ndc_lib::interpreter::Interpreter; -use ndc_lib::interpreter::function::{Parameter, TypeSignature}; +use ndc_interpreter::interpreter::Interpreter; +use ndc_interpreter::interpreter::function::{Parameter, TypeSignature}; use ndc_stdlib::WithStdlib; use std::cmp::Ordering; use std::fmt::Write; diff --git a/ndc_bin/src/main.rs b/ndc_bin/src/main.rs index 05a97d3c..23681a87 100644 --- a/ndc_bin/src/main.rs +++ b/ndc_bin/src/main.rs @@ -5,7 +5,7 @@ use anyhow::{Context, anyhow}; use clap::{Parser, Subcommand}; use highlighter::{AndycppHighlighter, AndycppHighlighterState}; use miette::{NamedSource, highlighters::HighlighterState}; -use ndc_lib::interpreter::{Interpreter, InterpreterError}; +use ndc_interpreter::interpreter::{Interpreter, InterpreterError}; use ndc_stdlib::WithStdlib; use std::path::PathBuf; use std::process; diff --git a/ndc_bin/src/repl.rs b/ndc_bin/src/repl.rs index ec71d900..049b349c 100644 --- a/ndc_bin/src/repl.rs +++ b/ndc_bin/src/repl.rs @@ -1,7 +1,7 @@ #![allow(clippy::print_stdout, clippy::print_stderr)] use itertools::Itertools; use miette::highlighters::HighlighterState; -use ndc_lib::interpreter::Interpreter; +use ndc_interpreter::interpreter::Interpreter; use ndc_stdlib::WithStdlib; use rustyline::Helper; use rustyline::config::Configurer; diff --git a/ndc_lib/Cargo.toml b/ndc_interpreter/Cargo.toml similarity index 95% rename from ndc_lib/Cargo.toml rename to ndc_interpreter/Cargo.toml index 9692c983..2810e5ec 100644 --- a/ndc_lib/Cargo.toml +++ b/ndc_interpreter/Cargo.toml @@ -1,6 +1,6 @@ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [package] -name = "ndc_lib" +name = "ndc_interpreter" edition.workspace = true version.workspace = true diff --git a/ndc_lib/src/compare.rs b/ndc_interpreter/src/compare.rs similarity index 100% rename from ndc_lib/src/compare.rs rename to ndc_interpreter/src/compare.rs diff --git a/ndc_lib/src/hash_map.rs b/ndc_interpreter/src/hash_map.rs similarity index 100% rename from ndc_lib/src/hash_map.rs rename to ndc_interpreter/src/hash_map.rs diff --git a/ndc_lib/src/interpreter/environment.rs b/ndc_interpreter/src/interpreter/environment.rs similarity index 100% rename from ndc_lib/src/interpreter/environment.rs rename to ndc_interpreter/src/interpreter/environment.rs diff --git a/ndc_lib/src/interpreter/evaluate/index.rs b/ndc_interpreter/src/interpreter/evaluate/index.rs similarity index 100% rename from ndc_lib/src/interpreter/evaluate/index.rs rename to ndc_interpreter/src/interpreter/evaluate/index.rs diff --git a/ndc_lib/src/interpreter/evaluate/mod.rs b/ndc_interpreter/src/interpreter/evaluate/mod.rs similarity index 100% rename from ndc_lib/src/interpreter/evaluate/mod.rs rename to ndc_interpreter/src/interpreter/evaluate/mod.rs diff --git a/ndc_lib/src/interpreter/function.rs b/ndc_interpreter/src/interpreter/function.rs similarity index 100% rename from ndc_lib/src/interpreter/function.rs rename to ndc_interpreter/src/interpreter/function.rs diff --git a/ndc_lib/src/interpreter/heap.rs b/ndc_interpreter/src/interpreter/heap.rs similarity index 100% rename from ndc_lib/src/interpreter/heap.rs rename to ndc_interpreter/src/interpreter/heap.rs diff --git a/ndc_lib/src/interpreter/int.rs b/ndc_interpreter/src/interpreter/int.rs similarity index 100% rename from ndc_lib/src/interpreter/int.rs rename to ndc_interpreter/src/interpreter/int.rs diff --git a/ndc_lib/src/interpreter/iterator.rs b/ndc_interpreter/src/interpreter/iterator.rs similarity index 100% rename from ndc_lib/src/interpreter/iterator.rs rename to ndc_interpreter/src/interpreter/iterator.rs diff --git a/ndc_lib/src/interpreter/mod.rs b/ndc_interpreter/src/interpreter/mod.rs similarity index 100% rename from ndc_lib/src/interpreter/mod.rs rename to ndc_interpreter/src/interpreter/mod.rs diff --git a/ndc_lib/src/interpreter/num.rs b/ndc_interpreter/src/interpreter/num.rs similarity index 100% rename from ndc_lib/src/interpreter/num.rs rename to ndc_interpreter/src/interpreter/num.rs diff --git a/ndc_lib/src/interpreter/semantic/analyser.rs b/ndc_interpreter/src/interpreter/semantic/analyser.rs similarity index 100% rename from ndc_lib/src/interpreter/semantic/analyser.rs rename to ndc_interpreter/src/interpreter/semantic/analyser.rs diff --git a/ndc_lib/src/interpreter/semantic/mod.rs b/ndc_interpreter/src/interpreter/semantic/mod.rs similarity index 100% rename from ndc_lib/src/interpreter/semantic/mod.rs rename to ndc_interpreter/src/interpreter/semantic/mod.rs diff --git a/ndc_lib/src/interpreter/sequence.rs b/ndc_interpreter/src/interpreter/sequence.rs similarity index 100% rename from ndc_lib/src/interpreter/sequence.rs rename to ndc_interpreter/src/interpreter/sequence.rs diff --git a/ndc_lib/src/interpreter/value.rs b/ndc_interpreter/src/interpreter/value.rs similarity index 100% rename from ndc_lib/src/interpreter/value.rs rename to ndc_interpreter/src/interpreter/value.rs diff --git a/ndc_lib/src/lib.rs b/ndc_interpreter/src/lib.rs similarity index 100% rename from ndc_lib/src/lib.rs rename to ndc_interpreter/src/lib.rs diff --git a/ndc_lsp/Cargo.toml b/ndc_lsp/Cargo.toml index f8d20249..9a26c848 100644 --- a/ndc_lsp/Cargo.toml +++ b/ndc_lsp/Cargo.toml @@ -7,7 +7,7 @@ version.workspace = true [dependencies] tokio = { version = "1.49.0", features = ["full"] } ndc_lexer.workspace = true -ndc_lib.workspace = true +ndc_interpreter.workspace = true ndc_stdlib.workspace = true tower-lsp.workspace = true ndc_parser.workspace = true diff --git a/ndc_lsp/src/backend.rs b/ndc_lsp/src/backend.rs index af6ff24e..b4f7af4f 100644 --- a/ndc_lsp/src/backend.rs +++ b/ndc_lsp/src/backend.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use ndc_lexer::{Lexer, Span, TokenLocation}; -use ndc_lib::interpreter::Interpreter; +use ndc_interpreter::interpreter::Interpreter; use ndc_parser::{Expression, ExpressionLocation, ForBody, ForIteration, Lvalue}; use ndc_stdlib::WithStdlib; use tokio::sync::Mutex; diff --git a/ndc_macros/src/convert.rs b/ndc_macros/src/convert.rs index e280e83d..5f133127 100644 --- a/ndc_macros/src/convert.rs +++ b/ndc_macros/src/convert.rs @@ -28,7 +28,7 @@ impl TypeConverter for MutRefString { } fn static_type(&self) -> TokenStream { - quote! { ndc_lib::interpreter::function::StaticType::String } + quote! { ndc_interpreter::interpreter::function::StaticType::String } } fn convert( @@ -42,7 +42,7 @@ impl TypeConverter for MutRefString { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::String but wasn't"); }; let #argument_var_name = &mut *#temp_var.try_borrow_mut()?; @@ -73,7 +73,7 @@ impl TypeConverter for InternalMap { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Map(#temp_var, _)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#temp_var, _)) = #argument_var_name else { panic!("Value #position needed to be Sequence::Map but wasn't"); }; @@ -89,7 +89,7 @@ impl TypeConverter for InternalString { } fn static_type(&self) -> TokenStream { - quote! { ndc_lib::interpreter::function::StaticType::String } + quote! { ndc_interpreter::interpreter::function::StaticType::String } } fn convert( @@ -103,7 +103,7 @@ impl TypeConverter for InternalString { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { panic!("Value #position needed to be Sequence::List but wasn't"); }; @@ -122,8 +122,8 @@ impl TypeConverter for InternalList { fn static_type(&self) -> TokenStream { // TODO: just hardcoding Any here is lazy quote! { - ndc_lib::interpreter::function::StaticType::List(Box::new( - ndc_lib::interpreter::function::StaticType::Any + ndc_interpreter::interpreter::function::StaticType::List(Box::new( + ndc_interpreter::interpreter::function::StaticType::Any )) } } @@ -139,7 +139,7 @@ impl TypeConverter for InternalList { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::List(#temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#temp_var)) = #argument_var_name else { panic!("Value #position needed to be Sequence::List but wasn't"); }; @@ -164,11 +164,11 @@ impl TypeConverter for InternalList { // argument_var_name: syn::Ident, // ) -> Vec { // vec![Argument { -// param_type: quote! { ndc_lib::interpreter::function::StaticType::Tuple }, +// param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Tuple }, // param_name: quote! { #original_name }, // argument: quote! { #argument_var_name }, // initialize_code: quote! { -// let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Tuple(#temp_var)) = #argument_var_name else { +// let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Tuple(#temp_var)) = #argument_var_name else { // panic!("Value #position needed to be Sequence::Tuple but wasn't"); // }; // diff --git a/ndc_macros/src/function.rs b/ndc_macros/src/function.rs index 32ee9327..e108cad0 100644 --- a/ndc_macros/src/function.rs +++ b/ndc_macros/src/function.rs @@ -122,7 +122,7 @@ fn map_return_type(output: &syn::ReturnType) -> TokenStream { match output { syn::ReturnType::Default => { // in case return type is not specified (for closures rust defaults to type inference which doesn't help us here) - quote! { ndc_lib::interpreter::function::StaticType::Tuple(vec![]) } + quote! { ndc_interpreter::interpreter::function::StaticType::Tuple(vec![]) } } syn::ReturnType::Type(_, ty) => map_type(ty), } @@ -135,13 +135,13 @@ fn map_type(ty: &syn::Type) -> TokenStream { syn::Type::Tuple(t) => { let inner = t.elems.iter().map(map_type); quote::quote! { - ndc_lib::interpreter::function::StaticType::Tuple(vec![ + ndc_interpreter::interpreter::function::StaticType::Tuple(vec![ #(#inner),* ]) } } syn::Type::Infer(_) => { - quote::quote! { ndc_lib::interpreter::function::StaticType::Any } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Any } } _ => { panic!("unmapped type: {ty:?}"); @@ -155,29 +155,29 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { match segment.ident.to_string().as_str() { "i32" | "i64" | "isize" | "u32" | "u64" | "usize" | "BigInt" => { - quote::quote! { ndc_lib::interpreter::function::StaticType::Int } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Int } } "f32" | "f64" => { - quote::quote! { ndc_lib::interpreter::function::StaticType::Float } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Float } } "bool" => { - quote::quote! { ndc_lib::interpreter::function::StaticType::Bool } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Bool } } "String" | "str" => { - quote::quote! { ndc_lib::interpreter::function::StaticType::String } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::String } } "Vec" | "List" => match &segment.arguments { syn::PathArguments::AngleBracketed(args) => { let inner = args.args.first().expect("Vec<> requires inner type"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_lib::interpreter::function::StaticType::List(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(#mapped)) } } else { panic!("Vec inner not a type"); } } _ => { - quote::quote! { ndc_lib::interpreter::function::StaticType::List(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } }, "VecDeque" | "Deque" => match &segment.arguments { @@ -185,14 +185,14 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("VecDeque<> requires inner type"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_lib::interpreter::function::StaticType::Deque(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Deque(Box::new(#mapped)) } } else { panic!("VecDeque inner not a type"); } } _ => quote::quote! { - ndc_lib::interpreter::function::StaticType::Deque(Box::new( - ndc_lib::interpreter::function::StaticType::Any + ndc_interpreter::interpreter::function::StaticType::Deque(Box::new( + ndc_interpreter::interpreter::function::StaticType::Any )) }, }, @@ -215,7 +215,7 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { }; let key_mapped = map_type(key_ty); let val_mapped = map_type(val_ty); - quote::quote! { ndc_lib::interpreter::function::StaticType::Map { key: Box::new(#key_mapped), value: Box::new(#val_mapped) } } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Map { key: Box::new(#key_mapped), value: Box::new(#val_mapped) } } } _ => temp_create_map_any(), }, @@ -224,14 +224,14 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("MinHeap requires inner"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_lib::interpreter::function::StaticType::MinHeap(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::MinHeap(Box::new(#mapped)) } } else { panic!("MinHeap inner invalid"); } } _ => quote::quote! { - ndc_lib::interpreter::function::StaticType::MinHeap(Box::new( - ndc_lib::interpreter::function::StaticType::Any + ndc_interpreter::interpreter::function::StaticType::MinHeap(Box::new( + ndc_interpreter::interpreter::function::StaticType::Any )) }, }, @@ -240,7 +240,7 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("MaxHeap requires inner"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_lib::interpreter::function::StaticType::MaxHeap(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::MaxHeap(Box::new(#mapped)) } } else { panic!("MaxHeap inner invalid"); } @@ -252,13 +252,13 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("Iterator requires inner"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_lib::interpreter::function::StaticType::Iterator(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Iterator(Box::new(#mapped)) } } else { panic!("Iterator inner invalid"); } } _ => { - quote::quote! { ndc_lib::interpreter::function::StaticType::Iterator(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Iterator(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } }, "Option" => match &segment.arguments { @@ -266,7 +266,7 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("Option requires inner type"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_lib::interpreter::function::StaticType::Option(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Option(Box::new(#mapped)) } } else { panic!("Option inner invalid"); } @@ -283,9 +283,9 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { } _ => panic!("Result without angle bracketed args"), }, - "Number" => quote::quote! { ndc_lib::interpreter::function::StaticType::Number }, + "Number" => quote::quote! { ndc_interpreter::interpreter::function::StaticType::Number }, "Value" | "EvaluationResult" => { - quote::quote! { ndc_lib::interpreter::function::StaticType::Any } + quote::quote! { ndc_interpreter::interpreter::function::StaticType::Any } } unmatched => panic!("Cannot map type string '{unmatched}' to StaticType"), } @@ -334,7 +334,7 @@ fn wrap_single( let return_expr = match function.sig.output { syn::ReturnType::Default => quote! { - return Ok(ndc_lib::interpreter::value::Value::unit()); + return Ok(ndc_interpreter::interpreter::value::Value::unit()); }, syn::ReturnType::Type(_, typ) => match &*typ { // If the function returns a result we unpack it using the question mark operator @@ -342,11 +342,11 @@ fn wrap_single( return result; }, ty @ syn::Type::Path(_) if path_ends_with(ty, "Result") => quote! { - let value = result.map_err(|err| ndc_lib::interpreter::function::FunctionCarrier::IntoEvaluationError(Box::new(err)))?; - return Ok(ndc_lib::interpreter::value::Value::from(value)); + let value = result.map_err(|err| ndc_interpreter::interpreter::function::FunctionCarrier::IntoEvaluationError(Box::new(err)))?; + return Ok(ndc_interpreter::interpreter::value::Value::from(value)); }, _ => quote! { - let result = ndc_lib::interpreter::value::Value::from(result); + let result = ndc_interpreter::interpreter::value::Value::from(result); return Ok(result); }, }, @@ -364,9 +364,9 @@ fn wrap_single( // } let function_declaration = quote! { pub fn #identifier ( - values: &mut [ndc_lib::interpreter::value::Value], - environment: &std::rc::Rc> - ) -> ndc_lib::interpreter::evaluate::EvaluationResult { + values: &mut [ndc_interpreter::interpreter::value::Value], + environment: &std::rc::Rc> + ) -> ndc_interpreter::interpreter::evaluate::EvaluationResult { // Define the inner function that has the rust type signature #[inline] #inner @@ -384,11 +384,11 @@ fn wrap_single( }; let function_registration = quote! { - let func = ndc_lib::interpreter::function::FunctionBuilder::default() - .body(ndc_lib::interpreter::function::FunctionBody::GenericFunction { + let func = ndc_interpreter::interpreter::function::FunctionBuilder::default() + .body(ndc_interpreter::interpreter::function::FunctionBody::GenericFunction { function: #identifier, - type_signature: ndc_lib::interpreter::function::TypeSignature::Exact(vec![ - #( ndc_lib::interpreter::function::Parameter::new(#param_names, #param_types,) ),* + type_signature: ndc_interpreter::interpreter::function::TypeSignature::Exact(vec![ + #( ndc_interpreter::interpreter::function::Parameter::new(#param_names, #param_types,) ),* ]), return_type: #return_type, }) @@ -409,10 +409,10 @@ fn wrap_single( fn into_param_type(ty: &syn::Type) -> TokenStream { match ty { ty if path_ends_with(ty, "Vec") => { - quote! { ndc_lib::interpreter::function::StaticType::List(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "VecDeque") => { - quote! { ndc_lib::interpreter::function::StaticType::Deque(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::interpreter::function::StaticType::Deque(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "DefaultMap") || path_ends_with(ty, "DefaultMapMut") @@ -421,48 +421,48 @@ fn into_param_type(ty: &syn::Type) -> TokenStream { temp_create_map_any() } ty if path_ends_with(ty, "MinHeap") => { - quote! { ndc_lib::interpreter::function::StaticType::MinHeap(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::interpreter::function::StaticType::MinHeap(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "MaxHeap") => { - quote! { ndc_lib::interpreter::function::StaticType::MaxHeap(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::interpreter::function::StaticType::MaxHeap(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "ListRepr") => { - quote! { ndc_lib::interpreter::function::StaticType::List(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "MapRepr") => temp_create_map_any(), syn::Type::Reference(syn::TypeReference { elem, .. }) => into_param_type(elem), syn::Type::Path(syn::TypePath { path, .. }) => match path { - _ if path.is_ident("i64") => quote! { ndc_lib::interpreter::function::StaticType::Int }, + _ if path.is_ident("i64") => quote! { ndc_interpreter::interpreter::function::StaticType::Int }, _ if path.is_ident("usize") => { - quote! { ndc_lib::interpreter::function::StaticType::Int } + quote! { ndc_interpreter::interpreter::function::StaticType::Int } } _ if path.is_ident("f64") => { - quote! { ndc_lib::interpreter::function::StaticType::Float } + quote! { ndc_interpreter::interpreter::function::StaticType::Float } } _ if path.is_ident("bool") => { - quote! { ndc_lib::interpreter::function::StaticType::Bool } + quote! { ndc_interpreter::interpreter::function::StaticType::Bool } } _ if path.is_ident("Value") => { - quote! { ndc_lib::interpreter::function::StaticType::Any } + quote! { ndc_interpreter::interpreter::function::StaticType::Any } } _ if path.is_ident("Number") => { - quote! { ndc_lib::interpreter::function::StaticType::Number } + quote! { ndc_interpreter::interpreter::function::StaticType::Number } } _ if path.is_ident("Sequence") => { - quote! { ndc_lib::interpreter::function::StaticType::Sequence(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::interpreter::function::StaticType::Sequence(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } _ if path.is_ident("Callable") => { quote! { - ndc_lib::interpreter::function::StaticType::Function { + ndc_interpreter::interpreter::function::StaticType::Function { parameters: None, - return_type: Box::new(ndc_lib::interpreter::function::StaticType::Any) + return_type: Box::new(ndc_interpreter::interpreter::function::StaticType::Any) } } } _ => panic!("Don't know how to convert Path into StaticType\n\n{path:?}"), }, syn::Type::ImplTrait(_) => { - quote! { ndc_lib::interpreter::function::StaticType::Iterator(Box::new(ndc_lib::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::interpreter::function::StaticType::Iterator(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } } x => panic!("Don't know how to convert {x:?} into StaticType"), } @@ -494,15 +494,15 @@ fn create_temp_variable( return vec![Argument { param_type: quote! { // TODO: how are we going to figure out the exact type of function here - ndc_lib::interpreter::function::StaticType::Function { + ndc_interpreter::interpreter::function::StaticType::Function { parameters: None, - return_type: Box::new(ndc_lib::interpreter::function::StaticType::Any) + return_type: Box::new(ndc_interpreter::interpreter::function::StaticType::Any) } }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Function(#temp_var) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Function(#temp_var) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = &Callable { @@ -521,7 +521,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = &*#rc_temp_var.borrow(); @@ -537,7 +537,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -553,7 +553,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = (&*#rc_temp_var.borrow(), default.to_owned()); @@ -569,7 +569,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = (&mut *#rc_temp_var.try_borrow_mut()?, default.to_owned()); @@ -582,11 +582,11 @@ fn create_temp_variable( let rc_temp_var = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::List(Box::new(ndc_lib::interpreter::function::StaticType::Any)) }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -602,7 +602,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -618,7 +618,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &*#rc_temp_var.try_borrow()?; @@ -634,7 +634,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MaxHeap but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -650,7 +650,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MaxHeap but wasn't"); }; let #argument_var_name = &*#rc_temp_var.try_borrow()?; @@ -666,7 +666,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MinHeap but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -682,7 +682,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MinHeap but wasn't"); }; let #argument_var_name = &*#rc_temp_var.try_borrow()?; @@ -694,11 +694,11 @@ fn create_temp_variable( let rc_temp_var = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::String }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::String }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::String(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::String(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::String but wasn't"); }; let #rc_temp_var = #rc_temp_var.borrow(); @@ -710,19 +710,19 @@ fn create_temp_variable( else if is_ref_of_bigint(ty) { let big_int = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::Int }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Int }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let #big_int = if let ndc_lib::interpreter::value::Value::Number(ndc_lib::interpreter::num::Number::Int(ndc_lib::interpreter::int::Int::Int64(smol))) = #argument_var_name { + let #big_int = if let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Int(ndc_interpreter::interpreter::int::Int::Int64(smol))) = #argument_var_name { Some(num::BigInt::from(*smol)) } else { None }; let #argument_var_name = match #argument_var_name { - ndc_lib::interpreter::value::Value::Number(ndc_lib::interpreter::num::Number::Int(ndc_lib::interpreter::int::Int::BigInt(big))) => big, - ndc_lib::interpreter::value::Value::Number(ndc_lib::interpreter::num::Number::Int(ndc_lib::interpreter::int::Int::Int64(smoll))) => #big_int.as_ref().unwrap(), + ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Int(ndc_interpreter::interpreter::int::Int::BigInt(big))) => big, + ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Int(ndc_interpreter::interpreter::int::Int::Int64(smoll))) => #big_int.as_ref().unwrap(), _ => panic!("Value #position need to be an Int but wasn't"), } }, @@ -731,7 +731,7 @@ fn create_temp_variable( // If we need an owned Value else if path_ends_with(ty, "Value") && !is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::Any }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Any }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { @@ -744,11 +744,11 @@ fn create_temp_variable( let rc_temp_var = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::List(Box::new(ndc_lib::interpreter::function::StaticType::Any)) }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.borrow_mut(); @@ -761,22 +761,22 @@ fn create_temp_variable( syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![ Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::List(Box::new(ndc_lib::interpreter::function::StaticType::Any)) }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &*#rc_temp_var.borrow(); }, }, // Argument { - // param_type: quote! { ndc_lib::interpreter::function::StaticType::Tuple }, + // param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Tuple }, // param_name: quote! { #original_name }, // argument: quote! { #argument_var_name }, // initialize_code: quote! { - // let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Tuple(#rc_temp_var)) = #argument_var_name else { + // let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Tuple(#rc_temp_var)) = #argument_var_name else { // panic!("Value #position needed to be a Sequence::List but wasn't"); // }; // let #argument_var_name = &#rc_temp_var; @@ -787,11 +787,11 @@ fn create_temp_variable( // The pattern is &BigRational else if path_ends_with(ty, "BigRational") && is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::Rational }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Rational }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Number(ndc_lib::interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { panic!("Value #position needs to be Rational but wasn't"); }; @@ -802,11 +802,11 @@ fn create_temp_variable( // The pattern is BigRational else if path_ends_with(ty, "BigRational") && !is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::Rational }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Rational }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Number(ndc_lib::interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { panic!("VValue #position needs to be Rational but wasn't"); }; @@ -817,11 +817,11 @@ fn create_temp_variable( // The pattern is Complex64 else if path_ends_with(ty, "Complex64") && !is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_lib::interpreter::function::StaticType::Complex }, + param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Complex }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Number(ndc_lib::interpreter::num::Number::Complex(#argument_var_name)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Complex(#argument_var_name)) = #argument_var_name else { panic!("Value #position needs to be Complex64 but wasn't"); }; @@ -836,7 +836,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let #argument_var_name = #path :: try_from(#argument_var_name).map_err(|err| ndc_lib::interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? + let #argument_var_name = #path :: try_from(#argument_var_name).map_err(|err| ndc_interpreter::interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? }, }]; } @@ -847,7 +847,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let #argument_var_name = <#type_ref as TryFrom<&mut ndc_lib::interpreter::value::Value>> :: try_from(#argument_var_name).map_err(|err| ndc_lib::interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? + let #argument_var_name = <#type_ref as TryFrom<&mut ndc_interpreter::interpreter::value::Value>> :: try_from(#argument_var_name).map_err(|err| ndc_interpreter::interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? }, }]; } @@ -862,11 +862,11 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_lib::interpreter::value::Value::Sequence(ndc_lib::interpreter::sequence::Sequence::Iterator(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Iterator(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Iterator but wasn't"); }; - let #argument_var_name = ndc_lib::interpreter::iterator::RcIter::new(Rc::clone(#rc_temp_var)); + let #argument_var_name = ndc_interpreter::interpreter::iterator::RcIter::new(Rc::clone(#rc_temp_var)); }, }]; } else { @@ -880,9 +880,9 @@ fn create_temp_variable( // TODO: just adding Any as type here is lazy AF but CBA fixing generics pub fn temp_create_map_any() -> TokenStream { quote! { - ndc_lib::interpreter::function::StaticType::Map { - key: Box::new(ndc_lib::interpreter::function::StaticType::Any), - value: Box::new(ndc_lib::interpreter::function::StaticType::Any) + ndc_interpreter::interpreter::function::StaticType::Map { + key: Box::new(ndc_interpreter::interpreter::function::StaticType::Any), + value: Box::new(ndc_interpreter::interpreter::function::StaticType::Any) } } } diff --git a/ndc_macros/src/lib.rs b/ndc_macros/src/lib.rs index 1a9b4ccf..1f18bea7 100644 --- a/ndc_macros/src/lib.rs +++ b/ndc_macros/src/lib.rs @@ -43,7 +43,7 @@ pub fn export_module(_attr: TokenStream, item: TokenStream) -> TokenStream { } let register_function = quote! { - pub fn register(env: &mut ndc_lib::interpreter::environment::Environment) { + pub fn register(env: &mut ndc_interpreter::interpreter::environment::Environment) { #(#registrations)* } }; diff --git a/ndc_stdlib/Cargo.toml b/ndc_stdlib/Cargo.toml index 84884144..f7323e23 100644 --- a/ndc_stdlib/Cargo.toml +++ b/ndc_stdlib/Cargo.toml @@ -7,7 +7,7 @@ version.workspace = true anyhow.workspace = true factorial.workspace = true itertools.workspace = true -ndc_lib = { workspace = true } +ndc_interpreter = { workspace = true } ndc_macros.workspace = true num.workspace = true once_cell.workspace = true diff --git a/ndc_stdlib/src/aoc.rs b/ndc_stdlib/src/aoc.rs index d04a179b..ceb0155a 100644 --- a/ndc_stdlib/src/aoc.rs +++ b/ndc_stdlib/src/aoc.rs @@ -4,10 +4,10 @@ mod inner { use std::cell::RefCell; use std::rc::Rc; - use ndc_lib::hash_map::HashMap; - use ndc_lib::interpreter::iterator::mut_seq_to_iterator; - use ndc_lib::interpreter::sequence::Sequence; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::hash_map::HashMap; + use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; + use ndc_interpreter::interpreter::sequence::Sequence; + use ndc_interpreter::interpreter::value::Value; /// Counts the occurrences of each item in a sequence and returns a map with the frequencies. #[function(return_type = HashMap<_, _>)] diff --git a/ndc_stdlib/src/cmp.rs b/ndc_stdlib/src/cmp.rs index a9a160f9..c89706cd 100644 --- a/ndc_stdlib/src/cmp.rs +++ b/ndc_stdlib/src/cmp.rs @@ -2,8 +2,8 @@ mod inner { use anyhow::anyhow; - use ndc_lib::compare::FallibleOrd; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::compare::FallibleOrd; + use ndc_interpreter::interpreter::value::Value; use std::cmp::Ordering; /// Produces an error if the argument is not true. diff --git a/ndc_stdlib/src/deque.rs b/ndc_stdlib/src/deque.rs index 23e52af5..75d7c213 100644 --- a/ndc_stdlib/src/deque.rs +++ b/ndc_stdlib/src/deque.rs @@ -2,8 +2,8 @@ use ndc_macros::export_module; #[export_module] mod inner { - use ndc_lib::interpreter::sequence::Sequence; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::interpreter::sequence::Sequence; + use ndc_interpreter::interpreter::value::Value; use std::cell::RefCell; use std::collections::VecDeque; use std::rc::Rc; diff --git a/ndc_stdlib/src/file.rs b/ndc_stdlib/src/file.rs index 0388ebbc..e6141a55 100644 --- a/ndc_stdlib/src/file.rs +++ b/ndc_stdlib/src/file.rs @@ -1,8 +1,8 @@ -use ndc_lib::interpreter::environment::Environment; -use ndc_lib::interpreter::function::{ +use ndc_interpreter::interpreter::environment::Environment; +use ndc_interpreter::interpreter::function::{ FunctionBody, FunctionBuilder, FunctionCarrier, StaticType, TypeSignature, }; -use ndc_lib::interpreter::value::Value; +use ndc_interpreter::interpreter::value::Value; use ndc_macros::export_module; use std::fs::read_to_string; diff --git a/ndc_stdlib/src/hash_map.rs b/ndc_stdlib/src/hash_map.rs index 890fcae1..1e4fe337 100644 --- a/ndc_stdlib/src/hash_map.rs +++ b/ndc_stdlib/src/hash_map.rs @@ -1,8 +1,8 @@ -use ndc_lib::hash_map; -use ndc_lib::hash_map::HashMap; -use ndc_lib::hash_map::HashMapExt; -use ndc_lib::interpreter::sequence::{DefaultMap, MapRepr, Sequence}; -use ndc_lib::interpreter::value::Value; +use ndc_interpreter::hash_map; +use ndc_interpreter::hash_map::HashMap; +use ndc_interpreter::hash_map::HashMapExt; +use ndc_interpreter::interpreter::sequence::{DefaultMap, MapRepr, Sequence}; +use ndc_interpreter::interpreter::value::Value; use std::cell::RefCell; use std::rc::Rc; diff --git a/ndc_stdlib/src/heap.rs b/ndc_stdlib/src/heap.rs index 5c9385e9..4367b305 100644 --- a/ndc_stdlib/src/heap.rs +++ b/ndc_stdlib/src/heap.rs @@ -2,9 +2,9 @@ use ndc_macros::export_module; #[export_module] mod inner { - use ndc_lib::interpreter::heap::{MaxHeap, MinHeap}; - use ndc_lib::interpreter::sequence::Sequence; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::interpreter::heap::{MaxHeap, MinHeap}; + use ndc_interpreter::interpreter::sequence::Sequence; + use ndc_interpreter::interpreter::value::Value; use std::cell::RefCell; use std::rc::Rc; diff --git a/ndc_stdlib/src/lib.rs b/ndc_stdlib/src/lib.rs index b1acc2c2..55ca8108 100644 --- a/ndc_stdlib/src/lib.rs +++ b/ndc_stdlib/src/lib.rs @@ -1,5 +1,5 @@ -use ndc_lib::interpreter::Interpreter; -use ndc_lib::interpreter::environment::Environment; +use ndc_interpreter::interpreter::Interpreter; +use ndc_interpreter::interpreter::environment::Environment; pub mod aoc; pub mod cmp; diff --git a/ndc_stdlib/src/list.rs b/ndc_stdlib/src/list.rs index f5d25483..2d666143 100644 --- a/ndc_stdlib/src/list.rs +++ b/ndc_stdlib/src/list.rs @@ -1,9 +1,9 @@ #[ndc_macros::export_module] mod inner { use itertools::Itertools; - use ndc_lib::interpreter::iterator::mut_seq_to_iterator; - use ndc_lib::interpreter::sequence::{ListRepr, Sequence}; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; + use ndc_interpreter::interpreter::sequence::{ListRepr, Sequence}; + use ndc_interpreter::interpreter::value::Value; use std::rc::Rc; use anyhow::anyhow; diff --git a/ndc_stdlib/src/math.rs b/ndc_stdlib/src/math.rs index 211fb1d1..93be4ea5 100644 --- a/ndc_stdlib/src/math.rs +++ b/ndc_stdlib/src/math.rs @@ -1,8 +1,8 @@ use factorial::Factorial; -use ndc_lib::interpreter::environment::Environment; -use ndc_lib::interpreter::num::{BinaryOperatorError, Number}; -use ndc_lib::interpreter::sequence::Sequence; -use ndc_lib::interpreter::value::Value; +use ndc_interpreter::interpreter::environment::Environment; +use ndc_interpreter::interpreter::num::{BinaryOperatorError, Number}; +use ndc_interpreter::interpreter::sequence::Sequence; +use ndc_interpreter::interpreter::value::Value; use ndc_macros::export_module; use num::ToPrimitive; use std::ops::{Add, Mul}; @@ -53,8 +53,8 @@ mod inner { use super::FallibleSum; use anyhow::Context; - use ndc_lib::interpreter::int::Int; - use ndc_lib::interpreter::num::Number; + use ndc_interpreter::interpreter::int::Int; + use ndc_interpreter::interpreter::num::Number; use num::{BigInt, BigRational, BigUint, Integer, complex::Complex64}; /// Returns the sign of a number. @@ -209,11 +209,11 @@ mod inner { pub mod f64 { use super::{Environment, Number, ToPrimitive, f64}; - use ndc_lib::interpreter::function::{ + use ndc_interpreter::interpreter::function::{ FunctionBody, FunctionBuilder, FunctionCarrier, Parameter, StaticType, TypeSignature, }; - use ndc_lib::interpreter::num::BinaryOperatorError; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::interpreter::num::BinaryOperatorError; + use ndc_interpreter::interpreter::value::Value; use std::cmp::Ordering; use std::ops::Not; @@ -475,7 +475,7 @@ pub mod f64 { ($method:ident,$docs:literal) => { let function = FunctionBuilder::default() .body( - ndc_lib::interpreter::function::FunctionBody::NumericUnaryOp { + ndc_interpreter::interpreter::function::FunctionBody::NumericUnaryOp { body: |num: Number| match num { Number::Int(i) => Number::Float(f64::from(i).$method()), Number::Float(f) => Number::Float(f.$method()), diff --git a/ndc_stdlib/src/rand.rs b/ndc_stdlib/src/rand.rs index 66bb1ffd..311ac5fa 100644 --- a/ndc_stdlib/src/rand.rs +++ b/ndc_stdlib/src/rand.rs @@ -20,10 +20,10 @@ pub fn random_n( #[export_module] mod inner { use itertools::Itertools; - use ndc_lib::interpreter::iterator::mut_seq_to_iterator; - use ndc_lib::interpreter::num::Number; - use ndc_lib::interpreter::sequence::Sequence; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; + use ndc_interpreter::interpreter::num::Number; + use ndc_interpreter::interpreter::sequence::Sequence; + use ndc_interpreter::interpreter::value::Value; /// Randomly shuffles the elements of the list in place. pub fn shuffle(list: &mut [Value]) { diff --git a/ndc_stdlib/src/regex.rs b/ndc_stdlib/src/regex.rs index 7a4362a7..493f3e6d 100644 --- a/ndc_stdlib/src/regex.rs +++ b/ndc_stdlib/src/regex.rs @@ -1,4 +1,4 @@ -use ndc_lib::interpreter::value::Value; +use ndc_interpreter::interpreter::value::Value; use once_cell::sync::Lazy; use regex::Regex; diff --git a/ndc_stdlib/src/sequence.rs b/ndc_stdlib/src/sequence.rs index 64d3f26e..348949ba 100644 --- a/ndc_stdlib/src/sequence.rs +++ b/ndc_stdlib/src/sequence.rs @@ -2,9 +2,9 @@ use anyhow::anyhow; use itertools::Itertools; -use ndc_lib::interpreter::iterator::{MutableValueIntoIterator, mut_seq_to_iterator}; -use ndc_lib::interpreter::sequence::Sequence; -use ndc_lib::{ +use ndc_interpreter::interpreter::iterator::{MutableValueIntoIterator, mut_seq_to_iterator}; +use ndc_interpreter::interpreter::sequence::Sequence; +use ndc_interpreter::{ compare::FallibleOrd, interpreter::{evaluate::EvaluationResult, function::Callable, value::Value}, }; @@ -79,8 +79,8 @@ fn try_sort_by( #[export_module] mod inner { - use ndc_lib::interpreter::iterator::{Repeat, ValueIterator}; - use ndc_lib::interpreter::{function::FunctionCarrier, iterator::mut_value_to_iterator}; + use ndc_interpreter::interpreter::iterator::{Repeat, ValueIterator}; + use ndc_interpreter::interpreter::{function::FunctionCarrier, iterator::mut_value_to_iterator}; use std::cell::RefCell; #[function(name = "in")] @@ -832,8 +832,8 @@ pub mod extra { use anyhow::anyhow; use itertools::izip; - use ndc_lib::interpreter::function::{FunctionBuilder, StaticType}; - use ndc_lib::interpreter::{ + use ndc_interpreter::interpreter::function::{FunctionBuilder, StaticType}; + use ndc_interpreter::interpreter::{ environment::Environment, function::FunctionBody, iterator::mut_value_to_iterator, value::Value, }; @@ -844,7 +844,7 @@ pub mod extra { .name("zip".to_string()) .documentation("Combines multiple sequences (or iterables) into a single sequence of tuples, where the ith tuple contains the ith element from each input sequence.\n\nIf the input sequences are of different lengths, the resulting sequence is truncated to the length of the shortest input.".to_string()) .body(FunctionBody::generic( - ndc_lib::interpreter::function::TypeSignature::Variadic, + ndc_interpreter::interpreter::function::TypeSignature::Variadic, StaticType::List(Box::new(StaticType::Tuple(vec![StaticType::Any, StaticType::Any]))), |args, _env| match args { [_] => { diff --git a/ndc_stdlib/src/serde.rs b/ndc_stdlib/src/serde.rs index 01939ee6..6abd7020 100644 --- a/ndc_stdlib/src/serde.rs +++ b/ndc_stdlib/src/serde.rs @@ -3,9 +3,9 @@ use std::rc::Rc; use std::{cell::RefCell, str::FromStr}; use anyhow::Context; -use ndc_lib::hash_map::HashMap; -use ndc_lib::interpreter::sequence::Sequence; -use ndc_lib::interpreter::value::Value; +use ndc_interpreter::hash_map::HashMap; +use ndc_interpreter::interpreter::sequence::Sequence; +use ndc_interpreter::interpreter::value::Value; use num::BigInt; use num::ToPrimitive; use serde_json::{Map, Number, Value as JsonValue, json}; @@ -15,17 +15,17 @@ fn value_to_json(value: Value) -> Result { Value::Option(Some(value)) => value_to_json(*value), Value::Option(None) => Ok(JsonValue::Null), Value::Number(number) => match number { - ndc_lib::interpreter::num::Number::Int(int) => match int { - ndc_lib::interpreter::int::Int::Int64(i) => Ok(json!(i)), - ndc_lib::interpreter::int::Int::BigInt(big_int) => { + ndc_interpreter::interpreter::num::Number::Int(int) => match int { + ndc_interpreter::interpreter::int::Int::Int64(i) => Ok(json!(i)), + ndc_interpreter::interpreter::int::Int::BigInt(big_int) => { Number::from_str(&big_int.to_string()) .map(JsonValue::Number) .context("Cannot convert bigint to string") } }, - ndc_lib::interpreter::num::Number::Float(f) => Ok(json!(f)), - ndc_lib::interpreter::num::Number::Rational(ratio) => Ok(json!(ratio.to_f64())), - ndc_lib::interpreter::num::Number::Complex(complex) => Ok(json!(format!("{complex}"))), + ndc_interpreter::interpreter::num::Number::Float(f) => Ok(json!(f)), + ndc_interpreter::interpreter::num::Number::Rational(ratio) => Ok(json!(ratio.to_f64())), + ndc_interpreter::interpreter::num::Number::Complex(complex) => Ok(json!(format!("{complex}"))), }, Value::Bool(b) => Ok(json!(b)), Value::Sequence(s) => match s { @@ -116,7 +116,7 @@ fn json_to_value(value: JsonValue) -> Result { #[export_module] mod inner { - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::interpreter::value::Value; /// Converts a JSON string to a value pub fn json_decode(input: &str) -> anyhow::Result { diff --git a/ndc_stdlib/src/string.rs b/ndc_stdlib/src/string.rs index 0819e0b9..89f384ae 100644 --- a/ndc_stdlib/src/string.rs +++ b/ndc_stdlib/src/string.rs @@ -1,8 +1,8 @@ use ndc_macros::export_module; -use ndc_lib::interpreter::iterator::mut_seq_to_iterator; -use ndc_lib::interpreter::sequence::{Sequence, StringRepr}; -use ndc_lib::interpreter::value::Value; +use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; +use ndc_interpreter::interpreter::sequence::{Sequence, StringRepr}; +use ndc_interpreter::interpreter::value::Value; use std::rc::Rc; use anyhow::{Context, anyhow}; diff --git a/ndc_stdlib/src/value.rs b/ndc_stdlib/src/value.rs index eebca82e..b3a47e02 100644 --- a/ndc_stdlib/src/value.rs +++ b/ndc_stdlib/src/value.rs @@ -3,10 +3,10 @@ use std::fmt::Write; #[export_module] mod inner { - use ndc_lib::interpreter::function::Callable; - use ndc_lib::interpreter::heap::{MaxHeap, MinHeap}; - use ndc_lib::interpreter::sequence::Sequence; - use ndc_lib::interpreter::value::Value; + use ndc_interpreter::interpreter::function::Callable; + use ndc_interpreter::interpreter::heap::{MaxHeap, MinHeap}; + use ndc_interpreter::interpreter::sequence::Sequence; + use ndc_interpreter::interpreter::value::Value; use std::cell::RefCell; use std::rc::Rc; diff --git a/tests/Cargo.toml b/tests/Cargo.toml index 5228def1..f381bf12 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -4,7 +4,7 @@ edition.workspace = true version.workspace = true [dev-dependencies] -ndc_lib.workspace = true +ndc_interpreter.workspace = true ndc_stdlib.workspace = true owo-colors.workspace = true diff --git a/tests/src/programs.rs b/tests/src/programs.rs index 87d2d539..8cef8a93 100644 --- a/tests/src/programs.rs +++ b/tests/src/programs.rs @@ -1,4 +1,4 @@ -use ndc_lib::interpreter::Interpreter; +use ndc_interpreter::interpreter::Interpreter; use ndc_stdlib::WithStdlib; use owo_colors::OwoColorize; use std::fs; From 66e05945bdb9dad0ad7fd1234f60a1f443d0579c Mon Sep 17 00:00:00 2001 From: Tim Fennis Date: Mon, 2 Mar 2026 21:49:50 +0100 Subject: [PATCH 2/3] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Flatten=20interpreter?= =?UTF-8?q?=20module=20in=20ndc=5Finterpreter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benches/src/benchmark.rs | 4 +- ndc_bin/src/diagnostic.rs | 2 +- ndc_bin/src/docs.rs | 4 +- ndc_bin/src/main.rs | 2 +- ndc_bin/src/repl.rs | 2 +- .../src/{interpreter => }/environment.rs | 4 +- .../src/{interpreter => }/evaluate/index.rs | 4 +- .../src/{interpreter => }/evaluate/mod.rs | 14 +- .../src/{interpreter => }/function.rs | 10 +- ndc_interpreter/src/{interpreter => }/heap.rs | 2 +- ndc_interpreter/src/{interpreter => }/int.rs | 0 ndc_interpreter/src/interpreter/mod.rs | 144 -------------- .../src/{interpreter => }/iterator.rs | 6 +- ndc_interpreter/src/lib.rs | 146 +++++++++++++- ndc_interpreter/src/{interpreter => }/num.rs | 6 +- .../{interpreter => }/semantic/analyser.rs | 2 +- .../src/{interpreter => }/semantic/mod.rs | 0 .../src/{interpreter => }/sequence.rs | 8 +- .../src/{interpreter => }/value.rs | 8 +- ndc_lsp/src/backend.rs | 2 +- ndc_macros/src/convert.rs | 20 +- ndc_macros/src/function.rs | 178 +++++++++--------- ndc_macros/src/lib.rs | 2 +- ndc_stdlib/src/aoc.rs | 6 +- ndc_stdlib/src/cmp.rs | 2 +- ndc_stdlib/src/deque.rs | 4 +- ndc_stdlib/src/file.rs | 6 +- ndc_stdlib/src/hash_map.rs | 4 +- ndc_stdlib/src/heap.rs | 6 +- ndc_stdlib/src/lib.rs | 4 +- ndc_stdlib/src/list.rs | 6 +- ndc_stdlib/src/math.rs | 20 +- ndc_stdlib/src/rand.rs | 8 +- ndc_stdlib/src/regex.rs | 2 +- ndc_stdlib/src/sequence.rs | 14 +- ndc_stdlib/src/serde.rs | 18 +- ndc_stdlib/src/string.rs | 6 +- ndc_stdlib/src/value.rs | 8 +- tests/src/programs.rs | 2 +- 39 files changed, 343 insertions(+), 343 deletions(-) rename ndc_interpreter/src/{interpreter => }/environment.rs (98%) rename ndc_interpreter/src/{interpreter => }/evaluate/index.rs (98%) rename ndc_interpreter/src/{interpreter => }/evaluate/mod.rs (99%) rename ndc_interpreter/src/{interpreter => }/function.rs (98%) rename ndc_interpreter/src/{interpreter => }/heap.rs (98%) rename ndc_interpreter/src/{interpreter => }/int.rs (100%) delete mode 100644 ndc_interpreter/src/interpreter/mod.rs rename ndc_interpreter/src/{interpreter => }/iterator.rs (98%) rename ndc_interpreter/src/{interpreter => }/num.rs (99%) rename ndc_interpreter/src/{interpreter => }/semantic/analyser.rs (99%) rename ndc_interpreter/src/{interpreter => }/semantic/mod.rs (100%) rename ndc_interpreter/src/{interpreter => }/sequence.rs (98%) rename ndc_interpreter/src/{interpreter => }/value.rs (98%) diff --git a/benches/src/benchmark.rs b/benches/src/benchmark.rs index 48a55f2d..dcbd7d22 100644 --- a/benches/src/benchmark.rs +++ b/benches/src/benchmark.rs @@ -1,6 +1,6 @@ use criterion::{Criterion, criterion_group, criterion_main}; -use ndc_interpreter::interpreter::Interpreter; -use ndc_interpreter::interpreter::InterpreterError; +use ndc_interpreter::Interpreter; +use ndc_interpreter::InterpreterError; use ndc_stdlib::WithStdlib; use rand::{RngExt, SeedableRng}; use rand_chacha::ChaCha8Rng; diff --git a/ndc_bin/src/diagnostic.rs b/ndc_bin/src/diagnostic.rs index a5a1da1e..add518b0 100644 --- a/ndc_bin/src/diagnostic.rs +++ b/ndc_bin/src/diagnostic.rs @@ -1,6 +1,6 @@ use miette::{Diagnostic, LabeledSpan, SourceSpan}; use ndc_lexer::Span; -use ndc_interpreter::interpreter::InterpreterError; +use ndc_interpreter::InterpreterError; use std::fmt; fn span_to_source_span(span: Span) -> SourceSpan { diff --git a/ndc_bin/src/docs.rs b/ndc_bin/src/docs.rs index 68cb7ade..5101e83f 100644 --- a/ndc_bin/src/docs.rs +++ b/ndc_bin/src/docs.rs @@ -1,5 +1,5 @@ -use ndc_interpreter::interpreter::Interpreter; -use ndc_interpreter::interpreter::function::{Parameter, TypeSignature}; +use ndc_interpreter::Interpreter; +use ndc_interpreter::function::{Parameter, TypeSignature}; use ndc_stdlib::WithStdlib; use std::cmp::Ordering; use std::fmt::Write; diff --git a/ndc_bin/src/main.rs b/ndc_bin/src/main.rs index 23681a87..e7da5005 100644 --- a/ndc_bin/src/main.rs +++ b/ndc_bin/src/main.rs @@ -5,7 +5,7 @@ use anyhow::{Context, anyhow}; use clap::{Parser, Subcommand}; use highlighter::{AndycppHighlighter, AndycppHighlighterState}; use miette::{NamedSource, highlighters::HighlighterState}; -use ndc_interpreter::interpreter::{Interpreter, InterpreterError}; +use ndc_interpreter::{Interpreter, InterpreterError}; use ndc_stdlib::WithStdlib; use std::path::PathBuf; use std::process; diff --git a/ndc_bin/src/repl.rs b/ndc_bin/src/repl.rs index 049b349c..d6e1fc4e 100644 --- a/ndc_bin/src/repl.rs +++ b/ndc_bin/src/repl.rs @@ -1,7 +1,7 @@ #![allow(clippy::print_stdout, clippy::print_stderr)] use itertools::Itertools; use miette::highlighters::HighlighterState; -use ndc_interpreter::interpreter::Interpreter; +use ndc_interpreter::Interpreter; use ndc_stdlib::WithStdlib; use rustyline::Helper; use rustyline::config::Configurer; diff --git a/ndc_interpreter/src/interpreter/environment.rs b/ndc_interpreter/src/environment.rs similarity index 98% rename from ndc_interpreter/src/interpreter/environment.rs rename to ndc_interpreter/src/environment.rs index c14a57ac..73f1271c 100644 --- a/ndc_interpreter/src/interpreter/environment.rs +++ b/ndc_interpreter/src/environment.rs @@ -1,6 +1,6 @@ -use crate::interpreter::function::{Function, StaticType}; +use crate::function::{Function, StaticType}; -use crate::interpreter::value::Value; +use crate::value::Value; use ndc_parser::ResolvedVar; use std::cell::RefCell; use std::fmt; diff --git a/ndc_interpreter/src/interpreter/evaluate/index.rs b/ndc_interpreter/src/evaluate/index.rs similarity index 98% rename from ndc_interpreter/src/interpreter/evaluate/index.rs rename to ndc_interpreter/src/evaluate/index.rs index cb31813d..0a6dc9b5 100644 --- a/ndc_interpreter/src/interpreter/evaluate/index.rs +++ b/ndc_interpreter/src/evaluate/index.rs @@ -10,8 +10,8 @@ //! +----------------+-----+----+----+----+----+----+----+----+----+----+ use super::{EvaluationError, EvaluationResult, IntoEvaluationResult, evaluate_expression}; -use crate::interpreter::environment::Environment; -use crate::interpreter::{function::FunctionCarrier, sequence::Sequence, value::Value}; +use crate::environment::Environment; +use crate::{function::FunctionCarrier, sequence::Sequence, value::Value}; use itertools::Itertools; use ndc_lexer::Span; use ndc_parser::{Expression, ExpressionLocation}; diff --git a/ndc_interpreter/src/interpreter/evaluate/mod.rs b/ndc_interpreter/src/evaluate/mod.rs similarity index 99% rename from ndc_interpreter/src/interpreter/evaluate/mod.rs rename to ndc_interpreter/src/evaluate/mod.rs index 9a41c094..60436285 100644 --- a/ndc_interpreter/src/interpreter/evaluate/mod.rs +++ b/ndc_interpreter/src/evaluate/mod.rs @@ -1,11 +1,11 @@ use crate::hash_map::HashMap; -use crate::interpreter::environment::Environment; -use crate::interpreter::function::{Function, FunctionBody, FunctionCarrier, StaticType}; -use crate::interpreter::int::Int; -use crate::interpreter::iterator::mut_value_to_iterator; -use crate::interpreter::num::Number; -use crate::interpreter::sequence::Sequence; -use crate::interpreter::value::Value; +use crate::environment::Environment; +use crate::function::{Function, FunctionBody, FunctionCarrier, StaticType}; +use crate::int::Int; +use crate::iterator::mut_value_to_iterator; +use crate::num::Number; +use crate::sequence::Sequence; +use crate::value::Value; use index::{Offset, evaluate_as_index, get_at_index, set_at_index}; use itertools::Itertools; use ndc_lexer::Span; diff --git a/ndc_interpreter/src/interpreter/function.rs b/ndc_interpreter/src/function.rs similarity index 98% rename from ndc_interpreter/src/interpreter/function.rs rename to ndc_interpreter/src/function.rs index a8e93a1a..3aa65743 100644 --- a/ndc_interpreter/src/interpreter/function.rs +++ b/ndc_interpreter/src/function.rs @@ -1,11 +1,11 @@ use crate::hash_map::{DefaultHasher, HashMap}; -use crate::interpreter::environment::Environment; -use crate::interpreter::evaluate::{ +use crate::environment::Environment; +use crate::evaluate::{ ErrorConverter, EvaluationError, EvaluationResult, evaluate_expression, }; -use crate::interpreter::num::{BinaryOperatorError, Number}; -use crate::interpreter::sequence::Sequence; -use crate::interpreter::value::Value; +use crate::num::{BinaryOperatorError, Number}; +use crate::sequence::Sequence; +use crate::value::Value; use derive_builder::Builder; use ndc_lexer::Span; use ndc_parser::{ExpressionLocation, ResolvedVar}; diff --git a/ndc_interpreter/src/interpreter/heap.rs b/ndc_interpreter/src/heap.rs similarity index 98% rename from ndc_interpreter/src/interpreter/heap.rs rename to ndc_interpreter/src/heap.rs index 71388e63..c8c96c82 100644 --- a/ndc_interpreter/src/interpreter/heap.rs +++ b/ndc_interpreter/src/heap.rs @@ -1,4 +1,4 @@ -use crate::interpreter::value::Value; +use crate::value::Value; use derive_more::{Deref, DerefMut}; use std::cmp::{Ordering, Reverse}; use std::collections::BinaryHeap; diff --git a/ndc_interpreter/src/interpreter/int.rs b/ndc_interpreter/src/int.rs similarity index 100% rename from ndc_interpreter/src/interpreter/int.rs rename to ndc_interpreter/src/int.rs diff --git a/ndc_interpreter/src/interpreter/mod.rs b/ndc_interpreter/src/interpreter/mod.rs deleted file mode 100644 index 61ab1875..00000000 --- a/ndc_interpreter/src/interpreter/mod.rs +++ /dev/null @@ -1,144 +0,0 @@ -use std::cell::RefCell; -use std::rc::Rc; - -use crate::interpreter::environment::{Environment, InterpreterOutput}; -use crate::interpreter::evaluate::{EvaluationError, evaluate_expression}; -use crate::interpreter::function::FunctionCarrier; -use crate::interpreter::semantic::analyser::{Analyser, ScopeTree}; -use crate::interpreter::value::Value; -use ndc_lexer::{Lexer, TokenLocation}; -use ndc_parser::ExpressionLocation; -pub mod environment; -pub mod evaluate; -pub mod function; -pub mod heap; -pub mod int; -pub mod iterator; -pub mod num; -pub mod semantic; -pub mod sequence; -pub mod value; - -pub struct Interpreter { - environment: Rc>, - analyser: Analyser, -} - -impl Interpreter { - #[must_use] - pub fn new(dest: T) -> Self - where - T: InterpreterOutput + 'static, - { - Self::from_env(Environment::new(Box::new(dest))) - } - - #[must_use] - pub fn from_env(environment: Environment) -> Self { - let global_identifiers = environment.get_global_identifiers(); - Self { - environment: Rc::new(RefCell::new(environment)), - analyser: Analyser::from_scope_tree(ScopeTree::from_global_scope(global_identifiers)), - } - } - - pub fn configure(&mut self, f: F) { - f(&mut self.environment.borrow_mut()); - let global_identifiers = self.environment.borrow().get_global_identifiers(); - self.analyser = Analyser::from_scope_tree(ScopeTree::from_global_scope(global_identifiers)); - } - - #[must_use] - pub fn environment(self) -> Rc> { - self.environment - } - - pub fn analyse_str( - &mut self, - input: &str, - ) -> Result, InterpreterError> { - self.parse_and_analyse(input) - } - - pub fn run_str(&mut self, input: &str) -> Result { - let expressions = self.parse_and_analyse(input)?; - let final_value = self.interpret(expressions.into_iter())?; - Ok(format!("{final_value}")) - } - - fn parse_and_analyse( - &mut self, - input: &str, - ) -> Result, InterpreterError> { - let tokens = Lexer::new(input).collect::, _>>()?; - let mut expressions = ndc_parser::Parser::from_tokens(tokens).parse()?; - - let checkpoint = self.analyser.checkpoint(); - for e in &mut expressions { - if let Err(e) = self.analyser.analyse(e) { - self.analyser.restore(checkpoint); - return Err(e.into()); - } - } - - Ok(expressions) - } - - fn interpret( - &mut self, - expressions: impl Iterator, - ) -> Result { - let mut value = Value::unit(); - for expr in expressions { - match evaluate_expression(&expr, &self.environment) { - Ok(val) => value = val, - Err(FunctionCarrier::Return(_)) => { - Err(EvaluationError::syntax_error( - "unexpected return statement outside of function body".to_string(), - expr.span, - ))?; - } - Err(FunctionCarrier::Break(_)) => { - Err(EvaluationError::syntax_error( - "unexpected break statement outside of loop body".to_string(), - expr.span, - ))?; - } - Err(FunctionCarrier::Continue) => { - Err(EvaluationError::syntax_error( - "unexpected continue statement outside of loop body".to_string(), - expr.span, - ))?; - } - Err(FunctionCarrier::EvaluationError(e)) => return Err(InterpreterError::from(e)), - _ => { - panic!( - "internal error: unhandled function carrier variant returned from evaluate_expression" - ); - } - } - } - Ok(value) - } -} - -#[derive(thiserror::Error, Debug)] -pub enum InterpreterError { - #[error("Error while lexing source")] - Lexer { - #[from] - cause: ndc_lexer::Error, - }, - #[error("Error while parsing source")] - Parser { - #[from] - cause: ndc_parser::Error, - }, - #[error("Error during static analysis")] - Resolver { - #[from] - cause: semantic::analyser::AnalysisError, - }, - #[error("Error while executing code")] - Evaluation(#[from] EvaluationError), -} diff --git a/ndc_interpreter/src/interpreter/iterator.rs b/ndc_interpreter/src/iterator.rs similarity index 98% rename from ndc_interpreter/src/interpreter/iterator.rs rename to ndc_interpreter/src/iterator.rs index badae55d..7f351fc5 100644 --- a/ndc_interpreter/src/interpreter/iterator.rs +++ b/ndc_interpreter/src/iterator.rs @@ -7,9 +7,9 @@ use super::function::{FunctionCarrier, StaticType}; use super::int::Int::Int64; use super::num::Number; use crate::hash_map::HashMap; -use crate::interpreter::heap::{MaxHeap, MinHeap}; -use crate::interpreter::sequence::Sequence; -use crate::interpreter::value::Value; +use crate::heap::{MaxHeap, MinHeap}; +use crate::sequence::Sequence; +use crate::value::Value; use self_cell::self_cell; use std::cell::{Ref, RefCell}; use std::collections::VecDeque; diff --git a/ndc_interpreter/src/lib.rs b/ndc_interpreter/src/lib.rs index f4ea1ad3..4328ab28 100644 --- a/ndc_interpreter/src/lib.rs +++ b/ndc_interpreter/src/lib.rs @@ -1,3 +1,147 @@ pub mod compare; pub mod hash_map; -pub mod interpreter; +pub mod environment; +pub mod evaluate; +pub mod function; +pub mod heap; +pub mod int; +pub mod iterator; +pub mod num; +pub mod semantic; +pub mod sequence; +pub mod value; + +use std::cell::RefCell; +use std::rc::Rc; + +use crate::environment::{Environment, InterpreterOutput}; +use crate::evaluate::{EvaluationError, evaluate_expression}; +use crate::function::FunctionCarrier; +use crate::semantic::analyser::{Analyser, ScopeTree}; +use crate::value::Value; +use ndc_lexer::{Lexer, TokenLocation}; +use ndc_parser::ExpressionLocation; + +pub struct Interpreter { + environment: Rc>, + analyser: Analyser, +} + +impl Interpreter { + #[must_use] + pub fn new(dest: T) -> Self + where + T: InterpreterOutput + 'static, + { + Self::from_env(Environment::new(Box::new(dest))) + } + + #[must_use] + pub fn from_env(environment: Environment) -> Self { + let global_identifiers = environment.get_global_identifiers(); + Self { + environment: Rc::new(RefCell::new(environment)), + analyser: Analyser::from_scope_tree(ScopeTree::from_global_scope(global_identifiers)), + } + } + + pub fn configure(&mut self, f: F) { + f(&mut self.environment.borrow_mut()); + let global_identifiers = self.environment.borrow().get_global_identifiers(); + self.analyser = Analyser::from_scope_tree(ScopeTree::from_global_scope(global_identifiers)); + } + + #[must_use] + pub fn environment(self) -> Rc> { + self.environment + } + + pub fn analyse_str( + &mut self, + input: &str, + ) -> Result, InterpreterError> { + self.parse_and_analyse(input) + } + + pub fn run_str(&mut self, input: &str) -> Result { + let expressions = self.parse_and_analyse(input)?; + let final_value = self.interpret(expressions.into_iter())?; + Ok(format!("{final_value}")) + } + + fn parse_and_analyse( + &mut self, + input: &str, + ) -> Result, InterpreterError> { + let tokens = Lexer::new(input).collect::, _>>()?; + let mut expressions = ndc_parser::Parser::from_tokens(tokens).parse()?; + + let checkpoint = self.analyser.checkpoint(); + for e in &mut expressions { + if let Err(e) = self.analyser.analyse(e) { + self.analyser.restore(checkpoint); + return Err(e.into()); + } + } + + Ok(expressions) + } + + fn interpret( + &mut self, + expressions: impl Iterator, + ) -> Result { + let mut value = Value::unit(); + for expr in expressions { + match evaluate_expression(&expr, &self.environment) { + Ok(val) => value = val, + Err(FunctionCarrier::Return(_)) => { + Err(EvaluationError::syntax_error( + "unexpected return statement outside of function body".to_string(), + expr.span, + ))?; + } + Err(FunctionCarrier::Break(_)) => { + Err(EvaluationError::syntax_error( + "unexpected break statement outside of loop body".to_string(), + expr.span, + ))?; + } + Err(FunctionCarrier::Continue) => { + Err(EvaluationError::syntax_error( + "unexpected continue statement outside of loop body".to_string(), + expr.span, + ))?; + } + Err(FunctionCarrier::EvaluationError(e)) => return Err(InterpreterError::from(e)), + _ => { + panic!( + "internal error: unhandled function carrier variant returned from evaluate_expression" + ); + } + } + } + Ok(value) + } +} + +#[derive(thiserror::Error, Debug)] +pub enum InterpreterError { + #[error("Error while lexing source")] + Lexer { + #[from] + cause: ndc_lexer::Error, + }, + #[error("Error while parsing source")] + Parser { + #[from] + cause: ndc_parser::Error, + }, + #[error("Error during static analysis")] + Resolver { + #[from] + cause: semantic::analyser::AnalysisError, + }, + #[error("Error while executing code")] + Evaluation(#[from] EvaluationError), +} diff --git a/ndc_interpreter/src/interpreter/num.rs b/ndc_interpreter/src/num.rs similarity index 99% rename from ndc_interpreter/src/interpreter/num.rs rename to ndc_interpreter/src/num.rs index 75cae747..798110c9 100644 --- a/ndc_interpreter/src/interpreter/num.rs +++ b/ndc_interpreter/src/num.rs @@ -4,9 +4,9 @@ use std::hash::{Hash, Hasher}; use std::num::TryFromIntError; use std::ops::{Add, Div, Mul, Neg, Not, Rem, Sub}; -use crate::interpreter::evaluate::EvaluationError; -use crate::interpreter::function::StaticType; -use crate::interpreter::int::Int; +use crate::evaluate::EvaluationError; +use crate::function::StaticType; +use crate::int::Int; use ndc_lexer::Span; use ndc_parser::BinaryOperator; use num::bigint::TryFromBigIntError; diff --git a/ndc_interpreter/src/interpreter/semantic/analyser.rs b/ndc_interpreter/src/semantic/analyser.rs similarity index 99% rename from ndc_interpreter/src/interpreter/semantic/analyser.rs rename to ndc_interpreter/src/semantic/analyser.rs index 8d78ead7..57b9b9b9 100644 --- a/ndc_interpreter/src/interpreter/semantic/analyser.rs +++ b/ndc_interpreter/src/semantic/analyser.rs @@ -1,4 +1,4 @@ -use crate::interpreter::function::StaticType; +use crate::function::StaticType; use itertools::Itertools; use ndc_lexer::Span; use ndc_parser::{ diff --git a/ndc_interpreter/src/interpreter/semantic/mod.rs b/ndc_interpreter/src/semantic/mod.rs similarity index 100% rename from ndc_interpreter/src/interpreter/semantic/mod.rs rename to ndc_interpreter/src/semantic/mod.rs diff --git a/ndc_interpreter/src/interpreter/sequence.rs b/ndc_interpreter/src/sequence.rs similarity index 98% rename from ndc_interpreter/src/interpreter/sequence.rs rename to ndc_interpreter/src/sequence.rs index 9f9e4e55..db265840 100644 --- a/ndc_interpreter/src/interpreter/sequence.rs +++ b/ndc_interpreter/src/sequence.rs @@ -1,8 +1,8 @@ use crate::hash_map::HashMap; -use crate::interpreter::function::StaticType; -use crate::interpreter::heap::{MaxHeap, MinHeap}; -use crate::interpreter::iterator::ValueIterator; -use crate::interpreter::value::Value; +use crate::function::StaticType; +use crate::heap::{MaxHeap, MinHeap}; +use crate::iterator::ValueIterator; +use crate::value::Value; use std::cell::RefCell; use std::cmp::Ordering; use std::collections::VecDeque; diff --git a/ndc_interpreter/src/interpreter/value.rs b/ndc_interpreter/src/value.rs similarity index 98% rename from ndc_interpreter/src/interpreter/value.rs rename to ndc_interpreter/src/value.rs index 451b50de..52a588d9 100644 --- a/ndc_interpreter/src/interpreter/value.rs +++ b/ndc_interpreter/src/value.rs @@ -10,10 +10,10 @@ use num::BigInt; use crate::compare::FallibleOrd; use crate::hash_map::DefaultHasher; -use crate::interpreter::function::{Function, StaticType}; -use crate::interpreter::int::Int; -use crate::interpreter::num::{Number, NumberToFloatError, NumberToUsizeError}; -use crate::interpreter::sequence::Sequence; +use crate::function::{Function, StaticType}; +use crate::int::Int; +use crate::num::{Number, NumberToFloatError, NumberToUsizeError}; +use crate::sequence::Sequence; use super::iterator::{ValueIterator, ValueRange, ValueRangeFrom, ValueRangeInclusive}; diff --git a/ndc_lsp/src/backend.rs b/ndc_lsp/src/backend.rs index b4f7af4f..05f654b7 100644 --- a/ndc_lsp/src/backend.rs +++ b/ndc_lsp/src/backend.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use ndc_lexer::{Lexer, Span, TokenLocation}; -use ndc_interpreter::interpreter::Interpreter; +use ndc_interpreter::Interpreter; use ndc_parser::{Expression, ExpressionLocation, ForBody, ForIteration, Lvalue}; use ndc_stdlib::WithStdlib; use tokio::sync::Mutex; diff --git a/ndc_macros/src/convert.rs b/ndc_macros/src/convert.rs index 5f133127..fcf992fe 100644 --- a/ndc_macros/src/convert.rs +++ b/ndc_macros/src/convert.rs @@ -28,7 +28,7 @@ impl TypeConverter for MutRefString { } fn static_type(&self) -> TokenStream { - quote! { ndc_interpreter::interpreter::function::StaticType::String } + quote! { ndc_interpreter::function::StaticType::String } } fn convert( @@ -42,7 +42,7 @@ impl TypeConverter for MutRefString { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::String but wasn't"); }; let #argument_var_name = &mut *#temp_var.try_borrow_mut()?; @@ -73,7 +73,7 @@ impl TypeConverter for InternalMap { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#temp_var, _)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Map(#temp_var, _)) = #argument_var_name else { panic!("Value #position needed to be Sequence::Map but wasn't"); }; @@ -89,7 +89,7 @@ impl TypeConverter for InternalString { } fn static_type(&self) -> TokenStream { - quote! { ndc_interpreter::interpreter::function::StaticType::String } + quote! { ndc_interpreter::function::StaticType::String } } fn convert( @@ -103,7 +103,7 @@ impl TypeConverter for InternalString { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::String(#temp_var)) = #argument_var_name else { panic!("Value #position needed to be Sequence::List but wasn't"); }; @@ -122,8 +122,8 @@ impl TypeConverter for InternalList { fn static_type(&self) -> TokenStream { // TODO: just hardcoding Any here is lazy quote! { - ndc_interpreter::interpreter::function::StaticType::List(Box::new( - ndc_interpreter::interpreter::function::StaticType::Any + ndc_interpreter::function::StaticType::List(Box::new( + ndc_interpreter::function::StaticType::Any )) } } @@ -139,7 +139,7 @@ impl TypeConverter for InternalList { param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::List(#temp_var)) = #argument_var_name else { panic!("Value #position needed to be Sequence::List but wasn't"); }; @@ -164,11 +164,11 @@ impl TypeConverter for InternalList { // argument_var_name: syn::Ident, // ) -> Vec { // vec![Argument { -// param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Tuple }, +// param_type: quote! { ndc_interpreter::function::StaticType::Tuple }, // param_name: quote! { #original_name }, // argument: quote! { #argument_var_name }, // initialize_code: quote! { -// let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Tuple(#temp_var)) = #argument_var_name else { +// let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Tuple(#temp_var)) = #argument_var_name else { // panic!("Value #position needed to be Sequence::Tuple but wasn't"); // }; // diff --git a/ndc_macros/src/function.rs b/ndc_macros/src/function.rs index e108cad0..4c8d7cfb 100644 --- a/ndc_macros/src/function.rs +++ b/ndc_macros/src/function.rs @@ -122,7 +122,7 @@ fn map_return_type(output: &syn::ReturnType) -> TokenStream { match output { syn::ReturnType::Default => { // in case return type is not specified (for closures rust defaults to type inference which doesn't help us here) - quote! { ndc_interpreter::interpreter::function::StaticType::Tuple(vec![]) } + quote! { ndc_interpreter::function::StaticType::Tuple(vec![]) } } syn::ReturnType::Type(_, ty) => map_type(ty), } @@ -135,13 +135,13 @@ fn map_type(ty: &syn::Type) -> TokenStream { syn::Type::Tuple(t) => { let inner = t.elems.iter().map(map_type); quote::quote! { - ndc_interpreter::interpreter::function::StaticType::Tuple(vec![ + ndc_interpreter::function::StaticType::Tuple(vec![ #(#inner),* ]) } } syn::Type::Infer(_) => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Any } + quote::quote! { ndc_interpreter::function::StaticType::Any } } _ => { panic!("unmapped type: {ty:?}"); @@ -155,29 +155,29 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { match segment.ident.to_string().as_str() { "i32" | "i64" | "isize" | "u32" | "u64" | "usize" | "BigInt" => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Int } + quote::quote! { ndc_interpreter::function::StaticType::Int } } "f32" | "f64" => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Float } + quote::quote! { ndc_interpreter::function::StaticType::Float } } "bool" => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Bool } + quote::quote! { ndc_interpreter::function::StaticType::Bool } } "String" | "str" => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::String } + quote::quote! { ndc_interpreter::function::StaticType::String } } "Vec" | "List" => match &segment.arguments { syn::PathArguments::AngleBracketed(args) => { let inner = args.args.first().expect("Vec<> requires inner type"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::function::StaticType::List(Box::new(#mapped)) } } else { panic!("Vec inner not a type"); } } _ => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote::quote! { ndc_interpreter::function::StaticType::List(Box::new(ndc_interpreter::function::StaticType::Any)) } } }, "VecDeque" | "Deque" => match &segment.arguments { @@ -185,14 +185,14 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("VecDeque<> requires inner type"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Deque(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::function::StaticType::Deque(Box::new(#mapped)) } } else { panic!("VecDeque inner not a type"); } } _ => quote::quote! { - ndc_interpreter::interpreter::function::StaticType::Deque(Box::new( - ndc_interpreter::interpreter::function::StaticType::Any + ndc_interpreter::function::StaticType::Deque(Box::new( + ndc_interpreter::function::StaticType::Any )) }, }, @@ -215,7 +215,7 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { }; let key_mapped = map_type(key_ty); let val_mapped = map_type(val_ty); - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Map { key: Box::new(#key_mapped), value: Box::new(#val_mapped) } } + quote::quote! { ndc_interpreter::function::StaticType::Map { key: Box::new(#key_mapped), value: Box::new(#val_mapped) } } } _ => temp_create_map_any(), }, @@ -224,14 +224,14 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("MinHeap requires inner"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_interpreter::interpreter::function::StaticType::MinHeap(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::function::StaticType::MinHeap(Box::new(#mapped)) } } else { panic!("MinHeap inner invalid"); } } _ => quote::quote! { - ndc_interpreter::interpreter::function::StaticType::MinHeap(Box::new( - ndc_interpreter::interpreter::function::StaticType::Any + ndc_interpreter::function::StaticType::MinHeap(Box::new( + ndc_interpreter::function::StaticType::Any )) }, }, @@ -240,7 +240,7 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("MaxHeap requires inner"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_interpreter::interpreter::function::StaticType::MaxHeap(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::function::StaticType::MaxHeap(Box::new(#mapped)) } } else { panic!("MaxHeap inner invalid"); } @@ -252,13 +252,13 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("Iterator requires inner"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Iterator(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::function::StaticType::Iterator(Box::new(#mapped)) } } else { panic!("Iterator inner invalid"); } } _ => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Iterator(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote::quote! { ndc_interpreter::function::StaticType::Iterator(Box::new(ndc_interpreter::function::StaticType::Any)) } } }, "Option" => match &segment.arguments { @@ -266,7 +266,7 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { let inner = args.args.first().expect("Option requires inner type"); if let syn::GenericArgument::Type(inner_ty) = inner { let mapped = map_type(inner_ty); - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Option(Box::new(#mapped)) } + quote::quote! { ndc_interpreter::function::StaticType::Option(Box::new(#mapped)) } } else { panic!("Option inner invalid"); } @@ -283,9 +283,9 @@ fn map_type_path(p: &syn::TypePath) -> TokenStream { } _ => panic!("Result without angle bracketed args"), }, - "Number" => quote::quote! { ndc_interpreter::interpreter::function::StaticType::Number }, + "Number" => quote::quote! { ndc_interpreter::function::StaticType::Number }, "Value" | "EvaluationResult" => { - quote::quote! { ndc_interpreter::interpreter::function::StaticType::Any } + quote::quote! { ndc_interpreter::function::StaticType::Any } } unmatched => panic!("Cannot map type string '{unmatched}' to StaticType"), } @@ -334,7 +334,7 @@ fn wrap_single( let return_expr = match function.sig.output { syn::ReturnType::Default => quote! { - return Ok(ndc_interpreter::interpreter::value::Value::unit()); + return Ok(ndc_interpreter::value::Value::unit()); }, syn::ReturnType::Type(_, typ) => match &*typ { // If the function returns a result we unpack it using the question mark operator @@ -342,11 +342,11 @@ fn wrap_single( return result; }, ty @ syn::Type::Path(_) if path_ends_with(ty, "Result") => quote! { - let value = result.map_err(|err| ndc_interpreter::interpreter::function::FunctionCarrier::IntoEvaluationError(Box::new(err)))?; - return Ok(ndc_interpreter::interpreter::value::Value::from(value)); + let value = result.map_err(|err| ndc_interpreter::function::FunctionCarrier::IntoEvaluationError(Box::new(err)))?; + return Ok(ndc_interpreter::value::Value::from(value)); }, _ => quote! { - let result = ndc_interpreter::interpreter::value::Value::from(result); + let result = ndc_interpreter::value::Value::from(result); return Ok(result); }, }, @@ -364,9 +364,9 @@ fn wrap_single( // } let function_declaration = quote! { pub fn #identifier ( - values: &mut [ndc_interpreter::interpreter::value::Value], - environment: &std::rc::Rc> - ) -> ndc_interpreter::interpreter::evaluate::EvaluationResult { + values: &mut [ndc_interpreter::value::Value], + environment: &std::rc::Rc> + ) -> ndc_interpreter::evaluate::EvaluationResult { // Define the inner function that has the rust type signature #[inline] #inner @@ -384,11 +384,11 @@ fn wrap_single( }; let function_registration = quote! { - let func = ndc_interpreter::interpreter::function::FunctionBuilder::default() - .body(ndc_interpreter::interpreter::function::FunctionBody::GenericFunction { + let func = ndc_interpreter::function::FunctionBuilder::default() + .body(ndc_interpreter::function::FunctionBody::GenericFunction { function: #identifier, - type_signature: ndc_interpreter::interpreter::function::TypeSignature::Exact(vec![ - #( ndc_interpreter::interpreter::function::Parameter::new(#param_names, #param_types,) ),* + type_signature: ndc_interpreter::function::TypeSignature::Exact(vec![ + #( ndc_interpreter::function::Parameter::new(#param_names, #param_types,) ),* ]), return_type: #return_type, }) @@ -409,10 +409,10 @@ fn wrap_single( fn into_param_type(ty: &syn::Type) -> TokenStream { match ty { ty if path_ends_with(ty, "Vec") => { - quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::function::StaticType::List(Box::new(ndc_interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "VecDeque") => { - quote! { ndc_interpreter::interpreter::function::StaticType::Deque(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::function::StaticType::Deque(Box::new(ndc_interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "DefaultMap") || path_ends_with(ty, "DefaultMapMut") @@ -421,48 +421,48 @@ fn into_param_type(ty: &syn::Type) -> TokenStream { temp_create_map_any() } ty if path_ends_with(ty, "MinHeap") => { - quote! { ndc_interpreter::interpreter::function::StaticType::MinHeap(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::function::StaticType::MinHeap(Box::new(ndc_interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "MaxHeap") => { - quote! { ndc_interpreter::interpreter::function::StaticType::MaxHeap(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::function::StaticType::MaxHeap(Box::new(ndc_interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "ListRepr") => { - quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::function::StaticType::List(Box::new(ndc_interpreter::function::StaticType::Any)) } } ty if path_ends_with(ty, "MapRepr") => temp_create_map_any(), syn::Type::Reference(syn::TypeReference { elem, .. }) => into_param_type(elem), syn::Type::Path(syn::TypePath { path, .. }) => match path { - _ if path.is_ident("i64") => quote! { ndc_interpreter::interpreter::function::StaticType::Int }, + _ if path.is_ident("i64") => quote! { ndc_interpreter::function::StaticType::Int }, _ if path.is_ident("usize") => { - quote! { ndc_interpreter::interpreter::function::StaticType::Int } + quote! { ndc_interpreter::function::StaticType::Int } } _ if path.is_ident("f64") => { - quote! { ndc_interpreter::interpreter::function::StaticType::Float } + quote! { ndc_interpreter::function::StaticType::Float } } _ if path.is_ident("bool") => { - quote! { ndc_interpreter::interpreter::function::StaticType::Bool } + quote! { ndc_interpreter::function::StaticType::Bool } } _ if path.is_ident("Value") => { - quote! { ndc_interpreter::interpreter::function::StaticType::Any } + quote! { ndc_interpreter::function::StaticType::Any } } _ if path.is_ident("Number") => { - quote! { ndc_interpreter::interpreter::function::StaticType::Number } + quote! { ndc_interpreter::function::StaticType::Number } } _ if path.is_ident("Sequence") => { - quote! { ndc_interpreter::interpreter::function::StaticType::Sequence(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::function::StaticType::Sequence(Box::new(ndc_interpreter::function::StaticType::Any)) } } _ if path.is_ident("Callable") => { quote! { - ndc_interpreter::interpreter::function::StaticType::Function { + ndc_interpreter::function::StaticType::Function { parameters: None, - return_type: Box::new(ndc_interpreter::interpreter::function::StaticType::Any) + return_type: Box::new(ndc_interpreter::function::StaticType::Any) } } } _ => panic!("Don't know how to convert Path into StaticType\n\n{path:?}"), }, syn::Type::ImplTrait(_) => { - quote! { ndc_interpreter::interpreter::function::StaticType::Iterator(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) } + quote! { ndc_interpreter::function::StaticType::Iterator(Box::new(ndc_interpreter::function::StaticType::Any)) } } x => panic!("Don't know how to convert {x:?} into StaticType"), } @@ -494,15 +494,15 @@ fn create_temp_variable( return vec![Argument { param_type: quote! { // TODO: how are we going to figure out the exact type of function here - ndc_interpreter::interpreter::function::StaticType::Function { + ndc_interpreter::function::StaticType::Function { parameters: None, - return_type: Box::new(ndc_interpreter::interpreter::function::StaticType::Any) + return_type: Box::new(ndc_interpreter::function::StaticType::Any) } }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Function(#temp_var) = #argument_var_name else { + let ndc_interpreter::value::Value::Function(#temp_var) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = &Callable { @@ -521,7 +521,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = &*#rc_temp_var.borrow(); @@ -537,7 +537,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Map(#rc_temp_var, _default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -553,7 +553,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = (&*#rc_temp_var.borrow(), default.to_owned()); @@ -569,7 +569,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Map(#rc_temp_var, default)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Map but wasn't"); }; let #argument_var_name = (&mut *#rc_temp_var.try_borrow_mut()?, default.to_owned()); @@ -582,11 +582,11 @@ fn create_temp_variable( let rc_temp_var = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) }, + param_type: quote! { ndc_interpreter::function::StaticType::List(Box::new(ndc_interpreter::function::StaticType::Any)) }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -602,7 +602,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -618,7 +618,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Deque(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &*#rc_temp_var.try_borrow()?; @@ -634,7 +634,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MaxHeap but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -650,7 +650,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::MaxHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MaxHeap but wasn't"); }; let #argument_var_name = &*#rc_temp_var.try_borrow()?; @@ -666,7 +666,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MinHeap but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.try_borrow_mut()?; @@ -682,7 +682,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::MinHeap(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::MinHeap but wasn't"); }; let #argument_var_name = &*#rc_temp_var.try_borrow()?; @@ -694,11 +694,11 @@ fn create_temp_variable( let rc_temp_var = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::String }, + param_type: quote! { ndc_interpreter::function::StaticType::String }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::String(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::String(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::String but wasn't"); }; let #rc_temp_var = #rc_temp_var.borrow(); @@ -710,19 +710,19 @@ fn create_temp_variable( else if is_ref_of_bigint(ty) { let big_int = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Int }, + param_type: quote! { ndc_interpreter::function::StaticType::Int }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let #big_int = if let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Int(ndc_interpreter::interpreter::int::Int::Int64(smol))) = #argument_var_name { + let #big_int = if let ndc_interpreter::value::Value::Number(ndc_interpreter::num::Number::Int(ndc_interpreter::int::Int::Int64(smol))) = #argument_var_name { Some(num::BigInt::from(*smol)) } else { None }; let #argument_var_name = match #argument_var_name { - ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Int(ndc_interpreter::interpreter::int::Int::BigInt(big))) => big, - ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Int(ndc_interpreter::interpreter::int::Int::Int64(smoll))) => #big_int.as_ref().unwrap(), + ndc_interpreter::value::Value::Number(ndc_interpreter::num::Number::Int(ndc_interpreter::int::Int::BigInt(big))) => big, + ndc_interpreter::value::Value::Number(ndc_interpreter::num::Number::Int(ndc_interpreter::int::Int::Int64(smoll))) => #big_int.as_ref().unwrap(), _ => panic!("Value #position need to be an Int but wasn't"), } }, @@ -731,7 +731,7 @@ fn create_temp_variable( // If we need an owned Value else if path_ends_with(ty, "Value") && !is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Any }, + param_type: quote! { ndc_interpreter::function::StaticType::Any }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { @@ -744,11 +744,11 @@ fn create_temp_variable( let rc_temp_var = syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) }, + param_type: quote! { ndc_interpreter::function::StaticType::List(Box::new(ndc_interpreter::function::StaticType::Any)) }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &mut *#rc_temp_var.borrow_mut(); @@ -761,22 +761,22 @@ fn create_temp_variable( syn::Ident::new(&format!("temp_{argument_var_name}"), identifier.span()); return vec![ Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::List(Box::new(ndc_interpreter::interpreter::function::StaticType::Any)) }, + param_type: quote! { ndc_interpreter::function::StaticType::List(Box::new(ndc_interpreter::function::StaticType::Any)) }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::List(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::List but wasn't"); }; let #argument_var_name = &*#rc_temp_var.borrow(); }, }, // Argument { - // param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Tuple }, + // param_type: quote! { ndc_interpreter::function::StaticType::Tuple }, // param_name: quote! { #original_name }, // argument: quote! { #argument_var_name }, // initialize_code: quote! { - // let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Tuple(#rc_temp_var)) = #argument_var_name else { + // let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Tuple(#rc_temp_var)) = #argument_var_name else { // panic!("Value #position needed to be a Sequence::List but wasn't"); // }; // let #argument_var_name = &#rc_temp_var; @@ -787,11 +787,11 @@ fn create_temp_variable( // The pattern is &BigRational else if path_ends_with(ty, "BigRational") && is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Rational }, + param_type: quote! { ndc_interpreter::function::StaticType::Rational }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { + let ndc_interpreter::value::Value::Number(ndc_interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { panic!("Value #position needs to be Rational but wasn't"); }; @@ -802,11 +802,11 @@ fn create_temp_variable( // The pattern is BigRational else if path_ends_with(ty, "BigRational") && !is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Rational }, + param_type: quote! { ndc_interpreter::function::StaticType::Rational }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { + let ndc_interpreter::value::Value::Number(ndc_interpreter::num::Number::Rational(#argument_var_name)) = #argument_var_name else { panic!("VValue #position needs to be Rational but wasn't"); }; @@ -817,11 +817,11 @@ fn create_temp_variable( // The pattern is Complex64 else if path_ends_with(ty, "Complex64") && !is_ref(ty) { return vec![Argument { - param_type: quote! { ndc_interpreter::interpreter::function::StaticType::Complex }, + param_type: quote! { ndc_interpreter::function::StaticType::Complex }, param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Number(ndc_interpreter::interpreter::num::Number::Complex(#argument_var_name)) = #argument_var_name else { + let ndc_interpreter::value::Value::Number(ndc_interpreter::num::Number::Complex(#argument_var_name)) = #argument_var_name else { panic!("Value #position needs to be Complex64 but wasn't"); }; @@ -836,7 +836,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let #argument_var_name = #path :: try_from(#argument_var_name).map_err(|err| ndc_interpreter::interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? + let #argument_var_name = #path :: try_from(#argument_var_name).map_err(|err| ndc_interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? }, }]; } @@ -847,7 +847,7 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let #argument_var_name = <#type_ref as TryFrom<&mut ndc_interpreter::interpreter::value::Value>> :: try_from(#argument_var_name).map_err(|err| ndc_interpreter::interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? + let #argument_var_name = <#type_ref as TryFrom<&mut ndc_interpreter::value::Value>> :: try_from(#argument_var_name).map_err(|err| ndc_interpreter::function::FunctionCallError::ConvertToNativeTypeError(format!("{err}")))? }, }]; } @@ -862,11 +862,11 @@ fn create_temp_variable( param_name: quote! { #original_name }, argument: quote! { #argument_var_name }, initialize_code: quote! { - let ndc_interpreter::interpreter::value::Value::Sequence(ndc_interpreter::interpreter::sequence::Sequence::Iterator(#rc_temp_var)) = #argument_var_name else { + let ndc_interpreter::value::Value::Sequence(ndc_interpreter::sequence::Sequence::Iterator(#rc_temp_var)) = #argument_var_name else { panic!("Value #position needed to be a Sequence::Iterator but wasn't"); }; - let #argument_var_name = ndc_interpreter::interpreter::iterator::RcIter::new(Rc::clone(#rc_temp_var)); + let #argument_var_name = ndc_interpreter::iterator::RcIter::new(Rc::clone(#rc_temp_var)); }, }]; } else { @@ -880,9 +880,9 @@ fn create_temp_variable( // TODO: just adding Any as type here is lazy AF but CBA fixing generics pub fn temp_create_map_any() -> TokenStream { quote! { - ndc_interpreter::interpreter::function::StaticType::Map { - key: Box::new(ndc_interpreter::interpreter::function::StaticType::Any), - value: Box::new(ndc_interpreter::interpreter::function::StaticType::Any) + ndc_interpreter::function::StaticType::Map { + key: Box::new(ndc_interpreter::function::StaticType::Any), + value: Box::new(ndc_interpreter::function::StaticType::Any) } } } diff --git a/ndc_macros/src/lib.rs b/ndc_macros/src/lib.rs index 1f18bea7..5051cc38 100644 --- a/ndc_macros/src/lib.rs +++ b/ndc_macros/src/lib.rs @@ -43,7 +43,7 @@ pub fn export_module(_attr: TokenStream, item: TokenStream) -> TokenStream { } let register_function = quote! { - pub fn register(env: &mut ndc_interpreter::interpreter::environment::Environment) { + pub fn register(env: &mut ndc_interpreter::environment::Environment) { #(#registrations)* } }; diff --git a/ndc_stdlib/src/aoc.rs b/ndc_stdlib/src/aoc.rs index ceb0155a..8b695704 100644 --- a/ndc_stdlib/src/aoc.rs +++ b/ndc_stdlib/src/aoc.rs @@ -5,9 +5,9 @@ mod inner { use std::rc::Rc; use ndc_interpreter::hash_map::HashMap; - use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; - use ndc_interpreter::interpreter::sequence::Sequence; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::iterator::mut_seq_to_iterator; + use ndc_interpreter::sequence::Sequence; + use ndc_interpreter::value::Value; /// Counts the occurrences of each item in a sequence and returns a map with the frequencies. #[function(return_type = HashMap<_, _>)] diff --git a/ndc_stdlib/src/cmp.rs b/ndc_stdlib/src/cmp.rs index c89706cd..9362cbaf 100644 --- a/ndc_stdlib/src/cmp.rs +++ b/ndc_stdlib/src/cmp.rs @@ -3,7 +3,7 @@ mod inner { use anyhow::anyhow; use ndc_interpreter::compare::FallibleOrd; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::value::Value; use std::cmp::Ordering; /// Produces an error if the argument is not true. diff --git a/ndc_stdlib/src/deque.rs b/ndc_stdlib/src/deque.rs index 75d7c213..afa286de 100644 --- a/ndc_stdlib/src/deque.rs +++ b/ndc_stdlib/src/deque.rs @@ -2,8 +2,8 @@ use ndc_macros::export_module; #[export_module] mod inner { - use ndc_interpreter::interpreter::sequence::Sequence; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::sequence::Sequence; + use ndc_interpreter::value::Value; use std::cell::RefCell; use std::collections::VecDeque; use std::rc::Rc; diff --git a/ndc_stdlib/src/file.rs b/ndc_stdlib/src/file.rs index e6141a55..23752e97 100644 --- a/ndc_stdlib/src/file.rs +++ b/ndc_stdlib/src/file.rs @@ -1,8 +1,8 @@ -use ndc_interpreter::interpreter::environment::Environment; -use ndc_interpreter::interpreter::function::{ +use ndc_interpreter::environment::Environment; +use ndc_interpreter::function::{ FunctionBody, FunctionBuilder, FunctionCarrier, StaticType, TypeSignature, }; -use ndc_interpreter::interpreter::value::Value; +use ndc_interpreter::value::Value; use ndc_macros::export_module; use std::fs::read_to_string; diff --git a/ndc_stdlib/src/hash_map.rs b/ndc_stdlib/src/hash_map.rs index 1e4fe337..2d81b6aa 100644 --- a/ndc_stdlib/src/hash_map.rs +++ b/ndc_stdlib/src/hash_map.rs @@ -1,8 +1,8 @@ use ndc_interpreter::hash_map; use ndc_interpreter::hash_map::HashMap; use ndc_interpreter::hash_map::HashMapExt; -use ndc_interpreter::interpreter::sequence::{DefaultMap, MapRepr, Sequence}; -use ndc_interpreter::interpreter::value::Value; +use ndc_interpreter::sequence::{DefaultMap, MapRepr, Sequence}; +use ndc_interpreter::value::Value; use std::cell::RefCell; use std::rc::Rc; diff --git a/ndc_stdlib/src/heap.rs b/ndc_stdlib/src/heap.rs index 4367b305..9eafb0ea 100644 --- a/ndc_stdlib/src/heap.rs +++ b/ndc_stdlib/src/heap.rs @@ -2,9 +2,9 @@ use ndc_macros::export_module; #[export_module] mod inner { - use ndc_interpreter::interpreter::heap::{MaxHeap, MinHeap}; - use ndc_interpreter::interpreter::sequence::Sequence; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::heap::{MaxHeap, MinHeap}; + use ndc_interpreter::sequence::Sequence; + use ndc_interpreter::value::Value; use std::cell::RefCell; use std::rc::Rc; diff --git a/ndc_stdlib/src/lib.rs b/ndc_stdlib/src/lib.rs index 55ca8108..fb0ac47f 100644 --- a/ndc_stdlib/src/lib.rs +++ b/ndc_stdlib/src/lib.rs @@ -1,5 +1,5 @@ -use ndc_interpreter::interpreter::Interpreter; -use ndc_interpreter::interpreter::environment::Environment; +use ndc_interpreter::Interpreter; +use ndc_interpreter::environment::Environment; pub mod aoc; pub mod cmp; diff --git a/ndc_stdlib/src/list.rs b/ndc_stdlib/src/list.rs index 2d666143..c3350b78 100644 --- a/ndc_stdlib/src/list.rs +++ b/ndc_stdlib/src/list.rs @@ -1,9 +1,9 @@ #[ndc_macros::export_module] mod inner { use itertools::Itertools; - use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; - use ndc_interpreter::interpreter::sequence::{ListRepr, Sequence}; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::iterator::mut_seq_to_iterator; + use ndc_interpreter::sequence::{ListRepr, Sequence}; + use ndc_interpreter::value::Value; use std::rc::Rc; use anyhow::anyhow; diff --git a/ndc_stdlib/src/math.rs b/ndc_stdlib/src/math.rs index 93be4ea5..97b97a4f 100644 --- a/ndc_stdlib/src/math.rs +++ b/ndc_stdlib/src/math.rs @@ -1,8 +1,8 @@ use factorial::Factorial; -use ndc_interpreter::interpreter::environment::Environment; -use ndc_interpreter::interpreter::num::{BinaryOperatorError, Number}; -use ndc_interpreter::interpreter::sequence::Sequence; -use ndc_interpreter::interpreter::value::Value; +use ndc_interpreter::environment::Environment; +use ndc_interpreter::num::{BinaryOperatorError, Number}; +use ndc_interpreter::sequence::Sequence; +use ndc_interpreter::value::Value; use ndc_macros::export_module; use num::ToPrimitive; use std::ops::{Add, Mul}; @@ -53,8 +53,8 @@ mod inner { use super::FallibleSum; use anyhow::Context; - use ndc_interpreter::interpreter::int::Int; - use ndc_interpreter::interpreter::num::Number; + use ndc_interpreter::int::Int; + use ndc_interpreter::num::Number; use num::{BigInt, BigRational, BigUint, Integer, complex::Complex64}; /// Returns the sign of a number. @@ -209,11 +209,11 @@ mod inner { pub mod f64 { use super::{Environment, Number, ToPrimitive, f64}; - use ndc_interpreter::interpreter::function::{ + use ndc_interpreter::function::{ FunctionBody, FunctionBuilder, FunctionCarrier, Parameter, StaticType, TypeSignature, }; - use ndc_interpreter::interpreter::num::BinaryOperatorError; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::num::BinaryOperatorError; + use ndc_interpreter::value::Value; use std::cmp::Ordering; use std::ops::Not; @@ -475,7 +475,7 @@ pub mod f64 { ($method:ident,$docs:literal) => { let function = FunctionBuilder::default() .body( - ndc_interpreter::interpreter::function::FunctionBody::NumericUnaryOp { + ndc_interpreter::function::FunctionBody::NumericUnaryOp { body: |num: Number| match num { Number::Int(i) => Number::Float(f64::from(i).$method()), Number::Float(f) => Number::Float(f.$method()), diff --git a/ndc_stdlib/src/rand.rs b/ndc_stdlib/src/rand.rs index 311ac5fa..34cc4a76 100644 --- a/ndc_stdlib/src/rand.rs +++ b/ndc_stdlib/src/rand.rs @@ -20,10 +20,10 @@ pub fn random_n( #[export_module] mod inner { use itertools::Itertools; - use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; - use ndc_interpreter::interpreter::num::Number; - use ndc_interpreter::interpreter::sequence::Sequence; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::iterator::mut_seq_to_iterator; + use ndc_interpreter::num::Number; + use ndc_interpreter::sequence::Sequence; + use ndc_interpreter::value::Value; /// Randomly shuffles the elements of the list in place. pub fn shuffle(list: &mut [Value]) { diff --git a/ndc_stdlib/src/regex.rs b/ndc_stdlib/src/regex.rs index 493f3e6d..a2670f49 100644 --- a/ndc_stdlib/src/regex.rs +++ b/ndc_stdlib/src/regex.rs @@ -1,4 +1,4 @@ -use ndc_interpreter::interpreter::value::Value; +use ndc_interpreter::value::Value; use once_cell::sync::Lazy; use regex::Regex; diff --git a/ndc_stdlib/src/sequence.rs b/ndc_stdlib/src/sequence.rs index 348949ba..02453256 100644 --- a/ndc_stdlib/src/sequence.rs +++ b/ndc_stdlib/src/sequence.rs @@ -2,8 +2,8 @@ use anyhow::anyhow; use itertools::Itertools; -use ndc_interpreter::interpreter::iterator::{MutableValueIntoIterator, mut_seq_to_iterator}; -use ndc_interpreter::interpreter::sequence::Sequence; +use ndc_interpreter::iterator::{MutableValueIntoIterator, mut_seq_to_iterator}; +use ndc_interpreter::sequence::Sequence; use ndc_interpreter::{ compare::FallibleOrd, interpreter::{evaluate::EvaluationResult, function::Callable, value::Value}, @@ -79,8 +79,8 @@ fn try_sort_by( #[export_module] mod inner { - use ndc_interpreter::interpreter::iterator::{Repeat, ValueIterator}; - use ndc_interpreter::interpreter::{function::FunctionCarrier, iterator::mut_value_to_iterator}; + use ndc_interpreter::iterator::{Repeat, ValueIterator}; + use ndc_interpreter::{function::FunctionCarrier, iterator::mut_value_to_iterator}; use std::cell::RefCell; #[function(name = "in")] @@ -832,8 +832,8 @@ pub mod extra { use anyhow::anyhow; use itertools::izip; - use ndc_interpreter::interpreter::function::{FunctionBuilder, StaticType}; - use ndc_interpreter::interpreter::{ + use ndc_interpreter::function::{FunctionBuilder, StaticType}; + use ndc_interpreter::{ environment::Environment, function::FunctionBody, iterator::mut_value_to_iterator, value::Value, }; @@ -844,7 +844,7 @@ pub mod extra { .name("zip".to_string()) .documentation("Combines multiple sequences (or iterables) into a single sequence of tuples, where the ith tuple contains the ith element from each input sequence.\n\nIf the input sequences are of different lengths, the resulting sequence is truncated to the length of the shortest input.".to_string()) .body(FunctionBody::generic( - ndc_interpreter::interpreter::function::TypeSignature::Variadic, + ndc_interpreter::function::TypeSignature::Variadic, StaticType::List(Box::new(StaticType::Tuple(vec![StaticType::Any, StaticType::Any]))), |args, _env| match args { [_] => { diff --git a/ndc_stdlib/src/serde.rs b/ndc_stdlib/src/serde.rs index 6abd7020..19e6b9f5 100644 --- a/ndc_stdlib/src/serde.rs +++ b/ndc_stdlib/src/serde.rs @@ -4,8 +4,8 @@ use std::{cell::RefCell, str::FromStr}; use anyhow::Context; use ndc_interpreter::hash_map::HashMap; -use ndc_interpreter::interpreter::sequence::Sequence; -use ndc_interpreter::interpreter::value::Value; +use ndc_interpreter::sequence::Sequence; +use ndc_interpreter::value::Value; use num::BigInt; use num::ToPrimitive; use serde_json::{Map, Number, Value as JsonValue, json}; @@ -15,17 +15,17 @@ fn value_to_json(value: Value) -> Result { Value::Option(Some(value)) => value_to_json(*value), Value::Option(None) => Ok(JsonValue::Null), Value::Number(number) => match number { - ndc_interpreter::interpreter::num::Number::Int(int) => match int { - ndc_interpreter::interpreter::int::Int::Int64(i) => Ok(json!(i)), - ndc_interpreter::interpreter::int::Int::BigInt(big_int) => { + ndc_interpreter::num::Number::Int(int) => match int { + ndc_interpreter::int::Int::Int64(i) => Ok(json!(i)), + ndc_interpreter::int::Int::BigInt(big_int) => { Number::from_str(&big_int.to_string()) .map(JsonValue::Number) .context("Cannot convert bigint to string") } }, - ndc_interpreter::interpreter::num::Number::Float(f) => Ok(json!(f)), - ndc_interpreter::interpreter::num::Number::Rational(ratio) => Ok(json!(ratio.to_f64())), - ndc_interpreter::interpreter::num::Number::Complex(complex) => Ok(json!(format!("{complex}"))), + ndc_interpreter::num::Number::Float(f) => Ok(json!(f)), + ndc_interpreter::num::Number::Rational(ratio) => Ok(json!(ratio.to_f64())), + ndc_interpreter::num::Number::Complex(complex) => Ok(json!(format!("{complex}"))), }, Value::Bool(b) => Ok(json!(b)), Value::Sequence(s) => match s { @@ -116,7 +116,7 @@ fn json_to_value(value: JsonValue) -> Result { #[export_module] mod inner { - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::value::Value; /// Converts a JSON string to a value pub fn json_decode(input: &str) -> anyhow::Result { diff --git a/ndc_stdlib/src/string.rs b/ndc_stdlib/src/string.rs index 89f384ae..ce26a1b3 100644 --- a/ndc_stdlib/src/string.rs +++ b/ndc_stdlib/src/string.rs @@ -1,8 +1,8 @@ use ndc_macros::export_module; -use ndc_interpreter::interpreter::iterator::mut_seq_to_iterator; -use ndc_interpreter::interpreter::sequence::{Sequence, StringRepr}; -use ndc_interpreter::interpreter::value::Value; +use ndc_interpreter::iterator::mut_seq_to_iterator; +use ndc_interpreter::sequence::{Sequence, StringRepr}; +use ndc_interpreter::value::Value; use std::rc::Rc; use anyhow::{Context, anyhow}; diff --git a/ndc_stdlib/src/value.rs b/ndc_stdlib/src/value.rs index b3a47e02..13e21bb7 100644 --- a/ndc_stdlib/src/value.rs +++ b/ndc_stdlib/src/value.rs @@ -3,10 +3,10 @@ use std::fmt::Write; #[export_module] mod inner { - use ndc_interpreter::interpreter::function::Callable; - use ndc_interpreter::interpreter::heap::{MaxHeap, MinHeap}; - use ndc_interpreter::interpreter::sequence::Sequence; - use ndc_interpreter::interpreter::value::Value; + use ndc_interpreter::function::Callable; + use ndc_interpreter::heap::{MaxHeap, MinHeap}; + use ndc_interpreter::sequence::Sequence; + use ndc_interpreter::value::Value; use std::cell::RefCell; use std::rc::Rc; diff --git a/tests/src/programs.rs b/tests/src/programs.rs index 8cef8a93..8c443722 100644 --- a/tests/src/programs.rs +++ b/tests/src/programs.rs @@ -1,4 +1,4 @@ -use ndc_interpreter::interpreter::Interpreter; +use ndc_interpreter::Interpreter; use ndc_stdlib::WithStdlib; use owo_colors::OwoColorize; use std::fs; From b3463a47cd686d6cb7830ee5bb8e16686df6a3a6 Mon Sep 17 00:00:00 2001 From: Tim Fennis Date: Mon, 2 Mar 2026 21:53:04 +0100 Subject: [PATCH 3/3] Fix small whoopsy --- ndc_stdlib/src/sequence.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ndc_stdlib/src/sequence.rs b/ndc_stdlib/src/sequence.rs index 02453256..aefc9b70 100644 --- a/ndc_stdlib/src/sequence.rs +++ b/ndc_stdlib/src/sequence.rs @@ -6,7 +6,7 @@ use ndc_interpreter::iterator::{MutableValueIntoIterator, mut_seq_to_iterator}; use ndc_interpreter::sequence::Sequence; use ndc_interpreter::{ compare::FallibleOrd, - interpreter::{evaluate::EvaluationResult, function::Callable, value::Value}, + {evaluate::EvaluationResult, function::Callable, value::Value}, }; use ndc_macros::export_module; use std::cmp::Ordering;