Add Stmt and incorporate meta statements

This helps split up expressions, meta calls (like includes) that can be
expanded into more expressions.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2022-01-16 14:14:50 -08:00
parent c3d667ec54
commit effa99e65d
6 changed files with 114 additions and 27 deletions

View File

@@ -1,7 +1,7 @@
use crate::compile::Compile;
use crate::object::*;
use crate::scope::*;
use crate::syn::ast::SpExpr;
use crate::syn::ast::SpStmt;
use crate::vm::{error::*, inst::*};
use std::cell::RefCell;
use std::collections::BTreeMap;
@@ -175,10 +175,10 @@ impl Machine {
// Eval
// /////////////////////////////////////////////////////////////////////////
pub fn eval(&mut self, exprs: &Vec<SpExpr>) -> Result<()> {
pub fn eval(&mut self, stmts: Vec<SpStmt>) -> Result<()> {
self.scope_stack.push_scope();
let mut compile = Compile::new(&mut self.scope_stack, &mut self.quote_table);
let code = Rc::new(compile.compile(exprs));
let code = Rc::new(compile.compile(stmts));
let locals = self.scope_stack.pop_scope().unwrap();
self.call_stack.push(
QuoteFrame {