package mopsa

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module Lang.Ast

Python AST

Constants

type MopsaLib.constant +=
  1. | C_py_ellipsis
  2. | C_py_none
  3. | C_py_not_implemented
  4. | C_py_imag of float

Types

type py_type =
  1. | Bool
  2. | NotImplemented
  3. | Complex
  4. | NoneType
  5. | Bytes
  6. | Str
  7. | Int
  8. | Float of Universal.Lang.Ast.float_prec
type MopsaLib.typ +=
  1. | T_py of py_type option

Python-specific types

val is_py_exp : MopsaLib.expr -> bool

Expressions

type py_object = MopsaLib.addr * MopsaLib.expr option

Python objects

optional value representation

val compare_py_object : py_object -> py_object -> int
type MopsaLib.operator +=
  1. | O_py_and
    (*

    and

    *)
  2. | O_py_or
    (*

    or

    *)
  3. | O_py_floor_div
    (*

    //

    *)
  4. | O_py_is
    (*

    is

    *)
  5. | O_py_is_not
    (*

    is not

    *)
  6. | O_py_in
    (*

    in

    *)
  7. | O_py_not_in
    (*

    not in

    *)
  8. | O_py_mat_mult
    (*

    @

    *)
  9. | O_py_not
val is_arith_op : MopsaLib.operator -> bool
val is_arith_binop_fun : string -> string -> bool
val is_arith_div_fun : string -> string -> bool
val is_reverse_operator : string -> bool
val is_comp_op : MopsaLib.operator -> bool
val is_compare_op_fun : string -> string -> bool
type py_lambda = {
  1. py_lambda_body : MopsaLib.expr;
    (*

    Body.

    *)
  2. py_lambda_parameters : MopsaLib.var list;
    (*

    list of parameters variables

    *)
  3. py_lambda_defaults : MopsaLib.expr option list;
    (*

    list of default parameters values

    *)
}

Lambda functions.

type MopsaLib.expr_kind +=
  1. | E_py_undefined of bool
  2. | E_py_object of py_object
  3. | E_py_list of MopsaLib.expr list
  4. | E_py_index_subscript of MopsaLib.expr * MopsaLib.expr
    (*

    index

    *)
  5. | E_py_slice_subscript of MopsaLib.expr * MopsaLib.expr * MopsaLib.expr * MopsaLib.expr
    (*

    step

    *)
  6. | E_py_attribute of MopsaLib.expr * string
    (*

    attribute name

    *)
  7. | E_py_dict of MopsaLib.expr list * MopsaLib.expr list
    (*

    values

    *)
  8. | E_py_set of MopsaLib.expr list
  9. | E_py_generator_comprehension of MopsaLib.expr * (MopsaLib.expr * MopsaLib.expr * MopsaLib.expr list) list
    (*

    list of comprehensions

    *)
  10. | E_py_list_comprehension of MopsaLib.expr * (MopsaLib.expr * MopsaLib.expr * MopsaLib.expr list) list
    (*

    list of comprehensions

    *)
  11. | E_py_set_comprehension of MopsaLib.expr * (MopsaLib.expr * MopsaLib.expr * MopsaLib.expr list) list
    (*

    list of comprehensions

    *)
  12. | E_py_dict_comprehension of MopsaLib.expr * MopsaLib.expr * (MopsaLib.expr * MopsaLib.expr * MopsaLib.expr list) list
    (*

    list of comprehensions

    *)
  13. | E_py_call of MopsaLib.expr * MopsaLib.expr list * (string option * MopsaLib.expr) list
    (*

    keywords (None id for **kwargs)

    *)
  14. | E_py_yield of MopsaLib.expr
  15. | E_py_yield_from of MopsaLib.expr
  16. | E_py_if of MopsaLib.expr * MopsaLib.expr * MopsaLib.expr
    (*

    orelse

    *)
  17. | E_py_tuple of MopsaLib.expr list
  18. | E_py_bytes of string
  19. | E_py_lambda of py_lambda
  20. | E_py_multi_compare of MopsaLib.expr * MopsaLib.operator list * MopsaLib.expr list
  21. | E_py_annot of MopsaLib.expr
  22. | E_py_check_annot of MopsaLib.expr * MopsaLib.expr
    (*

    low-level hasattribute working at the object level only

    *)
  23. | E_py_ll_hasattr of MopsaLib.expr * MopsaLib.expr
    (*

    attribute name

    *)
  24. | E_py_ll_getattr of MopsaLib.expr * MopsaLib.expr
    (*

    attribute name

    *)
  25. | E_py_ll_setattr of MopsaLib.expr * MopsaLib.expr * MopsaLib.expr option

