introduce tags, structs, and reticles
this was meant to be split into smaller changes, but I realised I edited my existing revision too late.
This commit is contained in:
parent
8356b6c750
commit
5b7d9586ea
26 changed files with 1113 additions and 351 deletions
|
@ -2,7 +2,7 @@ use std::error::Error;
|
|||
|
||||
use haku::{
|
||||
ast::{dump::dump, Ast},
|
||||
bytecode::{Chunk, Defs},
|
||||
bytecode::{Chunk, Defs, DefsLimits},
|
||||
compiler::{compile_expr, Compiler, Source},
|
||||
lexer::{lex, Lexer},
|
||||
parser::{self, Parser, ParserLimits},
|
||||
|
@ -14,7 +14,7 @@ use haku::{
|
|||
};
|
||||
|
||||
fn eval(code: &str) -> Result<Value, Box<dyn Error>> {
|
||||
let mut system = System::new(1);
|
||||
let mut system = System::new(2);
|
||||
|
||||
let code = SourceCode::unlimited_len(code);
|
||||
|
||||
|
@ -32,7 +32,10 @@ fn eval(code: &str) -> Result<Value, Box<dyn Error>> {
|
|||
system: &system,
|
||||
};
|
||||
|
||||
let mut defs = Defs::new(256);
|
||||
let mut defs = Defs::new(&DefsLimits {
|
||||
max_defs: 256,
|
||||
max_tags: 256,
|
||||
});
|
||||
let mut chunk = Chunk::new(65536).unwrap();
|
||||
let mut compiler = Compiler::new(&mut defs, &mut chunk);
|
||||
compile_expr(&mut compiler, &src, root)?;
|
||||
|
@ -70,7 +73,7 @@ fn eval(code: &str) -> Result<Value, Box<dyn Error>> {
|
|||
println!("closure spec: {closure_spec:?}");
|
||||
|
||||
let closure = vm.create_ref(Ref::Closure(Closure::chunk(chunk_id, closure_spec)))?;
|
||||
let result = vm.run(&system, closure)?;
|
||||
let result = vm.run(&system, closure, &[])?;
|
||||
|
||||
println!("used fuel: {}", limits.fuel - vm.remaining_fuel());
|
||||
|
||||
|
@ -281,3 +284,11 @@ fn issue_78() {
|
|||
"#;
|
||||
assert_eq!(eval(code).unwrap(), Value::Ref(RefId::from_u32(2)))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn with_dotter_identity() {
|
||||
let code = r#"
|
||||
withDotter \d -> d
|
||||
"#;
|
||||
assert_eq!(eval(code).unwrap(), Value::Ref(RefId::from_u32(0)))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue