Module Scopelang.Dependency

Graph representation of the dependencies between scopes in the Catala program. Vertices are functions, x -> y if x is used in the definition of y.

Scope dependencies

type vertex =
| Scope of Shared_ast.ScopeName.t
| Topdef of Shared_ast.TopdefName.t
module SDependencies : Graph.Sig.P with type V.t = vertex and type E.label = Catala_utils.Pos.t

On the edges, the label is the expression responsible for the use of the function

val build_program_dep_graph : 'm Ast.program -> SDependencies.t
val check_for_cycle_in_defs : SDependencies.t -> unit
val get_defs_ordering : SDependencies.t -> vertex list

Type dependencies

module TVertex : sig ... end
module TVertexSet : Stdlib.Set.S with type elt = TVertex.t
module TDependencies : Graph.Sig.P with type V.t = TVertex.t and type E.label = Catala_utils.Pos.t

On the edges, the label is the expression responsible for the use of the function

val get_structs_or_enums_in_type : Shared_ast.typ -> TVertexSet.t
val build_type_graph : Shared_ast.struct_ctx -> Shared_ast.enum_ctx -> TDependencies.t
val check_type_cycles : Shared_ast.struct_ctx -> Shared_ast.enum_ctx -> TVertex.t list