Statements

type py_fundec = {
  1. py_func_var : MopsaLib.var;
    (*

    function object variable

    *)
  2. py_func_parameters : MopsaLib.var list;
    (*

    list of parameters variables

    *)
  3. py_func_defaults : MopsaLib.expr option list;
    (*

    list of default parameters values

    *)
  4. py_func_vararg : MopsaLib.var option;
  5. py_func_kwonly_args : MopsaLib.var list;
  6. py_func_kwonly_defaults : MopsaLib.expr option list;
  7. py_func_kwarg : MopsaLib.var option;
  8. py_func_locals : MopsaLib.var list;
    (*

    list of local variables

    *)
  9. py_func_body : MopsaLib.stmt;
    (*

    function body

    *)
  10. py_func_is_generator : bool;
    (*

    is the function a generator?

    *)
  11. py_func_decors : MopsaLib.expr list;
  12. py_func_types_in : MopsaLib.expr option list;
  13. py_func_type_out : MopsaLib.expr option;
  14. py_func_range : MopsaLib.range;
    (*

    range of the function

    *)
  15. py_func_ret_var : MopsaLib.var;
  16. py_func_cellvars : MopsaLib.var list;
  17. py_func_freevars : MopsaLib.var list;
}

Python function descriptor

type py_func_sig = {
  1. py_funcs_parameters : MopsaLib.var list;
  2. py_funcs_defaults : bool list;
  3. py_funcs_exceptions : MopsaLib.expr list;
  4. py_funcs_types_in : MopsaLib.expr option list;
  5. py_funcs_type_out : MopsaLib.expr option;
}
type py_func_annot = {
  1. py_funca_var : MopsaLib.var;
  2. py_funca_decors : MopsaLib.expr list;
  3. py_funca_range : MopsaLib.range;
  4. py_funca_ret_var : MopsaLib.var;
  5. py_funca_sig : py_func_sig list;
}
val pp_py_func_sig : Format.formatter -> py_func_sig -> unit
val compare_py_func_sig : py_func_sig -> py_func_sig -> int
val pp_py_func_annot : Format.formatter -> py_func_annot -> unit
type py_clsdec = {
  1. py_cls_var : MopsaLib.var;
    (*

    class object variable

    *)
  2. py_cls_body : MopsaLib.stmt;
  3. py_cls_static_attributes : MopsaLib.var list;
    (*

    list of declared attributes: static variables and methods

    *)
  4. py_cls_bases : MopsaLib.expr list;
    (*

    base classes

    *)
  5. py_cls_decors : MopsaLib.expr list;
  6. py_cls_keywords : (string option * MopsaLib.expr) list;
    (*

    keywords (None id for **kwargs)

    *)
  7. py_cls_range : MopsaLib.range;
    (*

    range of the class

    *)
}

A Python class

type py_cls_annot = {
  1. py_cls_a_var : MopsaLib.var;
  2. py_cls_a_body : MopsaLib.stmt;
  3. py_cls_a_bases : MopsaLib.expr list;
  4. py_cls_a_abases : MopsaLib.expr list;
  5. py_cls_a_static_attributes : MopsaLib.var list;
  6. py_cls_a_range : MopsaLib.range;
}
type py_excpt = {
  1. py_excpt_type : MopsaLib.expr option;
    (*

    exception class. None is used for the default except

    *)
  2. py_excpt_name : MopsaLib.var option;
    (*

    optional name of exception instance

    *)
  3. py_excpt_body : MopsaLib.stmt;
    (*

    body of the except handler

    *)
}

Exception handler

