Commit 33253fd2 authored by Michael Aaron Murphy's avatar Michael Aaron Murphy
Browse files

Ion now builds on Rust 1.27.2

parent 54c9ec73
before_script:
- apt-get update -qq
- apt-get install -qq build-essential curl git
- curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly
- curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
- source "$HOME/.cargo/env"
linux-nightly:
linux:
script:
- cargo build
- make tests
cache:
paths:
- target
redox-nightly:
redox:
variables:
CC: "x86_64-unknown-redox-gcc"
before_script:
......@@ -23,3 +26,6 @@ redox-nightly:
- rustup target add x86_64-unknown-redox
script:
- cargo build --target x86_64-unknown-redox
cache:
paths:
- target
......@@ -16,7 +16,7 @@ dependencies = [
[[package]]
name = "atty"
version = "0.2.10"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
......@@ -32,7 +32,7 @@ dependencies = [
"backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
......@@ -60,7 +60,7 @@ name = "calculate"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"decimal 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
"liner 0.4.5 (git+https://gitlab.redox-os.org/redox-os/liner)",
......@@ -82,7 +82,7 @@ version = "2.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
......@@ -171,13 +171,13 @@ dependencies = [
"ion_ranges 0.1.0",
"ion_sys 0.1.0",
"itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"liner 0.4.5 (git+https://gitlab.redox-os.org/redox-os/liner)",
"rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"small 0.1.0 (git+https://gitlab.redox-os.org/redox-os/small)",
"smallvec 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"xdg 2.1.0 (git+https://github.com/whitequark/rust-xdg)",
......@@ -189,7 +189,7 @@ version = "0.1.0"
dependencies = [
"permutate 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"small 0.1.0 (git+https://gitlab.redox-os.org/redox-os/small)",
"smallvec 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
......@@ -200,7 +200,7 @@ dependencies = [
"calculate 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"small 0.1.0 (git+https://gitlab.redox-os.org/redox-os/small)",
"smallvec 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
......@@ -234,7 +234,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "lazy_static"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
......@@ -316,19 +316,19 @@ dependencies = [
[[package]]
name = "regex"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
"memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
"utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "regex-syntax"
version = "0.6.1"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
......@@ -336,7 +336,7 @@ dependencies = [
[[package]]
name = "rustc-demangle"
version = "0.1.8"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
......@@ -356,8 +356,11 @@ source = "git+https://gitlab.redox-os.org/redox-os/small#b3d41e641b5318080c652f2
[[package]]
name = "smallvec"
version = "0.6.2"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "strsim"
......@@ -414,7 +417,7 @@ name = "thread_local"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
......@@ -501,7 +504,7 @@ source = "git+https://github.com/whitequark/rust-xdg#090afef2509d746e48d6bfa9b2e
[metadata]
"checksum aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c1c6d463cbe7ed28720b5b489e7c083eeb8f90d08be2a0d6bb9e1ffea9ce1afa"
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
"checksum atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1"
"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
"checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a"
"checksum backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "bff67d0c06556c0b8e6b5f090f0eac52d950d9dfd1d35ba04e4ca3543eaf6a7e"
"checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789"
......@@ -519,7 +522,7 @@ source = "git+https://github.com/whitequark/rust-xdg#090afef2509d746e48d6bfa9b2e
"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
"checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
"checksum itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5adb58558dcd1d786b5f0bd15f3226ee23486e24b7b58304b60f64dc68e62606"
"checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739"
"checksum lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fb497c35d362b6a331cfd94956a07fc2c78a4604cdbee844a81170386b996dd3"
"checksum libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1"
"checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2"
"checksum liner 0.4.5 (git+https://gitlab.redox-os.org/redox-os/liner)" = "<none>"
......@@ -531,13 +534,13 @@ source = "git+https://github.com/whitequark/rust-xdg#090afef2509d746e48d6bfa9b2e
"checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2"
"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
"checksum regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13c93d55961981ba9226a213b385216f83ab43bd6ac53ab16b2eeb47e337cf4e"
"checksum regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05b06a75f5217880fc5e905952a42750bf44787e56a6c6d6852ed0992f5e1d54"
"checksum rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "76d7ba1feafada44f2d38eed812bd2489a03c0f5abb975799251518b68848649"
"checksum regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5bbbea44c5490a1e84357ff28b7d518b4619a159fed5d25f6c1de2d19cc42814"
"checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d"
"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395"
"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
"checksum serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)" = "0c3adf19c07af6d186d91dae8927b83b0553d07ca56cbf7f2f32560455c91920"
"checksum small 0.1.0 (git+https://gitlab.redox-os.org/redox-os/small)" = "<none>"
"checksum smallvec 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "312a7df010092e73d6bbaf141957e868d4f30efd2bfd9bb1028ad91abec58514"
"checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8"
"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
......
......@@ -2,11 +2,13 @@
authors = [
"Michael Aaron Murphy <mmstickman@gmail.com>",
"Hunter Goldstein <hunter.d.goldstein@gmail.com>",
"Skyler Berg <skylertheberg@gmail.com>",
"Jeremy Soller <jackpot51@gmail.com>",
"Michael Gattozzi <mgattozzi@gmail.com>",
"Łukasz Niemier <lukasz@niemier.pl>",
"Skyler Berg <skylertheberg@gmail.com>",
"stratact <stratact1@gmail.com>",
"Hunter Goldstein <hunter.d.goldstein@gmail.com>",
"jD91mZM2 <me@krake.one>",
"Agustin Chiappe Berrini <jnieve@gmail.com>",
"Sag0Sag0 <Sag0Sag0@users.noreply.github.com>",
]
build = "build.rs"
description = "The Ion Shell"
......
extern crate ansi_term;
extern crate version_check;
use ansi_term::Color::{Blue, Red, White};
use version_check::supports_features;
// Specifies the minimum version needed to compile Ion.
// NOTE: 1.19 is required due to the usage of `break` with values for
// `loop` (RFC 1624, rust-lang/rust GitHub issue #37339).
......@@ -14,34 +8,6 @@ use std::{
};
fn main() {
match supports_features() {
Some(true) => (), // Success!
Some(false) => {
eprintln!(
"{} {}",
Red.bold().paint("Error:"),
White.paint("Ion requires nightly/dev to build.")
);
// print_version_err(&*version_string);
eprintln!(
"{}{}{}",
Blue.paint("Use `"),
White.paint("rustup update"),
Blue.paint("` to update to the latest nightly compiler.")
);
panic!("Aborting compilation due to incompatible compiler.")
}
_ => {
eprintln!(
"cargo:warning={}",
"Ion was unable to check rustc compatibility."
);
eprintln!(
"cargo:warning={}",
"Build may fail due to incompatible rustc version."
);
}
}
match write_version_file() {
Ok(_) => {}
Err(e) => panic!("Failed to create a version file: {:?}", e),
......
......@@ -137,10 +137,12 @@ impl<'a> Iterator for KeyIterator<'a> {
}))
}
b':' => {
return Some(self.parse_parameter(&self.data[start..self.read - 1].trim()));
let end = self.read - 1;
return Some(self.parse_parameter(&self.data[start..end].trim()));
}
b'[' => {
return Some(self.parse_array(&self.data[start..self.read - 1].trim()));
let end = self.read - 1;
return Some(self.parse_array(&self.data[start..end].trim()));
}
_ => (),
}
......
#![feature(nll)]
#[macro_use]
extern crate bitflags;
......
#![allow(unknown_lints)]
#![allow(while_let_on_iterator)]
#![feature(nll)]
#[macro_use]
extern crate bitflags;
......
......@@ -573,7 +573,8 @@ impl FlowLogic for Shell {
SUCCESS => self.previous_status = FAILURE,
_ => (),
}
self.set("?", self.previous_status.to_string());
let previous_status = self.previous_status.to_string();
self.set("?", previous_status);
}
Statement::Break => return Condition::Break,
Statement::Continue => return Condition::Continue,
......
......@@ -546,75 +546,123 @@ impl Variables {
pub fn set<T: Into<VariableType>>(&mut self, name: &str, var: T) {
let var = var.into();
match self.get_mut(&name) {
Some(VariableType::Str(ref mut str_)) => {
if !name.is_empty() {
if let VariableType::Str(var_str) = var {
if var_str.is_empty() {
self.remove_variable(name);
} else {
if name == "NS_PLUGINS" {
match &*var_str {
"0" => self.disable_plugins(),
"1" => self.enable_plugins(),
_ => eprintln!(
"ion: unsupported value for NS_PLUGINS. Value must be either 0 or 1."
),
}
return;
enum UpperAction {
Remove,
Shadow,
}
enum Action<'a> {
UpperAction(UpperAction),
ReplaceAlias(&'a mut types::Alias),
ReplaceString(&'a mut types::Str),
ReplaceArray(&'a mut types::Array),
ReplaceFunction(&'a mut Function),
ReplaceHMap(&'a mut types::HashMap),
}
let mut upper_action = None;
{
let mut action = None;
let key = self.get_mut(&name);
match key {
Some(VariableType::Str(ref mut str_)) => {
if !name.is_empty() {
if let VariableType::Str(var_str) = &var {
if var_str.is_empty() {
action = Some(Action::UpperAction(UpperAction::Remove));
} else {
action = Some(Action::ReplaceString(str_));
}
mem::replace(str_, var_str);
} else {
action = Some(Action::UpperAction(UpperAction::Shadow));
}
} else {
self.shadow(name.into(), var);
}
}
}
Some(VariableType::Alias(ref mut alias)) => {
if !name.is_empty() {
if let VariableType::Alias(var_alias) = var {
mem::replace(alias, var_alias);
} else {
self.shadow(name.into(), var);
Some(VariableType::Alias(ref mut alias)) => {
if !name.is_empty() {
if let VariableType::Alias(_) = &var {
action = Some(Action::ReplaceAlias(alias))
} else {
action = Some(Action::UpperAction(UpperAction::Shadow));
}
}
}
}
Some(VariableType::Array(ref mut array)) => {
if !name.is_empty() {
if let VariableType::Array(var_array) = var {
if var_array.is_empty() {
self.remove_variable(name);
Some(VariableType::Array(ref mut array)) => {
if !name.is_empty() {
if let VariableType::Array(var_array) = &var {
if var_array.is_empty() {
action = Some(Action::UpperAction(UpperAction::Remove));
} else {
action = Some(Action::ReplaceArray(array))
}
} else {
mem::replace(array, var_array);
action = Some(Action::UpperAction(UpperAction::Shadow));
}
} else {
self.shadow(name.into(), var);
}
}
}
Some(VariableType::HashMap(ref mut map)) => {
if !name.is_empty() {
if let VariableType::HashMap(var_map) = var {
if var_map.is_empty() {
self.remove_variable(name);
Some(VariableType::HashMap(ref mut map)) => {
if !name.is_empty() {
if let VariableType::HashMap(var_map) = &var {
if var_map.is_empty() {
action = Some(Action::UpperAction(UpperAction::Remove));
} else {
action = Some(Action::ReplaceHMap(map))
}
} else {
mem::replace(map, var_map);
action = Some(Action::UpperAction(UpperAction::Shadow));
}
} else {
self.shadow(name.into(), var);
}
}
}
Some(VariableType::Function(ref mut func)) => {
if !name.is_empty() {
if let VariableType::Function(var_func) = var {
mem::replace(func, var_func);
} else {
self.shadow(name.into(), var);
Some(VariableType::Function(ref mut func)) => {
if !name.is_empty() {
if let VariableType::Function(_) = &var {
action = Some(Action::ReplaceFunction(func))
} else {
action = Some(Action::UpperAction(UpperAction::Shadow));
}
}
}
_ => {
action = Some(Action::UpperAction(UpperAction::Shadow));
}
};
match action {
Some(Action::UpperAction(action)) => upper_action = Some((action, var)),
Some(Action::ReplaceAlias(alias)) => match var {
VariableType::Alias(mut alias_) => { mem::replace(alias, alias_); }
_ => unreachable!()
}
Some(Action::ReplaceArray(array)) => match var {
VariableType::Array(mut array_) => { mem::replace(array, array_); }
_ => unreachable!()
}
Some(Action::ReplaceString(str_)) => match var {
VariableType::Str(mut var_str) => { mem::replace(str_, var_str); }
_ => unreachable!()
}
Some(Action::ReplaceFunction(func)) => match var {
VariableType::Function(mut func_) => { mem::replace(func, func_); }
_ => unreachable!()
}
Some(Action::ReplaceHMap(hmap)) => match var {
VariableType::HashMap(mut hmap_) => { mem::replace(hmap, hmap_); }
_ => unreachable!()
}
None => ()
}
}
match upper_action {
Some((UpperAction::Remove, _)) => {
self.remove_variable(name);
}
Some((UpperAction::Shadow, var)) => {
self.shadow(name.into(), var);
}
_ => { self.shadow(name.into(), var); }
None => ()
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment