ligo/src/main/decompile/helpers.ml
Pierre-Emmanuel Wulfman bc259fcde7 Feature/transpiler
2020-06-29 13:05:34 +00:00

79 lines
2.9 KiB
OCaml

open Trace
open Main_errors
type s_syntax = Syntax_name of string
type v_syntax = PascaLIGO | CameLIGO | ReasonLIGO
let syntax_to_variant (Syntax_name syntax) source =
match syntax, source with
"auto", Some sf ->
(match Filename.extension sf with
".ligo" | ".pligo" -> ok PascaLIGO
| ".mligo" -> ok CameLIGO
| ".religo" -> ok ReasonLIGO
| ext -> fail (syntax_auto_detection ext))
| ("pascaligo" | "PascaLIGO"), _ -> ok PascaLIGO
| ("cameligo" | "CameLIGO"), _ -> ok CameLIGO
| ("reasonligo" | "ReasonLIGO"), _ -> ok ReasonLIGO
| _ -> fail (invalid_syntax syntax)
let specialise_and_print_pascaligo program =
let%bind cst = trace cit_pascaligo_tracer @@
Tree_abstraction.Pascaligo.decompile_program program in
let%bind source = trace pretty_tracer @@
Parser.Pascaligo.pretty_print cst
in ok source
let specialise_and_print_expression_pascaligo expression =
let%bind cst = trace cit_pascaligo_tracer @@
Tree_abstraction.Pascaligo.decompile_expression expression in
let%bind source = trace pretty_tracer @@
Parser.Pascaligo.pretty_print_expression cst
in ok source
let specialise_and_print_cameligo program =
let%bind cst = trace cit_cameligo_tracer @@
Tree_abstraction.Cameligo.decompile_program program in
let%bind source = trace pretty_tracer @@
Parser.Cameligo.pretty_print cst
in ok source
let specialise_and_print_expression_cameligo expression =
let%bind cst = trace cit_cameligo_tracer @@
Tree_abstraction.Cameligo.decompile_expression expression in
let%bind source = trace pretty_tracer @@
Parser.Cameligo.pretty_print_expression cst
in ok source
let specialise_and_print_reasonligo program =
let%bind cst = trace cit_cameligo_tracer @@
Tree_abstraction.Cameligo.decompile_program program in
let%bind source = trace pretty_tracer @@
Parser.Reasonligo.pretty_print cst
in ok source
let specialise_and_print_expression_reasonligo expression =
let%bind cst = trace cit_cameligo_tracer @@
Tree_abstraction.Cameligo.decompile_expression expression in
let%bind source = trace pretty_tracer @@
Parser.Reasonligo.pretty_print_expression cst
in ok source
let specialise_and_print syntax source : (Buffer.t, _) Trace.result =
let%bind specialise_and_print =
match syntax with
PascaLIGO -> ok specialise_and_print_pascaligo
| CameLIGO -> ok specialise_and_print_cameligo
| ReasonLIGO -> ok specialise_and_print_reasonligo in
let%bind source = specialise_and_print source in
ok source
let specialise_and_print_expression syntax source =
let%bind specialise_and_print = match syntax with
PascaLIGO -> ok specialise_and_print_expression_pascaligo
| CameLIGO -> ok specialise_and_print_expression_cameligo
| ReasonLIGO -> ok specialise_and_print_expression_reasonligo in
let%bind source = specialise_and_print source in
ok source