Skip to content
Snippets Groups Projects
Commit f3db6964 authored by Allan Blanchard's avatar Allan Blanchard
Browse files

Merge branch 'fix/acsl/polymorphic-inductive' into 'master'

[ACSL] Type var of polymorphic inductives are not in scope in cases anymore

See merge request frama-c/frama-c!4143
parents 79d3ffaf e98f3658
No related branches found
No related tags found
No related merge requests found
...@@ -1657,10 +1657,11 @@ logic_def: ...@@ -1657,10 +1657,11 @@ logic_def:
exit_type_variables_scope (); exit_type_variables_scope ();
LDpredicate_def (id, labels, tvars, $3, $5) } LDpredicate_def (id, labels, tvars, $3, $5) }
/* inductive predicate definition */ /* inductive predicate definition */
| INDUCTIVE poly_id parameters LBRACE indcases RBRACE | INDUCTIVE pred = poly_id params = parameters
{ let (id,labels,tvars) = $2 in midrule({exit_type_variables_scope()})
exit_type_variables_scope (); LBRACE cases = indcases RBRACE
LDinductive_def(id, labels, tvars, $3, $5) } { let (id,labels,tvars) = pred in
LDinductive_def(id, labels, tvars, params, cases) }
| LEMMA poly_id COLON lexpr SEMICOLON | LEMMA poly_id COLON lexpr SEMICOLON
{ let (id,labels,tvars) = $2 in { let (id,labels,tvars) = $2 in
exit_type_variables_scope (); exit_type_variables_scope ();
......
[kernel] Parsing polymorphic_inductive.i (no preprocessing)
/* Generated by Frama-C */
/*@
inductive P<A>(A i, \list<A> s) {
case one<A>: ∀ A a, \list<A> s; \Cons(a, s) ≡ [| a |] ⇒ P(a, s);
}
*/
/*@ inductive P<A>(A i, \list<A> s){
case one<A>:
\forall A a, \list<A> s ; \Cons(a, s) == [| a |] ==> P(a, s);
}
*/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment