Revision 6d3b5007
Added by Arnaud Dieumegard about 5 years ago
src/backends/VHDL/vhdl_ast_deriving.ml | ||
---|---|---|
2630 | 2630 |
cond: vhdl_expr_t ; |
2631 | 2631 |
report: vhdl_expr_t [@default IsNull]; |
2632 | 2632 |
severity: vhdl_expr_t [@default IsNull]} [@name "ASSERTION_STATEMENT"] |
2633 |
| ProcedureCall of |
|
2634 |
{ |
|
2635 |
label: vhdl_name_t [@default NoName]; |
|
2636 |
name: vhdl_name_t ; |
|
2637 |
assocs: vhdl_assoc_element_t list } [@name "PROCEDURE_CALL_STATEMENT"] |
|
2633 | 2638 |
| Wait [@name "WAIT_STATEMENT"] |
2634 | 2639 |
| Null of { |
2635 | 2640 |
label: vhdl_name_t [@default NoName]} [@name "NULL_STATEMENT"] |
... | ... | |
2644 | 2649 |
when_cond: vhdl_expr_t list ; |
2645 | 2650 |
when_stmt: vhdl_sequential_stmt_t list } |
2646 | 2651 |
|
2647 |
(* TODO Adapt for: Assert *) |
|
2652 |
(* TODO Adapt for: Assert, ProcedureCall *)
|
|
2648 | 2653 |
let rec pp_vhdl_sequential_stmt_t : |
2649 | 2654 |
Format.formatter -> vhdl_sequential_stmt_t -> Ppx_deriving_runtime.unit = |
2650 |
let __19 () = pp_vhdl_name_t |
|
2655 |
let __22 () = pp_vhdl_name_t |
|
2656 |
|
|
2657 |
and __21 () = pp_vhdl_name_t |
|
2658 |
|
|
2659 |
and __20 () = pp_vhdl_assoc_element_t |
|
2660 |
|
|
2661 |
and __19 () = pp_vhdl_name_t |
|
2651 | 2662 |
|
2652 | 2663 |
and __18 () = pp_vhdl_name_t |
2653 | 2664 |
|
... | ... | |
2820 | 2831 |
((__17 ()) fmt) aseverity; |
2821 | 2832 |
Format.fprintf fmt "@]"); |
2822 | 2833 |
Format.fprintf fmt "@]}") |
2834 |
| ProcedureCall { label = alabel; name = aname; assocs = aassocs } -> |
|
2835 |
(match alabel with |
|
2836 |
| NoName -> Format.fprintf fmt ""; |
|
2837 |
| _ -> (((__18 ()) fmt) alabel; |
|
2838 |
Format.fprintf fmt ":@ ") |
|
2839 |
); |
|
2840 |
((__19 ()) fmt) aname; |
|
2841 |
((fun x -> |
|
2842 |
Format.fprintf fmt "("; |
|
2843 |
ignore |
|
2844 |
(List.fold_left |
|
2845 |
(fun sep -> |
|
2846 |
fun x -> |
|
2847 |
if sep then Format.fprintf fmt ",@ "; |
|
2848 |
((__20 ()) fmt) x; |
|
2849 |
true) false x); |
|
2850 |
Format.fprintf fmt ")")) aassocs; |
|
2823 | 2851 |
| Wait -> Format.pp_print_string fmt "wait" |
2824 | 2852 |
| Null { label = alabel } -> |
2825 | 2853 |
(match alabel with |
... | ... | |
3068 | 3096 |
:: fields |
3069 | 3097 |
in |
3070 | 3098 |
`Assoc fields)] |
3099 |
| ProcedureCall arg0 -> |
|
3100 |
`List |
|
3101 |
[`String "PROCEDURE_CALL_STATEMENT"; |
|
3102 |
(let fields = [] in |
|
3103 |
let fields = |
|
3104 |
("assocs", |
|
3105 |
((fun x -> |
|
3106 |
`List |
|
3107 |
(List.map (fun x -> vhdl_assoc_element_t_to_yojson x) |
|
3108 |
x)) arg0.assocs)) |
|
3109 |
:: fields in |
|
3110 |
let fields = |
|
3111 |
("name", ((fun x -> vhdl_name_t_to_yojson x) arg0.name)) :: |
|
3112 |
fields in |
|
3113 |
let fields = |
|
3114 |
if arg0.label = NoName |
|
3115 |
then fields |
|
3116 |
else |
|
3117 |
("label", |
|
3118 |
(((fun x -> vhdl_name_t_to_yojson x)) arg0.label)) |
|
3119 |
:: fields |
|
3120 |
in |
|
3121 |
`Assoc fields)] |
|
3071 | 3122 |
| Wait -> `List [`String "WAIT_STATEMENT"] |
3072 | 3123 |
| Null arg0 -> |
3073 | 3124 |
`List |
... | ... | |
3367 | 3418 |
(Result.Error "Vhdl_ast.vhdl_sequential_stmt_t.cond"), |
3368 | 3419 |
(Result.Ok IsNull), (Result.Ok IsNull)) |
3369 | 3420 |
| _ -> Result.Error "Vhdl_ast.vhdl_sequential_stmt_t")) arg0 |
3421 |
| `List ((`String "PROCEDURE_CALL_STATEMENT")::arg0::[]) -> |
|
3422 |
((function |
|
3423 |
| `Assoc xs -> |
|
3424 |
let rec loop xs ((arg0,arg1,arg2) as _state) = |
|
3425 |
match xs with |
|
3426 |
| ("label",x)::xs -> |
|
3427 |
loop xs |
|
3428 |
(((fun x -> vhdl_name_t_of_yojson x) x), arg1, arg2) |
|
3429 |
| ("name",x)::xs -> |
|
3430 |
loop xs |
|
3431 |
(arg0, ((fun x -> vhdl_name_t_of_yojson x) x), arg2) |
|
3432 |
| ("assocs",x)::xs -> |
|
3433 |
loop xs |
|
3434 |
(arg0, arg1, |
|
3435 |
((function |
|
3436 |
| `List xs -> |
|
3437 |
map_bind |
|
3438 |
(fun x -> vhdl_assoc_element_t_of_yojson x) |
|
3439 |
[] xs |
|
3440 |
| _ -> |
|
3441 |
Result.Error |
|
3442 |
"Vhdl_ast.vhdl_sequential_stmt_t.assocs") x)) |
|
3443 |
| [] -> |
|
3444 |
arg2 >>= |
|
3445 |
((fun arg2 -> |
|
3446 |
arg1 >>= |
|
3447 |
(fun arg1 -> |
|
3448 |
arg0 >>= |
|
3449 |
(fun arg0 -> |
|
3450 |
Result.Ok |
|
3451 |
(ProcedureCall |
|
3452 |
{ |
|
3453 |
label = arg0; |
|
3454 |
name = arg1; |
|
3455 |
assocs = arg2 |
|
3456 |
}))))) |
|
3457 |
| _::xs -> loop xs _state in |
|
3458 |
loop xs |
|
3459 |
((Result.Ok NoName), |
|
3460 |
(Result.Error "Vhdl_ast.vhdl_sequential_stmt_t.name"), |
|
3461 |
(Result.Error "Vhdl_ast.vhdl_sequential_stmt_t.assocs")) |
|
3462 |
| _ -> Result.Error "Vhdl_ast.vhdl_sequential_stmt_t")) arg0 |
|
3370 | 3463 |
| `List ((`String "WAIT_STATEMENT")::[]) -> Result.Ok Wait |
3371 | 3464 |
| `List ((`String "NULL_STATEMENT")::arg0::[]) -> |
3372 | 3465 |
((function |
Also available in: Unified diff
Added support for ProcedureCall statements