Update to Wasmer 3.0 beta
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-08-27 14:14:58 +02:00
parent c5fb81c179
commit bd62c1ac62
14 changed files with 315 additions and 241 deletions

View File

@@ -5,21 +5,22 @@ use crate::script_implementations::wasm::export_registry::register;
use crate::script_implementations::wasm::extern_ref::ExternRef;
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
use crate::static_data::MoveData;
use wasmer::FunctionEnvMut;
register! {
fn learned_move_get_learn_method(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<LearnedMove>,
) -> u8 {
unsafe {
transmute(turn_choice.value(env).unwrap().learn_method())
transmute(turn_choice.value(&env).unwrap().learn_method())
}
}
fn learned_move_get_move_data(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<LearnedMove>,
) -> ExternRef<MoveData> {
ExternRef::new(env.data().as_ref(), turn_choice.value(env).unwrap().move_data())
ExternRef::func_new(&env, turn_choice.value(&env).unwrap().move_data())
}
}

View File

@@ -1,7 +1,7 @@
use crate::dynamic_data::DynamicLibrary;
use crate::script_implementations::wasm::export_registry::register;
use crate::script_implementations::wasm::extern_ref::ExternRef;
use wasmer::{Exports, Store};
use wasmer::{FunctionEnv, FunctionEnvMut, Imports, StoreMut};
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
use crate::static_data::StaticData;
@@ -15,17 +15,17 @@ mod turn_choice;
register! {
fn dynamic_library_get_static_data(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
dynamic_lib: ExternRef<DynamicLibrary>,
) -> ExternRef<StaticData> {
ExternRef::new(env.data().as_ref(), dynamic_lib.value(env).unwrap().static_data())
ExternRef::func_new(&env, dynamic_lib.value(&env).unwrap().static_data())
}
manual manual_register
}
/// Additional required manual registration
fn manual_register(exports: &mut Exports, store: &Store, env: WebAssemblyEnv) {
turn_choice::register(exports, store, env.clone());
pokemon::register(exports, store, env.clone());
learned_move::register(exports, store, env);
fn manual_register(imports: &mut Imports, store: &mut StoreMut, env: &FunctionEnv<WebAssemblyEnv>) {
turn_choice::register(imports, store, env);
pokemon::register(imports, store, env);
learned_move::register(imports, store, env);
}

View File

@@ -6,72 +6,73 @@ use crate::script_implementations::wasm::extern_ref::ExternRef;
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
use crate::static_data::StatisticSet;
use crate::static_data::{ClampedStatisticSet, Species};
use wasmer::FunctionEnvMut;
register! {
fn pokemon_get_library(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
) -> ExternRef<DynamicLibrary> {
let lib = pokemon.value(env).unwrap().library();
ExternRef::new(env.data().as_ref(), lib)
let lib = pokemon.value(&env).unwrap().library();
ExternRef::func_new(&env, lib)
}
fn pokemon_get_boosted_stats(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
) -> ExternRef<StatisticSet<u32>> {
let statistic_set = pokemon.value(env).unwrap().boosted_stats();
ExternRef::new(env.data().as_ref(), statistic_set)
let statistic_set = pokemon.value(&env).unwrap().boosted_stats();
ExternRef::func_new(&env, statistic_set)
}
fn pokemon_get_flat_stats(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
) -> ExternRef<StatisticSet<u32>> {
let statistic_set = pokemon.value(env).unwrap().flat_stats();
ExternRef::new(env.data().as_ref(), statistic_set)
let statistic_set = pokemon.value(&env).unwrap().flat_stats();
ExternRef::func_new(&env, statistic_set)
}
fn pokemon_get_stat_boosts(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
) -> ExternRef<ClampedStatisticSet<i8, -6, 6>> {
let statistic_set = pokemon.value(env).unwrap().stat_boosts();
ExternRef::new(env.data().as_ref(), statistic_set)
let statistic_set = pokemon.value(&env).unwrap().stat_boosts();
ExternRef::func_new(&env, statistic_set)
}
fn pokemon_get_individual_values(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
) -> ExternRef<ClampedStatisticSet<u8, 0, 31>> {
let statistic_set = pokemon.value(env).unwrap().individual_values();
ExternRef::new(env.data().as_ref(), statistic_set)
let statistic_set = pokemon.value(&env).unwrap().individual_values();
ExternRef::func_new(&env, statistic_set)
}
fn pokemon_get_effort_values(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
) -> ExternRef<ClampedStatisticSet<u8, 0, 252>> {
let statistic_set = pokemon.value(env).unwrap().effort_values();
ExternRef::new(env.data().as_ref(), statistic_set)
let statistic_set = pokemon.value(&env).unwrap().effort_values();
ExternRef::func_new(&env, statistic_set)
}
fn pokemon_get_species(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
) -> ExternRef<Species> {
let species = pokemon.value(env).unwrap().species();
ExternRef::new(env.data().as_ref(), species)
let species = pokemon.value(&env).unwrap().species();
ExternRef::func_new(&env, species)
}
fn pokemon_damage(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
pokemon: ExternRef<Pokemon>,
damage: u32,
source: u8
) {
unsafe{
pokemon.value(env).unwrap().damage(damage, transmute(source));
pokemon.value(&env).unwrap().damage(damage, transmute(source));
}
}
}

View File

@@ -4,22 +4,23 @@ use crate::dynamic_data::{LearnedMove, Pokemon, TurnChoice};
use crate::script_implementations::wasm::export_registry::register;
use crate::script_implementations::wasm::extern_ref::ExternRef;
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
use wasmer::FunctionEnvMut;
register! {
fn turn_choice_get_user(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<TurnChoice>,
) -> ExternRef<Pokemon> {
let turn_choice = turn_choice.value(env).unwrap();
ExternRef::new(env.data().as_ref(), turn_choice.user().as_ref().deref())
let turn_choice = turn_choice.value(&env).unwrap();
ExternRef::func_new(&env, turn_choice.user().as_ref().deref())
}
fn turn_choice_get_kind(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<TurnChoice>,
) -> u8 {
match turn_choice.value(env).unwrap() {
match turn_choice.value(&env).unwrap() {
TurnChoice::Move(_) => 0,
TurnChoice::Item(_) => 1,
TurnChoice::Switch(_) => 2,
@@ -29,30 +30,30 @@ register! {
}
fn turn_choice_move_used_move(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<TurnChoice>,
) -> ExternRef<LearnedMove> {
if let TurnChoice::Move(d) = turn_choice.value(env).unwrap() {
return ExternRef::new(env.data().as_ref(), d.used_move().as_ref());
if let TurnChoice::Move(d) = turn_choice.value(&env).unwrap() {
return ExternRef::func_new(&env, d.used_move().as_ref());
}
panic!("Invalid turn choice");
}
fn turn_choice_move_target_side(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<TurnChoice>,
) -> u8 {
if let TurnChoice::Move(d) = turn_choice.value(env).unwrap() {
if let TurnChoice::Move(d) = turn_choice.value(&env).unwrap() {
return d.target_side();
}
panic!("Invalid turn choice");
}
fn turn_choice_move_target_index(
env: &WebAssemblyEnv,
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<TurnChoice>,
) -> u8 {
if let TurnChoice::Move(d) = turn_choice.value(env).unwrap() {
if let TurnChoice::Move(d) = turn_choice.value(&env).unwrap() {
return d.target_index();
}
panic!("Invalid turn choice");