Library
Module
Module type
Parameter
Class
Class type
elpi.trace.ppx provides the following syntax extensions:
type t = a : T; b : S [@trace]
let rec f x (w@trace
) = %trace "f" (fun fmt -> .. x ..) begin
match x with
| K1 -> ...
| K2 x -> [%tcall f x]
| K2(x,y) ->
let z = f x in
[%spy "z" ~rid ~gid ~cond (fun fmt z -> .. z ..) z];
[%spyl "z" ~rid ~gid ~cond (fun fmt z -> .. z ..) zs];
[%log "K2" "whatever" 37];
let x[@trace] = ... in e
let w = { a; b = b[@trace ] } in
match w with
| { a; b = b [@trace] } ->
z + f y (b[@trace])
end
If --cookie "elpi_trace=\"true\"" is not passed to the ppx rewriter:
%trace "foo" pp code
---> code%tcall f x
---> f x%spy ...
%spyl ...
and%log ...
---> ()- f x (y
@trace
) z ---> f x z - let x
@trace
= .. in e ---> e - type x =
a : T; b : T [@trace]
---> type x =a : T
a; b = b [@trace]
--->a
(in both patterns and expressions)- T -> (S
@trace
) -> U ---> T -> U
In records, the shorcut "x" to mean "x = x" does not work, you have to use the longer form.
val err : loc:Ppxlib.Location.t -> string -> 'a
val trace :
rid:Ppxlib_ast.Ast.expression ->
loc:Ppxlib.location ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression
val spy :
loc:Ppxlib.location ->
(loc:Ppxlib.location -> unit -> Ppxlib_ast.Ast.expression) ->
?cond:Ppxlib_ast.Ast.expression ->
rid:Ppxlib_ast.Ast.expression ->
?gid:Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression list ->
Ppxlib_ast.Ast.expression
val spyl :
loc:Ppxlib.location ->
(loc:Ppxlib.location -> unit -> Ppxlib_ast.Ast.expression) ->
?cond:Ppxlib_ast.Ast.expression ->
rid:Ppxlib_ast.Ast.expression ->
?gid:Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression list ->
Ppxlib_ast.Ast.expression
val log :
loc:Ppxlib.location ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression
val cur_pred :
loc:Ppxlib.location ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression
val tcall :
loc:Ppxlib.location ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression list ->
Ppxlib_ast.Ast.expression
val enabled : bool ref
val has_iftrace_attribute : Ppxlib.attributes -> bool
val has_iftrace : Ppxlib.core_type -> bool
val map_trace : Ppxlib.Ast_traverse.map
val is_string_literal : Ppxlib.expression -> bool
val is_gid : Ppxlib.arg_label -> bool
val is_rid : Ppxlib.arg_label -> bool
val is_cond : Ppxlib.arg_label -> bool
val err_spy : loc:Ppxlib.Location.t -> unit -> 'a
val spyl_expand_function :
loc:Ppxlib.location ->
path:'a ->
Ppxlib.expression ->
Ppxlib_ast.Ast.expression
val spyl_extension : Ppxlib.Extension.t
val spyl_rule : Ppxlib.Context_free.Rule.t
val spy_expand_function :
loc:Ppxlib.location ->
path:'a ->
Ppxlib.expression ->
Ppxlib_ast.Ast.expression
val spy_extension : Ppxlib.Extension.t
val spy_rule : Ppxlib.Context_free.Rule.t
val tcall_expand_function :
loc:Ppxlib.location ->
path:'a ->
Ppxlib.expression ->
Ppxlib_ast.Ast.expression
val tcall_extension : Ppxlib.Extension.t
val tcall_rule : Ppxlib.Context_free.Rule.t
val trace_expand_function :
loc:Ppxlib.location ->
path:'a ->
Ppxlib.expression ->
Ppxlib_ast.Ast.expression
val trace_extension : Ppxlib.Extension.t
val trace_rule : Ppxlib.Context_free.Rule.t
val cur_pred_expand_function :
loc:Ppxlib.location ->
path:'a ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression
val cur_pred_extension : Ppxlib.Extension.t
val cur_pred_rule : Ppxlib.Context_free.Rule.t
val log_expand_function :
loc:Ppxlib.location ->
path:'a ->
Ppxlib_ast.Ast.expression ->
Ppxlib_ast.Ast.expression
val log_extension : Ppxlib.Extension.t
val log_rule : Ppxlib.Context_free.Rule.t
val arg_trace : Ppxlib.Driver.Cookies.t -> unit