Skip to content

Commit d531be9

Browse files
authored
Merge pull request #35 from vorner/error
Implements Error for StackError, replace gcc with cc
2 parents 8ca7fe0 + 170fcc8 commit d531be9

File tree

5 files changed

+36
-8
lines changed

5 files changed

+36
-8
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ sudo: false
22
language: rust
33
rust:
44
- nightly
5-
- 1.9.0
5+
- stable
66

77
os:
88
- linux

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ kernel32-sys = "0.2"
2929
winapi = "0.2"
3030

3131
[build-dependencies]
32-
gcc = "0.3"
32+
cc = "~1"
3333

3434
[features]
3535
nightly = []

benches/context.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ fn resume_reference_perf(b: &mut Bencher) {
3434
fn resume(b: &mut Bencher) {
3535
extern "C" fn yielder(mut t: Transfer) -> ! {
3636
loop {
37-
t = t.context.resume(1);
37+
t = unsafe { t.context.resume(1) };
3838
}
3939
}
4040

4141
let stack = FixedSizeStack::default();
42-
let mut t = Transfer::new(Context::new(&stack, yielder), 0);
42+
let mut t = Transfer::new(unsafe { Context::new(&stack, yielder) }, 0);
4343

4444
b.iter(|| unsafe {
4545
t = mem::transmute_copy::<_, Transfer>(&t).context.resume(0);
@@ -50,7 +50,7 @@ fn resume(b: &mut Bencher) {
5050
fn resume_ontop(b: &mut Bencher) {
5151
extern "C" fn yielder(mut t: Transfer) -> ! {
5252
loop {
53-
t = t.context.resume(1);
53+
t = unsafe { t.context.resume(1) };
5454
}
5555
}
5656

@@ -59,7 +59,7 @@ fn resume_ontop(b: &mut Bencher) {
5959
}
6060

6161
let stack = FixedSizeStack::default();
62-
let mut t = Transfer::new(Context::new(&stack, yielder), 0);
62+
let mut t = Transfer::new(unsafe { Context::new(&stack, yielder) }, 0);
6363

6464
b.iter(|| unsafe {
6565
t = mem::transmute_copy::<_, Transfer>(&t).context.resume_ontop(0, ontop_function);

build.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// http://opensource.org/licenses/MIT>, at your option. This file may not be
66
// copied, modified, or distributed except according to those terms.
77

8-
extern crate gcc;
8+
extern crate cc;
99

1010
use std::path::PathBuf;
1111
use std::env;
@@ -65,7 +65,7 @@ fn main() {
6565

6666
let prefixes = ["jump", "make", "ontop"];
6767
let base_path: PathBuf = ["src", "asm"].iter().collect();
68-
let mut config = gcc::Config::new();
68+
let mut config = cc::Build::new();
6969

7070
config.define("BOOST_CONTEXT_EXPORT", None);
7171

src/stack.rs

+28
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// http://opensource.org/licenses/MIT>, at your option. This file may not be
66
// copied, modified, or distributed except according to those terms.
77

8+
use std::error::Error;
9+
use std::fmt::{Display, Formatter, Result as FmtResult};
810
use std::io;
911
use std::ops::Deref;
1012
use std::os::raw::c_void;
@@ -21,6 +23,32 @@ pub enum StackError {
2123
IoError(io::Error),
2224
}
2325

26+
impl Display for StackError {
27+
fn fmt(&self, fmt: &mut Formatter) -> FmtResult {
28+
match *self {
29+
StackError::ExceedsMaximumSize(size) => {
30+
write!(fmt, "Requested more than max size of {} bytes for a stack", size)
31+
},
32+
StackError::IoError(ref e) => e.fmt(fmt),
33+
}
34+
}
35+
}
36+
37+
impl Error for StackError {
38+
fn description(&self) -> &str {
39+
match *self {
40+
StackError::ExceedsMaximumSize(_) => "exceeds maximum stack size",
41+
StackError::IoError(ref e) => e.description(),
42+
}
43+
}
44+
fn cause(&self) -> Option<&Error> {
45+
match *self {
46+
StackError::ExceedsMaximumSize(_) => None,
47+
StackError::IoError(ref e) => Some(e),
48+
}
49+
}
50+
}
51+
2452
/// Represents any kind of stack memory.
2553
///
2654
/// `FixedSizeStack` as well as `ProtectedFixedSizeStack`

0 commit comments

Comments
 (0)