Compare commits

..

No commits in common. "b2b730f79c61bb658eebdb2215f7813f8f7caa20" and "db8a5f8eed2c5280ee760030c934434bab297498" have entirely different histories.

4 changed files with 12 additions and 20 deletions

View file

@ -9,7 +9,7 @@ pub enum ModuleSource<'a> {
} }
pub trait ModuleLoader { pub trait ModuleLoader {
fn load(&self, context: &ContextRef, name: &str) -> Result<ModuleSource>; fn load(&mut self, context: &ContextRef, name: &str) -> Result<ModuleSource>;
} }
pub struct DefaultModuleLoader {} pub struct DefaultModuleLoader {}
@ -21,7 +21,7 @@ impl DefaultModuleLoader {
} }
impl ModuleLoader for DefaultModuleLoader { impl ModuleLoader for DefaultModuleLoader {
fn load(&self, _context: &ContextRef, name: &str) -> Result<ModuleSource> { fn load(&mut self, _context: &ContextRef, name: &str) -> Result<ModuleSource> {
// Attempt to open the file. // Attempt to open the file.
let path = Path::new(name); let path = Path::new(name);
match std::fs::read_to_string(path) { match std::fs::read_to_string(path) {
@ -34,7 +34,7 @@ impl ModuleLoader for DefaultModuleLoader {
pub(crate) fn load_module( pub(crate) fn load_module(
context: &ContextRef, context: &ContextRef,
name: &str, name: &str,
loader: &Box<dyn ModuleLoader>, loader: &mut Box<dyn ModuleLoader>,
) -> *mut sys::JSModuleDef { ) -> *mut sys::JSModuleDef {
match loader.load(context, name) { match loader.load(context, name) {
Ok(ModuleSource::Native(native)) => native.module, Ok(ModuleSource::Native(native)) => native.module,

View file

@ -3,11 +3,10 @@ use crate::ContextRef;
use oden_js_sys as sys; use oden_js_sys as sys;
use std::cell::RefCell; use std::cell::RefCell;
use std::ffi::CStr; use std::ffi::CStr;
use std::sync::Arc;
struct PrivateState { struct PrivateState {
refs: u64, refs: u64,
loader: Arc<Box<dyn ModuleLoader>>, loader: Box<dyn ModuleLoader>,
} }
impl PrivateState { impl PrivateState {
@ -21,16 +20,9 @@ impl PrivateState {
Err(_) => return std::ptr::null_mut(), Err(_) => return std::ptr::null_mut(),
}; };
let loader = unsafe { let state = opaque as *mut PrivateState;
let ptr = opaque as *const RefCell<PrivateState>;
ptr.as_ref()
.expect("We already know this runtime is one of ours!")
.borrow()
.loader
.clone()
};
let context = ContextRef::from_raw(ctx); let context = ContextRef::from_raw(ctx);
load_module(&context, path, &loader) load_module(&context, path, &mut (*state).loader)
} }
} }
@ -47,7 +39,7 @@ impl Runtime {
pub fn with_loader<TLoader: ModuleLoader + 'static>(loader: TLoader) -> Runtime { pub fn with_loader<TLoader: ModuleLoader + 'static>(loader: TLoader) -> Runtime {
let state = Box::new(RefCell::new(PrivateState { let state = Box::new(RefCell::new(PrivateState {
refs: 1, refs: 1,
loader: Arc::new(Box::new(loader)), loader: Box::new(loader),
})); }));
let rt = unsafe { let rt = unsafe {
let rt = sys::JS_NewRuntime(); let rt = sys::JS_NewRuntime();

View file

@ -1,15 +1,15 @@
import * as core from "graphics-core"; import * as core from "graphics-core";
export function cls(r, g, b) { function cls(r, g, b) {
core.cls(r, g, b); core.cls(r, g, b);
} }
export function print(...args) { function print(...args) {
core.print(args.join(" ")); core.print(args.join(" "));
} }
export function spr(x, y, w, h, sx, sy, sw = undefined, sh = undefined) { function spr(x, y, w, h, sx, sy, sw = undefined, sh = undefined) {
sw = sw | w; sw = sw | w;
sh = sh | h; sh = sh | h;
core.spr(x, y, w, h, sx, sy, sw, sh); core.spr(xy, w, h, sx, sy, sw, sh);
} }

View file

@ -1,4 +1,4 @@
import { cls, print, spr } from "./src/graphics.js"; import { cls, print, spr } from "./src/graphics";
export function init() { export function init() {
print("Hello world!"); print("Hello world!");