Print debug data of reader and evaluator on the rep
This commit is contained in:
parent
124fd3e267
commit
9181292651
12
Makefile
12
Makefile
|
@ -10,3 +10,15 @@ test-bootstrap:
|
|||
|
||||
.PHONY: test
|
||||
test: test-bootstrap
|
||||
|
||||
|
||||
.PHONY: clean-bootstrap
|
||||
clean-bootstrap:
|
||||
cd $(THIS_DIR)/bootstrap && cargo clean
|
||||
|
||||
.PHONY: bootstrap-repl
|
||||
bootstrap-repl:
|
||||
cd $(THIS_DIR)/bootstrap && cargo run repl
|
||||
|
||||
.PHONY: clean
|
||||
clean: clean-bootstrap
|
||||
|
|
|
@ -24,18 +24,25 @@ fn eval_expr(rt: &RT, scope: &Scope, expr: Expr) -> PossibleExpr {
|
|||
Ok(expr)
|
||||
}
|
||||
|
||||
pub fn eval(rt: &RT, scope: &Scope, exprs: Vec<Expr>) -> PossibleExpr {
|
||||
pub fn eval(rt: &RT, exprs: Vec<Expr>) -> PossibleExpr {
|
||||
match exprs.last() {
|
||||
Some(e) => Ok(e.clone()),
|
||||
_ => Err(err("NotImplemented".to_string())),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn rep(rt: &RT, scope: &Scope, input: &str) {
|
||||
pub fn read_eval_print(rt: &RT, input: &str) {
|
||||
match read_string(input) {
|
||||
Ok(exprs) => {
|
||||
let result_expr = eval(rt, scope, exprs);
|
||||
println!("<<");
|
||||
if rt.is_debug() {
|
||||
println!("Read Result: \n{:?}\n", exprs);
|
||||
}
|
||||
|
||||
let result_expr = eval(rt, exprs);
|
||||
|
||||
if rt.is_debug() {
|
||||
println!("Eval Result: \n{:?}\n", result_expr);
|
||||
}
|
||||
}
|
||||
Err(e) => println!("Error: {}", e),
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ pub trait IError {
|
|||
fn message(&self) -> &str;
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Error {
|
||||
msg: String,
|
||||
}
|
||||
|
|
|
@ -15,10 +15,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
use clap::{load_yaml, App, ArgMatches};
|
||||
use std::fs::File;
|
||||
use std::io;
|
||||
use std::io::prelude::*;
|
||||
use std::string::String;
|
||||
|
||||
pub mod ast;
|
||||
pub mod builtins;
|
||||
|
@ -50,11 +47,6 @@ fn main() -> io::Result<()> {
|
|||
let yaml = load_yaml!("cli.yml");
|
||||
let app = App::from(yaml);
|
||||
|
||||
// let rt = runtime::RT::new();
|
||||
|
||||
// rt.create_ns("user".to_string(), None);
|
||||
// rt.set_current_ns("user".to_string());
|
||||
|
||||
match app.get_matches().subcommand() {
|
||||
Some(("repl", args)) => repl(args.clone()),
|
||||
Some(("run", args)) => println!("repl, {:?}", args),
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
*/
|
||||
use crate::core::read_eval_print;
|
||||
use crate::runtime::RT;
|
||||
use rustyline::error::ReadlineError;
|
||||
use rustyline::Editor;
|
||||
|
@ -32,7 +33,7 @@ pub fn repl(rt: RT) {
|
|||
match readline {
|
||||
Ok(line) => {
|
||||
rl.add_history_entry(line.as_str());
|
||||
println!("Line: {}", line);
|
||||
read_eval_print(&rt, &line);
|
||||
}
|
||||
Err(ReadlineError::Interrupted) => {
|
||||
println!("CTRL-C");
|
||||
|
|
Loading…
Reference in New Issue