compile_to_rust_tests

This commit is contained in:
Andrew Morris
2023-06-16 09:42:46 +10:00
parent 1340b80bed
commit c6b438d776
5 changed files with 111 additions and 1 deletions

7
Cargo.lock generated
View File

@@ -217,6 +217,13 @@ dependencies = [
"winapi",
]
[[package]]
name = "compile_to_rust_tests"
version = "0.1.0"
dependencies = [
"valuescript_vm",
]
[[package]]
name = "console_error_panic_hook"
version = "0.1.7"

View File

@@ -9,4 +9,5 @@ members = [
"vstc",
"swc_demo",
"measure_bytecode_size",
"compile_to_rust_tests",
]

View File

@@ -0,0 +1,9 @@
[package]
name = "compile_to_rust_tests"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
valuescript_vm = { path = "../valuescript_vm" }

View File

@@ -0,0 +1,93 @@
use std::process::exit;
use valuescript_vm::{
operations::{op_less, op_minus, op_plus},
vs_value::{ToVal, Val},
ValTrait,
};
pub fn main() {
let result = fib(35.0.to_val());
// let result: Result<Val, Val> = Ok(fib2(35.0).to_val());
match result {
Ok(result) => println!("{}", result.pretty()),
Err(err) => {
println!("Uncaught exception: {}", err.pretty());
exit(1);
}
}
}
// Via bytecode: 12.6s
// 1.52s
// pub fn fib(n: Val) -> Result<Val, Val> {
// let mut _return = Val::Undefined;
// let mut _tmp0 = op_less(n.clone(), 2.0.to_val())?;
// _tmp0 = op_not(_tmp0.clone());
// if !_tmp0.is_truthy() {
// _return = n.clone();
// return Ok(_return);
// }
// let mut _tmp1 = op_minus(n.clone(), 1.0.to_val())?;
// let mut _tmp2 = fib(_tmp1.clone())?;
// _tmp1 = op_minus(n.clone(), 2.0.to_val())?;
// let mut _tmp3 = fib(_tmp1.clone())?;
// _return = op_plus(_tmp2.clone(), _tmp3.clone())?;
// return Ok(_return);
// }
// 1.17s
// pub fn fib(n: Val) -> Result<Val, Val> {
// let mut _return = Val::Undefined;
// let mut _tmp0 = op_less(n.clone(), 2.0.to_val())?;
// _tmp0 = op_not(_tmp0);
// if !_tmp0.is_truthy() {
// _return = n;
// return Ok(_return);
// }
// let mut _tmp1 = op_minus(n.clone(), 1.0.to_val())?;
// let mut _tmp2 = fib(_tmp1)?;
// _tmp1 = op_minus(n, 2.0.to_val())?;
// let mut _tmp3 = fib(_tmp1)?;
// _return = op_plus(_tmp2, _tmp3)?;
// return Ok(_return);
// }
// 1.09s
pub fn fib(n: Val) -> Result<Val, Val> {
let mut _return = Val::Undefined;
let mut _tmp0 = op_less(n.clone(), 2.0.to_val())?;
if _tmp0.is_truthy() {
_return = n;
return Ok(_return);
}
let mut _tmp1 = op_minus(n.clone(), 1.0.to_val())?;
let mut _tmp2 = fib(_tmp1)?;
_tmp1 = op_minus(n, 2.0.to_val())?;
let mut _tmp3 = fib(_tmp1)?;
_return = op_plus(_tmp2, _tmp3)?;
return Ok(_return);
}
// 0.120s
pub fn fib2(n: f64) -> f64 {
if n < 2.0 {
return n;
}
return fib2(n - 1.0) + fib2(n - 2.0);
}

View File

@@ -13,7 +13,7 @@ mod make_generator_frame;
mod native_frame_function;
mod native_function;
mod number_methods;
mod operations;
pub mod operations;
mod stack_frame;
mod string_methods;
mod todo_fn;