diff --git a/spec/compiler/rules/character_set_spec.cc b/spec/compiler/rules/character_set_spec.cc index eb17f78b..551779a5 100644 --- a/spec/compiler/rules/character_set_spec.cc +++ b/spec/compiler/rules/character_set_spec.cc @@ -108,6 +108,12 @@ describe("character sets", []() { CharacterSet set2({ {'c', 'y'} }); AssertThat(set1.intersect(set2), Equals(CharacterSet({ {'c', 'e'}, {'w', 'y'} }))); }); + + it("works for some sets", []() { + CharacterSet set1({ {'i', 'i'} }); + CharacterSet set2({ {'a', 'z'} }); + AssertThat(set1.intersect(set2), Equals(CharacterSet({ {'i', 'i'} }))); + }); }); }); diff --git a/src/compiler/rules/character_set.cc b/src/compiler/rules/character_set.cc index 888762b5..f8fe2afe 100644 --- a/src/compiler/rules/character_set.cc +++ b/src/compiler/rules/character_set.cc @@ -111,6 +111,8 @@ namespace tree_sitter { } else if (new_max <= max_int(range)) { new_ranges.insert(CharacterRange(new_max + 1, range.max)); add_range(&removed_set, CharacterRange(range.min, new_max)); + } else { + add_range(&removed_set, range); } } else if (new_min <= max_int(range)) { if (new_max < max_int(range)) {