diff --git a/src/libstd/mtypes.rs b/src/libstd/mtypes.rs new file mode 100644 index 0000000000000..cddea420cc836 --- /dev/null +++ b/src/libstd/mtypes.rs @@ -0,0 +1,64 @@ +/* + +Module: mtypes + +Machine type equivalents of rust int, uint, float, and complex. + +Types useful for interop with C when writing bindings that exist +for different types (float, f32, f64, ...; cf float.rs for an example) +*/ + +export m_int, m_uint, m_float; + +// PORT Change this when porting to a new architecture + +/* +Type: m_int + +Machine type equivalent of an int +*/ +#[cfg(target_arch="x86")] +type m_int = i32; +#[cfg(target_arch="x86_64")] +type m_int = i64; + +// PORT Change this when porting to a new architecture + +/* +Type: m_uint + +Machine type equivalent of a uint +*/ +#[cfg(target_arch="x86")] +type m_uint = u32; +#[cfg(target_arch="x86_64")] +type m_uint = u64; + +// PORT *must* match with "import m_float = fXX" in std::math per arch + +/* +Type: m_float + +Machine type equivalent of a float +*/ +type m_float = f64; + +// PORT *must* match "import m_complex = ..." in std::complex per arch + +/* +FIXME Type m_complex + +Machine type representing a complex value that uses floats for +both the real and the imaginary part. +*/ +// type m_complex = complex_c64::t; + +// +// Local Variables: +// mode: rust +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// End: +// diff --git a/src/test/compile-fail/non-triv-cast-be.rs b/src/test/compile-fail/non-triv-cast-be.rs index 74a0e4da2880a..458013a912c9c 100644 --- a/src/test/compile-fail/non-triv-cast-be.rs +++ b/src/test/compile-fail/non-triv-cast-be.rs @@ -1,7 +1,5 @@ // error-pattern: non-trivial cast of tail-call return value -use std; - -import ctypes::*; +import core::mtypes::*; fn foo_float() -> m_float { ret 0.0 as m_float; } fn bar_float() -> bool { be foo_float() as bool; } diff --git a/src/test/run-pass/triv-cast-be.rs b/src/test/run-pass/triv-cast-be.rs index 96ab736c5255a..0fbb1ad283009 100644 --- a/src/test/run-pass/triv-cast-be.rs +++ b/src/test/run-pass/triv-cast-be.rs @@ -1,6 +1,8 @@ -use std; +import core::ctypes::*; -import ctypes::*; +import core::mtypes::m_float; +import core::mtypes::m_int; +import core::mtypes::m_uint; fn foo_float() -> m_float { ret 0.0 as m_float; } fn bar_float() -> float { be foo_float() as float; } diff --git a/src/test/run-pass/triv-cast-const.rs b/src/test/run-pass/triv-cast-const.rs index 5aae65ea384d1..0880fc82c48db 100644 --- a/src/test/run-pass/triv-cast-const.rs +++ b/src/test/run-pass/triv-cast-const.rs @@ -1,6 +1,4 @@ -use std; - -import ctypes::*; +import core::mtypes::m_int; // This will be more interesting once there is support // for consts that refer to other consts, i.e. math_f64::consts::pi as m_float