mirror of
https://github.com/voltrevo/ValueScript.git
synced 2026-01-09 13:38:03 -05:00
compile_to_rust_tests
This commit is contained in:
7
Cargo.lock
generated
7
Cargo.lock
generated
@@ -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"
|
||||
|
||||
@@ -9,4 +9,5 @@ members = [
|
||||
"vstc",
|
||||
"swc_demo",
|
||||
"measure_bytecode_size",
|
||||
"compile_to_rust_tests",
|
||||
]
|
||||
|
||||
9
compile_to_rust_tests/Cargo.toml
Normal file
9
compile_to_rust_tests/Cargo.toml
Normal 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" }
|
||||
93
compile_to_rust_tests/src/main.rs
Normal file
93
compile_to_rust_tests/src/main.rs
Normal 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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user