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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#![allow(unused_imports, dead_code)]
use crate::compiler::SinglepassCompiler;
use std::sync::Arc;
use wasmer_compiler::{Compiler, CompilerConfig, Engine, EngineBuilder, ModuleMiddleware};
use wasmer_types::{CpuFeature, Features, Target};
#[derive(Debug, Clone)]
pub struct Singlepass {
pub(crate) enable_nan_canonicalization: bool,
pub(crate) middlewares: Vec<Arc<dyn ModuleMiddleware>>,
}
impl Singlepass {
pub fn new() -> Self {
Self {
enable_nan_canonicalization: true,
middlewares: vec![],
}
}
fn enable_nan_canonicalization(&mut self) {
self.enable_nan_canonicalization = true;
}
pub fn canonicalize_nans(&mut self, enable: bool) -> &mut Self {
self.enable_nan_canonicalization = enable;
self
}
}
impl CompilerConfig for Singlepass {
fn enable_pic(&mut self) {
}
fn compiler(self: Box<Self>) -> Box<dyn Compiler> {
Box::new(SinglepassCompiler::new(*self))
}
fn default_features_for_target(&self, _target: &Target) -> Features {
let mut features = Features::default();
features.multi_value(false);
features
}
fn push_middleware(&mut self, middleware: Arc<dyn ModuleMiddleware>) {
self.middlewares.push(middleware);
}
}
impl Default for Singlepass {
fn default() -> Singlepass {
Self::new()
}
}
impl From<Singlepass> for Engine {
fn from(config: Singlepass) -> Self {
EngineBuilder::new(config).engine()
}
}