Major fixes for WebAssembly
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
use std::any::Any;
|
||||
use std::sync::atomic::{AtomicBool, AtomicPtr, AtomicUsize};
|
||||
use std::sync::Weak;
|
||||
|
||||
use hashbrown::HashSet;
|
||||
use wasmer::NativeFunc;
|
||||
|
||||
use crate::dynamic_data::Script;
|
||||
use crate::script_implementations::wasm::script_resolver::WebAssemblyScriptResolver;
|
||||
use crate::dynamic_data::{DynamicLibrary, Script};
|
||||
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
||||
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnvironmentData;
|
||||
use crate::script_implementations::wasm::WebAssemblyScriptCapabilities;
|
||||
use crate::static_data::EffectParameter;
|
||||
use crate::StringKey;
|
||||
|
||||
/// A WebAssemblyScript is there to implement the Script trait within WebAssemblyScript.
|
||||
@@ -25,8 +29,8 @@ pub struct WebAssemblyScript {
|
||||
self_ptr: u32,
|
||||
/// Capabilities define which functions we actually implement.
|
||||
capabilities: AtomicPtr<HashSet<WebAssemblyScriptCapabilities>>,
|
||||
/// A reference back to our resolver.
|
||||
resolver: AtomicPtr<WebAssemblyScriptResolver>,
|
||||
/// The global runtime environment data.
|
||||
environment: Weak<WebAssemblyEnvironmentData>,
|
||||
}
|
||||
|
||||
impl WebAssemblyScript {
|
||||
@@ -35,7 +39,7 @@ impl WebAssemblyScript {
|
||||
owner_ptr: *mut u8,
|
||||
self_ptr: u32,
|
||||
capabilities: *mut HashSet<WebAssemblyScriptCapabilities>,
|
||||
resolver: *mut WebAssemblyScriptResolver,
|
||||
environment: Weak<WebAssemblyEnvironmentData>,
|
||||
name: StringKey,
|
||||
) -> Self {
|
||||
Self {
|
||||
@@ -45,7 +49,7 @@ impl WebAssemblyScript {
|
||||
owner_ptr: AtomicPtr::new(owner_ptr),
|
||||
self_ptr,
|
||||
capabilities: AtomicPtr::new(capabilities),
|
||||
resolver: AtomicPtr::new(resolver),
|
||||
environment,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,6 +67,16 @@ impl Script for WebAssemblyScript {
|
||||
&self.suppressed_count
|
||||
}
|
||||
|
||||
fn on_initialize(&self, library: &DynamicLibrary, _pars: &[EffectParameter]) {
|
||||
let env = self.environment.upgrade().unwrap();
|
||||
let exported = env.exported_functions();
|
||||
if let Some(f) = exported.get(&"script_on_initialize".into()) {
|
||||
let func: NativeFunc<(u32, ExternRef<DynamicLibrary>, u32), ()> = f.native().unwrap();
|
||||
func.call(self.self_ptr, ExternRef::new(env.as_ref(), library), 0)
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
fn as_any(&self) -> &dyn Any {
|
||||
self
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user