fix(frontends/lean/scanner): another bug related to issue #626
This commit is contained in:
parent
ed01242bc1
commit
0502f46f9b
3 changed files with 111 additions and 28 deletions
|
@ -348,40 +348,39 @@ auto scanner::read_key_cmd_id() -> token_kind {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned i = 0;
|
unsigned i = 0;
|
||||||
token_table const * it = find(*m_tokens, cs[i]);
|
token_table const * it = m_tokens;
|
||||||
token_info const * info = nullptr;
|
token_info const * info = nullptr;
|
||||||
unsigned key_sz = 0;
|
unsigned key_sz = 0;
|
||||||
unsigned key_utf_sz = 0;
|
unsigned key_utf_sz = 0;
|
||||||
unsigned aux_num_utfs = id_utf_sz;
|
while (i < id_sz) {
|
||||||
if (it) {
|
|
||||||
if (aux_num_utfs == 0)
|
|
||||||
aux_num_utfs = 1;
|
|
||||||
info = value_of(*it);
|
|
||||||
if (info) {
|
|
||||||
lean_assert(m_uskip == 0);
|
|
||||||
key_sz = 1;
|
|
||||||
key_utf_sz = aux_num_utfs;
|
|
||||||
}
|
|
||||||
while (it) {
|
|
||||||
i++;
|
|
||||||
if (i == cs.size()) {
|
|
||||||
next_utf(cs);
|
|
||||||
num_utfs++;
|
|
||||||
aux_num_utfs = num_utfs;
|
|
||||||
}
|
|
||||||
it = find(*it, cs[i]);
|
it = find(*it, cs[i]);
|
||||||
if (it) {
|
i++;
|
||||||
|
if (!it)
|
||||||
|
break;
|
||||||
if (auto new_info = value_of(*it)) {
|
if (auto new_info = value_of(*it)) {
|
||||||
lean_assert(m_uskip == 0);
|
lean_assert(m_uskip == 0);
|
||||||
info = new_info;
|
info = new_info;
|
||||||
key_sz = i+1;
|
key_sz = i;
|
||||||
key_utf_sz = aux_num_utfs;
|
key_utf_sz = id_utf_sz; // this is imprecise if key_sz < id_sz, but this case is irrelevant
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
while (it) {
|
||||||
|
if (i == cs.size()) {
|
||||||
|
next_utf(cs);
|
||||||
|
num_utfs++;
|
||||||
|
}
|
||||||
|
it = find(*it, cs[i]);
|
||||||
|
i++;
|
||||||
|
if (!it)
|
||||||
break;
|
break;
|
||||||
}
|
if (auto new_info = value_of(*it)) {
|
||||||
|
lean_assert(m_uskip == 0);
|
||||||
|
info = new_info;
|
||||||
|
key_sz = i;
|
||||||
|
key_utf_sz = num_utfs;
|
||||||
|
lean_assert(key_sz > id_sz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
tests/lean/626c.lean
Normal file
14
tests/lean/626c.lean
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
notation `C⁽` := nat
|
||||||
|
definition foo (c : C⁽) := nat.rec_on c _ _
|
||||||
|
|
||||||
|
notation `α⁽` := nat
|
||||||
|
definition foo (c : α⁽) := nat.rec_on c _ _
|
||||||
|
|
||||||
|
notation `_⁽` := nat
|
||||||
|
definition foo (c : _⁽) := nat.rec_on c _ _
|
||||||
|
|
||||||
|
notation `C.⁽` := nat
|
||||||
|
definition foo (c : C.⁽) := nat.rec_on c _ _
|
||||||
|
|
||||||
|
notation `C⁽C⁽` := nat
|
||||||
|
definition foo (c : C⁽C⁽) := nat.rec_on c _ _
|
70
tests/lean/626c.lean.expected.out
Normal file
70
tests/lean/626c.lean.expected.out
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
626c.lean:2:27: error: don't know how to synthesize placeholder
|
||||||
|
c : C⁽
|
||||||
|
⊢ C⁽ → Type
|
||||||
|
626c.lean:2:40: error: don't know how to synthesize placeholder
|
||||||
|
c : C⁽
|
||||||
|
⊢ ?M_1
|
||||||
|
626c.lean:2:42: error: don't know how to synthesize placeholder
|
||||||
|
c : C⁽
|
||||||
|
⊢ Π (a : C⁽),
|
||||||
|
?M_1 → ?M_1
|
||||||
|
626c.lean:2:27: error: failed to add declaration 'foo' to environment, value has metavariables
|
||||||
|
remark: set 'formatter.hide_full_terms' to false to see the complete term
|
||||||
|
λ (c : C⁽),
|
||||||
|
nat.rec_on c ?M_2 ?M_3
|
||||||
|
626c.lean:5:27: error: don't know how to synthesize placeholder
|
||||||
|
c : α⁽
|
||||||
|
⊢ α⁽ → Type
|
||||||
|
626c.lean:5:40: error: don't know how to synthesize placeholder
|
||||||
|
c : α⁽
|
||||||
|
⊢ ?M_1
|
||||||
|
626c.lean:5:42: error: don't know how to synthesize placeholder
|
||||||
|
c : α⁽
|
||||||
|
⊢ Π (a : α⁽),
|
||||||
|
?M_1 → ?M_1
|
||||||
|
626c.lean:5:27: error: failed to add declaration 'foo' to environment, value has metavariables
|
||||||
|
remark: set 'formatter.hide_full_terms' to false to see the complete term
|
||||||
|
λ (c : α⁽),
|
||||||
|
nat.rec_on c ?M_2 ?M_3
|
||||||
|
626c.lean:8:27: error: don't know how to synthesize placeholder
|
||||||
|
c : _⁽
|
||||||
|
⊢ _⁽ → Type
|
||||||
|
626c.lean:8:40: error: don't know how to synthesize placeholder
|
||||||
|
c : _⁽
|
||||||
|
⊢ ?M_1
|
||||||
|
626c.lean:8:42: error: don't know how to synthesize placeholder
|
||||||
|
c : _⁽
|
||||||
|
⊢ Π (a : _⁽),
|
||||||
|
?M_1 → ?M_1
|
||||||
|
626c.lean:8:27: error: failed to add declaration 'foo' to environment, value has metavariables
|
||||||
|
remark: set 'formatter.hide_full_terms' to false to see the complete term
|
||||||
|
λ (c : _⁽),
|
||||||
|
nat.rec_on c ?M_2 ?M_3
|
||||||
|
626c.lean:11:28: error: don't know how to synthesize placeholder
|
||||||
|
c : C.⁽
|
||||||
|
⊢ C.⁽ → Type
|
||||||
|
626c.lean:11:41: error: don't know how to synthesize placeholder
|
||||||
|
c : C.⁽
|
||||||
|
⊢ ?M_1
|
||||||
|
626c.lean:11:43: error: don't know how to synthesize placeholder
|
||||||
|
c : C.⁽
|
||||||
|
⊢ Π (a : C.⁽),
|
||||||
|
?M_1 → ?M_1
|
||||||
|
626c.lean:11:28: error: failed to add declaration 'foo' to environment, value has metavariables
|
||||||
|
remark: set 'formatter.hide_full_terms' to false to see the complete term
|
||||||
|
λ (c : C.⁽),
|
||||||
|
nat.rec_on c ?M_2 ?M_3
|
||||||
|
626c.lean:14:29: error: don't know how to synthesize placeholder
|
||||||
|
c : C⁽C⁽
|
||||||
|
⊢ C⁽C⁽ → Type
|
||||||
|
626c.lean:14:42: error: don't know how to synthesize placeholder
|
||||||
|
c : C⁽C⁽
|
||||||
|
⊢ ?M_1
|
||||||
|
626c.lean:14:44: error: don't know how to synthesize placeholder
|
||||||
|
c : C⁽C⁽
|
||||||
|
⊢ Π (a : C⁽C⁽),
|
||||||
|
?M_1 → ?M_1
|
||||||
|
626c.lean:14:29: error: failed to add declaration 'foo' to environment, value has metavariables
|
||||||
|
remark: set 'formatter.hide_full_terms' to false to see the complete term
|
||||||
|
λ (c : C⁽C⁽),
|
||||||
|
nat.rec_on c ?M_2 ?M_3
|
Loading…
Reference in a new issue