diff options
author | Maxime Dénès <mail@maximedenes.fr> | 2013-12-30 10:40:39 -0500 |
---|---|---|
committer | Maxime Dénès <mail@maximedenes.fr> | 2013-12-30 10:40:39 -0500 |
commit | ea47086be3b724968053525e8fa795b9cdd77800 (patch) | |
tree | b888ca03e686b4c44984eb72632cdf35f260efce /kernel/nativevalues.mli | |
parent | f2087508a325bd4dae8be54ea3c6111f6b652775 (diff) |
Support for evars and metas in native compiler.
Experimental. Turned out to be much harder to implement than I thought. The main
issue is that the reification in the native compiler and the VM is not quite
untyped. Indeed, type annotations for lambdas have to be reconstructed. Hence,
when reifying an application u = t a1 ... an, the type of t has to be known or
reconstructed. It is always possible to do so in plain CIC, when u is in normal
form and its type is known. However, with partial terms this may no longer be
the case, as in: ?1 a1 ... an. So we also compile and evaluate the type of
evars and metas.
This still has to be tested more extensively, but the correction of the kernel
native conversion (on terms without evars or metas) should not be impacted.
Much of this could be reused for the VM.
Diffstat (limited to 'kernel/nativevalues.mli')
-rw-r--r-- | kernel/nativevalues.mli | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/nativevalues.mli b/kernel/nativevalues.mli index c8adb07e5..150811b72 100644 --- a/kernel/nativevalues.mli +++ b/kernel/nativevalues.mli @@ -50,6 +50,8 @@ type atom = | Acofix of t array * t array * int * t | Acofixe of t array * t array * int * t | Aprod of name * t * (t -> t) + | Ameta of metavariable * t + | Aevar of existential * t (* Constructors *) @@ -63,7 +65,9 @@ val mk_var_accu : identifier -> t val mk_sw_accu : annot_sw -> accumulator -> t -> (t -> t) val mk_prod_accu : name -> t -> t -> t val mk_fix_accu : rec_pos -> int -> t array -> t array -> t -val mk_cofix_accu : int -> t array -> t array -> t +val mk_cofix_accu : int -> t array -> t array -> t +val mk_meta_accu : metavariable -> t +val mk_evar_accu : existential -> t -> t val upd_cofix : t -> t -> unit val force_cofix : t -> t val mk_const : tag -> t |