diff --git a/oden-js/src/conversion/from.rs b/oden-js/src/conversion/from.rs index d7a6acb4..4d12e776 100644 --- a/oden-js/src/conversion/from.rs +++ b/oden-js/src/conversion/from.rs @@ -1,4 +1,4 @@ -use crate::{ContextRef, Error, Result, Value, ValueRef}; +use crate::{ContextRef, Error, Result, ValueRef}; use std::num::TryFromIntError; pub trait TryFromValue: Sized { @@ -98,9 +98,10 @@ impl TryFromValue for String { } } -impl TryFromValue for Value { - #[inline] - fn try_from_value(value: &ValueRef, ctx: &ContextRef) -> Result { - Ok(value.dup(ctx)) - } -} +// impl<'c, T: Class> TryFrom<&'c ValueRef<'_>> for T { +// +// #[inline] +// fn try_from_value(value: &ValueRef, ctx:&ContextRef) -> Result< Self> { +// T::from_value(value) +// } +// } diff --git a/src/main.js b/src/main.js index 1e9fa198..7b985b1f 100644 --- a/src/main.js +++ b/src/main.js @@ -1,5 +1,4 @@ function init() { - graphics.print("Hello world!"); // console.log("Hello world!"); } diff --git a/src/script.rs b/src/script.rs index 16bdd7a5..4391e0d2 100644 --- a/src/script.rs +++ b/src/script.rs @@ -1,61 +1,21 @@ -use oden_js::{Class, ClassID, Context, ContextRef, Runtime, Value, ValueRef, ValueResult}; - -pub struct GraphicsAPI {} - -impl GraphicsAPI { - fn print_fn(ctx: &ContextRef, _this: &ValueRef, args: &[&ValueRef]) -> ValueResult { - for arg in args { - print!("{}", arg.to_string(ctx)?); - } - println!(); - Ok(Value::undefined(ctx)) - } -} - -impl Class for GraphicsAPI { - fn class_id() -> &'static ClassID { - static ID: ClassID = ClassID::new("GraphicsAPI"); - &ID - } - - fn prototype(context: &ContextRef) -> ValueResult { - let mut prototype = context.new_object()?; - - let print = context.new_dynamic_fn(GraphicsAPI::print_fn)?; - prototype.set_property(context, "print", &print)?; - - Ok(prototype) - } -} +use oden_js as js; pub struct ScriptContext { - context: Context, - init: Value, - update: Value, - draw: Value, + context: js::Context, + init: js::Value, + update: js::Value, + draw: js::Value, } impl ScriptContext { pub fn new() -> Self { - let runtime = Runtime::new(); + let runtime = js::Runtime::new(); - let mut context = Context::new(runtime); + let mut context = js::Context::new(runtime); context.add_intrinsic_bigfloat(); context.add_intrinsic_bigdecimal(); context.add_intrinsic_operators(); - // TODO: This should be a module instead. Yuck. - let mut global = context - .global_object() - .expect("Unable to get global object"); - let graphics = GraphicsAPI {}; - let graphics = graphics - .into_value(&context) - .expect("Unable to wrap graphics API"); - global - .set_property(&context, "graphics", &graphics) - .expect("Unable to establish graphics"); - let js = include_str!("main.js"); let module = context .load_module(js, "main.js")