1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#![cfg(any(feature = "singlepass", feature = "default-singlepass"))] use wasmer_middleware_common::metering; use wasmer_runtime::{compile_with, Backend, Instance, Module}; use wasmer_runtime_core::codegen::{MiddlewareChain, StreamingCompiler}; use wasmer_singlepass_backend::ModuleCodeGenerator as SinglePassMCG; use crate::errors::{CompileErr, Error}; use snafu::ResultExt; static GAS_LIMIT: u64 = 10_000_000_000; pub fn compile(code: &[u8]) -> Result<Module, Error> { let c: StreamingCompiler<SinglePassMCG, _, _, _, _> = StreamingCompiler::new(move || { let mut chain = MiddlewareChain::new(); chain.push(metering::Metering::new(GAS_LIMIT)); chain }); compile_with(code, &c).context(CompileErr {}) } pub fn backend() -> Backend { Backend::Singlepass } pub fn set_gas(instance: &mut Instance, limit: u64) { let used = GAS_LIMIT - limit; metering::set_points_used(instance, used) } pub fn get_gas(instance: &Instance) -> u64 { let used = metering::get_points_used(instance); GAS_LIMIT - used }