Library zoo.ltac2.Debug
From zoo Require Import
prelude.
From zoo.ltac2 Require
Message
Constr.
From zoo Require Import
options.
Ltac2 rec dump constr :=
match Constr.Unsafe.kind constr with
| Constr.Unsafe.Rel i ⇒
Message.print (Message.concat (Message.of_string "Rel ") (Message.of_int i))
| Constr.Unsafe.Var _ ⇒
Message.print_string "Var"
| Constr.Unsafe.Meta _ ⇒
Message.print_string "Meta"
| Constr.Unsafe.Evar _ _ ⇒
Message.print_string "Evar"
| Constr.Unsafe.Sort _ ⇒
Message.print_string "Sort"
| Constr.Unsafe.Cast _ _ _ ⇒
Message.print_string "Cast"
| Constr.Unsafe.Prod _ _ ⇒
Message.print_string "Prod"
| Constr.Unsafe.Lambda bdr constr ⇒
Message.print_string "Lambda" ;
dump (Constr.Binder.type bdr) ;
dump constr
| Constr.Unsafe.LetIn _ _ _ ⇒
Message.print_string "LetIn"
| Constr.Unsafe.App _ constrs ⇒
Message.print_string "App" ;
Array.iter dump constrs
| Constr.Unsafe.Constant _ _ ⇒
Message.print_string "Constant"
| Constr.Unsafe.Ind _ind _inst ⇒
Message.print_string "Ind"
| Constr.Unsafe.Constructor _ _ ⇒
Message.print_string "Constructor"
| Constr.Unsafe.Case _ (constr1, _) inv constr2 brs ⇒
Message.print_string "Case" ;
dump constr1 ;
match inv with
| Constr.Unsafe.NoInvert ⇒
Message.print_string "NoInvert"
| Constr.Unsafe.CaseInvert constrs ⇒
Message.print_string "CaseInvert" ;
Array.iter dump constrs
end ;
dump constr2 ;
Array.iter dump brs
| Constr.Unsafe.Fix _ _ _ _ ⇒
Message.print_string "Fix"
| Constr.Unsafe.CoFix _ _ _ ⇒
Message.print_string "CoFix"
| Constr.Unsafe.Proj _ _ _ ⇒
Message.print_string "Proj"
| Constr.Unsafe.Uint63 _ ⇒
Message.print_string "Uint63"
| Constr.Unsafe.Float _ ⇒
Message.print_string "Float"
| Constr.Unsafe.String _ ⇒
Message.print_string "String"
| Constr.Unsafe.Array _ _ _ _ ⇒
Message.print_string "Array"
end.
prelude.
From zoo.ltac2 Require
Message
Constr.
From zoo Require Import
options.
Ltac2 rec dump constr :=
match Constr.Unsafe.kind constr with
| Constr.Unsafe.Rel i ⇒
Message.print (Message.concat (Message.of_string "Rel ") (Message.of_int i))
| Constr.Unsafe.Var _ ⇒
Message.print_string "Var"
| Constr.Unsafe.Meta _ ⇒
Message.print_string "Meta"
| Constr.Unsafe.Evar _ _ ⇒
Message.print_string "Evar"
| Constr.Unsafe.Sort _ ⇒
Message.print_string "Sort"
| Constr.Unsafe.Cast _ _ _ ⇒
Message.print_string "Cast"
| Constr.Unsafe.Prod _ _ ⇒
Message.print_string "Prod"
| Constr.Unsafe.Lambda bdr constr ⇒
Message.print_string "Lambda" ;
dump (Constr.Binder.type bdr) ;
dump constr
| Constr.Unsafe.LetIn _ _ _ ⇒
Message.print_string "LetIn"
| Constr.Unsafe.App _ constrs ⇒
Message.print_string "App" ;
Array.iter dump constrs
| Constr.Unsafe.Constant _ _ ⇒
Message.print_string "Constant"
| Constr.Unsafe.Ind _ind _inst ⇒
Message.print_string "Ind"
| Constr.Unsafe.Constructor _ _ ⇒
Message.print_string "Constructor"
| Constr.Unsafe.Case _ (constr1, _) inv constr2 brs ⇒
Message.print_string "Case" ;
dump constr1 ;
match inv with
| Constr.Unsafe.NoInvert ⇒
Message.print_string "NoInvert"
| Constr.Unsafe.CaseInvert constrs ⇒
Message.print_string "CaseInvert" ;
Array.iter dump constrs
end ;
dump constr2 ;
Array.iter dump brs
| Constr.Unsafe.Fix _ _ _ _ ⇒
Message.print_string "Fix"
| Constr.Unsafe.CoFix _ _ _ ⇒
Message.print_string "CoFix"
| Constr.Unsafe.Proj _ _ _ ⇒
Message.print_string "Proj"
| Constr.Unsafe.Uint63 _ ⇒
Message.print_string "Uint63"
| Constr.Unsafe.Float _ ⇒
Message.print_string "Float"
| Constr.Unsafe.String _ ⇒
Message.print_string "String"
| Constr.Unsafe.Array _ _ _ _ ⇒
Message.print_string "Array"
end.