Fix native_env_global.

This commit is contained in:
Sergey Pepyakin
2017-11-28 16:55:28 +03:00
parent c3a3ad83fa
commit 6680b915bf
2 changed files with 12 additions and 6 deletions

View File

@ -1,16 +1,17 @@
use std::sync::Arc;
use std::sync::{Arc, Weak};
use std::collections::HashMap;
use std::borrow::Cow;
use parking_lot::RwLock;
use elements::{Internal, ValueType};
use interpreter::Error;
use interpreter::module::{ModuleInstanceInterface, ExecutionParams, ItemIndex,
use interpreter::module::{ModuleInstance, ModuleInstanceInterface, ExecutionParams, ItemIndex,
CallerContext, ExportEntryType, InternalFunctionReference, InternalFunction, FunctionSignature};
use interpreter::memory::MemoryInstance;
use interpreter::table::TableInstance;
use interpreter::value::RuntimeValue;
use interpreter::variable::{VariableInstance, VariableType};
use builder::module;
/// Min index of native function.
pub const NATIVE_INDEX_FUNC_MIN: u32 = 10001;
@ -284,6 +285,12 @@ pub fn native_module<'a, E: UserFunctionExecutor + 'a>(base: Arc<ModuleInstanceI
Ok(Arc::new(NativeModuleInstance::new(base, user_elements)?))
}
pub fn simple_native_module<'a, E: UserFunctionExecutor + 'a>(user_elements: UserDefinedElements<E>) -> Result<Arc<ModuleInstanceInterface + 'a>, Error> {
let mut instance = ModuleInstance::new(Weak::default(), "env".into(), module().build())?;
instance.instantiate(None)?;
native_module(Arc::new(instance), user_elements)
}
impl<'a> PartialEq for UserFunctionDescriptor {
fn eq(&self, other: &Self) -> bool {
self.params() == other.params()

View File

@ -7,7 +7,7 @@ use builder::module;
use elements::{ExportEntry, Internal, ImportEntry, External, GlobalEntry, GlobalType,
InitExpr, ValueType, BlockType, Opcodes, Opcode, FunctionType, TableType, MemoryType};
use interpreter::{Error, UserError, ProgramInstance};
use interpreter::native::{native_module, UserDefinedElements, UserFunctionExecutor, UserFunctionDescriptor};
use interpreter::native::{simple_native_module, native_module, UserDefinedElements, UserFunctionExecutor, UserFunctionDescriptor};
use interpreter::memory::MemoryInstance;
use interpreter::module::{ModuleInstance, ModuleInstanceInterface, CallerContext, ItemIndex, ExecutionParams, ExportEntryType, FunctionSignature};
use interpreter::validator::{FunctionValidationContext, Validator};
@ -334,9 +334,8 @@ fn native_env_global() {
}
let module_constructor = |elements: UserDefinedElements<DummyExecutor>| {
let program = ProgramInstance::with_emscripten_env(Default::default()).unwrap();
let env_instance = program.module("env").unwrap();
let native_env_instance = native_module(env_instance.clone(), elements).unwrap();
let program = ProgramInstance::new();
let native_env_instance = simple_native_module(elements).unwrap();
let params = ExecutionParams::with_external("env".into(), native_env_instance);
let module = module()