2022-03-04 21:25:06 +03:00
|
|
|
(* This file is part of the Catala compiler, a specification language for tax
|
|
|
|
and social benefits computation rules. Copyright (C) 2020 Inria,
|
|
|
|
contributors: Denis Merigoux <denis.merigoux@inria.fr>, Emile Rolley
|
|
|
|
<emile.rolley@tuta.io>
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
|
|
use this file except in compliance with the License. You may obtain a copy of
|
|
|
|
the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
License for the specific language governing permissions and limitations under
|
|
|
|
the License. *)
|
|
|
|
|
2022-11-21 12:46:17 +03:00
|
|
|
open Catala_utils
|
2022-03-04 20:32:03 +03:00
|
|
|
|
2022-03-04 21:25:06 +03:00
|
|
|
val main : unit -> unit
|
|
|
|
(** Main program entry point, including command-line parsing and return code *)
|
2023-06-15 18:37:52 +03:00
|
|
|
|
2023-06-28 16:57:52 +03:00
|
|
|
(** Compiler passes
|
2023-06-15 18:37:52 +03:00
|
|
|
|
2023-06-28 16:57:52 +03:00
|
|
|
Each pass takes only its cli options, then calls upon its dependent passes
|
|
|
|
(forwarding their options as needed) *)
|
|
|
|
module Passes : sig
|
2023-11-20 18:01:06 +03:00
|
|
|
val surface : Cli.options -> Surface.Ast.program
|
2023-06-15 18:37:52 +03:00
|
|
|
|
2023-06-28 16:57:52 +03:00
|
|
|
val desugared :
|
|
|
|
Cli.options ->
|
2023-09-27 12:01:43 +03:00
|
|
|
includes:Cli.raw_file list ->
|
2023-06-28 16:57:52 +03:00
|
|
|
Desugared.Ast.program * Desugared.Name_resolution.context
|
2023-06-15 18:37:52 +03:00
|
|
|
|
2023-06-28 16:57:52 +03:00
|
|
|
val scopelang :
|
|
|
|
Cli.options ->
|
2023-09-27 12:01:43 +03:00
|
|
|
includes:Cli.raw_file list ->
|
2023-06-28 16:57:52 +03:00
|
|
|
Shared_ast.untyped Scopelang.Ast.program
|
|
|
|
|
|
|
|
val dcalc :
|
|
|
|
Cli.options ->
|
2023-09-27 12:01:43 +03:00
|
|
|
includes:Cli.raw_file list ->
|
2023-06-28 16:57:52 +03:00
|
|
|
optimize:bool ->
|
|
|
|
check_invariants:bool ->
|
2023-11-02 16:36:55 +03:00
|
|
|
typed:'m Shared_ast.mark ->
|
2023-12-01 01:53:38 +03:00
|
|
|
'm Dcalc.Ast.program * Scopelang.Dependency.TVertex.t list
|
2023-06-28 16:57:52 +03:00
|
|
|
|
|
|
|
val lcalc :
|
|
|
|
Cli.options ->
|
2023-09-27 12:01:43 +03:00
|
|
|
includes:Cli.raw_file list ->
|
2023-06-28 16:57:52 +03:00
|
|
|
optimize:bool ->
|
|
|
|
check_invariants:bool ->
|
2023-11-02 16:36:55 +03:00
|
|
|
typed:'m Shared_ast.mark ->
|
2023-06-28 16:57:52 +03:00
|
|
|
avoid_exceptions:bool ->
|
|
|
|
closure_conversion:bool ->
|
2023-12-19 17:01:06 +03:00
|
|
|
monomorphize_types:bool ->
|
2024-01-22 18:49:58 +03:00
|
|
|
Shared_ast.typed Lcalc.Ast.program * Scopelang.Dependency.TVertex.t list
|
2023-06-28 16:57:52 +03:00
|
|
|
|
|
|
|
val scalc :
|
|
|
|
Cli.options ->
|
2023-09-27 12:01:43 +03:00
|
|
|
includes:Cli.raw_file list ->
|
2023-06-28 16:57:52 +03:00
|
|
|
optimize:bool ->
|
|
|
|
check_invariants:bool ->
|
|
|
|
avoid_exceptions:bool ->
|
|
|
|
closure_conversion:bool ->
|
2023-12-07 18:58:22 +03:00
|
|
|
keep_special_ops:bool ->
|
2023-12-11 19:08:32 +03:00
|
|
|
dead_value_assignment:bool ->
|
|
|
|
no_struct_literals:bool ->
|
2023-12-19 17:01:06 +03:00
|
|
|
monomorphize_types:bool ->
|
2023-12-01 01:53:38 +03:00
|
|
|
Scalc.Ast.program * Scopelang.Dependency.TVertex.t list
|
2023-06-28 16:57:52 +03:00
|
|
|
end
|
|
|
|
|
|
|
|
module Commands : sig
|
|
|
|
(** Helper functions used by top-level commands *)
|
|
|
|
|
|
|
|
val get_output :
|
|
|
|
?ext:string ->
|
|
|
|
Cli.options ->
|
2023-09-27 12:01:43 +03:00
|
|
|
Cli.raw_file option ->
|
2023-06-28 16:57:52 +03:00
|
|
|
string option * ((out_channel -> 'a) -> 'a)
|
|
|
|
(** bounded open of the expected output file *)
|
2023-06-15 18:37:52 +03:00
|
|
|
|
2023-06-28 16:57:52 +03:00
|
|
|
val get_output_format :
|
|
|
|
?ext:string ->
|
|
|
|
Cli.options ->
|
2023-09-27 12:01:43 +03:00
|
|
|
Cli.raw_file option ->
|
2023-06-28 16:57:52 +03:00
|
|
|
string option * ((Format.formatter -> 'a) -> 'a)
|
|
|
|
|
2023-12-01 01:53:38 +03:00
|
|
|
val get_scope_uid : Shared_ast.decl_ctx -> string -> Shared_ast.ScopeName.t
|
2023-06-28 16:57:52 +03:00
|
|
|
|
|
|
|
val get_variable_uid :
|
|
|
|
Desugared.Name_resolution.context ->
|
|
|
|
Shared_ast.ScopeName.t ->
|
|
|
|
string ->
|
|
|
|
Desugared.Ast.ScopeDef.t
|
|
|
|
|
|
|
|
val commands : unit Cmdliner.Cmd.t list
|
|
|
|
(** The list of built-in catala subcommands, as expected by
|
|
|
|
[Cmdliner.Cmd.group] *)
|
|
|
|
end
|
|
|
|
|
|
|
|
(** Various helpers *)
|
|
|
|
|
|
|
|
val modname_of_file : string -> string
|
|
|
|
|
|
|
|
(** API available to plugins for their own registration *)
|
|
|
|
|
|
|
|
module Plugin : sig
|
|
|
|
val register :
|
|
|
|
string ->
|
|
|
|
?man:Cmdliner.Manpage.block list ->
|
|
|
|
?doc:string ->
|
|
|
|
(Cli.options -> unit) Cmdliner.Term.t ->
|
2023-06-15 18:37:52 +03:00
|
|
|
unit
|
|
|
|
end
|