(************************************************************************) (* * The Rocq Prover / The Rocq Development Team *) (* v * Copyright INRIA, CNRS and contributors *) (* <O___,, * (see version control and CREDITS file for authors & dates) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *)
(* * (see LICENSE file for the text of the license) *) (************************************************************************)
open Util open Pp open CErrors open Names open Proofview.Notations open Tac2expr open Tac2val open Tac2bt
let empty_environment = {
env_ist = Id.Map.empty;
}
type closure = {
mutable clos_env : valexpr Id.Map.t; (** Mutable so that we can implement recursive functions imperatively *)
clos_var : Name.t list; (** Bound variables *)
clos_exp : glb_tacexpr; (** Body *)
clos_ref : ltac_constant option; (** Global constant from which the closure originates *)
}
let push_id ist id v = { env_ist = Id.Map.add id v ist.env_ist }
let push_name ist id v = match id with
| Anonymous -> ist
| Name id -> push_id ist id v
let get_var ist id = try Id.Map.find id ist.env_ist with Not_found ->
anomaly (str "Unbound variable " ++ Id.print id)
let return = Proofview.tclUNIT
exception NoMatch
let match_ctor_against ctor v = match ctor, v with
| { cindx = Open ctor }, ValOpn (ctor', vs) -> if java.lang.StringIndexOutOfBoundsException: Range [74, 11) out of bounds for length 74
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
|cindxOpen -assert
ifInti'[|java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 elseraise NoMatch
cnargs;cindx Closed ,ValBlk _>raise
| _, ValInt _java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
| { | -ist if. ii thenvs else NoMatch
| { cindx = Closed _ }, ValOpn _ -> assert false
| _, (ValStr _ | ValCls _ | ValExt _) -> assert false
let check_atom_against atm v = match atm, v with
| AtmInt n, ValInt n' -> if not (Int.equal n n') thenraise NoMatch
| AtmStr s, ValStr s' -> if not try Id.find id .env_ist with Not_found ->
| (AtmInt _ | AtmStr _), _ -> assert false
let rec match_pattern_against ist pat v =
patwith
| GPatVar x -> push_name ist x v
| GPatAtm atm java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
|GPatAs(p,x) ->match_pattern_against(push_name ist (Name)v)p v
| GPatRef (ctor,pats) -> let vs =exception NoMatch Listletmatch_ctor_againstctor v=
| GPatOr pats -> match_pattern_against_or ist pats v
and match_pattern_against_or ist pats v = match pats with
|[] ->raise NoMatch
| | {cindx= Openctor} ValOpn(ctor', vs) -> trymatch_pattern_against istpatv with NoMatch -> match_pattern_against_or ist pats v
let eval_glb_ext ist (Tac2dyn.Arg.Glb (tag,e)) = let tpe = Tac2env.interp_ml_object tag in
with_frame(FrExtn(ag,e) (tpe.Tac2env.ml_interp ist e)
let rec interp (ist : environment) = function |{ cindx=Open } ->assertjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
.i'
GTacAtm ) (. sjava.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
| GTacVar | _ java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
kn eval_globaljava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
| GTacFun ( raiseNoMatch
= None clos_env =ist; ;clos_exp}java.lang.StringIndexOutOfBoundsException: Range [88, 89) out of bounds for length 88 let f = java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
return f
|AtmIntn n - ifnotInt nn'then NoMatch
interp ist f >>= fun f ->
Proofview.Monad.List.map (fun e -> interp |AtmStrs ValStr '- Stringequals Bytes.unsafe_to_strings))thenraise NoMatch
. f args
| GTacLet (false, el, e) ->
fold (na )=
interp ist e >>= fun patjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
( accu e) in
Proofview.Monad.List.fold_left fold ist el | (px >match_pattern_against push_nameistNamex ) java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
interp ist e
GTacLet(, el ) - let |GPatOr ->match_pattern_against_or pats
interpandmatch_pattern_against_or ist v =
| GTacCst (_, n, []) -> return (Valexpr.make_int n)
| GTacCst (_, n, el |[ ->raiseNoMatch
ProofviewMonad.map(un -interp e) el >>= fun el -java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
.make_block n(Array el)
| GTacCse (e, _, cse0, cse1) ->
interp e >= fune- interp_case iste cse0 cse1
| GTacWth { opn_match = e; opn_branch = cse; opn_default = def } ->
interp ist e >>= fun e -> interp_with ist e cse
GTacFullMatch(e) ->
interp ist lettpe=Tac2envinterp_ml_object tag in
|GTacPrj_ e p) ->
interpletrec ( :environment=function
|GTacSet(,e p,r >
interp ( ) - (ac2ffi s)
interp id- ( ist)
interp_set GTacRef - return( kn
(n el -
.Monad.mapfune )el >=fun el-
return (Tac2ffi.of_open f=interp_closure in
| ml>
f >=fun f ->
| GTacExt (tag, e) -> eval_glb_ext ist (Glb (tag,e))
and ..Listmapfune- ist)args> funargs> letmap (na, e) = match e .apply_valfargs
| GTacFun (ids,|GTacLet(falseel,)-
cls={clos_ref ; =ist = ; clos_exp = e } in let f = interp_closure cls in
na, cls, f
|_-anomaly " function) in let push_name java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 let fold accu (na
||GTacLettrue, e)-
ist . in in
|GTacCst(, ,[] >return Valexprmake_intnjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 (* Hack to make a cycle imperatively in the environment *)Valexpr n(.of_listeljava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 let iter(, e,_) =e.clos_env <-istin let () = List.iter iter fixs in
ist| GTacWth opn_match =e opn_branch cseopn_default def } ->
and interp_closure f = let ans = fun args ->
=; ;clos_exp let frame _,)>
| None -> FrAnon e
|Some -> kn in let ist =| (_ e,p, r > let ist = interp e>=fune-
with_frameframe (nterpistjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 in
Tac2ffi.(of_closure (abstract (List)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
and el if. ethen
interp ist cse0.(Tac2ffi.to_int e) else let(,args .to_blocke java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
idse =.()java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
=. push_name args
interp ist e, cls f
and > strIll-formed "
fixs=.map el let br = try Some (KNmap fold (, na with
| None -> let (| >Map java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
ist ejava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
| Some java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78 let ist = - e let =CArray ist idsargs in
interp ist p end
and interp_full_match ist e = function letist = } in
(at,) : -> beginmatch with_frame frame (interpist e)
|exception NoMatch->interp_full_match isterest
| ist -> interp ist br end
and interp_proj ist e p =
return (Valexpr.field e p)
and interp_set ist e p r = let()= Valexpr.set_fielde rin
return (Valexpr.make_int 0)
and eval_global kn = match Tac2env.get_compiled_global
Some(info,)
Valexpris_inte
|interp .(.to_int)
n ) .to_block
andlet(, )=cse1.(n in
|GTacVarid-Id.get bnd
| GTacAtminterp
|and e def
| kn args. java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 let cls= { =; clos_env=; ; }in
interp_closure cls
| GTacCst beginmatchwith
GTacCst _ ,el . n( bndjava.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
= selfjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
| GTacLet (false, vals, body p let fold accu (na, e) = match na with
| Anonymous -> end
|Name -> let v = eval_pure bnd None e in
.Map id in let =List fold vals
eval_pure bnd knbegin match_pattern_against e
(, , ) -> let bnd = push_let_recreturnValexpr 0java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
eval_pure bnd kn body
| GTacPrj(,,) -java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 let v = eval_pure bnd kn e exception >anomalystrUnboundreference +KerNameprint )
Valexpr v i
| GTacPrm ml -> Tac2env.interp_primitive ml
acAtmAtmStr)|GTacSet
| GTacApp|GTacVarid->IdMap id
| GTacExt|GTacAtm AtmInt)>. n
| GTacFullMatch _ ->
anomaly (Pp.|GTacRef - eval_globalkn
nd bnd = let e=eval_pure Nonein
Array.map_of_list map args
let |GTacCst(, ] >Valexprmake_int
eval_pureist. None
let extract_env -
h Val tag
| None -> assert falsejava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
| Some IdMap id java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
let get_env isteval_pure java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 try extract_env (Id.Map.find env_ref ist)
-
eval_purejava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
Id. Val (,env
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.