Scopelang.Ast
Abstract syntax tree of the scope language
type location = Shared_ast.scopelang Shared_ast.glocation
type 'm expr = (Shared_ast.scopelang, 'm) Shared_ast.gexpr
val locations_used : 'm expr -> LocationSet.t
type 'm rule =
| ScopeVarDefinition of {
var : Shared_ast.ScopeVar.t * Catala_utils.Pos.t list;
Scope variable and its list of definitions' positions
*)typ : Shared_ast.typ;
io : Desugared.Ast.io;
e : 'm expr;
}
| SubScopeVarDefinition of {
var : Shared_ast.ScopeVar.t * Catala_utils.Pos.t list;
Variable within the current scope
*)var_within_origin_scope : Shared_ast.ScopeVar.t;
typ : Shared_ast.typ;
e : 'm expr;
}
| Assertion of 'm expr
type scope_var_ty = {
svar_in_ty : Shared_ast.typ;
svar_out_ty : Shared_ast.typ;
svar_io : Desugared.Ast.io;
}
type 'm scope_decl = {
scope_decl_name : Shared_ast.ScopeName.t;
scope_sig : scope_var_ty Shared_ast.ScopeVar.Map.t;
scope_decl_rules : 'm rule list;
scope_options : Desugared.Ast.catala_option Catala_utils.Mark.pos list;
scope_visibility : Shared_ast.visibility;
}
type 'm program = {
program_module_name : (Shared_ast.ModuleName.t * Shared_ast.module_intf_id)
option;
program_ctx : Shared_ast.decl_ctx;
program_modules : 'm scope_decl Catala_utils.Mark.pos
Shared_ast.ScopeName.Map.t
Shared_ast.ModuleName.Map.t;
program_scopes : 'm scope_decl Catala_utils.Mark.pos Shared_ast.ScopeName.Map.t;
program_topdefs : ('m expr * Shared_ast.typ * Shared_ast.visibility * bool)
Shared_ast.TopdefName.Map.t;
program_lang : Catala_utils.Global.backend_lang;
}
val type_program : 'm program -> Shared_ast.typed program