type MopsaLib.stmt_kind +=
  1. | S_py_class of py_clsdec
  2. | S_py_function of py_fundec
  3. | S_py_try of MopsaLib.stmt * py_excpt list * MopsaLib.stmt * MopsaLib.stmt
    (*

    final body

    *)
  4. | S_py_raise of MopsaLib.expr option
  5. | S_py_if of MopsaLib.expr * MopsaLib.stmt * MopsaLib.stmt
  6. | S_py_while of MopsaLib.expr * MopsaLib.stmt * MopsaLib.stmt
  7. | S_py_multi_assign of MopsaLib.expr list * MopsaLib.expr
  8. | S_py_aug_assign of MopsaLib.expr * MopsaLib.operator * MopsaLib.expr
  9. | S_py_annot of MopsaLib.expr * MopsaLib.expr
  10. | S_py_check_annot of MopsaLib.expr * MopsaLib.expr
  11. | S_py_for of MopsaLib.expr * MopsaLib.expr * MopsaLib.stmt * MopsaLib.stmt
    (*

    else

    *)
  12. | S_py_import of string * MopsaLib.var option * MopsaLib.var
    (*

    root module

    *)
  13. | S_py_import_from of string * string * MopsaLib.var * MopsaLib.var
    (*

    module var

    *)
  14. | S_py_delete of MopsaLib.expr
  15. | S_py_assert of MopsaLib.expr * MopsaLib.expr option
    (*

    message

    *)
  16. | S_py_with of MopsaLib.expr * MopsaLib.expr option * MopsaLib.stmt
    (*

    body

    *)

Statements

Programs

type MopsaLib.prog_kind +=
  1. | Py_program of string * MopsaLib.var list * MopsaLib.stmt
    (*

    body

    *)
module K : sig ... end

Flow-insensitive context to keep the analyzed C program

val py_program_ctx : ('a, string * MopsaLib.var list * MopsaLib.stmt) Mopsa_analyzer__Framework__Core__Context.ctx_key

Set the Python program in the flow

val get_py_program : 'a Mopsa_analyzer.MopsaLib.Flow.flow -> string * MopsaLib.var list * MopsaLib.stmt

Get the Python program from the flow

Utility functions

val mk_py_in : ?strict:bool -> ?left_strict:bool -> ?right_strict:bool -> ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr -> MopsaLib.expr -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_not : ?esynthetic:bool -> MopsaLib.expr -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_except : MopsaLib.expr option -> MopsaLib.var option -> MopsaLib.stmt -> py_excpt
val mk_raise : ?ssynthetic:bool -> MopsaLib.expr -> Mopsa_utils.Core.Location.range -> MopsaLib.stmt
val mk_py_call : ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr list -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_kall : ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr list -> (string option * MopsaLib.expr) list -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_attr : ?esynthetic:bool -> MopsaLib.expr -> string -> ?etyp:MopsaLib.typ -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_index_subscript : ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr -> ?etyp:MopsaLib.typ -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_object : ?esynthetic:bool -> (MopsaLib.addr * MopsaLib.expr option) -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_object_attr : ?esynthetic:bool -> (MopsaLib.addr * MopsaLib.expr option) -> string -> ?etyp:MopsaLib.typ -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_bool : ?esynthetic:bool -> bool -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_top : ?esynthetic:bool -> MopsaLib.typ -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val object_of_expr : MopsaLib.expr -> py_object
val mk_py_none : ?esynthetic:bool -> Mopsa_utils.Core.Location.range -> MopsaLib.expr

Decorators

val is_stub_fundec : py_fundec -> bool
val is_builtin_fundec : py_fundec -> bool
val is_builtin_clsdec : py_clsdec -> bool
val is_unsupported_fundec : py_fundec -> bool
val is_unsupported_clsdec : py_clsdec -> bool
val builtin_fundec_name : py_fundec -> string
val builtin_clsdec_name : py_clsdec -> string
val builtin_type_name : string -> py_fundec -> string
val py_and : MopsaLib.expr -> MopsaLib.expr -> ?esynthetic:bool -> ?etyp:MopsaLib.typ -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_ll_hasattr : ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_ll_getattr : ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_ll_setattr : ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr -> MopsaLib.expr -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
val mk_py_ll_delattr : ?esynthetic:bool -> MopsaLib.expr -> MopsaLib.expr -> Mopsa_utils.Core.Location.range -> MopsaLib.expr
OCaml

Innovation. Community. Security.