fix case for 0 arg function calls

Signed-off-by: Ava Hahn <ava@aidanis.online>
This commit is contained in:
Ava Hahn 2023-01-22 19:36:37 -08:00
parent e7dd0caa4a
commit 71b70fe4b8
Signed by untrusted user who does not match committer: affine
GPG key ID: 3A4645B8CF806069
4 changed files with 29 additions and 22 deletions

View file

@ -18,7 +18,6 @@
use dirs::home_dir;
use relish::ast::{ast_to_string, eval, func_call, lex, new_ast, Ctr, FTable, VTable};
use relish::aux::configure;
use relish::stdlib::get_stdlib;
use rustyline::error::ReadlineError;
use rustyline::Editor;
use std::cell::RefCell;
@ -48,7 +47,7 @@ fn main() {
let vt = Rc::new(RefCell::new(VTable::new()));
let conf_file;
let mut ft;
let ft;
match env::var("RELISH_CFG_FILE") {
Ok(s) => {
conf_file = s
@ -67,11 +66,6 @@ fn main() {
},
}
match get_stdlib(vt.clone()) {
Ok(f) => ft = f,
Err(s) => println!("{}", s),
}
loop {
let readline: Result<String, ReadlineError>;
// Rust is pain

View file

@ -23,10 +23,12 @@ use crate::stl::get_stdlib;
use crate::vars::{define, VTable};
use std::cell::RefCell;
use std::fs;
use std::io::{self, Write};
use std::rc::Rc;
fn prompt_default_callback(_: Ast, _: Rc<RefCell<VTable>>, _: Rc<RefCell<FTable>>) -> Ctr {
print!("λ ");
io::stdout().flush().unwrap();
return Ctr::None;
}

View file

@ -101,7 +101,16 @@ pub fn func_call(
match &called_func.args {
Args::Lazy(num) => {
let called_arg_count = list_len(n_args.clone()) as i128;
if *num > -1 && (*num != called_arg_count) {
if *num == 0 {
if let Ctr::None = n_args.clone().borrow().car {
//pass
} else {
return Err(format!(
"expected 0 args in call to {}. Got one or more.",
called_func.name,
));
}
} else if *num > -1 && (*num != called_arg_count) {
return Err(format!(
"expected {} args in call to {}. Got {}.",
num, called_func.name, called_arg_count