Skip to content

Commit 9a580c2

Browse files
committed
---
yaml --- r: 63318 b: refs/heads/snap-stage3 c: e990239 h: refs/heads/master v: v3
1 parent 8eec3a7 commit 9a580c2

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 2d28d645422c1617be58c8ca7ad9a457264ca850
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: c9e234a1ae7b631ca058f2331a3986630b5d1b64
4+
refs/heads/snap-stage3: e990239a3ae9bafc22e1fa363110ec125dc0be09
55
refs/heads/try: 7b78b52e602bb3ea8174f9b2006bff3315f03ef9
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libextra/terminfo/parm.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
1313
use core::prelude::*;
1414
use core::{char, int, vec};
15+
use core::iterator::IteratorUtil;
1516

1617
#[deriving(Eq)]
1718
enum States {
@@ -60,15 +61,12 @@ impl Variables {
6061
To be compatible with ncurses, `vars` should be the same between calls to `expand` for
6162
multiple capabilities for the same terminal.
6263
*/
63-
pub fn expand(cap: &[u8], params: &mut [Param], vars: &mut Variables)
64+
pub fn expand(cap: &[u8], params: &[Param], vars: &mut Variables)
6465
-> Result<~[u8], ~str> {
65-
assert!(cap.len() != 0, "expanding an empty capability makes no sense");
66-
assert!(params.len() <= 9, "only 9 parameters are supported by capability strings");
67-
6866
let mut state = Nothing;
6967
let mut i = 0;
7068

71-
// expanded cap will only rarely be smaller than the cap itself
69+
// expanded cap will only rarely be larger than the cap itself
7270
let mut output = vec::with_capacity(cap.len());
7371

7472
let mut cur;
@@ -77,6 +75,12 @@ pub fn expand(cap: &[u8], params: &mut [Param], vars: &mut Variables)
7775

7876
let mut intstate = ~[];
7977

78+
// Copy parameters into a local vector for mutability
79+
let mut mparams = [Number(0), ..9];
80+
for mparams.mut_iter().zip(params.iter()).advance |(dst, &src)| {
81+
*dst = src;
82+
}
83+
8084
while i < cap.len() {
8185
cur = cap[i] as char;
8286
let mut old_state = state;
@@ -163,7 +167,7 @@ pub fn expand(cap: &[u8], params: &mut [Param], vars: &mut Variables)
163167
Number(x) => stack.push(Number(!x)),
164168
_ => return Err(~"non-number on stack with %~")
165169
},
166-
'i' => match (copy params[0], copy params[1]) {
170+
'i' => match (copy mparams[0], copy mparams[1]) {
167171
(Number(ref mut x), Number(ref mut y)) => {
168172
*x += 1;
169173
*y += 1;
@@ -176,7 +180,7 @@ pub fn expand(cap: &[u8], params: &mut [Param], vars: &mut Variables)
176180
},
177181
PushParam => {
178182
// params are 1-indexed
179-
stack.push(copy params[char::to_digit(cur, 10).expect("bad param number") - 1]);
183+
stack.push(copy mparams[char::to_digit(cur, 10).expect("bad param number") - 1]);
180184
},
181185
SetVar => {
182186
if cur >= 'A' && cur <= 'Z' {

0 commit comments

Comments
 (0)