diff --git a/src/compile.rs b/src/compile.rs index 355b23a3a9..ed0a93939e 100644 --- a/src/compile.rs +++ b/src/compile.rs @@ -178,18 +178,19 @@ impl Compiler { } self.fill_to_next(dotstar_patch.hole); + let mut prev_hole = Hole::None; for (i, expr) in exprs[0..exprs.len() - 1].iter().enumerate() { + self.fill_to_next(prev_hole); let split = self.push_split_hole(); let Patch { hole, entry } = try!(self.c_capture(0, expr)); self.fill_to_next(hole); self.compiled.matches.push(self.insts.len()); self.push_compiled(Inst::Match(i)); - - let next = self.insts.len(); - self.fill_split(split, Some(entry), Some(next)); + prev_hole = self.fill_split(split, Some(entry), None); } let i = exprs.len() - 1; - let Patch { hole, .. } = try!(self.c_capture(0, &exprs[i])); + let Patch { hole, entry } = try!(self.c_capture(0, &exprs[i])); + self.fill(prev_hole, entry); self.fill_to_next(hole); self.compiled.matches.push(self.insts.len()); self.push_compiled(Inst::Match(i)); diff --git a/tests/set.rs b/tests/set.rs index 52b1b0dead..70cfba830f 100644 --- a/tests/set.rs +++ b/tests/set.rs @@ -15,6 +15,7 @@ matset!(set14, &[r".*", "a"], "zzzzzz", 0); matset!(set15, &[r"\ba\b"], "hello a bye", 0); matset!(set16, &["a"], "a", 0); matset!(set17, &[".*a"], "a", 0); +matset!(set18, &["a", "β"], "β", 1); nomatset!(nset1, &["a", "a"], "b"); nomatset!(nset2, &["^foo", "bar$"], "bar foo");