11mod ast;
22mod token;
33
4- use crate :: ast:: { Expr , add_fluff , Bindings , generate_wasm} ;
4+ use crate :: ast:: { Expr , Bindings , generate_wat , generate_wasm} ;
55use crate :: token:: Tokenizer ;
66
77use wasmtime:: { Caller , Engine , Func , Instance , Module , Result , Store } ;
@@ -10,9 +10,12 @@ use wasmtime::{Caller, Engine, Func, Instance, Module, Result, Store};
1010fn test_eval ( ) {
1111 fn evaluate ( s : & str ) -> i32 {
1212 let expr = Expr :: parse ( & mut Tokenizer :: from_str ( s) . peekable ( ) ) ;
13+ let mut bindings = Bindings :: new ( ) ;
14+ bindings. add_var ( "x" , 7 ) ;
15+ bindings. add_var ( "yy" , 9 ) ;
1316 eprintln ! ( "{}" , expr. to_wat( ) ) ;
1417 // eval_wat(&expr).expect("Failed to evaluate")
15- eval_wasm ( & expr) . expect ( "Failed to evaluate" )
18+ eval_wasm ( & expr, & bindings ) . expect ( "Failed to evaluate" )
1619 }
1720 assert_eq ! ( evaluate( "1+2+3+4+5+6+7+8+9" ) , 45 ) ;
1821 assert_eq ! ( evaluate( "1*2*3*4*5*6*7*8*9" ) , 362880 ) ;
@@ -25,9 +28,8 @@ fn test_eval() {
2528 assert_eq ! ( evaluate( "100/3" ) , 33 ) ;
2629}
2730
28- fn eval_wat ( expr : & Expr ) -> Result < i32 > {
29- let wat = add_fluff ( & expr. to_wat ( ) ) ; // wrap raw WAT in Module
30-
31+ fn eval_wat ( expr : & Expr , bindings : & Bindings ) -> Result < i32 > {
32+ let wat = generate_wat ( & expr. to_wat ( ) , bindings) ; // wrap raw WAT in Module
3133 let engine = Engine :: default ( ) ;
3234 let module = Module :: new ( & engine, wat) ?;
3335
@@ -46,11 +48,8 @@ fn eval_wat(expr: &Expr) -> Result<i32> {
4648 calc. call ( & mut store, ( ) )
4749}
4850
49- fn eval_wasm ( expr : & Expr ) -> Result < i32 > {
50- let mut bindings = Bindings :: new ( ) ;
51- bindings. add_var ( "x" ) ;
52- bindings. add_var ( "yy" ) ;
53- let wasm = generate_wasm ( expr, & bindings) ;
51+ fn eval_wasm ( expr : & Expr , bindings : & Bindings ) -> Result < i32 > {
52+ let wasm = generate_wasm ( expr, bindings) ;
5453 let engine = Engine :: default ( ) ;
5554 let module = Module :: new ( & engine, wasm) ?;
5655
@@ -71,16 +70,19 @@ fn eval_wasm(expr: &Expr) -> Result<i32>{
7170
7271fn main ( ) -> Result < ( ) > {
7372 let args = std:: env:: args ( ) ;
73+ let mut bindings = Bindings :: new ( ) ;
74+ bindings. add_var ( "x" , 7 ) ;
75+ bindings. add_var ( "yy" , 42 ) ;
7476 for arg in args. skip ( 1 ) {
7577 println ! ( ) ;
7678 println ! ( "Expression:\t {arg}" ) ;
7779 let tokens: Vec < _ > = Tokenizer :: from_str ( & arg) . collect ( ) ;
7880 println ! ( "Tokenized:\t {tokens:?}" ) ;
7981 let expr = Expr :: parse ( & mut tokens. into_iter ( ) . peekable ( ) ) ;
8082 println ! ( "WASM Text:\t {}" , expr. to_wat( ) . replace( '\n' , "\n \t \t " ) ) ;
81- let result = eval_wat ( & expr) ?;
83+ let result = eval_wat ( & expr, & bindings ) ?;
8284 println ! ( "Text result:\t {result}" ) ;
83- let result = eval_wasm ( & expr) ?;
85+ let result = eval_wasm ( & expr, & bindings ) ?;
8486 println ! ( "Binary result:\t {result}" ) ;
8587 }
8688
0 commit comments