Remove --nodejs-runtime-detect

Instead use it by default and add a --browser argument to explicity
remove the shim.

Closes #79
This commit is contained in:
Alex Crichton 2018-03-28 07:37:56 -07:00
parent bde56d3a6e
commit 28c3fdddf5
4 changed files with 51 additions and 83 deletions

View File

@ -193,8 +193,6 @@ impl Project {
cli::Bindgen::new() cli::Bindgen::new()
.input_path(&as_a_module) .input_path(&as_a_module)
.nodejs(true)
.nodejs_runtime_detect(self.detect_node)
.typescript(true) .typescript(true)
.debug(self.debug) .debug(self.debug)
.generate(&root) .generate(&root)

View File

@ -506,46 +506,19 @@ impl<'a> Context<'a> {
return return
} }
self.required_internal_exports.insert("__wbindgen_malloc"); self.required_internal_exports.insert("__wbindgen_malloc");
if self.config.nodejs_runtime_detect || self.config.nodejs { self.expose_text_encoder();
self.globals.push_str(&format!(" self.expose_uint8_memory();
function passStringToWasmNode(arg) {{ self.globals.push_str(&format!("
if (typeof(arg) !== 'string') function passStringToWasm(arg) {{
throw new Error('expected a string argument'); if (typeof(arg) !== 'string')
const buf = Buffer.from(arg); throw new Error('expected a string argument');
const len = buf.length; const buf = textEncoder().encode(arg);
const ptr = wasm.__wbindgen_malloc(len); const len = buf.length;
buf.copy(Buffer.from(wasm.memory.buffer), ptr); const ptr = wasm.__wbindgen_malloc(len);
return [ptr, len]; getUint8Memory().set(buf, ptr);
}} return [ptr, len];
")); }}
} "));
if self.config.nodejs_runtime_detect || !self.config.nodejs {
self.expose_text_encoder();
self.expose_uint8_memory();
self.globals.push_str(&format!("
function passStringToWasmBrowser(arg) {{
if (typeof(arg) !== 'string')
throw new Error('expected a string argument');
const buf = textEncoder().encode(arg);
const len = buf.length;
const ptr = wasm.__wbindgen_malloc(len);
getUint8Memory().set(buf, ptr);
return [ptr, len];
}}
"));
}
if self.config.nodejs_runtime_detect {
self.globals.push_str("
let passStringToWasm = passStringToWasmBrowser;
if (typeof window === 'undefined')
passStringToWasm = passStringToWasmNode;
");
} else if self.config.nodejs {
self.globals.push_str("const passStringToWasm = passStringToWasmNode;\n");
} else {
self.globals.push_str("const passStringToWasm = passStringToWasmBrowser;\n");
}
} }
fn expose_pass_array8_to_wasm(&mut self) { fn expose_pass_array8_to_wasm(&mut self) {
@ -625,6 +598,16 @@ impl<'a> Context<'a> {
if !self.exposed_globals.insert("text_encoder") { if !self.exposed_globals.insert("text_encoder") {
return return
} }
if self.config.nodejs {
self.globals.push_str(&format!("
const TextEncoder = require('util');
"));
} else if !self.config.browser {
self.globals.push_str(&format!("
if (typeof window === 'undefined')
var TextEncoder = require('util').TextEncoder;
"));
}
self.globals.push_str(&format!(" self.globals.push_str(&format!("
let cachedEncoder = null; let cachedEncoder = null;
function textEncoder() {{ function textEncoder() {{
@ -640,6 +623,16 @@ impl<'a> Context<'a> {
if !self.exposed_globals.insert("text_decoder") { if !self.exposed_globals.insert("text_decoder") {
return return
} }
if self.config.nodejs {
self.globals.push_str(&format!("
const TextDecoder = require('util');
"));
} else if !self.config.browser {
self.globals.push_str(&format!("
if (typeof window === 'undefined')
var TextDecoder = require('util').TextDecoder;
"));
}
self.globals.push_str(&format!(" self.globals.push_str(&format!("
let cachedDecoder = null; let cachedDecoder = null;
function textDecoder() {{ function textDecoder() {{
@ -655,39 +648,16 @@ impl<'a> Context<'a> {
if !self.exposed_globals.insert("get_string_from_wasm") { if !self.exposed_globals.insert("get_string_from_wasm") {
return return
} }
if self.config.nodejs_runtime_detect || self.config.nodejs { self.expose_text_decoder();
self.globals.push_str(&format!(" self.expose_uint8_memory();
function getStringFromWasmNode(ptr, len) {{ self.globals.push_str(&format!("
const buf = Buffer.from(wasm.memory.buffer).slice(ptr, ptr + len); function getStringFromWasm(ptr, len) {{
const ret = buf.toString(); const mem = getUint8Memory();
return ret; const slice = mem.slice(ptr, ptr + len);
}} const ret = textDecoder().decode(slice);
")); return ret;
} }}
if self.config.nodejs_runtime_detect || !self.config.nodejs { "));
self.expose_text_decoder();
self.expose_uint8_memory();
self.globals.push_str(&format!("
function getStringFromWasmBrowser(ptr, len) {{
const mem = getUint8Memory();
const slice = mem.slice(ptr, ptr + len);
const ret = textDecoder().decode(slice);
return ret;
}}
"));
}
if self.config.nodejs_runtime_detect {
self.globals.push_str("
let getStringFromWasm = getStringFromWasmBrowser;
if (typeof window === 'undefined')
getStringFromWasm = getStringFromWasmNode;
");
} else if self.config.nodejs {
self.globals.push_str("const getStringFromWasm = getStringFromWasmNode;\n");
} else {
self.globals.push_str("const getStringFromWasm = getStringFromWasmBrowser;\n");
}
} }
fn expose_get_array_js_value_from_wasm(&mut self) { fn expose_get_array_js_value_from_wasm(&mut self) {

View File

@ -17,7 +17,7 @@ pub mod wasm2es6js;
pub struct Bindgen { pub struct Bindgen {
path: Option<PathBuf>, path: Option<PathBuf>,
nodejs: bool, nodejs: bool,
nodejs_runtime_detect: bool, browser: bool,
debug: bool, debug: bool,
typescript: bool, typescript: bool,
} }
@ -36,7 +36,7 @@ impl Bindgen {
Bindgen { Bindgen {
path: None, path: None,
nodejs: false, nodejs: false,
nodejs_runtime_detect: false, browser: false,
debug: false, debug: false,
typescript: false, typescript: false,
} }
@ -52,8 +52,8 @@ impl Bindgen {
self self
} }
pub fn nodejs_runtime_detect(&mut self, detect: bool) -> &mut Bindgen { pub fn browser(&mut self, browser: bool) -> &mut Bindgen {
self.nodejs_runtime_detect = detect; self.browser = browser;
self self
} }

View File

@ -20,8 +20,8 @@ Usage:
Options: Options:
-h --help Show this screen. -h --help Show this screen.
--out-dir DIR Output directory --out-dir DIR Output directory
--nodejs Generate output for node.js, not the browser --nodejs Generate output that only works in node.js
--nodejs-runtime-detect Detect at runtime whether we're in node or a browser --browser Generate output that only works in a browser
--typescript Output a TypeScript definition file --typescript Output a TypeScript definition file
--debug Include otherwise-extraneous debug checks in output --debug Include otherwise-extraneous debug checks in output
-V --version Print the version number of wasm-bindgen -V --version Print the version number of wasm-bindgen
@ -30,7 +30,7 @@ Options:
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
struct Args { struct Args {
flag_nodejs: bool, flag_nodejs: bool,
flag_nodejs_runtime_detect: bool, flag_browser: bool,
flag_typescript: bool, flag_typescript: bool,
flag_out_dir: Option<PathBuf>, flag_out_dir: Option<PathBuf>,
flag_debug: bool, flag_debug: bool,
@ -56,7 +56,7 @@ fn main() {
let mut b = Bindgen::new(); let mut b = Bindgen::new();
b.input_path(&input) b.input_path(&input)
.nodejs(args.flag_nodejs) .nodejs(args.flag_nodejs)
.nodejs_runtime_detect(args.flag_nodejs_runtime_detect) .browser(args.browser)
.debug(args.flag_debug) .debug(args.flag_debug)
.typescript(args.flag_typescript); .typescript(args.flag_typescript);