2017-10-23 03:01:00 +00:00
|
|
|
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
|
|
|
// file at the top-level directory of this distribution and at
|
|
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
|
|
// option. This file may not be copied, modified, or distributed
|
|
|
|
// except according to those terms.
|
|
|
|
|
|
|
|
//! System bindings for the wasm/web platform
|
|
|
|
//!
|
|
|
|
//! This module contains the facade (aka platform-specific) implementations of
|
|
|
|
//! OS level functionality for wasm. Note that this wasm is *not* the emscripten
|
|
|
|
//! wasm, so we have no runtime here.
|
|
|
|
//!
|
|
|
|
//! This is all super highly experimental and not actually intended for
|
|
|
|
//! wide/production use yet, it's still all in the experimental category. This
|
|
|
|
//! will likely change over time.
|
|
|
|
//!
|
|
|
|
//! Currently all functions here are basically stubs that immediately return
|
|
|
|
//! errors. The hope is that with a portability lint we can turn actually just
|
|
|
|
//! remove all this and just omit parts of the standard library if we're
|
|
|
|
//! compiling for wasm. That way it's a compile time error for something that's
|
|
|
|
//! guaranteed to be a runtime error!
|
|
|
|
|
|
|
|
use io;
|
|
|
|
use os::raw::c_char;
|
|
|
|
|
|
|
|
// Right now the wasm backend doesn't even have the ability to print to the
|
|
|
|
// console by default. Wasm can't import anything from JS! (you have to
|
|
|
|
// explicitly provide it).
|
|
|
|
//
|
|
|
|
// Sometimes that's a real bummer, though, so this flag can be set to `true` to
|
|
|
|
// enable calling various shims defined in `src/etc/wasm32-shim.js` which should
|
|
|
|
// help receive debug output and see what's going on. In general this flag
|
|
|
|
// currently controls "will we call out to our own defined shims in node.js",
|
|
|
|
// and this flag should always be `false` for release builds.
|
|
|
|
const DEBUG: bool = false;
|
|
|
|
|
|
|
|
pub mod args;
|
2018-01-07 02:54:02 +00:00
|
|
|
#[cfg(feature = "backtrace")]
|
2017-10-23 03:01:00 +00:00
|
|
|
pub mod backtrace;
|
|
|
|
pub mod cmath;
|
|
|
|
pub mod condvar;
|
|
|
|
pub mod env;
|
|
|
|
pub mod fs;
|
|
|
|
pub mod memchr;
|
|
|
|
pub mod mutex;
|
|
|
|
pub mod net;
|
|
|
|
pub mod os;
|
|
|
|
pub mod os_str;
|
|
|
|
pub mod path;
|
|
|
|
pub mod pipe;
|
|
|
|
pub mod process;
|
|
|
|
pub mod rwlock;
|
|
|
|
pub mod stack_overflow;
|
|
|
|
pub mod thread;
|
|
|
|
pub mod thread_local;
|
|
|
|
pub mod time;
|
|
|
|
pub mod stdio;
|
|
|
|
|
|
|
|
#[cfg(not(test))]
|
|
|
|
pub fn init() {
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn unsupported<T>() -> io::Result<T> {
|
|
|
|
Err(unsupported_err())
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn unsupported_err() -> io::Error {
|
|
|
|
io::Error::new(io::ErrorKind::Other,
|
|
|
|
"operation not supported on wasm yet")
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn decode_error_kind(_code: i32) -> io::ErrorKind {
|
|
|
|
io::ErrorKind::Other
|
|
|
|
}
|
|
|
|
|
|
|
|
// This enum is used as the storage for a bunch of types which can't actually
|
|
|
|
// exist.
|
|
|
|
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
|
|
|
|
pub enum Void {}
|
|
|
|
|
|
|
|
pub unsafe fn strlen(mut s: *const c_char) -> usize {
|
|
|
|
let mut n = 0;
|
|
|
|
while *s != 0 {
|
|
|
|
n += 1;
|
|
|
|
s = s.offset(1);
|
|
|
|
}
|
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
|
|
|
pub unsafe fn abort_internal() -> ! {
|
|
|
|
::intrinsics::abort();
|
|
|
|
}
|
|
|
|
|
|
|
|
// We don't have randomness yet, but I totally used a random number generator to
|
|
|
|
// generate these numbers.
|
|
|
|
//
|
|
|
|
// More seriously though this is just for DOS protection in hash maps. It's ok
|
|
|
|
// if we don't do that on wasm just yet.
|
|
|
|
pub fn hashmap_random_keys() -> (u64, u64) {
|
|
|
|
(1, 2)
|
|
|
|
}
|