Error Messaging Redesign
This commit contains the following: * New data types to support full tracebacks * New traceback data type used across stl and ast * Updates to tests * fixes for error messaging in sym and some stl functions
This commit is contained in:
parent
91ad4eed12
commit
789349df48
24 changed files with 837 additions and 374 deletions
13
src/stl.rs
13
src/stl.rs
|
|
@ -18,6 +18,7 @@
|
|||
use crate::segment::{Ctr, Seg, Type};
|
||||
use crate::run::{run_callback, RUN_DOCSTRING};
|
||||
use crate::sym::{Args, SymTable, Symbol, ValueType};
|
||||
use crate::error::Traceback;
|
||||
use std::rc::Rc;
|
||||
use std::cell::RefCell;
|
||||
use std::env::vars;
|
||||
|
|
@ -41,15 +42,15 @@ pub const CFG_FILE_VNAME: &str = "RELISH_CFG_FILE";
|
|||
pub const RELISH_DEFAULT_CONS_HEIGHT: i16 = 24;
|
||||
pub const RELISH_DEFAULT_CONS_WIDTH: i16 = 80;
|
||||
|
||||
fn l_prompt_default_callback(_: &Seg, _: &mut SymTable) -> Result<Ctr, String> {
|
||||
fn l_prompt_default_callback(_: &Seg, _: &mut SymTable) -> Result<Ctr, Traceback> {
|
||||
Ok(Ctr::String(">".to_string()))
|
||||
}
|
||||
|
||||
fn r_prompt_default_callback(_: &Seg, _: &mut SymTable) -> Result<Ctr, String> {
|
||||
fn r_prompt_default_callback(_: &Seg, _: &mut SymTable) -> Result<Ctr, Traceback> {
|
||||
Ok(Ctr::String(String::new()))
|
||||
}
|
||||
|
||||
fn prompt_delimiter_default_callback(_: &Seg, _: &mut SymTable) -> Result<Ctr, String> {
|
||||
fn prompt_delimiter_default_callback(_: &Seg, _: &mut SymTable) -> Result<Ctr, Traceback> {
|
||||
Ok(Ctr::String("λ ".to_string()))
|
||||
}
|
||||
|
||||
|
|
@ -643,7 +644,7 @@ pub fn dynamic_stdlib(syms: &mut SymTable, shell: Option<Rc<RefCell<posix::Shell
|
|||
//get CFG_RELISH_ENV from syms
|
||||
let env_cfg_user_form = syms
|
||||
.call_symbol(&MODENV_CFG_VNAME.to_string(), &Seg::new(), true)
|
||||
.unwrap_or_else(|_: String| Box::new(Ctr::None))
|
||||
.unwrap_or_else(|_: Traceback| Box::new(Ctr::None))
|
||||
.to_string()
|
||||
.eq("true");
|
||||
|
||||
|
|
@ -656,7 +657,7 @@ pub fn dynamic_stdlib(syms: &mut SymTable, shell: Option<Rc<RefCell<posix::Shell
|
|||
conditional_branches: true,
|
||||
docs: decl::STORE_DOCSTRING.to_string(),
|
||||
value: ValueType::Internal(Rc::new(
|
||||
move |ast: &Seg, syms: &mut SymTable| -> Result<Ctr, String> {
|
||||
move |ast: &Seg, syms: &mut SymTable| -> Result<Ctr, Traceback> {
|
||||
decl::store_callback(ast, syms, env_cfg_user_form)
|
||||
},
|
||||
)),
|
||||
|
|
@ -668,7 +669,7 @@ pub fn dynamic_stdlib(syms: &mut SymTable, shell: Option<Rc<RefCell<posix::Shell
|
|||
if let Some(shell_state) = shell {
|
||||
let posix_cfg_user_form = syms
|
||||
.call_symbol(&POSIX_CFG_VNAME.to_string(), &Seg::new(), true)
|
||||
.unwrap_or_else(|_: String| Box::new(Ctr::None))
|
||||
.unwrap_or_else(|_: Traceback| Box::new(Ctr::None))
|
||||
.to_string()
|
||||
.eq("true");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue