Compare commits
2 commits
a48a9efdb4
...
3b02faf9b4
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b02faf9b4 | |||
| 83a0950153 |
3 changed files with 55 additions and 15 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{ContextRef, Error, Result, ValueRef};
|
use crate::{ContextRef, Error, Result, Value, ValueRef};
|
||||||
use std::num::TryFromIntError;
|
use std::num::TryFromIntError;
|
||||||
|
|
||||||
pub trait TryFromValue: Sized {
|
pub trait TryFromValue: Sized {
|
||||||
|
|
@ -98,10 +98,9 @@ impl TryFromValue for String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// impl<'c, T: Class> TryFrom<&'c ValueRef<'_>> for T {
|
impl TryFromValue for Value {
|
||||||
//
|
#[inline]
|
||||||
// #[inline]
|
fn try_from_value(value: &ValueRef, ctx: &ContextRef) -> Result<Self> {
|
||||||
// fn try_from_value(value: &ValueRef, ctx:&ContextRef) -> Result< Self> {
|
Ok(value.dup(ctx))
|
||||||
// T::from_value(value)
|
}
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
function init() {
|
function init() {
|
||||||
|
graphics.print("Hello world!");
|
||||||
// console.log("Hello world!");
|
// console.log("Hello world!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,61 @@
|
||||||
use oden_js as js;
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct ScriptContext {
|
pub struct ScriptContext {
|
||||||
context: js::Context,
|
context: Context,
|
||||||
init: js::Value,
|
init: Value,
|
||||||
update: js::Value,
|
update: Value,
|
||||||
draw: js::Value,
|
draw: Value,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ScriptContext {
|
impl ScriptContext {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let runtime = js::Runtime::new();
|
let runtime = Runtime::new();
|
||||||
|
|
||||||
let mut context = js::Context::new(runtime);
|
let mut context = Context::new(runtime);
|
||||||
context.add_intrinsic_bigfloat();
|
context.add_intrinsic_bigfloat();
|
||||||
context.add_intrinsic_bigdecimal();
|
context.add_intrinsic_bigdecimal();
|
||||||
context.add_intrinsic_operators();
|
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 js = include_str!("main.js");
|
||||||
let module = context
|
let module = context
|
||||||
.load_module(js, "main.js")
|
.load_module(js, "main.js")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue